{"version":3,"file":"bundle.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,aAAcA,QAAQ,iBAAkBA,QAAQ,aAAcA,QAAQ,UAC9E,mBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,CAAC,YAAa,gBAAiB,YAAa,SAAUJ,GACnC,iBAAZC,QACdA,QAAQ,0BAA4BD,EAAQG,QAAQ,aAAcA,QAAQ,iBAAkBA,QAAQ,aAAcA,QAAQ,UAE1HJ,EAAK,0BAA4BC,EAAQD,EAAiB,WAAY,SAAGA,EAAoB,cAAGA,EAAiB,WAAa,UAAGA,EAAiB,WAAS,MAC5J,CATD,CASGO,MAAM,CAACC,EAAuCC,EAAoDC,EAAgDC,I,8DCCrJR,EAAOD,QAAU,SAASU,EAAEC,GACxB,IAAIC,EAAU,GAEd,OADAC,EAAaH,EAAEC,EAAEC,EAAQ,IAClBA,CACX,EAEA,IAAIC,EAAe,SAASH,EAAEC,EAAEG,EAAIC,GA+FhC,IAA2BC,EA9F3B,KAAGN,IAAMC,GAAKM,OAAOC,MAAMR,IAAIO,OAAOC,MAAMP,IAErC,GAAGD,aAAaS,OAASR,aAAaQ,MAAO,CAEhD,IADA,IAAIC,EAAGV,EAAEW,OAAO,EAAEC,EAAGX,EAAEU,OAAO,EACxBD,GAAM,GAAKE,GAAM,GACnB,GAAIC,EAAMb,EAAEU,GAAKT,EAAEW,IAmDfF,IAAME,QAnDe,CAIrB,IAHA,IAAIE,EAAUC,EAAiBF,EAAOb,EAAEC,EAAGS,EAAGE,EAAI,EAAG,GAEjDI,EAAQN,EAAGO,EAAQL,EACjBI,EAAUF,EAAQd,GAAKiB,EAAUH,EAAQb,GAC3C,GAAGiB,EAAQlB,EAAEgB,GAAUf,EAAEgB,IAErBd,EAAaH,EAAEgB,GAASf,EAAEgB,GAASb,EAAKC,EAAKc,OAAO,CAACH,KACrDA,IAAWC,QACR,CACH,IAAIG,EAAeL,EAAiBG,EAASlB,EAAEC,EAAGe,EAAQC,EAASH,EAAQd,EAAE,EAAGc,EAAQb,EAAE,GAEtFoB,EAAeL,EAAQI,EAAapB,EACpCsB,EAAeL,EAAQG,EAAanB,EAEpB,IAAjBoB,GAAuC,IAAjBC,EACrBC,EAAInB,EAAKC,EAAKc,OAAOC,EAAapB,EAAE,GAAIC,EAAEmB,EAAanB,EAAE,IAClC,IAAjBoB,GAAuC,IAAjBC,GAE5BE,EAAIpB,EAAKC,EAAKe,EAAapB,EAAE,EAAGC,EAAEwB,MAAML,EAAanB,EAAE,EAAGgB,EAAQ,IAClEM,EAAInB,EAAKC,EAAKc,OAAOC,EAAapB,EAAE,GAAIC,EAAEmB,EAAanB,EAAE,KAClC,IAAjBoB,GAAuC,IAAjBC,GAE5BI,EAAGtB,EAAKC,EAAMe,EAAapB,EAAE,EAAG,EAAGA,GACnCuB,EAAInB,EAAKC,EAAKc,OAAOC,EAAapB,EAAE,GAAIC,EAAEmB,EAAanB,EAAE,KAClC,IAAjBoB,GAAuC,IAAjBC,GAC5BC,EAAInB,EAAKC,EAAKc,OAAOC,EAAapB,EAAE,GAAIC,EAAEmB,EAAanB,EAAE,IACzDsB,EAAInB,EAAKC,EAAKc,OAAOC,EAAapB,EAAE,GAAIC,EAAEmB,EAAanB,EAAE,MAEtDoB,EAAe,GACdK,EAAGtB,EAAKC,EAAMe,EAAapB,EAAE,EAAGqB,EAAcrB,GAE/CsB,EAAe,GACdE,EAAIpB,EAAKC,EAAKe,EAAapB,EAAE,EAAGC,EAAEwB,MAAML,EAAanB,EAAE,EAAGgB,EAAQ,KAI1ED,EAAUI,EAAapB,EACvBiB,EAAUG,EAAanB,CAC3B,CAGDe,EAAUF,EAAQd,EACjB0B,EAAGtB,EAAKC,EAAMW,EAASA,EAAQF,EAAQd,EAAGA,GACpCiB,EAAUH,EAAQb,GACxBuB,EAAIpB,EAAKC,EAAMW,EAAQ,EAAGf,EAAEwB,MAAMX,EAAQb,EAAE,EAAGgB,EAAQ,IAG3DP,EAAKI,EAAQd,EACbY,EAAKE,EAAQb,CACjB,CAKDS,GAAM,EACLgB,EAAGtB,EAAKC,EAAM,EAAGK,EAAG,EAAGV,GACjBY,GAAM,GACZY,EAAIpB,EAAKC,EAAK,EAAGJ,EAAEwB,MAAM,EAAGb,EAAG,GAGvC,MAAO,GAAGZ,aAAa2B,MAAQ1B,aAAa0B,KACrC3B,EAAE4B,YAAc3B,EAAE2B,WACjBL,EAAInB,EAAKC,EAAMJ,QAEhB,GAAGD,aAAa6B,QAAU5B,aAAa4B,OAAQ,CAClD,IAAIC,EAASC,EAAMC,EAAWH,OAAOI,KAAKjC,IAAKgC,EAAWH,OAAOI,KAAKhC,KACtE,IAAI,IAAIiC,KAAOJ,EAAQ,CACnB,IAAIK,EAAO9B,EAAKc,OAAO,CAACe,IACrBA,KAAOlC,KAAOkC,KAAOjC,IAoBLK,EAnBJ6B,EAAL/B,EAoBHgC,KAAK,CACZC,KAAK,QACLF,KAAM7B,KApBFH,EAAaH,EAAEkC,GAAKjC,EAAEiC,GAAK9B,EAAK+B,EAExC,CACJ,MACIZ,EAAInB,EAAKC,EAAMJ,GAInB,SAASsB,EAAIe,EAAYhC,EAAUiC,GAC/BD,EAAWF,KAAK,CACZC,KAAK,MACLF,KAAM7B,EACNkC,IAAKD,GAEb,CAWA,SAASb,EAAGY,EAAYhC,EAAUmC,EAAOC,EAAO1C,GAC5C,IAAI2C,EAAaF,EAAQA,EAAQC,EAAQ,EAAI,EAC7CJ,EAAWF,KAAK,CACZC,KAAK,KACLF,KAAM7B,EACNmC,MAAOE,EACPC,IAAKF,EACLG,KAAM7C,EAAEyB,MAAMkB,EAAYA,EAAWD,IAE7C,CAGA,SAASlB,EAAIc,EAAYhC,EAAUmC,EAAOK,GACtCR,EAAWF,KAAK,CACZC,KAAK,MACLF,KAAM7B,EACNmC,MAAOA,EACPI,KAAMC,GAEd,CACJ,EAcA,SAAS/B,EAAiBgC,EAAW/C,EAAEC,EAAG+C,EAAiBC,EAAkBC,EAASC,GAIlF,IAHA,IAAIC,EAAWJ,EAAiBE,EAC5BG,EAAWJ,EAAiBE,EAC5BG,EAAOC,KAAKC,IAAIJ,EAAUC,GACtBI,EAAE,EAAGA,GAAGH,EAAMG,IAAK,CACvB,IAAIC,EAAU1D,EAAEgD,EAAiBS,GAC7BE,EAAU1D,EAAEgD,EAAiBQ,GAEjC,GAAGA,GAAGJ,GAAYI,GAAGL,GAAYL,EAAUW,EAASC,GAChD,MAAO,CAAC3D,EAAEgD,EAAiBS,EAAGxD,EAAEgD,EAAiBQ,GAGrD,IAAI,IAAIG,EAAE,EAAGA,EAAEH,EAAGG,IAAK,CACnB,IAAIC,EAAQ7D,EAAEgD,EAAiBY,GAC3BE,EAAQ7D,EAAEgD,EAAiBW,GAE/B,GAAGH,GAAGJ,GAAYN,EAAUc,EAAOF,GAC/B,MAAO,CAAC3D,EAAEgD,EAAiBY,EAAG3D,EAAEgD,EAAiBQ,GAC9C,GAAGA,GAAGL,GAAYL,EAAUW,EAASI,GACxC,MAAO,CAAC9D,EAAEgD,EAAiBS,EAAGxD,EAAEgD,EAAiBW,EAEzD,CACJ,CAEA,MAAO,CAAC5D,EAAGkD,EAAQ,EAAGjD,EAAGkD,EAAQ,EACrC,CAMA,SAASjC,EAAQlB,EAAEC,GACf,GAAGD,aAAaS,MAAO,CACnB,KAAKR,aAAaQ,OACd,OAAO,EAIX,IAFA,IAAIsD,EAAa/D,EAAEW,OAAO,GACtBqD,EAAWT,KAAKU,IAAIjE,EAAEW,OAAOV,EAAEU,QAC3B8C,EAAE,EAAGA,EAAEzD,EAAEW,OAAQ8C,IACrB,GAAG5C,EAAMb,EAAEyD,GAAGxD,EAAEwD,IAAK,CACjB,GAAGO,GAAY,GAAKA,EAAWD,GAAcC,IAAahE,EAAEW,OACxD,OAAO,EAGXqD,GACJ,CAGJ,OAAO,CAEX,CAAO,GAAGhE,aAAa6B,OAAQ,CAC3B,KAAK5B,aAAa4B,QACd,OAAO,EAEX,IAAIC,EAASC,EAAMC,EAAWH,OAAOI,KAAKjC,IAAKgC,EAAWH,OAAOI,KAAKhC,KAClEiE,EAAYrC,OAAOI,KAAKH,GAAQnB,OAChCoD,EAAaG,EAAY,GACzBF,EAAW,EACf,IAAI,IAAI9B,KAAOJ,EAAQ,CAInB,IAAIjB,EAHOb,EAAEkC,GACFjC,EAAEiC,IAES,CAClB,GAAG8B,GAAY,GAAKA,EAAWD,GAAcC,EAAS,IAAME,EACxD,OAAO,EAGXF,GACJ,CACJ,CAEA,OAAO,CAEX,CACI,OAAOhE,IAAIC,GAAKM,OAAOC,MAAMR,IAAMO,OAAOC,MAAMP,EAExD,CAGA,SAASY,EAAMb,EAAEC,GACb,GAAGD,aAAaS,MAAO,CACnB,KAAKR,aAAaQ,OACd,OAAO,EACX,GAAGT,EAAEW,SAAWV,EAAEU,OACd,OAAO,EAEP,IAAI,IAAI8C,EAAE,EAAGA,EAAEzD,EAAEW,OAAQ8C,IACrB,IAAI5C,EAAMb,EAAEyD,GAAGxD,EAAEwD,IACb,OAAO,EAIf,OAAO,CAEf,CAAO,GAAGzD,aAAa6B,OAAQ,CAC3B,KAAK5B,aAAa4B,QACd,OAAO,EAEX,IAAIsC,EAAQtC,OAAOI,KAAKjC,GACpBoE,EAAQvC,OAAOI,KAAKhC,GAExB,GAAGkE,EAAMxD,SAAWyD,EAAMzD,OACtB,OAAO,EAEP,IAAQ8C,EAAE,EAAGA,EAAEU,EAAMxD,OAAQ8C,IAAK,CAC9B,IAAIvB,EAAMiC,EAAMV,GAIhB,IAAI5C,EAHOb,EAAEkC,GACFjC,EAAEiC,IAGT,OAAO,CAEf,CAEA,OAAO,CAEf,CACI,OAAOlC,IAAIC,GAAKM,OAAOC,MAAMR,IAAMO,OAAOC,MAAMP,EAExD,CAIA,SAAS+B,EAAWqC,GAChB,IAAIC,EAAS,CAAC,EAId,OAHAD,EAAME,SAAQ,SAASC,GACnBF,EAAOE,IAAK,CAChB,IACOF,CACX,CAIA,SAASvC,EAAM0C,EAAMC,GACjB,IAAI,IAAIxC,KAAOwC,EACXD,EAAKvC,GAAOwC,EAAKxC,GAGrB,OAAOuC,CACX,CAvJAlF,EAAOD,QAAQ4B,QAAUA,EACzB3B,EAAOD,QAAQuB,MAAQA,C,+BC9IvBtB,EAAOD,QAAUO,C,2BCAjBN,EAAOD,QAAUQ,C,YCAjBP,EAAOD,QAAUS,C,kBCAjBR,EAAOD,QAAUM,C,GCCb+E,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaxF,QAGrB,IAAIC,EAASoF,EAAyBE,GAAY,CAGjDvF,QAAS,CAAC,GAOX,OAHA0F,EAAoBH,GAAUtF,EAAQA,EAAOD,QAASsF,GAG/CrF,EAAOD,OACf,CCrBAsF,EAAoBK,EAAI,CAAC3F,EAAS4F,KACjC,IAAI,IAAIhD,KAAOgD,EACXN,EAAoBO,EAAED,EAAYhD,KAAS0C,EAAoBO,EAAE7F,EAAS4C,IAC5EL,OAAOuD,eAAe9F,EAAS4C,EAAK,CAAEmD,YAAY,EAAMC,IAAKJ,EAAWhD,IAE1E,ECND0C,EAAoBW,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOC,MAAQ,IAAIC,SAAS,cAAb,EAChB,CAAE,MAAOC,GACR,GAAsB,iBAAXC,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBhB,EAAoBO,EAAI,CAACU,EAAKC,IAAUjE,OAAOkE,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFlB,EAAoBsB,EAAK5G,IACH,oBAAX6G,QAA0BA,OAAOC,aAC1CvE,OAAOuD,eAAe9F,EAAS6G,OAAOC,YAAa,CAAE7D,MAAO,WAE7DV,OAAOuD,eAAe9F,EAAS,aAAc,CAAEiD,OAAO,GAAO,E,iLCIvD,MAAM8D,EAA0B,oBAC1BC,EAA2B,qBAiP3B,GAFgC,iBAAT3G,OAAqBA,KAAKA,KAASA,MAET,oBAAXiG,OAAyB,EAAAL,EAASK,QC1P9E,IAAUW,EAAA,CAAAA,IACN,SAASC,EAAYC,GACxBC,SAASC,OAAS,GAAGF,wBACzB,CAEO,SAASG,EAAUH,EAAclE,EAAesE,GACnD,IAAIC,EAAU,GACd,GAAID,EAAY,CAKZC,EAAU,cAHgB,iBAAfD,EACD,IAAIlF,KAAKA,KAAKoF,MAAqB,GAAbF,EAAkB,GAAK,GAAK,KAClDA,GAC4BG,eAC1C,CACAN,SAASC,OAAS,GAAGF,KAAQlE,GAAS,KAAKuE,UAC/C,CAEO,SAASG,EAAUR,GACtB,MAAMS,EAAS,GAAGT,KACZU,EAAKT,SAASC,OAAOS,MAAM,KAEjC,QAASC,EAAI,EAAGA,EAAIF,EAAGxG,OAAQ0G,IAAK,CAChC,IAAIC,EAAIH,EAAGE,GACX,KAAuB,MAAhBC,EAAEC,OAAO,IACZD,EAAIA,EAAEE,UAAU,EAAGF,EAAE3G,QAEzB,GAA0B,IAAtB2G,EAAEG,QAAQP,GACV,OAAOI,EAAEE,UAAUN,EAAOvG,OAAQ2G,EAAE3G,OAE5C,CAEA,OAAO,IACX,CAEO,SAAS+G,EAAQxF,EAAayF,EAA6B,gBAC9D,IACI,GAAwC,OAApC/B,OAAO+B,GAAYD,QAAQxF,GAC3B,OAAO0D,OAAO+B,GAAYD,QAAQxF,EAE1C,CAAE,MAAOyD,GAGL,OAFAiC,QAAQC,MAAMlC,GAEPsB,EAAU/E,EACrB,CACJ,CA3COqE,EAASC,YAAAA,EAITD,EAASK,UAAAA,EAYTL,EAASU,UAAAA,EAiBTV,EAASmB,QAAAA,EAYTnB,EAASuB,QAAT,SACH5F,EACAK,EACAoF,EAA6B,gBAE7B,IACI/B,OAAO+B,GAAYG,QAAQ5F,EAAKK,EACpC,CAAE,MAAOoD,GACLiC,QAAQC,MAAMlC,GACdiB,EAAU1E,EAAKK,EAAO,GAC1B,CACJ,EAEOgE,EAASwB,WAAT,SAAoB7F,EAAayF,EAA6B,gBACjE,IACI/B,OAAO+B,GAAYI,WAAW7F,EAClC,CAAE,MAAOyD,GACLiC,QAAQC,MAAMlC,GACda,EAAYtE,EAChB,CACJ,EAEOqE,EAASyB,eAAT,SAAwB9F,EAAa+F,GACxC,IAAIC,EAAeR,EAAQxF,GAW3B,OAAOiG,aATmB,KACtB,MAAMC,EAAcV,EAAQxF,GAExBgG,IAAiBE,IACjBF,EAAeE,EACfH,EAASG,GACb,GAGkC,IAC1C,CAbgB,EApEH,CAAA7B,IAAAA,EAAA,K,mDCGV,MAEM8B,EAA4B,CACrCC,QAAS,IACTC,YAAa,KACbC,iBAAkB,M,8BCTf,MAAMC,EAAcC,IACNhC,SAASiC,iBAAiBD,GAElCnE,SAAQqE,IACbA,EAAQC,eAAeD,EAAQE,WAAW,GAC5C,EAGOC,EAA4BL,IACrChC,SAASiC,iBAAiBD,GAAUnE,SAAQyE,GAAQA,EAAKC,UAAS,E,iBC8E/D,SAASC,EACZC,EACAC,EACAC,GAEIF,IA/BD,SAA8BC,EAAeE,GAChD,MAAMC,EAAY1H,OAAOiB,OAAOsG,GAAO,GACnCG,GAAaD,EAAWE,aACxBF,EAAWE,YAAYD,EAE/B,CA2BQE,CAAqBL,EAAOD,GAzB7B,SAAyBE,EAAuBC,GAC/CD,GAAUC,EAAWI,OACrBJ,EAAWI,MAAML,EAEzB,CAsBQM,CAAgBN,EAAQF,GAEhC,C,+PCxFO,MA8OM,EAFgC,iBAATxJ,MAAqBA,KAAKA,OAASA,MAGjDA,MACC,iBAAX,EAAA4F,GAAuB,EAAAA,EAAOqE,SAAW,EAAArE,GAAU,EAAAA,GAC3DK,OCxPG,IAAU,GAAAW,IACN,SAASC,EAAYC,GACxBC,SAASC,OAAS,GAAGF,wBACzB,CAEO,SAASG,EAAUH,EAAclE,EAAesE,GACnD,IAAIC,EAAU,GACd,GAAID,EAAY,CAKZC,EAAU,cAHgB,iBAAfD,EACD,IAAIlF,KAAKA,KAAKoF,MAAqB,GAAbF,EAAkB,GAAK,GAAK,KAClDA,GAC4BG,eAC1C,CACAN,SAASC,OAAS,GAAGF,KAAQlE,GAAS,KAAKuE,UAC/C,CAEO,SAASG,EAAUR,GACtB,MAAMS,EAAS,GAAGT,KACZU,EAAKT,SAASC,OAAOS,MAAM,KAEjC,QAASC,EAAI,EAAGA,EAAIF,EAAGxG,OAAQ0G,IAAK,CAChC,IAAIC,EAAIH,EAAGE,GACX,KAAuB,MAAhBC,EAAEC,OAAO,IACZD,EAAIA,EAAEE,UAAU,EAAGF,EAAE3G,QAEzB,GAA0B,IAAtB2G,EAAEG,QAAQP,GACV,OAAOI,EAAEE,UAAUN,EAAOvG,OAAQ2G,EAAE3G,OAE5C,CAEA,OAAO,IACX,CAEO,SAAS+G,EAAQxF,EAAayF,EAA6B,gBAC9D,IACI,GAAwC,OAApC/B,OAAO+B,GAAYD,QAAQxF,GAC3B,OAAO0D,OAAO+B,GAAYD,QAAQxF,EAE1C,CAAE,MAAOyD,GAGL,OAFAiC,QAAQC,MAAMlC,GAEPsB,EAAU/E,EACrB,CACJ,CA3COqE,EAASC,YAAAA,EAITD,EAASK,UAAAA,EAYTL,EAASU,UAAAA,EAiBTV,EAASmB,QAAAA,EAYTnB,EAASuB,QAAT,SACH5F,EACAK,EACAoF,EAA6B,gBAE7B,IACI/B,OAAO+B,GAAYG,QAAQ5F,EAAKK,EACpC,CAAE,MAAOoD,GACLiC,QAAQC,MAAMlC,GACdiB,EAAU1E,EAAKK,EAAO,GAC1B,CACJ,EAEOgE,EAASwB,WAAT,SAAoB7F,EAAayF,EAA6B,gBACjE,IACI/B,OAAO+B,GAAYI,WAAW7F,EAClC,CAAE,MAAOyD,GACLiC,QAAQC,MAAMlC,GACda,EAAYtE,EAChB,CACJ,EAEOqE,EAASyB,eAAT,SAAwB9F,EAAa+F,GACxC,IAAIC,EAAeR,EAAQxF,GAW3B,OAAOiG,aATmB,KACtB,MAAMC,EAAcV,EAAQxF,GAExBgG,IAAiBE,IACjBF,EAAeE,EACfH,EAASG,GACb,GAGkC,IAC1C,CAbgB,EApEH,KAAc,OCC/B,MAMa,EAAoB,CAACyB,EAAqBC,EAAmB,MACtE,OAP2BC,EAGF,CAACF,GAC1B,cAAiBA,IAAgB,kBAAqBA,GAGhC,CAAqBA,GAN3CE,GAAeA,EAAYC,SAMiCF,EAPlC,IAACC,CAOyC,ECKjE,MAAME,UAAsB,YAG/BC,YAAYC,GACRC,MAAMD,GACN1E,KAAK2D,MAAQ,CAAEvB,WAAO,GACtBpC,KAAK4E,OAAS,IAAI,EAAAC,UAAU,CACxBT,YAAaM,EAAMN,YACnBU,KAAM,QAAa,GACnBC,YAAa,OAAY,GACzBC,eAAgB,EAAkBN,EAAMN,cAAgB,IAEhE,CAEAa,gCAAgC7C,GAC5B,MAAO,CAAEA,QACb,CAEO8C,kBAAkB9C,GACrBpC,KAAK4E,OAAOxC,MAAM,CACd+C,YAAa,EAAAC,YAAA,OACbC,QAAS,iCAAiCrF,KAAK0E,MAAM1D,OACrDsE,QAAS,CACLlD,QACAmD,QAAS,CAAEC,gBAAiB,qBAGxC,CAEOC,SACH,OAAOzF,KAAK2D,MAAMvB,MAAQ,KAAOpC,KAAK0E,MAAMgB,QAChD,ECtBG,MAAeC,EAAf,cAQH,KAAQC,eAAiB,IACzB,KAAQC,aAAkC,IAAIC,IAAI,IAElD,KAAQC,iBAAmB,KACvB/F,KAAKgG,WAAalI,KAAKC,IAAIkD,SAASgF,gBAAgBC,aAAc/F,OAAOgG,YAAY,EAGzF,KAAQC,aAAe,CAAC7C,EAAe8C,EAAerG,KAAK4F,kBACvD,MAAM,OAAEU,EAAM,IAAEC,GAAQhD,EAAKiD,wBACxBxG,KAAKgG,YACNhG,KAAK+F,mBAGT,MAIMU,EAJ2BH,EAAStG,KAAKgG,WAAaK,GAEjCC,GAAUD,EAK/BK,EAAeH,EAAMF,EAAe,GAAKE,EAAMvG,KAAKgG,WAGpDW,EAAyBL,EAAS,GAAKC,EAAMvG,KAAKgG,WAExD,OAAOS,GAAmBC,GAAgBC,CAAsB,EAGpE,KAAQC,wBAA2BrD,GACRvD,KAAK6G,iBAAiBtD,EAAM,uBACnD,UAEJ,KAAQuD,gBAAmBvD,GACvBvD,KAAK6G,iBAAiBtD,EAAM,uBAAyB,KAEzD,KAAQwD,iBAAoBxD,IACxB,MAAMyD,EAASzD,EAAK0D,WAEpB,IACI,MAAMrD,EAAS5D,KAAK8G,gBAAgBvD,IAE9B,qBAAE2D,GAA4DC,KAAKC,MAAMxD,GAE/E,SAAKoD,IAEIhH,KAAKoG,aAAa7C,EAAM2D,KACxBlH,KAAKoG,aAAaY,EAAQE,MAG/BlH,KAAK6F,aAAa9J,IAAI,CAAEwH,OAAMyD,SAAQK,WAAY,UAE3C,EAIf,CAAE,MAAOjF,GAGL,OAFAD,QAAQC,MAAMA,IAEP,CACX,GAGJ,KAAQkF,eAAkB/D,GACtB,IAAKA,EAAKgE,WAAa,IAAKC,MAAMC,GAAcA,EAAUC,SAAS,cAEvE,KAAQC,uBAAyB,CAACpE,EAAeqE,KAC7C,IAAIC,EAAcD,EAAmBrE,EAAKuE,mBAAqBvE,EAAKwE,uBAChEC,GAAa,EAEjB,KAAOH,GACHG,EAAahI,KAAKsH,eAAeO,GACjCA,EAAcD,EACVC,EAAYC,mBACZD,EAAYE,uBAGpB,OAAOC,CAAU,EAGrB,KAAQC,iBAAoB1E,IACxB,MAAM2E,EAAiBC,QAAQ5E,EAAK6E,aAC9BC,EAAqBF,QAAQ5E,EAAK+E,iBAExC,GAAIJ,GAAkBG,EAAoB,CACtC,MAAME,EAA4BvI,KAAK2H,uBAAuBpE,GAAM,GAEpE,GAAI8E,IAAuBE,GAA6BL,GAAiB,CAGrE,OAFsClI,KAAK2H,uBAAuBpE,GAAM,EAG5E,CAEA,OAAOgF,CACX,CAEA,OAAO,CAAK,EAGhB,KAAOC,iBAAoBjF,GAGA,aAFuBvD,KAAK4G,wBAAwBrD,IAGhEvD,KAAK+G,iBAAiBxD,GAMrC,KAAOkF,iBAAoBC,IAuDvB1I,KAAK2I,qBAAuB,IAAIC,sBAhDH,EAAEC,MAC3B,MAAMC,EAASD,EAAMC,OAEfC,EAAgB/I,KAAKgJ,kBAAkBF,GACvCG,EAAkBF,EAClBD,EACA9I,KAAKkJ,wBAAwBJ,GAAQ,GACrC7B,EAAc8B,EAAgBD,EAAO7B,WAAa6B,EAElDlF,EAAS5D,KAAK8G,gBAAgBmC,GAEpC,IACI,MAAM,qBAAE/B,GAEJC,KAAKC,MAAMxD,IAGXiF,EAAMM,gBACLF,IACIjJ,KAAKoG,aAAa6C,EAAiB/B,IAChClH,KAAKoG,aAAaa,EAAYC,OAEtClH,KAAK6F,aAAa/G,SAAQ,CAACsK,EAAOC,EAAGvN,MAC7BgN,EAAOQ,WAAWF,EAAMpC,SAAW8B,EAAOQ,WAAWF,EAAM7F,QAC3DzH,EAAIyN,OAAOH,EACf,IAGJpJ,KAAK2I,qBAAqBa,UAAUV,GAEL,IAA3B9I,KAAK6F,aAAa4D,OAClBzJ,KAAK2I,qBAAqBe,aAG1B1J,KAAK2I,qBAAuB,MAEhCD,EAAcO,GAEtB,CAAE,MAAO7G,GACLD,QAAQC,MAAMA,GACdpC,KAAK4E,OAAOxC,MAAM,CACdiD,QAASjD,EAAMiD,QACfF,YAAa,EAAAC,YAAA,OACbE,QAASlD,GAEjB,IAnDY,CACZzI,KAAM,KACNgQ,WAAY,MACZC,UAAW,IAoDf5J,KAAK6F,aAAa/G,SAAS+K,IACvB,MAAM,KAAEtG,EAAI,OAAEyD,GAAW6C,EAEmB,IAAxCtG,EAAKiD,wBAAwBsD,SAC5BvG,EAAqBwG,MAAMC,UAAY,OAG5C,MAAMC,EAAejK,KAAKiI,iBAAiB1E,GAE3CsG,EAAYxC,WAAa4C,EAAe,SAAwB,OAEhEjK,KAAK2I,qBAAqBuB,QAAQD,EAAejD,EAASzD,EAAK,GACjE,CACN,E,wmBC7KJ,MAAQvC,KAAMoD,EAAW,QAAEG,GAAY,gIAEhC,MAAe4F,UAA0BxE,EAAzC,kCACH,KAAQyE,UAAsC,KAE9C,KAAmBxF,OAAoB,IAAI,EAAAC,UAAU,CACjDT,cACAY,eAAgBT,EAChBQ,YAAa,MACbD,KAAM,SAGV,KAAQuF,sBAAwB,CAAC9G,EAAmB+G,IAChDlO,OAAOI,KAAK8N,GACPC,QAAQC,GAA0C,cAA5BF,EAAaE,KACnCC,QAAO,CAACC,EAAeF,IAWb,OAAKE,GAAL,CAAoB,CAACF,GATP,YAAaG,GAC9B,MAAMC,EAAQ,IAAIC,YAAYL,EAAW,CACrCM,OAAQH,EACRI,YAAY,EACZC,SAAS,IAEbzH,EAAK0H,cAAcL,EACvB,KAGD,CAAC,GAEZ,KAAQM,UAAmBC,GAAiC,yBACxD,IAAIC,EAAqC,KASzC,OAPIpL,KAAK6G,iBAAiBsE,EAAU5H,KAAM,iBAClCvD,KAAKoK,kBACCpK,KAAKoK,UAAUiB,UACrBD,EAAUpL,KAAKoK,UAAUkB,uBAI1B,CAAEF,UACb,IAEA,KAAQG,gBAAkB,CACtBJ,EACAK,IAC2B,yBAC3B,MAAMlB,EAAea,EAAUvH,OAASuD,KAAKC,MAAM+D,EAAUvH,QAAU,CAAC,EAClEF,EAAiB8H,EAAYC,oBAE7B,QAAEL,SAAkBpL,KAAKkL,UAAUC,GACnCO,EAAU1L,KAAKqK,sBAAsBc,EAAU5H,KAAM+G,GAE3D,OAAO,OACAoB,GADA,CAEH9H,OAAQ,OAAKwH,GAAYd,GACzBqB,qBAAsBR,EAAU5H,KAAK0D,WACrCvD,kBAER,IAEA,KAAQkI,mBAAqB,CAEzBC,EACAnH,EACAoH,IAEO,gBAAoBtH,EAAe,CACtCJ,cACApD,KAAM8K,EACNpG,SAAU,gBAAoBmG,EAAqBnH,KAI3D,KAAQqH,iBAAmB,CACvBrI,EACAC,EACAC,KAEA,IACIH,EAA2BC,EAAgBC,EAAOC,EACtD,CAAE,MAAOxB,GACLpC,KAAK4E,OAAOxC,MAAM,CACd+C,YAAa,EAAAC,YAAA,OACbC,QAASjD,EAAMiD,QACfC,QAAS,CACLlD,QACAmD,QAAS,CACLvE,QAIhB,GAGJ,KAAQgL,WAAcrI,IAClB,IAAIsI,EACJ,IACQtI,IACAsI,EAAc9E,KAAKC,MAAMzD,GAEjC,CAAE,QACEsI,EAAcA,GAAe,CAAEvG,SAAU,GAC7C,CAEA,OAAOuG,CAAW,EAGtB,KAAQC,yBAAkCC,GAA6B,yBACnE,MAAuD,EAAAnM,KAAKgM,WAAWG,IAA/DzG,SAAU0G,EAAoB,IAAiB,EAAVzI,E,6JAAA,CAAU,EAAV,CAArC,aAER,UACU0I,QAAQC,IACVF,EAAkBG,KAAWT,GAAqB,yBAC9C,MAAMN,EAAc,8BAAiCM,SAC/CN,EAAYgB,eACtB,MAER,CAAE,MAAOpK,GACLpC,KAAK4E,OAAOxC,MAAM,CACd+C,YAAa,EAAAC,YAAA,OACbC,QAAS,2CAA2C+G,EAAkBK,KAAK,QAC3EnH,QAAS,CACLlD,UAGZ,CAEA,OAAOuB,CACX,IAEA,KAAU+I,oBAA6BnJ,GAA4B,yBAC/D,MAAMoJ,EAAa,KAAKpJ,GAElBiI,EAAc,8BAAiCjI,EAAKvC,YACpDwK,EAAYgB,gBAClB,MAAM1S,EAAS0R,EAAY1R,OAC3B,GAAIA,EAAQ,CACR,MAAM4K,QAAc1E,KAAKuL,gBAAgBoB,EAAYnB,GACrDmB,EAAWxB,UAAYnL,KAAK4L,mBAAmB9R,EAAQ4K,EAAOiI,EAAW3L,MAGzE,MAAM2C,QAAc3D,KAAKkM,yBAAyBS,EAAWhJ,OAC7D3D,KAAK+L,iBAAiBrH,EAAMhB,eAAgBC,EAAOgJ,EAAW/I,OAClE,CAEA,OAAOyI,QAAQO,QAAQD,EAC3B,IAEA,KAAUE,+BAAkCtJ,IAAA,CACxC4H,UAAW,KACXvH,OAAQ5D,KAAK6G,iBAAiBtD,EAAM,eACpCvC,KAAMhB,KAAK6G,iBAAiBtD,EAAM,mBAAqB,GACvDA,OACAI,MAAO3D,KAAK6G,iBAAiBtD,EAAM,gBAGvC,KAAOuJ,iBAAoB1C,IACvBpK,KAAKoK,UAAYA,CAAS,EAG9B,KAAO2C,iBAAmB,IACf/M,KAAKoK,SAChB,E,+MC5LJ,MAAM4C,EAAqB,mBAmBpB,MAAMC,UAAiC9C,EAAvC,kCACH,KAAQ+C,kBAAsC,IAAIpH,IAAI,IAEtD,KAAOqH,cAAgB,IAAMnN,KAAKoN,qBAElC,KAAUvG,iBAAmB,CAACtD,EAAmBvC,IAAiBuC,EAAK8J,aAAarM,GAEpF,KAAUgI,kBAAqBsE,GAC3BA,EAAQC,QAAQP,GAEpB,KAAU9D,wBAA2B3F,GACjCA,EAAKL,iBAAiB8J,GAE1B,KAAQQ,UAAajK,GAAeA,EAAKkK,WAAaC,KAAKC,aAE3D,KAAQC,oBAAsB,CAACxE,EAAyByE,KAC/C7N,KAAKkN,kBAAkBY,IAAID,KAC5BzE,EAAMrN,IAAI8R,GACV7N,KAAKkN,kBAAkBnR,IAAI8R,GAC/B,EAGJ,KAAQE,yBAA4BC,IAC5BhO,KAAKkN,kBAAkBY,IAAIE,IAC3BhO,KAAKkN,kBAAkB3D,OAAOyE,EAClC,EAGJ,KAAQC,sBAAwB,CAAC7E,EAAyB8E,KACtDA,EAAOC,WAAWrP,SAASyE,IACvB,GAAIvD,KAAKwN,UAAUjK,GAAO,EACDvD,KAAKgJ,kBAAkBzF,GACtC,CAACA,GACDvD,KAAKkJ,wBAAwB3F,IAEtBzE,SAASsP,GAAsBpO,KAAK4N,oBAAoBxE,EAAOgF,IAChF,KAIJF,EAAOG,aAAavP,QAAQkB,KAAK+N,0BAE1B3E,GAGX,KAAQkF,cAAuBC,GAA8B,yBACzD,MAAMJ,EAAaI,EAAQ9D,OAAOzK,KAAKiO,sBAAuB,IAAInI,WAE5D9F,KAAKwO,iBAAiB,IAAIL,GACpC,IAEA,KAAQM,uBAA0BC,GACE,oBAArBC,iBACA,IAAIA,iBAAiBD,GAGzB,KAaX,KAAQjJ,OAAS,EAAG0F,YAAW5H,OAAMqL,QAAO5N,UAE7B,IAAIqL,QADXuC,EACyB,CAAChC,EAASiC,KAC/B,IACI,UAAiB1D,EAAW5H,EAAMqJ,EACtC,CAAE,MAAOxK,GACLpC,KAAK4E,OAAOxC,MAAM,CACdiD,QAAS,6BAA6BrE,IACtCmE,YAAa,EAAAC,YAAA,OACbE,QAAS,CACLlD,WAGRyM,EAAOtL,EACX,GAGqB,CAACqJ,EAASiC,KAC/B,IACI,SAAgB1D,EAAW5H,EAAMqJ,EACrC,CAAE,MAAOxK,GACLpC,KAAK4E,OAAOxC,MAAM,CACdiD,QAAS,yBAAyBrE,IAClCmE,YAAa,EAAAC,YAAA,OACbE,QAAS,CACLlD,WAGRyM,EAAOtL,EACX,IAKZ,KAAQuL,WAAoBvL,GAAsB,yBAC9C,IACI,MAAMwL,EAAgB/O,KAAK6M,+BAA+BtJ,GACpDyL,QAAwChP,KAAK0M,oBAAoBqC,GAEvE,GAAIC,EAAa7D,UAAW,CACxB,MAAM,UAAEA,EAAS,MAAExH,EAAK,KAAE3C,GAASgO,EASnC,OAPsBhP,KAAKyF,OAAO,CAC9B0F,YACA5H,KAAMyL,EAAazL,KACnBqL,MAAOzG,QAAQxE,GACf3C,QAIR,CACJ,CAAE,MAAOoB,GACLpC,KAAK4E,OAAOxC,MAAM,CACd+C,YAAa,EAAAC,YAAA,OACbC,QAAS,8BACTC,QAAS,CACLlD,UAGZ,CAEA,OAAOiK,QAAQO,QAAQrJ,EAC3B,IAEA,KAAQiL,iBAA0BpF,GAAqB,yBACnD,MAIMvD,SAJuBwG,QAAQC,IACjClD,EAAMmD,IAAIvM,KAAK8O,cAGgBvE,OAAOpC,SAM1C,OAJItC,EAAa3K,OAAS,GACtB8E,KAAKiP,yBAAyBpJ,GAG3BwG,QAAQO,SACnB,IAEA,KAAQqC,yBAAkC7F,GAAqB,yBAC3D8F,YAAW,IAAY,+BACblP,KAAKwO,iBAAiBpF,EAChC,KAAG,IACP,IAEA,KAAQ+F,eAAkB5L,IACjBvD,KAAKkN,kBAAkBY,IAAIvK,KAC5BvD,KAAKkN,kBAAkBnR,IAAIwH,GAC3BvD,KAAKwO,iBAAiB,CAACjL,IAC3B,EAGJ,KAAQ6L,mBAAqB,IAAY,yBACrC,MAAMC,EAAoCpO,SAASiC,iBAAiB8J,GAE9DsC,EAAgB,IAAID,GAAU9E,OAAOvK,KAAKwI,kBAChDxI,KAAKkN,kBAAoB,IAAIpH,IAAIwJ,SAE3BtP,KAAKwO,iBAAiBc,GAExBA,EAAcpU,OAASmU,EAASnU,QAChC8E,KAAKyI,iBAAiBzI,KAAKmP,gBAG/BnP,KAAKuP,oBAAoB,IAAIF,GACjC,IAEA,KAAQE,oBAAuBnG,IAC3B,MAAMoG,EAAmBpG,EAAMqB,QAC3B,CAACgF,EAA+BlM,KAC5B,IACI,MAAM,UAAE4H,EAAS,OAAEvH,GAAWL,EAAKmM,QAE/BvE,IACAsE,EAAWtE,GAAasE,EAAWtE,IAAc,GAEjDsE,EAAWtE,GAAWxO,KAAK,CACvBgT,aAAc3P,KAAKkN,kBAAkBY,IAAIvK,GACzCK,OAAQuD,KAAKC,MAAMxD,GAAU,QAGzC,CAAE,MAAOxB,GACLpC,KAAK4E,OAAOxC,MAAM,CACd+C,YAAa,EAAAC,YAAA,OACbC,QAAS,wBACTC,QAAS,CACLlD,UAGZ,CAEA,OAAOqN,CAAU,GAErB,CAAC,IAGL,IAAAG,MAAK,EAAAC,OAAA,kBAA0BL,EAAiB,EAGpD,KAAQM,mBAAqB,KACzB9P,KAAKoN,qBAAuBpN,KAAKoP,qBAIjCpP,KAAK+P,mBAAmB,EAG5B,KAAQC,cAAgB,KACF7P,OAAO8P,WAAW,eAAerN,EAAYC,cAAc0K,SAEzEjK,EAAyB,IAAI1C,KAC7BoC,EAAW,IAAInC,OAEfyC,EAAyB,IAAIzC,KAC7BmC,EAAW,IAAIpC,KACnB,EAGJ,KAAOsP,KAAO,IAAY,yBACtB,MAAMC,EAAkB,CAAC,WAAY,eAAezI,SAASzG,SAASmP,YACtEpQ,KAAKgQ,gBAEDG,EACAnQ,KAAK8P,2BAEC,IAAIzD,SAAeO,GACrB3L,SAASoP,iBAAiB,oBAAoB,KAC1CrQ,KAAK8P,qBACLlD,GAAS,YAKf5M,KAAKmN,eACf,IAvLQ4C,oBACJ,MAAMO,EAA4BtQ,KAAKyO,uBAAuBzO,KAAKsO,eAC/DgC,GACAA,EAA0BpG,QAAQjJ,SAASsP,KAAM,CAC7CC,SAAS,EACTC,WAAW,GAGvB,E,6UCnFG,MAAMC,EAAN,cCTsB,IAACC,EAAWC,EDUrC,KAAQC,kBAA6C,CAAC,EACtD,KAAQC,4BAAwC,GAEhD,KAAQC,aAAmC,CAAC,EAC5C,KAAQC,sBAAkC,GAiB1C,KAAO1F,oBAAsB,CAAC2F,EAAmB,KACvB,IAAlBA,EAAO/V,OACA8E,KAAK+Q,aAGT/Q,KAAKkR,kBAAkBD,EAAQjR,KAAK+Q,cAG/C,KAAOI,yBAA2B,CAACF,EAAmB,KAC5B,IAAlBA,EAAO/V,OACA8E,KAAK6Q,kBAGT7Q,KAAKkR,kBAAkBD,EAAQjR,KAAK6Q,mBAG/C,KAAOO,gBAAmBC,IACtBrR,KAAK6Q,kBAAoB,OACjB7Q,KAAK6Q,mBAAqB,CAAC,GAC3BQ,GAAgB,CAAC,EAAE,EAI/B,KAAOC,mCAAqC,CAACL,EAAmB,MAC5DjR,KAAK8Q,4BAA8B,IAC5B,IAAIhL,IAAI9F,KAAK8Q,4BAA4BpV,OAAOuV,KAEvDjR,KAAKqL,SAAS,EAGlB,KAAOkG,WAAcnG,IACjBpL,KAAK+Q,aAAe,OACZ/Q,KAAK+Q,cAAgB,CAAC,GACtB3F,GAAW,CAAC,EAAE,EAI1B,KAAOoG,8BAAgC,CAACP,EAAmB,MACvDjR,KAAKgR,sBAAwB,IAAI,IAAIlL,IAAI9F,KAAKgR,sBAAsBtV,OAAOuV,KAC3EjR,KAAKqL,SAAS,EAGlB,KAAOA,SCzEmBsF,EDyEK,KAAY,O,EAAA,K,EAAA,K,EAAA,YACvC,MAAMU,EAAerR,KAAK8Q,4BACpB1F,EAAUpL,KAAKgR,sBAErB,IAAKhR,KAAKmR,yBAAyBnR,KAAK8Q,6BAA8B,CAClE,MAAMW,QAAc,yBAChB,mBACAzR,KAAK8Q,6BAET9Q,KAAKoR,gBAAgBK,GACrBzR,KAAK8Q,4BAA8B9Q,KAAK8Q,4BAA4BvG,QAC/DmH,IAAQL,EAAa3J,SAASgK,IAEvC,CACA,IAAK1R,KAAKsL,oBAAoBtL,KAAKgR,uBAAwB,CACvD,MAAMW,QAAY,yBAA4B,aAAc3R,KAAKgR,uBACjEhR,KAAKuR,WAAWI,GAChB3R,KAAKgR,sBAAwBhR,KAAKgR,sBAAsBzG,QACnDqH,IAAQxG,EAAQ1D,SAASkK,IAElC,CACJ,E,yMAAA,EC9FqChB,ED8FlC,IC9FiD,IAAIjG,KACxD,IAAIkH,EAAa,KAEjB,MAAI,YAAalB,GACbkB,EAASlB,EAAWmB,QACpBC,aAAaF,EAAMG,IACnBH,EAAMG,GAAK9C,WAAW2C,EAAMjF,QAASgE,GAE9BiB,EAAMI,UAGjBJ,EAAQ,CACJI,QAAS5F,QAAQO,UACjBA,QAAS,OACToF,GAAI,MAERH,EAAMI,QAAU,IAAI5F,SAAQ,CAACO,EAASvD,KAClCwI,EAAMjF,QAAU,YACJ+D,EAAWmB,QACnBlF,EAAQ+D,KAAMhG,GAAM,EAEvBkH,EAAcG,GAAK9C,WAAW2C,EAAMjF,QAASgE,EAAG,IAEpDD,EAAWmB,QAAUD,EAEfA,EAAMI,QAAO,EDqEd,CA9EEf,kBAAkB1U,EAAgB4D,GACtC,MAAM8R,EAAgE,CAAC,EAWvE,OAT8B1V,EAAKgL,MAAM/K,IACrC,MAAM0V,EAAyB/R,EAAIG,eAAe9D,GAKlD,OAJI0V,IACAD,EAAgBzV,GAAO2D,EAAI3D,KAGvB0V,CAAa,IAGgB,KAAlBD,CAC3B,EEzBJ,GdsPgC,CAAC5N,IAC7B,MAA0B,EAAAA,GAAlBtD,KAAAA,GAAkB,EAAToR,E,6JAAA,CAAS,EAAT,CAAT,SAER,EAAK9N,YAAc,EAAKA,aAAe,CAAC,EACxC,EAAKA,YAAYtD,GAAQoR,CAAI,Ec5PjCC,CAAiB,iIAEb,IAAS,oBAAwB,CACjC,oBAAyB,IAAIpF,EAC7B,MAAM7C,EAAY,IAAIsG,EACtB,gCACI,iCAAsCtG,EAAUoH,8BACpD,sBAA2B,uBAA4BpH,EAAUkB,oBACjE,qCACI,sCAA2ClB,EAAUkH,mCACzD,2BACI,4BAAiClH,EAAU+G,yBAE9C,qCAAgD/G,EACrD,C","sources":["webpack://elc-component-renderer/webpack/universalModuleDefinition","webpack://elc-component-renderer/./node_modules/odiff/odiff.js","webpack://elc-component-renderer/external umd \"ElcServiceBus\"","webpack://elc-component-renderer/external umd {\"root\":[\"ElcRuntime\",\"ELCLogger\"],\"commonjs2\":\"ELCLogger\",\"commonjs\":\"ELCLogger\",\"amd\":\"ELCLogger\"}","webpack://elc-component-renderer/external umd {\"root\":[\"ElcRuntime\",\"React\"],\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}","webpack://elc-component-renderer/external umd {\"root\":[\"ElcRuntime\",\"ReactDom\"],\"commonjs2\":\"react-dom\",\"commonjs\":\"react-dom\",\"amd\":\"react-dom\"}","webpack://elc-component-renderer/webpack/bootstrap","webpack://elc-component-renderer/webpack/runtime/define property getters","webpack://elc-component-renderer/webpack/runtime/global","webpack://elc-component-renderer/webpack/runtime/hasOwnProperty shorthand","webpack://elc-component-renderer/webpack/runtime/make namespace object","webpack://elc-component-renderer/./node_modules/@estee/elc-universal-utils/src/UniversalUtils.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-universal-utils/src/BrowserStorage.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-base-theme/src/Breakpoints.ts","webpack://elc-component-renderer/./src/utils/DOMCleanser.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-service/src/Service/utils/index.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-telemetry/node_modules/@estee/elc-universal-utils/src/UniversalUtils.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-telemetry/node_modules/@estee/elc-universal-utils/src/BrowserStorage.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-telemetry/node_modules/@estee/elc-universal-utils/src/Service/ServiceVersion.ts","webpack://elc-component-renderer/./node_modules/@estee/elc-telemetry/src/ErrorBoundary.tsx","webpack://elc-component-renderer/./src/renderers/LazyRenderer.ts","webpack://elc-component-renderer/./src/renderers/ComponentRenderer.ts","webpack://elc-component-renderer/./src/BrowserComponentRenderer.ts","webpack://elc-component-renderer/./src/preloader/ViewDataPreloader.ts","webpack://elc-component-renderer/./src/utils/Debounce.ts","webpack://elc-component-renderer/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react-dom\"), require(\"ElcServiceBus\"), require(\"ELCLogger\"), require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react-dom\", \"ElcServiceBus\", \"ELCLogger\", \"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"elc-component-renderer\"] = factory(require(\"react-dom\"), require(\"ElcServiceBus\"), require(\"ELCLogger\"), require(\"react\"));\n\telse\n\t\troot[\"elc-component-renderer\"] = factory(root[\"ElcRuntime\"][\"ReactDom\"], root[\"ElcServiceBus\"], root[\"ElcRuntime\"][\"ELCLogger\"], root[\"ElcRuntime\"][\"React\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE_react_dom__, __WEBPACK_EXTERNAL_MODULE__estee_elc_service_bus__, __WEBPACK_EXTERNAL_MODULE__estee_elc_logging__, __WEBPACK_EXTERNAL_MODULE_react__) => {\nreturn ","\"use strict\";\n\n/* Copyright (c) 2013 Billy Tetrud - Free to use for any purpose: MIT License*/\n// gets the changes that need to happen to a to change it into b\n// returns an object with the members\n // type\n // property\n // value\n // values\n // count\nmodule.exports = function(a,b) {\n var results = []\n diffInternal(a,b,results,[])\n return results\n}\n\nvar diffInternal = function(a,b,acc,base) {\n if(a === b || Number.isNaN(a)&&Number.isNaN(b)) {\n return;\n } else if(a instanceof Array && b instanceof Array) {\n var an=a.length-1,bn=b.length-1\n while(an >= 0 && bn >= 0) { // loop backwards (so that making changes in order will work correctly)\n if(!equal(a[an], b[bn])) {\n var indexes = findMatchIndexes(equal, a,b, an,bn, 0, 0)\n\n var anInner=an,bnInner=bn\n while(anInner > indexes.a && bnInner > indexes.b) {\n if(similar(a[anInner], b[bnInner])) {\n // get change for that element\n diffInternal(a[anInner],b[bnInner],acc, base.concat([anInner]))\n anInner--; bnInner--;\n } else {\n var indexesInner = findMatchIndexes(similar, a,b, anInner,bnInner, indexes.a+1, indexes.b+1)\n\n var numberPulled = anInner-indexesInner.a\n var numberPushed = bnInner-indexesInner.b\n\n if(numberPulled === 1 && numberPushed === 1) {\n set(acc, base.concat(indexesInner.a+1), b[indexesInner.b+1]) // set the one\n } else if(numberPulled === 1 && numberPushed === 2) {\n // set one, push the other\n add(acc, base,indexesInner.a+2, b.slice(indexesInner.b+2, bnInner+1))\n set(acc, base.concat(indexesInner.a+1), b[indexesInner.b+1])\n } else if(numberPulled === 2 && numberPushed === 1) {\n // set one, pull the other\n rm(acc, base, indexesInner.a+2, 1, a)\n set(acc, base.concat(indexesInner.a+1), b[indexesInner.b+1])\n } else if(numberPulled === 2 && numberPushed === 2) {\n set(acc, base.concat(indexesInner.a+2), b[indexesInner.b+2])\n set(acc, base.concat(indexesInner.a+1), b[indexesInner.b+1])\n } else {\n if(numberPulled > 0) { // if there were some elements pulled\n rm(acc, base, indexesInner.a+1, numberPulled, a)\n }\n if(numberPushed > 0) { // if there were some elements pushed\n add(acc, base,indexesInner.a+1, b.slice(indexesInner.b+1, bnInner+1))\n }\n }\n\n anInner = indexesInner.a\n bnInner = indexesInner.b\n }\n }\n\n if(anInner > indexes.a) { // more to pull\n rm(acc, base, anInner, anInner-indexes.a, a)\n } else if(bnInner > indexes.b) { // more to push\n add(acc, base, anInner+1, b.slice(indexes.b+1, bnInner+1))\n }\n\n an = indexes.a\n bn = indexes.b\n } else {\n an--; bn--;\n }\n }\n\n if(an >= 0) { // more to pull\n rm(acc, base, 0, an+1, a)\n } else if(bn >= 0) { // more to push\n add(acc, base,0, b.slice(0, bn+1))\n }\n\n } else if(a instanceof Date && b instanceof Date) {\n if(a.getTime() !== b.getTime()) {\n set(acc, base, b)\n }\n } else if(a instanceof Object && b instanceof Object) {\n var keyMap = merge(arrayToMap(Object.keys(a)), arrayToMap(Object.keys(b)))\n for(var key in keyMap) {\n var path = base.concat([key])\n if(key in a && !(key in b)) {\n unset(acc, path)\n } else {\n diffInternal(a[key],b[key],acc, path)\n }\n }\n } else {\n set(acc, base, b)\n }\n\n // adds a 'set' type to the changeList\n function set(changeList, property, value) {\n changeList.push({\n type:'set',\n path: property,\n val: value\n })\n }\n\n // adds an 'unset' type to the changeList\n function unset(changeList, property) {\n changeList.push({\n type:'unset',\n path: property\n })\n }\n\n // adds an 'rm' type to the changeList\n function rm(changeList, property, index, count, a) {\n var finalIndex = index ? index - count + 1 : 0\n changeList.push({\n type:'rm',\n path: property,\n index: finalIndex,\n num: count,\n vals: a.slice(finalIndex, finalIndex+count)\n })\n }\n\n // adds an 'add' type to the changeList\n function add(changeList, property, index, values) {\n changeList.push({\n type:'add',\n path: property,\n index: index,\n vals: values\n })\n }\n}\n\nmodule.exports.similar = similar\nmodule.exports.equal = equal\n\n\n// finds and returns the closest indexes in a and b that match starting with divergenceIndex\n// note: loops backwards like the rest of this stuff\n// returns the index beyond the first element (aSubMin-1 or bSubMin-1) for each if there is no match\n// parameters:\n // compareFn - determines what matches (returns true if the arguments match)\n // a,b - two arrays to compare\n // divergenceIndexA,divergenceIndexB - the two positions of a and b to start comparing from\n // aSubMin,bSubMin - the two positions to compare until\nfunction findMatchIndexes(compareFn, a,b, divergenceIndexA,divergenceIndexB, aSubMin, bSubMin) {\n var maxNForA = divergenceIndexA-aSubMin\n var maxNForB = divergenceIndexB-bSubMin\n var maxN = Math.max(maxNForA, maxNForB)\n for(var n=1; n<=maxN; n++) {\n var newestA = a[divergenceIndexA-n] // the current item farthest from the divergence index being compared\n var newestB = b[divergenceIndexB-n]\n\n if(n<=maxNForB && n<=maxNForA && compareFn(newestA, newestB)) {\n return {a:divergenceIndexA-n, b:divergenceIndexB-n}\n }\n\n for(var j=0; j= 2 && notEqual > tenPercent || notEqual === a.length) {\n return false\n }\n\n notEqual++\n }\n }\n // else\n return true\n\n } else if(a instanceof Object) {\n if(!(b instanceof Object))\n return false\n\n var keyMap = merge(arrayToMap(Object.keys(a)), arrayToMap(Object.keys(b)))\n var keyLength = Object.keys(keyMap).length\n var tenPercent = keyLength / 10\n var notEqual = 0\n for(var key in keyMap) {\n var aVal = a[key]\n var bVal = b[key]\n\n if(!equal(aVal,bVal)) {\n if(notEqual >= 2 && notEqual > tenPercent || notEqual+1 === keyLength) {\n return false\n }\n\n notEqual++\n }\n }\n // else\n return true\n\n } else {\n return a===b || Number.isNaN(a) && Number.isNaN(b)\n }\n}\n\n// compares arrays and objects for value equality (all elements and members must match)\nfunction equal(a,b) {\n if(a instanceof Array) {\n if(!(b instanceof Array))\n return false\n if(a.length !== b.length) {\n return false\n } else {\n for(var n=0; n {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from '@estee/elc-service-bus';\nimport {\n IServiceRegistry,\n IComponentViewController,\n IEcommApp,\n AllServicesTypes\n} from './Service/ServiceUtils';\n\nexport const MOBILE_VERSION_SELECTOR = 'js-mobile-version';\nexport const DESKTOP_VERSION_SELECTOR = 'js-desktop-version';\n\nexport interface ISingleServiceInfo {\n [key: string]: string;\n}\n\nexport interface IServiceInfo {\n [name: string]: ISingleServiceInfo;\n}\n\nexport type ArrayMinOne = {\n 0: T;\n} & T[];\n\ninterface IObjectOfStrings {\n [key: string]: string;\n}\n\ninterface IServiceBusTopics {\n commands: IObjectOfStrings;\n events: IObjectOfStrings;\n queries: IObjectOfStrings;\n}\n\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n}\n\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\n\nexport interface IRequestOptions {\n debounceInterval?: number;\n}\n\nexport type HeaderType = 'Business-Unit' | 'Authorization' | 'AuthorizationToken' | 'ClientId';\nexport type HeaderObject = { [key in HeaderType]?: string };\nexport type IHeaderSetter = () => Promise;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise;\n\nexport interface IHttpTransport {\n getStaticGlobalHeaders(): HeaderObject;\n setBaseUrl(baseUrl: string): void;\n addGlobalHeaders(headers: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n addGlobalHeaderSetter(setter: IHeaderSetter): void;\n removeGlobalHeaderSetter(setter: IHeaderSetter): void;\n addRequestTransformer(transformer: IRequestTransformer): void;\n removeRequestTransformer(transformer: IRequestTransformer): void;\n delete(payload: string | IPayload): Promise;\n post(payload: IPayload): Promise;\n patch(payload: IPayload): Promise;\n put(payload: IPayload): Promise;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise;\n readonly isAuthFailureHandlingEnabled: boolean;\n setAuthFailureHandlingEnabled(enabled: boolean): void;\n}\n\nexport interface IUtagData {\n [key: string]: string | string[] | undefined | boolean | number | null | number[];\n}\nexport interface IUtagCfgOvrd {\n noview: boolean;\n dom_complete?: boolean;\n lowerqp?: boolean;\n noload?: boolean | number;\n nocookie?: boolean;\n readywait?: boolean | number;\n waittimer?: number;\n}\nexport interface IUtag {\n link(data: IUtagData, cb?: Function): void;\n view(data: IUtagData, cb?: Function): void;\n}\n\nexport interface IFrontendLogger {\n isEnabled?: boolean;\n loggedServices?: {\n [key: string]: {\n isEnabled?: boolean;\n };\n };\n}\n\ninterface ILoggerApiSDK {\n sendLog: Function;\n}\ninterface IDrupalSite {\n translations?: any;\n trackingDataLayer?: any;\n client?: {\n subdomain?: string;\n isMobile?: number;\n };\n frontendLogger?: IFrontendLogger;\n}\nexport type AnyObject = { [key: string]: any };\ntype ITranslationsCollection = { [key: string]: string | IObjectOfStrings };\ntype ViewDataPreloader = {\n addConfigs(configs: AnyObject): void;\n addTranslations(translations: ITranslationsCollection): void;\n getPreloadedConfigs(arg: string[]): AnyObject | null;\n getPreloadedTranslations(arg: string[]): ITranslationsCollection | null;\n preload(): Promise;\n registerTranslationFieldsToPreload(fields?: string[]): void;\n registerConfigFieldsToPreload(fields?: string[]): void;\n};\ninterface IComponentRenderer {\n init(): Promise;\n getDataPreloader(): ViewDataPreloader | null;\n setDataPreloader(arg: ViewDataPreloader): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\nexport interface IViewManager {\n loadComponent(): Promise;\n module: React.ComponentType | null;\n controllerFromView: IComponentViewController | null;\n}\nexport interface IViewsManager {\n lazyServicesStarted: boolean;\n getViewManager(viewName: string): IViewManager;\n startService(service: AllServicesTypes): Promise;\n startLazyServices(): Promise;\n}\ndeclare global {\n // Augment Node.js `global`\n namespace NodeJS {\n interface Global {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n site?: IDrupalSite;\n location: Location;\n navigator: Navigator;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n serviceInfo: IServiceInfo;\n getServiceVersions(): void;\n __ssr: boolean;\n __SENTRY__: IObjectLike;\n onerror(\n message: string,\n url: string,\n line: number,\n column: number,\n error: Error\n ): boolean;\n env: string;\n buid: string;\n loggerApiSDK: ILoggerApiSDK;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n }\n\n // Augment Browser `window`\n interface Window {\n EcommApp?: IEcommApp;\n ServiceBusTopics: IServiceBusTopics;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n replaceSrc(originalSrc: string): string;\n utag_data: any;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n site?: IDrupalSite;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(message: string, url: string, line: number, column: number, error: Error): boolean;\n env: string;\n buid: string;\n serviceInfo: IServiceInfo;\n __SENTRY__: IObjectLike;\n loggerApiSDK: ILoggerApiSDK;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n\n // Augment Web Worker `self`\n interface WorkerGlobalScope {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n __SENTRY__: IObjectLike;\n utag: IUtag;\n location: Location;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n }\n}\n\nexport const isWebRendered = typeof self === 'object' && self.self === self;\n\nexport const root: NodeJS.Global | Window = typeof window === 'undefined' ? global : window;\n\nexport const setupServiceInfo = (serviceInfo: ISingleServiceInfo) => {\n const { name, ...rest } = serviceInfo;\n\n root.serviceInfo = root.serviceInfo || {};\n root.serviceInfo[name] = rest;\n};\n\nexport enum ISandboxEnvironment {\n LIVE = 'live',\n FEATURE = 'feature',\n DEV = 'dev',\n STAGE = 'stage',\n CMS = 'cms',\n PERSONAL = 'personal',\n PRODUCTION = 'production'\n}\n\nexport const getSandboxEnvironment: () => string = () => {\n let urlParts = root.location.hostname.split('.');\n const { LIVE, FEATURE, DEV, STAGE, CMS, PERSONAL } = ISandboxEnvironment;\n\n urlParts = urlParts.filter(part => !['www', 'm'].includes(part));\n const isLive = !(urlParts[0] === 'c') && !(urlParts[0] === 'e');\n\n return isLive\n ? LIVE\n : urlParts.includes(FEATURE)\n ? FEATURE\n : urlParts.includes(DEV)\n ? DEV\n : urlParts.includes(STAGE)\n ? STAGE\n : urlParts.includes(CMS)\n ? CMS\n : PERSONAL;\n};\n","export type storageKeyType = 'localStorage' | 'sessionStorage';\nexport namespace BrowserStorage {\n export function eraseCookie(name: string) {\n document.cookie = `${name}=; Max-Age=-99999999;`;\n }\n\n export function setCookie(name: string, value: string, daysOrDate: number | Date) {\n let expires = '';\n if (daysOrDate) {\n const expirationDate =\n typeof daysOrDate === 'number'\n ? new Date(Date.now() + daysOrDate * 24 * 60 * 60 * 1000)\n : daysOrDate;\n expires = `; expires=${expirationDate.toUTCString()}`;\n }\n document.cookie = `${name}=${value || ''}${expires};path=/`;\n }\n\n export function getCookie(name: string) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n\n export function getItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n if (window[storageKey].getItem(key) !== null) {\n return window[storageKey].getItem(key);\n }\n } catch (e) {\n console.error(e);\n\n return getCookie(key);\n }\n }\n\n export function setItem(\n key: string,\n value: string,\n storageKey: storageKeyType = 'localStorage'\n ) {\n try {\n window[storageKey].setItem(key, value);\n } catch (e) {\n console.error(e);\n setCookie(key, value, 20);\n }\n }\n\n export function removeItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n window[storageKey].removeItem(key);\n } catch (e) {\n console.error(e);\n eraseCookie(key);\n }\n }\n\n export function storagePolling(key: string, callBack: Function) {\n let storageValue = getItem(key);\n\n const checkForKeyChange = () => {\n const latestValue = getItem(key);\n\n if (storageValue !== latestValue) {\n storageValue = latestValue;\n callBack(latestValue);\n }\n };\n\n return setInterval(checkForKeyChange, 2000);\n }\n}\n","export interface IBreakpoints {\n [key: string]: number;\n}\n\nexport const layoutPageContentWidth: number = 1260;\n\nexport const Breakpoints: IBreakpoints = {\n desktop: 768,\n largeScreen: 1024,\n extraLargeScreen: 1200\n};\n\nexport const breakpoint = (brp: string) => (\n code: TemplateStringsArray,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...placeholders: any[]\n) => {\n // interleave the code with the placeholders\n let result = placeholders.reduce((acc, holder, idx) => `${acc}${code[idx]}${holder}`, '');\n\n // add the code literal\n result = `${result}${code[code.length - 1]}`;\n\n return `@media(min-width: ${Breakpoints[brp]}px) {${result}}`;\n};\n","export const cleanseDOM = (selector: string) => {\r\n const wrappers = document.querySelectorAll(selector);\r\n\r\n wrappers.forEach(wrapper => {\r\n wrapper.replaceWith(...wrapper.childNodes);\r\n });\r\n};\r\n\r\nexport const removeAllNodesBySelector = (selector: string) => {\r\n document.querySelectorAll(selector).forEach(node => node.remove());\r\n};\r\n","import {\n root,\n AllServicesTypes,\n AllUpdatedServicesTypes,\n IComponentViewController,\n IFederatedService,\n IOlderServiceRegistryComponent,\n IServiceRegistryComponent\n} from '@estee/elc-universal-utils';\n\nexport function getServices() {\n return root.ServiceRegistry || {};\n}\n\nexport function hasServiceStarted(service: AllServicesTypes) {\n return service.isStarted;\n}\n// isLazy is true for exported services by createServiceManifest\nexport function isServiceLazy(service: AllUpdatedServicesTypes) {\n return Boolean(service.isLazy);\n}\n// createServiceManifest exports an object with fewer keys\nexport function isServiceFromManifest(service: AllServicesTypes) {\n // @ts-ignore\n return Boolean(service.getView) && isServiceLazy(service);\n}\n// To be removed after SDFEFND-1853\nexport function isServiceUpdated(service: AllServicesTypes) {\n return Boolean(service.views); // key added in elc-service v7.x\n}\n\nfunction isViewInService(viewName: string) {\n return (service: AllServicesTypes) => {\n if (isServiceUpdated(service)) {\n return (service as IServiceRegistryComponent).views.includes(viewName);\n }\n\n return (service as IOlderServiceRegistryComponent).getView(viewName);\n };\n}\n\n// Refactor after SDFEFND-1853 to only search in views[]\nexport function findServiceByViewName(viewName: string): AllServicesTypes {\n const services = Object.values(getServices());\n const service: AllServicesTypes | undefined = services.find(isViewInService(viewName));\n\n if (!service) {\n throw new Error(`Service wasn't found for view ${viewName}`);\n }\n\n return service;\n}\n\n/* SSR */\nexport interface IComponentDataState {\n [key: string]: object | number | string;\n}\nexport interface IComponentState extends IComponentDataState {\n children: string[];\n}\n\nexport function setStateInController(state: object, controller: IComponentViewController) {\n const viewState = Object.values(state)[0]; // { [VIEW_NAME]: { ...state } }\n if (viewState && controller.setSSRState) {\n controller.setSSRState(viewState);\n }\n}\n\nexport function setControllerId(config: string | null, controller: IComponentViewController) {\n if (config && controller.setId) {\n controller.setId(config);\n }\n}\n\nexport function parseState(state: string | null) {\n let parsedState: IComponentState | undefined;\n try {\n if (state) {\n parsedState = JSON.parse(state);\n }\n } finally {\n parsedState = parsedState ? parsedState : { children: [] };\n }\n\n return parsedState;\n}\n\nexport function initializeControllerForSSR(\n viewController: IComponentViewController | null,\n state: IComponentDataState,\n config: string | null\n) {\n if (viewController) {\n setStateInController(state, viewController);\n setControllerId(config, viewController);\n }\n}\n\n/* Module Federation */\nexport async function getModule(child: string, router: string): Promise {\n // @ts-ignore\n const module = await (root[child] as unknown).get(`./${router}`);\n\n return module() as T;\n}\n\nexport async function importComponent(componentName: string): Promise {\n const srv = (Object.entries(getServices()).find(([_, value]) =>\n value.views?.includes(componentName)\n ) as unknown) as [string, IFederatedService];\n\n const { name } = srv[1];\n\n return getModule(name, componentName);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ServiceBus } from '@estee/elc-service-bus';\nimport {\n IServiceRegistry,\n IComponentViewController,\n AllServicesTypes\n} from './Service/ServiceUtils';\n\nexport const MOBILE_VERSION_SELECTOR = 'js-mobile-version';\nexport const DESKTOP_VERSION_SELECTOR = 'js-desktop-version';\n\nexport interface ISingleServiceInfo {\n [key: string]: string;\n}\n\nexport interface IServiceInfo {\n [name: string]: ISingleServiceInfo;\n}\n\nexport type ArrayMinOne = {\n 0: T;\n} & T[];\n\ninterface IObjectOfStrings {\n [key: string]: string;\n}\n\ninterface IServiceBusTopics {\n commands: IObjectOfStrings;\n events: IObjectOfStrings;\n queries: IObjectOfStrings;\n}\n\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n}\n\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\n\nexport interface IRequestOptions {\n debounceInterval?: number;\n}\n\nexport type HeaderType = 'Business-Unit' | 'Authorization' | 'AuthorizationToken' | 'ClientId';\nexport type HeaderObject = { [key in HeaderType]?: string };\nexport type IHeaderSetter = () => Promise;\nexport type IRequestTransformerConfig = { url: string } & RequestInit;\nexport type IRequestTransformer = (config: IRequestTransformerConfig) => Promise;\n\nexport interface IHttpTransport {\n getStaticGlobalHeaders(): HeaderObject;\n setBaseUrl(baseUrl: string): void;\n addGlobalHeaders(headers: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n addGlobalHeaderSetter(setter: IHeaderSetter): void;\n removeGlobalHeaderSetter(setter: IHeaderSetter): void;\n addRequestTransformer(transformer: IRequestTransformer): void;\n removeRequestTransformer(transformer: IRequestTransformer): void;\n delete(payload: string | IPayload): Promise;\n post(payload: IPayload): Promise;\n patch(payload: IPayload): Promise;\n put(payload: IPayload): Promise;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise;\n readonly isAuthFailureHandlingEnabled: boolean;\n setAuthFailureHandlingEnabled(enabled: boolean): void;\n}\n\nexport interface IUtagData {\n [key: string]: string | string[] | undefined | boolean | number | null | number[];\n}\nexport interface IUtagCfgOvrd {\n noview: boolean;\n dom_complete?: boolean;\n lowerqp?: boolean;\n noload?: boolean | number;\n nocookie?: boolean;\n readywait?: boolean | number;\n waittimer?: number;\n}\nexport interface IUtag {\n link(data: IUtagData, cb?: Function): void;\n view(data: IUtagData, cb?: Function): void;\n}\n\nexport interface IFrontendLogger {\n isEnabled?: boolean;\n loggedServices?: {\n [key: string]: {\n isEnabled?: boolean;\n };\n };\n}\n\ninterface ILoggerApiSDK {\n sendLog: Function;\n}\ninterface IDrupalSite {\n translations?: any;\n trackingDataLayer?: any;\n client?: {\n subdomain?: string;\n isMobile?: number;\n };\n frontendLogger?: IFrontendLogger;\n}\nexport type AnyObject = { [key: string]: any };\ntype ITranslationsCollection = { [key: string]: string | IObjectOfStrings };\ntype ViewDataPreloader = {\n addConfigs(configs: AnyObject): void;\n addTranslations(translations: ITranslationsCollection): void;\n getPreloadedConfigs(arg: string[]): AnyObject | null;\n getPreloadedTranslations(arg: string[]): ITranslationsCollection | null;\n preload(): Promise;\n registerTranslationFieldsToPreload(fields?: string[]): void;\n registerConfigFieldsToPreload(fields?: string[]): void;\n};\ninterface IComponentRenderer {\n init(): Promise;\n getDataPreloader(): ViewDataPreloader | null;\n setDataPreloader(arg: ViewDataPreloader): void;\n}\n\ntype IObjectLike = { [key: string]: any } | null;\nexport interface IViewManager {\n loadComponent(): Promise;\n module: React.ComponentType | null;\n controllerFromView: IComponentViewController | null;\n}\nexport interface IViewsManager {\n lazyServicesStarted: boolean;\n getViewManager(viewName: string): IViewManager;\n startService(service: AllServicesTypes): Promise;\n startLazyServices(): Promise;\n}\ndeclare global {\n // Augment Node.js `global`\n namespace NodeJS {\n interface Global {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n site?: IDrupalSite;\n location: Location;\n navigator: Navigator;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n serviceInfo: IServiceInfo;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(\n message: string,\n url: string,\n line: number,\n column: number,\n error: Error\n ): boolean;\n env: string;\n buid: string;\n loggerApiSDK: ILoggerApiSDK;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n }\n\n // Augment Browser `window`\n interface Window {\n ServiceBusTopics: IServiceBusTopics;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n replaceSrc(originalSrc: string): string;\n utag_data: any;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n site?: IDrupalSite;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n getServiceVersions(): void;\n __ssr: boolean;\n onerror(message: string, url: string, line: number, column: number, error: Error): boolean;\n env: string;\n buid: string;\n serviceInfo: IServiceInfo;\n loggerApiSDK: ILoggerApiSDK;\n requestIdleCallback: Function;\n cancelIdleCallback: Function;\n }\n\n // Augment Web Worker `self`\n interface WorkerGlobalScope {\n ServiceBusTopics: IServiceBusTopics;\n ServiceRegistry: IServiceRegistry;\n GlobalServiceBus: ServiceBus;\n HttpTransport: IHttpTransport;\n __translationsCache__: { [key: string]: string };\n __configsCache__: { [key: string]: any };\n getPreloadedConfigs(fields?: string[]): IObjectLike;\n addConfigs(configs: object): void;\n getPreloadedTranslations(fields?: string[]): IObjectLike;\n addTranslations(translations: object): void;\n replaceSrc(originalSrc: string): string;\n utag_data: IUtagData;\n utag_cfg_ovrd: IUtagCfgOvrd;\n utag: IUtag;\n location: Location;\n addEventListener(a: string, b: Function): void;\n ComponentRenderer: IComponentRenderer;\n ViewsManager: IViewsManager;\n registerTranslationFieldsToPreload: Function;\n registerConfigFieldsToPreload: Function;\n }\n}\n\nexport const isWebRendered = typeof self === 'object' && self.self === self;\n\nexport const root: NodeJS.Global | Window =\n (isWebRendered && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n window;\n\nexport const setupServiceInfo = (serviceInfo: ISingleServiceInfo) => {\n const { name, ...rest } = serviceInfo;\n\n root.serviceInfo = root.serviceInfo || {};\n root.serviceInfo[name] = rest;\n};\n\nexport enum ISandboxEnvironment {\n LIVE = 'live',\n FEATURE = 'feature',\n DEV = 'dev',\n STAGE = 'stage',\n CMS = 'cms',\n PERSONAL = 'personal',\n PRODUCTION = 'production'\n}\n\nexport const getSandboxEnvironment: () => string = () => {\n let urlParts = root.location.hostname.split('.');\n const { LIVE, FEATURE, DEV, STAGE, CMS, PERSONAL } = ISandboxEnvironment;\n\n urlParts = urlParts.filter(part => !['www', 'm'].includes(part));\n const isLive = !(urlParts[0] === 'c') && !(urlParts[0] === 'e');\n\n return isLive\n ? LIVE\n : urlParts.includes(FEATURE)\n ? FEATURE\n : urlParts.includes(DEV)\n ? DEV\n : urlParts.includes(STAGE)\n ? STAGE\n : urlParts.includes(CMS)\n ? CMS\n : PERSONAL;\n};\n","export type storageKeyType = 'localStorage' | 'sessionStorage';\nexport namespace BrowserStorage {\n export function eraseCookie(name: string) {\n document.cookie = `${name}=; Max-Age=-99999999;`;\n }\n\n export function setCookie(name: string, value: string, daysOrDate: number | Date) {\n let expires = '';\n if (daysOrDate) {\n const expirationDate =\n typeof daysOrDate === 'number'\n ? new Date(Date.now() + daysOrDate * 24 * 60 * 60 * 1000)\n : daysOrDate;\n expires = `; expires=${expirationDate.toUTCString()}`;\n }\n document.cookie = `${name}=${value || ''}${expires};path=/`;\n }\n\n export function getCookie(name: string) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n\n return null;\n }\n\n export function getItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n if (window[storageKey].getItem(key) !== null) {\n return window[storageKey].getItem(key);\n }\n } catch (e) {\n console.error(e);\n\n return getCookie(key);\n }\n }\n\n export function setItem(\n key: string,\n value: string,\n storageKey: storageKeyType = 'localStorage'\n ) {\n try {\n window[storageKey].setItem(key, value);\n } catch (e) {\n console.error(e);\n setCookie(key, value, 20);\n }\n }\n\n export function removeItem(key: string, storageKey: storageKeyType = 'localStorage') {\n try {\n window[storageKey].removeItem(key);\n } catch (e) {\n console.error(e);\n eraseCookie(key);\n }\n }\n\n export function storagePolling(key: string, callBack: Function) {\n let storageValue = getItem(key);\n\n const checkForKeyChange = () => {\n const latestValue = getItem(key);\n\n if (storageValue !== latestValue) {\n storageValue = latestValue;\n callBack(latestValue);\n }\n };\n\n return setInterval(checkForKeyChange, 2000);\n }\n}\n","import { root, ISingleServiceInfo } from '../UniversalUtils';\n\nconst extractServiceVersion = (serviceInfo: ISingleServiceInfo) =>\n serviceInfo && serviceInfo.version;\n\nconst searchForServiceInfo = (serviceName: string) =>\n root.serviceInfo[serviceName] || root.ServiceRegistry[serviceName];\n\nexport const getServiceVersion = (serviceName: string, fallback: string = '') =>\n extractServiceVersion(searchForServiceInfo(serviceName)) || fallback;\n","import * as React from 'react';\nimport { ELCLogger, TriggerType } from '@estee/elc-logging';\nimport { root, getServiceVersion } from '@estee/elc-universal-utils';\n\ninterface IProps {\n children: JSX.Element | null;\n serviceName: string;\n name: string;\n}\n\ninterface IState {\n error?: Error;\n}\n\nexport class ErrorBoundary extends React.Component {\n private logger: ELCLogger;\n\n constructor(props: IProps) {\n super(props);\n this.state = { error: undefined };\n this.logger = new ELCLogger({\n serviceName: props.serviceName,\n buid: root.buid || '',\n environment: root.env || '',\n serviceVersion: getServiceVersion(props.serviceName) || ''\n });\n }\n\n static getDerivedStateFromError(error?: Error) {\n return { error };\n }\n\n public componentDidCatch(error?: Error) {\n this.logger.error({\n triggerType: TriggerType.render,\n message: `Error caught in external view ${this.props.name}`,\n payload: {\n error: error,\n context: { serviceRegistry: root.ServiceRegistry }\n }\n });\n }\n\n public render() {\n return this.state.error ? null : this.props.children;\n }\n}\n","import { ELCLogger, TriggerType } from '@estee/elc-logging';\n\nenum RenderStrategies {\n default = 'default',\n ondemand = 'ondemand',\n serverside = 'serverside'\n}\n\nexport type OnDemandRenderOffset = { onDemandRenderOffset?: number };\nexport type RenderStrategiesTypes = keyof typeof RenderStrategies;\n\nenum ObservedValues {\n parent = 'parent',\n node = 'node',\n none = 'none'\n}\n\ntype PendingNodes = {\n parent: HTMLElement;\n node: HTMLElement;\n isObserved: ObservedValues;\n};\n\nexport abstract class LazyRenderer {\n protected abstract getNodeAttribute(node: HTMLElement, name: string): string | null;\n protected abstract isServiceViewNode(element: HTMLElement): boolean;\n protected abstract getServiceViewsFromNode(node: HTMLElement): NodeListOf;\n protected abstract readonly logger: ELCLogger;\n\n private intersectionObserver: IntersectionObserver;\n private viewHeight: number;\n private ALLOWED_PIXELS = 200;\n private pendingNodes: Set = new Set([]);\n\n private updateViewHeight = () => {\n this.viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n };\n\n private isInViewport = (node: Element, customMargin = this.ALLOWED_PIXELS): boolean => {\n const { bottom, top } = node.getBoundingClientRect();\n if (!this.viewHeight) {\n this.updateViewHeight();\n }\n // To load before get's into screen (scrolling down)\n const isBottomLessThanViewport = bottom < this.viewHeight + customMargin;\n // Check if its on viewport or close to it\n const isBottomInViewport = bottom > -customMargin;\n\n const isBottomVisible = isBottomLessThanViewport && isBottomInViewport;\n\n // In case it is scrolling up to start rendering\n const isTopVisible = top + customMargin > 0 && top < this.viewHeight;\n\n // In case node is higher than viewport\n const isHigherThanViewHeight = bottom < 0 && top > this.viewHeight;\n\n return isBottomVisible || isTopVisible || isHigherThanViewHeight;\n };\n\n private getRenderMethodStrategy = (node: HTMLElement) =>\n this.getNodeAttribute(node, 'data-render-method') ||\n RenderStrategies.default;\n\n private getRenderConfig = (node: HTMLElement) =>\n this.getNodeAttribute(node, 'data-render-config') || '{}';\n\n private isNodeInViewport = (node: HTMLElement): boolean => {\n const parent = node.parentNode as HTMLElement;\n\n try {\n const config = this.getRenderConfig(node);\n\n const { onDemandRenderOffset }: { onDemandRenderOffset?: number } = JSON.parse(config);\n\n if (!parent ||\n (\n !this.isInViewport(node, onDemandRenderOffset) &&\n !this.isInViewport(parent, onDemandRenderOffset)\n )\n ) {\n this.pendingNodes.add({ node, parent, isObserved: ObservedValues.none });\n\n return false;\n }\n\n return true;\n } catch (error) {\n console.error(error);\n\n return true;\n }\n };\n\n private isNodeSkeleton = (node: Element): boolean =>\n [...(node.classList || [])].some((className) => className.includes('skeleton'));\n\n private hasSkeletonsAsSiblings = (node: Element, checkNextSibling: boolean): boolean => {\n let currentNode = checkNextSibling ? node.nextElementSibling : node.previousElementSibling;\n let isSkeleton = false;\n\n while (currentNode) {\n isSkeleton = this.isNodeSkeleton(currentNode as Element);\n currentNode = checkNextSibling ?\n currentNode.nextElementSibling :\n currentNode.previousElementSibling;\n }\n\n return isSkeleton;\n };\n\n private hasOnlySkeletons = (node: Element): boolean => {\n const hasNextSibling = Boolean(node.nextSibling);\n const hasPreviousSibling = Boolean(node.previousSibling);\n\n if (hasNextSibling || hasPreviousSibling) {\n const isNextSiblingSkeletonOnly = this.hasSkeletonsAsSiblings(node, true);\n\n if (hasPreviousSibling && (isNextSiblingSkeletonOnly || hasNextSibling)) {\n const isPreviousSiblingSkeletonOnly = this.hasSkeletonsAsSiblings(node, false);\n\n return isPreviousSiblingSkeletonOnly;\n }\n\n return isNextSiblingSkeletonOnly;\n }\n\n return false;\n };\n\n public shouldRenderNode = (node: HTMLElement): boolean => {\n const renderStrategy: RenderStrategiesTypes = this.getRenderMethodStrategy(node);\n\n if (renderStrategy === RenderStrategies.ondemand) {\n return this.isNodeInViewport(node);\n }\n\n return true;\n };\n\n public initLazyRenderer = (onNodeDisplay: (node: Element) => void) => {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0\n };\n\n const intersectionCallback = ([entry]: IntersectionObserverEntry[]) => {\n const target = entry.target as HTMLElement;\n\n const isServiceView = this.isServiceViewNode(target);\n const serviceViewNode = isServiceView\n ? target\n : this.getServiceViewsFromNode(target)[0];\n const parentNode = (isServiceView ? target.parentNode : target) as HTMLElement;\n\n const config = this.getRenderConfig(serviceViewNode);\n\n try {\n const { onDemandRenderOffset }: {\n onDemandRenderOffset?: number\n } = JSON.parse(config);\n\n if (\n entry.isIntersecting ||\n (serviceViewNode &&\n (this.isInViewport(serviceViewNode, onDemandRenderOffset) ||\n this.isInViewport(parentNode, onDemandRenderOffset)))\n ) {\n this.pendingNodes.forEach((nodes, _, set) => {\n if (target.isSameNode(nodes.parent) || target.isSameNode(nodes.node)) {\n set.delete(nodes);\n }\n });\n\n this.intersectionObserver.unobserve(target);\n // No more nodes to observe\n if (this.pendingNodes.size === 0) {\n this.intersectionObserver.disconnect();\n // Setting the property as an optional `null` in the interface would add more checks and that could end up in a bug\n // @ts-ignore\n this.intersectionObserver = null;\n }\n onNodeDisplay(serviceViewNode);\n }\n } catch (error) {\n console.error(error);\n this.logger.error({\n message: error.message,\n triggerType: TriggerType.render,\n payload: error\n });\n }\n };\n\n this.intersectionObserver = new IntersectionObserver(intersectionCallback, options);\n this.pendingNodes.forEach((pendingNode) => {\n const { node, parent } = pendingNode;\n\n if (node.getBoundingClientRect().height === 0) {\n (node as HTMLElement).style.minHeight = '1px';\n }\n\n const hasSkeletons = this.hasOnlySkeletons(node);\n\n pendingNode.isObserved = hasSkeletons ? ObservedValues.parent : ObservedValues.node;\n\n this.intersectionObserver.observe(hasSkeletons ? parent : node);\n });\n };\n}\n","import * as React from 'react';\nimport {\n AnyObject,\n IComponentViewController,\n IViewManager,\n root\n} from '@estee/elc-universal-utils';\nimport {\n IComponentDataState,\n IComponentState,\n initializeControllerForSSR\n} from '@estee/elc-service';\nimport { ELCLogger, TriggerType } from '@estee/elc-logging';\nimport { ErrorBoundary } from '@estee/elc-telemetry';\nimport { ViewDataPreloader, IConfigsCollection } from '../preloader/ViewDataPreloader';\nimport { LazyRenderer } from './LazyRenderer';\n\nexport type ComponentNodeType = {\n name: string;\n config: string | null;\n component: React.ReactElement | null;\n node: HTMLElement;\n state: string | null;\n};\n\ninterface IComponentPropsFunctions {\n [key: string]: Function | object | null;\n}\n\ninterface IComponentProps extends IComponentPropsFunctions {\n config: object;\n viewController: IComponentViewController | null;\n parentMountPointNode: Element;\n}\n\nconst { name: serviceName, version } = __serviceInfo__;\n\nexport abstract class ComponentRenderer extends LazyRenderer {\n private preloader: ViewDataPreloader | null = null;\n\n protected readonly logger: ELCLogger = new ELCLogger({\n serviceName,\n serviceVersion: version,\n environment: root.env,\n buid: root.buid\n });\n\n private handleEventsFromProps = (node: HTMLElement, parsedConfig: AnyObject) =>\n Object.keys(parsedConfig)\n .filter((configKey) => parsedConfig[configKey] === '__event__')\n .reduce((eventHandlers, configKey) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const eventHandler = function (...args: any[]) {\n const event = new CustomEvent(configKey, {\n detail: args,\n cancelable: true,\n bubbles: false\n });\n node.dispatchEvent(event);\n };\n\n return { ...eventHandlers, [configKey]: eventHandler };\n }, {});\n\n private getConfig = async (component: ComponentNodeType) => {\n let configs: IConfigsCollection | null = null;\n // Don't overload components for non exported views otherwise will crash\n if (this.getNodeAttribute(component.node, 'data-version')) {\n if (this.preloader) {\n await this.preloader.preload();\n configs = this.preloader.getPreloadedConfigs();\n }\n }\n\n return { configs };\n };\n\n private getElementProps = async (\n component: ComponentNodeType,\n viewManager: IViewManager\n ): Promise => {\n const parsedConfig = component.config ? JSON.parse(component.config) : {};\n const viewController = viewManager.controllerFromView;\n\n const { configs } = await this.getConfig(component);\n const fnProps = this.handleEventsFromProps(component.node, parsedConfig);\n\n return {\n ...fnProps,\n config: { ...configs, ...parsedConfig },\n parentMountPointNode: component.node.parentNode as Element,\n viewController\n };\n };\n\n private getElementToRender = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registeredComponent: React.ComponentType,\n props: IComponentProps,\n viewName: string\n ) => {\n return React.createElement(ErrorBoundary, {\n serviceName,\n name: viewName,\n children: React.createElement(registeredComponent, props)\n });\n };\n\n private handleController = (\n viewController: IComponentViewController | null,\n state: IComponentDataState,\n config: string | null\n ) => {\n try {\n initializeControllerForSSR(viewController, state, config);\n } catch (error) {\n this.logger.error({\n triggerType: TriggerType.render,\n message: error.message,\n payload: {\n error,\n context: {\n name\n }\n }\n });\n }\n };\n\n private parseState = (state: string | null) => {\n let parsedState: IComponentState | undefined;\n try {\n if (state) {\n parsedState = JSON.parse(state);\n }\n } finally {\n parsedState = parsedState || { children: [] };\n }\n\n return parsedState;\n };\n\n private processChildrenViewNames = async (nodeState: string | null) => {\n const { children: childrenViewNames = [], ...state } = this.parseState(nodeState);\n\n try {\n await Promise.all(\n childrenViewNames.map(async (viewName: string) => {\n const viewManager = root.ViewsManager.getViewManager(viewName);\n await viewManager.loadComponent();\n })\n );\n } catch (error) {\n this.logger.error({\n triggerType: TriggerType.render,\n message: `Failed to load views requested for SSR: ${childrenViewNames.join(', ')}`,\n payload: {\n error\n }\n });\n }\n\n return state;\n };\n\n protected getComponentForNode = async (node: ComponentNodeType) => {\n const nodeObject = { ...node };\n\n const viewManager = root.ViewsManager.getViewManager(node.name);\n await viewManager.loadComponent();\n const module = viewManager.module;\n if (module) {\n const props = await this.getElementProps(nodeObject, viewManager);\n nodeObject.component = this.getElementToRender(module, props, nodeObject.name);\n\n // SSR\n const state = await this.processChildrenViewNames(nodeObject.state);\n this.handleController(props.viewController, state, nodeObject.config);\n }\n\n return Promise.resolve(nodeObject);\n };\n\n protected convertNodeToComponentNodeType = (node: HTMLElement) => ({\n component: null,\n config: this.getNodeAttribute(node, 'data-config'),\n name: this.getNodeAttribute(node, 'data-component') || '',\n node,\n state: this.getNodeAttribute(node, 'data-state')\n });\n\n public setDataPreloader = (preloader: ViewDataPreloader) => {\n this.preloader = preloader;\n };\n\n public getDataPreloader = () => {\n return this.preloader;\n };\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { emit, events } from '@estee/elc-service-bus';\nimport { Breakpoints } from '@estee/elc-base-theme';\nimport { TriggerType } from '@estee/elc-logging';\nimport { MOBILE_VERSION_SELECTOR, DESKTOP_VERSION_SELECTOR } from '@estee/elc-universal-utils';\nimport { removeAllNodesBySelector, cleanseDOM } from './utils/DOMCleanser';\nimport { ComponentRenderer, ComponentNodeType } from './renderers';\n\nconst COMPONENT_SELECTOR = '[data-component]';\n\ntype PrimiteTypes = number | boolean | object | null | string;\ninterface IComponentLoaded {\n shouldRender: boolean;\n config: PrimiteTypes | PrimiteTypes[];\n}\n\ninterface IComponentsLoaded {\n [key: string]: IComponentLoaded[];\n}\n\ninterface IRenderParams {\n component: React.ReactElement;\n node: HTMLElement;\n isSSR: boolean;\n name: string;\n}\n\nexport class BrowserComponentRenderer extends ComponentRenderer {\n private nodesToRenderList: Set = new Set([]);\n private isRenderReadyPromise: Promise;\n public isRenderReady = () => this.isRenderReadyPromise;\n\n protected getNodeAttribute = (node: HTMLElement, name: string) => node.getAttribute(name);\n\n protected isServiceViewNode = (element: HTMLElement): boolean =>\n element.matches(COMPONENT_SELECTOR);\n\n protected getServiceViewsFromNode = (node: HTMLElement) =>\n node.querySelectorAll(COMPONENT_SELECTOR) as NodeListOf;\n\n private isElement = (node: Node) => node.nodeType === Node.ELEMENT_NODE;\n\n private addNodeToRenderList = (nodes: Set, nodeToAdd: HTMLElement) => {\n if (!this.nodesToRenderList.has(nodeToAdd)) {\n nodes.add(nodeToAdd);\n this.nodesToRenderList.add(nodeToAdd);\n }\n };\n\n private removeNodeFromRenderList = (nodeToRemove: HTMLElement) => {\n if (this.nodesToRenderList.has(nodeToRemove)) {\n this.nodesToRenderList.delete(nodeToRemove);\n }\n };\n\n private processMutationRecord = (nodes: Set, record: MutationRecord) => {\n record.addedNodes.forEach((node: HTMLElement) => {\n if (this.isElement(node)) {\n const serviceViews = this.isServiceViewNode(node)\n ? [node]\n : this.getServiceViewsFromNode(node);\n\n serviceViews.forEach((view: HTMLElement) => this.addNodeToRenderList(nodes, view));\n }\n });\n\n // If a ServiceView is removed from DOM we need to remove also the reference to it\n record.removedNodes.forEach(this.removeNodeFromRenderList);\n\n return nodes;\n };\n\n private onHTMLChanged = async (records: MutationRecord[]) => {\n const addedNodes = records.reduce(this.processMutationRecord, new Set());\n\n await this.renderReactNodes([...addedNodes]);\n };\n\n private createMutationObserver = (callback: MutationCallback) => {\n if (typeof MutationObserver !== 'undefined') {\n return new MutationObserver(callback);\n }\n\n return null;\n };\n\n private watchRenderOutput() {\n const mutationObserverComponent = this.createMutationObserver(this.onHTMLChanged);\n if (mutationObserverComponent) {\n mutationObserverComponent.observe(document.body, {\n subtree: true,\n childList: true\n });\n }\n }\n\n private render = ({ component, node, isSSR, name }: IRenderParams) => {\n if (isSSR) {\n return new Promise((resolve, reject) => {\n try {\n ReactDOM.hydrate(component, node, resolve);\n } catch (error) {\n this.logger.error({\n message: `Failed to ssh render view ${name}`,\n triggerType: TriggerType.render,\n payload: {\n error\n }\n });\n reject(node);\n }\n });\n } else {\n return new Promise((resolve, reject) => {\n try {\n ReactDOM.render(component, node, resolve);\n } catch (error) {\n this.logger.error({\n message: `Failed to render view ${name}`,\n triggerType: TriggerType.render,\n payload: {\n error\n }\n });\n reject(node);\n }\n });\n }\n };\n\n private renderNode = async (node: HTMLElement) => {\n try {\n const componentNode = this.convertNodeToComponentNodeType(node);\n const nodeToRender: ComponentNodeType = await this.getComponentForNode(componentNode);\n\n if (nodeToRender.component) {\n const { component, state, name } = nodeToRender;\n\n const renderPromise = this.render({\n component,\n node: nodeToRender.node,\n isSSR: Boolean(state),\n name\n });\n\n return renderPromise;\n }\n } catch (error) {\n this.logger.error({\n triggerType: TriggerType.render,\n message: 'Error trying to render node',\n payload: {\n error\n }\n });\n }\n\n return Promise.resolve(node);\n };\n\n private renderReactNodes = async (nodes: Element[]) => {\n const renderedNodes = (await Promise.all(\n nodes.map(this.renderNode)\n )) as (null | HTMLElement)[];\n\n const pendingNodes = renderedNodes.filter(Boolean) as Element[];\n\n if (pendingNodes.length > 0) {\n this.setTimeoutRenderingNodes(pendingNodes);\n }\n\n return Promise.resolve();\n };\n\n private setTimeoutRenderingNodes = async (nodes: Element[]) => {\n setTimeout(async () => {\n await this.renderReactNodes(nodes);\n }, 250);\n };\n\n private renderLazyNode = (node: HTMLElement) => {\n if (!this.nodesToRenderList.has(node)) {\n this.nodesToRenderList.add(node);\n this.renderReactNodes([node]);\n }\n };\n\n private processMountPoints = async () => {\n const allNodes: NodeListOf = document.querySelectorAll(COMPONENT_SELECTOR);\n\n const toRenderNodes = [...allNodes].filter(this.shouldRenderNode);\n this.nodesToRenderList = new Set(toRenderNodes);\n\n await this.renderReactNodes(toRenderNodes);\n\n if (toRenderNodes.length < allNodes.length) {\n this.initLazyRenderer(this.renderLazyNode);\n }\n\n this.announceMountPoints([...allNodes]);\n };\n\n private announceMountPoints = (nodes: HTMLElement[]) => {\n const loadedComponents = nodes.reduce(\n (components: IComponentsLoaded, node: HTMLElement) => {\n try {\n const { component, config } = node.dataset;\n\n if (component) {\n components[component] = components[component] || [];\n\n components[component].push({\n shouldRender: this.nodesToRenderList.has(node),\n config: JSON.parse(config || '{}')\n });\n }\n } catch (error) {\n this.logger.error({\n triggerType: TriggerType.render,\n message: 'Failed parsing config',\n payload: {\n error\n }\n });\n }\n\n return components;\n },\n {} as IComponentsLoaded\n );\n\n emit(events.COMPONENTS_LOADED, loadedComponents);\n };\n\n private onDOMContentLoaded = () => {\n this.isRenderReadyPromise = this.processMountPoints();\n // Remove after SDFEFND-1853\n // ServiceViews up from 5.x doesn't depend on the Component Renderer anymore\n // We could remove the MutationObserver if we could upgrade all brands to use this newer version\n this.watchRenderOutput();\n };\n\n private cleanUpMarkup = () => {\n const isDesktop = window.matchMedia(`(min-width: ${Breakpoints.desktop}px)`).matches;\n if (isDesktop) {\n removeAllNodesBySelector(`.${MOBILE_VERSION_SELECTOR}`);\n cleanseDOM(`.${DESKTOP_VERSION_SELECTOR}`);\n } else {\n removeAllNodesBySelector(`.${DESKTOP_VERSION_SELECTOR}`);\n cleanseDOM(`.${MOBILE_VERSION_SELECTOR}`);\n }\n };\n\n public init = async () => {\n const isDocumentReady = ['complete', 'interactive'].includes(document.readyState);\n this.cleanUpMarkup();\n\n if (isDocumentReady) {\n this.onDOMContentLoaded();\n } else {\n await new Promise((resolve) =>\n document.addEventListener('DOMContentLoaded', () => {\n this.onDOMContentLoaded();\n resolve();\n })\n );\n }\n\n await this.isRenderReady();\n };\n}\n","import { root } from '@estee/elc-universal-utils';\nimport { debounceAsync } from '../utils/Debounce';\n\nexport interface ITranslationsCollection {\n [key: string]: string;\n}\n\nexport interface IConfigsCollection {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport class ViewDataPreloader {\n private translationsCache: ITranslationsCollection = {};\n private translationsFieldsToPreload: string[] = [];\n\n private configsCache: IConfigsCollection = {};\n private configFieldsToPreload: string[] = [];\n\n private getKeysFromObject(keys: string[], obj: IConfigsCollection | ITranslationsCollection) {\n const requestedObject: IConfigsCollection | ITranslationsCollection = {};\n\n const isKeyMissing: boolean = keys.some((key) => {\n const hasKeyInCache: boolean = obj.hasOwnProperty(key);\n if (hasKeyInCache) {\n requestedObject[key] = obj[key];\n }\n\n return !hasKeyInCache;\n });\n\n return !isKeyMissing ? requestedObject : null;\n }\n\n public getPreloadedConfigs = (fields: string[] = []) => {\n if (fields.length === 0) {\n return this.configsCache;\n }\n\n return this.getKeysFromObject(fields, this.configsCache);\n };\n\n public getPreloadedTranslations = (fields: string[] = []) => {\n if (fields.length === 0) {\n return this.translationsCache;\n }\n\n return this.getKeysFromObject(fields, this.translationsCache);\n };\n\n public addTranslations = (translations: ITranslationsCollection) => {\n this.translationsCache = {\n ...(this.translationsCache || {}),\n ...(translations || {})\n };\n };\n\n public registerTranslationFieldsToPreload = (fields: string[] = []) => {\n this.translationsFieldsToPreload = [\n ...new Set(this.translationsFieldsToPreload.concat(fields))\n ];\n this.preload();\n };\n\n public addConfigs = (configs: object) => {\n this.configsCache = {\n ...(this.configsCache || {}),\n ...(configs || {})\n };\n };\n\n public registerConfigFieldsToPreload = (fields: string[] = []) => {\n this.configFieldsToPreload = [...new Set(this.configFieldsToPreload.concat(fields))];\n this.preload();\n };\n\n public preload = debounceAsync(async () => {\n const translations = this.translationsFieldsToPreload;\n const configs = this.configFieldsToPreload;\n\n if (!this.getPreloadedTranslations(this.translationsFieldsToPreload)) {\n const trans = await root.GlobalServiceBus.query(\n 'get.translations',\n this.translationsFieldsToPreload\n );\n this.addTranslations(trans);\n this.translationsFieldsToPreload = this.translationsFieldsToPreload.filter(\n (tr) => !translations.includes(tr)\n );\n }\n if (!this.getPreloadedConfigs(this.configFieldsToPreload)) {\n const cfg = await root.GlobalServiceBus.query('get.config', this.configFieldsToPreload);\n this.addConfigs(cfg);\n this.configFieldsToPreload = this.configFieldsToPreload.filter(\n (cg) => !configs.includes(cg)\n );\n }\n }, 100);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\ntype AnyFn = (...rest: any[]) => Promise;\n\nexport const debounceAsync = (fn: AnyFn, ms: number) => (...args: any[]) => {\n let timer: any = null;\n\n if ('_timer_' in fn) {\n timer = (fn as any)._timer_;\n clearTimeout(timer.id);\n timer.id = setTimeout(timer.resolve, ms);\n\n return timer.promise;\n }\n\n timer = {\n promise: Promise.resolve(),\n resolve: () => {},\n id: null\n };\n timer.promise = new Promise((resolve, _) => {\n timer.resolve = () => {\n delete (fn as any)._timer_;\n resolve(fn(...args));\n };\n (timer as any).id = setTimeout(timer.resolve, ms);\n });\n (fn as any)._timer_ = timer;\n\n return timer.promise;\n};\n","/* eslint-disable no-restricted-syntax */\nimport { root, setupServiceInfo } from '@estee/elc-universal-utils';\nimport { BrowserComponentRenderer } from './BrowserComponentRenderer';\nimport { ViewDataPreloader } from './preloader/ViewDataPreloader';\n\nsetupServiceInfo(__serviceInfo__);\n\nif (root && !root.ComponentRenderer) {\n root.ComponentRenderer = new BrowserComponentRenderer();\n const preloader = new ViewDataPreloader();\n root.registerConfigFieldsToPreload =\n root.registerConfigFieldsToPreload || preloader.registerConfigFieldsToPreload;\n root.getPreloadedConfigs = root.getPreloadedConfigs || preloader.getPreloadedConfigs;\n root.registerTranslationFieldsToPreload =\n root.registerTranslationFieldsToPreload || preloader.registerTranslationFieldsToPreload;\n root.getPreloadedTranslations =\n root.getPreloadedTranslations || preloader.getPreloadedTranslations;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (root.ComponentRenderer as any).setDataPreloader(preloader);\n}\n\nexport { BrowserComponentRenderer };\n"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE_react_dom__","__WEBPACK_EXTERNAL_MODULE__estee_elc_service_bus__","__WEBPACK_EXTERNAL_MODULE__estee_elc_logging__","__WEBPACK_EXTERNAL_MODULE_react__","a","b","results","diffInternal","acc","base","property","Number","isNaN","Array","an","length","bn","equal","indexes","findMatchIndexes","anInner","bnInner","similar","concat","indexesInner","numberPulled","numberPushed","set","add","slice","rm","Date","getTime","Object","keyMap","merge","arrayToMap","keys","key","path","push","type","changeList","value","val","index","count","finalIndex","num","vals","values","compareFn","divergenceIndexA","divergenceIndexB","aSubMin","bSubMin","maxNForA","maxNForB","maxN","Math","max","n","newestA","newestB","j","elemA","elemB","tenPercent","notEqual","abs","keyLength","aKeys","bKeys","array","result","forEach","v","obj1","obj2","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","get","g","globalThis","this","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","MOBILE_VERSION_SELECTOR","DESKTOP_VERSION_SELECTOR","BrowserStorage","eraseCookie","name","document","cookie","setCookie","daysOrDate","expires","now","toUTCString","getCookie","nameEQ","ca","split","i","c","charAt","substring","indexOf","getItem","storageKey","console","error","setItem","removeItem","storagePolling","callBack","storageValue","setInterval","latestValue","Breakpoints","desktop","largeScreen","extraLargeScreen","cleanseDOM","selector","querySelectorAll","wrapper","replaceWith","childNodes","removeAllNodesBySelector","node","remove","initializeControllerForSSR","viewController","state","config","controller","viewState","setSSRState","setStateInController","setId","setControllerId","global","serviceName","fallback","serviceInfo","version","ErrorBoundary","constructor","props","super","logger","ELCLogger","buid","environment","serviceVersion","static","componentDidCatch","triggerType","TriggerType","message","payload","context","serviceRegistry","render","children","LazyRenderer","ALLOWED_PIXELS","pendingNodes","Set","updateViewHeight","viewHeight","documentElement","clientHeight","innerHeight","isInViewport","customMargin","bottom","top","getBoundingClientRect","isBottomVisible","isTopVisible","isHigherThanViewHeight","getRenderMethodStrategy","getNodeAttribute","getRenderConfig","isNodeInViewport","parent","parentNode","onDemandRenderOffset","JSON","parse","isObserved","isNodeSkeleton","classList","some","className","includes","hasSkeletonsAsSiblings","checkNextSibling","currentNode","nextElementSibling","previousElementSibling","isSkeleton","hasOnlySkeletons","hasNextSibling","Boolean","nextSibling","hasPreviousSibling","previousSibling","isNextSiblingSkeletonOnly","shouldRenderNode","initLazyRenderer","onNodeDisplay","intersectionObserver","IntersectionObserver","entry","target","isServiceView","isServiceViewNode","serviceViewNode","getServiceViewsFromNode","isIntersecting","nodes","_","isSameNode","delete","unobserve","size","disconnect","rootMargin","threshold","pendingNode","height","style","minHeight","hasSkeletons","observe","ComponentRenderer","preloader","handleEventsFromProps","parsedConfig","filter","configKey","reduce","eventHandlers","args","event","CustomEvent","detail","cancelable","bubbles","dispatchEvent","getConfig","component","configs","preload","getPreloadedConfigs","getElementProps","viewManager","controllerFromView","fnProps","parentMountPointNode","getElementToRender","registeredComponent","viewName","handleController","parseState","parsedState","processChildrenViewNames","nodeState","childrenViewNames","Promise","all","map","loadComponent","join","getComponentForNode","nodeObject","resolve","convertNodeToComponentNodeType","setDataPreloader","getDataPreloader","COMPONENT_SELECTOR","BrowserComponentRenderer","nodesToRenderList","isRenderReady","isRenderReadyPromise","getAttribute","element","matches","isElement","nodeType","Node","ELEMENT_NODE","addNodeToRenderList","nodeToAdd","has","removeNodeFromRenderList","nodeToRemove","processMutationRecord","record","addedNodes","view","removedNodes","onHTMLChanged","records","renderReactNodes","createMutationObserver","callback","MutationObserver","isSSR","reject","renderNode","componentNode","nodeToRender","setTimeoutRenderingNodes","setTimeout","renderLazyNode","processMountPoints","allNodes","toRenderNodes","announceMountPoints","loadedComponents","components","dataset","shouldRender","emit","events","onDOMContentLoaded","watchRenderOutput","cleanUpMarkup","matchMedia","init","isDocumentReady","readyState","addEventListener","mutationObserverComponent","body","subtree","childList","ViewDataPreloader","fn","ms","translationsCache","translationsFieldsToPreload","configsCache","configFieldsToPreload","fields","getKeysFromObject","getPreloadedTranslations","addTranslations","translations","registerTranslationFieldsToPreload","addConfigs","registerConfigFieldsToPreload","trans","tr","cfg","cg","timer","_timer_","clearTimeout","id","promise","requestedObject","hasKeyInCache","rest","setupServiceInfo"],"sourceRoot":""}