platypush/platypush/backend/http/webapp/dist/static/js/391.34877d01.js.map

1 line
98 KiB
Plaintext

{"version":3,"file":"static/js/391.34877d01.js","mappings":"+MA0BSA,MAAM,oB,wEAzBb,QAqCM,OArCDA,OAAK,SAAC,2BAA0B,iBACP,EAAAC,YAAW,UAAa,EAAAC,YAAW,QAAW,EAAAC,OAAOC,MAAMC,WADzF,EAEE,OAqBM,OArBDL,OAAK,SAAC,4BAA2B,iBACP,EAAAC,YAAW,UAAa,EAAAC,YAAW,MAAS,EAAAI,gBAD3E,EAEE,OAaM,OAbDN,OAAK,SAAC,WAAU,WAAqB,EAAAC,YAAW,SAAY,EAAAA,gBAAjE,cACE,SAWE,QAVK,EAAAM,WAAS,CACbJ,MAAO,EAAAA,MACPK,OAAQ,EAAAA,OACRC,SAAU,EAAAC,iBACVC,QAAS,EAAAA,QACVC,IAAI,WACHC,MAAO,EAAAA,OAAyB,GAAhB,EAAAV,OAAOW,UACvB,QAAO,EAAAC,QACP,QAAK,eAAE,EAAAC,MAAK,QAAUC,IACtB,UAAO,eAAE,EAAAD,MAAK,UAAYC,KAV7B,oEADF,GAewE,EAAAhB,cAAA,WAAxE,QAGM,O,MAHDD,MAAM,yBAA0B,QAAK,8BAAO,EAAAkB,iBAAA,EAAAA,mBAAA,IAAe,YAAhE,EACE,OAC6E,KAD1ElB,OAAK,SAAC,MAAK,mBACgB,EAAAE,YAAW,iBAAoB,EAAAA,gBAD7D,YADF,gBAjBF,GAuBoC,EAAAD,cAAgB,EAAAC,cAAA,WAApD,QAWM,MAXN,EAWM,gBAVJ,QASM,mBAT8B,EAAAQ,kBAAVS,K,WAA1B,QASM,OATDnB,MAAM,QAA4CoB,IAAKD,EAAOE,IAAnE,EACE,QAOmC,GANjClB,MAAOgB,EACPX,OAAQ,EAAAL,MACRM,SAAU,EAAAa,mBAAmBH,EAAOE,IACpCV,QAAS,EAAAA,QACTY,MAAO,EAAAA,MAAK,EACZ,YAAU,eAAE,EAAAP,MAAK,aAAeC,IAChC,QAAK,GAAE,EAAAD,MAAK,QAAUG,IAPxB,uEADF,UADF,gBAzBF,E,mCA6CF,GACEf,KAAM,SACNoB,OAAQ,CAACC,EAAA,YACTC,MAAO,CAAC,QAAS,UAAW,SAAU,cAEtCC,OACE,MAAO,CACLpB,UAAW,KACXD,aAAa,EAEhB,EAEDsB,SAAU,CACRlB,mBACE,OAAOmB,OAAOC,OAAOC,KAAKtB,UAAY,CAAC,GAAGuB,QAAQC,GAAUA,GAC7D,EAEDhC,cACE,QAAS8B,KAAKrB,iBAAiBL,MAChC,EAEDH,cACE,OAAK6B,KAAK9B,aAGH8B,KAAKG,SACb,EAEDC,WACE,OAAOJ,KAAKK,MAAMD,QACnB,GAGHE,QAAS,CACPC,YAAYC,EAAGC,GACbD,EAAI,IAAIA,GACRC,EAAI,IAAIA,GACR,IAAK,MAAMpB,IAAO,CAAC,aAAc,eACxBmB,EAAEnB,UACFoB,EAAEpB,GAGX,OAAOW,KAAKU,aAAaF,EAAGC,EAC7B,EAEDlB,mBAAmBoB,GACjB,OAAOb,OAAOC,OAAOC,KAAKY,aAAe,CAAC,GACxCX,QACGb,GAAWA,GACPA,EAAOyB,YAAcF,IACpBvB,EAAO0B,mBAEfC,QAAO,CAACC,EAAK5B,KACX4B,EAAI5B,EAAOE,IAAMF,EACV4B,IACN,CAAC,EACP,EAEDhC,QAAQiC,GACNA,EAAMC,kBAGJD,EAAME,OAAOC,UAAUC,SAAS,UAChCJ,EAAME,OAAOC,UAAUC,SAAS,QAIhCrB,KAAKb,kBAILa,KAAKf,MAAM,aAAce,KAAK5B,MAAMkB,GAEvC,EAEDgC,eAAelC,GAEb,MAAMmC,EAAWnC,GAAQE,GACnBkC,EACQ,MAAZD,GACAvB,KAAKtB,UACL6C,KAAYvB,KAAKtB,SAGd8C,GAGLxB,KAAKyB,gBACN,EAEDtC,kBACEa,KAAKG,WAAaH,KAAKG,UAEnBH,KAAKI,WACPJ,KAAKI,SAASD,WAAaH,KAAKI,SAASD,UAC5C,EAEDsB,iBACEzB,KAAKzB,aAAc,EACnB,MAAMmD,EAAO1B,KACb2B,YAAW,IAAMD,EAAKnD,aAAc,GAAO,IAC5C,GAGHqD,UACE,GAAkB,WAAd5B,KAAK6B,KAAmB,CAC1B,MAAMA,EAAO7B,KAAK6B,KAAKC,MAAM,KAAKC,KAAKC,GACnCA,EAAE,GAAGC,cAAgBD,EAAEE,MAAM,KAC/BC,KAAK,IAEPnC,KAAKoC,QACD,IAAMpC,KAAK5B,QACX,CAACiE,EAAUC,KACP,GAAItC,KAAKO,YAAY+B,EAAUD,GAC7B,OAAO,EAETrC,KAAKyB,iBACLzB,KAAKf,MAAM,SAAU,CAACb,MAAOiE,GAA7B,IAIRrC,KAAKxB,WAAY,SACf,SACE,IAAM,QAAQ,KAA+BqD,OAGnD,CAEAU,EAAA,WAAavC,KAAKsB,eACnB,G,UCxKH,MAAMkB,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O,wHCLOxE,MAAM,wC,SACNA,MAAM,mC,mEAJX,QAMM,OANDA,OAAK,SAAC,wBAAuB,qBACA,EAAAyE,aAC7BC,OAAK,QAAE,EAAAC,iBAFZ,CAGwD,EAAAhE,UAAA,WAAtD,QAAiE,IAAjE,IACsD,EAAAE,QAAA,WAAtD,QAA+D,IAA/D,iBACA,QAA+C,4BAAjC,EAAA+D,yBAAsB,WALtC,E,eAYF,GACExE,KAAM,aACNyE,WAAY,CAACC,KAAI,KACjBC,MAAO,CACLpE,QAAS,CACPiD,KAAMoB,QACNC,SAAS,GAGXpE,MAAO,CACL+C,KAAMoB,QACNC,SAAS,GAGX9D,OAAQ,CACNyC,KAAM/B,OACNqD,UAAU,GAGZC,KAAM,CACJvB,KAAM/B,OACNoD,QAAS,QAGXG,aAAc,CACZxB,KAAMoB,QACNC,SAAS,IAIbtD,OACE,MAAO,CACLpB,UAAW,KACX8E,cAAc,EAEjB,EAEDzD,SAAU,CACR0D,eACE,IAAIH,EAAO,IAAKpD,KAAKZ,QAAQoE,MAAMJ,MAAQ,CAAC,GAG5C,OAFItD,OAAO2D,KAAKzD,KAAKoD,MAAQ,CAAC,GAAG9E,SAC/B8E,EAAOpD,KAAKoD,MACP,IAAIA,EACZ,EAEDV,YACE,OAAO1C,KAAKqD,cAAgBrD,KAAKuD,aAAaG,KAC/C,EAEDd,iBACE,OAAO5C,KAAK0C,YAAc1C,KAAKlB,MAAQ,CAAC,WAAckB,KAAK0C,WAAa,CAAC,CAC1E,EAEDG,yBACE,MAAMO,EAAO,IAAIpD,KAAKuD,cAGtB,OAFIvD,KAAK0C,kBACAU,EAAKM,MACPN,CACR,EAEDvB,OACE,IAAI8B,EAAc3D,KAAKZ,OAAOyC,MAAQ,GACtC,OAAO8B,EAAWC,OAAO,GAAG3B,cAAgB0B,EAAWzB,MAAM,EAC9D,I,UCrEL,MAAMM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O,+FCNA,GACEpE,KAAM,cACNoB,OAAQ,CAACoE,EAAA,GACTlE,MAAO,CAAC,SACRqD,MAAO,CACLpE,QAAS,CACPiD,KAAMoB,QACNC,SAAS,GAGXpE,MAAO,CACL+C,KAAMoB,QACNC,SAAS,GAGX9E,MAAO,CACLyD,KAAM/B,OACNqD,UAAU,GAGZ1E,OAAQ,CACNoD,KAAM/B,OACNoD,QAAS,QAGXxE,SAAU,CACRmD,KAAM/B,OACNoD,QAAS,QAGXtC,YAAa,CACXiB,KAAM/B,OACNoD,QAAS,QAGX1D,MAAO,CACLqC,KAAMiC,OACNZ,QAAS,IAIbtD,OACE,MAAO,CACL0D,cAAc,EACdnD,WAAW,EAEd,EAEDN,SAAU,CACRgC,OACE,IAAI8B,EAAc3D,KAAK5B,MAAMyD,MAAQ,GACrC,OAAO8B,EAAW7B,MAAM,KACtBC,KAAKgC,GAAMA,EAAEH,OAAO,GAAG3B,cAAgB8B,EAAE7B,MAAM,KAAIC,KAAK,GAC3D,ICrDL,MAAMK,EAAc,EAEpB,O,wKCJOvE,MAAM,iC,GAIFA,MAAM,e,GAINA,MAAM,iC,GASRA,MAAM,iB,WAaiD,qB,SAErDA,MAAM,oB,GAEFA,MAAM,S,GACJA,MAAM,U,GACHA,MAAM,gB,GAONA,MAAM,kB,qBAINA,MAAM,iB,wBAER,OAA4B,KAAzBA,MAAM,kBAAgB,W,GAAzB,G,GAKDA,MAAM,Q,mQAtDrB,QA2EM,MA3EN,EA2EM,CA1EW,EAAAW,UAAA,WAAf,QAA0B,aAA1B,gBAEA,OAYS,gBAXP,OAEM,MAFN,EAEM,EADJ,QAAuF,GAA5E,gBAAe,EAAAoF,aAAe5F,MAAO,EAAA6F,SAAW,QAAK,eAAE,EAAAA,SAAW/E,IAA7E,qCAGF,OAMM,MANN,EAMM,EALJ,QAIW,GAJDgF,MAAM,UAAU,aAAW,mBAArC,C,kBACE,IAA6E,EAA7E,QAA6E,GAA9D,aAAW,iBAAiBC,KAAK,UAAW,QAAO,EAAAC,SAAlE,qBACA,QAC6D,GAD9C,aAAW,6BACxBD,KAAK,eAAgB,QAAK,eAAE,EAAAE,sBAAoB,Q,WAKxD,OAyDM,MAzDN,EAyDM,CAhDI,EAAAC,eAAiB,EAAAC,SAAS,EAAAD,iBAAT,WARzB,QASE,G,MARClF,OAAQ,EAAAmF,SAAS,EAAAD,eACjB7F,OAAQ,EAAA8F,SAAS,EAAAA,SAAS,EAAAD,eAAezD,WACzCnC,SAAU,EAAAa,mBAAmB,EAAA+E,eAC7BE,QAAS,EAAAlB,aACT,gBAAe,EAAAmB,uBAAuB,EAAAH,eACtC,QAAO,EAAAI,cACP,eAAa,eAAE,EAAAJ,cAAgBpF,IAPlC,6FAWA,QAAuF,GAAvEsF,QAAS,EAAAH,qBAAuB,QAAK,eAAE,EAAAA,sBAAoB,IAA3E,oBACgBvE,OAAO2D,KAAK,EAAAkB,eAAa,KAASrG,SAAlD,WAEA,QAyCM,MAzCN,EAyCM,gBAxCJ,QAuCM,mBAvCqC,EAAAqG,eAATC,K,WAAlC,QAuCM,OAvCD3G,MAAM,gBAAgDoB,IAAKuF,EAAMvG,MAAtE,EACE,OAqCM,MArCN,EAqCM,EApCJ,OAiBM,MAjBN,EAiBM,EAhBJ,OAKO,OALP,EAKO,CAHoB,aAAjB,EAAA4F,SAASY,UAA2B,EAAAC,aAAa,EAAAC,gBAAgBH,EAAMvG,SAAnC,WAD5C,QACyF,4BAD3E,EAAAyG,aAAa,EAAAC,gBAAgBH,EAAMvG,OAAO+E,MAAI,eAG9B,WAAjB,EAAAa,SAASY,UAAyB,EAAAG,YAAYJ,EAAMvG,QAAlB,WAD/C,QAC0E,G,MADnEJ,OAAK,QAAE,EAAA+G,YAAYJ,EAAMvG,OAAOJ,OAAQgH,IAAK,EAAAD,YAAYJ,EAAMvG,OAAO6G,QAA7E,4CAIF,OAEO,OAFP,EAEO,EADL,OAAyC,OAApCjH,MAAM,Q,aAAQ,QAAmB,EAALI,OAAjC,aAGF,OAIO,OAJP,EAIO,EAHL,OAES,UAFD6F,MAAM,UAAW,QAAK,GAAE,EAAAE,QAAQQ,IAAxC,YAMJ,OAgBM,MAhBN,EAgBM,gBAfJ,QAcM,mBAbeA,EAAML,UAAhBnF,K,WADX,QAcM,OAdDnB,MAAM,eAENoB,IAAKD,EAAOE,IAFjB,CAYWF,EAAOyB,WAThB,iBASgB,WAThB,QAUE,G,MATCzC,MAAOgB,EACPV,SAAU,EAAAa,mBAAmBH,EAAOE,IACpC,eAAc,EAAAiF,SACd,YAAU,eAAE,EAAAG,cAAcxF,IAC1B,QAAK,GAAE,EAAAiG,cAAc/F,GACrBN,QAAS,EAAAsG,cAAchG,EAAOE,IAC9BV,UAAW,EAAAyG,gBAAgBjG,EAAOE,IAClC,UAAO,GAAE,EAAA+F,gBAAgBjG,EAAOE,IAAMJ,GARzC,0FAHF,eAtBN,WAHgD,WAAlD,QAAqF,W,kBAA3B,IAAiB,M,0EC9B5EjB,MAAM,sB,GACJA,MAAM,oB,0CADb,QAIM,MAJN,EAIM,EAHJ,OAEM,MAFN,EAEM,EADJ,QAAQ,oC,CAMZ,OACEI,KAAM,W,UCHR,MAAMmE,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAS,GAAQ,CAAC,YAAY,qBAEzF,Q,sEFqFA,GACEnE,KAAM,WACNoB,OAAQ,CAACoE,EAAA,GACTf,WAAY,CACVwC,SADU,IAEVC,aAFU,IAGVC,OAHU,aAIVC,YAJU,aAKV1C,KALU,IAMV2C,QANU,IAOVC,QAPU,EAQVC,SARU,aASVC,cAAa,cAGf7C,MAAO,CAEL8C,kBAAmB,CACjBjE,KAAMiC,OACNZ,QAAS,KAIbtD,OACE,MAAO,CACLhB,SAAS,EACTyG,gBAAiB,CAAC,EAClBD,cAAe,CAAC,EAChBW,eAAgB,CAAC,EACjBxB,SAAU,CAAC,EACXD,cAAe,KACfhB,cAAc,EACde,sBAAsB,EACtBJ,SAAU,CACRY,SAAU,WACVmB,iBAAkB,CAAC,GAGxB,EAEDnG,SAAU,CACRiF,eACE,OAAOtB,CACR,EAEDwB,cACE,OAAOiB,CACR,EAEDC,cACE,OAAOlG,KAAKmG,cAAc,OAC3B,EAEDpB,kBACE,OAAOjF,OAAOsG,QAAQ5C,GAAMzC,QAAO,CAACC,GAAMa,EAAM2B,MAC5CxC,EAAIwC,EAAK6C,aAAexE,EACjBb,IACR,CAAC,EACL,EAEDgD,eACE,MAAO,CACL,GAAMlE,OAAOsG,QAAQpG,KAAKmG,cAAc,OAAOpF,QAAO,CAACC,GAAM1B,EAAIiF,MAC/DvD,EAAI1B,GAAMiF,EAAS,GACZvD,IACN,CAAC,GACJ,SAAYhB,KAAKmG,cAAc,YAC/B,OAAUnG,KAAKmG,cAAc,UAEhC,EAEDxB,gBACE,OAAO7E,OAAOsG,QAAQpG,KAAKgE,aAAahE,KAAKiE,SAASY,WACpD5E,QACGqG,GAAUA,EAAM,GAAGrG,QACjBsG,KACGvG,KAAKiE,SAAS+B,iBAAiBO,EAAEjH,KAAsB,MAAfiH,EAAE1F,YAC9CvC,OAAS,IAEbyD,KACE,EAAE8C,EAAUN,MACH,CACLlG,KAAMwG,EACNN,SAAUA,EAAStE,QAChBsG,GAAMA,EAAEjH,MAAMU,KAAKiE,SAAS+B,uBAKrCQ,MAAK,CAAChG,EAAGC,IAAMD,EAAEnC,KAAKoI,cAAchG,EAAEpC,OACzC,GAGHiC,QAAS,CACP6F,cAAcO,GACZ,OAAO5G,OAAOC,OAAOC,KAAKuE,UACxBtE,QAAQb,GAA+B,MAApBA,EAAOyB,YAC1BE,QAAO,CAACC,EAAK5B,KACX,MAAMmF,EAAWvD,EAAI5B,EAAOsH,KAAU,CAAC,EAOvC,OANAnC,EAASnF,EAAOE,IAAMF,EAEtB4B,EAAI5B,EAAOsH,IAAS5G,OAAOC,OAAOwE,GAAUiC,MAAK,CAAChG,EAAGC,IAC1CD,EAAEnC,KAAKoI,cAAchG,EAAEpC,QAG3B2C,CAAP,GACC,CAAC,EACP,EAED2F,mBAAmBvH,GACjB,MAAMV,EAAWoB,OAAOC,OAAOC,KAAKT,mBAAmBH,EAAOE,KACxDsH,EAAsBlI,EAASuB,QAAQC,IAExCA,EAAMY,mBACNZ,EAAM2G,gBACN3G,EAAM4G,oBAERxI,OAAS,EAEZ,OACEc,EAAO0H,mBACP1H,EAAOyH,eACNnI,EAASJ,SAAWsI,CAExB,EAEDG,cAAcnC,GACZ,MAAML,GAAYK,EAAQA,EAAML,SAAWvE,KAAKuE,WAAa,CAAC,EACxDyC,EAAO,CAAC,EACVpC,IACFoC,EAAKC,QAAUnH,OAAOC,OAAOwE,GAAUxD,QAAO,CAACC,EAAK5B,KAClD4B,EAAI5B,EAAO8H,SAAU,EACdlG,IACN,CAAC,IAENhB,KAAKqF,gBAAkBvF,OAAOC,OAAOwE,GAAUxD,QAAO,CAACC,EAAK5B,KACxD,GAAIY,KAAK2G,mBAAmBvH,GAC1B,OAAO4B,EAET,MAAMU,EAAO1B,KACPV,EAAKF,EAAOE,GAelB,OAdIU,KAAK+F,eAAezG,IACtB6H,aAAanH,KAAK+F,eAAezG,IAEnCU,KAAK+F,eAAezG,GAAMqC,YAAW,KAC7BD,EAAK2D,gBAAgB/F,WAChBoC,EAAK2D,gBAAgB/F,GAC1BoC,EAAKqE,eAAezG,WACfoC,EAAKqE,eAAezG,GAE7BoC,EAAK0D,cAAc9F,GAAMF,EACzBgI,QAAQC,KAAM,oBAAmBjI,EAAOf,OAAxC,GACwB,IAAzB2B,KAAK8F,mBAER9E,EAAI1B,IAAM,EACH0B,CAAP,GACD,CAAC,SAEEhB,KAAKsH,QAAQ,gBAAiBN,EACrC,EAEDD,aACE/G,KAAKpB,SAAU,EAEf,IACEoB,KAAKuE,gBAAkBvE,KAAKsH,QAAQ,iBAAiBvG,QAAO,CAACC,EAAK5B,KAChEA,EAAOf,KAAOe,GAAQoE,MAAM+D,eAAiBnI,EAAOf,KACpDe,EAAOoI,SAAWhE,EAAKpE,EAAOyC,MAAMwE,YACpCjH,EAAOoE,KAAO,IACRA,EAAKpE,EAAOyC,OAAS,CAAC,KACtBzC,EAAOoE,MAAQ,CAAC,GAGtBxC,EAAI5B,EAAOE,IAAMF,EACV4B,IACN,CAAC,GAEJhB,KAAKiE,SAAS+B,iBAAmBhG,KAAKgE,aAAa1E,EAGrD,CAhBA,QAeEU,KAAKpB,SAAU,CACjB,CACD,EAEDW,mBAAmBoB,GACjB,OAAOb,OAAOC,OAAOC,KAAKuE,UACxBtE,QACGb,GAAWA,GACPA,EAAOyB,YAAcF,IACpBvB,EAAO0B,mBAEfC,QAAO,CAACC,EAAK5B,KACX4B,EAAI5B,EAAOE,IAAMF,EACV4B,IACN,CAAC,EACP,EAEDyD,uBAAuB9D,GACrB,OAAOb,OAAOC,OAAOC,KAAKuE,UACxBtE,QACKb,GAAWA,GACPA,EAAOyB,YAAcF,GACrBvB,EAAO0B,mBAEhBC,QAAO,CAACC,EAAK5B,KACX4B,EAAI5B,EAAOE,IAAMF,EACV4B,IACN,CAAC,EACP,EAEDyG,oBAAoBlG,GACdvB,KAAKoF,cAAc7D,WACdvB,KAAKoF,cAAc7D,GACxBvB,KAAKqF,gBAAgB9D,WAChBvB,KAAKqF,gBAAgB9D,GAC1BvB,KAAK+F,eAAexE,KACtB4F,aAAanH,KAAK+F,eAAexE,WAC1BvB,KAAK+F,eAAexE,GAE9B,EAED4D,cAAc/F,GACZA,EAAOoI,SAAWhE,EAAKpE,EAAOyC,MAAMwE,YACpCrG,KAAKuE,SAASnF,EAAOE,IAAMF,EAC3BY,KAAKyH,oBAAoBrI,EAAOE,IAC5BU,KAAKqF,gBAAgBjG,EAAOE,YACvBU,KAAKqF,gBAAgBjG,EAAOE,GACtC,EAEDgC,eAAeL,GACb,MAAMM,EAAWN,EAAM7B,OAAOE,GAC9B,GAAgB,MAAZiC,EACF,OAEFvB,KAAKyH,oBAAoBlG,GACzB,MAAMnC,EAAS,IAAI6B,EAAM7B,QACE,MAAvB6B,EAAM7B,QAAQsI,QAChBtI,EAAOsI,MAAQ1H,KAAKuE,SAAShD,IAAWmG,OACtCtI,EAAOoE,MAAM+D,eAAejJ,OAC9Bc,EAAOf,KAAOe,EAAOoE,KAAK+D,cACnBvH,KAAKuE,SAAShD,IAAWiC,MAAM+D,eAAejJ,OACrDc,EAAOf,KAAO2B,KAAKuE,SAAShD,GAAUiC,KAAK+D,cAE3CnI,EAAOf,KAAO4C,EAAM7B,QAAQf,MAAQ2B,KAAKuE,SAAShD,IAAWlD,KAE/De,EAAOoI,SAAWhE,EAAKpE,EAAOyC,MAAMwE,YACpCjH,EAAOoE,KAAO,IACRA,EAAKvC,EAAM7B,OAAOyC,OAAS,CAAC,KAC5B7B,KAAKuE,SAAShD,IAAWiC,MAAQ,CAAC,KAClCvC,EAAM7B,QAAQoE,MAAQ,CAAC,GAG7BxD,KAAKuE,SAAShD,GAAYnC,EAC1BmD,EAAA,gBAAkBnD,EACnB,EAEDuI,eAAe1G,GACb,MAAMM,EAAWN,EAAM7B,QAAQE,GACf,MAAZiC,IAEAA,IAAavB,KAAKsE,gBACpBtE,KAAKsE,cAAgB,MACnBtE,KAAKuE,SAAShD,WACTvB,KAAKuE,SAAShD,GACxB,EAEDmD,cAAcnD,GACRA,GACFvB,KAAKsE,cAAgB/C,EACrBvB,KAAKsD,cAAe,IAEpBtD,KAAKsE,cAAgB,KACrBtE,KAAKsD,cAAe,EAEvB,GAGHyD,gBACE/G,KAAK4H,UACH5H,KAAKsB,eACL,mBACA,sDAGFtB,KAAK4H,UACH5H,KAAK2H,eACL,mBACA,4DAGI3H,KAAK6H,aACL7H,KAAKoE,SACZ,EAED0D,YACE9H,KAAK+H,YAAY,mBAClB,GG9XH,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAStF,GAAQ,CAAC,YAAY,qBAEzF,O,2LCP6F,a,UAC/E,OAAW,SAAR,QAAI,K,WAAI,0C,UAAsC,OAAK,qB,UAAA,OAAK,qB,WAAA,iH,UAE9B,OAAK,qB,UAAA,OAAK,qB,WAAA,4E,GAI5CxE,MAAM,a,GACJA,MAAM,S,WAAQ,U,GAIdA,MAAM,S,qBAORA,MAAM,a,GACJA,MAAM,S,WAAQ,U,GAIdA,MAAM,qB,SACHA,MAAM,e,UAKN,OAAgC,KAA7BA,MAAM,sBAAoB,W,GAA7B,G,UAGJ,OAGO,QAHDA,MAAM,QAAM,UAAC,+BAEjB,OAAoF,KAAjF+J,KAAK,gCAAgC7G,OAAO,UAAS,6BAFxC,QAEoE,QAFtF,K,GAUDlD,MAAM,a,UACT,OAEM,OAFDA,MAAM,SAAQ,gBAEnB,K,GACKA,MAAM,2B,sBAIP,OAAgC,KAA7BA,MAAM,sBAAoB,W,GAA7B,G,GAKDA,MAAM,a,UACT,OAA+B,OAA1BA,MAAM,SAAQ,UAAM,K,qBAItBA,MAAM,a,UACT,OAAoC,OAA/BA,MAAM,SAAQ,eAAW,K,2BAI3BA,MAAM,a,UACT,OAAoC,OAA/BA,MAAM,SAAQ,eAAW,K,2BAI3BA,MAAM,a,UACT,OAAoC,OAA/BA,MAAM,SAAQ,eAAW,K,2BAI3BA,MAAM,a,UACT,OAAqC,OAAhCA,MAAM,SAAQ,gBAAY,K,GAC1BA,MAAM,a,2BAKRA,MAAM,a,UACT,OAA8B,OAAzBA,MAAM,SAAQ,SAAK,K,GACnBA,MAAM,S,qBAKRA,MAAM,a,WACT,OAA+B,OAA1BA,MAAM,SAAQ,UAAM,K,IACpBA,MAAM,S,6BAORA,MAAM,a,WACT,OAAmC,OAA9BA,MAAM,SAAQ,cAAU,K,6BAI1BA,MAAM,a,WACT,OAAmC,OAA9BA,MAAM,SAAQ,cAAU,K,8BAM7B,OAAsC,OAAjCA,MAAM,SAAQ,iBAAa,K,IAC3BA,MAAM,S,WAEP,OAA0B,KAAvBA,MAAM,gBAAc,W,IAAvB,I,UAKDA,MAAM,8B,WAER,OAGM,OAHDA,MAAM,UAAQ,EACjB,OAA4B,KAAzBA,MAAM,oBADQ,QACW,kBAD9B,K,IAKKA,MAAM,oB,UAMPA,MAAM,2B,IAGFA,MAAM,S,IAINA,MAAM,S,iCASZA,MAAM,gC,WAER,OAGM,OAHDA,MAAM,UAAQ,EACjB,OAAgC,KAA7BA,MAAM,wBADQ,QACe,oBADlC,K,IAKKA,MAAM,oB,UAMPA,MAAM,c,UAEFA,MAAM,a,gDAONA,MAAM,a,gDAQZA,MAAM,4B,WAIR,OAGM,OAHDA,MAAM,UAAQ,EACjB,OAAuC,KAApCA,MAAM,+BADQ,QACsB,uBADzC,K,IAKKA,MAAM,oB,UAMPA,MAAM,Y,mNAlMiF,EAAAmB,SAAA,WAAhG,QA0MQ,I,MA1MAoF,QAAS,EAAAA,QAASvG,MAAM,eAAgBiG,MAAO,EAAA9E,OAAOf,MAAQ,EAAAe,OAAO6I,aAA7E,C,kBACE,IAKgB,EALhB,QAKgB,IALDpJ,IAAI,oBAAoBqF,MAAM,0BAA2B,QAAO,EAAAgE,UAA/E,C,kBAAyF,IAC/E,OAAiD,EAAK,EAAtD,EAE6B,EAAK,EAFlC,K,KADV,gBAOA,OAUM,MAVN,EAUM,EATJ,OAGM,MAHN,EAGM,GADwC,EAAAC,UAA5C,iBAA4C,WAA5C,QAAwD,I,MAA3C,QAAK,eAAE,EAAAA,UAAQ,SAE9B,OAIM,MAJN,EAIM,CAFmD,EAAAA,WAAA,WADvD,QACmE,I,MADtD/J,MAAO,EAAAgB,OAAOf,KAAO,QAAO,EAAA+J,SACtC,SAAM,eAAE,EAAAD,UAAQ,GAAWE,SAAU,EAAAzJ,SADxC,qDAEA,QAAoC,Q,mBAA9B,QAAoB,EAAN,OAACP,OAArB,gBAIJ,OAsBM,MAtBN,EAsBM,EArBJ,OAGM,MAHN,EAGM,GADwC,EAAAiK,UAA5C,iBAA4C,WAA5C,QAAwD,I,MAA3C,QAAK,eAAE,EAAAA,UAAQ,SAE9B,OAgBM,MAhBN,EAgBM,CAf4B,EAAAA,WAAA,WAAhC,QAYO,OAZP,EAYO,EAXL,QAMa,IANAlK,MAAO,EAAAgB,OAAOoE,MAAMJ,MAAMnF,OAAS,EAAAmB,OAAOoE,MAAMJ,MAAM6B,IAAM,QAAO,EAAAsD,WAC7E,SAAM,eAAE,EAAAD,UAAQ,GAAWD,SAAU,EAAAzJ,SADxC,C,kBAEE,IAGS,EAHT,OAGS,UAHDiD,KAAK,SAASqC,MAAM,QAAS,QAAK,eAAE,EAAAqE,WAAU,OACjD,QAAK,eAAE,EAAAA,WAAU,QADtB,S,KAFF,kCAOA,OARF,WAcA,QAAiD,6BAAnC,EAAAnJ,QAAQoE,MAAMJ,MAAI,oBAIpC,OAWM,MAXN,EAWM,CAVJ,GAGA,OAMM,MANN,EAMM,EALJ,OAAgF,SAAzEvB,KAAK,QAASzD,MAAO,EAAAgB,OAAOoE,MAAMJ,MAAMM,MAAQ,SAAM,oBAAE,EAAA8E,iBAAA,EAAAA,mBAAA,KAA/D,YACA,OAGS,UAHD3G,KAAK,SAASqC,MAAM,QAAS,QAAK,eAAE,EAAAsE,gBAAe,OACtD,QAAK,eAAE,EAAAA,gBAAe,QAD3B,WAOJ,OAGM,MAHN,EAGM,CAFJ,GACA,OAA4C,OAAvCvK,MAAM,Q,aAAQ,QAAsB,EAAR,OAACiJ,SAAlC,aAGF,OAGM,MAHN,EAGM,CAFJ,GACA,OAAwC,OAAnCjJ,MAAM,Q,aAAQ,QAAkB,EAAJ,OAACqB,KAAlC,YAG2B,EAAAF,OAAO6I,cAAA,WAApC,QAGM,MAHN,EAGM,CAFJ,GACA,OAAiD,OAA5ChK,MAAM,Q,aAAQ,QAA2B,EAAb,OAACgK,cAAlC,cAFF,eAK6B,EAAA7I,OAAOqJ,cAAA,WAApC,QAGM,MAHN,EAGM,CAFJ,GACA,OAAiD,OAA5CxK,MAAM,Q,aAAQ,QAA2B,EAAb,OAACwK,cAAlC,cAFF,eAK6B,EAAArJ,OAAOsJ,eAAA,WAApC,QAKM,MALN,EAKM,CAJJ,GACA,OAEM,MAFN,EAEM,EADJ,OAA6E,KAAzEV,KAAM,EAAA5I,OAAOsJ,aAAcvH,OAAO,SAAUgD,KAAM,EAAA/E,OAAOsJ,cAA7D,gBAHJ,eAO6B,EAAAtJ,OAAOuJ,YAAA,WAApC,QAKM,MALN,EAKM,CAJJ,GACA,OAEM,MAFN,EAEM,EADJ,OAAkD,OAA7C1K,MAAM,eAAgB2K,IAAK,EAAAxJ,OAAOuJ,WAAvC,iBAHJ,eAO6B,EAAAlK,SAAA,WAA7B,QAOM,MAPN,GAOM,CANJ,IACA,OAIM,MAJN,GAIM,EAHJ,OAEE,KAFCR,MAAM,MAAO,QAAK,eAAE,EAAAgB,MAAK,gBAAkB,EAAAR,OAAOa,K,aACnD,QAAoB,EAAN,OAACjB,OADjB,iBAHJ,eAS6B,EAAAe,OAAOyJ,aAAA,WAApC,QAGM,MAHN,GAGM,CAFJ,IACA,OAAgE,OAA3D5K,MAAM,Q,aAAQ,QAA0C,EAApB,eAAC,EAAAmB,OAAOyJ,cAAjD,eAFF,eAK6B,EAAAzJ,OAAO0J,aAAA,WAApC,QAGM,MAHN,GAGM,CAFJ,IACA,OAAgE,OAA3D7K,MAAM,Q,aAAQ,QAA0C,EAApB,eAAC,EAAAmB,OAAO0J,cAAjD,eAFF,gBAKA,OAQM,OARD7K,MAAM,oCACR,QAAK,iBAAE,EAAAoC,MAAM0I,kBAAkBC,SADlC,CAEE,IACA,OAIM,MAJN,GAIM,EAHJ,OAES,UAFA,QAAK,2BAAO,EAAA3I,MAAM0I,kBAAkBC,QAAI,YAAjD,QAM0ClJ,OAAO2D,KAAK,EAAA/E,UAAQ,IAAQJ,SAAA,WAA1E,QA2BM,MA3BN,GA2BM,EA1BJ,OAUM,OAVDL,MAAM,sBAAuB,QAAK,iBAAE,EAAAgL,mBAAqB,EAAAA,oBAA9D,CACC,IAKA,OAGM,MAHN,GAGM,EAFJ,OACyF,KADtFhL,OAAK,SAAC,MAAK,mBACgB,EAAAgL,kBAAiB,iBAAoB,EAAAA,sBADnE,YAKyC,EAAAA,mBAA5C,iBAA4C,WAA5C,QAaM,MAbN,GAaM,gBAZJ,QAWM,mBAVY,EAAAvK,UAATwB,K,WADT,QAWM,OAXDjC,OAAK,SAAC,YAAW,SAAmBiC,EAAM7B,MAAMC,QAAU4B,EAAMY,oBACxCzB,IAAKa,EAAMZ,IADxC,EAEE,OAGM,MAHN,GAGM,EAFJ,QAAyD,IAA5CF,OAAQ,EAAAA,OAASgE,KAAM,EAAAhE,OAAOoE,MAAMJ,MAAjD,2BAEI,QAFqD,OACzD,QAAG,EAAA8F,SAAShJ,EAAM2B,OAAI,MAExB,OAIM,MAJN,GAIM,EAHJ,OAEE,KAFC5D,MAAM,MAAO,QAAK,GAAE,EAAAgB,MAAK,gBAAkBiB,EAAMZ,I,aAClD,QAAmB,EAALjB,OADhB,cAPJ,mBAdJ,gBA6BA,OA4BM,MA5BN,GA4BM,EA3BJ,OAUM,OAVDJ,MAAM,sBAAuB,QAAK,iBAAE,EAAAkL,oBAAsB,EAAAA,qBAA/D,CACC,IAKA,OAGM,MAHN,GAGM,EAFJ,OAC2F,KADxFlL,OAAK,SAAC,MAAK,mBACgB,EAAAkL,mBAAkB,iBAAoB,EAAAA,uBADpE,YAK4B,EAAAA,oBAA/B,iBAA+B,WAA/B,QAcM,MAdN,GAcM,gBAbJ,QAKM,mBALqB,EAAA/J,QAAM,CAArBhB,EAAOsI,M,WAAnB,QAKM,OAL8BrH,IAAKqH,GAAI,CACL,MAATtI,GAAiB,EAAAgL,cAAcC,QAAQ3C,GAAI,eAAxE,QAGM,MAHN,GAGM,EAFJ,OAA6C,OAAxCzI,MAAM,Q,aAAQ,QAAuB,EAAP,SAACyI,KAApC,YACA,OAA+C,OAA1CzI,MAAM,Q,aAAQ,QAAyB,EAAR,UAACG,KAArC,eAFF,oBADF,QAaI,aANJ,QAKM,mBALsB,EAAAgB,OAAOQ,MAAI,KAA3BxB,EAAOsI,M,WAAnB,QAKM,OAL2CrH,IAAKqH,GAAI,CAClB,MAATtI,IAAK,WAAlC,QAGM,MAHN,GAGM,EAFJ,OAA6C,OAAxCH,MAAM,Q,aAAQ,QAAuB,EAAP,SAACyI,KAApC,YACA,OAA+C,OAA1CzI,MAAM,Q,aAAQ,QAAyB,EAAR,UAACG,KAArC,eAFF,oBADF,WAUI,EAAAkL,eAAehL,SAAA,WADvB,QAsBM,MAtBN,GAsBM,EApBJ,OAWM,OAXDL,MAAM,sBACR,QAAK,iBAAE,EAAAsL,iBAAmB,EAAAA,kBAD7B,CAEC,IAKA,OAGM,MAHN,GAGM,EAFJ,OACqF,KADlFtL,OAAK,SAAC,MAAK,mBACgB,EAAAsL,gBAAe,iBAAoB,EAAAA,oBADjE,YAK0B,EAAAA,iBAA7B,iBAA6B,WAA7B,QAMM,MANN,GAMM,gBALJ,QAImC,mBAHjB,EAAAD,gBAAVlK,K,WADR,QAImC,IAFjCC,IAAKD,EAAOE,GACZlB,MAAOgB,EACP,QAAK,GAAE,EAAAH,MAAK,QAAUG,IAJxB,4CAhBJ,kB,KAnLF,uC,4FCCOnB,MAAM,kB,YAMP,OAA0B,KAAvBA,MAAM,gBAAc,W,YAGvB,OAA0B,KAAvBA,MAAM,gBAAc,W,qEAV7B,QAaQ,GAbDY,IAAI,QAASqF,MAAO,EAAAA,OAA3B,C,kBACE,IAEM,EAFN,OAEM,MAFN,GAEM,EADJ,QAAQ,oCAGV,OAOO,QAPDjG,MAAM,UAAW,SAAM,8BAAU,EAAAuL,WAAA,EAAAA,aAAA,IAAS,eAAhD,EACE,OAES,UAFD3H,KAAK,SAAS5D,MAAM,SAAU,QAAK,oBAAE,EAAAuL,WAAA,EAAAA,aAAA,IAAY,QAAK,oBAAE,EAAAA,WAAA,EAAAA,aAAA,KAAhE,CACE,YAA0B,OAAQ,QAAG,EAAAC,aAAW,IADlD,KAGA,OAES,UAFD5H,KAAK,SAAS5D,MAAM,aAAc,QAAK,oBAAE,EAAAyL,OAAA,EAAAA,SAAA,IAAQ,QAAK,oBAAE,EAAAA,OAAA,EAAAA,SAAA,KAAhE,CACE,YAA0B,OAAQ,QAAG,EAAAC,YAAU,IADjD,KAJF,O,KALF,Y,CAmBF,QACEhK,MAAO,CAAC,QAAS,QAAS,SAC1BmD,WAAY,CAAC8G,MAAK,MAClB5G,MAAO,CACLkB,MAAO,CACLrC,KAAMgI,QAGRJ,YAAa,CACX5H,KAAMgI,OACN3G,QAAS,MAGXyG,WAAY,CACV9H,KAAMgI,OACN3G,QAAS,WAIb5C,QAAS,CACPkJ,YACExJ,KAAKf,MAAM,SACXe,KAAK0J,OACN,EAEDV,OACEhJ,KAAKK,MAAMyJ,MAAMd,MAClB,EAEDU,QACE1J,KAAKK,MAAMyJ,MAAMC,MAClB,I,WC5CL,MAAMvH,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,yECLI,OAAkC,KAA/BvE,MAAM,wBAAsB,W,IAA/B,I,2CAHF,QAIS,UAJDA,MAAM,WACX,QAAK,eAAE,EAAA+L,MAAM9K,IAAU,QAAK,eAAE,EAAA8K,MAAM9K,IAAU,QAAK,eAAE,EAAA8K,MAAM9K,KAD9D,M,CAQF,QACES,MAAO,CAAC,QAAS,QAAS,SAC1BW,QAAS,CACP0J,MAAMzD,GACJvG,KAAKf,MAAMsH,EAAE1E,KAAM0E,EACpB,ICPL,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,oGCNI,OAES,UAFD1E,KAAK,UAAQ,EACnB,OAAiC,KAA9B5D,MAAM,0BADX,K,YAIE,OAAwB,KAArBA,MAAM,cAAY,W,IAArB,I,2CANJ,QASO,QATA,SAAM,8BAAU,EAAAgM,QAAA,EAAAA,UAAA,IAAM,cAAEhM,MAAM,eAArC,WACE,OAAmE,SAA5D4D,KAAK,O,qCAAgB,EAAAsC,KAAI,GAAGkE,SAAU,EAAAA,SAAUxJ,IAAI,SAA3D,kBAA4B,EAAAsF,QAC5B,IAGA,OAES,UAFDlG,MAAM,SAAU,QAAK,eAAE,EAAAgB,MAAK,WAAa,QAAK,eAAE,EAAAA,MAAK,YAA7D,QAGA,QAAQ,kCARV,G,CAaF,QACEU,MAAO,CAAC,QAAS,UACjBqD,MAAO,CACL5E,MAAO,CACLyD,KAAMgI,QAGRxB,SAAU,CACRxG,KAAMoB,QACNC,SAAS,IAIbtD,OACE,MAAO,CACLuE,KAAM,KAET,EAED7D,QAAS,CACP0J,MAAMzD,GACJvG,KAAKf,MAAMsH,EAAE1E,KAAM0E,EACpB,EAED0D,SAEE,OADAjK,KAAKf,MAAM,QAASe,KAAKmE,OAClB,CACR,GAGHvC,UACE5B,KAAKmE,KAAOnE,KAAK5B,MACjB4B,KAAKK,MAAM6J,MAAMC,OAClB,GCxCH,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,iCNiNA,MAAMf,GAAgB,CACpB,aACA,OACA,cACA,cACA,eACA,KACA,YACA,mBACA,OACA,OACA,SACA,aACA,aAGF,QACE/K,KAAM,cACNyE,WAAY,CACV0C,OADU,cACF4E,WADE,cACUR,MADV,KACiBS,WADjB,GAC6BC,WAD7B,GACyCvH,KADzC,KAC+CwH,cAAa,IAExE9K,OAAQ,CAACoE,GAAA,GACTlE,MAAO,CAAC,QAAS,UAAW,iBAC5BqD,MAAO,CACL5D,OAAQ,CACNyC,KAAM/B,OACNqD,UAAU,GAGZ1E,OAAQ,CACNoD,KAAM/B,QAGRpB,SAAU,CACRmD,KAAM/B,QAGR0E,QAAS,CACP3C,KAAMoB,QACNC,SAAS,GAGXsH,aAAc,CACZ3I,KAAM/B,OACNoD,QAAS,SAIbrD,SAAU,CACRyJ,iBACE,OAAOxJ,OAAOC,OAAOC,KAAKwK,cAAchE,MACtC,CAAChG,EAAGC,KAAOD,EAAEnC,MAAQ,IAAIoI,cAAchG,EAAEpC,MAAQ,KAEpD,GAGHuB,OACE,MAAO,CACLhB,SAAS,EACTuJ,UAAU,EACVG,UAAU,EACViB,iBAAiB,EACjBN,mBAAmB,EACnBE,oBAAoB,EACpBC,cAAeA,GAElB,EAED9I,QAAS,CACPyG,eAAe0D,GACbzK,KAAKpB,SAAU,EAEf,IACE,MAAM8L,EAAM,CAAC,EACbA,EAAI1K,KAAKZ,OAAOE,IAAMmL,QAChBzK,KAAKsH,QAAQ,kBAAmBoD,EAIxC,CAPA,QAKE1K,KAAKpB,SAAU,EACfoB,KAAKmI,UAAW,CAClB,CACD,EAEDpB,iBACE/G,KAAKpB,SAAU,EAEf,UACQoB,KAAKsH,QAAQ,kBAAmB,CAACtH,KAAKZ,OAAOE,IAGrD,CAJA,QAGEU,KAAKpB,SAAU,CACjB,CACD,EAEDmI,iBAAiB4D,GACf3K,KAAKpB,SAAU,EAEf,IACE,MAAMwE,EAAO,CAAC6B,IAAK,KAAMhH,MAAO,MAC5B0M,GAASrM,OACPqM,EAAQC,WAAW,QACrBxH,EAAK6B,IAAM0F,EAEXvH,EAAKnF,MAAQ0M,GAEfvH,EAAK6B,KAAOzB,GAAKxD,KAAKZ,OAAOyC,OAAS,CAAC,IAAIuB,MAAM6B,IACjD7B,EAAKnF,OAASuF,GAAKxD,KAAKZ,OAAOyC,OAAS,CAAC,IAAIuB,OAAO,UAGtD,MAAMsH,EAAM,CAAC,EACbA,EAAI1K,KAAKZ,OAAOE,IAAM,CAAC8D,KAAMA,SACvBpD,KAAKsH,QAAQ,oBAAqBoD,EAI1C,CAlBA,QAgBE1K,KAAKpB,SAAU,EACfoB,KAAKsI,UAAW,CAClB,CACD,EAEDvB,sBAAsB9F,GACpBjB,KAAKpB,SAAU,EAEf,IACE,MAAMwE,EAAOpD,KAAKZ,OAAOoE,MAAMJ,MAAQ,CAAC,EAEtCA,EAAKM,MADHzC,EACWA,EAAME,OAAO/C,MAEb,KAEf,MAAMsM,EAAM,CAAC,EACbA,EAAI1K,KAAKZ,OAAOE,IAAM,CAAC8D,KAAMA,SACvBpD,KAAKsH,QAAQ,oBAAqBoD,EAI1C,CAbA,QAWE1K,KAAKpB,SAAU,EACfoB,KAAKsI,UAAW,CAClB,CACD,EAEDuC,UAAUzM,GACR,OAAa,MAATA,EACK,GACL0M,MAAMC,QAAQ3M,IAA2B,kBAAVA,EAC1B4M,KAAKH,UAAUzM,EAAO,KAAM,GAC9B,GAAKA,CACb,IOhWL,MAAM,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAASqE,IAAQ,CAAC,YAAY,qBAEzF,S,4HCROxE,MAAM,gC,GACJA,MAAM,Y,SAiBNA,MAAM,Y,kGAlBb,QAqBM,MArBN,EAqBM,EApBJ,OAMM,MANN,EAMM,EALJ,QAIW,GAJDiG,MAAM,WAAW,aAAW,wBAAwBrF,IAAI,oBAAlE,C,kBACgB,IAA6B,gBAA3C,QAEkC,mBAFR,EAAAoM,kBAALC,K,WAArB,QAEkC,GAFW7L,IAAK6L,EAAI/G,KAAM,EAAAgH,qBAAqBD,GAC9E,aAAU,UAAa,EAAA9M,OAAOyG,WAAaqG,GAC3C,QAAK,GAAE,EAAAE,kBAAkBF,IAF5B,oD,KADF,OAOiE,EAAA9M,OAAOyG,WAAA,WAA1E,QAOM,O,MAPD5G,OAAK,SAAC,WAAU,QAAkB,EAAAoN,wBAAvC,EACE,QAKW,GALDnH,MAAM,YAAY,aAAW,gBAAgBrF,IAAI,gBACvD,8BADJ,C,kBAEgB,IAAyB,gBAAvC,QAEiC,mBAFP,EAAAyM,cAALJ,K,WAArB,QAEiC,GAFjC,QAEiC,CAFQ7L,IAAK6L,EAAI/G,KAAM+G,GAC9C,EAAAK,aAAaL,GAAC,CAAI,aAAU,YAAe,EAAAM,eAAeN,IACjE,SAAK,YAAO,EAAAO,YAAYP,IAAC,YAF5B,qD,KAFF,MADF,oBAS4BpL,OAAO2D,KAAK,EAAAO,aAAa1E,IAAE,IAAQhB,SAAA,WAA/D,QAEM,MAFN,EAEM,WADJ,OAAyF,SAAlFO,IAAI,SAASgD,KAAK,OAAO5D,MAAM,aAAayN,YAAY,K,qCAAc,EAAAC,WAAU,IAAvF,iBAA6E,EAAAA,kBAD/E,gB,uDAaJ,GACEtN,KAAM,WACNsB,MAAO,CAAC,SACRF,OAAQ,CAACoE,EAAA,GACTf,WAAY,CAACwC,SAAD,IAAWC,aAAY,KACnCvC,MAAO,CACLgB,aAAc,CACZnC,KAAM/B,OACNqD,UAAU,GAGZ/E,MAAO,CACLyD,KAAM/B,OACNqD,UAAU,IAIdvD,OACE,MAAO,CACL4L,eAAgB,CAAC,EACjBG,WAAY,GAEf,EAED9L,SAAU,CACRoL,mBACE,OAAOnL,OAAO2D,KAAKzD,KAAKgE,cAAc/D,QACnC4E,GAA0B,OAAbA,GAEjB,EAEDyG,eACE,OAAOxL,OAAO2D,KAAKzD,KAAKgE,aAAahE,KAAK5B,OAAOyG,WAAa,CAAC,GAAG2B,MACnE,EAEDoF,YACE,OAAOpI,CACR,EAED6H,sBACE,OAAOvL,OAAO2D,KAAKzD,KAAKwL,gBAAgBlN,SAAW0B,KAAKsL,aAAahN,MACtE,EAED0H,mBACE,OAAOlG,OAAOC,OAAOC,KAAKgE,aAAa1E,IAAIW,QAAQb,IACjD,IAAKY,KAAKwL,eAAepM,EAAOY,KAAK5B,OAAOyG,WAC3C,OAAO,EAER,GAAI7E,KAAK2L,YAAYrN,OAAQ,CAC3B,MAAMqN,EAAa3L,KAAK2L,WAAWE,cACnC,OACIzM,EAAOf,MAAQ,IAAIwN,cAAexC,QAAQsC,IAAe,IACzDvM,EAAO8H,QAAU,IAAI2E,cAAexC,QAAQsC,IAAe,IAC3DvM,EAAO6I,aAAe,IAAI4D,cAAexC,QAAQsC,IAAe,IACjEvM,EAAOE,IAAM,GAAGwM,YAAcH,CAEnC,CAEA,OAAO,CAAP,IACC5K,QAAO,CAACC,EAAM5B,KACf4B,EAAI5B,EAAOE,IAAMF,EACV4B,IACN,CAAC,EACL,GAGHV,QAAS,CACP6K,qBAAqB9M,GACnB,OAAKA,GAGLA,EAAO2B,KAAKkJ,SAAS7K,GACjBA,EAAK0N,SAAS,OAChB1N,EAAOA,EAAK6D,MAAM,EAAG7D,EAAKC,OAAO,GAAK,MAExCD,GAAQ,IACDA,GAPE,EAQV,EAEDkN,aAAa3G,GACX,GAA4B,WAAxB5E,KAAK5B,MAAMyG,UAAyB,EAAYD,GAAQ,CAC1D,MAAMxB,EAAO,EAAYwB,GACzB,MAAO,CACL,aAAcxB,EAAK,UAAU9E,SAAW8E,EAAK8B,QAAQ5G,OACjD8E,EAAK,SAAW,eACpB,WAAYA,EAAK8B,OAErB,CAEA,MAAO,CAAC,CACT,EAED8G,8BACE,MAAM5N,EAAQ,IAAI4B,KAAK5B,OACvBA,EAAM4H,iBAAmBhG,KAAKgG,iBAC9BhG,KAAKf,MAAM,QAASb,EACrB,EAED6N,mBACE,MAAM7N,EAAQ,IAAI4B,KAAK5B,OACvBA,EAAMuN,WAAa3L,KAAK2L,WACxBvN,EAAM4H,iBAAmBhG,KAAKgG,iBAC9BhG,KAAKf,MAAM,QAASb,EACrB,EAED8N,mBAAmBC,GACjB,GAAIA,EACFnM,KAAKwL,eAAiB1L,OAAO2D,KAC3BzD,KAAKgE,aAAahE,KAAK5B,OAAOyG,WAAa,CAAC,GAC5C9D,QACA,CAACC,EAAK4D,KACJ5D,EAAI4D,IAAS,EACN5D,IACN,CAAC,QAGN,IAAK,MAAM4D,KAAS9E,OAAO2D,KAAKzD,KAAKgE,aAAahE,KAAK5B,OAAOyG,WAC1B,MAA9B7E,KAAKwL,eAAe5G,KACtB5E,KAAKwL,eAAe5G,IAAS,GAGnC5E,KAAKgM,6BACN,EAEDP,YAAY7G,GACV5E,KAAKwL,eAAe5G,IAAU5E,KAAKwL,eAAe5G,GAClD5E,KAAKgM,6BACN,EAEDZ,kBAAkBvG,GAChB,IAAK7E,KAAKgE,aAAaa,IAAaA,IAAa7E,KAAK5B,OAAOyG,SAC3D,OAAO,EAET,MAAMzG,EAAQ,IAAI4B,KAAK5B,OACvBA,EAAMyG,SAAWA,EACjB7E,KAAKf,MAAM,QAASb,EACrB,GAGHwD,UACE5B,KAAKkM,oBAAmB,GACxBlM,KAAKoC,QAAO,IAAMpC,KAAK5B,OAAOyG,WAAU,KAAQ7E,KAAKkM,oBAAmB,EAAxB,IAChDlM,KAAKoC,QAAO,IAAMpC,KAAK2L,YAAY3L,KAAKiM,kBACxCjM,KAAKoC,QAAO,IAAMpC,KAAKgE,eAAc,KAAQhE,KAAKkM,oBAAmB,EAAxB,GAC9C,G,UCzKH,MAAM1J,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O,wKCPSxE,MAAM,4B,GAEFA,MAAM,O,UACT,OAEM,OAFDA,MAAM,0BAAwB,EACjC,OAAuC,SAAhCmO,IAAI,QAAO,mBADpB,K,GAGKnO,MAAM,0B,kBAMRA,MAAM,O,UACT,OAEM,OAFDA,MAAM,0BAAwB,EACjC,OAAwC,SAAjCmO,IAAI,QAAO,oBADpB,K,GAGKnO,MAAM,0B,kBAMRA,MAAM,wB,yBAEP,OAA0B,KAAvBA,MAAM,gBAAc,W,GAAvB,G,oEAzBV,QA8BQ,GA9BAuG,QAAS,EAAAA,QAASN,MAAM,eAAerF,IAAI,QAAS,OAAM,EAAAwN,QAAlE,C,kBACE,IA4BM,EA5BN,OA4BM,MA5BN,EA4BM,EA3BJ,OA0BO,QA1BA,SAAM,8BAAU,EAAAC,UAAA,EAAAA,YAAA,IAAQ,eAA/B,EACE,OAQM,MARN,EAQM,CAPJ,GAGA,OAGM,MAHN,EAGM,WAFJ,OACkE,SAD3DzK,KAAK,OAAOvC,GAAG,gB,qCAAyB,EAAAiN,QAAO,GACpDb,YAAY,gBAAiBrD,SAAU,EAAAzJ,QAASC,IAAI,WADtD,iBAA+C,EAAA0N,gBAKnD,OAQM,MARN,EAQM,CAPJ,GAGA,OAGM,MAHN,EAGM,WAFJ,OACqD,SAD9C1K,KAAK,OAAOvC,GAAG,iB,qCAA0B,EAAAkN,SAAQ,GAAE3N,IAAI,WAC5D6M,YAAY,iBAAkBrD,SAAU,EAAAzJ,SAD1C,iBAAgD,EAAA4N,iBAKpD,OAIM,MAJN,EAIM,EAHJ,OAES,UAFD3K,KAAK,SAASqC,MAAM,MAAOmE,SAAU,EAAAzJ,SAA7C,UAtBJ,S,KAFJ,uB,yBAqCF,GACEP,KAAM,gBACNyE,WAAY,CAAC8G,MAAK,KAClBnK,OAAQ,CAACoE,EAAA,GACTlE,MAAO,CAAC,SACRqD,MAAO,CACLwB,QAAS,CACP3C,KAAMoB,QACNC,SAAS,IAGbtD,OACE,MAAO,CACLhB,SAAS,EACT2N,QAAS,KACTC,SAAU,KAEb,EAEDlM,QAAS,CACPyG,mBACE/G,KAAKpB,SAAU,EACf,UACQoB,KAAKsH,QAAQ,iBAAkB,CAACjJ,KAAM2B,KAAKuM,QAAQE,QAG3D,CAJA,QAGEzM,KAAKpB,SAAU,CACjB,CACD,EAEDmI,iBACE,MAAMwF,EAAUvM,KAAKuM,QAAQE,OACxBF,GAASjO,QACZ0B,KAAK0M,cAAc,uCAGrB,MAAMtO,EAAQ4B,KAAKwM,SACnB,GAAKpO,GAAOE,OAEL,CACL0B,KAAKpB,SAAU,EACf,IACE,MAAMoI,EAAO,CAAC,EACdA,EAAKuF,GAAWnO,QACV4B,KAAKsH,QAAQ,eAAgBN,EAGrC,CANA,QAKEhH,KAAKpB,SAAU,CACjB,CACF,YAVQoB,KAAK2M,aAYb3M,KAAKK,MAAMkM,QAAQnO,MAAQ,GAC3B4B,KAAKK,MAAMmM,SAASpO,MAAQ,GAC5B4B,KAAKK,MAAMyJ,MAAMJ,OAClB,EAED2C,SACErM,KAAK4M,WAAU,KACb5M,KAAKK,MAAMkM,QAAQpC,OAAnB,GAEH,I,UCzFL,MAAM3H,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O,uBCTA,IAAIV,EAAM,CACT,kBAAmB,CAClB,KACA,EACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,MAED,YAAa,CACZ,KACA,EACA,MAED,gBAAiB,CAChB,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,KACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,wBAAyB,CACxB,KACA,EACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,KACA,MAED,yBAA0B,CACzB,KACA,EACA,KACA,MAED,WAAY,CACX,KACA,EACA,KACA,MAED,eAAgB,CACf,KACA,EACA,KACA,MAED,kBAAmB,CAClB,KACA,EACA,MAED,sBAAuB,CACtB,KACA,EACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,wBAAyB,CACxB,KACA,EACA,KACA,MAED,kBAAmB,CAClB,KACA,EACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,MAED,QAAS,CACR,KACA,EACA,MAED,YAAa,CACZ,KACA,EACA,MAED,YAAa,CACZ,KACA,EACA,MAED,gBAAiB,CAChB,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,MAED,kBAAmB,CAClB,KACA,EACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,MAED,WAAY,CACX,KACA,EACA,MAED,eAAgB,CACf,KACA,EACA,MAED,mBAAoB,CACnB,KACA,EACA,KACA,MAED,uBAAwB,CACvB,KACA,EACA,KACA,MAED,WAAY,CACX,IACA,EACA,KACA,KAED,eAAgB,CACf,IACA,EACA,KACA,KAED,SAAU,CACT,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,mBAAoB,CACnB,KACA,EACA,KACA,MAED,uBAAwB,CACvB,KACA,EACA,KACA,MAED,iBAAkB,CACjB,KACA,EACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,KACA,MAED,WAAY,CACX,KACA,GAED,eAAgB,CACf,KACA,GAED,eAAgB,CACf,KACA,GAED,mBAAoB,CACnB,KACA,GAED,gBAAiB,CAChB,KACA,GAED,oBAAqB,CACpB,KACA,GAED,eAAgB,CACf,KACA,EACA,KACA,MAED,mBAAoB,CACnB,KACA,EACA,KACA,MAED,eAAgB,CACf,KACA,EACA,MAED,mBAAoB,CACnB,KACA,EACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,wBAAyB,CACxB,KACA,EACA,KACA,MAED,mBAAoB,CACnB,KACA,EACA,KACA,MAED,uBAAwB,CACvB,KACA,EACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,MAED,0BAA2B,CAC1B,KACA,EACA,KACA,MAED,UAAW,CACV,KACA,GAED,cAAe,CACd,KACA,GAED,UAAW,CACV,KACA,EACA,KACA,KACA,MAED,cAAe,CACd,KACA,EACA,KACA,KACA,MAED,gBAAiB,CAChB,KACA,EACA,MAED,oBAAqB,CACpB,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,KACA,MAED,gBAAiB,CAChB,KACA,EACA,MAED,oBAAqB,CACpB,KACA,EACA,MAED,UAAW,CACV,KACA,GAED,cAAe,CACd,KACA,GAED,iBAAkB,CACjB,KACA,EACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,KACA,MAED,UAAW,CACV,KACA,EACA,KACA,MAED,cAAe,CACd,KACA,EACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,MAED,yBAA0B,CACzB,KACA,EACA,MAED,kBAAmB,CAClB,KACA,EACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,MAED,kBAAmB,CAClB,IACA,EACA,KAED,sBAAuB,CACtB,IACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,KACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,mBAAoB,CACnB,KACA,EACA,KACA,MAED,uBAAwB,CACvB,KACA,EACA,KACA,MAED,mBAAoB,CACnB,KACA,EACA,KACA,MAED,uBAAwB,CACvB,KACA,EACA,KACA,MAED,cAAe,CACd,KACA,EACA,KACA,MAED,kBAAmB,CAClB,KACA,EACA,KACA,MAED,aAAc,CACb,KACA,GAED,iBAAkB,CACjB,KACA,GAED,WAAY,CACX,KACA,EACA,KACA,MAED,eAAgB,CACf,KACA,EACA,KACA,MAED,gBAAiB,CAChB,KACA,EACA,KACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,cAAe,CACd,KACA,EACA,MAED,kBAAmB,CAClB,KACA,EACA,MAED,WAAY,CACX,KACA,EACA,KACA,MAED,eAAgB,CACf,KACA,EACA,KACA,MAED,kBAAmB,CAClB,KACA,EACA,MAED,sBAAuB,CACtB,KACA,EACA,MAED,cAAe,CACd,KACA,EACA,KACA,MAED,kBAAmB,CAClB,KACA,EACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,MAED,0BAA2B,CAC1B,KACA,EACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,MAED,0BAA2B,CAC1B,KACA,EACA,KACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,wBAAyB,CACxB,KACA,EACA,KACA,MAED,iBAAkB,CACjB,KACA,EACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,KACA,MAED,aAAc,CACb,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,MAED,kBAAmB,CAClB,KACA,GAED,sBAAuB,CACtB,KACA,GAED,kBAAmB,CAClB,KACA,EACA,KACA,MAED,sBAAuB,CACtB,KACA,EACA,KACA,MAED,WAAY,CACX,IACA,EACA,KACA,KAED,eAAgB,CACf,IACA,EACA,KACA,KAED,iBAAkB,CACjB,KACA,EACA,KACA,MAED,qBAAsB,CACrB,KACA,EACA,KACA,MAED,gBAAiB,CAChB,GACA,EACA,KACA,IAED,SAAU,CACT,KACA,GAED,cAAe,CACd,KACA,GAED,cAAe,CACd,KACA,EACA,KACA,OAGF,SAAS8K,EAAoBnC,GAC5B,IAAIoC,EAAoBC,EAAEhL,EAAK2I,GAC9B,OAAOsC,QAAQC,UAAUC,MAAK,WAC7B,IAAI3G,EAAI,IAAI4G,MAAM,uBAAyBzC,EAAM,KAEjD,MADAnE,EAAE6G,KAAO,mBACH7G,CACP,IAGD,IAAI8G,EAAMtL,EAAI2I,GAAMpL,EAAK+N,EAAI,GAC7B,OAAOL,QAAQM,IAAID,EAAInL,MAAM,GAAGH,IAAI+K,EAAoBvG,IAAI2G,MAAK,WAChE,OAAOJ,EAAoB9K,EAAE1C,EAAa,GAAT+N,EAAI,GACtC,GACD,CACAR,EAAoBpJ,KAAO,WAAa,OAAO3D,OAAO2D,KAAK1B,EAAM,EACjE8K,EAAoBvN,GAAK,KACzBiO,EAAOC,QAAUX,C","sources":["webpack://platypush/./src/components/panels/Entities/Entity.vue","webpack://platypush/./src/components/panels/Entities/Entity.vue?6f8a","webpack://platypush/./src/components/panels/Entities/EntityIcon.vue","webpack://platypush/./src/components/panels/Entities/EntityIcon.vue?8abc","webpack://platypush/./src/components/panels/Entities/EntityMixin.vue","webpack://platypush/./src/components/panels/Entities/EntityMixin.vue?a9b3","webpack://platypush/./src/components/panels/Entities/Index.vue","webpack://platypush/./src/components/elements/NoItems.vue","webpack://platypush/./src/components/elements/NoItems.vue?70de","webpack://platypush/./src/components/panels/Entities/Index.vue?4523","webpack://platypush/./src/components/panels/Entities/Modal.vue","webpack://platypush/./src/components/elements/ConfirmDialog.vue","webpack://platypush/./src/components/elements/ConfirmDialog.vue?f384","webpack://platypush/./src/components/elements/EditButton.vue","webpack://platypush/./src/components/elements/EditButton.vue?fb20","webpack://platypush/./src/components/elements/NameEditor.vue","webpack://platypush/./src/components/elements/NameEditor.vue?34cf","webpack://platypush/./src/components/panels/Entities/Modal.vue?d45a","webpack://platypush/./src/components/panels/Entities/Selector.vue","webpack://platypush/./src/components/panels/Entities/Selector.vue?bf8b","webpack://platypush/./src/components/panels/Entities/VariableModal.vue","webpack://platypush/./src/components/panels/Entities/VariableModal.vue?db72","webpack://platypush/./src/components/panels/Entities|lazy|/^\\.\\/.*$/|groupOptions: {}|namespace object"],"sourcesContent":["<template>\n <div class=\"entity-container-wrapper\"\n :class=\"{'with-children': hasChildren, collapsed: isCollapsed, hidden: !value?.name?.length}\">\n <div class=\"row item entity-container\"\n :class=\"{ 'with-children': hasChildren, collapsed: isCollapsed, blink: justUpdated }\">\n <div class=\"adjuster\" :class=\"{'col-12': !hasChildren, 'col-11': hasChildren}\">\n <component\n :is=\"component\"\n :value=\"value\"\n :parent=\"parent\"\n :children=\"computedChildren\"\n :loading=\"loading\"\n ref=\"instance\"\n :error=\"error || value?.reachable == false\"\n @click=\"onClick\"\n @input=\"$emit('input', $event)\"\n @loading=\"$emit('loading', $event)\"\n />\n </div>\n\n <div class=\"col-1 collapse-toggler\" @click.stop=\"toggleCollapsed\" v-if=\"hasChildren\">\n <i class=\"fas\"\n :class=\"{'fa-chevron-down': isCollapsed, 'fa-chevron-up': !isCollapsed}\" />\n </div>\n </div>\n\n <div class=\"children fade-in\" v-if=\"hasChildren && !isCollapsed\">\n <div class=\"child\" v-for=\"entity in computedChildren\" :key=\"entity.id\">\n <Entity\n :value=\"entity\"\n :parent=\"value\"\n :children=\"childrenByParentId(entity.id)\"\n :loading=\"loading\"\n :level=\"level + 1\"\n @show-modal=\"$emit('show-modal', $event)\"\n @input=\"$emit('input', entity)\" />\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { defineAsyncComponent, shallowRef } from 'vue'\nimport EntityMixin from \"./EntityMixin\"\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Entity\",\n mixins: [EntityMixin],\n emits: ['input', 'loading', 'update', 'show-modal'],\n\n data() {\n return {\n component: null,\n justUpdated: false,\n }\n },\n\n computed: {\n computedChildren() {\n return Object.values(this.children || {}).filter((child) => child)\n },\n\n hasChildren() {\n return !!this.computedChildren.length\n },\n\n isCollapsed() {\n if (!this.hasChildren)\n return true\n\n return this.collapsed\n },\n\n instance() {\n return this.$refs.instance\n },\n },\n\n methods: {\n valuesEqual(a, b) {\n a = {...a}\n b = {...b}\n for (const key of ['updated_at', 'data']) {\n delete a[key]\n delete b[key]\n }\n\n return this.objectsEqual(a, b)\n },\n\n childrenByParentId(parentId) {\n return Object.values(this.allEntities || {}).\n filter(\n (entity) => entity\n && entity.parent_id === parentId\n && !entity.is_configuration\n ).\n reduce((obj, entity) => {\n obj[entity.id] = entity\n return obj\n }, {})\n },\n\n onClick(event) {\n event.stopPropagation()\n\n if (\n event.target.classList.contains('label') ||\n event.target.classList.contains('head')\n ) {\n // When clicking on the name or icon of the entity, stop the event\n // propagation and toggle the collapsed state instead.\n this.toggleCollapsed()\n } else {\n // Otherwise, propagate the event upwards as a request to show the\n // entity details modal.\n this.$emit('show-modal', this.value.id)\n }\n },\n\n onEntityUpdate(entity) {\n // Check if any of the children have been updated\n const entityId = entity?.id\n const isChildUpdate = (\n entityId != null &&\n this.children &&\n entityId in this.children\n )\n\n if (!isChildUpdate)\n return\n\n this.setJustUpdated()\n },\n\n toggleCollapsed() {\n this.collapsed = !this.collapsed\n // Propagate the collapsed state to the wrapped component if applicable\n if (this.instance)\n this.instance.collapsed = !this.instance.collapsed\n },\n\n setJustUpdated() {\n this.justUpdated = true\n const self = this;\n setTimeout(() => self.justUpdated = false, 1000)\n },\n },\n\n mounted() {\n if (this.type !== 'Entity') {\n const type = this.type.split('_').map((t) =>\n t[0].toUpperCase() + t.slice(1)\n ).join('')\n\n this.$watch(\n () => this.value,\n (newValue, oldValue) => {\n if (this.valuesEqual(oldValue, newValue))\n return false\n\n this.setJustUpdated()\n this.$emit('update', {value: newValue})\n }\n )\n\n this.component = shallowRef(\n defineAsyncComponent(\n () => import(`@/components/panels/Entities/${type}`)\n )\n )\n }\n\n bus.onEntity(this.onEntityUpdate)\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"common\";\n\n.entity-container-wrapper {\n &.with-children:not(.collapsed) {\n box-shadow: 0 3px 4px 0 $default-shadow-color;\n }\n}\n\n@mixin expanded-entity {\n background: $selected-bg;\n font-weight: bold;\n box-shadow: 0 0 3px 2px $default-shadow-color;\n}\n\n.entity-container {\n width: 100%;\n display: flex;\n align-items: center;\n position: relative;\n padding: 0 !important;\n border-bottom: $default-border-3;\n\n &.with-children:not(.collapsed) {\n @include expanded-entity();\n }\n\n &:hover {\n background: $hover-bg;\n }\n\n .adjuster {\n cursor: pointer;\n }\n}\n\n:deep(.entity-container) {\n .entity.expanded {\n @include expanded-entity();\n }\n\n .head {\n .name {\n display: inline-flex;\n\n &:hover {\n color: $hover-fg;\n }\n }\n\n .label {\n margin-left: 0.5em;\n }\n\n .icon:hover {\n color: $hover-fg;\n }\n }\n}\n\n.blink {\n animation: blink-animation 1s steps(20, start);\n}\n\n@keyframes blink-animation {\n 0% {\n background: initial\n }\n\n 50% {\n background: $active-bg;\n }\n\n 100% {\n background: initial\n }\n}\n</style>\n","import { render } from \"./Entity.vue?vue&type=template&id=9d7bcc2a&scoped=true\"\nimport script from \"./Entity.vue?vue&type=script&lang=js\"\nexport * from \"./Entity.vue?vue&type=script&lang=js\"\n\nimport \"./Entity.vue?vue&type=style&index=0&id=9d7bcc2a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9d7bcc2a\"]])\n\nexport default __exports__","<template>\n <div class=\"entity-icon-container\"\n :class=\"{'with-color-fill': !!colorFill}\"\n :style=\"colorFillStyle\">\n <i class=\"fas fa-spinner fa-spin-pulse loading\" v-if=\"loading\" />\n <i class=\"fas fa-circle-exclamation error\" v-else-if=\"error\" />\n <Icon v-bind=\"computedIconNormalized\" v-else />\n </div>\n</template>\n\n<script>\nimport Icon from \"@/components/elements/Icon\";\n\nexport default {\n name: \"EntityIcon\",\n components: {Icon},\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n error: {\n type: Boolean,\n default: false,\n },\n\n entity: {\n type: Object,\n required: true,\n },\n\n icon: {\n type: Object,\n default: () => {},\n },\n\n hasColorFill: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n component: null,\n modalVisible: false,\n }\n },\n\n computed: {\n computedIcon() {\n let icon = {...(this.entity?.meta?.icon || {})}\n if (Object.keys(this.icon || {}).length)\n icon = this.icon\n return {...icon}\n },\n\n colorFill() {\n return this.hasColorFill && this.computedIcon.color\n },\n\n colorFillStyle() {\n return this.colorFill && !this.error ? {'background': this.colorFill} : {}\n },\n\n computedIconNormalized() {\n const icon = {...this.computedIcon}\n if (this.colorFill)\n delete icon.color\n return icon\n },\n\n type() {\n let entityType = (this.entity.type || '')\n return entityType.charAt(0).toUpperCase() + entityType.slice(1)\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"vars\";\n\n.entity-icon-container {\n width: 1.625em;\n height: 1.5em;\n display: inline-flex;\n margin-top: 0.25em;\n margin-left: 0.25em;\n position: relative;\n text-align: center;\n justify-content: center;\n align-items: center;\n\n &.with-color-fill {\n border-radius: 1em;\n }\n\n .loading {\n position: absolute;\n bottom: 0;\n transform: translate(0%, -50%);\n width: 1em;\n height: 1em;\n opacity: 0.6;\n }\n\n .error {\n color: $error-fg;\n }\n}\n</style>\n","import { render } from \"./EntityIcon.vue?vue&type=template&id=84ea3170&scoped=true\"\nimport script from \"./EntityIcon.vue?vue&type=script&lang=js\"\nexport * from \"./EntityIcon.vue?vue&type=script&lang=js\"\n\nimport \"./EntityIcon.vue?vue&type=style&index=0&id=84ea3170&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-84ea3170\"]])\n\nexport default __exports__","<script>\nimport Utils from \"@/Utils\"\n\nexport default {\n name: \"EntityMixin\",\n mixins: [Utils],\n emits: ['input'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n error: {\n type: Boolean,\n default: false,\n },\n\n value: {\n type: Object,\n required: true,\n },\n\n parent: {\n type: Object,\n default: () => {},\n },\n\n children: {\n type: Object,\n default: () => {},\n },\n\n allEntities: {\n type: Object,\n default: () => {},\n },\n\n level: {\n type: Number,\n default: 0,\n },\n },\n\n data() {\n return {\n modalVisible: false,\n collapsed: true,\n }\n },\n\n computed: {\n type() {\n let entityType = (this.value.type || '')\n return entityType.split('_').\n map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join('')\n },\n },\n}\n</script>\n","import script from \"./EntityMixin.vue?vue&type=script&lang=js\"\nexport * from \"./EntityMixin.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <div class=\"row plugin entities-container\">\n <Loading v-if=\"loading\" />\n\n <header>\n <div class=\"col-11 left\">\n <Selector :entity-groups=\"entityGroups\" :value=\"selector\" @input=\"selector = $event\" />\n </div>\n\n <div class=\"col-1 actions-container right\">\n <Dropdown title=\"Actions\" icon-class=\"fas fa-ellipsis\">\n <DropdownItem icon-class=\"fa fa-sync-alt\" text=\"Refresh\" @click=\"refresh\" />\n <DropdownItem icon-class=\"fa fa-square-root-variable\"\n text=\"Set Variable\" @click=\"variableModalVisible = true\" />\n </Dropdown>\n </div>\n </header>\n\n <div class=\"groups-canvas\">\n <EntityModal\n :entity=\"entities[modalEntityId]\"\n :parent=\"entities[entities[modalEntityId].parent_id]\"\n :children=\"childrenByParentId(modalEntityId)\"\n :visible=\"modalVisible\"\n :config-values=\"configValuesByParentId(modalEntityId)\"\n @close=\"onEntityModal\"\n @entity-update=\"modalEntityId = $event\"\n v-if=\"modalEntityId && entities[modalEntityId]\"\n />\n\n <VariableModal :visible=\"variableModalVisible\" @close=\"variableModalVisible = false\" />\n <NoItems v-if=\"!Object.keys(displayGroups || {})?.length\">No entities found</NoItems>\n\n <div class=\"groups-container\" v-else>\n <div class=\"group fade-in\" v-for=\"group in displayGroups\" :key=\"group.name\">\n <div class=\"frame\">\n <div class=\"header\">\n <span class=\"section left\">\n <Icon v-bind=\"entitiesMeta[typesByCategory[group.name]].icon || {}\"\n v-if=\"selector.grouping === 'category' && entitiesMeta[typesByCategory[group.name]]\" />\n <Icon :class=\"pluginIcons[group.name]?.class\" :url=\"pluginIcons[group.name]?.imgUrl\"\n v-else-if=\"selector.grouping === 'plugin' && pluginIcons[group.name]\" />\n </span>\n\n <span class=\"section center\">\n <div class=\"title\" v-text=\"group.name\" />\n </span>\n\n <span class=\"section right\">\n <button title=\"Refresh\" @click=\"refresh(group)\">\n <i class=\"fa fa-sync-alt\" />\n </button>\n </span>\n </div>\n\n <div class=\"body\">\n <div class=\"entity-frame\"\n v-for=\"entity in group.entities\"\n :key=\"entity.id\">\n <Entity\n :value=\"entity\"\n :children=\"childrenByParentId(entity.id)\"\n :all-entities=\"entities\"\n @show-modal=\"onEntityModal($event)\"\n @input=\"onEntityInput(entity)\"\n :error=\"!!errorEntities[entity.id]\"\n :loading=\"!!loadingEntities[entity.id]\"\n @loading=\"loadingEntities[entity.id] = $event\"\n v-if=\"!entity.parent_id\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport Utils from \"@/Utils\"\nimport Loading from \"@/components/Loading\";\nimport Icon from \"@/components/elements/Icon\";\nimport NoItems from \"@/components/elements/NoItems\";\nimport Entity from \"./Entity.vue\";\nimport Selector from \"./Selector.vue\";\nimport EntityModal from \"./Modal\"\nimport VariableModal from \"./VariableModal\"\nimport { bus } from \"@/bus\";\nimport icons from '@/assets/icons.json'\nimport meta from './meta.json'\n\nexport default {\n name: \"Entities\",\n mixins: [Utils],\n components: {\n Dropdown,\n DropdownItem,\n Entity,\n EntityModal,\n Icon,\n Loading,\n NoItems,\n Selector,\n VariableModal,\n },\n\n props: {\n // Entity scan timeout in seconds\n entityScanTimeout: {\n type: Number,\n default: 30,\n },\n },\n\n data() {\n return {\n loading: false,\n loadingEntities: {},\n errorEntities: {},\n entityTimeouts: {},\n entities: {},\n modalEntityId: null,\n modalVisible: false,\n variableModalVisible: false,\n selector: {\n grouping: 'category',\n selectedEntities: {},\n },\n }\n },\n\n computed: {\n entitiesMeta() {\n return meta\n },\n\n pluginIcons() {\n return icons\n },\n\n entityTypes() {\n return this.groupEntities('type')\n },\n\n typesByCategory() {\n return Object.entries(meta).reduce((obj, [type, meta]) => {\n obj[meta.name_plural] = type\n return obj\n }, {})\n },\n\n entityGroups() {\n return {\n 'id': Object.entries(this.groupEntities('id')).reduce((obj, [id, entities]) => {\n obj[id] = entities[0]\n return obj\n }, {}),\n 'category': this.groupEntities('category'),\n 'plugin': this.groupEntities('plugin'),\n }\n },\n\n displayGroups() {\n return Object.entries(this.entityGroups[this.selector.grouping]).\n filter(\n (entry) => entry[1].filter(\n (e) =>\n !!this.selector.selectedEntities[e.id] && e.parent_id == null\n ).length > 0\n ).\n map(\n ([grouping, entities]) => {\n return {\n name: grouping,\n entities: entities.filter(\n (e) => e.id in this.selector.selectedEntities\n ),\n }\n }\n ).\n sort((a, b) => a.name.localeCompare(b.name))\n },\n },\n\n methods: {\n groupEntities(attr) {\n return Object.values(this.entities).\n filter((entity) => entity.parent_id == null).\n reduce((obj, entity) => {\n const entities = obj[entity[attr]] || {}\n entities[entity.id] = entity\n\n obj[entity[attr]] = Object.values(entities).sort((a, b) => {\n return a.name.localeCompare(b.name)\n })\n\n return obj\n }, {})\n },\n\n _shouldSkipLoading(entity) {\n const children = Object.values(this.childrenByParentId(entity.id))\n const hasReadableChildren = children.filter((child) => {\n return (\n !child.is_configuration &&\n !child.is_write_only &&\n !child.is_query_disabled\n )\n }).length > 0\n\n return (\n entity.is_query_disabled ||\n entity.is_write_only ||\n (children.length && !hasReadableChildren)\n )\n },\n\n async refresh(group) {\n const entities = (group ? group.entities : this.entities) || {}\n const args = {}\n if (group)\n args.plugins = Object.values(entities).reduce((obj, entity) => {\n obj[entity.plugin] = true\n return obj\n }, {})\n\n this.loadingEntities = Object.values(entities).reduce((obj, entity) => {\n if (this._shouldSkipLoading(entity))\n return obj\n\n const self = this\n const id = entity.id\n if (this.entityTimeouts[id])\n clearTimeout(this.entityTimeouts[id])\n\n this.entityTimeouts[id] = setTimeout(() => {\n if (self.loadingEntities[id])\n delete self.loadingEntities[id]\n if (self.entityTimeouts[id])\n delete self.entityTimeouts[id]\n\n self.errorEntities[id] = entity\n console.warn(`Scan timeout for ${entity.name}`)\n }, this.entityScanTimeout * 1000)\n\n obj[id] = true\n return obj\n }, {})\n\n await this.request('entities.scan', args)\n },\n\n async sync() {\n this.loading = true\n\n try {\n this.entities = (await this.request('entities.get')).reduce((obj, entity) => {\n entity.name = entity?.meta?.name_override || entity.name\n entity.category = meta[entity.type].name_plural\n entity.meta = {\n ...(meta[entity.type] || {}),\n ...(entity.meta || {}),\n }\n\n obj[entity.id] = entity\n return obj\n }, {})\n\n this.selector.selectedEntities = this.entityGroups.id\n } finally {\n this.loading = false\n }\n },\n\n childrenByParentId(parentId) {\n return Object.values(this.entities).\n filter(\n (entity) => entity\n && entity.parent_id === parentId\n && !entity.is_configuration\n ).\n reduce((obj, entity) => {\n obj[entity.id] = entity\n return obj\n }, {})\n },\n\n configValuesByParentId(parentId) {\n return Object.values(this.entities).\n filter(\n (entity) => entity\n && entity.parent_id === parentId\n && entity.is_configuration\n ).\n reduce((obj, entity) => {\n obj[entity.id] = entity\n return obj\n }, {})\n },\n\n clearEntityTimeouts(entityId) {\n if (this.errorEntities[entityId])\n delete this.errorEntities[entityId]\n if (this.loadingEntities[entityId])\n delete this.loadingEntities[entityId]\n if (this.entityTimeouts[entityId]) {\n clearTimeout(this.entityTimeouts[entityId])\n delete this.entityTimeouts[entityId]\n }\n },\n\n onEntityInput(entity) {\n entity.category = meta[entity.type].name_plural\n this.entities[entity.id] = entity\n this.clearEntityTimeouts(entity.id)\n if (this.loadingEntities[entity.id])\n delete this.loadingEntities[entity.id]\n },\n\n onEntityUpdate(event) {\n const entityId = event.entity.id\n if (entityId == null)\n return\n\n this.clearEntityTimeouts(entityId)\n const entity = {...event.entity}\n if (event.entity?.state == null)\n entity.state = this.entities[entityId]?.state\n if (entity.meta?.name_override?.length)\n entity.name = entity.meta.name_override\n else if (this.entities[entityId]?.meta?.name_override?.length)\n entity.name = this.entities[entityId].meta.name_override\n else\n entity.name = event.entity?.name || this.entities[entityId]?.name\n\n entity.category = meta[entity.type].name_plural\n entity.meta = {\n ...(meta[event.entity.type] || {}),\n ...(this.entities[entityId]?.meta || {}),\n ...(event.entity?.meta || {}),\n }\n\n this.entities[entityId] = entity\n bus.publishEntity(entity)\n },\n\n onEntityDelete(event) {\n const entityId = event.entity?.id\n if (entityId == null)\n return\n if (entityId === this.modalEntityId)\n this.modalEntityId = null\n if (this.entities[entityId])\n delete this.entities[entityId]\n },\n\n onEntityModal(entityId) {\n if (entityId) {\n this.modalEntityId = entityId\n this.modalVisible = true\n } else {\n this.modalEntityId = null\n this.modalVisible = false\n }\n },\n },\n\n async mounted() {\n this.subscribe(\n this.onEntityUpdate,\n 'on-entity-update',\n 'platypush.message.event.entities.EntityUpdateEvent'\n )\n\n this.subscribe(\n this.onEntityDelete,\n 'on-entity-delete',\n 'platypush.message.event.entities.EntityDeleteEvent'\n )\n\n await this.sync()\n await this.refresh()\n },\n\n unmounted() {\n this.unsubscribe('on-entity-update')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"vars\";\n@import \"~@/style/items\";\n\n.entities-container {\n --groups-per-row: 1;\n\n @include from($desktop) {\n --groups-per-row: 2;\n }\n\n @include from($fullhd) {\n --groups-per-row: 3;\n }\n\n width: 100%;\n height: 100%;\n overflow: auto;\n color: $default-fg-2;\n font-weight: 400;\n\n button {\n background: #ffffff00;\n border: 0;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n header {\n width: calc(100% - 2px);\n height: $selector-height;\n display: flex;\n background: $default-bg-2;\n margin-left: 2px;\n box-shadow: $border-shadow-bottom;\n position: relative;\n z-index: 1;\n\n .right {\n position: absolute;\n right: 0;\n text-align: right;\n margin-right: 0.5em;\n padding-right: 0;\n\n button {\n padding: 0.5em 0;\n }\n }\n\n :deep(.right) {\n .dropdown-container {\n .dropdown {\n min-width: 10em;\n\n .item {\n box-shadow: none;\n\n .text {\n text-align: left;\n margin-left: 0.75em;\n }\n }\n }\n\n button {\n margin-right: 0;\n text-align: center;\n background: transparent;\n border: 0;\n\n &:hover {\n color: $default-hover-fg;\n }\n\n i {\n margin-left: 0.5em;\n }\n }\n }\n }\n }\n\n .groups-canvas {\n width: 100%;\n height: calc(100% - #{$selector-height});\n overflow: auto;\n\n @include until($tablet) {\n padding: 0.5em;\n }\n }\n\n .groups-container {\n @include from($desktop) {\n column-count: var(--groups-per-row);\n }\n }\n\n .group {\n width: 100%;\n max-height: 100%;\n position: relative;\n padding: $main-margin 0;\n display: flex;\n break-inside: avoid;\n\n @include from ($tablet) {\n padding: $main-margin;\n }\n\n .frame {\n @include from($desktop) {\n max-height: calc(100vh - #{$header-height} - #{$main-margin});\n }\n\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n position: relative;\n box-shadow: $group-shadow;\n border-radius: 1em;\n }\n\n .header {\n width: 100%;\n height: $header-height;\n display: table;\n background: $header-bg;\n box-shadow: $header-shadow;\n border-radius: 1em 1em 0 0;\n\n .section {\n height: 100%;\n display: table-cell;\n vertical-align: middle;\n\n &.left, &.right {\n width: 10%;\n }\n\n &.right {\n text-align: right;\n }\n\n &.center {\n width: 80%;\n text-align: center;\n }\n }\n }\n\n .body {\n background: $default-bg-2;\n max-height: calc(100% - #{$header-height});\n overflow: auto;\n flex-grow: 1;\n\n .entity-frame:last-child {\n border-radius: 0 0 1em 1em;\n }\n }\n }\n\n :deep(.modal) {\n @include until($tablet) {\n width: 95%;\n }\n\n .content {\n @include until($tablet) {\n width: 100%;\n }\n\n @include from($tablet) {\n min-width: 30em;\n }\n\n .body {\n padding: 0;\n\n .table-row {\n padding: 0.5em;\n }\n }\n }\n }\n}\n</style>\n","<template>\n<div class=\"no-items-container\">\n <div class=\"no-items fade-in\">\n <slot />\n </div>\n</div>\n</template>\n\n<script>\nexport default {\n name: \"NoItems\",\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.no-items-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .no-items {\n min-width: 100%;\n max-width: 100%;\n\n @include from($tablet) {\n min-width: 80%;\n }\n\n @include from($desktop) {\n min-width: 50%;\n max-width: 35em;\n }\n\n @include from($fullhd) {\n min-width: 33%;\n }\n\n background: $background-color;\n margin: 1em;\n padding: 1em;\n font-size: 1.5em;\n color: $no-items-color;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 1em;\n box-shadow: $border-shadow-bottom;\n }\n}\n</style>\n","import { render } from \"./NoItems.vue?vue&type=template&id=6fec32b5&scoped=true\"\nimport script from \"./NoItems.vue?vue&type=script&lang=js\"\nexport * from \"./NoItems.vue?vue&type=script&lang=js\"\n\nimport \"./NoItems.vue?vue&type=style&index=0&id=6fec32b5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6fec32b5\"]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=5f50d66a&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=5f50d66a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5f50d66a\"]])\n\nexport default __exports__","<template>\n <Modal :visible=\"visible\" class=\"entity-modal\" :title=\"entity.name || entity.external_id\" v-if=\"entity\">\n <ConfirmDialog ref=\"deleteConfirmDiag\" title=\"Confirm entity deletion\" @input=\"onDelete\">\n Are you <b>sure</b> that you want to delete this entity? <br/><br/>\n Note: you should only delete an entity if its plugin has been disabled\n or the entity is no longer reachable.<br/><br/>\n Otherwise, the entity will simply be created again upon the next scan.\n </ConfirmDialog>\n\n <div class=\"table-row\">\n <div class=\"title\">\n Name\n <EditButton @click=\"editName = true\" v-if=\"!editName\" />\n </div>\n <div class=\"value\">\n <NameEditor :value=\"entity.name\" @input=\"onRename\"\n @cancel=\"editName = false\" :disabled=\"loading\" v-if=\"editName\" />\n <span v-text=\"entity.name\" v-else />\n </div>\n </div>\n\n <div class=\"table-row\">\n <div class=\"title\">\n Icon\n <EditButton @click=\"editIcon = true\" v-if=\"!editIcon\" />\n </div>\n <div class=\"value icon-canvas\">\n <span class=\"icon-editor\" v-if=\"editIcon\">\n <NameEditor :value=\"entity.meta?.icon?.class || entity.meta?.icon?.url\" @input=\"onIconEdit\"\n @cancel=\"editIcon = false\" :disabled=\"loading\">\n <button type=\"button\" title=\"Reset\" @click=\"onIconEdit(null)\"\n @touch=\"onIconEdit(null)\">\n <i class=\"fas fa-rotate-left\" />\n </button>\n </NameEditor>\n <span class=\"help\">\n Supported: image URLs or\n <a href=\"https://fontawesome.com/icons\" target=\"_blank\">FontAwesome icon classes</a>.\n </span>\n </span>\n\n <Icon v-bind=\"entity?.meta?.icon || {}\" v-else />\n </div>\n </div>\n\n <div class=\"table-row\">\n <div class=\"title\">\n Icon color\n </div>\n <div class=\"value icon-color-picker\">\n <input type=\"color\" :value=\"entity.meta?.icon?.color\" @change=\"onIconColorEdit\">\n <button type=\"button\" title=\"Reset\" @click=\"onIconColorEdit(null)\"\n @touch=\"onIconColorEdit(null)\">\n <i class=\"fas fa-rotate-left\" />\n </button>\n </div>\n </div>\n\n <div class=\"table-row\">\n <div class=\"title\">Plugin</div>\n <div class=\"value\" v-text=\"entity.plugin\" />\n </div>\n\n <div class=\"table-row\">\n <div class=\"title\">Internal ID</div>\n <div class=\"value\" v-text=\"entity.id\" />\n </div>\n\n <div class=\"table-row\" v-if=\"entity.external_id\">\n <div class=\"title\">External ID</div>\n <div class=\"value\" v-text=\"entity.external_id\" />\n </div>\n\n <div class=\"table-row\" v-if=\"entity.description\">\n <div class=\"title\">Description</div>\n <div class=\"value\" v-text=\"entity.description\" />\n </div>\n\n <div class=\"table-row\" v-if=\"entity.external_url\">\n <div class=\"title\">External URL</div>\n <div class=\"value url\">\n <a :href=\"entity.external_url\" target=\"_blank\" :text=\"entity.external_url\" />\n </div>\n </div>\n\n <div class=\"table-row\" v-if=\"entity.image_url\">\n <div class=\"title\">Image</div>\n <div class=\"value\">\n <img class=\"entity-image\" :src=\"entity.image_url\">\n </div>\n </div>\n\n <div class=\"table-row\" v-if=\"parent\">\n <div class=\"title\">Parent</div>\n <div class=\"value\">\n <a class=\"url\" @click=\"$emit('entity-update', parent.id)\"\n v-text=\"parent.name\"\n />\n </div>\n </div>\n\n <div class=\"table-row\" v-if=\"entity.created_at\">\n <div class=\"title\">Created at</div>\n <div class=\"value\" v-text=\"formatDateTime(entity.created_at)\" />\n </div>\n\n <div class=\"table-row\" v-if=\"entity.updated_at\">\n <div class=\"title\">Updated at</div>\n <div class=\"value\" v-text=\"formatDateTime(entity.updated_at)\" />\n </div>\n\n <div class=\"table-row delete-entity-container\"\n @click=\"$refs.deleteConfirmDiag.show()\">\n <div class=\"title\">Delete Entity</div>\n <div class=\"value\">\n <button @click.stop=\"$refs.deleteConfirmDiag.show()\">\n <i class=\"fas fa-trash\" />\n </button>\n </div>\n </div>\n\n <div class=\"section children-container\" v-if=\"Object.keys(children || {}).length\">\n <div class=\"title section-title\" @click=\"childrenCollapsed = !childrenCollapsed\">\n <div class=\"col-11\">\n <i class=\"fas fa-sitemap\" /> &nbsp;\n Children\n </div>\n\n <div class=\"col-1 pull-right\">\n <i class=\"fas\"\n :class=\"{'fa-chevron-down': childrenCollapsed, 'fa-chevron-up': !childrenCollapsed}\" />\n </div>\n </div>\n\n <div class=\"children-container-info\" v-if=\"!childrenCollapsed\">\n <div class=\"table-row\" :class=\"{hidden: !child.name?.length || child.is_configuration}\"\n v-for=\"child in children\" :key=\"child.id\">\n <div class=\"title\">\n <EntityIcon :entity=\"entity\" :icon=\"entity.meta?.icon\" /> &nbsp;\n {{ prettify(child.type) }}\n </div>\n <div class=\"value\">\n <a class=\"url\" @click=\"$emit('entity-update', child.id)\"\n v-text=\"child.name\"\n />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section extra-info-container\">\n <div class=\"title section-title\" @click=\"extraInfoCollapsed = !extraInfoCollapsed\">\n <div class=\"col-11\">\n <i class=\"fas fa-circle-info\" /> &nbsp;\n Extra Info\n </div>\n\n <div class=\"col-1 pull-right\">\n <i class=\"fas\"\n :class=\"{'fa-chevron-down': extraInfoCollapsed, 'fa-chevron-up': !extraInfoCollapsed}\" />\n </div>\n </div>\n\n <div class=\"extra-info\" v-if=\"!extraInfoCollapsed\">\n <div v-for=\"value, attr in entity\" :key=\"attr\">\n <div class=\"table-row\" v-if=\"value != null && specialFields.indexOf(attr) < 0\">\n <div class=\"title\" v-text=\"prettify(attr)\" />\n <div class=\"value\" v-text=\"stringify(value)\" />\n </div>\n </div>\n\n <div v-for=\"value, attr in (entity.data || {})\" :key=\"attr\">\n <div class=\"table-row\" v-if=\"value != null\">\n <div class=\"title\" v-text=\"prettify(attr)\" />\n <div class=\"value\" v-text=\"stringify(value)\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section config-container\"\n v-if=\"computedConfig.length\">\n <div class=\"title section-title\"\n @click=\"configCollapsed = !configCollapsed\">\n <div class=\"col-11\">\n <i class=\"fas fa-screwdriver-wrench\" /> &nbsp;\n Configuration\n </div>\n\n <div class=\"col-1 pull-right\">\n <i class=\"fas\"\n :class=\"{'fa-chevron-down': configCollapsed, 'fa-chevron-up': !configCollapsed}\" />\n </div>\n </div>\n\n <div class=\"entities\" v-if=\"!configCollapsed\">\n <Entity\n v-for=\"entity in computedConfig\"\n :key=\"entity.id\"\n :value=\"entity\"\n @input=\"$emit('input', entity)\" />\n </div>\n </div>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\nimport Icon from \"@/components/elements/Icon\";\nimport ConfirmDialog from \"@/components/elements/ConfirmDialog\";\nimport EditButton from \"@/components/elements/EditButton\";\nimport EntityIcon from \"./EntityIcon\"\nimport NameEditor from \"@/components/elements/NameEditor\";\nimport Utils from \"@/Utils\";\nimport Entity from \"./Entity\";\nimport meta from './meta.json';\n\n// These fields have a different rendering logic than the general-purpose one\nconst specialFields = [\n 'created_at',\n 'data',\n 'description',\n 'external_id',\n 'external_url',\n 'id',\n 'image_url',\n 'is_configuration',\n 'meta',\n 'name',\n 'plugin',\n 'updated_at',\n 'parent_id',\n]\n\nexport default {\n name: \"EntityModal\",\n components: {\n Entity, EntityIcon, Modal, EditButton, NameEditor, Icon, ConfirmDialog\n },\n mixins: [Utils],\n emits: ['input', 'loading', 'entity-update'],\n props: {\n entity: {\n type: Object,\n required: true,\n },\n\n parent: {\n type: Object,\n },\n\n children: {\n type: Object,\n },\n\n visible: {\n type: Boolean,\n default: false,\n },\n\n configValues: {\n type: Object,\n default: () => {},\n },\n },\n\n computed: {\n computedConfig() {\n return Object.values(this.configValues).sort(\n (a, b) => (a.name || '').localeCompare(b.name || '')\n )\n },\n },\n\n data() {\n return {\n loading: false,\n editName: false,\n editIcon: false,\n configCollapsed: true,\n childrenCollapsed: true,\n extraInfoCollapsed: true,\n specialFields: specialFields,\n }\n },\n\n methods: {\n async onRename(newName) {\n this.loading = true\n\n try {\n const req = {}\n req[this.entity.id] = newName\n await this.request('entities.rename', req)\n } finally {\n this.loading = false\n this.editName = false\n }\n },\n\n async onDelete() {\n this.loading = true\n\n try {\n await this.request('entities.delete', [this.entity.id])\n } finally {\n this.loading = false\n }\n },\n\n async onIconEdit(newIcon) {\n this.loading = true\n\n try {\n const icon = {url: null, class: null}\n if (newIcon?.length) {\n if (newIcon.startsWith('http'))\n icon.url = newIcon\n else\n icon.class = newIcon\n } else {\n icon.url = (meta[this.entity.type] || {})?.icon?.url\n icon.class = (meta[this.entity.type] || {})?.icon?.['class']\n }\n\n const req = {}\n req[this.entity.id] = {icon: icon}\n await this.request('entities.set_meta', req)\n } finally {\n this.loading = false\n this.editIcon = false\n }\n },\n\n async onIconColorEdit(event) {\n this.loading = true\n\n try {\n const icon = this.entity.meta?.icon || {}\n if (event)\n icon.color = event.target.value\n else\n icon.color = null\n\n const req = {}\n req[this.entity.id] = {icon: icon}\n await this.request('entities.set_meta', req)\n } finally {\n this.loading = false\n this.editIcon = false\n }\n },\n\n stringify(value) {\n if (value == null)\n return ''\n if (Array.isArray(value) || typeof value === 'object')\n return JSON.stringify(value, null, 2)\n return '' + value\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n:deep(.modal) {\n .body {\n padding: 0;\n\n @include from($desktop) {\n min-width: 45em;\n }\n\n .table-row {\n box-shadow: none;\n padding: 0.5em;\n }\n }\n\n .icon-canvas {\n display: inline-flex;\n align-items: center;\n\n @include until($tablet) {\n .icon-container {\n justify-content: left;\n }\n }\n\n @include from($tablet) {\n .icon-container {\n justify-content: right;\n }\n }\n }\n\n .icon-editor {\n display: flex;\n flex-direction: column;\n }\n\n button {\n border: none;\n background: none;\n padding: 0 0.5em;\n }\n\n .help {\n font-size: 0.75em;\n }\n\n .delete-entity-container {\n color: $error-fg;\n cursor: pointer;\n button {\n color: $error-fg;\n }\n }\n\n @mixin section-title {\n display: flex;\n cursor: pointer;\n padding: 1em;\n text-transform: uppercase;\n letter-spacing: 0.033em;\n border-top: $default-border;\n box-shadow: $border-shadow-bottom;\n\n &:hover {\n background: $hover-bg;\n }\n }\n\n .section {\n margin: 0;\n\n .section-title {\n @include section-title;\n }\n }\n\n .config-container {\n .title {\n @include section-title;\n }\n }\n\n .extra-info-container {\n .value {\n white-space: pre-wrap;\n opacity: 0.8;\n }\n }\n\n .value {\n &.url, a {\n text-align: right;\n text-decoration: underline;\n opacity: 0.8;\n\n &:hover {\n opacity: 0.6;\n }\n }\n\n .entity-image {\n max-height: 5em;\n }\n }\n}\n</style>\n","<template>\n <Modal ref=\"modal\" :title=\"title\">\n <div class=\"dialog-content\">\n <slot />\n </div>\n\n <form class=\"buttons\" @submit.prevent=\"onConfirm\">\n <button type=\"submit\" class=\"ok-btn\" @click=\"onConfirm\" @touch=\"onConfirm\">\n <i class=\"fas fa-check\" /> &nbsp; {{ confirmText }}\n </button>\n <button type=\"button\" class=\"cancel-btn\" @click=\"close\" @touch=\"close\">\n <i class=\"fas fa-xmark\" /> &nbsp; {{ cancelText }}\n </button>\n </form>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\n\nexport default {\n emits: ['input', 'click', 'touch'],\n components: {Modal},\n props: {\n title: {\n type: String,\n },\n\n confirmText: {\n type: String,\n default: \"OK\",\n },\n\n cancelText: {\n type: String,\n default: \"Cancel\",\n },\n },\n\n methods: {\n onConfirm() {\n this.$emit('input')\n this.close()\n },\n\n show() {\n this.$refs.modal.show()\n },\n\n close() {\n this.$refs.modal.hide()\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n:deep(.modal) {\n .dialog-content {\n padding: 1em;\n }\n\n .buttons {\n display: flex;\n flex-direction: row;\n justify-content: right;\n padding: 1em 0 1em 1em;\n border: 0;\n border-radius: 0;\n box-shadow: 0 -1px 2px 0 $default-shadow-color;\n\n button {\n margin-right: 1em;\n padding: 0.5em 1em;\n border: 1px solid $border-color-2;\n border-radius: 1em;\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n}\n</style>\n","import { render } from \"./ConfirmDialog.vue?vue&type=template&id=d543b3e4&scoped=true\"\nimport script from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\nexport * from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\n\nimport \"./ConfirmDialog.vue?vue&type=style&index=0&id=d543b3e4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d543b3e4\"]])\n\nexport default __exports__","<template>\n <button class=\"edit-btn\"\n @click=\"proxy($event)\" @touch=\"proxy($event)\" @input=\"proxy($event)\"\n >\n <i class=\"fas fa-pen-to-square\" />\n </button>\n</template>\n\n<script>\nexport default {\n emits: ['input', 'click', 'touch'],\n methods: {\n proxy(e) {\n this.$emit(e.type, e)\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.edit-btn {\n border: 0;\n background: none;\n padding: 0 0.25em;\n margin-left: 0.25em;\n border: 1px solid rgba(0, 0, 0, 0);\n\n &:hover {\n background: $hover-bg;\n border: 1px solid $selected-fg;\n }\n}\n</style>\n","import { render } from \"./EditButton.vue?vue&type=template&id=3344f2bf&scoped=true\"\nimport script from \"./EditButton.vue?vue&type=script&lang=js\"\nexport * from \"./EditButton.vue?vue&type=script&lang=js\"\n\nimport \"./EditButton.vue?vue&type=style&index=0&id=3344f2bf&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3344f2bf\"]])\n\nexport default __exports__","<template>\n <form @submit.prevent=\"submit\" class=\"name-editor\">\n <input type=\"text\" v-model=\"text\" :disabled=\"disabled\" ref=\"input\">\n <button type=\"submit\">\n <i class=\"fas fa-circle-check\" />\n </button>\n <button class=\"cancel\" @click=\"$emit('cancel')\" @touch=\"$emit('cancel')\">\n <i class=\"fas fa-ban\" />\n </button>\n <slot />\n </form>\n</template>\n\n<script>\nexport default {\n emits: ['input', 'cancel'],\n props: {\n value: {\n type: String,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n text: null,\n }\n },\n\n methods: {\n proxy(e) {\n this.$emit(e.type, e)\n },\n\n submit() {\n this.$emit('input', this.text)\n return false\n },\n },\n\n mounted() {\n this.text = this.value\n this.$refs.input.focus()\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.name-editor {\n background: #00000000;\n display: inline-flex;\n flex-direction: row;\n padding: 0;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n\n button {\n border: none;\n background: none;\n padding: 0 0.5em;\n\n &.confirm {\n color: $selected-fg;\n }\n\n &.cancel {\n color: $error-fg;\n }\n }\n}\n</style>\n","import { render } from \"./NameEditor.vue?vue&type=template&id=600cb1a8&scoped=true\"\nimport script from \"./NameEditor.vue?vue&type=script&lang=js\"\nexport * from \"./NameEditor.vue?vue&type=script&lang=js\"\n\nimport \"./NameEditor.vue?vue&type=style&index=0&id=600cb1a8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-600cb1a8\"]])\n\nexport default __exports__","import { render } from \"./Modal.vue?vue&type=template&id=e7f9b796&scoped=true\"\nimport script from \"./Modal.vue?vue&type=script&lang=js\"\nexport * from \"./Modal.vue?vue&type=script&lang=js\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=e7f9b796&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e7f9b796\"]])\n\nexport default __exports__","<template>\n <div class=\"entities-selectors-container\">\n <div class=\"selector\">\n <Dropdown title=\"Group by\" icon-class=\"fas fa-object-ungroup\" ref=\"groupingSelector\">\n <DropdownItem v-for=\"g in visibleGroupings\" :key=\"g\" :text=\"prettifyGroupingName(g)\"\n :item-class=\"{selected: value?.grouping === g}\"\n @click=\"onGroupingChanged(g)\" />\n </Dropdown>\n </div>\n\n <div class=\"selector\" :class=\"{active: isGroupFilterActive}\" v-if=\"value?.grouping\">\n <Dropdown title=\"Filter by\" icon-class=\"fas fa-filter\" ref=\"groupSelector\"\n keep-open-on-item-click>\n <DropdownItem v-for=\"g in sortedGroups\" :key=\"g\" :text=\"g\"\n v-bind=\"iconForGroup(g)\" :item-class=\"{selected: !!selectedGroups[g]}\"\n @click.stop=\"toggleGroup(g)\" />\n </Dropdown>\n </div>\n\n <div class=\"selector\" v-if=\"Object.keys(entityGroups.id || {}).length\">\n <input ref=\"search\" type=\"text\" class=\"search-bar\" placeholder=\"🔎\" v-model=\"searchTerm\">\n </div>\n </div>\n</template>\n\n<script>\nimport Utils from '@/Utils'\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport meta from './meta.json'\nimport pluginIcons from '@/assets/icons.json'\n\nexport default {\n name: \"Selector\",\n emits: ['input'],\n mixins: [Utils],\n components: {Dropdown, DropdownItem},\n props: {\n entityGroups: {\n type: Object,\n required: true,\n },\n\n value: {\n type: Object,\n required: true,\n },\n },\n\n data() {\n return {\n selectedGroups: {},\n searchTerm: '',\n }\n },\n\n computed: {\n visibleGroupings() {\n return Object.keys(this.entityGroups).filter(\n (grouping) => grouping !== 'id'\n )\n },\n\n sortedGroups() {\n return Object.keys(this.entityGroups[this.value?.grouping] || {}).sort()\n },\n\n typesMeta() {\n return meta\n },\n\n isGroupFilterActive() {\n return Object.keys(this.selectedGroups).length !== this.sortedGroups.length\n },\n\n selectedEntities() {\n return Object.values(this.entityGroups.id).filter((entity) => {\n if (!this.selectedGroups[entity[this.value?.grouping]])\n return false\n\n if (this.searchTerm?.length) {\n const searchTerm = this.searchTerm.toLowerCase()\n return (\n ((entity.name || '').toLowerCase()).indexOf(searchTerm) >= 0 ||\n ((entity.plugin || '').toLowerCase()).indexOf(searchTerm) >= 0 ||\n ((entity.external_id || '').toLowerCase()).indexOf(searchTerm) >= 0 ||\n (entity.id || 0).toString() == searchTerm\n )\n }\n\n return true\n }).reduce((obj, entity) => {\n obj[entity.id] = entity\n return obj\n }, {})\n },\n },\n\n methods: {\n prettifyGroupingName(name) {\n if (!name)\n return ''\n\n name = this.prettify(name)\n if (name.endsWith('y'))\n name = name.slice(0, name.length-1) + 'ie'\n\n name += 's'\n return name\n },\n\n iconForGroup(group) {\n if (this.value.grouping === 'plugin' && pluginIcons[group]) {\n const icon = pluginIcons[group]\n return {\n 'icon-class': icon['class']?.length || !icon.imgUrl?.length ?\n icon['class'] : 'fas fa-gears',\n 'icon-url': icon.imgUrl,\n }\n }\n\n return {}\n },\n\n synchronizeSelectedEntities() {\n const value = {...this.value}\n value.selectedEntities = this.selectedEntities\n this.$emit('input', value)\n },\n\n updateSearchTerm() {\n const value = {...this.value}\n value.searchTerm = this.searchTerm\n value.selectedEntities = this.selectedEntities\n this.$emit('input', value)\n },\n\n refreshGroupFilter(reset) {\n if (reset)\n this.selectedGroups = Object.keys(\n this.entityGroups[this.value?.grouping] || {}\n ).reduce(\n (obj, group) => {\n obj[group] = true\n return obj\n }, {}\n )\n else {\n for (const group of Object.keys(this.entityGroups[this.value?.grouping]))\n if (this.selectedGroups[group] == null)\n this.selectedGroups[group] = true\n }\n\n this.synchronizeSelectedEntities()\n },\n\n toggleGroup(group) {\n this.selectedGroups[group] = !this.selectedGroups[group]\n this.synchronizeSelectedEntities()\n },\n\n onGroupingChanged(grouping) {\n if (!this.entityGroups[grouping] || grouping === this.value?.grouping)\n return false\n\n const value = {...this.value}\n value.grouping = grouping\n this.$emit('input', value)\n },\n },\n\n mounted() {\n this.refreshGroupFilter(true)\n this.$watch(() => this.value?.grouping, () => { this.refreshGroupFilter(true) })\n this.$watch(() => this.searchTerm, this.updateSearchTerm)\n this.$watch(() => this.entityGroups, () => { this.refreshGroupFilter(false) })\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.entities-selectors-container {\n width: 100%;\n display: flex;\n align-items: center;\n\n .selector {\n height: 100%;\n display: inline-flex;\n\n &.active {\n :deep(.dropdown-container) {\n button {\n color: $default-hover-fg;\n }\n }\n }\n }\n\n @media (max-width: 330px) {\n .search-bar {\n display: none;\n }\n }\n\n :deep(.dropdown-container) {\n height: 100%;\n display: flex;\n\n button {\n height: 100%;\n background: $default-bg-2;\n border: 0;\n padding: 0.5em;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .item {\n padding: 0.5em 4em 0.5em 0.5em;\n border: 0;\n box-shadow: none;\n\n .col-1.icon {\n width: 1.5em;\n }\n\n &.selected {\n font-weight: bold;\n background: #ffffff00;\n }\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Selector.vue?vue&type=template&id=7babaacc&scoped=true\"\nimport script from \"./Selector.vue?vue&type=script&lang=js\"\nexport * from \"./Selector.vue?vue&type=script&lang=js\"\n\nimport \"./Selector.vue?vue&type=style&index=0&id=7babaacc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7babaacc\"]])\n\nexport default __exports__","<template>\n <Modal :visible=\"visible\" title=\"Set Variable\" ref=\"modal\" @open=\"onOpen\">\n <div class=\"variable-modal-container\">\n <form @submit.prevent=\"setValue\">\n <div class=\"row\">\n <div class=\"col-s-12 col-m-4 label\">\n <label for=\"name\">Variable Name</label>\n </div>\n <div class=\"col-s-12 col-m-8 value\">\n <input type=\"text\" id=\"variable-name\" v-model=\"varName\"\n placeholder=\"Variable Name\" :disabled=\"loading\" ref=\"varName\" />\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-s-12 col-m-4 label\">\n <label for=\"name\">Variable Value</label>\n </div>\n <div class=\"col-s-12 col-m-8 value\">\n <input type=\"text\" id=\"variable-value\" v-model=\"varValue\" ref=\"varValue\"\n placeholder=\"Variable Value\" :disabled=\"loading\" />\n </div>\n </div>\n\n <div class=\"row button-container\">\n <button type=\"submit\" title=\"Set\" :disabled=\"loading\">\n <i class=\"fas fa-check\" />\n </button>\n </div>\n </form>\n </div>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"VariableModal\",\n components: {Modal},\n mixins: [Utils],\n emits: ['close'],\n props: {\n visible: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n loading: false,\n varName: null,\n varValue: null,\n };\n },\n\n methods: {\n async clearValue() {\n this.loading = true\n try {\n await this.request('variable.unset', {name: this.varName.trim()})\n } finally {\n this.loading = false\n }\n },\n\n async setValue() {\n const varName = this.varName.trim()\n if (!varName?.length) {\n this.notifyWarning('No variable name has been specified')\n }\n\n const value = this.varValue\n if (!value?.length) {\n await this.clearValue()\n } else {\n this.loading = true\n try {\n const args = {}\n args[varName] = value\n await this.request('variable.set', args)\n } finally {\n this.loading = false\n }\n }\n\n this.$refs.varName.value = ''\n this.$refs.varValue.value = ''\n this.$refs.modal.close()\n },\n\n onOpen() {\n this.$nextTick(() => {\n this.$refs.varName.focus()\n })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"common\";\n\n.variable-modal-container {\n form {\n padding: 1em 0;\n\n label {\n font-weight: bold;\n }\n\n .row {\n padding: 0.25em 1em;\n display: flex;\n align-items: center;\n }\n\n .button-container {\n display: flex;\n justify-content: center;\n margin-top: 0.5em;\n margin-bottom: -0.75em;\n padding-top: 0.5em;\n border-top: 1px solid $border-color-1;\n\n button {\n min-width: 10em;\n background: none;\n border-radius: 1.5em;\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n\n @include from($tablet) {\n .value {\n text-align: right;\n }\n }\n }\n}\n</style>\n","import { render } from \"./VariableModal.vue?vue&type=template&id=98b75eb6&scoped=true\"\nimport script from \"./VariableModal.vue?vue&type=script&lang=js\"\nexport * from \"./VariableModal.vue?vue&type=script&lang=js\"\n\nimport \"./VariableModal.vue?vue&type=style&index=0&id=98b75eb6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-98b75eb6\"]])\n\nexport default __exports__","var map = {\n\t\"./Accelerometer\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Accelerometer.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Battery\": [\n\t\t9651,\n\t\t9,\n\t\t9651\n\t],\n\t\"./Battery.vue\": [\n\t\t9651,\n\t\t9,\n\t\t9651\n\t],\n\t\"./BinarySensor\": [\n\t\t7549,\n\t\t9,\n\t\t3490,\n\t\t7549\n\t],\n\t\"./BinarySensor.vue\": [\n\t\t7549,\n\t\t9,\n\t\t3490,\n\t\t7549\n\t],\n\t\"./BluetoothDevice\": [\n\t\t9767,\n\t\t9,\n\t\t3490,\n\t\t9767\n\t],\n\t\"./BluetoothDevice.vue\": [\n\t\t9767,\n\t\t9,\n\t\t3490,\n\t\t9767\n\t],\n\t\"./BluetoothService\": [\n\t\t5498,\n\t\t9,\n\t\t3490,\n\t\t5498\n\t],\n\t\"./BluetoothService.vue\": [\n\t\t5498,\n\t\t9,\n\t\t3490,\n\t\t5498\n\t],\n\t\"./Button\": [\n\t\t8625,\n\t\t9,\n\t\t9705,\n\t\t8625\n\t],\n\t\"./Button.vue\": [\n\t\t8625,\n\t\t9,\n\t\t9705,\n\t\t8625\n\t],\n\t\"./CloudInstance\": [\n\t\t5225,\n\t\t9,\n\t\t5225\n\t],\n\t\"./CloudInstance.vue\": [\n\t\t5225,\n\t\t9,\n\t\t5225\n\t],\n\t\"./CompositeSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./CompositeSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./ContactSensor\": [\n\t\t7549,\n\t\t9,\n\t\t3490,\n\t\t7549\n\t],\n\t\"./ContactSensor.vue\": [\n\t\t7549,\n\t\t9,\n\t\t3490,\n\t\t7549\n\t],\n\t\"./Cpu\": [\n\t\t2745,\n\t\t9,\n\t\t2745\n\t],\n\t\"./Cpu.vue\": [\n\t\t2745,\n\t\t9,\n\t\t2745\n\t],\n\t\"./CpuInfo\": [\n\t\t2806,\n\t\t9,\n\t\t2806\n\t],\n\t\"./CpuInfo.vue\": [\n\t\t2806,\n\t\t9,\n\t\t2806\n\t],\n\t\"./CpuStats\": [\n\t\t5225,\n\t\t9,\n\t\t5225\n\t],\n\t\"./CpuStats.vue\": [\n\t\t5225,\n\t\t9,\n\t\t5225\n\t],\n\t\"./CpuTimes\": [\n\t\t8444,\n\t\t9,\n\t\t8444\n\t],\n\t\"./CpuTimes.vue\": [\n\t\t8444,\n\t\t9,\n\t\t8444\n\t],\n\t\"./CurrentSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./CurrentSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Device\": [\n\t\t5225,\n\t\t9,\n\t\t5225\n\t],\n\t\"./Device.vue\": [\n\t\t5225,\n\t\t9,\n\t\t5225\n\t],\n\t\"./DewPointSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./DewPointSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Dimmer\": [\n\t\t359,\n\t\t9,\n\t\t7782,\n\t\t359\n\t],\n\t\"./Dimmer.vue\": [\n\t\t359,\n\t\t9,\n\t\t7782,\n\t\t359\n\t],\n\t\"./Disk\": [\n\t\t2088,\n\t\t9,\n\t\t2088\n\t],\n\t\"./Disk.vue\": [\n\t\t2088,\n\t\t9,\n\t\t2088\n\t],\n\t\"./DistanceSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./DistanceSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./EnergySensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./EnergySensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Entity\": [\n\t\t8774,\n\t\t9\n\t],\n\t\"./Entity.vue\": [\n\t\t8774,\n\t\t9\n\t],\n\t\"./EntityIcon\": [\n\t\t5017,\n\t\t9\n\t],\n\t\"./EntityIcon.vue\": [\n\t\t5017,\n\t\t9\n\t],\n\t\"./EntityMixin\": [\n\t\t7909,\n\t\t9\n\t],\n\t\"./EntityMixin.vue\": [\n\t\t7909,\n\t\t9\n\t],\n\t\"./EnumSensor\": [\n\t\t8625,\n\t\t9,\n\t\t9705,\n\t\t8625\n\t],\n\t\"./EnumSensor.vue\": [\n\t\t8625,\n\t\t9,\n\t\t9705,\n\t\t8625\n\t],\n\t\"./EnumSwitch\": [\n\t\t2306,\n\t\t9,\n\t\t2306\n\t],\n\t\"./EnumSwitch.vue\": [\n\t\t2306,\n\t\t9,\n\t\t2306\n\t],\n\t\"./HeartRateSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./HeartRateSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./HumiditySensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./HumiditySensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./IlluminanceSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./IlluminanceSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Index\": [\n\t\t8982,\n\t\t9\n\t],\n\t\"./Index.vue\": [\n\t\t8982,\n\t\t9\n\t],\n\t\"./Light\": [\n\t\t2315,\n\t\t9,\n\t\t7782,\n\t\t3490,\n\t\t2315\n\t],\n\t\"./Light.vue\": [\n\t\t2315,\n\t\t9,\n\t\t7782,\n\t\t3490,\n\t\t2315\n\t],\n\t\"./LinkQuality\": [\n\t\t8126,\n\t\t9,\n\t\t8126\n\t],\n\t\"./LinkQuality.vue\": [\n\t\t8126,\n\t\t9,\n\t\t8126\n\t],\n\t\"./Magnetometer\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Magnetometer.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./MemoryStats\": [\n\t\t1897,\n\t\t9,\n\t\t1897\n\t],\n\t\"./MemoryStats.vue\": [\n\t\t1897,\n\t\t9,\n\t\t1897\n\t],\n\t\"./Modal\": [\n\t\t9429,\n\t\t9\n\t],\n\t\"./Modal.vue\": [\n\t\t9429,\n\t\t9\n\t],\n\t\"./MotionSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./MotionSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Muted\": [\n\t\t3303,\n\t\t9,\n\t\t3490,\n\t\t3303\n\t],\n\t\"./Muted.vue\": [\n\t\t3303,\n\t\t9,\n\t\t3490,\n\t\t3303\n\t],\n\t\"./NetworkInterface\": [\n\t\t6164,\n\t\t9,\n\t\t6164\n\t],\n\t\"./NetworkInterface.vue\": [\n\t\t6164,\n\t\t9,\n\t\t6164\n\t],\n\t\"./NumericSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./NumericSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./PercentSensor\": [\n\t\t703,\n\t\t9,\n\t\t703\n\t],\n\t\"./PercentSensor.vue\": [\n\t\t703,\n\t\t9,\n\t\t703\n\t],\n\t\"./PowerSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./PowerSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./PresenceSensor\": [\n\t\t7549,\n\t\t9,\n\t\t3490,\n\t\t7549\n\t],\n\t\"./PresenceSensor.vue\": [\n\t\t7549,\n\t\t9,\n\t\t3490,\n\t\t7549\n\t],\n\t\"./PressureSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./PressureSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./RawSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./RawSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Selector\": [\n\t\t6518,\n\t\t9\n\t],\n\t\"./Selector.vue\": [\n\t\t6518,\n\t\t9\n\t],\n\t\"./Sensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Sensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./StepsSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./StepsSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./SwapStats\": [\n\t\t1897,\n\t\t9,\n\t\t1897\n\t],\n\t\"./SwapStats.vue\": [\n\t\t1897,\n\t\t9,\n\t\t1897\n\t],\n\t\"./Switch\": [\n\t\t3303,\n\t\t9,\n\t\t3490,\n\t\t3303\n\t],\n\t\"./Switch.vue\": [\n\t\t3303,\n\t\t9,\n\t\t3490,\n\t\t3303\n\t],\n\t\"./SystemBattery\": [\n\t\t9651,\n\t\t9,\n\t\t9651\n\t],\n\t\"./SystemBattery.vue\": [\n\t\t9651,\n\t\t9,\n\t\t9651\n\t],\n\t\"./SystemFan\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./SystemFan.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./SystemTemperature\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./SystemTemperature.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./TemperatureSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./TemperatureSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./ThreeAxisSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./ThreeAxisSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./TimeDuration\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./TimeDuration.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Variable\": [\n\t\t8358,\n\t\t9,\n\t\t8358\n\t],\n\t\"./Variable.vue\": [\n\t\t8358,\n\t\t9,\n\t\t8358\n\t],\n\t\"./VariableModal\": [\n\t\t1910,\n\t\t9\n\t],\n\t\"./VariableModal.vue\": [\n\t\t1910,\n\t\t9\n\t],\n\t\"./VoltageSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./VoltageSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./Volume\": [\n\t\t359,\n\t\t9,\n\t\t7782,\n\t\t359\n\t],\n\t\"./Volume.vue\": [\n\t\t359,\n\t\t9,\n\t\t7782,\n\t\t359\n\t],\n\t\"./WeightSensor\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./WeightSensor.vue\": [\n\t\t5915,\n\t\t9,\n\t\t9705,\n\t\t5915\n\t],\n\t\"./common.scss\": [\n\t\t65,\n\t\t9,\n\t\t4981,\n\t\t65\n\t],\n\t\"./meta\": [\n\t\t7369,\n\t\t3\n\t],\n\t\"./meta.json\": [\n\t\t7369,\n\t\t3\n\t],\n\t\"./vars.scss\": [\n\t\t5207,\n\t\t9,\n\t\t4981,\n\t\t5207\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(2).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__.t(id, ids[1] | 16)\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 7243;\nmodule.exports = webpackAsyncContext;"],"names":["class","hasChildren","isCollapsed","value","name","length","justUpdated","component","parent","children","computedChildren","loading","ref","error","reachable","onClick","$emit","$event","toggleCollapsed","entity","key","id","childrenByParentId","level","mixins","EntityMixin","emits","data","computed","Object","values","this","filter","child","collapsed","instance","$refs","methods","valuesEqual","a","b","objectsEqual","parentId","allEntities","parent_id","is_configuration","reduce","obj","event","stopPropagation","target","classList","contains","onEntityUpdate","entityId","isChildUpdate","setJustUpdated","self","setTimeout","mounted","type","split","map","t","toUpperCase","slice","join","$watch","newValue","oldValue","bus","__exports__","render","colorFill","style","colorFillStyle","computedIconNormalized","components","Icon","props","Boolean","default","required","icon","hasColorFill","modalVisible","computedIcon","meta","keys","color","entityType","charAt","Utils","Number","s","entityGroups","selector","title","text","refresh","variableModalVisible","modalEntityId","entities","visible","configValuesByParentId","onEntityModal","displayGroups","group","grouping","entitiesMeta","typesByCategory","pluginIcons","url","imgUrl","onEntityInput","errorEntities","loadingEntities","Dropdown","DropdownItem","Entity","EntityModal","Loading","NoItems","Selector","VariableModal","entityScanTimeout","entityTimeouts","selectedEntities","icons","entityTypes","groupEntities","entries","name_plural","entry","e","sort","localeCompare","attr","_shouldSkipLoading","hasReadableChildren","is_write_only","is_query_disabled","async","args","plugins","plugin","clearTimeout","console","warn","request","name_override","category","clearEntityTimeouts","state","onEntityDelete","subscribe","sync","unmounted","unsubscribe","href","external_id","onDelete","editName","onRename","disabled","editIcon","onIconEdit","onIconColorEdit","description","external_url","image_url","src","created_at","updated_at","deleteConfirmDiag","show","childrenCollapsed","prettify","extraInfoCollapsed","specialFields","indexOf","computedConfig","configCollapsed","onConfirm","confirmText","close","cancelText","Modal","String","modal","hide","proxy","submit","input","focus","EntityIcon","EditButton","NameEditor","ConfirmDialog","configValues","newName","req","newIcon","startsWith","stringify","Array","isArray","JSON","visibleGroupings","g","prettifyGroupingName","onGroupingChanged","isGroupFilterActive","sortedGroups","iconForGroup","selectedGroups","toggleGroup","placeholder","searchTerm","typesMeta","toLowerCase","toString","endsWith","synchronizeSelectedEntities","updateSearchTerm","refreshGroupFilter","reset","for","onOpen","setValue","varName","varValue","trim","notifyWarning","clearValue","$nextTick","webpackAsyncContext","__webpack_require__","o","Promise","resolve","then","Error","code","ids","all","module","exports"],"sourceRoot":""}