{"version":3,"file":"assets/chunk.b5d4ae3672024155f3ba.js","mappings":"mOAoBO,IAAMA,GAAaC,GAIrBC,EAAAA,EAAAA,OAAM,eAAcC,GAMpBD,EAAAA,EAAAA,OAAM,mBAAkBE,GAMxBC,EAAAA,EAAAA,IAAG,oBAAqB,GAAEC,GAW1BC,EAAAA,EAAAA,UAAS,6BAA4BC,EA3BnC,cAA8DC,EAAAA,EAAaC,WAAAA,GAAA,SAAAC,YAC9EC,EAAAA,EAAAA,GAAA,cAAAC,EAAA,OAMAD,EAAAA,EAAAA,GAAA,kBAAAE,EAAA,OAMAF,EAAAA,EAAAA,GAAA,wBAAAG,EAAA,OAMAH,EAAAA,EAAAA,GAAA,sBAAAI,EAAA,MAQA,cACIC,GACA,QAAQC,EAAAA,EAAAA,UAASC,KAAKC,YAAc,IAAIC,QAAQC,GAASA,EAAKC,WAClE,CAKAC,QAAAA,GACIL,KAAKM,KAAKC,mBAAmBP,KAAKC,WAAWC,QAAQC,GAASA,EAAKC,WAAUI,KAAKL,GAASA,EAAKM,QACpG,GACHf,GAAAgB,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,UAAA7B,GAAA,CAAA8B,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAApB,GAAAe,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,cAAA3B,GAAA,CAAA4B,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAnB,GAAAc,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,oBAAA1B,GAAA,CAAA2B,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAlB,GAAAa,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,kBAhBIK,EAAAA,SAAO,CAAAJ,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAAkBf,KAAKF,UAAU,KAAAY,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,cAAAxB,GAAA8B,OAAAC,yBAAA7B,EAAAsB,UAAA,cAAAtB,EAAAsB,WAAAtB,E,gKCzC7C,SAAA8B,E,SAAAA,uBAAA,giEAAAC,IAAA,CAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,OAAAC,EAAAA,GAAAC,EAAAA,EAAAC,EAAAA,GAAAC,EAAAA,GAAA,kB,iBCYA,IAGqBC,GAAmBzC,EAAzB,cAAkCR,EAAAA,EAK7CkD,uBAAAA,CAAwBC,GACpBhC,KAAKiC,iBAAiB,CAACD,IAAUA,EAAO5B,SAC5C,CAMA6B,gBAAAA,CAAiBC,EAAyB9B,GACtC,MAAM+B,EAASD,EAAQ1B,KAAKwB,GAAWA,EAAOvB,QAC9C,IAAI2B,EAAiBpC,KAAKC,WACrBC,QACImC,GACGA,EAAIjC,WAEH+B,EAAOG,SAASD,EAAI5B,SAE5BD,KAAK6B,GAAQA,EAAI5B,QAElBL,IACAgC,EAAiBA,EAAeX,OAAOU,IAG3CnC,KAAKM,KAAKC,mBAAmB6B,EAAe5B,KAAKC,GAAUA,EAAM8B,aACrE,CAOAC,uBAAAA,GAEQxC,KAAKF,WACLE,KAAKiC,iBAAiBjC,KAAKC,YAAY,GAEvCD,KAAKyC,gBAAkBzC,KAAKyC,cAEpC,CAMAC,oBAAAA,GACQ1C,KAAKF,aAAeE,KAAKyC,iBACzBzC,KAAKyC,gBAAiB,EAE9B,IACH/B,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,2BAlDIgC,EAAAA,QAAM1B,OAAAC,yBAAA7B,EAAAsB,UAAA,2BAAAtB,EAAAsB,YAAAD,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,oBAQNgC,EAAAA,QAAM1B,OAAAC,yBAAA7B,EAAAsB,UAAA,oBAAAtB,EAAAsB,YAAAD,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,2BAuBNgC,EAAAA,QAAM1B,OAAAC,yBAAA7B,EAAAsB,UAAA,2BAAAtB,EAAAsB,YAAAD,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,wBAaNgC,EAAAA,QAAM1B,OAAAC,yBAAA7B,EAAAsB,UAAA,wBAAAtB,EAAAsB,WAAAtB,IAhD6BuD,EAAAA,EAAAA,sBAAAC,EAAAf,E,2MCfxC,SAAAX,EAAAA,EAAAA,uBAAA,4tBAAAC,IAAA,CAAAS,EAAAA,EAAAiB,EAAAA,GAAA,kB,eCkBe,MAAMC,UAAwCzD,EAAAA,EACzD,gBAAI0D,GACA,MAAM,WAAEC,EAAU,MAAEC,GAAUlD,KAAKM,KACnC,OAAO4C,EAAM1C,KAAKL,IACP,CACHgD,KAAMhD,EAAKgD,KACXC,WAAYjD,EAAKkD,IAAMJ,EACvBK,QAASnD,EAAKoD,MAAOD,WAGjC,GACHV,EAAAA,EAAAA,sBAAAC,EAXoBE,G,wIClBrB,SAAA5B,EAAAA,EAAAA,uBAAA,89BAAAC,IAAA,CAAAoC,EAAAA,EAAAC,EAAAA,EAAAjC,EAAAA,EAAAkC,EAAAA,EAAAjC,EAAAA,OAAAC,EAAAA,IAAA,kB,sCCwBO,MAAMiC,EAAW,CACpB,CAACC,EAAAA,WAAY,SACb,CAACC,EAAAA,MAAO,QACR,CAACC,EAAAA,YAAa,SACd,CAACC,EAAAA,MAAO,SACR,CAACC,EAAAA,OAAQ,SACT,CAACC,EAAAA,YAAa,aACd,CAACC,EAAAA,YAAa,QACd,CAACC,EAAAA,gBAAiB,SAClB,CAACC,EAAAA,aAAc,SACf,CAACC,EAAAA,OAAQ,QACT,CAACC,EAAAA,mBAAoB,eAGZC,EAAgB,CACzBC,SAAU,OACVC,KAAM,sBACR,IAYmBC,GAAgC5F,GADpD6F,EAAAA,EAAAA,GAAS,CAAEC,KAAM,mDAAmD5F,GAKhED,EAAAA,EAAAA,OAAM,iBAAgBE,GAGtBF,EAAAA,EAAAA,OAAM,mBAAkBI,GAGxBJ,EAAAA,EAAAA,OAAM,wBAAuB8F,GAG7B9F,EAAAA,EAAAA,OAAM,yBAAwB+F,GAG9B1F,EAAAA,EAAAA,UAAS,cAAa2F,GAStB3F,EAAAA,EAAAA,UAAS,YAAW4F,GAKpB5F,EAAAA,EAAAA,UAAS,kBAAmB,oBAAmB6F,GAS/C7F,EAAAA,EAAAA,UAAS,kBAAmB,YAAWN,GAAAoG,EAxC5C,cAC8D5F,EAAAA,EAAqDC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,YAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,kBAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,gBAAAG,EAAA,OAAAH,EAAAA,EAAAA,GAAA,kBAAAI,EAAA,OAAAJ,EAAAA,EAAAA,GAAA,uBAAA0F,EAAA,OAAA1F,EAAAA,EAAAA,GAAA,wBAAA2F,EAAA,MAgB/G,YACIC,GACA,OAAIrF,KAAKsF,YAAchB,EAAAA,kBACZX,EAAS3D,KAAKsF,YAGlB,WAAP7D,OAAkBkC,EAAS3D,KAAKsF,aAAe,SACnD,CAEA,gBACIC,GACA,OAAOhB,EAAcvE,KAAKwF,WAAa,uBAC3C,CAEA,aACIC,GACA,OAAIzF,KAAK0F,gBACE,IAAM1F,KAAK2F,mBAGf,IAAM3F,KAAK4F,WAAWC,oBAAoBC,EAAAA,mBACrD,CAEA,mBACIC,GACA,OAAO/F,KAAK0F,gBAAkB1F,KAAKwF,SAAW,eAClD,GACH9F,GAAAgB,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,QA1CIqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAApB,GAAAe,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,cACPqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAnB,GAAAc,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,YAAA3B,GAAA,CAAA4B,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAlB,GAAAa,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,cAAA1B,GAAA,CAAA2B,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAoE,GAAAzE,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,mBAAAxB,GAAA,CAAAyB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAqE,GAAA1E,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,oBAAAkE,GAAA,CAAAjE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,YAAAmE,GAAA7D,OAAAC,yBAAAgE,EAAAvE,UAAA,YAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,gBAAAoE,GAAA9D,OAAAC,yBAAAgE,EAAAvE,UAAA,gBAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,aAAAqE,GAAA/D,OAAAC,yBAAAgE,EAAAvE,UAAA,aAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,mBAAAsE,GAAAhE,OAAAC,yBAAAgE,EAAAvE,UAAA,mBAAAuE,EAAAvE,WAqCgCtB,EArChC6F,KAAA7F,IAFyCuD,EAAAA,EAAAA,sBAAAC,EAAA6B,G,sCCrDrD,UAAAvD,EAAAA,EAAAA,uBAAA,+0BAAAC,IAAA,CAAAoC,EAAAA,EAAA3B,EAAAA,EAAAH,EAAAA,IAAA,kBCcMuE,GAAyCC,OAC/C,IAAAtD,EAAAA,EAAAA,sBAAAC,GAAeoD,I,gBCff,UAAA9E,EAAAA,EAAAA,uBAAA,w2BAAAC,IAAA,CAAA+E,GAAAA,EAAA1C,EAAAA,EAAA2C,GAAAC,GAAAA,GAAA,kB,OCGuB,IAUFC,IADpB3B,EAAAA,EAAAA,GAAS,CAAEC,KAAM,iDAAkD9F,CAAAO,GAApE,cACsEC,EAAAA,MAA+DD,IAAxEuD,EAAAA,EAAAA,sBAAAC,GAAAyD,ICb7D,UAAAnF,EAAAA,EAAAA,uBAAA,2/HAAAC,IAAA,CAAAmF,EAAAA,EAAAC,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAnF,EAAAA,EAAAiC,EAAAA,EAAAmD,EAAAA,EAAArF,EAAAA,EAAAI,EAAAA,EAAAkF,EAAAA,EAAAC,EAAAC,IAAA,kB,uDCgDA,IAKqBC,IAASlI,IAD7B6F,EAAAA,EAAAA,GAAS,CAAEC,KAAM,+BAA+B5F,IAW5CD,EAAAA,EAAAA,OAAM,8BAA6BE,IAanCgI,EAAAA,EAAAA,OAAM,iCAAkC,GAAE9H,IAM1CD,EAAAA,EAAAA,IAAG,iCAAkC,GAAE2F,IAMvCzF,EAAAA,EAAAA,UAAS,cAAa0F,IAQtB1F,EAAAA,EAAAA,UAAS,WAAY,8CAA6C2F,IAQlE3F,EAAAA,EAAAA,UAAS,WAAY,uCAAsC4F,IAkC3D5F,EAAAA,EAAAA,UAAS,cAAaN,IAAAoG,GAtF3B,cACuC5F,EAAAA,EAA6BC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,sBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,kBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,YAAAG,GAAA,OAAAH,EAAAA,EAAAA,GAAA,yBAAAI,GAAA,OAOhEJ,EAAAA,EAAAA,GAAA,gBAAA0F,GAAA,OAaA1F,EAAAA,EAAAA,GAAA,4BAAA2F,GAAA,OAMA3F,EAAAA,EAAAA,GAAA,0BAAAyH,GAAA,MAVA,oBAAIC,GAA0C,IAAAC,EAC1C,OAAiC,QAAjCA,EAAOpH,KAAKM,KAAK6G,wBAAgB,IAAAC,EAAAA,EAAItF,EAAAA,CACzC,CAiBA,SACIoB,GAAuC,IAAAmE,EACvC,OAAsB,QAAtBA,EAAOrH,KAAKM,KAAK4C,aAAK,IAAAmE,EAAAA,EAAK,EAC/B,CAKA,oBACIC,GACA,OAAOtH,KAAKuH,UAAYvH,KAAKM,KAAKkH,qCACtC,CAKA,kCACIC,GACA,OACIzH,KAAKuH,UACLvH,KAAKM,KAAKoH,gCACV1H,KAAK4F,WAAW+B,cAAcC,EAAAA,aAC9B5H,KAAK4F,WAAW+B,cAAcE,EAAAA,yBAEtC,CAEA,4BAAIC,GACA,OAAO9H,KAAKM,KAAKgF,YAAcjB,EAAAA,KACnC,CAKQ0D,4BAAAA,GAAqC,IAAAC,EAEzC,MAAMrF,EAAwC,QAAlCqF,EAAGhI,KAAKM,KAAK2H,mBAAmB,UAAE,IAAAD,OAAA,EAA/BA,EAAiCrF,OAE5CA,GAEAA,GAER,CAKQuF,kCAAAA,GACJlI,KAAK4F,WAAWC,oBAAoBsC,EAAAA,kBAAmB,MAC3D,CAEA,iBACIC,GACA,MAAO,CACH,CACI/E,GAAI,EACJF,KAAMnD,KAAKqI,KAAKC,EAAE,uBAClB/E,MAAOvD,KAAK4F,WAAW2C,aAAaX,EAAAA,aAExC,CACIvE,GAAI,EACJF,KAAMnD,KAAKqI,KAAKC,EAAE,qBAClB/E,MAAOvD,KAAK4F,WAAW2C,aAAaV,EAAAA,2BAGhD,CAKQW,wBAAAA,GACJxI,KAAKyI,mBAAqBzI,KAAKyI,iBACnC,GACH/I,IAAAgB,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,kBA1GIqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAApB,IAAAe,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,cACPqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAnB,IAAAc,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,QACPqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAlB,IAAAa,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,qBAEPK,EAAAA,SAAO,CAAAJ,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAAqB,CAAK,IAAAoE,IAAAzE,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,YAAA3B,IAAA,CAAA4B,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAqE,IAAA1E,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,wBAAA1B,IAAA,CAAA2B,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAmG,IAAAxG,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,sBAAAxB,IAAA,CAAAyB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,SAAAkE,IAAA5D,OAAAC,yBAAAgE,GAAAvE,UAAA,SAAAuE,GAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,oBAAAmE,IAAA7D,OAAAC,yBAAAgE,GAAAvE,UAAA,oBAAAuE,GAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,kCAAAoE,IAAA9D,OAAAC,yBAAAgE,GAAAvE,UAAA,kCAAAuE,GAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,gCA+DjCgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,GAAAvE,UAAA,gCAAAuE,GAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,sCAaNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,GAAAvE,UAAA,sCAAAuE,GAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,iBAAAqE,IAAA/D,OAAAC,yBAAAgE,GAAAvE,UAAA,iBAAAuE,GAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,GAAAvE,UAAA,4BAuBNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,GAAAvE,UAAA,4BAAAuE,GAAAvE,WAnBgBtB,GAmBhB6F,MAAA7F,KAxGmBuD,EAAAA,EAAAA,sBAAAC,GAAAmE,G,0SCrD9B,SAAA7F,E,SAAAA,uBAAA,s9EAAAC,IAAA,CAAAC,EAAAA,EAAAqH,EAAAA,EAAAjF,EAAAA,EAAAkF,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,GAAA,kB,oBCgDA,SAASC,IAKP,IAJEC,EAAYxJ,UAAAyJ,OAAA,QAAAC,IAAA1J,UAAA,GAAAA,UAAA,GAAG2J,EAAAA,UACfC,EAAY5J,UAAAyJ,OAAA,QAAAC,IAAA1J,UAAA,GAAAA,UAAA,GAlBE,EAmBd6J,EAAU7J,UAAAyJ,OAAA,QAAAC,IAAA1J,UAAA,GAAAA,UAAA,GAAG8J,EAAAA,GACbC,EAAY/J,UAAAyJ,OAAA,QAAAC,IAAA1J,UAAA,GAAAA,UAAA,QAAG0J,EAGXM,EAvBU,EAkCd,OAVIJ,GAAgBC,OACKH,IAAjBK,GAA8BF,EAAaC,EAAAA,GAAiBC,EAC5DC,GAAqBD,EAAeF,EAEpCG,GAAqBF,EAAAA,GAElBD,EAAaD,EAAeE,EAAAA,KACnCE,GAAqBF,EAAAA,IAGlB,CACHG,SAASC,EAAAA,EAAAA,gBAAeV,GACxBW,UAAWP,EACXQ,QAASP,EAAaG,EAE9B,CAOA,IAOqBK,GAAa/K,GADjC6F,EAAAA,EAAAA,GAAS,CAAEC,KAAM,8BAA8B5F,GAuD3CI,EAAAA,EAAAA,UAAS,oBAAqB,mBAAkBH,GAoIhDF,EAAAA,EAAAA,OAAM,+CAA8CD,GAAAoG,EA3LzD,cAC2C5F,KAAUC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,YAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,sBAAAE,EAAA,OAAAmK,EAAAA,EAAAA,GAAA,eAIvC,KAEVA,EAAAA,EAAAA,GAAA,uBAKiB,IAEjBA,EAAAA,EAAAA,GAAA,wBAOcZ,IAEdY,EAAAA,EAAAA,GAAA,sBAOYZ,IAEZY,EAAAA,EAAAA,GAAA,oBAOUZ,IAEVY,EAAAA,EAAAA,GAAA,0BAGoBC,EAAAA,EAAAA,IAAY,KAEhCD,EAAAA,EAAAA,GAAA,wBAGkBC,EAAAA,EAAAA,IAAY,KAe9BD,EAAAA,EAAAA,GAAA,wBAGkBC,EAAAA,EAAAA,IAAY,MAE9BD,EAAAA,EAAAA,GAAA,4BAMsB,IAEtBA,EAAAA,EAAAA,GAAA,8BAGwB,IAExBA,EAAAA,EAAAA,GAAA,oBAOc,IAEdA,EAAAA,EAAAA,GAAA,8BAKwB,IAExBA,EAAAA,EAAAA,GAAA,yBAKmB,IAEnBA,EAAAA,EAAAA,GAAA,2BAKqB,IAErBA,EAAAA,EAAAA,GAAA,oBAKc,IAEdA,EAAAA,EAAAA,GAAA,sCAKgC,IAEhCA,EAAAA,EAAAA,GAAA,mCAQAA,EAAAA,EAAAA,GAAA,oCAQAA,EAAAA,EAAAA,GAAA,sCAQAA,EAAAA,EAAAA,GAAA,qBAKgB,KAEhBA,EAAAA,EAAAA,GAAA,qCAQAA,EAAAA,EAAAA,GAAA,mCAQAA,EAAAA,EAAAA,GAAA,uCAQArK,EAAAA,EAAAA,GAAA,cAAAG,EAAA,OASAkK,EAAAA,EAAAA,GAAA,4BAKsBE,EAAAA,EAAAA,gBAAcC,EAAAA,EAAAA,IAAQ,MAE5CH,EAAAA,EAAAA,GAAA,0BAKoBE,EAAAA,EAAAA,gBAAcC,EAAAA,EAAAA,IAAQ,OAE1CH,EAAAA,EAAAA,GAAA,2BAKsBI,EAAAA,YAEtBJ,EAAAA,EAAAA,GAAA,oCAK8B,UAE9BA,EAAAA,EAAAA,GAAA,2CAKqC,EAAK,CAxK1C,mBACIK,GACA,IAAIC,EAAM,IAAIC,KACd,OAAID,EAAMpK,KAAKsK,mBAAqBF,EAAMpK,KAAKuK,gBACpCvK,KAAKsK,kBAETF,CACX,CAuKAI,IAAAA,GACIC,MAAMD,QAAQhL,WAEd,MACQkL,EACAf,EACAC,EACAe,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1B,EACA2B,EACAC,IACAC,EAAAA,EAAAA,IACApL,KACA,cACA,YACA,UACA,sBACA,wBACA,mBACA,cACA,SACA,qBACA,iBACA,eACA,oBACA,6BAGHqL,EAAqBC,EAAmBC,GAAmB,CAACb,EAAaf,EAAWC,GAASpJ,IAC1FgL,EAAAA,WAGJC,EAAeC,OAAOC,UAAUjB,IAAekB,EAAAA,EAAAA,gBAAelB,GAAeA,GAAevB,EAAAA,UAC5FC,EAAesC,OAAOC,UAAUhC,GAAaA,GAAYK,EAAAA,EAAAA,eAAcL,IAAaM,EAAAA,EAAAA,IAAQ,IAChG,IAAIZ,EAAaqC,OAAOC,UAAU/B,GAAWA,GAAUI,EAAAA,EAAAA,eAAcJ,IAAWK,EAAAA,EAAAA,IAAQ,KACxF,MAAM4B,GAAWC,EAAAA,EAAAA,IAAuB1C,EAAcC,GAMlD0C,GACKZ,IACAL,MACCO,IAAsB3B,EAAAA,EAAAA,gBAAe+B,KAAkBO,EAAAA,gBACpDV,GAAqBC,GAAmBM,EAAWvC,EAAAA,IAE5DuC,GAAYvC,EAAAA,KACZD,EAAaD,EAAeE,EAAAA,IAIhC,IAAK2C,EAAoBC,IAAuBd,EAAAA,EAAAA,IAC5CpL,KACA,qBACA,uBAIJiM,OAA4C/C,IAAvB+C,EAAmCA,EAAqBjM,KAAKqI,KAAK8D,GAAGnM,KAAM,YAChGkM,OAA8ChD,IAAxBgD,EAAoCA,EAAsBlM,KAAKqI,KAAK8D,GAAGnM,KAAM,aAGnGA,KAAKoM,cAAc,CACfH,qBACAC,wBAMJlM,KAAKoM,cAAc,CACfC,qBAAsBpB,EACtBqB,mBAAoB/C,EACpBgD,uBAA6C,MAArBrB,EAA4B,MAAOU,EAAAA,EAAAA,gBAAeV,KAI9E,MAAMsB,EAAuB,CACzB,IAAIC,EAAAA,EAAe,CACfC,MAAO1M,KAAKiM,mBACZU,OAAO,EACPC,MAAO,CACHvJ,GAzUC,KA4UT,IAAIoJ,EAAAA,EAAe,CACfC,MAAO1M,KAAKkM,oBACZS,OAAO,EACPC,MAAO,CACHvJ,GA/UA,EAgVAwJ,aAAa,MAKrBlC,GACA6B,EAAqBM,KACjB,IAAIL,EAAAA,EAAe,CACfC,MAAO1M,KAAKqI,KAAK8D,GAAGnM,KAAM,cAC1B2M,OAAO,EACPC,MAAO,CACHvJ,GA1VR,MAgWJuH,GACA4B,EAAqBM,KACjB,IAAIL,EAAAA,EAAe,CACfC,MAAO1M,KAAKqI,KAAK8D,GAAGnM,KAAM,gBAC1B2M,OAAO,EACPC,MAAO,CACHvJ,GArWN,EAsWM0J,YAAY,MAM5B/M,KAAKgN,cAAgBR,EAErB,MAAOS,EAAaC,EAAAA,EAAgBC,GAA2B,IAAQ/B,EAAAA,EAAAA,IACnEL,EACA,UACA,sBAcJ,GAPA/K,KAAKoM,cAAc,CACfa,aAEAjC,wBAA2C9B,IAAvB8B,EAAmCA,EAAqBmC,IAI5ExC,GAAuBG,EACvB9K,KAAKgN,cAAcI,SAASC,GAAUA,EAAKV,MAjYvC,IAiY+CU,EAAKT,MAAMvJ,UAC3D,GAAIuH,GAAyBC,EAChC7K,KAAKgN,cAAcI,SAASC,GAAUA,EAAKV,MAlYrC,IAkY6CU,EAAKT,MAAMvJ,UAC3D,GAAI0I,EAcP,OAbA/L,KAAKgN,cAAcI,SAASC,GAAUA,EAAKV,MAtYnC,IAsY2CU,EAAKT,MAAMvJ,UAM9DrD,KAAKoM,cAAc,CACfhD,eACAkE,uBAAuB,EACvBjE,aACAoC,iBAWRzL,KAAKoM,cAAc,CACfhD,aAAcpJ,KAAKuN,oBACnBlE,WAAYrJ,KAAKwN,kBACjB/B,aAAczL,KAAKyN,qBAE3B,CAOQC,mBAAAA,CAAoBxK,GACxB,MAAMF,EAAeE,EAAMyK,MAAMC,GAAMA,EAAEjB,QACzC,IAAK3J,EACD,OAGJ,MAAM,GAAEK,GAAOL,EAAa4J,MACxBU,EA9aQ,IA8agBjK,EACxBwH,EA7aM,IA6aaxH,EACnByH,EA/aI,IA+aUzH,EAKlBrD,KAAKoM,cAAc,CACftB,cACAwC,0BAKJ,IAAItE,EAAeG,EAAAA,UACfQ,GAAYM,EAAAA,EAAAA,IAAQ,GACpBL,GAAUK,EAAAA,EAAAA,IAAQ,IAClB4D,EAzeM,EA0eNC,EAAiBxE,EAAAA,GAIjBgE,IACAtN,KAAK+N,yBAEL/E,EAAehJ,KAAKyL,aACpBoC,EAAmB7N,KAAKoJ,aACxB0E,EAAiB9N,KAAKqJ,WACtBM,GAAYqE,EAAAA,EAAAA,eAAchO,KAAKoJ,cAC/BQ,GAAUoE,EAAAA,EAAAA,eAAchO,KAAKqJ,aAGjC,MAAM4E,EAAuBlF,EAAcC,EAAc6E,EAAkBC,EAAgB9N,KAAKuJ,cAC5F2E,EAAoBlO,KAAKmO,EAAAA,IAG7BD,GACIA,EACID,EACAnD,EACA,CAAE9B,eAAcW,YAAWC,WAC3B0D,EACAzC,EAEZ,CAOQuD,eAAAA,CAAeC,GAAoF,IAAnF,mBAAEC,EAAkB,iBAAEC,EAAgB,aAAEvF,GAAcqF,KAAoB7O,UAAAyJ,OAAA,QAAAC,IAAA1J,UAAA,KAAAA,UAAA,KAK1FQ,KAAKoM,cAAc,CACfhD,aAAckF,EACdjF,WAAYkF,IAIpB,MAAM5E,GAAYqE,EAAAA,EAAAA,eAAcM,GAC5B1E,GAAUoE,EAAAA,EAAAA,eAAcO,GACxBN,EAAuBlF,EAAcC,EAAcsF,EAAoBC,EAAkBvO,KAAKuJ,cAC9F2E,EAAoBlO,KAAKmO,EAAAA,IAE7BD,GAAqBA,EAAkBD,GAAsB,EAAO,CAAEjF,eAAcW,YAAWC,WACnG,CAEQ4E,iBAAAA,GACAxO,KAAKsN,uBAGLtN,KAAKyO,IAAI,eAAgBzO,KAAK2J,UAEtC,CAEQ+E,eAAAA,GACA1O,KAAKsN,uBAGLtN,KAAKyO,IAAI,aAAczO,KAAK4J,QAEpC,CAEQ+E,oBAAAA,GACA3O,KAAKsN,uBAGLtN,KAAKyO,IAAI,gBAAgB7C,EAAAA,EAAAA,gBAAe5L,KAAK0K,aAErD,CAEQqD,sBAAAA,GACJ,MAAM9C,EAAiBjL,KAAKiL,eACxB1B,EAAevJ,KAAKuJ,aACpB2B,EAAoBlL,KAAKkL,kBACzB0D,EAAmB5O,KAAKoJ,aACxByF,EAAiB7O,KAAKqJ,WACtByF,GAAiBpF,EAAAA,EAAAA,gBAAe1J,KAAKyL,cAEzC,GAAIzL,KAAKsN,sBAAuB,CAC5B,IAAIyB,GAAgB,GAIhB9D,EAAiB2D,GACjBC,EAAiB5D,EAAiB3B,EAAAA,IAClCC,GAAgBqF,KAIhB5O,KAAKyO,IAAI,eAAgBxD,GACzB8D,GAAgB,IAIhBxF,EAAesF,GAAkB5D,GAAkB4D,KAGnD7O,KAAKyO,IAAI,aAAclF,GACvBwF,GAAgB,IAIO7D,EAAoB4D,GACtB,IAGrB9O,KAAKyO,IAAI,gBAAgB7C,EAAAA,EAAAA,gBAAekD,GAAkB5D,IAC1D6D,GAAgB,GAGhBA,IACA/O,KAAKoO,gBAAgB,CACjBE,mBAAoBtO,KAAKoJ,aACzBmF,iBAAkBvO,KAAKqJ,WACvBL,aAAchJ,KAAKyL,eAEvBzL,KAAKgP,4BAA4BC,QAKrCjP,KAAKyO,IAAI,uBAAwBxD,GAGjCjL,KAAKyO,IAAI,qBAAsBlF,GAG/BvJ,KAAKyO,IAAI,0BAA0B7C,EAAAA,EAAAA,gBAAeV,GACtD,MAGIlL,KAAKkP,yCACchG,IAAnB+B,QACiB/B,IAAjBK,QACsBL,IAAtBgC,GAEAlL,KAAKoO,gBACD,CACIE,mBAAoBrD,EACpBsD,iBAAkBhF,EAClBP,cAAc4C,EAAAA,EAAAA,iBAAgBV,EAAoBc,EAAAA,kBAGtD,EAGZ,CAOQmD,eAAAA,CAAeC,GAAyB,IAAxB,UAAEC,EAAS,QAAEC,GAASF,EACtCpG,EAAeG,EAAAA,UACfQ,GAAYM,EAAAA,EAAAA,IAAQ,GACpBL,GAAUK,EAAAA,EAAAA,IAAQ,IAItB,MAAMsF,EAAqBxG,EAAcC,EAhpB/B,EA8oBWM,EAAAA,GAEoEtJ,KAAKuJ,cAE9FgG,EAAmBjF,kBAAoB+E,QAAAA,EAAarP,KAAKsK,kBACzDiF,EAAmBhF,gBAAkB+E,QAAAA,EAAWtP,KAAKuK,gBAErD,MAAM2D,EAAoBlO,KAAKmO,EAAAA,IAC3BD,GACAA,EAAkBqB,GAAoB,EAAO,CAAEvG,eAAcW,YAAWC,YAAW,GAAO,EAElG,GACHlK,GAAAgB,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,QApmBIqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAApB,GAAAe,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,kBACPqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,mBAAA3B,GAAAiC,OAAAC,yBAAAgE,EAAAvE,UAAA,mBAAAuE,EAAAvE,WAAAf,GAAAc,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,UAAA1B,GAAA,CAAA2B,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,uBA0ZPgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,uBAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,mBA0DNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,mBAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,qBAmBNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,qBAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,mBAQNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,mBAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,wBAQNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,wBAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,0BAQNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,0BAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,mBAmFNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,mBAAAuE,EAAAvE,WA1Z8CtB,EA0Z9C6F,KAAA7F,IAplBuBuD,EAAAA,EAAAA,sBAAAC,EAAAgH,E,mFCrFlC,SAAA1I,E,SAAAA,uBAAA,8UAAAC,IAAA,CAAAwH,EAAAA,EAAAnF,EAAAA,GAAA,kB,iBCSA,IAKqB+L,GADpB7K,EAAAA,EAAAA,GAAS,CAAEC,KAAM,mCAAoC9F,CAAAO,EAAtD,cACyCC,EAAAA,MAAkCD,GAA3CuD,EAAAA,EAAAA,sBAAAC,EAAA2M,E,yKCdhC,SAAArO,E,SAAAA,uBAAA,w4CAAAC,IAAA,CAAAqO,EAAAA,EAAAC,EAAAA,EAAAhO,EAAAA,GAAA+B,EAAAA,GAAA,kB,yBCyBA,IAKqBkM,GADpBhL,EAAAA,EAAAA,GAAS,CAAEC,KAAM,6DAA8D9F,EAAAoG,EAAhF,cACyD5F,EAAAA,EAAsCC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,YAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,cAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,kBAAAG,EAAA,MAKnFgQ,qBAAAA,CAAsBC,GAC1B,MAAMC,EAAOD,EAAGE,cAAc,qBAC9BF,EAAGG,UAAUC,OAAO,uBAAwBH,EAAKI,aAAeJ,EAAKK,aACzE,CAEQC,YAAAA,CAAaC,GACjB,MAAMR,EAAKQ,EAAIC,OACfT,EAAGG,UAAUC,OAAO,aAAcJ,EAAGU,UACzC,CAEQC,sBAAAA,GACJxQ,KAAK4F,WAAWC,oBAAoB4K,EAAAA,2BACxC,CAEA,WAAIvO,GACA,MAAM,KAAEmG,GAASrI,KACb0Q,EAAoC,GACpCC,EAAQ3Q,KAAKM,KAAKqQ,MAClBC,GAAcC,EAAAA,EAAAA,IAAqBF,EAAMG,iBAY7C,OAVIH,EAAMI,iBACNL,EAAa5D,KAAK8D,GAGlBD,EAAMK,kBACNN,EAAa5D,MACT+D,EAAAA,EAAAA,IAAqBxI,EAAKC,EAAE,oBAAqBtI,KAAKwQ,uBAAwB,sBAI/EE,CACX,GACHhR,GAAAgB,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,QApCIqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAApB,GAAAe,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,UACPqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAnB,GAAAc,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,cACPqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,yBAEPgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,yBAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,gBAKNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,gBAAAuE,EAAAvE,YAAAD,EAAAA,EAAAA,GAAAwE,EAAAvE,UAAA,0BAKNgC,EAAAA,QAAM1B,OAAAC,yBAAAgE,EAAAvE,UAAA,0BAAAuE,EAAAvE,WAhBqEtB,EAgBrE6F,KAAA7F,GAfqCuD,EAAAA,EAAAA,sBAAAC,EAAA8M,E,8HC9BhD,SAAAxO,E,SAAAA,uBAAA,k9DAAAC,IAAA,CAAAqO,EAAAA,EAAAhM,EAAAA,EAAAC,EAAAA,EAAAhC,EAAAA,GAAAE,EAAAA,GAAAL,EAAAA,EAAAiC,EAAAA,GAAA,kB,iBCaA,IAKqByN,GADpBtM,EAAAA,EAAAA,GAAS,CAAEC,KAAM,0CAA2C9F,CAAAO,EAA7D,cAC0C6R,EAAAA,MAAkC7R,GAA3CuD,EAAAA,EAAAA,sBAAAC,EAAAoO,E,+UClBjC,SAAA9P,E,SAAAA,uBAAA,w+KAAAC,IAAA,CAAAG,EAAAA,EAAA4P,EAAAA,EAAAzP,EAAAA,GAAAgH,EAAAA,EAAA0I,EAAAA,EAAAzP,EAAAA,EAAAiH,EAAAA,EAAAyI,EAAAA,EAAA5N,EAAAA,EAAA6N,EAAAA,EAAA1P,EAAAA,GAAA4B,EAAAA,EAAA+N,EAAAA,EAAAC,EAAAA,GAAA,kB,yDC6BO,IAAMC,GAAW3S,GAYnBM,EAAAA,EAAAA,UAAS,qBAAsB,6BAA4BJ,GAa3DI,EAAAA,EAAAA,UAAS,gCAA+BC,EAzBtC,MAIHE,WAAAA,CAAYoR,EAA8Be,IAA6BjS,EAAAA,EAAAA,GAAA,aAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,0BAAAE,EAAA,MACnEK,KAAK2Q,MAAQA,EACb3Q,KAAK0R,mBAAqBA,CAC9B,CAKA,gBACIC,GACA,GAAI3R,KAAK0R,mBACL,OAAO,EAGX,MAAM,YAAEE,GAAgB5R,KAAK2Q,MAAMkB,QACnC,OAAOD,IAAgBE,EAAAA,EAAgBC,YAAcH,IAAgBE,EAAAA,EAAgBE,iBACzF,CAKA,YACIC,GACA,OAAOjS,KAAK2Q,MAAMkB,QAAQK,KAAKC,MAAMD,GAASA,aAAI,EAAJA,EAAME,aACxD,GACH1S,GAAAgB,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,SA5BIK,EAAAA,SAAO,CAAAJ,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAApB,GAAAe,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,sBACPK,EAAAA,SAAO,CAAAJ,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAAsB,CAAK,KAAAL,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,gBAAA7B,GAAAmC,OAAAC,yBAAA7B,EAAAsB,UAAA,gBAAAtB,EAAAsB,YAAAD,EAAAA,EAAAA,GAAArB,EAAAsB,UAAA,YAAA3B,GAAAiC,OAAAC,yBAAA7B,EAAAsB,UAAA,YAAAtB,EAAAsB,WAAAtB,GA4DlBgT,IAAyBpT,GAD7C0F,EAAAA,EAAAA,GAAS,CAAEC,KAAM,yBAAyBzF,GAetC8H,EAAAA,EAAAA,OAAM,OAAQ6K,EAAAA,EAAgBC,YAAWlN,GAMzCoC,EAAAA,EAAAA,OAAM,OAAQ6K,EAAAA,EAAgBQ,QAAOxN,GAMrC/F,EAAAA,EAAAA,OAAM,qDAAoDgG,GAoB1D3F,EAAAA,EAAAA,UAAS,QAAO4F,GAoBhB5F,EAAAA,EAAAA,UAAS,OAAQ,+BAA8B6F,GAqB/C7F,EAAAA,EAAAA,UAAS,+BAA8BH,GAAAsT,EAxF5C,cACuDjT,EAAAA,EAAqCC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,sBAAAG,EAAA,OAAAH,EAAAA,EAAAA,GAAA,kBAAAI,EAAA,OAAAJ,EAAAA,EAAAA,GAAA,YAAA0F,EAAA,OAAA1F,EAAAA,EAAAA,GAAA,mBAAA2F,EAAA,OAWxF3F,EAAAA,EAAAA,GAAA,cAAAyH,EAAA,OAMAzH,EAAAA,EAAAA,GAAA,gBAAA+S,EAAA,OAMA/S,EAAAA,EAAAA,GAAA,mCAAAgT,EAAA,OAiFA3I,EAAAA,EAAAA,GAAA,wBAGmB3J,IACf,MAAM,QAAE0R,GAAY1R,EAAKwQ,MACzB,OAAMkB,aAAmBa,EAAAA,SAIlBb,EAAQc,eAAe,GACjC,CA3GD,QAAItF,GAAwB,IAAAuF,EACxB,OAAqB,QAArBA,EAAO5S,KAAKM,KAAK+M,YAAI,IAAAuF,EAAAA,EAAId,EAAAA,EAAgBe,OAC7C,CAuBA,aAAIC,GACA,MAAM,KAAExS,GAASN,KAGjB,OAAOM,EAAKyS,aACNzS,EAAK+M,OAASyE,EAAAA,EAAgBE,kBAC1BhS,KAAKqI,KAAK8D,GAAGnM,KAAM,qBACnB,GACJM,EAAK0S,KACf,CAKA,wBACIC,GACA,MAAM,KAAE5K,EAAI,KAAEgF,GAASrN,KACvB,OAAQqN,GACJ,KAAKyE,EAAAA,EAAgBC,WACjB,OAAO1J,EAAKC,EAAE,gDAClB,KAAKwJ,EAAAA,EAAgBoB,MACjB,OAAO7K,EAAKC,EAAE,iDAClB,KAAKwJ,EAAAA,EAAgBQ,OACjB,OAAOjK,EAAKC,EAAE,+CAClB,KAAKwJ,EAAAA,EAAgBE,kBACjB,OAAO3J,EAAK8D,GAAGnM,KAAM,qBACzB,QACI,MAAO,GAEnB,CAKA,eACImT,GACA,MAAM,KAAE9K,EAAI,4BAAE+K,GAAgCpT,KAE9C,OAAQA,KAAKqN,MACT,KAAKyE,EAAAA,EAAgBC,WACjB,OAAOqB,EAA2B,GAAA3R,OACzB4G,EAAK8D,GAAGnM,KAAM,mBAAkB,KAAAyB,OAAI4G,EAAK8D,GAAGnM,KAAM,wBACrDqI,EAAK8D,GAAGnM,KAAM,mBACxB,KAAK8R,EAAAA,EAAgBE,kBACjB,OAAOoB,EAA2B,GAAA3R,OACzB4G,EAAK8D,GAAGnM,KAAM,gCAA+B,KAAAyB,OAAI4G,EAAK8D,GAAGnM,KAAM,wBAClEqI,EAAK8D,GAAGnM,KAAM,gCACxB,QACI,MAAO,GAEnB,CAKA,qBACIqT,GACA,MAAM,KAAEhL,GAASrI,KAEjB,OAAOA,KAAKoT,4BAA2B,GAAA3R,OAC9B4G,EAAKC,EAAE,oDAAmD,KAAA7G,OAAI4G,EAAK8D,GAAGnM,KAAM,wBAC/EqI,EAAKC,EAAE,mDACjB,CAKA,SAAIpF,GACA,MAAM,SAAEoQ,EAAQ,mBAAE5B,GAAuB1R,KAAKM,KAC9C,OAAOgT,EAAS9S,KAAKmQ,GAAU,IAAIc,EAAYd,IAASe,IAC5D,CAiBQ6B,iBAAAA,GACJvT,KAAKwT,aAAexT,KAAKwT,WAC7B,CAKQC,cAAAA,GAAuB,IAAAC,EAAAC,EAED,QAA1BD,GAAAC,EAAA3T,KAAKM,MAAKsT,wBAAgB,IAAAF,GAA1BA,EAAAzE,KAAA0E,EAA6B3T,KAAKqN,MAElC,MAAM,KAAEA,GAASrN,KAEbqN,IAASyE,EAAAA,EAAgBQ,QACzBjF,IAASyE,EAAAA,EAAgBC,YACzB1E,IAASyE,EAAAA,EAAgBE,mBAGzBhS,KAAK4F,WAAWiO,mCACZC,EAAAA,EAAAA,GAAsBC,EAAAA,QAAsBC,oCAAqChU,KAAKiU,gBAGlG,CAKQC,aAAAA,CAAa7F,GAA+B,IAAA8F,EAAAC,EAAA,IAA9B,MAAEzD,GAAoBtC,EAEV,QAA9B8F,GAAAC,EAAApU,KAAKM,MAAK6N,EAAAA,WAAoB,IAAAgG,GAA9BA,EAAAlF,KAAAmF,EACIzD,GACAlC,EAAAA,EAAAA,KAAIkC,EAAO,cAAeA,EAAMvN,YAChCpD,KAAKkD,MAAMhD,QAAQ0N,GAAMA,EAAE+C,MAAMvN,aAAY5C,KAAI4O,IAAA,IAAC,MAAEuB,GAAOvB,EAAA,OAAKuB,CAAK,IAE7E,GACH/Q,GAAAc,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,kBAzJIqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAlB,GAAAa,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,cACPqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAoE,GAAAzE,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,QACPqF,EAAAA,QAAO,CAAApF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAqE,GAAA1E,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,eAEPK,EAAAA,SAAO,CAAAJ,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAAe,CAAI,IAAAmG,GAAAxG,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,UAAAxB,GAAA,CAAAyB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAyR,GAAA9R,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,YAAAkE,GAAA,CAAAjE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA0R,GAAA/R,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,+BAAAmE,GAAA,CAAAlE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,wBAAAoE,GAAA9D,OAAAC,yBAAAqR,EAAA5R,UAAA,wBAAA4R,EAAA5R,YAAAD,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,eAAAqE,GAAA/D,OAAAC,yBAAAqR,EAAA5R,UAAA,eAAA4R,EAAA5R,YAAAD,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,qBAAAsE,GAAAhE,OAAAC,yBAAAqR,EAAA5R,UAAA,qBAAA4R,EAAA5R,YAAAD,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,qBAkH1BgC,EAAAA,QAAM1B,OAAAC,yBAAAqR,EAAA5R,UAAA,qBAAA4R,EAAA5R,YAAAD,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,kBAONgC,EAAAA,QAAM1B,OAAAC,yBAAAqR,EAAA5R,UAAA,kBAAA4R,EAAA5R,YAAAD,EAAAA,EAAAA,GAAA6R,EAAA5R,UAAA,iBAoBNgC,EAAAA,QAAM1B,OAAAC,yBAAAqR,EAAA5R,UAAA,iBAAA4R,EAAA5R,WA3DiCuE,EA2DjCqN,KAAArN,IAlJmCtC,EAAAA,EAAAA,sBAAAC,EAAAwP,G,6CC5F9C,IAAAgC,EAAe,CACbC,QAAS,CACP,CAAC,IAAK,KACN,CAAC,MAAO,KACR,CAAC,iBAAkB,QACnB,CAAC,kBAAmB,OACpB,CAAC,iBAAkB,OACnB,CAAC,yBAA0B,QAC3B,CAAC,UAAW,SACZ,CAAC,oBAAqB,SACtB,CAAC,aAAc,OACf,CAAC,YAAa,OACd,CAAC,QAAS,OACV,CAAC,yBAA0B,WAC3B,CAAC,WAAY,OACb,CAAC,oBAAqB,SACtB,CAAC,iBAAkB,QACnB,CAAC,6BAA8B,UAC/B,CAAC,eAAgB,SACjB,CAAC,cAAe,SAChB,CAAC,UAAW,QACZ,CAAC,YAAa,MACd,CAAC,WAAY,UAGfC,SAAU,CACR,CAAC,MAAO,IACR,CAAC,SAAU,MACX,CAAC,WAAY,SACb,CAAC,YAAa,QACd,CACE,uEACA,SAEF,CAAC,sBAAuB,SACxB,CAAC,cAAe,QAChB,CAAC,YAAa,MACd,CAAC,YAAa,MACd,CAAC,cAAe,OAChB,CAAC,sBAAuB,OACxB,CAAC,aAAc,WACf,CAAC,aAAc,UACf,CAAC,mBAAoB,MACrB,CAAC,cAAe,UAChB,CAAC,eAAgB,MACjB,CAAC,UAAW,MACZ,CAAC,YAAa,MACd,CAAC,uBAAwB,QACzB,CAAC,eAAgB,SACjB,CAAC,sBAAuB,QACxB,CAAC,8BAA+B,MAChC,CAAC,WAAY,MACb,CAAC,mBAAoB,QACrB,CAAC,eAAgB,QACjB,CAAC,cAAe,MAChB,CAAC,gBAAiB,OAGpBC,eAAgB,CACd,CAAC,SAAU,UACX,CAAC,MAAO,OACR,CAAC,QAAS,YACV,CAAC,MAAO,SACR,CAAC,OAAQ,SACT,CAAC,MAAO,QACR,CAAC,SAAU,YAGbC,YAAa,CACX,YACA,cACA,OACA,QACA,UACA,SACA,OACA,QACA,QACA,WC3EJ,MAAMC,EAAc,QACdC,EAAyB,8BACzBC,EAA4B,8BAC5BC,EAAkB,iBAClBC,EAAmB,8BAEzB,SAASC,EAAWC,GAClB,OAAOA,EAAIC,QAAQH,GAAmBI,GAAUA,EAAMC,eACxD,CAEA,SAASC,EAAgBC,EAAOZ,GAC9B,IAAK,IAAI7G,EAAI,EAAG3E,EAASwL,EAAYxL,OAAQ2E,EAAI3E,EAAQ2E,IACvDyH,EAAMZ,YAAYA,EAAY7G,GAAG0H,gBAAiB,CAEtD,CAEA,SAASC,EAAcF,EAAOb,GAC5B,IAAIgB,EAEJ,IAAK,IAAI5H,EAAI,EAAG3E,EAASuL,EAAevL,OAAQ2E,EAAI3E,EAAQ2E,IAC1D4H,EAAOhB,EAAe5G,GAGtByH,EAAMI,UAAUD,EAAK,GAAGF,eAAiBE,EAAK,GAC9CH,EAAMI,UAAUD,EAAK,GAAGF,eAAiBE,EAAK,GAG9CH,EAAMK,iBAAiBF,EAAK,GAAGF,eAAiBE,EAAK,GACrDH,EAAMK,iBAAiBF,EAAK,GAAGF,eAAiBE,EAAK,EAEzD,CAgEA,SAASG,EAAUC,IACjBA,EAAUA,GAAW,CAAC,GACdnB,YAAcmB,EAAQnB,aAAeoB,IAC7CD,EAAQpB,eAAiBoB,EAAQpB,gBAAkBqB,IAEnD,MAAMR,EAASrV,KAAKqV,MAAQ,CAC1Bf,QAASsB,EAAQtB,SAAW,GAC5BC,SAAUqB,EAAQrB,UAAY,GAC9BkB,UAAWI,IACXH,iBAAkBG,IAClBpB,YAAaoB,KAGfT,EAAgBC,EAAOO,EAAQnB,aAC/Bc,EAAcF,EAAOO,EAAQpB,gBAE7BxU,KAAK8V,aACP,CAEA,IAAK7U,OAAO8U,SAAW9U,OAAO8U,OAAO,MAAMC,eACzC,MAAM,IAAIC,MACR,yGAIJ,SAASJ,IACP,IAAIK,EAAQjV,OAAO8U,OAAO,MAG1B,OAFAG,EAAa,MAAI,YACVA,EAAa,MACbA,CACT,CC5HA,SAASC,IACP,OAAOR,EAAUS,UAAUD,aAAa3W,UAC1C,CAEA,SAAS6W,EAAYC,GACnB,OAAOX,EAAUS,UAAUC,YAAYC,EACzC,CDwHAX,EAAUhV,UAAY,CASpBmV,WAAAA,GACE9V,KAAKuW,aAELvW,KAAKqW,YAAc,SAAUC,GAE3B,OADAtW,KAAKwW,YAAa,EAEhBxW,KAAKyW,QAAQH,KAAUtW,KAAKyW,QAAQH,GAAQtW,KAAK0W,aAAaJ,G,EAIlEtW,KAAKmW,UAAY,SAAUQ,EAAcL,GAAoB,IAAdM,EAAOpX,UAAAyJ,OAAA,QAAAC,IAAA1J,UAAA,GAAAA,UAAA,GAAG,CAAC,EACxDQ,KAAKwW,YAAa,EAClB,IAAIK,EAAW,CAACF,EAAcL,EAAMM,EAAQE,cAC5C,OACE9W,KAAK+W,QAAQF,KACZ7W,KAAK+W,QAAQF,GAAY7W,KAAKgX,WAAWL,EAAcL,EAAMM,G,GAUpEL,UAAAA,GACEvW,KAAKwW,YAAa,EAClBxW,KAAKyW,QAAUZ,IACf7V,KAAK+W,QAAUlB,G,EASjBoB,YAAAA,GACEjX,KAAKyW,QAAU,KACfzW,KAAK+W,QAAU,KACf/W,KAAKqW,YAAc,SAAUC,GAC3B,OAAOtW,KAAK0W,aAAaJ,E,EAG3BtW,KAAKmW,UAAY,WACf,OAAOnW,KAAKgX,cAAcxX,U,GAS9B0X,MAAAA,CAAOC,EAAOC,GACRpX,KAAKwW,YACPxW,KAAKuW,aAEPvW,KAAKqV,MAAMf,QAAQxH,KAAK,CAACqK,EAAOC,EAAO9B,e,EAQzCf,QAAAA,CAAS4C,EAAOC,GACVpX,KAAKwW,YACPxW,KAAKuW,aAEPvW,KAAKqV,MAAMd,SAASzH,KAAK,CAACqK,EAAOC,EAAO9B,e,EAO1Cb,WAAAA,CAAY2C,GACNpX,KAAKwW,YACPxW,KAAKuW,aAEPnB,EAAgBpV,KAAKqV,MAAO,CAAC+B,EAAO9B,e,EAQtCG,SAAAA,CAAUlB,EAAU2C,GACdlX,KAAKwW,YACPxW,KAAKuW,aAEPhB,EAAcvV,KAAKqV,MAAO,CAAC,CAACd,EAAU2C,I,EAOxCf,SAAAA,GACE,OAAOnW,KAAKgX,cAAcxX,U,EAG5BwX,UAAAA,CAAWK,EAAaf,GAAoB,IAAdM,EAAOpX,UAAAyJ,OAAA,QAAAC,IAAA1J,UAAA,GAAAA,UAAA,GAAG,CAAC,EACvC,YAAa0J,IAAToN,EACKtW,KAAKsX,QACVD,EACArX,KAAKqV,MAAMf,QACXtU,KAAKqV,MAAMI,YAIiB,IAA5B8B,WAAWF,KACbf,EAAOtW,KAAKsX,QAAQhB,EAAMtW,KAAKqV,MAAMf,QAAStU,KAAKqV,MAAMI,YAGpDmB,EAAQE,aAAeR,EAAO,GAAH7U,OAAM4V,EAAW,KAAA5V,OAAI6U,G,EAOzDD,WAAAA,CAAYC,GACV,OAAOtW,KAAK0W,aAAaJ,E,EAG3BI,YAAAA,CAAaJ,GACX,OAAOtW,KAAKsX,QAAQhB,EAAMtW,KAAKqV,MAAMd,SAAUvU,KAAKqV,MAAMK,iB,EAW5D4B,OAAAA,CAAQhB,EAAMkB,EAAW/B,GACvB,IAAIgC,EACFC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAvT,EACAwT,EAKF,GAHAF,GAAWzB,GAAQ5B,EAAYwD,KAAK5B,GACpC0B,EAAcnD,EAAgBqD,KAAK5B,GAE/ByB,EACF,OAAOzB,EAcT,GAXAsB,EAAYtB,EAAKhB,cACjBuC,EACElD,EAAuBwD,KAAK7B,IAAS1B,EAA0BuD,KAAK7B,GAElEuB,IACFC,EAAWD,EAAU,GAAGvC,eAG1B2C,EACEjY,KAAKqV,MAAMZ,YAAYmD,IAAc5X,KAAKqV,MAAMZ,YAAYqD,GAE1DG,EACF,OAAO3B,EAGT,IAAK7R,KAAQgR,EACX,GAAImC,EAAU1C,MAAMzQ,EAAO,KAQzB,OAPAiT,EAAejC,EAAUhR,GAErBuT,GAAevC,EAAUqC,KAC3BJ,EAAe3C,EAAW2C,GAC1BjT,EAAOsQ,EAAWtQ,IAGb6R,EAAKrB,QAAQ,IAAImD,OAAO3T,EAAM,KAAMiT,GAI/C,IAAK,IAAI9J,EAAI4J,EAAUvO,OAAiB2E,EAAH,IACnC6J,EAAaD,EAAU5J,EAAI,GAC3BnJ,EAAOgT,EAAW,IAEdhT,EAAKyT,KAAK5B,IAJiC1I,KAgBjD,OAPA6J,EAAaA,GAAc,GAE3BhT,EAAOgT,EAAW,GAClBC,EAAeD,EAAW,GAE1BE,EAASrB,EAAKrB,QAAQxQ,EAAMiT,GAErBC,CACT,GAGFhC,EAAUtB,aAAeA,EACzBsB,EAAUS,UAAY,IAAIT,EAAUtB,E","sources":["./components/automation/base-filter-bar/index.ts","./components/automation/filter-bar/index.hbs","./components/automation/filter-bar/index.ts","./components/automation/rules/navigation-header/index.hbs","./components/automation/rules/navigation-header/index.ts","./components/automation/rules/automation-feature-suggestion/index.hbs","./components/automation/rules/automation-feature-suggestion/index.ts","./components/automation/shared/rules-schedule-action-sheet/item/index.hbs","./components/automation/shared/rules-schedule-action-sheet/item/index.ts","./components/automation/shared/rules-schedule-action-sheet/index.hbs","./components/automation/shared/rules-schedule-action-sheet/index.ts","./components/automation/rules/rule-list/index.hbs","./components/automation/rules/rule-list/index.ts","./components/automation/schedule-input/index.hbs","./components/automation/schedule-input/index.js","./components/beta/feature-under-construction/index.hbs","./components/beta/feature-under-construction/index.ts","./components/modals/automation/presence-state/presence-state-explainer/index.hbs","./components/modals/automation/presence-state/presence-state-explainer/index.ts","./components/modals/automation/rules/new-video-rule/index.hbs","./components/modals/automation/rules/new-video-rule/index.ts","./components/ui/notification-list/index.hbs","./components/ui/notification-list/index.ts","src/lib/system/inflections.js","src/lib/system/inflector.js","src/lib/system/string.js"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { computed } from '@ember/object';\nimport { alias, gt } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\n\nimport './_style.scss';\n\nexport interface BaseFilterBarSignature {\n Args: {\n search: string;\n filterTags: FilterOption[];\n onFilterTagsChange: (values: string[] | number[]) => void;\n onSearchChange: (value: string) => void;\n };\n}\n\n/**\n * The base filter bar component. Can extend this to build different types of filter bar components.\n */\nexport class BaseFilterBar extends Component {\n /**\n * The text used for searching.\n */\n @alias('args.search')\n declare search: string;\n\n /**\n * The collection of filter tag items for the filter buttons.\n */\n @alias('args.filterTags')\n declare filterTags: FilterOption[];\n\n /**\n * Whether or not the user should have the option to filter using the filter tags.\n */\n @gt('filterTags.length', 1)\n declare showFilterOption: boolean;\n\n /**\n * Whether or not all the filter tags should be expanded/shown (true) or collapsed/hidden (false).\n */\n @tracked showFilterTags = this.isFiltered;\n\n /**\n * Indicates a filter is currently applied.\n */\n @computed('filterTags.@each.selected')\n get isFiltered(): boolean {\n return !isEmpty((this.filterTags || []).filter((item) => item.selected));\n }\n\n /**\n * Triggers a search action\n */\n doSearch(): void {\n this.args.onFilterTagsChange(this.filterTags.filter((item) => item.selected).map((item) => item.value));\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Automation::BaseFilterBar': typeof BaseFilterBar;\n }\n}\n\nexport interface FilterOption {\n name: string;\n icon?: string;\n value: number;\n selected: boolean;\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n\\n {{#if this.showFilterOption}}\\n \\n
\\n {{/if}}\\n\\n {{yield}}\\n \\n\\n {{#if (and this.showFilterOption this.showFilterTags)}}\\n
\\n {{#each this.filterTags as |tag|}}\\n {{#if tag.icon}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/each}}\\n
\\n {{/if}}\\n\",{ moduleName: \"customer-site/components/automation/filter-bar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { action } from '@ember/object';\nimport { BaseFilterBar } from '../base-filter-bar/index';\n\nimport type { BaseFilterBarSignature, FilterOption } from '../base-filter-bar/index';\n\nexport interface AutomationFilterBarSignature extends BaseFilterBarSignature {\n Element: HTMLDivElement;\n Blocks: {\n default: [];\n };\n}\n\n/**\n * Search and filter bar for automation rules and schedules.\n */\nexport default class AutomationFilterBar extends BaseFilterBar {\n /**\n * Toggles a filter tag's button between selected and unselected.\n */\n @action\n toggleFilterTagSelected(button: FilterOption): void {\n this.toggleFilterTags([button], !button.selected);\n }\n\n /**\n * Apply or remove a filter tag. It will apply the filter and change the color of button.\n */\n @action\n toggleFilterTags(buttons: FilterOption[], selected: boolean): void {\n const values = buttons.map((button) => button.value);\n let selectedValues = this.filterTags\n .filter(\n (tag) =>\n tag.selected &&\n // Initially we remove any of these values in case they were de-selected.\n !values.includes(tag.value)\n )\n .map((tag) => tag.value);\n\n if (selected) {\n selectedValues = selectedValues.concat(values);\n }\n\n this.args.onFilterTagsChange(selectedValues.map((value) => value.toString()));\n }\n\n /**\n * Toggles all the filter tags between expanded/shown and collapsed/hidden. If there are filters selected,\n * the button clears the filters and doesn't close the bar\n */\n @action\n handleFilterButtonClick(): void {\n // If it is filtered, clear filters but don't close the bar.\n if (this.isFiltered) {\n this.toggleFilterTags(this.filterTags, false);\n } else {\n this.showFilterTags = !this.showFilterTags;\n }\n }\n\n /**\n * If we're applying a filter, but the tags aren't being shown, correct that.\n */\n @action\n updateShowFilterTags(): void {\n if (this.isFiltered && !this.showFilterTags) {\n this.showFilterTags = true;\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Automation::FilterBar': typeof AutomationFilterBar;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n {{#each this.selectedItem as |item|}}\\n {{#if item.isSelected}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/each}}\\n
\\n
\",{ moduleName: \"customer-site/components/automation/rules/navigation-header/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\n\nimport './_style.scss';\nimport type RouteItem from 'customer-site/models/navigation/route-item';\n\nexport interface AutomationRulesNavigationItem {\n id: number;\n name: string;\n route: RouteItem | undefined;\n}\n\nexport interface AutomationRulesNavigationHeaderSignature {\n Args: {\n items: AutomationRulesNavigationItem[];\n selectedId: number;\n };\n}\n\nexport default class AutomationRulesNavigationHeader extends Component {\n get selectedItem(): { name: string; isSelected: boolean; routeId: number }[] {\n const { selectedId, items } = this.args;\n return items.map((item) => {\n return {\n name: item.name,\n isSelected: item.id == selectedId,\n routeId: item.route!.routeId\n };\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Automation::Rules::NavigationHeader': typeof AutomationRulesNavigationHeader;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n
\\n \\n \\n \\n
\\n

{{tc this this.messageTypeText}}

\\n\\n \\n
\\n
\",{ moduleName: \"customer-site/components/automation/rules/automation-feature-suggestion/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { EmberManageDevices } from 'customer-site/enums/CustomerPageUrl';\nimport {\n GarageDoor,\n Gate,\n ImageSensor,\n Light,\n Lock,\n Partition,\n SecuritySensor,\n Thermostat,\n Video,\n WaterValve,\n AccessControlDoor\n} from 'customer-site/enums/WebDeviceType';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NavigationService from 'customer-site/services/navigation';\n\nexport const ICON_MAP = {\n [Partition]: 'system',\n [Lock]: 'locks',\n [GarageDoor]: 'garage',\n [Gate]: 'garage',\n [Light]: 'lights',\n [Thermostat]: 'thermostat',\n [WaterValve]: 'water',\n [SecuritySensor]: 'system',\n [ImageSensor]: 'images',\n [Video]: 'video',\n [AccessControlDoor]: 'door-closed'\n};\n\nexport const TYPE_ICON_MAP = {\n schedule: 'date',\n rule: 'feature-automation'\n};\n\nexport interface AutomationRulesFeatureSuggestionSignature {\n Args: {\n deviceType: keyof typeof ICON_MAP;\n typeText: keyof typeof TYPE_ICON_MAP;\n hasRuleToCreate: boolean;\n addActionDefault: () => void;\n };\n}\n\n@intlPath({ path: 'automation/rules/automation-feature-suggestion' })\nexport default class AutomationRulesFeatureSuggestion extends Component {\n @service declare intl: ADCIntlService;\n @service declare navigation: NavigationService;\n\n @alias('args.typeText')\n declare typeText: keyof typeof TYPE_ICON_MAP;\n\n @alias('args.deviceType')\n declare deviceType: keyof typeof ICON_MAP;\n\n @alias('args.hasRuleToCreate')\n declare hasRuleToCreate: boolean;\n\n @alias('args.addActionDefault')\n declare addActionDefault: () => void;\n\n @computed('deviceType')\n get iconName(): string {\n if (this.deviceType == AccessControlDoor) {\n return ICON_MAP[this.deviceType];\n }\n\n return `feature-${ICON_MAP[this.deviceType] || 'lights'}`;\n }\n\n @computed('typeText')\n get typeIconName(): string {\n return TYPE_ICON_MAP[this.typeText] || 'feature-notifications';\n }\n\n @computed('hasRuleToCreate', 'addActionDefault')\n get addAction(): () => void {\n if (this.hasRuleToCreate) {\n return () => this.addActionDefault();\n }\n\n return () => this.navigation.transitionToRouteId(EmberManageDevices);\n }\n\n @computed('hasRuleToCreate', 'typeText')\n get messageTypeText(): string {\n return this.hasRuleToCreate ? this.typeText : 'manageDevices';\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Automation::Rules::AutomationFeatureSuggestion': typeof AutomationRulesFeatureSuggestion;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n \\n \\n \\n
\\n

{{@description}}

\\n \\n {{@buttonText}}\\n \\n
\",{ moduleName: \"customer-site/components/automation/shared/rules-schedule-action-sheet/item/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\n\nexport interface AutomationRulesScheduleActionSheetItemSignature {\n Args: {\n leftIconName: string;\n rightIconName: string;\n description: string;\n onClick: VoidFunction;\n buttonText: string;\n };\n}\n\nconst AutomationRulesScheduleActionSheetItem = templateOnlyComponent();\nexport default AutomationRulesScheduleActionSheetItem;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Automation::Shared::RulesScheduleActionSheet::Item': typeof AutomationRulesScheduleActionSheetItem;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default>\\n \\n \\n \\n\",{ moduleName: \"customer-site/components/automation/shared/rules-schedule-action-sheet/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\n\ninterface AutomationSharedRulesScheduleActionSheetSignature {\n Args: {\n close: () => void;\n isOpened: boolean;\n };\n}\n\n@intlPath({ path: 'automation/shared/rules-schedule-action-sheet' })\nexport default class AutomationSharedRulesScheduleActionSheet extends Component {}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Automation::Shared::RulesScheduleActionSheet': typeof AutomationSharedRulesScheduleActionSheet;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if this.allowedToViewRulesAndSchedules}}\\n \\n {{/if}}\\n \\n {{#if @newAutomationItems}}\\n {{#if @useNativeAddButton}}\\n {{#if @onNativeAddButtonPress}}\\n \\n {{/if}}\\n\\n {{else if this.hasSingleNewItemType}}\\n \\n\\n {{else}}\\n \\n \\n \\n\\n {{/if}}\\n {{/if}}\\n \\n\\n {{!-- Video rules add something else so have to give option to yield as well --}}\\n {{yield to=\\\"header\\\"}}\\n\\n \\n \\n\\n \\n {{!-- @glint-expect-error This component needs to be converted to TS. --}}\\n \\n \\n\\n \\n {{#if @search}}\\n

{{t \\'generic.noResults\\'}}

\\n {{else}}\\n {{#if (and this.isMobile (not this.isConfiguringVideoDevice))}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n\\n \\n\\n \\n
\\n {{yield View to=\\\"route-view\\\"}}\\n\\n\",{ moduleName: \"customer-site/components/automation/rules/rule-list/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 { gt, equal, alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport AutomationFilterBar from 'customer-site/components/automation/filter-bar/index';\nimport { Video } from 'customer-site/enums/WebDeviceType';\nimport { intlPath } from '@adc/i18n/path';\nimport { EmberAutomationSchedules, EmberRules, EmberRulesBuilder } from '../../../../enums/CustomerPageUrl';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport type { Registry } from '@ember/service';\nimport type BaseAutomationItem from 'customer-site/models/automation/base-automation-item';\nimport type { AutomationRulesFeatureSuggestionSignature } from '../automation-feature-suggestion/index';\nimport type { AutomationRulesNavigationItem } from '../navigation-header/index';\n\ninterface RuleListSignature {\n Element: HTMLDivElement;\n Args: Pick & {\n search: string;\n availableFilterTags: number[];\n showFilterTags: boolean;\n newAutomationItems: DropdownActionItem[];\n items: Promise;\n addText: string;\n triggerText: string;\n timeText: string;\n updateSearch: (text: string) => void;\n updateFilterTags: (filters: number[]) => void;\n useNativeAddButton: boolean;\n onNativeAddButtonPress: () => void;\n checkRecordingStatus: boolean;\n toolbarComponent: typeof Component;\n noAutomationItemsCanBeCreatedOnMobile: boolean;\n isRulePage: boolean;\n canDisplayRuleScheduleDropdown: boolean;\n onRefreshModel: VoidFunction;\n isOverUploadQuota: VoidFunction;\n hasCameraArmingAccess: boolean;\n aiDeterrenceUsage: boolean;\n };\n Blocks: {\n header: [];\n 'route-view': [unknown];\n };\n}\n\n/**\n * @classdesc\n * A list of automation rules or schedules.\n */\n@intlPath({ path: 'automation/rules/rule-list' })\nexport default class RulesList extends Component {\n @service declare contextManager: Registry['context-manager'];\n @service declare navigation: Registry['navigation'];\n @service declare intl: ADCIntlService;\n\n @tracked actionSheetOpened = false;\n\n /**\n * Is being viewed on mobile device?\n */\n @alias('contextManager.isMobileApp')\n declare isMobile: boolean;\n\n /**\n * The location of the toolbar component to be appended to this component.\n */\n get toolbarComponent(): typeof Component {\n return this.args.toolbarComponent ?? AutomationFilterBar;\n }\n\n /**\n * Indicates there is only one new rule type.\n */\n @equal('args.newAutomationItems.length', 1)\n declare hasSingleNewItemType: boolean;\n\n /**\n * Indicates there are no new rule types.\n */\n @gt('args.newAutomationItems.length', 0)\n declare hasNewRuleToCreate: boolean;\n\n /**\n * The items for this automation items collection.\n */\n @computed('args.items')\n get items(): Promise {\n return this.args.items ?? ([] as BaseAutomationItem[]);\n }\n\n /**\n * Should text be displayed on mobile rather than showing the Add New Rule button?\n */\n @computed('isMobile', 'args.noAutomationItemsCanBeCreatedOnMobile')\n get showTextOnMobile(): boolean {\n return this.isMobile && this.args.noAutomationItemsCanBeCreatedOnMobile;\n }\n\n /**\n * Should the navigation header be displayed?\n */\n @computed('isMobile', 'args.canDisplayRuleScheduleDropdown')\n get allowedToViewRulesAndSchedules(): boolean {\n return (\n this.isMobile &&\n this.args.canDisplayRuleScheduleDropdown &&\n this.navigation.userHasAccess(EmberRules) &&\n this.navigation.userHasAccess(EmberAutomationSchedules)\n );\n }\n\n get isConfiguringVideoDevice(): boolean {\n return this.args.deviceType == Video;\n }\n\n /**\n * Executes the first add new item action.\n */\n @action createNewFirstAutomationItem(): void {\n // Is there a new item action?\n const action = this.args.newAutomationItems[0]?.action;\n\n if (action) {\n // Execute action.\n action();\n }\n }\n\n /**\n * Create a new rule via the Ember Rules Builder.\n */\n @action createNewRuleWithEmberRulesBuilder(): void {\n this.navigation.transitionToRouteId(EmberRulesBuilder, 'new');\n }\n\n @computed('navigation')\n get dropdownItems(): AutomationRulesNavigationItem[] {\n return [\n {\n id: 1,\n name: this.intl.t('generic.rules.rules'),\n route: this.navigation.getRouteItem(EmberRules)\n },\n {\n id: 2,\n name: this.intl.t('generic.schedules'),\n route: this.navigation.getRouteItem(EmberAutomationSchedules)\n }\n ];\n }\n\n /**\n * Toggle the rules/schedule builder actionsheet to open or close.\n */\n @action toggleActionSheetBuilder(): void {\n this.actionSheetOpened = !this.actionSheetOpened;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Automation::Rules::RuleList': typeof RulesList;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n {{#if this.showHeaderText}}\\n
{{coalesce @headerText (tc this \\'ruleWillRun\\')}}
\\n {{/if}}\\n\\n \\n <:content as |item|>\\n {{#if item.props.isSomeTimes}}\\n {{#if @customScheduleSubText}}\\n \\n {{/if}}\\n \\n {{else if item.props.isVacation}}\\n \\n {{/if}}\\n \\n \\n
\\n\\n\",{ moduleName: \"customer-site/components/automation/schedule-input/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { MINUTES_IN_DAY } from '@adc/ember-utils/constants/time';\nimport { getDayScheduleDuration } from '@adc/ember-utils/utils/date-time';\nimport { newDate, nowPlusDays } from '@adc/ember-utils/utils/date-time';\nimport { getObjProperties } 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 { isPresent } from '@ember/utils';\nimport { defaultIsoCode } from '@adc/app-infrastructure/models/locale';\nimport { intlPath } from '@adc/i18n/path';\nimport { VALUE_CHANGE_ACTION } from '@adc/ui-components/components/common/base-input';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport {\n EVERY_DAY,\n EVERY_DAY_BITS,\n WEEK_DAYS,\n dayBitsToArray,\n dayArrayToBits,\n dateToMinutes,\n minutesToDate\n} from '../../../utils/datetime';\n\nimport './_style.scss';\n\n/**\n * The begin time minute (0 hour)\n *\n * @type {Number}\n */\nconst BEGIN_MIN = 0;\n\n/**\n * Creates an object containing a conversion of selected days array into an object of ints with dayBits,\n * and begin/end time in minutes. End time is corrected if less than begin time.\n *\n * @param {Array} selectedDays The current days selected, as an array of selected days.\n * @param {Number} beginMinutes The current begin time in minutes.\n * @param {Number} endMinutes The current end time in minutes. If earlier than begin time, will be corrected to +24 hours, or to end time bound if defined and earlier than +24 hrs.\n * @param {Number} endTimeBound The current end time bound in minutes. If defined, restricts end time from correcting past it.\n * @returns {{dayBits: number, beginTime: number, endTime: number}}\n *\n * @private\n * @instance\n * @memberof components.ui.ScheduleInput\n */\nfunction getTimeValues(\n selectedDays = EVERY_DAY,\n beginMinutes = BEGIN_MIN,\n endMinutes = MINUTES_IN_DAY,\n endTimeBound = undefined\n) {\n // Correct end time in cases involving changes with next day times (end time before begin time or greater than 24 hour difference).\n let endTimeCorrection = BEGIN_MIN;\n if (beginMinutes >= endMinutes) {\n if (endTimeBound !== undefined && endMinutes + MINUTES_IN_DAY > endTimeBound) {\n endTimeCorrection += endTimeBound - endMinutes;\n } else {\n endTimeCorrection += MINUTES_IN_DAY;\n }\n } else if (endMinutes - beginMinutes > MINUTES_IN_DAY) {\n endTimeCorrection -= MINUTES_IN_DAY;\n }\n\n return {\n dayBits: dayArrayToBits(selectedDays),\n beginTime: beginMinutes,\n endTime: endMinutes + endTimeCorrection\n };\n}\n\nconst ALL_TIMES_ID = 0,\n SOME_TIMES_ID = 1,\n SUNSET_ID = 2,\n VACATION_ID = 3;\n\n/**\n * @classdesc\n *\n * Component for creating schedules for rules.\n * Options for always, sometimes (selected with day-time picker), and only after sunset.\n */\n@intlPath({ path: 'automation.schedule-input' })\nexport default class ScheduleInput extends Component {\n @service intl;\n @service contextManager;\n\n tagName = '';\n\n /**\n * Should the header text be displayed?\n *\n * @type {boolean}\n */\n showHeaderText = true;\n\n /**\n * The initial days of the week we want to pass in to the component. Can be an array of numbers or a dayBits number.\n * Defaults to every day if not passed in.\n * Schedule is always if initialDays, beginTime, and endTime are not passed in.\n *\n * @type {Array|number|undefined}\n */\n initialDays = undefined;\n\n /**\n * The initial begin time. Can be a Date or a number of minutes.\n * Defaults to midnight if not passed in.\n * Schedule is always if initialDays, beginTime, and endTime are not passed in.\n *\n * @type {Date|number|undefined}\n */\n beginTime = undefined;\n\n /**\n * The initial end time. Can be a Date or a number of minutes.\n * Defaults to 11:59pm if not passed in.\n * Schedule is always if initialDays, beginTime, and endTime are not passed in.\n *\n * @type {Date|number|undefined}\n */\n endTime = undefined;\n\n /**\n * @type {Date}\n */\n vacationStartDate = nowPlusDays(1);\n\n /**\n * @type {Date}\n */\n vacationEndDate = nowPlusDays(8);\n\n /**\n * @function\n * @returns {Date}\n */\n @computed('vacationStartDate', 'vacationEndDate')\n get minVacationDate() {\n let now = new Date();\n if (now > this.vacationStartDate && now < this.vacationEndDate) {\n return this.vacationStartDate;\n }\n return now;\n }\n\n /**\n * @type {Date}\n */\n maxVacationDate = nowPlusDays(90);\n\n /**\n * Do we want to display the sunset option?\n * Note: afterSunset value is ignored if this is not passed in.\n *\n * @type {boolean}\n */\n displaySunsetOption = false;\n\n /**\n * @type {boolean}\n */\n displayVacationOption = false;\n\n /**\n * Has the user selected the 'only after sunset' option? Must be passed with displaySunsetOption=true as well.\n * Note: custom schedule values take precedence over this value,\n * so if afterSunset is initially true, don't pass in initialDays, beginTime, or endTime.\n *\n * @type {boolean}\n */\n afterSunset = false;\n\n /**\n * Has the user selected the custom schedule option?\n *\n * @type {boolean}\n */\n displayCustomSchedule = false;\n\n /**\n * Has the user selected the vacation schedule option?\n *\n * @type {boolean}\n */\n vacationSelected = false;\n\n /**\n * Should the day of the week picker start on sunday or monday? True for sunday, false for monday.\n *\n * @type {boolean}\n */\n weekStartsOnSunday = true;\n\n /**\n * Do we want the day picker to display in compact mode?\n *\n * @type {boolean}\n */\n compactMode = false;\n\n /**\n * When the begin time changes, should we reset the end time to be 1 hour past that?\n *\n * @type {boolean}\n */\n resetEndTimeOnBeginTimeChange = false;\n\n /**\n * The text to use in the button for the all times schedule.\n * By default, this is 'At all times'.\n *\n * @type {String|undefined}\n */\n allTimesButtonText;\n\n /**\n * The text to use in the button for the custom time schedule.\n * By default, this is 'Only during the following times'.\n *\n * @type {String|undefined}\n */\n someTimesButtonText;\n\n /**\n * The text to use in the section below the custom schedule button.\n * By default, undefined, and if undefined, secion does not render.\n *\n * @type {String|undefined}\n */\n customScheduleSubText;\n\n /**\n * The types for the first radio input, containing all times and some times.\n *\n * @type {BinaryListItem[]}\n */\n scheduleTypes = [];\n\n /**\n * The begin time bound in minutes for this schedule, outputted to the schedule-picker component.\n * Only updated when in custom schedule mode.\n *\n * @type {number|undefined}\n */\n beginTimeBoundOutput;\n\n /**\n * The end time bound in minutes for this schedule, outputted to the schedule-picker component.\n * Only updated when in custom schedule mode.\n *\n * @type {number|undefined}\n */\n endTimeBoundOutput;\n\n /**\n * The days of the week out of bounds for this schedule, outputted to the schedule-picker component.\n * Only updated when in custom schedule mode.\n *\n * @type {Array|undefined}\n */\n scheduleDayBoundsArray;\n\n /**\n * Alias for the locale object.\n *\n * @function\n * @returns {models.Locale}\n */\n @alias('contextManager.identityModel.profile.locale')\n locale;\n\n /**\n * Initialize beginMinutes to 9am by default if no schedule is passed\n *\n * @type {number}\n */\n defaultBeginMinutes = dateToMinutes(newDate(9));\n\n /**\n * Initialize endMinutes to 5pm by default if no schedule is passed\n *\n * @type {number}\n */\n defaultEndMinutes = dateToMinutes(newDate(17));\n\n /**\n * Initialize days to M-F by default if no schedule is passed\n *\n * @type { Array }\n */\n defaultScheduleDays = WEEK_DAYS;\n\n /**\n * Function to be called if schedule is corrected by an update to schedule bounds.\n *\n * @type { Function }\n */\n onScheduleCorrectedByBounds = () => {};\n\n /**\n * Should the schedule values be updated to the bounds values if \"all times\" option is selected?\n *\n * @type {boolean}\n */\n shouldCropAllTimesScheduleToBounds = false;\n\n /** @override */\n\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 const [\n initialDays,\n beginTime,\n endTime,\n displaySunsetOption,\n displayVacationOption,\n vacationSelected,\n afterSunset,\n locale,\n weekStartsOnSunday,\n beginTimeBound,\n endTimeBound,\n scheduleDayBounds,\n initialScheduleNotCustom\n ] = getObjProperties(\n this,\n 'initialDays',\n 'beginTime',\n 'endTime',\n 'displaySunsetOption',\n 'displayVacationOption',\n 'vacationSelected',\n 'afterSunset',\n 'locale',\n 'weekStartsOnSunday',\n 'beginTimeBound',\n 'endTimeBound',\n 'scheduleDayBounds',\n 'initialScheduleNotCustom'\n ),\n // Cache if user passed in initialDays, beginTime, or endTime as bools. Necessary later to determine if initial schedule is custom.\n [passedInInitialDays, passedInBeginTime, passedInEndTime] = [initialDays, beginTime, endTime].map(\n isPresent\n ),\n // Initialize scheduleDays to be an array of ints, possibly converted from a dayBits int.\n scheduleDays = Number.isInteger(initialDays) ? dayBitsToArray(initialDays) : initialDays || EVERY_DAY,\n beginMinutes = Number.isInteger(beginTime) ? beginTime : dateToMinutes(beginTime || newDate(0));\n let endMinutes = Number.isInteger(endTime) ? endTime : dateToMinutes(endTime || newDate(24));\n const duration = getDayScheduleDuration(beginMinutes, endMinutes),\n // Check to see if this schedule is always running: this is all days from 0 minutes to 1440 minutes*.\n // For a schedule to be custom, we must be passed in at least one day or time value that is not the default value\n // AND we want to make sure this wasn't already specified as an afterSunset rule.\n // and we want to make sure it's not manually overridden by initialScheduleNotCustom (used if this is a sub-schedule and it matches the overall schedule time.)\n // *Note that in some use cases, the default end time may be saved as 0 minutes, so we want to check that end time as well.\n scheduleIsCustom =\n !initialScheduleNotCustom &&\n !afterSunset &&\n ((passedInInitialDays ? dayArrayToBits(scheduleDays) !== EVERY_DAY_BITS : false) ||\n (passedInBeginTime && passedInEndTime && duration < MINUTES_IN_DAY));\n\n if (duration >= MINUTES_IN_DAY) {\n endMinutes = beginMinutes + MINUTES_IN_DAY;\n }\n\n // If user doesn't pass in button text values, use default.\n let [allTimesButtonText, someTimesButtonText] = getObjProperties(\n this,\n 'allTimesButtonText',\n 'someTimesButtonText'\n );\n\n // Only use the default button text values if it wasn't passed into the component.\n allTimesButtonText = allTimesButtonText !== undefined ? allTimesButtonText : this.intl.tc(this, 'allTimes');\n someTimesButtonText = someTimesButtonText !== undefined ? someTimesButtonText : this.intl.tc(this, 'someTimes');\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 allTimesButtonText,\n someTimesButtonText\n });\n\n // Initialize schedule bounds.\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 beginTimeBoundOutput: beginTimeBound,\n endTimeBoundOutput: endTimeBound,\n scheduleDayBoundsArray: scheduleDayBounds == null ? null : dayBitsToArray(scheduleDayBounds)\n });\n\n // Initialize ScheduleTypes:\n const initialScheduleTypes = [\n new BinaryListItem({\n label: this.allTimesButtonText,\n state: true,\n props: {\n id: ALL_TIMES_ID\n }\n }),\n new BinaryListItem({\n label: this.someTimesButtonText,\n state: false,\n props: {\n id: SOME_TIMES_ID,\n isSomeTimes: true\n }\n })\n ];\n\n if (displaySunsetOption) {\n initialScheduleTypes.push(\n new BinaryListItem({\n label: this.intl.tc(this, 'onlySunset'),\n state: false,\n props: {\n id: SUNSET_ID\n }\n })\n );\n }\n\n if (displayVacationOption) {\n initialScheduleTypes.push(\n new BinaryListItem({\n label: this.intl.tc(this, 'onlyVacation'),\n state: false,\n props: {\n id: VACATION_ID,\n isVacation: true\n }\n })\n );\n }\n\n this.scheduleTypes = initialScheduleTypes;\n\n const [localeCode = defaultIsoCode, localeWeekStartsOnSunday = true] = getObjProperties(\n locale,\n 'isoCode',\n 'weekStartsOnSunday'\n );\n\n // Update locale and week start values.\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 localeCode,\n // Only use the default week start value if it wasn't passed into the component.\n weekStartsOnSunday: weekStartsOnSunday !== undefined ? weekStartsOnSunday : localeWeekStartsOnSunday\n });\n\n // If this is a special type of schedule, select the appropriate radio button\n if (displaySunsetOption && afterSunset) {\n this.scheduleTypes.forEach((type) => (type.state = type.props.id === SUNSET_ID));\n } else if (displayVacationOption && vacationSelected) {\n this.scheduleTypes.forEach((type) => (type.state = type.props.id === VACATION_ID));\n } else if (scheduleIsCustom) {\n this.scheduleTypes.forEach((type) => (type.state = type.props.id === SOME_TIMES_ID));\n\n // Update days and schedule times parsed from component inputs, and display the custom schedule values.\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 beginMinutes,\n displayCustomSchedule: true,\n endMinutes,\n scheduleDays\n });\n\n return;\n }\n\n // We have an always schedule or a sunset schedule. Let's initialize the internal custom schedule.\n // This won't be displayed or returned from this component until the user clicks to view 'custom times'.\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 beginMinutes: this.defaultBeginMinutes,\n endMinutes: this.defaultEndMinutes,\n scheduleDays: this.defaultScheduleDays\n });\n }\n\n /**\n * Handler for when the schedule type is changed between all times, some times, and after sunset.\n *\n * @param {BinaryListItem<{ id: number }>[]} updatedButtonValues The updated schedule-type selection array.\n */\n @action scheduleTypeChanged(items) {\n const selectedItem = items.find((i) => i.state);\n if (!selectedItem) {\n return;\n }\n\n const { id } = selectedItem.props,\n displayCustomSchedule = id === SOME_TIMES_ID,\n vacationSelected = id === VACATION_ID,\n afterSunset = id === SUNSET_ID;\n\n // Update component display properties.\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 afterSunset,\n displayCustomSchedule\n });\n\n // What begin and end time should we pass back in the callback function?\n // Note, we don't update begin and end times here so the custom date is retained if the user switches to/from 'all times'.\n let selectedDays = EVERY_DAY,\n beginTime = newDate(0),\n endTime = newDate(24),\n beginTimeMinutes = BEGIN_MIN,\n endTimeMinutes = MINUTES_IN_DAY;\n\n // Update beginTime and endTime if we switch to a custom schedule.\n // Also, refresh values for schedule bounds, and correct values if out of bounds.\n if (displayCustomSchedule) {\n this.onScheduleBoundsUpdate();\n\n selectedDays = this.scheduleDays;\n beginTimeMinutes = this.beginMinutes;\n endTimeMinutes = this.endMinutes;\n beginTime = minutesToDate(this.beginMinutes);\n endTime = minutesToDate(this.endMinutes);\n }\n\n const timeValuesAsIntegers = getTimeValues(selectedDays, beginTimeMinutes, endTimeMinutes, this.endTimeBound),\n valueChangeAction = this[VALUE_CHANGE_ACTION];\n\n // Send action with item that changed and collection of selected contacts.\n valueChangeAction &&\n valueChangeAction(\n timeValuesAsIntegers,\n afterSunset,\n { selectedDays, beginTime, endTime },\n displayCustomSchedule,\n vacationSelected\n );\n }\n\n /**\n * Handler for when the custom day/time has been modified in this component.\n *\n * @param {{beginTimeInMinutes: Number, endTimeInMinutes: Number, selectedDays: Array, storeUpdatedValues: boolean}}\n */\n @action dateTimeChanged({ beginTimeInMinutes, endTimeInMinutes, selectedDays }, storeUpdatedValues = true) {\n // Store the updated begin and end minutes in case the user switches from and to custom times so these values will be saved.\n if (storeUpdatedValues) {\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 beginMinutes: beginTimeInMinutes,\n endMinutes: endTimeInMinutes\n });\n }\n\n const beginTime = minutesToDate(beginTimeInMinutes),\n endTime = minutesToDate(endTimeInMinutes),\n timeValuesAsIntegers = getTimeValues(selectedDays, beginTimeInMinutes, endTimeInMinutes, this.endTimeBound),\n valueChangeAction = this[VALUE_CHANGE_ACTION];\n\n valueChangeAction && valueChangeAction(timeValuesAsIntegers, false, { selectedDays, beginTime, endTime });\n }\n\n @action onBeginTimeUpdate() {\n if (this.displayCustomSchedule) {\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.set('beginMinutes', this.beginTime);\n }\n }\n\n @action onEndTimeUpdate() {\n if (this.displayCustomSchedule) {\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.set('endMinutes', this.endTime);\n }\n }\n\n @action onSelectedDaysUpdate() {\n if (this.displayCustomSchedule) {\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.set('scheduleDays', dayBitsToArray(this.initialDays));\n }\n }\n\n @action onScheduleBoundsUpdate() {\n const beginTimeBound = this.beginTimeBound,\n endTimeBound = this.endTimeBound,\n scheduleDayBounds = this.scheduleDayBounds,\n currentBeginTime = this.beginMinutes,\n currentEndTime = this.endMinutes,\n currentDayBits = dayArrayToBits(this.scheduleDays);\n\n if (this.displayCustomSchedule) {\n let updatedValues = false;\n\n // Check and correct for out of bounds start times:\n if (\n beginTimeBound > currentBeginTime ||\n currentEndTime - beginTimeBound > MINUTES_IN_DAY ||\n endTimeBound <= currentBeginTime\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.set('beginMinutes', beginTimeBound);\n updatedValues = true;\n }\n\n // Check and correct for out of bounds end times:\n if (endTimeBound < currentEndTime || beginTimeBound >= currentEndTime) {\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.set('endMinutes', endTimeBound);\n updatedValues = true;\n }\n\n // Check and correct for out of bounds days:\n const dayBitsOutOfBounds = scheduleDayBounds & currentDayBits;\n if (dayBitsOutOfBounds > 0) {\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.set('scheduleDays', dayBitsToArray(currentDayBits & ~scheduleDayBounds));\n updatedValues = true;\n }\n\n if (updatedValues) {\n this.dateTimeChanged({\n beginTimeInMinutes: this.beginMinutes,\n endTimeInMinutes: this.endMinutes,\n selectedDays: this.scheduleDays\n });\n this.onScheduleCorrectedByBounds.call();\n }\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.set('beginTimeBoundOutput', beginTimeBound);\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.set('endTimeBoundOutput', endTimeBound);\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.set('scheduleDayBoundsArray', dayBitsToArray(scheduleDayBounds));\n }\n // If schedule is not custom, update selected values to bounds values if shouldCropAllTimesScheduleToBounds is true.\n else if (\n this.shouldCropAllTimesScheduleToBounds &&\n beginTimeBound !== undefined &&\n endTimeBound !== undefined &&\n scheduleDayBounds !== undefined\n ) {\n this.dateTimeChanged(\n {\n beginTimeInMinutes: beginTimeBound,\n endTimeInMinutes: endTimeBound,\n selectedDays: dayBitsToArray(~scheduleDayBounds & EVERY_DAY_BITS)\n },\n // Adding this storeUpdatedValues = false option so that the internal values don't get stomped on update, allowing previous custom schedule values to be saved.\n false\n );\n }\n }\n\n /**\n * Handler for when the user modifies the vacation date range.\n *\n * @param {{startDate: Date, endDate: Date}}\n */\n @action vacationChanged({ startDate, endDate }) {\n let selectedDays = EVERY_DAY,\n beginTime = newDate(0),\n endTime = newDate(24),\n beginTimeMinutes = BEGIN_MIN,\n endTimeMinutes = MINUTES_IN_DAY;\n\n const scheduleProperties = getTimeValues(selectedDays, beginTimeMinutes, endTimeMinutes, this.endTimeBound);\n\n scheduleProperties.vacationStartDate = startDate ?? this.vacationStartDate;\n scheduleProperties.vacationEndDate = endDate ?? this.vacationEndDate;\n\n const valueChangeAction = this[VALUE_CHANGE_ACTION];\n if (valueChangeAction) {\n valueChangeAction(scheduleProperties, false, { selectedDays, beginTime, endTime }, false, true);\n }\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n

{{tc this \\'featureUnderConstruction\\'}}

\\n
\",{ moduleName: \"customer-site/components/beta/feature-under-construction/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\n\ninterface BetaWarningSignature {\n Element: HTMLDivElement;\n}\n\n/**\n * @classdesc\n * Internal message for features under development to minimize bug reports.\n */\n@intlPath({ path: 'beta/feature-under-construction' })\nexport default class BetaWarning extends Component {}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Beta::FeatureUnderConstruction': typeof BetaWarning;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n
\\n
\\n {{tc\\n
\\n
\\n {{@model.bodyMainText}}\\n
\\n
\\n {{@model.bodySubText}}\\n {{#if @model.leavePageWarning}}\\n
\\n
\\n
\\n {{@model.leavePageWarning}}\\n
\\n {{/if}}\\n
\\n
\\n \\n
\",{ moduleName: \"customer-site/components/modals/automation/presence-state/presence-state-explainer/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 { EmberPresenceStateSettings } from 'customer-site/enums/CustomerPageUrl';\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';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface PresenceStateExplainerArgs {\n model: {\n titleText: string;\n bodyMainText: string;\n bodySubText: string;\n closeButtonText: string;\n imagePath: string;\n showCloseButton: boolean;\n leavePageWarning?: string;\n };\n}\n\n/**\n * @classdesc\n * This is a modal for explaining Presence State from the Presence State Settings page.\n **/\n@intlPath({ path: 'modals/automation/presence-state/presence-state-explainer' })\nexport default class PresenceStateExplainerModal extends Component {\n @service declare intl: ADCIntlService;\n @service declare modals: ModalService;\n @service declare navigation: NavigationService;\n\n @action updateScrollIndicator(el: HTMLDivElement): void {\n const body = el.querySelector('.info-dialog-body') as HTMLDivElement;\n el.classList.toggle('has-scroll-indicator', body.scrollHeight > body.offsetHeight);\n }\n\n @action handleScroll(evt: MouseEvent & { target: HTMLDivElement }): void {\n const el = evt.target;\n el.classList.toggle('scrolled', !!el.scrollTop);\n }\n\n @action goToStatusSettingsPage(): void {\n this.navigation.transitionToRouteId(EmberPresenceStateSettings);\n }\n\n get buttons(): ModalButtonConfig[] {\n const { intl } = this,\n modalButtons: ModalButtonConfig[] = [],\n model = this.args.model,\n closeButton = getModalFooterButton(model.closeButtonText);\n\n if (model.showCloseButton) {\n modalButtons.push(closeButton);\n }\n\n if (model.leavePageWarning) {\n modalButtons.push(\n getModalFooterButton(intl.t('generic.settings'), this.goToStatusSettingsPage, 'btn-color-primary')\n );\n }\n\n return modalButtons;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Automation::PresenceState::PresenceStateExplainer': typeof PresenceStateExplainerModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n {{!-- Display available rule options if customer has available rules --}}\\n {{#if @model.videoRules.length}}\\n
{{tc this \\'select\\'}}
\\n
    \\n {{#each @model.videoRules as |rule|}}\\n
  • \\n \\n
    \\n
    \\n {{#if rule.isRecommended}}\\n \\n {{t \\'generic.recommended\\'}}\\n \\n {{/if}}\\n
    {{rule.name}}
    \\n
    \\n
    {{rule.actionText}}
    \\n
    \\n \\n \\n
  • \\n {{/each}}\\n
\\n {{else}}\\n {{!-- Display Attention Required message customer has no available rules --}}\\n
{{tc this \\'attention\\'}}
\\n
{{tc this \\'rule\\'}}
\\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/modals/automation/rules/new-video-rule/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { intlPath } from '@adc/i18n/path';\nimport NewRules from '../new-rules';\n\nimport type RuleSuggestion from 'customer-site/models/automation/rules/rule-suggestion';\n\ninterface NewVideoRuleSignature {\n Args: {\n model: {\n videoRules: RuleSuggestion[];\n };\n };\n}\n\n/**\n * @classdesc\n * New video rule dialog.\n **/\n@intlPath({ path: 'modals/automation/rules/new-video-rule' })\nexport default class NewVideoRule extends NewRules {}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if this.showTitle}}\\n
\\n {{#if @useStoriesUI}}\\n
\\n {{this.showTitle}}\\n
\\n {{else}}\\n
\\n

{{this.showTitle}}

\\n
\\n {{#if this.isPush}}\\n
{{t \\'generic.recommended\\'}}
\\n {{/if}}\\n {{#if this.tooltipText}}\\n \\n {{/if}}\\n {{#if (and @canShowSMSWarning this.isMobile)}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n {{#if (and this.isPush @showDuplicateNotificationWarning)}}\\n \\n \\n {{tc this \\\"pushNotificationAlertTitle\\\"}}\\n \\n {{#if this.isAlertOpen}}\\n

{{tc this \\\"pushNotificationAlertExplainer\\\"}}

\\n {{/if}}\\n
\\n {{/if}}\\n\\n
\\n {{#each this.items as |item|}}\\n
\\n \\n {{#if item.model.contact.icon}}\\n \\n {{/if}}\\n {{#if (this.isCurrentDevice item)}}\\n \\n \\n \\n {{/if}}\\n {{#if item.showUserName}}\\n {{#if (await item.userName)}}\\n {{await item.userName}}\\n {{/if}}\\n {{~item.model.contact.addressToDisplay~}}\\n {{else}}\\n {{#if @useStoriesUI}}\\n
\\n
\\n
\\n {{item.model.contact.addressToDisplay}}\\n
\\n {{#unless @isVideoIntercomCallRule}}\\n {{#if this.isPush}}\\n
\\n {{t \\'generic.recommended\\'}}\\n
\\n {{#if this.tooltipText}}\\n \\n {{/if}}\\n {{#if (and @canShowSMSWarning this.isMobile)}}\\n \\n {{/if}}\\n {{/if}}\\n {{/unless}}\\n
\\n
{{this.notificationTypeText}}
\\n
\\n {{else}}\\n {{item.model.contact.addressToDisplay}}\\n {{/if}}\\n {{/if}}\\n \\n {{#if (this.isCurrentDevice item)}}\\n

\\n {{tc this \\'thisDeviceText\\'}}\\n

\\n {{/if}}\\n
\\n {{yield item.model}}\\n
\\n
\\n {{/each}}\\n
\\n
\",{ moduleName: \"customer-site/components/ui/notification-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed, set } from '@ember/object';\nimport { equal, alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport CustomerKnowledgeBase from 'customer-site/enums/CustomerKnowledgeBase';\nimport { buildKnowledgeBaseURL } from 'customer-site/helpers/knowledge-base-link';\nimport PushDeviceAddress from 'customer-site/models/users/push-device-address';\nimport { intlPath } from '@adc/i18n/path';\nimport ContactTypeEnum from '@adc/login-setup-addon/enums/ContactType';\nimport { VALUE_CHANGE_ACTION } from '@adc/ui-components/components/common/base-input';\n\nimport './_style.scss';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type NotificationContactAddress from 'customer-site/models/automation/rules-builder/notification/contact-address';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\n\ntype NotificationGroupOption = Pick;\n\ntype NotificationGroupItem = {\n contact: ContactAddress;\n isSelected: boolean;\n options: NotificationGroupOption[];\n selectedOption: NotificationGroupOption;\n};\n\n/**\n * An object with properties for rendering each contact item.\n */\nexport class ContactItem {\n @tracked model: NotificationGroupItem;\n @tracked alwaysHideUserName = false;\n\n constructor(model: NotificationGroupItem, alwaysHideUserName: boolean) {\n this.model = model;\n this.alwaysHideUserName = alwaysHideUserName;\n }\n\n /**\n * Indicates whether the user name should be displayed as part of the address.\n */\n @computed('alwaysHideUserName', 'model.contact.addressType')\n get showUserName(): boolean {\n if (this.alwaysHideUserName) {\n return false;\n }\n\n const { addressType } = this.model.contact;\n return addressType !== ContactTypeEnum.IPhonePush && addressType !== ContactTypeEnum.MonitoringStation;\n }\n\n /**\n * The user name (empty for push devices).\n */\n @computed('model.contact.{address,user}')\n get userName(): Promise {\n return this.model.contact.user.then((user) => user?.displayName);\n }\n}\n\nexport interface NotificationListSignature {\n Element: HTMLDivElement;\n Args: {\n contacts: NotificationGroupItem[];\n title: string;\n alwaysHideUserName: boolean;\n 'value-change': (\n model: NotificationGroupItem,\n isSelected: boolean,\n selectedItems: NotificationGroupItem[]\n ) => void;\n disabled?: boolean;\n useStoriesUI?: boolean;\n type?: ContactTypeEnum;\n canShowSMSWarning?: boolean;\n showDuplicateNotificationWarning?: boolean;\n onTooltipHover?: VoidFunction;\n onTooltipLeave?: VoidFunction;\n onTooltipClicked?: (type: ContactTypeEnum) => void;\n isVideoIntercomCallRule?: boolean;\n };\n Blocks: {\n default: [NotificationGroupItem];\n };\n}\n\n/**\n * @classdesc\n * A component for displaying lists of contact addresses for notifications.\n */\n@intlPath({ path: 'ui/notification-list' })\nexport default class NotificationListComponent extends Component {\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n @tracked isAlertOpen = true;\n\n get type(): ContactTypeEnum {\n return this.args.type ?? ContactTypeEnum.Unknown;\n }\n\n /**\n * We use this to determine whether or not the notification list type matches IPhonePush.\n */\n @equal('type', ContactTypeEnum.IPhonePush)\n declare isPush: boolean;\n\n /**\n * We use this to determine whether or not the notification list type matches Mobile.\n */\n @equal('type', ContactTypeEnum.Mobile)\n declare isMobile: boolean;\n\n /**\n * Does the user have knowledge base permissions?\n */\n @alias('contextManager.identityModel.canViewKnowledgeBase')\n declare hasKnowledgeBasePermissions: boolean;\n\n /**\n * Determines the title for the group to be shown.\n */\n get showTitle(): string {\n const { args } = this;\n\n // For the new UI, only the Monitoring Station group should be separate.\n return args.useStoriesUI\n ? args.type === ContactTypeEnum.MonitoringStation\n ? this.intl.tc(this, 'monitoringStation')\n : ''\n : args.title;\n }\n\n /**\n * Determines the subtext to display for the recipient type on the new UI.\n */\n @computed('type')\n get notificationTypeText(): string {\n const { intl, type } = this;\n switch (type) {\n case ContactTypeEnum.IPhonePush:\n return intl.t('@adc/login-setup-engine.arming-reminder.push');\n case ContactTypeEnum.Email:\n return intl.t('@adc/login-setup-engine.arming-reminder.email');\n case ContactTypeEnum.Mobile:\n return intl.t('@adc/login-setup-engine.arming-reminder.sms');\n case ContactTypeEnum.MonitoringStation:\n return intl.tc(this, 'monitoringStation');\n default:\n return '';\n }\n }\n\n /**\n * Determines the text of the tooltip.\n */\n @computed('type', 'hasKnowledgeBasePermissions')\n get tooltipText(): string {\n const { intl, hasKnowledgeBasePermissions } = this;\n\n switch (this.type) {\n case ContactTypeEnum.IPhonePush:\n return hasKnowledgeBasePermissions\n ? `${intl.tc(this, 'pushTooltipText')} ${intl.tc(this, 'moreInfoInstruction')}`\n : intl.tc(this, 'pushTooltipText');\n case ContactTypeEnum.MonitoringStation:\n return hasKnowledgeBasePermissions\n ? `${intl.tc(this, 'monitoringStationTooltipText')} ${intl.tc(this, 'moreInfoInstruction')}`\n : intl.tc(this, 'monitoringStationTooltipText');\n default:\n return '';\n }\n }\n\n /**\n * The tooltip text for mobile notifications.\n */\n @computed('hasKnowledgeBasePermissions')\n get mobileTooltipText(): string {\n const { intl } = this;\n\n return this.hasKnowledgeBasePermissions\n ? `${intl.t('video.rules.analytics.draw.mobileTextOnlyWarning')} ${intl.tc(this, 'moreInfoInstruction')}`\n : intl.t('video.rules.analytics.draw.mobileTextOnlyWarning');\n }\n\n /**\n * The computed checkbox items to show.\n */\n get items(): ContactItem[] {\n const { contacts, alwaysHideUserName } = this.args;\n return contacts.map((model) => new ContactItem(model, !!alwaysHideUserName));\n }\n\n /**\n * Local helper to determine if the item represents the current device.\n */\n isCurrentDevice = (item: ContactItem): boolean => {\n const { contact } = item.model;\n if (!(contact instanceof PushDeviceAddress)) {\n return false;\n }\n\n return contact.isCurrentDevice;\n };\n\n /**\n * Local helper to hide or show alert body.\n */\n @action toggleIsAlertOpen(): void {\n this.isAlertOpen = !this.isAlertOpen;\n }\n\n /**\n * This opens a link to the corresponding knowledge base article.\n */\n @action onTooltipClick(): void {\n // Bubble the event up to the onTooltipClicked action if it has been defined\n this.args.onTooltipClicked?.(this.type);\n\n const { type } = this;\n if (\n type === ContactTypeEnum.Mobile ||\n type === ContactTypeEnum.IPhonePush ||\n type === ContactTypeEnum.MonitoringStation\n ) {\n // A webpage containing information on the differences between push, text, and email notifications.\n this.navigation.transitionToUrlInNewBrowserWindow(\n buildKnowledgeBaseURL(CustomerKnowledgeBase.PushAndTextNotificationsDifferences, this.contextManager)\n );\n }\n }\n\n /**\n * Toggles a contacts selected state.\n */\n @action toggleContact({ model }: ContactItem): void {\n // Send action with item that changed and collection of selected contacts.\n this.args[VALUE_CHANGE_ACTION]?.(\n model,\n set(model, 'isSelected', !model.isSelected),\n this.items.filter((i) => i.model.isSelected).map(({ model }) => model)\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::NotificationList': typeof NotificationListComponent;\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","/* eslint-disable import/extensions, prettier/prettier */\nimport 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","/* eslint-disable import/extensions */\nimport 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"],"names":["BaseFilterBar","_dec","alias","_dec2","_dec3","gt","_dec4","computed","_class","Component","constructor","arguments","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","isFiltered","isEmpty","this","filterTags","filter","item","selected","doSearch","args","onFilterTagsChange","map","value","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","tracked","Object","getOwnPropertyDescriptor","createTemplateFactory","scope","didUpdate_","searchToolbar_","t_","buttonIcon_","concat","on","and_","fn","buttonSimple_","AutomationFilterBar","toggleFilterTagSelected","button","toggleFilterTags","buttons","values","selectedValues","tag","includes","toString","handleFilterButtonClick","showFilterTags","updateShowFilterTags","action","setComponentTemplate","TEMPLATE","navigateToRouteId_","AutomationRulesNavigationHeader","selectedItem","selectedId","items","name","isSelected","id","routeId","route","svgSymbol_","tc_","tc_0","ICON_MAP","Partition","Lock","GarageDoor","Gate","Light","Thermostat","WaterValve","SecuritySensor","ImageSensor","Video","AccessControlDoor","TYPE_ICON_MAP","schedule","rule","AutomationRulesFeatureSuggestion","intlPath","path","_dec5","_dec6","_dec7","_dec8","_dec9","_class2","_descriptor5","_descriptor6","iconName","deviceType","typeIconName","typeText","addAction","hasRuleToCreate","addActionDefault","navigation","transitionToRouteId","EmberManageDevices","messageTypeText","service","AutomationRulesScheduleActionSheetItem","templateOnlyComponent","actionSheet_","automationSharedRulesScheduleActionSheetItem_","navigateToRouteName_","AutomationSharedRulesScheduleActionSheet","routeView_","automationRulesNavigationHeader_","buttonNative_","media_","dropdownActions_","automationRulesRuleCollection_","not_","automationRulesAutomationFeatureSuggestion_","automationSharedRulesScheduleActionSheet_","RulesList","equal","_descriptor7","toolbarComponent","_this$args$toolbarCom","_this$args$items","showTextOnMobile","isMobile","noAutomationItemsCanBeCreatedOnMobile","allowedToViewRulesAndSchedules","canDisplayRuleScheduleDropdown","userHasAccess","EmberRules","EmberAutomationSchedules","isConfiguringVideoDevice","createNewFirstAutomationItem","_this$args$newAutomat","newAutomationItems","createNewRuleWithEmberRulesBuilder","EmberRulesBuilder","dropdownItems","intl","t","getRouteItem","toggleActionSheetBuilder","actionSheetOpened","coalesce_","simpleBinaryList_","inlineAlert_","schedulePicker_","smartDateRange_","getTimeValues","selectedDays","length","undefined","EVERY_DAY","beginMinutes","endMinutes","MINUTES_IN_DAY","endTimeBound","endTimeCorrection","dayBits","dayArrayToBits","beginTime","endTime","ScheduleInput","_defineProperty","nowPlusDays","dateToMinutes","newDate","WEEK_DAYS","minVacationDate","now","Date","vacationStartDate","vacationEndDate","init","super","initialDays","displaySunsetOption","displayVacationOption","vacationSelected","afterSunset","locale","weekStartsOnSunday","beginTimeBound","scheduleDayBounds","initialScheduleNotCustom","getObjProperties","passedInInitialDays","passedInBeginTime","passedInEndTime","isPresent","scheduleDays","Number","isInteger","dayBitsToArray","duration","getDayScheduleDuration","scheduleIsCustom","EVERY_DAY_BITS","allTimesButtonText","someTimesButtonText","tc","setProperties","beginTimeBoundOutput","endTimeBoundOutput","scheduleDayBoundsArray","initialScheduleTypes","BinaryListItem","label","state","props","isSomeTimes","push","isVacation","scheduleTypes","localeCode","defaultIsoCode","localeWeekStartsOnSunday","forEach","type","displayCustomSchedule","defaultBeginMinutes","defaultEndMinutes","defaultScheduleDays","scheduleTypeChanged","find","i","beginTimeMinutes","endTimeMinutes","onScheduleBoundsUpdate","minutesToDate","timeValuesAsIntegers","valueChangeAction","VALUE_CHANGE_ACTION","dateTimeChanged","_ref","beginTimeInMinutes","endTimeInMinutes","onBeginTimeUpdate","set","onEndTimeUpdate","onSelectedDaysUpdate","currentBeginTime","currentEndTime","currentDayBits","updatedValues","onScheduleCorrectedByBounds","call","shouldCropAllTimesScheduleToBounds","vacationChanged","_ref2","startDate","endDate","scheduleProperties","BetaWarning","modalsDialogModalsSimpleSimpleDialog_","didResize_","PresenceStateExplainerModal","updateScrollIndicator","el","body","querySelector","classList","toggle","scrollHeight","offsetHeight","handleScroll","evt","target","scrollTop","goToStatusSettingsPage","EmberPresenceStateSettings","modalButtons","model","closeButton","getModalFooterButton","closeButtonText","showCloseButton","leavePageWarning","NewVideoRule","NewRules","uiIconTooltip_","noop_","expandButton_","simpleBinary_","await_","await_0","ContactItem","alwaysHideUserName","showUserName","addressType","contact","ContactTypeEnum","IPhonePush","MonitoringStation","userName","user","then","displayName","NotificationListComponent","Mobile","_class3","_descriptor8","_descriptor9","PushDeviceAddress","isCurrentDevice","_this$args$type","Unknown","showTitle","useStoriesUI","title","notificationTypeText","Email","tooltipText","hasKnowledgeBasePermissions","mobileTooltipText","contacts","toggleIsAlertOpen","isAlertOpen","onTooltipClick","_this$args$onTooltipC","_this$args","onTooltipClicked","transitionToUrlInNewBrowserWindow","buildKnowledgeBaseURL","CustomerKnowledgeBase","PushAndTextNotificationsDifferences","contextManager","toggleContact","_this$args$VALUE_CHAN","_this$args2","defaultRules","plurals","singular","irregularPairs","uncountable","BLANK_REGEX","LAST_WORD_DASHED_REGEX","LAST_WORD_CAMELIZED_REGEX","CAMELIZED_REGEX","CAPITALIZE_REGEX","capitalize","str","replace","match","toUpperCase","loadUncountable","rules","toLowerCase","loadIrregular","pair","irregular","irregularInverse","Inflector","ruleSet","makeDictionary","enableCache","create","hasOwnProperty","Error","cache","pluralize","inflector","singularize","word","purgeCache","_cacheUsed","_sCache","_singularize","numberOrWord","options","cacheKey","withoutCount","_pCache","_pluralize","disableCache","plural","regex","string","wordOrCount","inflect","parseFloat","typeRules","inflection","substitution","result","lowercase","wordSplit","lastWord","isBlank","isCamelized","isUncountable","test","exec","RegExp"],"sourceRoot":""}