jamespot-react-core 1.2.62 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"818.3f23be9d7323f83e9353.chunk.js","mappings":"+mBAOA,MAAMA,EAAU,IAAyBC,iBAAiB,QACpDC,EAAY,IAAyBD,iBAAiB,aAItDE,EAAK,QAAW;MAChB,EAAAC;EAGOC,EAAUC,IACnB,MAAMC,GAAQ,IAAAC,YACRC,GAAO,IAAAC,WACPC,GAAgB,QAAe,KAAQC,UAAUC,qBAEvD,OAAIP,EAAMQ,MAAQH,GAAeG,KAEzB,iCACI,SAACd,EAAO,CACJe,KAAM,eACNC,KAhBE,GAgBKV,EAAMU,MAAQ,GACrBC,MAAOV,EAAMU,MAAMC,QACnBC,QAAS,YAEb,SAAChB,EAAE,UAAEM,EAAKW,cAAc,CAAEC,GAAI,yBAKnC,SAACnB,EAAS,IAAKI,KC3BpBgB,EAAa,IAAyBrB,iBAAiB,WACvDsB,EAAkB,IAAyBtB,iBAAiB,gBAC5DuB,EAAiB,IAAyBvB,iBAAiB,eAC3DwB,EAAgB,IAAyBxB,iBAAiB,cAC1DyB,EAAa,IAAyBzB,iBAAiB,WACvD0B,EAAgB,IAAyB1B,iBAAiB,cAS1D2B,EAAkB,OAAU;;;;;EAOrBC,EAAa,KAA+B;;;;;;;;;aAS3CvB,GAAUA,EAAMC,MAAMU,MAAMa;wBACjBxB,GAAUA,EAAMC,MAAMU,MAAMc;wBAC5BzB,GAAUA,EAAMC,MAAMU,MAAMa;mBACjCxB,GAAWA,EAAM0B,QAAU,QAAU;;EAI5CC,EAAW,EAA4BC,WAAUC,QAzBhD,MA0BV,MAAM1B,GAAO,IAAAC,WACPH,GAAQ,IAAAC,aACP4B,EAAaC,IAAgB,IAAAC,WAAS,GAE7C,OACI,iCACI,UAAChB,EAAU,WACN,IAAIY,GAAUK,OAAO,EAAGJ,GAAOK,IAAI,CAACC,EAAMC,KACvC,SAACb,EAAU,CAACG,QAAmB,IAAVU,EAAaC,KAAMF,EAAKG,KAAMC,OAAQ,SAAQ,UAC/D,SAACnB,EAAU,CAACoB,iBAA4BC,IAAfN,EAAKO,MAAsB,IAAMP,EAAKO,MAAOC,SAAS,OAAM,UACjF,SAAC5C,EAAM,CACHS,IAAK2B,EAAK3B,IACVE,KAAM,EACNG,QAAQ,SACR+B,IAAI,QACJC,UAAWV,EAAKW,aAAe,EAAAC,MAAMC,KAAKC,eAAed,EAAKW,mBAAgBL,EAC9ES,WAAS,OARqDf,EAAKpB,KAalFa,EAASuB,OAAStB,IACf,UAACN,EAAU,CAAC6B,QAAS,IAAMrB,GAAa,GAAOL,SAAS,EAAI,cACtDE,EAASuB,OAAStB,QAI/BD,EAASuB,OAAStB,IACf,SAACX,EAAc,CACXmC,aAAc,IAAMtB,GAAa,GACjCuB,2BAAyB,EACzBC,KAAMzB,EACNjB,QAAS,eACT2C,UAAW,QAAO,UAClB,SAACvC,EAAe,CACZyB,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,oBAChC0C,SAAU,SACVC,iBAAkB,IAAM3B,GAAa,GAAM,UAC3C,SAACT,EAAe,UACXM,EAASM,IAAI,CAACC,EAAMwB,KACjB,UAAC3C,EAAU,CAAuB4C,EAAG,SAAUC,IAAK5D,EAAM6D,MAAMC,EAAC,WAC7D,SAAChE,EAAM,CAACW,KAAM,EAAGF,IAAK,GAAG2B,EAAK6B,QAAQ7B,EAAKpB,QAC3C,SAACI,EAAa,CAACkB,KAAM,GAAGF,EAAK6B,QAAQ7B,EAAKpB,KAAI,UAC1C,SAACM,EAAa,UAAEc,EAAKO,YAHZ,YAAYiB,gB,sBC/E7D,MAAMM,EAAY,IAAyBtE,iBAAiB,UACtD,EAAkB,IAAyBA,iBAAiB,gBAC5D,EAAiB,IAAyBA,iBAAiB,eAC3D,EAAgB,IAAyBA,iBAAiB,cAE1DuE,EAAc,OAAU;eACdlE,GAAUA,EAAMC,MAAM6D,MAAMK;EAatCC,EAAgC,CAClCC,cAAU5B,EACV6B,SAAS,EACTC,WAAO9B,GAGE+B,EAAU,EAAGC,YACtB,MAAMtE,GAAO,IAAAC,YACNiE,EAAUK,IAAe,IAAA1C,UAAuBoC,GACjDnE,GAAQ,IAAAC,YAERyE,GAAgB,IAAAC,aACjBH,IACGC,EAAYN,GACZ,QACKS,gBAAgB,CAAEC,KAAML,EAAMK,KAAMC,SAAUN,EAAMO,aACpDC,KAAMZ,IACH,GAAIA,EAASE,MAQT,YAPAG,EAAY,CACRH,MAAO,GAAGpE,EAAKW,cAAc,CAAEC,GAAI,wBAC/BsD,EAASa,UAAY,KAAOb,EAASa,WAEzCZ,SAAS,EACTD,cAAU5B,IAIlB,MAAM0C,EAAed,EAASe,OAAON,KACrCJ,EAAY,CACRH,WAAO9B,EACP6B,SAAS,EACTD,SAAUc,MAGjBE,MAAOC,IACJZ,EAAY,CACRH,MAAOpE,EAAKW,cAAc,CAAEC,GAAI,sBAChCuD,SAAS,EACTD,cAAU5B,OAI1B,CAACtC,IASL,OANA,IAAAoF,WAAU,KACFd,GAASA,EAAMK,KAAKU,OAAOrC,OAAS,GACpCwB,EAAcF,IAEnB,CAACA,EAAOE,KAGP,SAAC,EAAc,CACXc,OAAQxF,EAAMwF,OAAOC,aACrBnC,OAAQkB,EACRpB,aAAc,KACVoB,GAAOkB,UACV,UACD,SAAC,EAAe,CACZlC,SAAS,SACTmC,QAAS,CACL,CACIC,SAAU1F,EAAKW,cAAc,CAAEC,GAAI,qBACnC+E,aAAc,KACVrB,GAASE,EAAcF,KAG/B,CACIoB,SAAU1F,EAAKW,cAAc,CAAEC,GAAI,sBACnC+E,aAAc,IAAMzB,EAASA,UAAYI,GAAOsB,QAAQ1B,EAASA,WAErE,CACIwB,SAAU1F,EAAKW,cAAc,CAAEC,GAAI,kBACnC+E,aAAc,IAAMrB,GAAOkB,WAGnCK,QAAM,YACN,UAAC9B,EAAW,WACPG,EAASC,UACN,iCACI,SAACL,EAAS,KACV,SAAC,EAAa,CAACgC,MAAM,SAAQ,SACxB9F,EAAKW,cAAc,CAAEC,GAAI,6BAIpCsD,EAASC,SAAWD,EAASE,QAAS,uBAAIF,EAASE,SACnDF,EAASC,SAAWD,EAASA,WAAY,uBAAIA,EAASA,mB,sBC/F5E,MAAM6B,EAAmB,EAAAC,GAAG;;;;;EAOtBC,EAAY,OAAiC;MAC7C,EAAGC,aAAcA,GAAWH;EAG5BI,EAAO,QAAkC;MACzC,EAAGD,aAAcA,GAAWH;EA0B5BK,GAAU,IAAAC,YAvBI,CAChBxG,EAMAyG,IAEOzG,EAAM0G,UACT,SAACJ,EAAI,CACDD,QAASrG,EAAMqG,QACfK,SAAU1G,EAAM0G,SAChBD,IAAKA,EAA2B,UACvBzG,EAAM2G,OAAM,SACpB3G,EAAM6F,YAGX,SAACO,EAAS,CAACC,QAASrG,EAAMqG,QAASI,IAAKA,EAA0B,UAAWzG,EAAM2G,OAAM,SACpF3G,EAAM6F,YAMbe,EAAkB,OAAiC;MAClD5G,GACCA,EAAMqG,SACN;EA4HKQ,GAAc,IAAAL,YA5FN,EACfM,YAAW9G,GACbyG,KAEA,MAAMM,GAAU,IAAAC,QAAyC,OAElDC,EAAeC,IAAiB,EAAAC,EAAA,IAAenH,EAAMoH,OAAQpH,EAAMgE,KAAMhE,EAAMqH,iBAC/EC,EAAQC,IAAa,IAAAvF,WAAS,IAE/B,aAAEwF,EAAY,QAAEC,EAAO,MAAEC,KAAUC,IAAW,IAAAC,SAAQ,CACxDV,cAAe,IACRA,KACAlH,EAAMkH,eAEbW,aAAc,SAGlB,IAAAtC,WAAU,KACFuB,IAAWQ,IACXR,EAAOa,GACPJ,GAAU,KAEf,CAACT,EAAQa,EAAQL,IAEpB,MAAMQ,GAAwB,IAAAlD,aACzBmD,IACG,MAAMC,EAAa,CAAC,EAkBpB,OAjBAC,OAAOC,KAAKH,GAAQI,QAASC,IACzB,MAAMC,EAASpB,EAAcqB,KAAMC,GAAMA,EAAE9H,OAAS2H,IAAIC,OACxD,OAAQA,GAAQrE,MACZ,IAAK,WACDgE,EAAMI,GAAKL,EAAOK,GAAGlG,IAAKsG,GAA4BA,EAAEhI,KAAKiI,KAAK,KAClE,MACJ,IAAK,WACDT,EAAMI,GAAKL,EAAOK,GAAGlG,IAAKsG,GAAWA,EAAE9F,OAAO+F,KAAK,KACnD,MACJ,IAAK,SACDT,EAAMI,GAAKL,EAAOK,GAAK,IAAM,IAC7B,MACJ,QACIJ,EAAMI,GAAKL,EAAOK,MAIvBJ,GAEX,CAACf,IAuBL,OApBA,IAAAyB,qBACIjC,EACA,KAAM,IACCkB,EACHH,eACAC,UACAC,MAAO,KAEHX,GAAS4B,SAASC,SAAS,EAAG,GAE9BlB,KAEJmB,mBAAoB,IACTf,EAAsBH,EAAOmB,eAI5C,KAIA,UAACvC,EAAO,CACJI,OAAQ3G,EAAM2G,OACdN,QAASrG,EAAMqG,QACfK,SAAU1G,EAAM0G,SAAWc,EAAaxH,EAAM0G,eAAYjE,EAC1DgE,IAAKM,EAAO,WACZ,UAACH,EAAe,CAACP,QAASrG,EAAMqG,QAAO,UAClCY,EAAc/E,IAAI,EAAG6G,WAAUC,MAC5B,SAACD,EAAK,CAEFtB,QAASA,KACLuB,EACJrC,OAAQ,GAAG3G,EAAM2G,UAAUqC,EAAKvI,OAChCwI,SAAUjJ,EAAMiJ,UAJXD,EAAKvI,OAOjBT,EAAMkJ,aAAelJ,EAAMkJ,YAAYzB,MAE3CzH,EAAM4F,a,aCzKnB,MAAMuD,EAAY,IAAyBxJ,iBAAiB,aACtDyJ,EAAS,IAAyBzJ,iBAAiB,UACnD0J,EAAO,IAAyB1J,iBAAiB,QACjD2J,EAAa,IAAyB3J,iBAAiB,cACvD4J,EAAW,IAAyB5J,iBAAiB,uBACrD6J,EAAa,IAAyB7J,iBAAiB,cAEvD,EAAY,OAAU;;;WAGjB,EAAGM,WAAYA,EAAM6D,MAAMK;EAGhCsF,EAAiB,OAAU;;WAEtB,EAAGxJ,WAAYA,EAAM6D,MAAMK;;wBAEd,EAAGlE,WAAYA,EAAMU,MAAM+I;wBAC3B,EAAGzJ,WAAYA,EAAMU,MAAMgJ;qBAC9B,EAAG1J,WAAYA,EAAMS,KAAKkJ;eAChC,EAAG3J,WAAYA,EAAM6D,MAAMK;EAGpC0F,EAAiB,OAAU;;;WAGtB,EAAG5J,WAAYA,EAAM6D,MAAM8F;EAUzBE,EAAiB,EAAGC,UAASC,YAAWC,aAAYC,iBAC7D,MAAM/J,GAAO,IAAAC,WACP2G,GAAU,IAAAC,QAAuB,MACjCmD,GAAW,WACV5G,EAAM6G,IAAW,IAAApI,WAAS,IAC1BqI,EAASC,IAAc,IAAAtI,aACvBuI,EAASC,IAAc,IAAAxI,aACvByI,EAAgBC,IAAqB,IAAA1I,WAAS,IAC9C2I,EAAeC,IAAoB,IAAA5I,WAAS,GAC7C6I,GAAkB,WAExB,IAAAtF,WAAU,KACNuF,QAAQC,IAAI,CACR,WACI,MAAMC,QAAY,YAAaC,IAC3B,CAAEC,UAAWlB,GACb,CAAEmB,OAAQN,EAAgBM,OAAQC,OAAQ,aAE9Cd,EAAWU,EAAI5F,OAClB,EAND,GAOA,WACI,GAAI8E,EAAY,CACZ,MAAMc,QAAY,YAAaK,YAC3B,CAAEH,UAAWlB,GACb,CACIoB,OAAQ,WACRD,OAAQN,EAAgBM,SAGhCX,EAAWQ,EAAI5F,OAAOkD,KAAMC,GAAMA,EAAE/H,MAAQ0J,GAChD,CACH,EAXD,KAYDjF,KAAK,KACJyF,GAAkB,MAEvB,CAACG,EAAiBb,EAAWE,IAEhC,MAAMoB,GAAa,IAAA1G,aAAY,KAC3BwF,GAAQ,GACRL,KACD,CAACA,IAEEwB,GAAS,IAAA3G,aACVpC,IACQA,GAAagD,QAKdoF,GAAiB,GACjB,kBACKY,aAAa,CACVhL,IAAK0J,GAAcD,EACnBzH,YAAaA,IAEhByC,KAAK,KACFkF,EAAS,KAAMsB,QAAQC,QAAQ,CAAEC,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,wBACjEuK,MAEHjG,MAAOuG,IACJ,KAAMH,QAAQlH,MAAM,CAAEoH,MAAOC,EAAE1G,UAAY,iBAC3C0F,GAAiB,MAhBzBT,EACI,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,yCAmBlE,CAACkJ,EAAYqB,EAAYpB,EAAYC,EAAUhK,IAG7C0L,GAAa,IAAAjH,aACf,EAAGpC,kBACC+I,EAAO/I,IAEX,CAAC+I,IAGL,OACI,SAACpC,EAAS,CACNzG,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,oBAChCwC,KAAMA,EACNF,aAAciI,EACd5E,SAAUoF,SAAYP,EAAOxE,EAAQ4B,SAASG,YAAYtG,aAC1Dc,2BAAyB,EACzBE,UAAW,QACXoC,QAAS,CACL,CACIC,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,kBAC/BJ,MAAO,SACPmF,aAAcwF,GAElB,CACIzF,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,gBAC/B+E,aAAc,IAAMyF,EAAOxE,EAAQ4B,SAASG,YAAYtG,aACxD7B,MAAO,QACP2D,QAASqG,IAEhB,SACAF,GACG,SAACrB,EAAM,CAAC1I,KAAM,OAEd,UAAC,EAAS,YACN,UAAC+I,EAAc,YACX,SAACJ,EAAI,CAAC5I,KAAMyJ,EAAa,eAAiB,YAAaxJ,KAAM,GAAIG,QAAS,YAC1E,UAACgJ,EAAc,YACX,SAACP,EAAU,CAACzI,QAASqJ,EAAa,KAAO,KAAI,UACzC,SAACX,EAAQ,CAACoC,MAAOtB,GAAS3H,MAAOS,OAAQ,OAE5CoH,IACG,UAACjB,EAAU,WACNnJ,EAAKW,cAAc,CAAEC,GAAI,oBAAsB,KAChD,SAACyI,EAAU,CAACnH,KAAMkI,GAASyB,MAAM1J,KAAI,SAAGiI,GAASyB,MAAMtJ,kBAKvE,SAACmE,EAAW,CAACJ,IAAKM,EAASK,OAAQ,CAAC,eAAgBpD,KAAK,gBAAgB0C,SAAUmF,U,kCC5JvG,MCFaI,GAAyB,OAAU;;;;;;EAQnCC,GAAkB,OAAkC;wBACxClM,GAAUA,EAAMC,MAAMU,MAAM+I;;;;;eAKrC1J,GAAWA,EAAMmM,UAAY,IAAM;sBAC5BnM,GAAWA,EAAMmM,UAAY,MAAQ;;;;;;;;;;;;;;;;;;EAoB/CC,GAAkB,OAA6C;wBACnDpM,GAAUA,EAAMC,MAAMU,MAAMC;cACtCZ,GAAWA,EAAMuD,KAAOvD,EAAMqM,OAAS;;;;;;;;EAUzCC,GAAuB,OAAgC;;;;;;MAM7DtM,GAAUA,EAAMuM,QAAU;EAGpBC,GAAe,OAAU;;;;;;aAMxBxM,GAAUA,EAAMC,MAAMU,MAAMC;;4BAEbZ,GAAUA,EAAMC,MAAMU,MAAMgJ;;EAI5C8C,GAAgB,UAAyF;;;eAGtGzM,GAAWA,EAAM0M,eAAiB,YAAc;;;wBAGvC1M,GAAUA,EAAMC,MAAMU,MAAMgM;;oCAEhB3M,GAAwB,GAAdA,EAAMoC;eACrCpC,GAAWA,EAAMuD,KAAO,EAAI;;;;MAIrCvD,GAAUA,EAAM4M,MAAQ;MACxB5M,GAAUA,EAAM0M,gBAAkB;MAClC1M,IAAWA,EAAM0M,gBAAkB;;4BAEb1M,GAAUA,EAAMC,MAAMU,MAAMgJ;;;OAGnD,IAAAkD;EAGOC,GAAO,OAAyD;;sBAEtD9M,GAA+B,QAApBA,EAAM+M,UAAsB,MAAQ;mBAClD/M,GAA+B,QAApBA,EAAM+M,UAAsB,SAAW;uBAC9C/M,GAA+B,QAApBA,EAAM+M,UAAsB,aAAe;;MAEvE/M,GAAUA,EAAM6D,KAAO,OAAO7D,EAAM6D;ECnFrCmJ,GAAY,IAAyBrN,iBAAiB,UACtD,GAAiB,IAAyBA,iBAAiB,eAC3D,GAAkB,IAAyBA,iBAAiB,gBAC5D,GAAa,IAAyBA,iBAAiB,WACvDsN,GAAgB,IAAyBtN,iBAAiB,cAOnDuN,GAAa,EACtBC,OACAC,OACAvH,WACAwH,YAAY,UACZC,eAQA,MAAOC,EAAQnD,IAAW,IAAApI,WAAkB,GACtCwL,ECvCH,SAA2BH,GAC9B,OAAQA,GACJ,IAAK,uBACD,MAAO,CAAC,KAAOI,WAAW,EAAAC,YAAYC,cAAe,KAAOF,WAAW,EAAAC,YAAYE,gBACvF,IAAK,UACD,MAAO,CACH,KAAOH,WAAW,EAAAC,YAAYG,WAC9B,KAAOJ,WAAW,EAAAC,YAAYI,UAC9B,KAAOL,WAAW,EAAAC,YAAYK,cAEtC,QACI,MAAO,CACH,KAAON,WAAW,EAAAC,YAAYC,cAC9B,KAAOF,WAAW,EAAAC,YAAYM,aAC9B,KAAOP,WAAW,EAAAC,YAAYO,cAC9B,KAAOR,WAAW,EAAAC,YAAYE,eAC9B,KAAOH,WAAW,EAAAC,YAAYQ,eAC9B,KAAOT,WAAW,EAAAC,YAAYS,mBAC9B,KAAOV,WAAW,EAAAC,YAAYI,WAG9C,CDkBoBM,CAAkBf,GAC5BlN,GAAO,IAAAC,WAEPiO,EAA4B,CAC9B9K,KAAMgK,EACNe,SAAU,cACVzN,QAAS,cACTwC,aAAc,IAAM+G,GAAQ,IAG1BhH,EAAW3C,IACb6M,EAAS,KAAOiB,QAAQ9N,IACxB2J,GAAQ,IAEZ,OACI,iCACI,SAAC,GAAc,IAAKiE,EAAI,UACpB,SAAC,GAAe,CACZ3K,iBAAkB2K,EAAKhL,aACvBuC,QACa,YAATuH,EACM,CACI,CACItH,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,iBAC/BJ,MAAO,SACPmF,aAAc,IAAMsE,GAAQ,UAGpC3H,EAEVC,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,mBAAmB,SACzC,YAAToM,GACG,SAACb,GAAoB,CAACC,QAAM,WACvBiB,EAAQtL,IAAI,CAACmG,EAAQjG,KAClB,SAACqK,GAAa,CAEVlJ,MAAM,EACNqJ,MAAI,EACJF,gBAAc,EACdtK,MAAOA,EACPgB,QAAS,IAAMA,EAAQiF,EAAO5H,MAAK,UACnC,UAACqM,GAAI,CAACC,UAAW,MAAOlJ,IAAK,GAAE,WAC3B,gBAAK2K,IAAKnG,EAAOoG,OACjB,UAAC3B,GAAI,CAACC,UAAW,SAAQ,WACrB,wBAAK5M,EAAKW,cAAc,CAAEC,GAAIsH,EAAOsD,WACrC,uBAAIxL,EAAKW,cAAc,CAAEC,GAAIsH,EAAO7F,uBAVvC6F,EAAO5H,UAiBxB,SAACwL,GAAsB,UAClBuB,EAAQtL,IAAI,CAACmG,EAAQjG,KAEd,UAAC8J,GAAe,CAEZ9I,QAAS,IAAMA,EAAQiF,EAAO5H,MAC9B0L,UAAW9D,EAAO8D,UAAS,WAC3B,gBAAKqC,IAAKnG,EAAOoG,OACjB,gBAAKC,UAAU,gBAAe,SAAEvO,EAAKW,cAAc,CAAEC,GAAIsH,EAAOsD,YAJ3DvJ,UAYvB,WAAT+K,GAAqBtH,GAAW,gBAAKzC,QAAS,IAAMgH,GAAQ,GAAK,SAAGvE,KAAkB,wBAC7E,WAATsH,GAA8B,SAATC,GAClB,SAACJ,GAAS,CAAC5J,QAAS,IAAMgH,GAAQ,GAAOvJ,QAAS,WAAY8N,SAAU,OAAM,SACzExO,EAAKW,cAAc,CAAEC,GAAI,yBAG9B,wBAEM,YAAToM,GAA+B,SAATC,GACnB,SAACnB,GAAsB,UAClBuB,EAAQtL,IAAI,CAACmG,EAAQjG,KAEd,UAAC8J,GAAe,CAEZ9I,QAAS,IAAMA,EAAQiF,EAAO5H,MAC9B0L,UAAW9D,EAAO8D,UAAS,WAC3B,gBAAKqC,IAAKnG,EAAOoG,OACjB,gBAAKC,UAAU,gBAAe,SAAEvO,EAAKW,cAAc,CAAEC,GAAIsH,EAAOsD,YAJ3DvJ,OAUrB,wBAEM,YAAT+K,GAA+B,SAATC,GAAkB,SAACwB,GAAiB,CAACpB,QAASA,EAASpK,QAASA,KAAc,wBAC3F,YAAT+J,GAA+B,SAATC,GACnB,SAACyB,GAAiB,CACdzL,QAAS,KACLgH,GAAQ,OAIhB,4BAUVwE,GAAoB,EACtBpB,UACApK,cAKA,MAAOG,EAAMgK,IAAU,IAAAvL,WAAS,GAC1B7B,GAAO,IAAAC,WAEP0O,GAAa,IAAAC,SAAQ,IAbhB,GAcAC,KAAKC,KAAKzB,EAAQrK,OAAS,GAfpB,GAEA,GAcf,CAACqK,IAEJ,OACI,+BACI,UAACpB,GAAe,CAAC7I,KAAMA,EAAM8I,OAAQyC,EAAU,WAC3C,SAACtC,GAAY,CAACpJ,QAAS,IAAMmK,GAAQhK,GAAK,SACrCpD,EAAKW,cAAc,CAAEC,GAAI,yBAE9B,SAACuL,GAAoB,UAChBkB,EAAQtL,IAAI,CAACmG,EAAQjG,KAEd,UAACqK,GAAa,CAEVlJ,KAAMA,EACNnB,MAAOA,EACPgB,QAAS,IAAMA,EAAQiF,EAAO5H,MAAK,WACnC,gBAAK+N,IAAKnG,EAAOoG,MAChBtO,EAAKW,cAAc,CAAEC,GAAIsH,EAAOsD,UAL5BtD,EAAO5H,eAetCoO,GAAoB,EAAGzL,cACzB,MAAMjD,GAAO,IAAAC,WACb,OACI,+BACI,SAAC,GAAU,CAACoC,YAAarC,EAAKW,cAAc,CAAEC,GAAI,uBAAuB,UACrE,SAACkM,GAAa,CACViC,GAAI,QACJC,QAAS,QACTxO,MAAO,QACPyO,SAAU,GACVhM,QAAS,KACLA,KAEJiM,KAAM,wBEzMbC,GAAmB,KAO5B,MAAMnP,GAAO,IAAAC,YACNmD,EAAM6G,IAAW,IAAApI,WAAS,IAC1BuN,EAAQC,IAAa,IAAAxN,YAS5B,MAAO,CACHuB,OACAkM,SAAWjH,IACP+G,GAAQG,YAAY,cAAc,EAAOlH,IAE7CmH,MAAO,IAAMvF,GAAQ,GACrBwF,KAdQ,IAAAb,SACR,IACI,EAAAc,2BAA2BC,SAAUC,IACjCP,EAAUO,GACV3F,GAAQ,IACTjK,GACP,CAACA,IASD6P,UAAU,I,kCCrBlB,MAAMC,GAAe,IAAyBtQ,iBAAiB,aAElDuQ,GAAkB,EAAGC,aAC9B,MAAMhQ,GAAO,IAAAC,WACP+J,GAAW,UACXiG,GAAqB,QACtBC,GAAU,KAAO/P,UAAUgQ,aAAaD,EAAOF,IAASzN,MACzD,GAAA6N,eAGE,QAAE9I,EAAO,MAAE+I,IAAU,IAAA5I,SAAQ,CAC/BV,cAAe,CAAEuJ,YAAaL,GAC9BvI,aAAc,QAUlB,OAPA,IAAAtC,WAAU,KACN,MAAMmL,EAAeF,EAAOG,IACxBxG,EAAS,KAAOyG,MAAMnF,QAAQoF,oBAAoB,CAAEV,SAAQzN,MAAOiO,EAAKF,iBAE5E,MAAO,IAAMC,EAAaI,eAC3B,CAACN,EAAOrG,EAAUgG,KAGjB,SAACF,GAAY,CACTxP,KAAM,cACNgH,QAASA,EACTsJ,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,iBACtCiQ,MAAM,OACNC,OAAO,OC3Bb,GAAY,IAAyBtR,iBAAiB,UACtD,GAAiB,IAAyBA,iBAAiB,eAC3D,GAAkB,IAAyBA,iBAAiB,gBAC5D,GAAgB,IAAyBA,iBAAiB,cAEnDuR,GAAiB,OAAU;eACxBlR,GAAUA,EAAMC,MAAM6D,MAAMK;;;EAK/BgN,GAAsB,OAAU;;;;WAIjCnR,GAAUA,EAAMC,MAAM6D,MAAM8F;eACxB5J,GAAUA,EAAMC,MAAM6D,MAAM8F;+BACZ5J,GAAUA,EAAMC,MAAMU,MAAMgM;EAG/CyE,GAA2B,OAAU;;;;;;EAQrCC,GAA6B,OAAU;;WAExCrR,GAAUA,EAAMC,MAAM6D,MAAM8F;EAG3B0H,GAAmB,EAC5BnB,SACA1P,OACA8Q,uBAMA,MAAMpH,GAAW,UACXhK,GAAO,IAAAC,YACNmN,EAAQiE,IAAa,IAAAxP,WAAkB,GAExCyP,GAAgB,IAAA7M,aAAY,KAC9BuF,EACI,KAAayG,MAAMnF,QAAQiG,eAAe,CACtCvB,SACA1P,OACA0M,KAAM,WAGf,CAACgD,EAAQhG,EAAU1J,IAEhBkR,GAAqB,IAAA/M,aAAY,KACnCuF,EAAS,KAAOyG,MAAMnF,QAAQmG,YAAY,CAAEzB,aAC7C,CAACA,EAAQhG,IAEZ,OACI,iCACI,UAACgH,GAAmB,YAChB,SAACC,GAAwB,WACrB,SAAClB,GAAe,CAACC,OAAQA,OAE7B,UAACkB,GAA0B,YACvB,SAAC,GAAa,CACVhC,KAAK,cACLH,GAAI,QACJC,QAAS,QACTxO,MAAO,QACPyO,SAAU,GACVhM,QAASmO,GAAoBE,EAC7B/O,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,oCAEpC,SAAC,GAAa,CACVsO,KAAK,aACLH,GAAI,QACJC,QAAS,QACTxO,MAAO,QACPyO,SAAU,GACVhM,QAAS,IAAMoO,GAAU,GACzB9O,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,4CAI3CwM,IACG,UAAC,GAAc,CAACjK,2BAA2B,EAAMC,KAAMgK,EAAQlK,aAAc,IAAMmO,GAAU,GAAM,WAC/F,SAAC,GAAe,CACZ/N,SAAU,SACVf,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,yBAChC2C,iBAAkB,IAAM8N,GAAU,GAAM,SACvCrR,EAAKW,cAAc,CAAEC,GAAI,yCAE9B,SAACmQ,GAAc,WACX,SAAC,GAAS,CAACvF,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,mBAAqBqC,QAASuO,aClG3FE,GAAU,IAAyBlS,iBAAiB,QAE7CmS,GAAiB,OAAU;eACxB9R,GAAUA,EAAMC,MAAM6D,MAAMK;+BACZnE,GAAUA,EAAMC,MAAMU,MAAMgM;EAG/CoF,GAAc,EAAG5B,aAC1B,MAAM6B,GAAgB,QAAgB3B,GAAU,KAAO/P,UAAUgQ,aAAaD,EAAOF,GAAS,GAAAI,cACxFtQ,GAAQ,IAAAC,YACR+R,GAAS,QAAgB5B,GAAU,KAAO/P,UAAU4R,uBAAuB7B,EAAOF,GAAS,GAAAI,cAE3F4B,GAAgB,IAAApD,SAAQ,KACnB,CACHpO,MAAOsR,GAAUA,EAAc,MAAIG,OAAOH,EAAc,OAAKhS,EAAMU,MAAM0R,MACzEC,gBACIL,GAAUA,EAAO,oBAAsBG,OAAOH,EAAO,qBAAuBhS,EAAMU,MAAMa,MAC5F+Q,SAAUN,GAAUA,EAAO,aAAe,GAAGA,EAAO,iBAAmB,OACvEO,WAAYP,GAAUA,EAAO,eAAiBG,OAAOH,EAAO,gBAAkB,SAC9EQ,UAAWR,GAAUA,EAAO,cAAgBG,OAAOH,EAAO,eAAiB,SAEhF,CAACA,EAAQhS,IAENyC,GAAQ,IAAAqM,SAAQ,IACXiD,GAAgD,iBAAxBA,EAActP,OAAqD,IAA/BsP,EAActP,MAAMS,OACjF6O,EAActP,WACdD,EACP,CAACuP,IAEJ,OAAKtP,GAGD,SAACoP,GAAc,CACXY,MAAO,CACH/R,MAAOwR,EAAcxR,MACrB2R,gBAAiBH,EAAcG,gBAC/BC,SAAUJ,EAAcI,SACxBC,WAAYL,EAAcK,WAC1BC,UAAWN,EAAcM,WAC5B,UACD,SAACZ,GAAO,CAACc,GAAG,OAAOC,OAAQlQ,OAXhB,yBC7BjBmQ,GAA0B,IAAyBlT,iBAAiB,wBAE7DmT,GAAY,OAAU;;;;EAiBtBC,GAAiB,EAC1BlN,WACAmN,eACAC,eACAC,WACAC,SACAC,gBACAC,cACAC,sBAEA,MAAMC,GAAY,IAAAvM,QAAyB,MACrCwM,GAAQ,QAAe,KAAOlT,UAAUmT,cACvCC,EAAOC,IAAY,IAAA3R,UAAiB,IACpC4R,EAAOC,IAAY,IAAA7R,UAAwBgR,GA2BlD,OAzBA,IAAAzN,WAAU,KACF0N,GACAM,EAAU5K,SAASmL,SAExB,CAACb,KAEJ,IAAA1N,WAAU,KACFyN,EAAa7P,SAAWyQ,EAAMzQ,QAC9B0Q,EAASb,IAGd,CAACA,KAEJ,IAAAzN,WAAU,KACN+N,EAAgBM,IAEjB,CAACA,KAEJ,IAAArO,WAAU,KACQ,IAAVmO,GACAL,KAGL,CAACK,KAGA,iCACI,gBACItQ,QAAS,KACD6P,GACAM,EAAU5K,SAASmL,SAE1B,SACAjO,KAEL,SAACiN,GAAS,WACN,SAACD,GAAuB,CACpBpM,IAAK8M,EACLxS,GAAG,qBACHN,KAAK,cACLsT,QAAS,GACTZ,OAAQA,EACRD,SAAUA,EACVM,MAAOA,EACPJ,cAAgBY,SACMvR,IAAduR,GACAL,EAAUM,GAAcA,EAAYD,GAEX,mBAAlBZ,GAA8C,IAAdY,GACvCZ,KAGRE,gBAAkBY,SACOzR,IAAjByR,IAGJP,EAAUM,QAA6BxR,IAAdwR,EAA0BA,EAAY,EAAI,GACnEJ,EAAUM,GAAejB,EAAW,IAAIiB,EAAWD,GAAgB,CAACA,cCjFtFE,GAAmB,IAAyBzU,iBAAiB,oBAC7D0U,GAAwB,IAAyB1U,iBAAiB,sBAClE2U,GAAa,IAAyB3U,iBAAiB,cAYhD4U,GAAa,OAAU;;EAIvBC,GAAoC,EAC7CnM,SACAoM,UACAtH,WAMA,MAAMhN,GAAO,IAAAC,YACP,OAAE+P,GAAW9H,GACb,MAAEuL,GAAUvL,EAAO0L,QACnB5J,GAAW,UACX6F,GAAW,QAAgBK,GAAU,KAAO/P,UAAU0P,SAASK,EAAOF,GAAS,GAAAI,cAE/EmE,EAAWC,IACbxK,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOgJ,GAAWxU,EAAKW,cAAc,CAAEC,GAAI,sBAG9E,IAAAwE,WAAU,KACN4E,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ0E,SAAS,MAEjE,KAEH,IAAAtP,WAAU,KACN4E,EACI,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAChCzE,SACA2E,OAAQlB,GAA0B,IAAjBA,EAAMzQ,WAIhC,CAACyQ,IAEJ,MAAMmB,GAAQ,QAAgB1E,GAAU,KAAY/P,UAAU0U,WAAW3E,EAAO,cAoB1E4E,EAAS,CACX,CACItJ,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2BAChCqC,QArBS8R,IACRA,GAGL,WACKC,cAAc,eAAeD,EAAKnU,MAClCkE,KAAMZ,IACH,GAAwB,KAApBA,EAASe,OACT,MAAM,IAAIgQ,MAAM,gBAEpB,MAAMC,EAAOhR,EAASe,OA3DP,EAACkQ,EAAgBD,KAC5CE,OAAOhS,KAIJ,SAA0B+R,EAAgBD,GAC7C,MAAO,eAAeC,KAAUD,GACpC,CANgBG,CAAiBF,EAAQD,QA2DzBI,KAAgBP,EAAKnU,GAAIsU,KAE5BhQ,MAAM,KACH8E,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,sBAAwB,WAWpE+J,EAAoDX,EACpD,CACI,CACIY,UAAYC,GACR,CACI,0EACA,oEACA,6EACFC,SAASD,EAAEE,UACjBC,QAASd,IAGjB,GAEN,YAAiBxS,IAAVmR,GACH,UAACW,GAAU,WACG,SAATpH,GACG,SAACiH,GAAgB,CAACR,MAAOA,EAAOxQ,QAAS,OAAiBsR,QAASA,KAEnE,SAACJ,GAAU,CAACV,MAAOA,EAAO8B,gBAAiBA,EAAe,SACpDnS,IAEM,SAAC6Q,GAAgB,CACbR,MAAOA,EAAM1R,IAAK0T,IAAM,IACjBA,EACHpV,KAAK,IAAAwV,iBAAgBJ,MAEzBxS,QAAUkS,GAAW/R,EAAK+R,GAC1BZ,QAASA,MAM5BD,GAAoB,SAATtH,IACR,SAAC4F,GAAc,CACXC,aAAcY,EACdX,aAAcjD,EACdkD,UAAU,EACVC,OAAQ,IACRG,gBAAkBM,IACVqC,MAAMC,QAAQtC,IACdzJ,GACI,QAAoDgG,EAAQ,CACxDyD,MAAOA,EAAM1R,IAAK0T,IAAM,IACjBA,EACHpV,KAAK,IAAAwV,iBAAgBJ,IAAM,UAM/CxC,cAAe,KACXjJ,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,MAEpE+O,YAAa,KACTlJ,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,MACnE,SACS,SAAT6I,GACG,SAACkH,GAAqB,CAClB1I,MAAO,wCACPnJ,YAAa,8CACb2T,IAAK,uCACL/S,QAAS,UAGb,8BAMhB,yBCjKFgT,GAAkB,IAAyBzW,iBAAiB,gBAE5D0W,GAAmB,OAAU;;;;;EAO7BC,GAAa,OAAkC;sBAC9BtW,GAAWA,EAAMuW,UAAY,MAAQ;;;;;;EAQ/CC,GAAgC,EACzCnO,SACA8E,WAMA,MAAMhD,GAAW,WACX,OAAEgG,GAAW9H,GACb,KAAEvD,EAAI,IAAEqR,EAAG,OAAE5T,EAAM,MAAE5B,EAAK,gBAAE2R,EAAe,WAAEmE,EAAU,aAAEC,EAAY,QAAE7V,GAAYwH,EAAO0L,QAYhG,OAVA,IAAAxO,WAAU,KACN4E,EACI,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAChCzE,SACA2E,OAAQhQ,GAAwB,IAAhBA,EAAK3B,WAI9B,CAAC2B,KAGA,SAACuR,GAAgB,CACbjT,QAAS,KACQ,SAAT+J,GACAhD,EAAS,KAAayG,MAAMnF,QAAQiG,eAAe,CAAEvB,SAAQ1P,KAAM4H,EAAO5H,SAEjF,UACD,SAAC6V,GAAU,CAACC,UAAoB,SAATpJ,EAAe,UAClC,SAACiJ,GAAe,CACZtR,KAAMA,EACNqR,IAAKA,EACL5T,OAAQA,EACR5B,MAAOA,EACP2R,gBAAiBA,EACjBmE,WAAYA,EACZC,aAAcA,EACd7V,QAASA,SCtDvB8V,GAA0B,IAAyBhX,iBAAiB,wBACpE,GAAwB,IAAyBA,iBAAiB,sBAClE,GAAa,IAAyBA,iBAAiB,cAEvDiX,GAAkB,UAAa;;EAIxBC,GAAiC,EAC1CxO,SACAoM,UACAtH,WAMA,MAAM,OAAEgD,GAAW9H,GACb,MAAEuL,GAAUvL,EAAO0L,QACnB5J,GAAW,UACX6F,GAAW,QAAgBK,GAAU,KAAO/P,UAAU0P,SAASK,EAAOF,GAAS,GAAAI,cAOrF,OALA,IAAAhL,WAAU,KACN4E,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ0E,SAAS,MAEjE,SAEcpS,IAAVmR,GACH,gCACc,SAATzG,GACG,SAACwJ,GAAuB,CACpB/C,MAAOA,EACPkD,SAAU,IACVjT,IAAKwE,EAAO0L,QAAQlQ,KAAO,KAC3B0I,OAAQlE,EAAO0L,QAAQxH,QAAU,IACjCnJ,QAAS,UAGb,SAAC,GAAU,CAACwQ,MAAOA,EAAO8B,gBAAiB,GAAE,SACvCnS,IAEM,SAACqT,GAAe,WACZ,SAACD,GAAuB,CACpB/C,MAAOA,EACPkD,SAAU,IACVjT,IAAKwE,EAAO0L,QAAQlQ,KAAO,KAC3B0I,OAAQlE,EAAO0L,QAAQxH,QAAU,IACjCnJ,QAAUkS,GAAW/R,EAAK+R,SAOjDb,GAAoB,SAATtH,GACR,SAAC4F,GAAc,CACXC,aAAcY,EACdX,aAAcjD,EACdmD,OAAQ,mCACRD,UAAU,EACVI,gBAAkBM,IACVqC,MAAMC,QAAQtC,IACdzJ,GAAS,QAAiDgG,EAAQ,CAAEyD,YAG5ER,cAAe,KACXjJ,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,MAEpE+O,YAAa,KACTlJ,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,MACnE,UACD,SAAC,GAAqB,CAClBqH,MAAO,qCACPnJ,YAAa,2CACb2T,IAAK,uCACL/S,QAAS,YAIjB,4BAIR,yBC/EF2T,GAAc,IAAyBpX,iBAAiB,eACxD,GAAa,IAAyBA,iBAAiB,cACvD,GAAwB,IAAyBA,iBAAiB,sBAMlEqX,GAAuB,OAAU;;;;;;;;;aASzBhX,GAAUA,EAAMC,MAAMU,MAAMa;;;;EAMpC,GAAkB,UAAa;;EAI/ByV,GAA8B,CAChClW,GAAI,EACJiD,KAAM,GACNtB,MAAO,GACPlC,IAAK,GACLsV,SAAU,2BACVoB,SAAU,GACVC,aAAc,GACdrU,aAAc,GACdR,KAAM,GACN5B,KAAM,IAGGuC,GAAkBmU,IAC3B,GAAIA,EAAK,CACL,MAAMvU,EAAYwU,KAAKC,MAAMF,GAC7B,IAAKG,MAAM1U,GACP,OAAO,IAAIwU,KAAKxU,GAAW2U,UAAY,GAE/C,GAISC,GAA+B,EACxCpP,SACA2I,QACAyD,UACAtH,WAOA,MAAM,OAAEgD,GAAW9H,GACb,KAAE6M,EAAI,UAAEwC,GAAcrP,EAAO0L,QAC7B5J,GAAW,UACX6F,GAAW,QAAgBK,GAAU,KAAO/P,UAAU0P,SAASK,EAAOF,GAAS,GAAAI,eAC9E/P,EAAKmX,IAAU,IAAA3V,eAA6BS,GAC7CtC,GAAO,IAAAC,WAyBb,OAvBA,IAAAmF,WAAU,KACN4E,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ0E,SAAS,MAEjE,KAEH,IAAAtP,WAAU,KACN4E,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ2E,OAAQI,MAEhE,CAACA,KAEJ,IAAA3P,WAAU,KACF2P,GACAyC,GACI,IAAAC,cAAa,CACT/U,UAAWqS,EAAKpS,aAAeG,GAAeiS,EAAKpS,cAAgBuU,KAAKQ,MACxEC,KAAM,aACNpX,KAAM,WACNF,IAAK0U,EAAK1U,QAIvB,CAAC0U,KAGA,gCACc,SAAT/H,IACG,SAAC,GAAU,CACPyG,MAAO,CACH,IACOqD,MACA/B,EACH6C,KAAMvX,EACNsV,SAAU,cAGlBJ,gBAAiB,GAAE,SACjBnS,IAEM,SAAC,GAAe,CAACH,QAAS,IAAMG,EAAK2R,GAAMnU,IAAM,GAAE,UAC/C,SAACgW,GAAW,CAACD,SAAU9F,GAAS,IAAKxQ,IAAKA,EAAKkX,UAAWA,IAAa,QAOjF,SAATvK,IACG,qCACa1K,IAARjC,IACG,SAACuW,GAAW,CAACD,SAAU9F,GAAS,IAAKxQ,IAAKA,EAAKkX,UAAWA,IAAa,IAE1EjD,IACG,SAAC1B,GAAc,CACXC,aAAc,GACdC,aAAcjD,EACdmD,OAAQ,mCACRD,UAAU,EACVI,gBAAkBM,IACVqC,MAAMC,QAAQtC,SAAuBnR,IAAbmR,EAAM,IAC9BzJ,GACI,QAA+CgG,EAAQ,CAAE+E,KAAMtB,EAAM,OAIjFR,cAAe,KACXjJ,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,MAEpE+O,YAAa,KACTlJ,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,MACnE,cACS7B,IAATyS,GACG,SAAC8B,GAAoB,UAChB7W,EAAKW,cAAc,CAAEC,GAAI,mCAG9B,SAAC,GAAqB,CAClB4K,MAAO,mCACPnJ,YAAa,yCACb2T,IAAK,uCACL/S,QAAS,kBCvJvC,GAAa,IAAyBzD,iBAAiB,cACvD,GAAwB,IAAyBA,iBAAiB,sBAClEqY,GAAkB,IAAyBrY,iBAAiB,gBAE5DsY,GAAU,OAAgC;;;;;;aAMlCjY,GAAUA,EAAM8W;EAGxB,GAA8B,CAChC/V,GAAI,EACJiD,KAAM,GACNtB,MAAO,GACPlC,IAAK,GACLsV,SAAU,2BACVoB,SAAU,GACVC,aAAc,GACdrU,aAAc,GACdR,KAAM,GACN5B,KAAM,IAGG,GAAkB0W,IAC3B,GAAIA,EAAK,CACL,MAAMvU,EAAYwU,KAAKC,MAAMF,GAC7B,IAAKG,MAAM1U,GACP,OAAO,IAAIwU,KAAKxU,GAAW2U,UAAY,GAE/C,GAISU,GAAgC,EACzC7P,SACA8E,OACA6D,YAOA,MAAM,OAAEb,GAAW9H,EACb8B,GAAW,UACX6F,GAAW,QAAgBK,GAAU,KAAO/P,UAAU0P,SAASK,EAAOF,GAAS,GAAAI,cAC/EuG,EAAW9F,GAAS,KACnBmH,EAAcC,IAAmB,IAAApW,eAA6BS,GAC/DgE,GAAM,IAAAO,QAAuB,MAC7BqR,GAAkB,IAAAtJ,SACpB,IACI1G,EAAO0L,QAAQuE,OACT,IACOjQ,EAAO0L,QAAQuE,OAAOpW,IAAI,CAACqW,EAAOnW,KAC1B,IACA,GACHrB,GAAIwX,EAAMrD,KAAOqD,EAAMrD,KAAKnU,GAAKqB,EACjC0T,SAAUyC,EAAMrD,KAAOqD,EAAMrD,KAAKY,SAAW,GAAeA,SAC5DiC,KACIQ,EAAMrD,MAAQqD,EAAMrD,KAAK1U,KACnB,IAAAoX,cAAa,CACTlX,KAAM,WACNF,IAAK+X,EAAMrD,KAAK1U,IAChBsX,KAAM,aACNjV,UACI0V,EAAMrD,MAAQqD,EAAMrD,KAAKpS,aACnB,GAAeyV,EAAMrD,KAAKpS,cAC1BuU,KAAKQ,QAEnB,OAItB,GACV,CAACxP,EAAO0L,QAAQuE,SAGdA,GAAS,IAAAvJ,SACX,SAC8BtM,IAA1B4F,EAAO0L,QAAQuE,OACT,IACOjQ,EAAO0L,QAAQuE,OAAOpW,IAAKqW,GACtBA,EAAMrD,KACC,IACAqD,EACH/X,KAAK,IAAAoX,cAAa,CACd/U,UAAW0V,EAAMrD,KAAKpS,aAChB,GAAeyV,EAAMrD,KAAKpS,cAC1BuU,KAAKQ,MACXnX,KAAM,OAAOyX,GAAgBA,EAAerB,EAAWqB,EAAerB,IACtEgB,KAAM,aACNtX,IAAK+X,EAAMrD,KAAK1U,OAIjB,IACA+X,EACH/X,IAAK,MAKrB,GACV,CAAC6H,EAAO0L,QAAQuE,OAAQH,EAAcrB,KAG1C,IAAAvR,WAAU,KACFyK,GAAqB,SAAT7C,GACZhD,EAAS,KAAayG,MAAMnF,QAAQiG,eAAe,CAAEvB,SAAQ1P,KAAM4H,EAAO5H,SAG/E,CAACuP,KAEJ,IAAAzK,WAAU,KACN,MAAMiT,EAAe,KACb/R,EAAIkC,SACJyP,EAAgB3R,EAAIkC,QAAUlC,EAAIkC,QAAQ8P,YAAc3B,IAKhE,OAFAvB,OAAOmD,iBAAiB,SAAUF,GAE3B,KACHjD,OAAOoD,oBAAoB,SAAUH,KAG1C,CAAC/R,KAEJ,IAAAlB,WAAU,KACN6S,EAAgB3R,EAAIkC,QAAUlC,EAAIkC,QAAQ8P,YAAc3B,IAEzD,CAACrQ,KAEJ,IAAAlB,WAAU,KACN4E,EACI,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAChCzE,SACA2E,OAAQzM,EAAO0L,QAAQuE,QAA2C,IAAjCjQ,EAAO0L,QAAQuE,OAAOnV,WAIhE,CAACkF,EAAO0L,QAAQuE,SAEnB,MAAMM,GAAa,IAAA7J,SACf,IAAe,SAAT5B,GAAmB8I,MAAMC,QAAQ7N,EAAO0L,QAAQuE,SAA4C,IAAjCjQ,EAAO0L,QAAQuE,OAAOnV,OACvF,CAACkF,EAAO0L,QAAQuE,OAAQnL,IAGtB0L,GAAe,IAAAjU,aAAY,KAC7BuF,EACI,KAAayG,MAAMnF,QAAQiG,eAAe,CACtCvB,OAAQ9H,EAAO8H,OACf1P,KAAM4H,EAAO5H,SAGtB,CAAC0J,EAAU9B,EAAO8H,OAAQ9H,EAAO5H,OAGpC,YAAqBgC,IAAjB0V,GACO,gBAAK1R,IAAKA,EAAKiM,MAAO,CAAE1B,MAAO,WAItC,UAACiH,GAAO,CAACnB,SAAUqB,GAAgBA,EAAerB,EAAWqB,EAAerB,EAAQ,WAChF,SAAC,GAAU,CAAClD,MAAOyE,EAAiB3C,gBAAiB,GAAE,SACjDnS,IAEM,SAACyU,GAAe,CACZM,OAAQA,EACRxB,SAAUqB,GAAgBA,EAAerB,EAAWqB,EAAerB,EACnEgC,QAASzQ,EAAO0L,QAAQ+E,UAAW,EACnCC,KAAM1Q,EAAO0L,QAAQgF,OAAQ,EAC7BC,QAAS,EACTC,aAAe7W,IACX,GAAa,SAAT+K,GACA,GAAI9E,EAAO0L,QAAQuE,OAAQ,CACvB,MAAMC,EAAQlQ,EAAO0L,QAAQuE,OAAOlW,GAChCmW,GAASA,EAAMrD,MACf3R,EAAKgV,EAAMrD,KAAKnU,GAExB,OAEAoJ,EAAS,KAAayG,MAAMnF,QAAQiG,eAAe,CAAEvB,SAAQ1P,KAAM4H,EAAO5H,aAOjGmY,GACG,SAAC,GAAqB,CAClBjN,MAAO,oCACPnJ,YAAa,0CACb2T,IAAK,uCACL/S,QAASyV,KAGb,4B,cC3MhB,MAAMK,GAAmB,IAAyBvZ,iBAAiB,oBAC7DwZ,GAAQ,IAAyBxZ,iBAAiB,SAQ3CyZ,GAAgB,EAAG3J,WAAUlM,OAAMoM,YAC5C,MAAMxP,GAAO,IAAAC,YACN0P,EAAUuJ,IAAe,IAAArX,UAAS,IAEnCsX,GAAU,IAAA1U,aAAY,KACxByU,EAAY,IACZ1J,KACD,CAACA,IAEJ,OACI,SAACwJ,GAAK,CACFzW,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,6BAChCwC,KAAMA,EACNF,aAAciW,EACdhW,2BAAyB,EACzBsC,QAAS,CACL,CACIC,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,kBAC/BJ,MAAO,SACPmF,aAAcwT,GAElB,CACIzT,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,kBAC/BJ,MAAO,QACP4Y,UAAWzJ,EACXhK,aAAc,KACV2J,EAAS,MAAO6H,MAAMxH,EAAU,CAAEhE,OAAO,IAAS0N,QAAQ,QAAS,aACnEF,OAGX,UACD,SAACJ,GAAgB,CAACO,MAAO3J,EAAUxC,SAAW1B,GAAMyN,EAAYzN,EAAErJ,OAAOkX,OAAQpN,OAAQ,aChC/FqN,GAAoB,IAAyB/Z,iBAAiB,qBAE9Dga,GAAiB,OAAU;;;;;;;;;;;EAapBC,GAA8B,EACvCvR,SACA8E,WAMA,MAAM,OAAEgD,GAAW9H,EACbpI,GAAQ,IAAAC,aACR,KAAE4E,GAASuD,EAAO0L,QAClB5J,GAAW,UACX6F,GAAW,QAAgBK,GAAU,KAAO/P,UAAU0P,SAASK,EAAOF,GAAS,GAAAI,cAC/EsJ,GAAS,QAAgBxJ,GAAU,KAAO/P,UAAUwZ,kBAAkBzJ,EAAOF,IAAS4J,MACtFvG,GAAQ,QAAe,KAAOlT,UAAUmT,aACxCuG,GAAuB,QAAe,KAAQ1Z,UAAU2Z,4BACxDC,GAAS,QAAe,KAAM5Z,UAAU6Z,WAExCha,GAAO,IAAAC,YAEP,KACFmD,EAAI,SACJkM,EACAE,MAAOyK,EACPxK,IAAKyK,EACLrK,SAAUsK,GACVhL,KAEEoF,GAAU,IAAA9P,aACX+P,IACGxK,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOgJ,GAAWxU,EAAKW,cAAc,CAAEC,GAAI,qBAE9E,CAACoJ,EAAUhK,KAGf,IAAAoF,WAAU,KACN4E,EACI,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAChCzE,SACA2E,OAAQhQ,GAAwB,IAAhBA,EAAK3B,WAI9B,CAAC2B,IAEJ,MAAMyV,GAAsB,IAAAxL,SAAQ,KACzB,QAA0BmL,EAAQja,EAAOyU,GACjD,CAACwF,EAAQxF,EAASzU,IAGrB,OAAI4Z,GACO,yBAGP,UAACF,GAAc,YACX,SAACD,GAAiB,CACdc,UAAWxK,EACXlL,KAAMA,GAAQ,GACd0O,MAAgB,SAATrG,QAA6B1K,IAAV+Q,EAAsBA,EAAQ,GACxDwG,qBACa,SAAT7M,GAAmB6M,EACb,CACIS,cAAeT,EACfU,gBAAiBH,QAErB9X,EAEV0K,KAAMA,EACNG,SAAWxI,IACPqF,GAAS,QAA8CgG,EAAQ,CAAErL,WAErE6V,qBAAsB,CAACN,GACvBO,SAAU,CAAE1F,KAAM,YAErBoF,IAAoB,SAAClB,GAAa,CAAC3J,SAAUA,EAAUlM,KAAMA,EAAMoM,MAAOyK,QC9FjFS,GAAqB,IAAyBlb,iBAAiB,sBAE/D,GAAiB,OAAU;;;;;;EAQ3Bmb,GAAc,OAAU;;;;;;wBAML9a,GAAUA,EAAMC,MAAMU,MAAMgM;EAG/CoO,GAAO,UAAoC;;;;;;;eAOjC/a,GAAWA,EAAMgQ,SAAW,MAAQ;wBAC3BhQ,GAAWA,EAAMgQ,SAAWhQ,EAAMC,MAAMU,MAAMgM,MAAQ3M,EAAMC,MAAMU,MAAMa;;4BAEpExB,GAAUA,EAAMC,MAAMU,MAAMgM;;EAI5CqO,GAA+B,EACxC3S,SACAoM,UACAtH,OACAxG,aAOA,MAAM,OAAEwJ,GAAW9H,GACb,KAAEvD,EAAI,MAAEnE,EAAK,QAAEsa,GAAY5S,EAAO0L,QAClC5J,GAAW,UACX6F,GAAW,QAAgBK,GAAU,KAAO/P,UAAU0P,SAASK,EAAOF,GAAS,GAAAI,cAYrF,OAVA,IAAAhL,WAAU,KACN4E,EACI,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAChCzE,SACA2E,OAAQhQ,GAAwB,IAAhBA,EAAK3B,WAI9B,CAAC2B,KAGA,UAAC,GAAc,YACX,SAAC+V,GAAkB,CACflU,OAAQA,EACR7B,KAAMA,EACNnE,MAAOA,EACPsa,QAASA,EACTT,UAAWxK,EACXyE,QAASA,EACTtH,KAAMA,EACNG,SAAWxI,IACPqF,GAAS,QAA+CgG,EAAQ,CAAErL,aAGzEkL,GAAqB,SAAT7C,GACT,SAAC+N,GAAO,CACJD,QAASA,EACT7X,QAAU6X,IACN9Q,GAAS,QAA+CgG,EAAQ,CAAE8K,iBAI1E,4BAMHC,GAAU,EAAGD,UAAU,KAAM7X,cAGlC,SAAC0X,GAAW,UAFQ,CAAC,KAAM,KAAM,KAAM,MAG5B5Y,IAAI,CAACiZ,EAAW/Y,KACnB,SAAC2Y,GAAI,CAAa/K,SAAUiL,IAAYE,EAAW/X,QAAS,IAAMA,EAAQ+X,GAAU,SAC/EA,GADM/Y,MCnFrBgZ,GAAc,IAAyBzb,iBAAiB,eACxD0b,GAAe,IAAyB1b,iBAAiB,gBACzD2b,GAAS,IAAyB3b,iBAAiB,UACnD4b,GAAY,IAAyB5b,iBAAiB,aACtD6b,GAAc,IAAyB7b,iBAAiB,eACxD8b,GAAsB,IAAyB9b,iBAAiB,uBAChE+b,GAAgB,IAAyB/b,iBAAiB,iBAC1D,GAAa,IAAyBA,iBAAiB,cACvD,GAAY,IAAyBA,iBAAiB,UAE/Cgc,GAAS,OAAiC;;;eAGvC3b,GAAWA,EAAM4b,SAAW,KAAO;EAGtCC,GAAY,OAAU;;;;;;EAQtBC,GAAkB,OAAU;wBAChB9b,GAAUA,EAAMC,MAAMU,MAAMob;aACvC/b,GAAUA,EAAMC,MAAMU,MAAMa;eAC1BxB,GAAUA,EAAMC,MAAM6D,MAAM8F;qBACtB5J,GAAUA,EAAMC,MAAM6D,MAAM8F;;;;EAMrCoS,GAAY,OAAU;qBACbhc,GAAUA,EAAMC,MAAM6D,MAAMK;EASrC8X,GAAkC,CAC3CC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,IACVC,uBAAwB,EAAAC,eAAeC,KACvCC,YAAa,GACbC,mBAAoB,GACpBC,eAAgB,GAChBC,SAAU,IAGDC,GAA4B,KACrC,MAAM1c,GAAO,IAAAC,WACP+J,GAAW,UACXU,GAAkB,IAAAiS,uBACjBvP,EAAQiE,IAAa,IAAAxP,WAAkB,IACvC+a,EAAWC,IAAgB,IAAAhb,WAAkB,IAC9C,QACFyF,EAAO,MACPC,EAAK,SACLuV,EAAQ,UACRnU,EAAS,MACT0H,EACA0M,WAAW,QAAEC,KACb,IAAAvV,SAAuC,CACvCV,cAAe+U,GACfpU,aAAc,SAIXuV,EAAcC,IAAmB,IAAArb,UAA2B,IAC7D2O,EAAOH,IAEP8M,EAAgC,CAClC,CAAE3R,MAAO,OAAQ8N,MAAO,EAAA8C,eAAeC,MACvC,CAAE7Q,MAAO,MAAO8N,MAAO,EAAA8C,eAAegB,KACtC,CAAE5R,MAAO,WAAY8N,MAAO,EAAA8C,eAAeiB,WAGzCC,GAAqB,IAAA7Y,aACtB8Y,IACG,WAAYC,mBAAmB1Y,KAAK,EAAGG,aACnCsC,EAAM,IACCtC,EACHwX,SAAWc,EAAU7H,SAASzQ,EAAOwX,UAAY,IAAqBxX,EAAOwX,SAAtBc,EAAU,QAI7E,CAAChW,KAiBL,IAAAnC,WAAU,KACDgI,IACLyP,GAAa,GACb,WACKY,aAAa,CAAEzS,OAAQN,EAAgBM,SACvClG,KAAK,EAAGG,aACAyF,EAAgBM,OAAO0S,UACxBR,EAAgBjY,GAChBqY,EAAmBrY,EAAOlD,IAAK0a,GAAaA,EAAS7b,QAG5DsE,MAAOyY,IACCjT,EAAgBM,OAAO0S,SACxB1T,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOmS,EAAI5Y,cAGjD6Y,QAAQ,KACLf,GAAa,OAEtB,CAACzP,EAAQ1C,EAAgBM,OAAQhB,EAAUsT,KAE9C,IAAAlY,WAAU,KACsB,IAAxB6X,EAAaja,QACb8Z,EAAS,WAAYG,EAAa,GAAGrc,KAE1C,CAACqc,EAAcH,IAElB,MAAMe,EAAc,IAAMxM,GAAU,GAE9ByM,GAAc,IAAAlP,SAAQ,IAAMqO,EAAaja,OAAS,EAAG,CAACia,IAE5D,OACI,iCACI,SAACvB,GAAS,WACN,SAACP,GAAM,CACH3P,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,6BAChCqC,QAAS,IAAMoO,GAAU,QAGjC,SAAC4J,GAAW,CAAC7X,KAAMgK,EAAQ2Q,OAAO,QAAQ7a,aAAc2a,EAAW,UAC/D,SAAC3C,GAAY,CACT5X,SAAU,SACVf,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,6BAChC2C,iBAAkBsa,EAAW,SAC5BjB,GACG,SAAC,GAAS,CAACrc,KAAK,OAEhB,gCAC6B,IAAxB0c,EAAaja,SACV,SAAC2Y,GAAe,UAAE3b,EAAKW,cAAc,CAAEC,GAAI,2BAE/C,UAAC4a,GAAM,CAACC,SAAkC,IAAxBwB,EAAaja,OAAY,UACtC8a,IACG,+BACI,UAACjC,GAAS,YACN,SAAC,GAAU,CAACtb,KAAM,IAAG,UACjB,SAAC,EAAAqL,iBAAgB,CAAChL,GAAG,gCAEzB,SAACod,GAAc,CACXxS,MAAM,kCACNyS,aAAc,CACVzS,MAAOyR,EAAa,GAAGzR,MACvB8N,MAAO2D,EAAa,GAAGrc,IAE3BgV,QAASqH,EAAalb,IAAKmc,IAChB,CAAE1S,MAAO0S,EAAG1S,MAAO8N,MAAO4E,EAAGtd,MAExCud,aAAe7E,IACP3Q,EAAU,cAAgB2Q,GAC1B/R,IAEJuV,EAAS,WAAYxD,YAMzC,UAACuC,GAAS,YACN,SAAC,GAAU,CAACtb,KAAM,IAAG,UACjB,SAAC,EAAAqL,iBAAgB,CAAChL,GAAG,2BAEzB,SAACwa,GAAS,CACN9T,QAASA,EACThH,KAAM,WACNuQ,MAAO,MACPD,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,kCACtCwd,MAAO,CAAEC,UAAU,MAEvB,SAACjD,GAAS,CACN9T,QAASA,EACThH,KAAM,WACNuQ,MAAO,MACPD,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,6BACtCwd,MAAO,CAAEC,UAAU,MAEvB,SAAC9C,GAAa,CACVjU,QAASA,EACThH,KAAM,WACNuQ,MAAO,MACPD,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,6BACtCwd,MAAO,CAAEC,UAAU,SAG3B,UAACxC,GAAS,YACN,SAAC,GAAU,CAACtb,KAAM,IAAG,UACjB,SAAC,EAAAqL,iBAAgB,CAAChL,GAAG,oCAEzB,SAACya,GAAW,CACR/T,QAASA,EACThH,KAAM,WACNuQ,MAAO,MACPD,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,8BACtCwd,MAAO,CAAEC,UAAU,MAEvB,SAACL,GAAc,CACXxS,MAAM,6CACNyS,aAAcd,EAA8B,GAC5CvH,QAASuH,EACTgB,aAAe7E,GACXwD,EAAS,yBAA0BxD,MAG3C,SAAC8B,GAAS,CACN9T,QAASA,EACThH,KAAM,cACNuQ,MAAO,MACPD,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,iCACtCwd,MAAO,CAAEC,UAAU,SAG3B,UAACxC,GAAS,YACN,SAAC,GAAU,CAACtb,KAAM,IAAG,UACjB,SAAC,EAAAqL,iBAAgB,CAAChL,GAAG,uCAEzB,SAACwa,GAAS,CACN9T,QAASA,EACThH,KAAM,iBACNuQ,MAAO,MACPD,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,oCACtCwd,MAAO,CAAEC,UAAU,SAG3B,UAACxC,GAAS,YACN,SAAC,GAAU,CAACtb,KAAM,IAAG,UACjB,SAAC,EAAAqL,iBAAgB,CAAChL,GAAG,4CAEzB,SAACwa,GAAS,CACN9T,QAASA,EACThH,KAAM,qBACNuQ,MAAO,MACPD,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,yCACtCwd,MAAO,CAAEC,UAAU,YAI/B,SAAClD,GAAM,CACH3P,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,kCAChC0d,OAAQ1B,EACRxD,SAAUwD,GAAqC,IAAxBK,EAAaja,SAAiBga,EACrD/Z,QA7KP,KACb2Z,IACJC,GAAa,GACb,WACK0B,iBAAiB/N,GACjB1L,KAAK,IA3BQsQ,OAAOoJ,SAASC,UA4B7BvZ,MAAOyY,GAAQ3T,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOmS,EAAI5Y,aACzD6Y,QAAQ,KACLvM,GAAU,GACVwL,GAAa,GACbtV,qBA6KVyW,GAAiB,EACnBxS,QACAyS,eACArI,UACAuI,mBAOA,MAAM,QAAE7W,EAAO,MAAE+I,IAAU,IAAA5I,SAAwD,CAC/EV,cAAe,CACX0V,SAAUwB,GAEdvW,aAAc,QAWlB,OARA,IAAAtC,WAAU,KACN,MAAMmL,EAAeF,EAAOG,IACnBA,EAAKiM,UAAajM,EAAKiM,SAASnD,OACrC6E,EAAa3N,EAAKiM,SAASnD,SAE/B,MAAO,IAAM/I,EAAaI,eAC3B,CAACN,EAAO8N,KAGP,SAAC7C,GAAmB,CAChB9P,MAAOA,EACPlL,KAAK,WACLsV,QAASA,GAAW,GACpB8I,SAAWC,GAAMA,EAAErF,MACnBsF,SAAS,QACTC,UAAU,QACVvX,QAASA,EACT8W,MAAO,CAAEC,UAAU,MCxUlBS,GAAS,OAAU;;;;EAMnBC,GAAkB,OAAU;;;;EAM5BC,GAAW,OAAU;;;;EAOrBC,GAAe,EACxBC,SACAC,aACAC,aAOI,UAACN,GAAM,WACFI,GAAUA,KACX,SAACH,GAAe,WACZ,SAACC,GAAQ,UAAEG,GAAcA,QAE5BC,GAAUA,OC9BV,GAAY,OAAU;;;EAKtBC,GAAqB,EAAGrP,SAAQtK,eACzC,MAAMoM,GAAS,QAAgB5B,GAAU,KAAO/P,UAAUmf,yBAAyBpP,EAAOF,GAAS,GAAAI,cAE7F4B,GAAgB,IAAApD,SAAQ,KACnB,CACH2Q,QAASzN,GAAUA,EAAgB,QAAI,GAAGA,EAAgB,YAAQ,QAEvE,CAACA,IAEJ,OAAO,SAAC,GAAS,CAACS,MAAO,CAAEgN,QAASvN,EAAcuN,SAAS,SAAG7Z,KCfrD,GAAiB,OAAU;eACxB7F,GAAUA,EAAMC,MAAM6D,MAAMK;;EAI/Bwb,GAAU,OAAsF;kBAC1F3f,GAAUA,EAAMyS;iBACjBzS,GAAUA,EAAMuS;mBACdvS,GAAUA,EAAMwS;aACtBxS,GAAUA,EAAMW;EAGjBif,GAAsB,EAC/BzP,SACAsC,YAAY,OACZF,WAAW,KACXC,aAAa,SACb7R,YAQA,MAAMqR,GAAgB,QAAgB3B,GAAU,KAAO/P,UAAUgQ,aAAaD,EAAOF,GAAS,GAAAI,cAC9F,OACI,8BACKyB,GAAgD,iBAAxBA,EAActP,OAAqD,IAA/BsP,EAActP,MAAMS,SAC7E,SAAC,GAAc,WACX,SAACwc,GAAO,CAAClN,UAAWA,EAAWF,SAAUA,EAAUC,WAAYA,EAAY7R,MAAOA,EAAK,SAClFqR,EAActP,aC7B1Bmd,GAAkB,OAAsC;wBAC5C7f,GAAUA,EAAM8f;EAG5BC,GAAW,OAAU;;;;EAWrBC,IALU,OAAU;eACjBhgB,GAAUA,EAAMC,MAAM6D,MAAM8F,QAAS5J,GAAUA,EAAMC,MAAM6D,MAAMK;aACnEnE,GAAUA,EAAMC,MAAMU,MAAMsf;EAGd,OAAU;;;;WAI1BjgB,GAAUA,EAAMC,MAAM6D,MAAMoc;;GAI3BC,GAAe,EACxBhQ,SACAiQ,WACAC,gBAMA,MAAMpgB,GAAQ,IAAAC,YACR+R,GAAS,QAAgB5B,GAAU,KAAO/P,UAAU4R,uBAAuB7B,EAAOF,GAAS,GAAAI,cAE3F+P,GAAc,IAAAvR,SAAQ,KACjB,CACHpO,MAAOsR,GAAUA,EAAc,MAAIG,OAAOH,EAAc,OAAKhS,EAAMU,MAAM0R,MACzEC,gBAAiBL,GAAUA,EAAO,oBAAsBG,OAAOH,EAAO,qBAAuB,cAC7FM,SAAUN,GAAUA,EAAO,aAAeG,OAAOH,EAAO,cAAgB,KACxEO,WAAYP,GAAUA,EAAO,eAAiBG,OAAOH,EAAO,gBAAkB,SAC9EQ,UAAWR,GAAUA,EAAO,cAAgBG,OAAOH,EAAO,eAAiB,SAEhF,CAACA,EAAQhS,IAEZ,OACI,SAAC4f,GAAe,CAACC,eAAgBQ,EAAYhO,gBAAe,UACxD,UAACyN,GAAQ,YACL,UAACC,GAAY,YACT,SAACJ,GAAmB,CAChBzP,OAAQA,EACRqC,WAAY8N,EAAY9N,WACxBD,SAAU+N,EAAY/N,SACtBE,UAAW6N,EAAY7N,UACvB9R,MAAO2f,EAAY3f,QAEtB0f,GAAaA,EAAUC,EAAY3f,UAEvCyf,GAAYA,UCtDvBG,GAAiB,IAAyB5gB,iBAAiB,kBAC3D6gB,GAAU,IAAyB7gB,iBAAiB,WAE7C8gB,GAAa,OAAU;oBACfzgB,GAAUA,EAAMC,MAAM6D,MAAM8F;;sBAE1B5J,GAAUA,EAAMC,MAAMU,MAAMa;;EAItCkf,GAA6B,EACtCvQ,SACAwQ,wBAAuB,EACvBC,mBAMA,MAAMzgB,GAAO,IAAAC,WACP+J,GAAW,KAAA0W,eAMX9K,EAA0C,CAC5C,CAAEpK,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,yBAA2BqC,QANhD,KACb+G,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,KAChE,WAAYoa,iBAAiBzC,IAAiC8B,QAAQ6C,MAO1E,OACI,SAACT,GAAY,CACThQ,OAAQA,EACRiQ,SAAU,IAEFO,IACI,SAACF,GAAU,WACP,SAACD,GAAO,CACJ7d,SAAU,OACVH,YAAarC,EAAKW,cAAc,CAAEC,GAAI,2BAA2B,UACjE,SAACwf,GAAc,CACXO,OAAK,EACLC,mBAAmB,OACnBhL,QAASA,EACT1G,KAAM,gBACN1D,MAAO,GACPhL,MAAM,UACNE,QAAQ,oBCxCtCmgB,GAAuB,IAAyBrhB,iBAAiB,wBAW1DshB,GAAiC,EAC1C5Y,SACA8E,OACA+T,oBAEA,MAAM,OAAE/Q,GAAW9H,EACb8B,GAAW,WACVwW,EAAsBQ,IAA2B,IAAAnf,eAA8BS,IAC/E2e,EAAYC,IAAiB,IAAArf,WAAkB,GAChDsf,GAAQ,QAAgBjR,GAAU,KAAO/P,UAAUihB,kBAAkBlR,EAAOF,GAAS,GAAAI,eAEpF4F,EAAKqL,IAAU,IAAAxf,eAA6BS,IAC5Cgf,EAAMC,IAAW,IAAA1f,UAA6B,IAE/C4e,GAAe,IAAAhc,aACjB,CAACkZ,EAAWc,KACJd,GAAqB,MAAdA,EAAIvZ,OACX,WAAYma,iBAAiBzC,IAE7B2C,EACArJ,OAAOoJ,SAASC,UAIpBuC,GAAwB,GACxBhX,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,EAAMrd,SAAS,OAEvF,CAAC6F,EAAUgG,IAGTyR,GAAc,IAAAhd,aACfuY,IACGgE,EAAwBhE,GACxBhT,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,MAExE,CAACxX,EAAUgG,IAGT0R,GAAgB,IAAAjd,aACjBN,GAAqB6F,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,aAC7E,CAAC6L,EAAQhG,IAGP2X,GAAoB,IAAAld,aAAY,KAClC,WACKmd,sBACA9c,KAAK,EAAGG,aACLoc,EAAOpc,EAAO4c,oBAEjBjE,QAAQ,IAAM8D,GAAc,KAClC,CAACA,IAEEI,GAAY,IAAArd,aAAY,KAC1B,MAAMiT,EAAM,IAAIR,KACV6K,EAAY,EAAAnf,MAAMC,KAAKmf,SAAS,IAAI9K,KAAKQ,IAE/C,WACKuK,qBAAqB,CAClBvgB,MAAO,GACPwgB,UAAW,EAAAtf,MAAMC,KAAKsf,eAAezK,GACrC0K,QAAS,EAAAxf,MAAMC,KAAKsf,eAAeJ,KAEtCjd,KAAK,EAAGG,aACLsc,EAAQtc,GACRic,GAAc,KAEjBhc,MAAM,KACH8E,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,qCACtCwV,GAAwB,GACxBhX,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,EAAMrd,SAAS,OAEtFyZ,QAAQ,IAAM8D,GAAc,KAClC,CAACA,EAAe1X,EAAUgG,IA4B7B,OA1BA,IAAA5K,WAAU,KACN,IAAK6b,EAAY,OACjB,IAAKT,EAAsB,OAC3B,GAAIW,IAAU,EAAAkB,eAAgB,OAC9B,MAAMC,EAAWC,YAAYT,EAhFZ,KAiFjB,MAAO,IAAMU,cAAcF,IAC5B,CAAC9B,EAAsBsB,EAAWb,EAAYE,KAEjD,IAAA/b,WAAU,KACNsc,GAAc,GACd,WACKlB,uBACA1b,KAAK,EAAGG,YAAawc,EAAYxc,IACjCC,MAAMub,IACZ,CAACA,EAAciB,EAAeD,KAEjC,IAAArc,WAAU,KACN,GAAKob,EACL,OAAIW,IAAU,EAAAsB,gBACVf,GAAc,QACdC,UAGJG,KACD,CAACtB,EAAsBmB,EAAmBD,EAAeI,EAAWX,IAEnEX,GAAwBW,GAASA,IAAU,EAAAkB,gBAAkBtB,GACtD,8BAAGA,EAAcI,EAAOnL,GAAO,OAItC,SAACiJ,GAAY,CACTC,OAAQ,KAEA,+BACI,SAACqB,GAA0B,CACvBvQ,OAAQA,EACRwQ,0BAA+Cle,IAAzBke,IAA+D,IAAzBA,EAC5DC,aAAc,IAAMA,OAAane,GAAW,OAK5D6c,WAAY,KAEJ,UAACE,GAAkB,CAACrP,OAAQA,EAAM,UAC7BwQ,IAAwB,SAACK,GAAoB,CAAC6B,kBAAmBpB,SACxChf,IAAzBke,IAAsC,6BACble,IAAzBke,IAA+D,IAAzBA,GAA2C,SAATxT,IACrE,SAAC0P,GAAyB,U,cCjJtD,MAAM,GAAY,IAAyBld,iBAAiB,UACtD,GAAiB,IAAyBA,iBAAiB,eAC3D,GAAkB,IAAyBA,iBAAiB,gBAC5D,GAAgB,IAAyBA,iBAAiB,cAMnDmjB,IAJS,UAAa;eACnB9iB,GAAUA,EAAMC,MAAM6D,MAAMK;EAGtB,OAAU;eAChBnE,GAAUA,EAAMC,MAAM6D,MAAMK;;;GAK/B4e,GAAe,EAAGhiB,KAAIiD,OAAMmM,aACrC,MAAMhG,GAAW,UACXhK,GAAO,IAAAC,YACNmN,EAAQiE,IAAa,IAAAxP,WAAkB,GAW9C,OACI,iCACI,SAAC,GAAa,CAACoN,SAAU,GAAIhM,QAAS,IAAMoO,GAAU,GAAOnC,KAAK,eACjE9B,IACG,UAAC,GAAc,CAACjK,2BAA2B,EAAMC,KAAMgK,EAAQlK,aAAc,IAAMmO,GAAU,GAAM,WAC/F,SAAC,GAAe,CACZ/N,SAAU,SACVf,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,yBAChC2C,iBAAkB,IAAM8N,GAAU,GAAM,SACvCrR,EAAKW,cAAc,CAAEC,GAAI,yCAE9B,SAAC+hB,GAAM,WACH,SAAC,GAAS,CAACnX,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,mBAAqBqC,QArB/D,KACjB,WACK4f,aAAa,CAAEjiB,KAAIiD,OAAMmM,WACzBlL,KAAK,KACFkF,EAAS,KAAOyG,MAAMnF,QAAQmG,YAAY,CAAEzB,cAE/C9K,MAAM,IAAM8E,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,wCCvBlD,GAAS,OAAU;;;;4BAIH3L,GAAUA,EAAMC,MAAMU,MAAMgM;EAG5C,GAAS,UAAa;;;;;wBAKV3M,GAAUA,EAAMC,MAAMU,MAAMa;;4BAExBxB,GAAUA,EAAMC,MAAMU,MAAMgJ;;EAI5CsZ,GAAmB,EAC5BxiB,OACA0P,SACAhD,OACA+V,sBACA3R,uBAQA,MAAMpR,GAAO,IAAAC,WACP+J,GAAW,UACXgZ,GAAe,QAAgB9S,GAAU,KAAO/P,UAAU8iB,mBAAmB/S,EAAOF,GAAS,GAAAI,cAC7F8S,GAAqB,QACtBhT,GAAU,KAAO/P,UAAUgjB,yBAAyBjT,EAAOF,GAC5D,GAAAI,cAGEgT,GAAY,IAAAxU,SACd,IACKoU,GAAgBE,GAAsBA,EAAmBG,QACzDN,GAAuBA,EAAoBM,OAChD,CAACL,EAAcE,EAAoBH,IAGjCO,GAAY,IAAA1U,SACd,IAAMoU,GAAgBE,GAAsBA,EAAmBK,OAC/D,CAACP,EAAcE,IAGb5R,GAAgB,IAAA7M,aAAY,KAC9BuF,EACI,KAAayG,MAAMnF,QAAQiG,eAAe,CACtCvB,SACA1P,OACA0M,WAGT,CAACgD,EAAQhG,EAAU1J,EAAM0M,IAE5B,OAAOoW,IAAa,IAAAI,wCAAuCR,IACvD,UAAC,GAAM,YACH,SAAC,GAAM,CAAC/f,QAASmO,GAAoBE,EAAa,SAC7CtR,EAAKW,cAAc,CAAEC,GAAI,wBAE7B0iB,IAAa,SAACV,GAAY,CAAChiB,GAAIoiB,EAAapiB,GAAIiD,KAAMmf,EAAanf,KAAMmM,OAAQA,QAGtF,yBCzEF,GAAY,IAAyBxQ,iBAAiB,UACtD,GAAe,IAAyBA,iBAAiB,aAElD,GAAa,OAAU;eACpBK,GAAUA,EAAMC,MAAM6D,MAAMK;;;;;;EAQ/Byf,GAAwB,EACjC7S,cACA8S,kBAKA,MAAM1jB,GAAO,IAAAC,WACP+J,GAAW,WACVwB,EAAOmY,IAAY,IAAA9hB,UAAiB,KAErC,QAAEyF,EAAO,MAAE+I,EAAK,MAAE9I,IAAU,IAAAE,SAAQ,CACtCV,cAAe,CAAEyE,SACjB9D,aAAc,QAUlB,OAPA,IAAAtC,WAAU,KACN,MAAMmL,EAAeF,EAAOG,IACxBmT,EAASnT,EAAKhF,OAAS,MAE3B,MAAO,IAAM+E,EAAaI,eAC3B,CAACN,EAAOrG,KAGP,UAAC,GAAU,YACP,SAAC,GAAY,CAAC1J,KAAM,QAASgH,QAASA,EAASsJ,YAAaA,EAAaC,MAAM,UAC/E,SAAC,GAAS,CACNrF,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,mBAChCwY,UAAW5N,EAAMxI,OACjBC,QAAS,KACLygB,EAAYlY,GACZmY,EAAS,IACTpc,WChDd,GAAY,IAAyB/H,iBAAiB,UAE/C,GAAU,OAAU;;;;;;;EASpBokB,GAAkB,KAEvB,SAAC,GAAO,WACJ,SAAC,GAAS,CAACrjB,KAAM,QCMvBsjB,GAAkB,IAAyBrkB,iBAAiB,mBAC5DskB,GAAwB,IAAyBtkB,iBAAiB,yBAClEukB,GAAgB,IAAyBvkB,iBAAiB,cAa1DwkB,IAX2B,OAAgC;;;;;cAKlDnkB,GAAWA,EAAMokB,OAAS,aAAapkB,EAAMC,MAAMU,MAAM+I,QAAU;;;;EAMzD,OAAU;;;;;GAOtB2a,GAA4B,OAAU;;EAWtCC,GAA4B,EACrCjc,SACAoM,UACAtH,OACAoX,qBAEA,MAAMpkB,GAAO,IAAAC,YACP,OAAE+P,EAAQ4D,QAASyQ,GAAkBnc,EACrC8B,GAAW,WACVqJ,EAAOiR,IAAY,IAAAziB,aACnB0iB,EAAcC,IAAmB,IAAA3iB,WAAS,IAE1C4iB,EAASC,IAAc,IAAA7iB,aACvB+a,EAAWC,IAAgB,IAAAhb,WAAS,GAErC8iB,GAAiB,QAAe,KAAOxkB,UAAUmT,YAAa,GAAAlD,cAE9D/P,GAAM,QAAgB6P,GAAU,KAAO/P,UAAUykB,sBAAsB1U,EAAOhI,EAAO8H,QAAS,GAAAI,cAE9F8S,GAAqB,QACtBhT,GAAU,KAAO/P,UAAUgjB,yBAAyBjT,EAAOF,GAC5D,GAAAI,cAGEyU,GAAQ,QACT3U,GAAU,KAAO/P,UAAU2kB,wBAAwB5U,EAAOhI,EAAO8H,QAClE,GAAAI,cAGE2U,GAAuB,IAAAnW,SAAQ,IAC1BsU,GAAsBA,EAAmBG,OACjD,CAACH,IAEE8B,GAAkB,IAAApW,SAAQ,IACrBsU,GAAsBA,EAAmB+B,aACjD,CAAC/B,IAEE3O,GAAU,IAAA9P,aACX+P,IACGxK,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOgJ,GAAWxU,EAAKW,cAAc,CAAEC,GAAI,qBAE9E,CAACoJ,EAAUhK,IAGTklB,GAAa,IAAAzgB,aAAY,KACtB4O,GAAUkR,IACXC,GAAgB,GAChB,YACKnR,QACAvO,KAAM+F,IACHyZ,EAASzZ,EAAI5F,QACbuf,GAAgB,GAGhBxa,EAAS,KAAOyG,MAAMnF,QAAQgZ,SAAS,CAAEjR,MAAOxI,EAAI5F,YAEvDC,MAAOuG,IACJ8I,EAAQ9I,EAAE1G,cAGvB,CAACwP,EAASlB,EAAOkR,EAAcva,IAE7B2a,EAEOtR,GACRiR,EAASK,GAFTO,IAKJ,MAAM/X,GAAW,IAAA1I,aACb,CAACuL,EAAgB4D,KACb5J,GAAS,QAAoBgG,EAAQ4D,KAEzC,CAAC5J,IA0BCmb,GAAqB,IAAA1gB,aAAY,KAC9BpE,IACLwc,GAAa,GACb,WACKuI,UAA+B,CAAE/kB,MAAK2P,WACtClL,KAAMZ,KACC,IAAAmhB,2BAA0BnhB,EAASe,SACnCkI,EAAS6C,EAAQ9L,EAASe,OAAO2O,WAGxC1O,MAAOyY,IACIA,EAAID,SAAWnJ,GAE1BqJ,QAAQ,IAAMf,GAAa,MACjC,CAAC7M,EAAQuE,EAASlU,EAAK8M,IAEpBmY,EAAmBjS,IACrBrJ,EAAS,KAAayG,MAAMnF,QAAQia,kBACpCvb,EAAS,KAAOyG,MAAMnF,QAAQgZ,SAAS,CAAEjR,WACzCrJ,EACI,KAAayG,MAAMnF,QAAQiG,eAAe,CACtCvB,OAAQ9H,EAAO8H,OACf1P,KAAM,EAAAiN,YAAYG,UAClBV,YAKZ,IAAA5H,WAAU,KACDiO,GAAkB,SAATrG,GACV,YAAaqG,QAAQvO,KAAMZ,IACvB8F,EAAS,KAAOyG,MAAMnF,QAAQgZ,SAAS,CAAEjR,MAAOnP,EAASe,aAGlE,CAAC+H,EAAMqG,EAAOrJ,KAEjB,IAAA5E,WAAU,KACN,MAAMogB,EAAsDtd,EAAO0L,QAAQ6R,KAAK1jB,IAAKC,IAAS,CAC1F2C,KAAM3C,EAAKO,OAAS,GACpBwS,KAAM/S,EAAK+S,WAAQzS,EACnBojB,QAAS1jB,EAAKsX,QAAS,KACnBtX,EAAK2jB,OAAS,CACdA,MAAO3jB,EAAK2jB,UAEZ3jB,EAAK4jB,MAAQ,CAAEA,KAAM5jB,EAAK4jB,WAAQtjB,MAClCN,EAAKpB,IAAM,CAAEA,GAAIoB,EAAKpB,GAAI+U,SAAU,gBAG5C+O,EAAWc,IACZ,CAACtd,EAAO0L,QAAQ6R,IAAKpB,KAExB,IAAAjf,WAAU,KACN,IAAK0Q,MAAMC,QAAQ8O,GAAQ,OAC3B,MAAMgB,EAAShB,EAAMiB,IAAI,GACpBD,GACAxlB,GAEDwlB,EAAOE,OAAO1lB,MAAQA,GAAOwlB,EAAO7V,SAAW9H,EAAO8H,SACpC,wBAAd6V,EAAOG,IAA8C,kBAAdH,EAAOG,IAC9Cb,MAGT,CAACN,EAAO3c,EAAO8H,OAAQ3P,EAAKkU,EAASvK,EAAUmb,IAElD,MAAMc,EAAwBza,IAC1B,IAAKtD,EAAO0L,QAAQ6R,MAAQplB,EAAK,OAEjC,MAAM6lB,EAAkB,IACjBhe,EAAO0L,QACV6R,IAAK,IAAIvd,EAAO0L,QAAQ6R,IAAK,CAAEljB,MAAOiJ,EAAO8N,OAAO,KAGxD,WACK6M,aAAoC,CACjC9lB,MACA2P,OAAQ9H,EAAO8H,OACf4D,QAASsS,EACTE,IAAI,IAEPthB,KAAK,IAAMqI,EAASjF,EAAO8H,OAAQkW,IACnChhB,MAAOyY,GAAQpJ,EAAQoJ,EAAI5Y,YAG9B0O,GAAQ,IAAA7E,SAAQ,KAClB,IAAKkH,MAAMC,QAAQsO,EAAcoB,KAAM,MAAO,GAE9C,MAAMY,EAAoB,GAO1B,OANAhC,EAAcoB,IAAIzd,QAASkW,IACnBA,EAAGnJ,MACHsR,EAAGC,KAAKpI,EAAGnJ,QAIZsR,GACR,CAAChC,IAEJ,MAAa,SAATrX,GACIsH,GAEI,SAAC0P,GAAgB,WACb,SAACF,GAAqB,CAClBzQ,MAAOA,EACPrD,OAAQA,EACR4D,QAAS,IACFyQ,EACHoB,IAAKpB,EAAcoB,KAAK1jB,IAAKwkB,IAAM,IAC5BA,EACHhkB,MAAO,EAAAK,MAAM4jB,KAAKC,uBAAuBF,EAAEhkB,WAGnD+R,QAASA,EACToS,gBAAiBvZ,EACjBwZ,gBAvIK/S,IACrB5J,EAAS,KAAOyG,MAAMnF,QAAQoF,oBAAoB,IAAKkD,MAuIvCuK,aAAevK,GACX5J,GAAS,QAA4C9B,EAAO8H,OAAQ4D,SASxF,SAAC,KAAU,CACPgT,MAAO,MAEH,SAAY1e,EAAO8H,SACtB,SACAyU,IACG,SAACV,GAAa,CAACtQ,MAAOA,EAAO8B,gBAAiB,GAAE,SAC1CnS,IAEM,UAAC8gB,GAAyB,YACtB,SAACL,GAAe,CACZniB,MAAO,GACPmlB,eAAgBpC,EAChBqC,YAAcC,GAAUA,EAAMnmB,IAAMwC,EAAK2jB,EAAMnmB,IAC/ComB,sBAAwB/kB,GA5JhC,EAACrB,EAAYqB,KAC5B5B,IACDuc,IACJC,GAAa,GACb,WACKoK,iBAAiB,CACd5mB,MACA2P,OAAQpP,EACRqB,MAAOA,IAEV6C,KAAK,KACEsf,GAAgBA,MAEvBlf,MAAOyY,IACJpJ,EAAQoJ,EAAInJ,SACZqI,GAAa,QA6IyCqK,CAAgBhf,EAAO8H,OAAQ/N,KAEpEoiB,EAAc8C,OACX,SAAC1D,GAAqB,CAClBC,YAAauC,EACbrV,YAAa5Q,EAAKW,cAAc,CAC5BC,GAAI,4CAIfokB,GAAmB3R,IAChB,SAACyP,GAAgB,CACb9S,OAAQ9H,EAAO8H,OACf1P,KAAM4H,EAAO5H,KACbyiB,oBAAqB,CACjBM,UAAWgB,EAAc8C,OAAQpC,IAErC/X,KAAMA,EACNoE,iBAAkB,KACTiC,EAYDiS,EAAgBjS,IAXhBwJ,GAAa,GACb,YACKxJ,QACAvO,KAAMZ,IACH8F,EACI,KAAOyG,MAAMnF,QAAQgZ,SAAS,CAAEjR,MAAOnP,EAASe,UAEpDqgB,EAAgBphB,EAASe,UAE5B2Y,QAAQ,IAAMf,GAAa,QAO/CD,IAAa,SAACgH,GAAe,MAzCF1b,EAAO8H,aClR7D,GAAiB,IAAyBxQ,iBAAiB,kBAC3D,GAAU,IAAyBA,iBAAiB,WAE7C,GAAa,OAAU;oBACfK,GAAUA,EAAMC,MAAM6D,MAAM8F;;sBAE1B5J,GAAUA,EAAMC,MAAMU,MAAMa;;EAItC+lB,GAA6B,EACtCpX,SACAwQ,wBAAuB,EACvBC,mBAMA,MAAMzgB,GAAO,IAAAC,WACP+J,GAAW,KAAA0W,eAMX9K,EAA0C,CAC5C,CAAEpK,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,yBAA2BqC,QANhD,KACb+G,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,KAChE,WAAYoa,iBAAiBzC,IAAiC8B,QAAQ6C,MAO1E,OACI,SAACT,GAAY,CACThQ,OAAQA,EACRiQ,SAAU,IAEFO,IACI,SAAC,GAAU,WACP,SAAC,GAAO,CACJhe,SAAU,OACVH,YAAarC,EAAKW,cAAc,CAAEC,GAAI,2BAA2B,UACjE,SAAC,GAAc,CACX+f,OAAK,EACLC,mBAAmB,OACnBhL,QAASA,EACT1G,KAAM,gBACN1D,MAAO,GACPhL,MAAM,UACNE,QAAQ,oBCzCtC2mB,GAAuB,IAAyB7nB,iBAAiB,wBAW1D8nB,GAAiC,EAAGpf,SAAQ8E,OAAM+T,oBAC3D,MAAM,OAAE/Q,GAAW9H,EACb8B,GAAW,WACVwW,EAAsBQ,IAA2B,IAAAnf,eAA8BS,IAC/E0T,EAAKqL,IAAU,IAAAxf,eAA6BS,IAC5C2e,EAAYC,IAAiB,IAAArf,WAAkB,GAChDsf,GAAQ,QAAgBjR,GAAU,KAAO/P,UAAUihB,kBAAkBlR,EAAOF,GAAS,GAAAI,eACpFkR,EAAMC,IAAW,IAAA1f,UAAkC,IAEpD4e,GAAe,IAAAhc,aACjB,CAACkZ,EAAWc,KACJd,GAAqB,MAAdA,EAAIvZ,OACX,WAAYma,iBAAiBzC,IAE7B2C,EACArJ,OAAOoJ,SAASC,UAIpBuC,GAAwB,GACxBhX,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,EAAMrd,SAAS,OAEvF,CAAC6F,EAAUgG,IAGTyR,GAAc,IAAAhd,aACfuY,IACGgE,EAAwBhE,GACxBhT,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,MAExE,CAACxX,EAAUgG,IAGT0R,GAAgB,IAAAjd,aACjBN,GAAqB6F,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,aAC7E,CAAC6L,EAAQhG,IAGP2X,GAAoB,IAAAld,aAAY,KAClC,WACKmd,sBACA9c,KAAK,EAAGG,aACLoc,EAAOpc,EAAOsiB,wBAEjB3J,QAAQ,IAAM8D,GAAc,KAClC,CAACA,IAEEI,GAAY,IAAArd,aAAY,KAC1B,WACK+iB,0BAA0B,CAAE9lB,MAAO,KACnCoD,KAAK,EAAGG,aACLsc,EAAQtc,GACRic,GAAc,KAEjBhc,MAAM,KACH8E,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,qCACtCwV,GAAwB,GACxBhX,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,EAAMrd,SAAS,OAEtFyZ,QAAQ,IAAM8D,GAAc,KAClC,CAACA,EAAe1X,EAAUgG,IA6B7B,OA3BA,IAAA5K,WAAU,KACN,IAAK6b,EAAY,OACjB,IAAKT,EAAsB,OAC3B,GAAIW,IAAU,EAAAkB,eAAgB,OAC9B,MAAMC,EAAWC,YAAYT,EApEZ,KAqEjB,MAAO,IAAMU,cAAcF,IAC5B,CAAC9B,EAAsBsB,EAAWb,EAAYE,KAEjD,IAAA/b,WAAU,KACNsc,GAAc,GACd,WACKlB,uBACA1b,KAAK,EAAGG,YAAawc,EAAYxc,IACjCC,MAAMub,GACN7C,QAAQ,IAAM8D,GAAc,KAClC,CAACD,EAAaN,EAAOQ,EAAmBD,EAAejB,KAE1D,IAAArb,WAAU,KACN,GAAKob,EACL,OAAIW,IAAU,EAAAsB,gBACVf,GAAc,QACdC,UAGJG,KACD,CAACtB,EAAsBmB,EAAmBD,EAAeI,EAAWX,IAEnEX,GAAwBW,GAASA,IAAU,EAAAkB,gBAAkBtB,GACtD,8BAAGA,EAAcI,EAAOnL,GAAO,OAItC,SAACiJ,GAAY,CACTC,OAAQ,KAEA,+BACI,SAACkI,GAA0B,CACvBpX,OAAQA,EACRwQ,0BAA+Cle,IAAzBke,IAA+D,IAAzBA,EAC5DC,aAAc,IAAMA,OAAane,GAAW,OAK5D6c,WAAY,KAEJ,UAACE,GAAkB,CAACrP,OAAQA,EAAM,UAC7BwQ,IAAwB,SAAC6G,GAAoB,CAACI,gBAAiBnG,SACtChf,IAAzBke,IAAsC,6BACble,IAAzBke,IAA+D,IAAzBA,GAA2C,SAATxT,IACrE,SAAC0P,GAAyB,UCjIhD,GAAiB,IAAyBld,iBAAiB,kBAC3D,GAAU,IAAyBA,iBAAiB,WAE7C,GAAa,OAAU;oBACfK,GAAUA,EAAMC,MAAM6D,MAAM8F;;sBAE1B5J,GAAUA,EAAMC,MAAMU,MAAMa;;EAItC,GAAU,OAA6B;iBAClCxB,GAAUA,EAAMC,MAAMS,KAAKkJ,GAAK;aACpC5J,GAAUA,EAAMW;EAGjBknB,GAAyB,EAClC1X,SACAwQ,wBAAuB,EACvBC,mBAMA,MAAMzgB,GAAO,IAAAC,WACP+J,GAAW,UAEX2d,GAAQ,QAAgBzX,GAAU,KAAO/P,UAAUynB,sBAAsB1X,EAAOF,GAAS,GAAAI,cAOzFwF,EAA0C,CAC5C,CAAEpK,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,yBAA2BqC,QANhD,KACb+G,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,SAAS,KAChE,WAAYoa,iBAAiBzC,IAAiC8B,QAAQ6C,MAO1E,OACI,SAACT,GAAY,CACThQ,OAAQA,EACRiQ,SAAU,IAEFO,IACI,SAAC,GAAU,WACP,SAAC,GAAO,CACJhe,SAAU,OACVH,YAAarC,EAAKW,cAAc,CAAEC,GAAI,2BAA2B,UACjE,SAAC,GAAc,CACX+f,OAAK,EACLC,mBAAmB,OACnBhL,QAASA,EACT1G,KAAM,gBACN1D,MAAO,GACPhL,MAAM,UACNE,QAAQ,iBAOhCwf,UAAY1f,GAEJggB,GACU,IAAVmH,IACI,UAAC,GAAO,CAACnnB,MAAOA,EAAK,cACfR,EAAKW,cAAc,CAAEC,GAAI,mCAAqC,CAAE+mB,UAAQ,UC5DhGE,GAAmB,IAAyBroB,iBAAiB,oBAWtDsoB,GAA6B,EAAG5f,SAAQ8E,OAAM+T,oBACvD,MAAM,OAAE/Q,GAAW9H,EACb8B,GAAW,WACVwW,EAAsBQ,IAA2B,IAAAnf,eAA8BS,IAC/E2e,EAAYC,IAAiB,IAAArf,WAAkB,IAC/Cyf,EAAMC,IAAW,IAAA1f,UAA0B,KAC3CmU,EAAKqL,IAAU,IAAAxf,eAA6BS,GAC7C6e,GAAQ,QAAgBjR,GAAU,KAAO/P,UAAUihB,kBAAkBlR,EAAOhI,EAAO8H,QAAS,GAAAI,cAE5FqQ,GAAe,IAAAhc,aACjB,CAACkZ,EAAWc,KACJd,GAAqB,MAAdA,EAAIvZ,OACX,WAAYma,iBAAiBzC,IAE7B2C,EACArJ,OAAOoJ,SAASC,UAIpBuC,GAAwB,GACxBhX,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,EAAMrd,SAAS,OAEvF,CAAC6F,EAAUgG,IAGT+X,GAAyB,IAAAtjB,aAAY,KACvC,WACKujB,gCACAljB,KAAK,EAAGG,aACL+E,EAAS,KAAOyG,MAAMnF,QAAQ2c,mBAAmB,CAAEjY,SAAQ2X,MAAO1iB,KAClE+E,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,OAEvEtc,MAAMub,IACZ,CAACzW,EAAUgG,EAAQyQ,IAEhBiB,GAAgB,IAAAjd,aACjBN,GAAqB6F,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ7L,aAC7E,CAAC6L,EAAQhG,IAGP2X,GAAoB,IAAAld,aAAY,KAClC,WACKmd,sBACA9c,KAAK,EAAGG,aACLoc,EAAOpc,EAAOijB,kBAEjBtK,QAAQ,IAAM8D,GAAc,KAClC,CAACA,IAEED,GAAc,IAAAhd,aACfuY,IACGgE,EAAwBhE,GACxBhT,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,MAExE,CAACxX,EAAUgG,IAGT8R,GAAY,IAAArd,aAAY,KAC1B,WACK0jB,mBAAmB,CAAEzmB,MAAO,KAC5BoD,KAAK,EAAGG,aACLsc,EAAQtc,GACRic,GAAc,KAEjBhc,MAAM,KACH8E,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,qCACtCwV,GAAwB,GACxBhX,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQwR,aAAa,EAAMrd,SAAS,OAEtFyZ,QAAQ,IAAM8D,GAAc,KAClC,CAACA,EAAe1X,EAAUgG,IA4C7B,OA1CA,IAAA5K,WAAU,KACN,IAAK6b,EAAY,OACjB,IAAKT,EAAsB,OAC3B,GAAIW,IAAU,EAAAsB,eAAgB,OAC9B,MAAMH,EAAWC,YAAY,KACrBpB,IAAU,EAAAiH,gBACVL,IAEA5G,IAAU,EAAAkB,iBACV0F,IACAjG,MA3FS,KA8FjB,MAAO,IAAMU,cAAcF,IAC5B,CAAC9B,EAAsBsB,EAAWb,EAAY8G,EAAwB5G,KAEzE,IAAA/b,WAAU,KACN,WACKob,uBACA1b,KAAK,EAAGG,YAAawc,EAAYxc,IACjCC,MAAMub,IACZ,CAACgB,EAAahB,KAEjB,IAAArb,WAAU,KACN,GAAKob,EAAL,CACA,GAAIW,IAAU,EAAAsB,eAGV,OAFAf,GAAc,QACdC,IAGJ,GAAIR,IAAU,EAAAiH,eAIV,OAHA1G,GAAc,GACdqG,SACApG,IAIJD,GAAc,GACdqG,IACAjG,GAfiC,GAgBlC,CAACtB,EAAsBW,EAAOQ,EAAmBG,EAAWJ,EAAeqG,EAAwB/d,IAElGwW,GAAwBW,GAASA,IAAU,EAAAkB,gBAAkBtB,GACtD,8BAAGA,EAAcI,EAAOnL,GAAO,OAItC,SAACiJ,GAAY,CACTC,OAAQ,KAEA,+BACI,SAACwI,GAAsB,CACnB1X,OAAQA,EACRwQ,0BAA+Cle,IAAzBke,IAA+D,IAAzBA,EAC5DC,aAAc,IAAMA,OAAane,GAAW,OAK5D6c,WAAY,KAEJ,UAACE,GAAkB,CAACrP,OAAQA,EAAM,eACJ1N,IAAzBke,IAAsC,6BACble,IAAzBke,IAA+D,IAAzBA,GAA2C,SAATxT,IACrE,SAAC0P,GAAyB,IAE7B8D,IAAwB,SAACqH,GAAgB,CAACQ,UAAW/G,UC9JjEgH,GAAY,OAAU;;;;;;EAQ7BC,GAAqB,IAAyB/oB,iBAAiB,sBAC/D,GAAY,IAAyBA,iBAAiB,UAE/CgpB,GAA+B,EAAGxY,aAC3C,MAAOsR,EAAMC,IAAW,IAAA1f,UAAmC,KACpDuC,EAAOqkB,IAAY,IAAA5mB,WAAS,IAC5B6mB,EAAWC,IAAgB,IAAA9mB,WAAS,GAErC6I,GAAkB,UAElBke,GAAQ,IAAAha,SAAQ,KAEd,IAAIsI,MAAO2R,cACX,MACC,IAAI3R,MAAO4R,WAAa,GAAGC,WAAWC,SAAS,EAAG,KACnD,KACA,IAAI9R,MAAO+R,UAAUF,WAAWC,SAAS,EAAG,KAC5C,YAEL,IAcH,OAZA,IAAA5jB,WAAU,KACN,UACK8jB,WAAW,CAAErmB,KAAM+lB,GAAS,CAAE5d,OAAQN,EAAgBM,SACtDlG,KAAK,EAAGG,YAAasc,EAAQtc,IAC7BC,MAAM,KACEwF,EAAgBM,OAAO0S,SACxB+K,GAAS,KAGhB7K,QAAQ,IAAM+K,GAAa,KACjC,CAACC,EAAOle,EAAgBM,SAEvB0d,GAEI,SAACJ,GAAS,WACN,SAAC,GAAS,CAAC/nB,KAAM,QAKzB6D,GAEI,SAACkkB,GAAS,WACN,SAAC,EAAA1c,iBAAgB,CAAChL,GAAI,sCAM9B,SAACqe,GAAY,CACTC,OAAQ,KACG,SAACc,GAAY,CAAChQ,OAAQA,IAEjCmP,WAAY,KAEJ,SAACE,GAAkB,CAACrP,OAAQA,EAAM,UAC9B,SAACuY,GAAkB,CAACjH,KAAMA,SCnErC6H,GAAe,OAAU;eACtBtpB,GAAUA,EAAMC,MAAM6D,MAAMK;EAG/BolB,GAAU,KAAQ;;aAEjBvpB,GAAUA,EAAMC,MAAMU,MAAM6oB;EAG7BC,GAAqB,OAAU;;;;EAS/BC,GAA+B,EACxCvc,OACAgD,SACA4D,cAMA,MAAM5T,GAAO,IAAAC,WACP+J,GAAW,UAEX3J,GAAM,QAAgB6P,GAAU,KAAO/P,UAAUykB,sBAAsB1U,EAAOF,GAAS,GAAAI,cAEvF8S,GAAqB,QACtBhT,GAAU,KAAO/P,UAAUgjB,yBAAyBjT,EAAOF,GAC5D,GAAAI,cAGEgT,GAAY,IAAAxU,SAAiB,OAASsU,IAAsBA,EAAmBG,QAAS,CAACH,IAEzFsG,GAAgB,IAAA/kB,aAAY,KAC9B,GAAa,SAATuI,IAAoBoW,IAAc/iB,EAClC,OAGJ,MAAM6lB,EAAkB,IAAKtS,EAAS6V,UAAU,GAEhD,WACKtD,aAAa,CACV9lB,MACA2P,SACA4D,QAASsS,EACTE,IAAI,IAEPthB,KAAK,IAAMkF,EAAS,KAAOyG,MAAMnF,QAAQ6a,aAAa,CAAEnW,SAAQ4D,QAASsS,MACzEhhB,MAAM,IAAM8E,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,6BACxD,CAACwB,EAAMgD,EAAQoT,EAAW/iB,EAAKuT,EAAS5J,IAE3C,OACI,8BACKoZ,IAAcxP,EAAQ6V,WACnB,SAACN,GAAY,WACT,SAACG,GAAkB,WACf,SAACF,GAAO,CAACnmB,QAASumB,EAAa,SAC1BxpB,EAAKW,cAAc,CAAEC,GAAI,qCCpDhD8oB,GAAoB,IAAyBlqB,iBAAiB,kBAC9DmqB,GAAgB,IAAyBnqB,iBAAiB,iBAEnDoqB,GAA2B,OAAU;;;;;EAiBrCC,IAVyB,OAAU;;;;;;;;EAUP,OAAU;;;eAGnChqB,GAAUA,EAAMC,MAAM6D,MAAMK;yBAClBnE,GAAUA,EAAMC,MAAMU,MAAMob;;;qBAGhC/b,GAAUA,EAAMC,MAAM6D,MAAM8F;cACnC5J,GAAUA,EAAMC,MAAM6D,MAAM8F;GAG9BqgB,GAA2B,EACpC5hB,SACA8E,WAMA,MAAMhN,GAAO,IAAAC,WACP+J,GAAW,WACX,MAAEtI,EAAK,WAAEqoB,EAAU,QAAEC,EAAO,SAAEP,GAAavhB,EAAO0L,SAClD,OAAE5D,GAAW9H,GACZhE,EAAUK,IAAe,IAAA1C,UAAiC,CAC7DooB,WAAY,EACZC,kBAAmB,GACnBC,oBAAqB,GACrBC,mBAAoB,EACpBC,qBAAsB,KAEnBC,EAAmBC,IAAwB,IAAA1oB,WAAkB,IAC7D6I,IAAmB,IAAA7I,UAA0B,IAAI2oB,kBACjDC,EAAgBC,IAAqB,IAAA7oB,WAAS,IAC9C8oB,EAAgBC,IAAqB,IAAA/oB,aACrCgpB,EAAWC,IAAgB,IAAAjpB,YAC5ByE,GAAM,IAAAO,QAAwB6D,GAE9BrK,GAAM,QAAgB6P,GAAU,KAAO/P,UAAUykB,sBAAsB1U,EAAOF,GAAS,GAAAI,cAEvFyU,GAAQ,QAAgB3U,GAAU,KAAO/P,UAAU2kB,wBAAwB5U,EAAOF,GAAS,GAAAI,cAK3F2a,GAAc,IAAAtmB,aAChB,IAAMuF,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,2BAC5C,CAACxB,IAGCghB,GAAa,IAAApc,SACf,MAAQlN,GAASqoB,GAAc7lB,EAASkmB,oBAAsBL,GAC9D,CAACroB,EAAOqoB,EAAY7lB,EAASkmB,qBAG3Ba,GAAuB,IAAArc,SAAQ,IACzBob,GAAWP,GAAsB,SAATzc,EACjC,CAACgd,EAASP,EAAUzc,IAEjBke,GAAsB,IAAAzmB,aAAY,KAC/BpE,IAAO4qB,IACPD,GAKLT,GAAqB,GACrB,WACKY,eAAe,CAAE9qB,MAAK2P,WACtB9K,MAAM6lB,GACNnN,QAAQ,IAAM2M,GAAqB,KARpCvgB,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,4CAS3C,CAACxB,EAAUgG,EAAQ+a,EAAa1qB,EAAK2qB,EAAYC,IAE9CG,GAAgB,IAAA3mB,aACjB6U,IACQjZ,IAAO4qB,IAEZV,GAAqB,GACrB,WACKc,gBACG,CACIhrB,MACA2P,SACAsJ,SAEJhT,EAAIkC,QAAQwC,QAEf9F,MAAM6lB,GACNnN,QAAQ,IAAM2M,GAAqB,MAE5C,CAAClqB,EAAK2P,EAAQ+a,EAAaE,IAGzBK,GAAiB,IAAA7mB,aAAY,KAClB,SAATuI,GAAoB3M,IACxBkqB,GAAqB,GACrB,WACKgB,oBAAoB,CAAElrB,MAAK2P,UAAU1J,EAAIkC,QAAQwC,QACjDlG,KAAMZ,IACHK,EAAYL,EAASe,UAExBC,MAAOyY,IAASA,EAAID,SAAWqN,KAC/BnN,QAAQ,IAAM2M,GAAqB,MACzC,CAAClqB,EAAK0qB,EAAa/a,EAAQhD,IAExBwe,EAAsB,CAACvpB,EAAewpB,KACnCprB,GACL,WACKqrB,4BAA4B,CAAErrB,MAAK2P,SAAQ/N,QAAOwpB,OAAM/pB,MAAO,GAAK4E,EAAIkC,QAAQwC,QAChFlG,KAAMZ,IACH4mB,EAAa,IACN5mB,EAASe,OACZuL,KAAM,IAAItM,EAASe,OAAOuL,MAC1Bmb,IAAKznB,EAASe,OAAO0mB,QAG5BzmB,MAAOyY,IACIA,EAAID,SAAWqN,IAI7B5F,GAAqB,IAAA1gB,aAAY,KAC9BpE,IACLkqB,GAAqB,GACrB,WACKnF,UAA8B,CAAE/kB,MAAK2P,WACrClL,KAAMZ,IACH8F,GAAS,QAAoBgG,EAAQ9L,EAASe,WAEjDC,MAAOyY,IACIA,EAAID,SAAWqN,GAE1BnN,QAAQ,IAAM2M,GAAqB,MACzC,CAACvgB,EAAU+gB,EAAa1qB,EAAK2P,IA4BhC,OA1BA,IAAA5K,WAAU,KACN,MAAMwmB,EAAMtlB,EAAIkC,QAChB,MAAO,KACHojB,EAAIC,UAET,KAEH,IAAAzmB,WAAU,KACNkmB,KACD,CAACA,KAEJ,IAAAlmB,WAAU,KACN,IAAK0Q,MAAMC,QAAQ8O,GAAQ,OAC3B,MAAMgB,EAAShB,EAAMiB,IAAI,GACpBD,GAAWxlB,GAEZwlB,EAAOE,OAAO1lB,MAAQA,GAAOwlB,EAAO7V,SAAWA,IAC7B,6BAAd6V,EAAOG,IACPsF,IAEc,kBAAdzF,EAAOG,IACPb,MAGT,CAACN,EAAOyG,EAAgBtb,EAAQ3P,EAAK8kB,KAGpC,SAAC,KAAU,CACPyB,MAAO,MAEH,SAAY1e,EAAO8H,SACtB,UACD,UAAC4Z,GAAwB,YACrB,SAACF,GAAiB,CACdhoB,MAAOA,EACPqoB,WAAYA,EACZG,kBAAmBhmB,EAASgmB,kBAC5BC,oBAAqBjmB,EAASimB,oBAC9BF,UAAW/lB,EAAS+lB,UACpBG,mBAAoBlmB,GAAUkmB,mBAC9BC,qBAAsBnmB,GAAUmmB,qBAChCZ,SAAUO,GAAWP,EACrBqC,qBAvIa,IAA8B,IAAvB5nB,EAAS+lB,UAAkBiB,IAAwBE,EAAc,GAwIrFW,uBAvIe,IAA8B,IAAvB7nB,EAAS+lB,UAAkBiB,IAAwBE,EAAc,GAwIvFY,qBAAuB/pB,IACnB6oB,EAAa,CACTppB,MAAO,EACP+pB,KAAM,EACNjb,KAAM,GACNmb,IAAK,IAETf,EAAkB3oB,GAClBupB,EAAoBvpB,GACpByoB,GAAkB,MAGzBV,GAAWP,IACR,SAACI,GAAyB,UACrB7pB,EAAKW,cAAc,CAAEC,GAAI,gCAGjCopB,IAAYP,IACT,SAACF,GAA4B,CAACvc,KAAMA,EAAMgD,OAAQ9H,EAAO8H,OAAQ4D,QAAS1L,EAAO0L,UAE3E,SAAT5G,IAAmB,SAAC8V,GAAgB,CAAC9S,OAAQ9H,EAAO8H,OAAQ1P,KAAM4H,EAAO5H,KAAM0M,KAAMA,IACrFsd,IAAqB,SAAC1G,GAAe,KACtC,SAAC+F,GAAa,CACVvmB,KAAMqnB,EACNI,UAAWA,EACXtoB,MACuB,IAAnBooB,EACM3qB,EAAKW,cAAc,CAAEC,GAAI,uBACzBZ,EAAKW,cAAc,CAAEC,GAAI,wBAEnCqJ,QAASygB,EACT9gB,QAAS,KACLkhB,EAAa,CACTppB,MAAO,EACP+pB,KAAM,EACNjb,KAAM,GACNmb,IAAK,KAGbH,oBAAsBC,IAClBD,EAAoBb,GAAkB,EAAGc,YC1O3DQ,GAAoB,IAAyBzsB,iBAAiB,qBAC9D0sB,GAA0B,IAAyB1sB,iBAAiB,2BACpE,GAAgB,IAAyBA,iBAAiB,iBAC1D,GAAgB,IAAyBA,iBAAiB,cAE1D2sB,GAAmB,OAAqC;;;;;MAKvDtsB,GAAUA,EAAMusB,aAAe;;EAUzBC,GAA8B,EAAGnkB,SAAQoM,UAAStH,WAC3D,MAAMhN,GAAO,IAAAC,WACP+J,GAAW,WACX,OAAEgG,EAAQ4D,QAASyQ,GAAkBnc,GACpChE,EAAUK,IAAe,IAAA1C,UAAoC,CAChEyqB,cAAe,GACfC,gBAAiB,EACjBC,cAAe,EACfC,oBAAqB,MAElBhC,EAAgBC,IAAqB,IAAA7oB,WAAS,IAC9C+a,EAAWC,IAAgB,IAAAhb,WAAS,IACpC8oB,EAAgBC,IAAqB,IAAA/oB,aACrCgpB,EAAWC,IAAgB,IAAAjpB,aAE3B6I,IAAmB,IAAA7I,UAA0B,IAAI2oB,iBAClDlkB,GAAM,IAAAO,QAAwB6D,GAE9B2I,GAAQ,QAAe,KAAOlT,UAAUmT,YAAa,GAAAlD,cAErD/P,GAAM,QAAgB6P,GAAU,KAAO/P,UAAUykB,sBAAsB1U,EAAOhI,EAAO8H,QAAS,GAAAI,cAE9F8S,GAAqB,QACtBhT,GAAU,KAAO/P,UAAUgjB,yBAAyBjT,EAAOF,GAC5D,GAAAI,cAGEyU,GAAQ,QACT3U,GAAU,KAAO/P,UAAU2kB,wBAAwB5U,EAAOhI,EAAO8H,QAClE,GAAAI,cAGEjD,GAAW,IAAA1I,aACb,CAACuL,EAAgB4D,KACb5J,GAAS,QAAoBgG,EAAQ4D,KAEzC,CAAC5J,IAOCsb,EAAmBjS,IACrBrJ,EAAS,KAAayG,MAAMnF,QAAQia,kBACpCvb,EAAS,KAAOyG,MAAMnF,QAAQgZ,SAAS,CAAEjR,WACzCrJ,EACI,KAAayG,MAAMnF,QAAQiG,eAAe,CACtCvB,OAAQ9H,EAAO8H,OACf1P,KAAM,EAAAiN,YAAYK,gBAKxBmd,GAAc,IAAAtmB,aAChB,IAAMuF,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAO,2BAC5C,CAACxB,IAGCshB,GAAiB,IAAA7mB,aAClBuL,IACgB,SAAThD,GAAoB3M,IACxBwc,GAAa,GACb,WACK6P,uBAAuB,CAAErsB,MAAK2P,UAAU1J,EAAIkC,QAAQwC,QACpDlG,KAAMZ,IACHK,EAAYL,EAASe,UAExBC,MAAOyY,IACIA,EAAID,SAAWqN,GAE1BnN,QAAQ,IAAMf,GAAa,MAEpC,CAACkO,EAAa1qB,EAAK2M,IAGjB2f,GAAkB,IAAAloB,aAAY,KAC3BpE,IACLwc,GAAa,GACb,WACKuI,UAAiC,CAAE/kB,MAAK2P,UAAU1J,EAAIkC,QAAQwC,QAC9DlG,KAAMZ,IACHiJ,EAAS6C,EAAQ9L,EAASe,OAAO2O,WAEpC1O,MAAOyY,IACIA,EAAID,SAAWqN,GAE1BnN,QAAQ,IAAMf,GAAa,MACjC,CAAC7M,EAAQ+a,EAAa1qB,EAAK8M,IAcxByf,EAAoB,KACtB,GAAKvsB,GACDgkB,EAAc2F,QAAS,CACvB,MAAM6C,EAAe,IAAKxI,EAAeoF,UAAU,GAEnD,WACKtD,aAAoC,CACjC9lB,MACA2P,SACA4D,QAASiZ,IAEZ3nB,MAAM,KACH6lB,KAEZ,GAGE+B,EAA0B7qB,IA7BV,CAACA,IACN,SAAT+K,GAAoB3M,IACxBwc,GAAa,GACb,WACKkQ,mBAAmB,CAAE1sB,MAAK4B,QAAO+qB,MAAO3I,EAAc2I,MAAQ,EAAI,EAAGhd,UAAU1J,EAAIkC,QAAQwC,QAC3FlG,KAAK,KACFwmB,EAAepjB,EAAO8H,UAEzB9K,MAAOyY,IAASA,EAAID,SAAWqN,GAC/BnN,QAAQ,IAAMf,GAAa,MAqBhCuO,CAAcnpB,IAmBZupB,EAAsB,CAACvpB,EAAewpB,KACnCprB,GACL,WACK4sB,+BAA+B,CAAE5sB,MAAK2P,SAAQ/N,QAAOwpB,OAAM/pB,MAAO,GAAK4E,EAAIkC,QAAQwC,QACnFlG,KAAMZ,IACH4mB,EAAa,IACN5mB,EAASe,OACZuL,KAAM,IAAItM,EAASe,OAAOuL,MAC1Bmb,IAAKznB,EAASe,OAAO0mB,QAG5BzmB,MAAOyY,IACIA,EAAID,SAAWqN,IAI7B3H,GAAY,IAAAxU,SAAQ,IAAMsU,GAAsBA,EAAmBG,OAAQ,CAACH,KAElF,IAAA9d,WAAU,KACNkmB,EAAepjB,EAAO8H,SACvB,CAACsb,EAAgBpjB,EAAO8H,UAE3B,IAAA5K,WAAU,KACN,IAAK0Q,MAAMC,QAAQ8O,GAAQ,OAC3B,MAAMgB,EAAShB,EAAMiB,IAAI,GACpBD,GACAxlB,GAEDwlB,EAAOE,OAAO1lB,MAAQA,GAAOwlB,EAAO7V,SAAW9H,EAAO8H,SACpC,iCAAd6V,EAAOG,IACPsF,EAAepjB,EAAO8H,QAER,kBAAd6V,EAAOG,IACP2G,MAGT,CAAC9H,EAAOxkB,EAAK6H,EAAO8H,OAAQ2c,EAAiBrB,IAEhD,MAAM7X,GAAQ,IAAA7E,SAAQ,KAClB,IAAKkH,MAAMC,QAAQsO,EAAcoB,KAAM,MAAO,GAE9C,MAAMY,EAAoB,GAO1B,OANAhC,EAAcoB,IAAIzd,QAASkW,IACnBA,EAAGnJ,MACHsR,EAAGC,KAAKpI,EAAGnJ,QAIZsR,GACR,CAAChC,IAUJ,OARA,IAAAjf,WAAU,KACDiO,GAAkB,SAATrG,GACV,YAAaqG,QAAQvO,KAAMZ,IACvB8F,EAAS,KAAOyG,MAAMnF,QAAQgZ,SAAS,CAAEjR,MAAOnP,EAASe,aAGlE,CAAC+H,EAAMqG,EAAOrJ,IAEJ,SAATgD,GACIsH,GAEI,SAAC6X,GAAgB,CAACC,aAAa,EAAI,UAC/B,SAACF,GAAuB,CACpB7Y,MAAOA,EACPrD,OAAQA,EACR4D,QAAS1L,EAAO0L,QAChB8S,gBAAiBvZ,EACjBwZ,gBAxKK/S,IACrB5J,EAAS,KAAOyG,MAAMnF,QAAQoF,oBAAoB,IAAKkD,MAwKvCuK,aAAevK,GAAYzG,EAAS6C,EAAQ4D,GAC5CU,QAASA,OAQzB,SAAC,KAAU,CACPsS,MAAO,MAEH,SAAY1e,EAAO8H,SACtB,UACD,UAACmc,GAAgB,YACb,SAAC,GAAa,CAAC1Y,MAAOA,EAAO8B,gBAAiB,GAAE,SAC1CnS,IAEM,SAAC6oB,GAAiB,CACdvqB,MAAOwC,EAASsoB,eAAiB,EACjC5kB,OAAQyc,EAAcoB,KAAO,GAC7B6G,cAAepoB,EAASooB,cACxBY,oBAAqBhpB,EAASuoB,oBAAoBzpB,OAAS,EAC3DmqB,eAAgBjlB,EAAO0L,QAAQoW,UAAW,EAC1CP,SAAUvhB,EAAO0L,QAAQ6V,WAAY,EACrCrmB,KAAM8E,EAAO0L,QAAQxQ,OAAQ,EAC7BgqB,UAAWllB,EAAO0L,QAAQwZ,YAAa,EACvCC,iBAAkBnlB,EAAO0L,QAAQyZ,mBAAoB,EACrDjK,UAAWA,EACXkK,gBAAkBvG,GAAUA,EAAMnmB,IAAMwC,EAAK2jB,EAAMnmB,IACnDgsB,kBAAmBA,EACnBE,uBAAwBA,EACxBpC,kBAAoBzoB,IAChB2oB,EAAkB3oB,GAClBupB,EAAoBvpB,GACpByoB,GAAkB,QAOrCrG,EAAcjhB,OACX,SAACqgB,GAAqB,CAClBC,YAjIUnhB,IAC1B,IAAKlC,EAAK,OAEV,MAAMktB,EAAa,IACZlJ,EACHoB,IAAK,IAAKpB,EAAcoB,KAAO,GAAK,CAAEljB,WAG1C,WACKirB,mBAAmB,CAAEntB,MAAK2P,SAAQxE,MAAOjJ,IACzCuC,KAAK,KACFkF,EAAS,KAAOyG,MAAMnF,QAAQ6a,aAAa,CAAEnW,SAAQ4D,QAAS2Z,OAEjEroB,MAAM6lB,IAqHKna,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,wBAG7CwiB,IACG,SAACN,GAAgB,CACb9S,OAAQ9H,EAAO8H,OACf1P,KAAM4H,EAAO5H,KACbyiB,oBAAqB,CACjBM,SAAUD,GAEdpW,KAAMA,EACNoE,iBAAkB,KACTiC,EAUDiS,EAAgBjS,IAThBwJ,GAAa,GACb,YACKxJ,QACAvO,KAAMZ,IACH8F,EAAS,KAAOyG,MAAMnF,QAAQgZ,SAAS,CAAEjR,MAAOnP,EAASe,UACzDqgB,EAAgBphB,EAASe,UAE5B2Y,QAAQ,IAAMf,GAAa,QAO/CD,IAAa,SAACgH,GAAe,KAC9B,SAAC,GAAa,CACVxgB,KAAMqnB,EACNI,UAAWA,EACXtoB,MAAO8hB,EAAcoB,MAAMkF,GAAkB,IAAIpoB,OAAS,GAC1D0H,QAASygB,EACTc,oBAAsBC,IAClBD,EAAoBb,GAAkB,EAAGc,IAE7C7hB,QAAS,KACLkhB,EAAa,CACTppB,MAAO,EACP+pB,KAAM,EACNjb,KAAM,GACNmb,IAAK,aC1U3B8B,GAAoB,IAAyBjuB,iBAAiB,qBAQvDkuB,GAA8B,EAAGxlB,SAAQ8E,WAClD,MAAMhD,GAAW,WACX,OAAEgG,EAAM,KAAE1P,EAAI,QAAEsT,GAAY1L,EAE5BylB,GAAc,QAAe,KAAYxtB,UAAU2K,KAsBzD,OApBA,IAAA1F,WAAU,KACN4E,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ0E,SAAS,KACzD,KACH1K,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ0E,SAAS,OAErE,CAAC1E,EAAQhG,KAEZ,IAAA5E,WAAU,KACO,SAAT4H,IACAhD,EAAS,KAAayG,MAAMnF,QAAQia,kBACpCvb,EAAS,KAAayG,MAAMnF,QAAQiG,eAAe,CAAEvB,SAAQ1P,YAElE,CAAC0J,EAAUgD,EAAM1M,EAAM0P,KAE1B,IAAA5K,WAAU,KACO,SAAT4H,GAA4B,YAATA,GACnBhD,EAAS,KAAayG,MAAMnF,QAAQia,mBAEzC,CAACvY,EAAMhD,KAGN,SAACyjB,GAAiB,CACdE,YAAaA,EACbC,YAAaha,EAAQga,YACrBC,YAAaja,EAAQka,WACrB9nB,IAAK4N,EAAQ5N,OC5CZ+nB,GAAoB,CAACC,EAA0CC,KACxE,MAAMpmB,EAA6B,GAUnC,OATAmmB,EACKE,OAAQ1d,GAASA,EAAK2d,WACtBnmB,QAASwI,IACN,MAAMpE,EAAS6hB,EAAQ9lB,KAAM+V,GAAOA,EAAG5d,OAASkQ,EAAKlQ,MACjD8L,GACAvE,EAAMye,KAAKla,KAIhBvE,GCGL,GAAY,IAAyBrI,iBAAiB,UAEtD4uB,GAAc,IAAyB5uB,iBAAiB,eACxD,GAAS,IAAyBA,iBAAiB,UAI5C6uB,IAFU,OAAU,GAEF,OAAU;;;;;;;WAO7BxuB,GAAUA,EAAMC,MAAM6D,MAAMK;GAG3BsqB,GAAoC,EAC7CjuB,MACAqB,QACA6sB,iBACAC,qBACAC,qBACAC,gBACAC,oBACAX,mBAAmB,GACnBY,oBACAC,oBACAC,yBACA9hB,WAEA,MAAMhD,GAAW,WACV0e,EAAWC,IAAgB,IAAA9mB,WAAkB,IAC7CktB,EAAgBC,IAAqB,IAAAntB,UAAmD,KACxFotB,EAAiBC,IAAsB,IAAArtB,UAA8B,IAEtEyL,GAAa,IAAAsB,SAAQ,IAAM,KAAOtB,WAAW,EAAAC,YAAY4hB,sBAAuB,KAEtF,IAAA/pB,WAAU,UACM9C,IAARjC,GAAiD,IAA5B2tB,EAAiBhrB,QAA2C,IAA3BisB,EAAgBjsB,SACtE2lB,GAAa,GACb,eACK7d,IAAIzK,EAAK,EAAA+uB,OAAOC,MAChBvqB,KAAMZ,IACHgrB,EAAmBhrB,EAASe,OAAOqqB,OACnCN,EAAkB9qB,EAASe,OAAOuL,QAErCoN,QAAQ,IAAM+K,GAAa,MAErC,CAACtoB,EAAK2tB,EAAkBiB,KAE3B,IAAA7pB,WAAU,KACD/E,GACD6uB,EAAmB,KAExB,CAAC7uB,KAEJ,IAAA+E,WAAU,KACO,SAAT4H,GAA4B,YAATA,GACnBhD,EAAS,KAAayG,MAAMnF,QAAQia,mBAEzC,CAACvY,EAAMhD,IAEV,MAAMikB,GAAU,IAAArf,SACZ,IAAMmf,GAAkBC,EAAkBiB,GAC1C,CAACjB,EAAkBiB,IAGvB,OAAgC,IAA5BjB,EAAiBhrB,QAAiB0lB,GAAsB,SAAT1b,EAY5C0b,GACH,SAAC2F,GAAe,WACZ,SAAC,GAAM,OAGX,8BACM3F,GAAuC,IAA1BqG,EAAe/rB,QAAyB,SAATgK,GAM1C,SAACohB,GAAW,CACRmB,KAAMR,EACNd,QAASA,EACTvsB,MAAOA,EACP6sB,eAAgBA,EAChBC,mBAAoBA,EACpBC,mBAAoBA,EACpBC,cAAeA,EACfC,kBAAmBA,EACnBC,kBAAmBA,EACnBZ,iBAAkBA,EAClBa,kBAAmBA,EACnBC,uBAAwBA,KAjB5B,UAACT,GAAe,YACZ,gBAAKhgB,IAAK,sBAAsB,EAAAd,YAAY4hB,2BAA4B1sB,IAAI,MAC5E,SAAC,EAAAmJ,iBAAgB,CAAChL,GAAI,uCAnB9B,+BACI,UAACytB,GAAe,YACZ,gBAAKhgB,IAAK,sBAAsB,EAAAd,YAAY4hB,2BAA4B1sB,IAAI,MAC5E,SAAC,EAAAmJ,iBAAgB,CAAChL,GAAI0M,EAAW9B,SACjC,SAAC,GAAS,CAACA,MAAM,0BCvE/B,GAAY,IAAyBhM,iBAAiB,UACtD,GAAc,IAAyBA,iBAAiB,eACxD,GAAS,IAAyBA,iBAAiB,UAI5C,IAFU,OAAU,GAEF,OAAU;;;;;;;WAO7BK,GAAUA,EAAMC,MAAM6D,MAAMK;GAG3BwrB,GAA+B,EACxCnvB,MACAqB,QACA6sB,iBACAC,qBACAC,qBACAC,gBACAC,oBACAX,mBAAmB,GACnBY,oBACAC,oBACAC,yBACA9hB,WAEA,MAAMhD,GAAW,WACV0e,EAAWC,IAAgB,IAAA9mB,WAAkB,IAC7CktB,EAAgBC,IAAqB,IAAAntB,UAAmD,KACxFotB,EAAiBC,IAAsB,IAAArtB,UAA8B,KACrE4tB,EAAgBC,IAAqB,IAAA7tB,UAA+B,CAAE8tB,MAAO,YAAarvB,KAAM,aAChGsvB,EAAgBC,IAAqB,IAAAhuB,eAAqCS,IAC1EwtB,EAAsBC,IAA2B,IAAAluB,UAAiB,IAEnEyL,GAAa,IAAAsB,SAAQ,IAAM,KAAOtB,WAAW,EAAAC,YAAYyiB,iBAAkB,IAC3EC,GAAe,IAAArhB,SAAmB,IACb,WAAnBghB,EACO,CAAC,CAAE/rB,KAAM,CAACisB,KAGd,GACR,CAACF,EAAgBE,IACdI,GAAa,IAAAthB,SAAkB,IACV,QAAnBghB,EACO,CAACE,GAGL,GACR,CAACF,EAAgBE,KAEd,aAAEK,IAAiB,SAAaF,EAAcC,GAE9CE,GAAkB,IAAA3rB,aAAY,KAC3BpE,IAILsoB,GAAa,GACb,eACK7d,IAAIzK,EAAK,EAAA+uB,OAAOC,MAChBvqB,KAAMZ,IACHgrB,EAAmBhrB,EAASe,OAAOqqB,OACnCN,EAAkB9qB,EAASe,OAAOuL,MAClCkf,EAAkBxrB,EAASe,OAAOorB,MAClCR,EAAkB3rB,EAASe,OAAOqrB,WAAWV,gBAC7CG,EAAwB7rB,EAASe,OAAOqrB,WAAWR,wBAEtDlS,QAAQ,IAAM+K,GAAa,MACjC,CAACtoB,KAEJ,IAAA+E,WAAU,UACM9C,IAARjC,GAAiD,IAA5B2tB,EAAiBhrB,QAA2C,IAA3BisB,EAAgBjsB,QACtEotB,KAEL,CAAC/vB,EAAK2tB,EAAkBiB,EAAiBmB,KAE5C,IAAAhrB,WAAU,KACD+qB,GAILC,KACD,CAACD,EAAcC,KAElB,IAAAhrB,WAAU,KACD/E,GACD6uB,EAAmB,KAExB,CAAC7uB,KAEJ,IAAA+E,WAAU,KACO,SAAT4H,GAA4B,YAATA,GACnBhD,EAAS,KAAayG,MAAMnF,QAAQia,mBAEzC,CAACvY,EAAMhD,IAEV,MAAMikB,GAAU,IAAArf,SACZ,IAAMmf,GAAkBC,EAAkBiB,GAC1C,CAACjB,EAAkBiB,IAGvB,OAAgC,IAA5BjB,EAAiBhrB,QAAiB0lB,GAAsB,SAAT1b,EAY5C0b,GACH,SAAC,GAAe,WACZ,SAAC,GAAM,OAGX,8BACMA,GAAuC,IAA1BqG,EAAe/rB,QAAyB,SAATgK,GAM1C,SAAC,GAAW,CACRuiB,KAAMR,EACNd,QAASA,EACTvsB,MAAOA,EACP6sB,eAAgBA,EAChBC,mBAAoBA,EACpBC,mBAAoBA,EACpBC,cAAeA,EACfC,kBAAmBA,EACnBC,kBAAmBA,EACnBZ,iBAAkBA,EAClBa,kBAAmBA,EACnBC,uBAAwBA,EACxByB,sBAAuBd,EAAeE,MACtCa,qBAAsBf,EAAenvB,QAnBzC,UAAC,GAAe,YACZ,gBAAK+N,IAAK,sBAAsB,EAAAd,YAAYyiB,sBAAuBvtB,IAAI,MACvE,SAAC,EAAAmJ,iBAAgB,CAAChL,GAAI,uCAnB9B,+BACI,UAAC,GAAe,YACZ,gBAAKyN,IAAK,sBAAsB,EAAAd,YAAYyiB,sBAAuBvtB,IAAI,MACvE,SAAC,EAAAmJ,iBAAgB,CAAChL,GAAI0M,EAAW9B,SACjC,SAAC,GAAS,CAACA,MAAM,0BC3H/BilB,GAAoB,OAAU;;;;;;aAMtB5wB,GAAUA,EAAMC,MAAMU,MAAMob;EAG7B8U,GAAuB,EAAGhrB,WAAUpF,WAC7C,MAAMqwB,GAAO,QAAgBzgB,GAAU,KAAK/P,UAAUywB,WAAW1gB,EAAO5P,IAClEN,GAAO,IAAAC,WAEb,OAAI0wB,IAASA,EAAKE,YAEV,SAACJ,GAAiB,UACbzwB,EAAKW,cAAc,CAAEC,GAAI,0BAA4B,CAAE4K,MAAO,UAAWmlB,EAAOA,EAAKnlB,MAAQ,QAKnG,8BAAG9F,KCrBRorB,GAAgB,IAAyBtxB,iBAAiB,iBAQnDuxB,GAA0B,EAAG7oB,SAAQ8E,WAC9C,MAAMhD,GAAW,WACX,OAAEgG,EAAM,KAAE1P,EAAI,QAAEsT,GAAY1L,EAE5BylB,GAAc,QAAe,KAAYxtB,UAAU2K,KAsBzD,OApBA,IAAA1F,WAAU,KACN4E,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ0E,SAAS,KACzD,KACH1K,EAAS,KAAOyG,MAAMnF,QAAQmJ,eAAe,CAAEzE,SAAQ0E,SAAS,OAErE,CAAC1E,EAAQhG,KAEZ,IAAA5E,WAAU,KACO,SAAT4H,IACAhD,EAAS,KAAayG,MAAMnF,QAAQia,kBACpCvb,EAAS,KAAayG,MAAMnF,QAAQiG,eAAe,CAAEvB,SAAQ1P,YAElE,CAAC0J,EAAUgD,EAAM1M,EAAM0P,KAE1B,IAAA5K,WAAU,KACO,SAAT4H,GAA4B,YAATA,GACnBhD,EAAS,KAAayG,MAAMnF,QAAQia,mBAEzC,CAACvY,EAAMhD,KAGN,SAAC8mB,GAAa,CACVnD,YAAaA,EACbnrB,SAAUoR,EAAQpR,SAClBwuB,UAAWpd,EAAQod,UACnBxc,QAASZ,EAAQY,QACjBqZ,YAAaja,EAAQka,WACrB9nB,IAAK4N,EAAQ5N,OC7CZirB,GAA4B,EACrCjhB,SACAkhB,oBAKA,MAAMC,GAAO,IAAAviB,SAAQ,IAAM,oBAAoBsiB,KAAiBlhB,IAAU,CAACkhB,EAAelhB,IAO1F,OALA,IAAA5K,WAAU,KACD8rB,GACLE,EAAEC,MAAMC,QAAQJ,EAAe,CAAEK,SAAUJ,KAC5C,CAACD,EAAeC,KAEZ,gBAAKvwB,GAAIuwB,KCkCPK,GAAqB,OAAU;;;;EAM/BC,GAAgB,EACzBvpB,SACA2I,QACAyD,WAAU,EACVtH,OAAO,OACPoX,iBACAsN,yBACA3Q,gBACAva,aAWA,MAAM,KAAElG,GAAS4H,EAEjB,OAAI,IAAAypB,+BAA8BzpB,IACvB,SAACmO,GAA6B,CAACnO,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,KACvE,IAAA4kB,gCAA+B1pB,IAC/B,SAACwO,GAA8B,CAACxO,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,KACxE,IAAA6kB,8BAA6B3pB,IAEhC,SAACspB,GAAkB,WACf,SAACd,GAAoB,CAACpwB,KAAM,mBAAkB,UAC1C,SAACkoB,GAA4B,CAACxY,OAAQ9H,EAAO8H,cAIlD,IAAA8hB,mCAAkC5pB,IAClC,SAACmM,GAAiC,CAACnM,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,KAC3E,IAAA+kB,8BAA6B7pB,IAC7B,SAACoP,GAA4B,CAACpP,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,KACtE,IAAAglB,+BAA8B9pB,IAC9B,SAAC6P,GAA6B,CAAC7P,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,EAAM6D,MAAOA,GAAS,OAC7F,IAAAohB,8BAA6B/pB,IAC7B,SAAC2S,GAA4B,CAAC3S,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,EAAMxG,OAAQA,KACpF,IAAA0rB,6BAA4BhqB,IAC5B,SAACuR,GAA2B,CAACvR,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,KACrE,IAAAmlB,sCAAqCjqB,IAExC,UAACspB,GAAkB,YACf,SAAC5f,GAAW,CAAC5B,OAAQ9H,EAAO8H,UAC5B,SAACse,GAAiC,IAAKpmB,EAAO0L,QAAS5D,OAAQ9H,EAAO8H,OAAQhD,KAAMA,QAGrF,IAAAolB,iCAAgClqB,IAEnC,UAACspB,GAAkB,YACf,SAAC5f,GAAW,CAAC5B,OAAQ9H,EAAO8H,UAC5B,SAACwf,GAA4B,IAAKtnB,EAAO0L,QAAS5D,OAAQ9H,EAAO8H,OAAQhD,KAAMA,QAGhF,IAAAqY,2BAA0Bnd,EAAwB,sBAAhBA,EAAO5H,OAE5C,UAACkxB,GAAkB,WACL,SAATxkB,GACG,SAACmE,GAAgB,CAAC7Q,KAAM4H,EAAO5H,KAAM0P,OAAQ9H,EAAO8H,UAEpD,SAAC4B,GAAW,CAAC5B,OAAQ9H,EAAO8H,UAEhC,SAACmU,GAAyB,CACtBjc,OAAQA,EACRoM,QAASA,EACTtH,KAAMA,EACNoX,eAAgBA,QAIrB,IAAAiO,0BAAyBnqB,IAE5B,UAACspB,GAAkB,WACL,SAATxkB,GACG,SAACmE,GAAgB,CAAC7Q,KAAM4H,EAAO5H,KAAM0P,OAAQ9H,EAAO8H,UAEpD,SAAC4B,GAAW,CAAC5B,OAAQ9H,EAAO8H,UAEhC,SAAC8Z,GAAwB,CAAC5hB,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,QAGnE,IAAAslB,6BAA4BpqB,IAE/B,UAACspB,GAAkB,WACL,SAATxkB,GACG,SAACmE,GAAgB,CAAC7Q,KAAM4H,EAAO5H,KAAM0P,OAAQ9H,EAAO8H,UAEpD,SAAC4B,GAAW,CAAC5B,OAAQ9H,EAAO8H,UAEhC,SAACqc,GAA2B,CAACnkB,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,QAGtE,IAAAulB,gCAA+BrqB,IAElC,SAACspB,GAAkB,WACf,SAACd,GAAoB,CAACpwB,KAAM,aAAY,UACpC,SAACwgB,GAA8B,CAC3B5Y,OAAQA,EACRoM,QAASA,EACTtH,KAAMA,EACN+T,cAAeA,SAKxB,IAAAyR,gCAA+BtqB,IAElC,SAACspB,GAAkB,WACf,SAACd,GAAoB,CAACpwB,KAAM,aAAY,UACpC,SAACgnB,GAA8B,CAC3Bpf,OAAQA,EACRoM,QAASA,EACTtH,KAAMA,EACN+T,cAAeA,SAKxB,IAAA0R,4BAA2BvqB,IAE9B,SAACspB,GAAkB,WACf,SAACd,GAAoB,CAACpwB,KAAM,aAAY,UACpC,SAACwnB,GAA0B,CACvB5f,OAAQA,EACRoM,QAASA,EACTtH,KAAMA,EACN+T,cAAeA,SAKxB,IAAA2R,6BAA4BxqB,IAE/B,SAACspB,GAAkB,WACf,SAAC9D,GAA2B,CAACxlB,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,OAGtE,IAAA2lB,yBAAwBzqB,IAE3B,SAACspB,GAAkB,WACf,SAACT,GAAuB,CAAC7oB,OAAQA,EAAQoM,QAASA,EAAStH,KAAMA,OAGlE,IAAA4lB,2BAA0B1qB,IAAWA,EAAO0L,QAAQsd,eAEvD,SAACM,GAAkB,WACf,SAACP,GAAyB,CACtBjhB,OAAQ9H,EAAO8H,OACf1P,KAAM4H,EAAO5H,KACb4wB,cAAehpB,EAAO0L,QAAQsd,kBAMnCQ,GAAyB,8BAAGA,EAAuBpxB,MAAY,0DAA0BA,EAAI,QCrN/FuyB,GAAiB,OAA+E;;;eAG7FhzB,GAAUA,EAAMizB;wBACPjzB,GAAUA,EAAMsS;sBAClBtS,GAAUA,EAAMkzB;ECGjCC,GAAsB,IAAyBxzB,iBAAiB,eAMzDyzB,GAAc,EAAGjjB,SAAQhD,WAClC,MAAMkmB,GAAS,QAAgBhjB,GAAUA,EAAM7C,QAAQ8lB,IAAInjB,GAAQ9H,OAAOgrB,OAAQ,GAAA9iB,cAClF,OACI,8BACK8iB,GAAQnxB,IAAI,CAACqxB,EAAOnxB,KAEN,SAACoxB,GAAK,CAACrjB,OAAQojB,EAAmBpmB,KAAM,QAAb/K,OAShDoxB,GAAQ,EAAGrjB,SAAQhD,WACrB,MAAMomB,GAAQ,QAAgBljB,GAAUA,EAAM7C,QAAQ6lB,OAAOljB,IAC7D,MAAa,SAAThD,GAEI,SAAC6lB,GAAc,CAACC,QAAS,EAAG3gB,gBAAiB,cAAe4gB,cAAe,OAAM,SAC5EK,EAAM/lB,QAAQtL,IAAI,CAAC8P,EAAe5P,KAE3B,SAACqxB,GAAW,CAERC,QAASH,EAAMpjB,OACfA,OAAQ6B,EAAc3J,OAAO8H,OAC7BhD,KAAM,QAHD/K,OAYzB,SAAC4wB,GAAc,CACXC,QAASM,EAAMI,QAAU,EAAI,EAC7BrhB,gBAAiBihB,EAAMI,QAAU,uBAAyB,cAC1DT,cAAeK,EAAMK,OAAS,OAAS,MAAK,SAC3CL,EAAM/lB,QAAQtL,IAAI,CAAC8P,EAAe5P,KAE3B,SAACqxB,GAAW,CAERC,QAASH,EAAMpjB,OACfA,OAAQ6B,EAAc3J,OAAO8H,OAC7BhD,KAAM,QAHD/K,OAcvBqxB,GAAc,EAAGtjB,SAAQujB,UAASvmB,WACpC,MAAMhD,GAAW,UACX6H,GAAgB,QAAgB3B,GAAUA,EAAM7C,QAAQ8lB,IAAInjB,GAAS,GAAAI,cACrEgjB,GAAQ,QAAgBljB,GAAUA,EAAM7C,QAAQ6lB,OAAOK,IAE7D,OAAK1hB,GAIAuhB,GAIAA,EAAM5wB,SAeE,SAATwK,GAEI,gBAAKuF,MAAO,CAAE/P,SAAU,WAAYkxB,IAAKN,EAAM5wB,SAASiB,EAAGkwB,KAAMP,EAAM5wB,SAASoxB,GAAG,UAC/E,SAAC,GAAiB,CACd5jB,OAAQA,EACR9H,OAAQ2J,EACR7E,KAAMA,EACNsH,SAAS,EACTuf,QAAS,eAOrB,SAACC,GAAgB,CACbtxB,SAAU,CAAEoxB,EAAGR,EAAM5wB,SAASoxB,EAAGnwB,EAAG2vB,EAAM5wB,SAASiB,GACnDswB,UAAYvxB,KAEH4wB,EAAM5wB,UAAY4wB,EAAM5wB,SAASoxB,IAAMpxB,EAASoxB,GAChDR,EAAM5wB,UAAY4wB,EAAM5wB,SAASiB,IAAMjB,EAASiB,IAxB/C,CAACjB,IACfwH,EAAS,KAAOyG,MAAMnF,QAAQ0oB,YAAY,CAAEhkB,OAAQujB,EAAS1zB,MAAO,CAAE2C,gBAyB1DuxB,CAAUvxB,IAEjB,UACD,SAACwwB,GAAmB,CAChBiB,YAAa,IArCL,EAACjkB,EAAgB1P,KAIjC0J,EAAS,KAAayG,MAAMnF,QAAQiG,eAAe,CAAEvB,SAAQ1P,WAiClC2zB,CAAYpiB,EAAc3J,OAAO8H,OAAQ6B,EAAc3J,OAAO5H,MAAK,UACtF,SAAC,GAAiB,CACd0P,OAAQA,EACR9H,OAAQ2J,EACR7E,KAAMA,EACNsH,SAAS,EACTuf,QAAS,iBAtDd,yBAqEFC,GAAmB,EAC5BtxB,WACAkD,WACAquB,gBAMA,MAAOG,EAAaC,IAAgB,IAAAtyB,WAAkB,IAC/CuyB,EAAOC,IAAY,IAAAxyB,UAAiB,CAAE+xB,EAAG,EAAGnwB,EAAG,KAC/C6wB,EAAOC,IAAY,IAAA1yB,UAAiB,CAAE+xB,EAAG,EAAGnwB,EAAG,KAC/C+wB,EAAOC,IAAY,IAAA5yB,UAAiB,CAAE+xB,EAAGpxB,EAASoxB,EAAGnwB,EAAGjB,EAASiB,IAElE6C,GAAM,IAAAO,QAAuB,MAE7B6tB,GAAkB,IAAAjwB,aACnBkwB,IACGR,GAAa,GACT7tB,EAAIkC,UACJ6rB,EAAS,CAAET,EAAGe,EAAMC,YAAYC,QAASpxB,EAAGkxB,EAAMC,YAAYE,UAC9DP,EAAS,CAAEX,EAAGY,EAAMZ,EAAGnwB,EAAG+wB,EAAM/wB,MAGxC,CAAC+wB,EAAMZ,EAAGY,EAAM/wB,IAGdsxB,GAAkB,IAAAtwB,aACnBkwB,IACG,GAAIT,GAAe5tB,EAAIkC,QAAS,CAC5B,MAAMwsB,EAAKV,EAAMV,GAAKe,EAAME,QAAUT,EAAMR,GACtCqB,EAAKX,EAAM7wB,GAAKkxB,EAAMG,QAAUV,EAAM3wB,GAE5CgxB,EAAS,CAAEb,EAAGoB,EAAIvxB,EAAGwxB,GACzB,GAEJ,CAACb,EAAMR,EAAGQ,EAAM3wB,EAAGywB,EAAaI,EAAMV,EAAGU,EAAM7wB,IAG7CyxB,GAAgB,IAAAzwB,aAAY,KAC9B0vB,GAAa,GACbJ,EAAU,CAAEH,EAAGY,EAAMZ,EAAGnwB,EAAG+wB,EAAM/wB,KAClC,CAAC+wB,EAAMZ,EAAGY,EAAM/wB,EAAGswB,IAWtB,OATA,IAAA3uB,WAAU,KACN+vB,SAAS5c,iBAAiB,YAAawc,GACvCI,SAAS5c,iBAAiB,UAAW2c,GAC9B,KACHC,SAAS3c,oBAAoB,YAAauc,GAC1CI,SAAS3c,oBAAoB,UAAW0c,KAE7C,CAACH,EAAiBG,KAGjB,gBAAK3iB,MAAO,CAAE/P,SAAU,WAAYkxB,IAAKc,EAAM/wB,EAAGkwB,KAAMa,EAAMZ,GAAKttB,IAAKA,EAAK8uB,YAAaV,EAAe,SACpGhvB,KCrMP,GAAY,IAAyBlG,iBAAiB,UAO/C61B,GAAc,EAAGrlB,SAAQsE,cAClC,MAAMpE,GAAQ,QAAgBA,GAAU,KAAO/P,UAAUwZ,kBAAkBzJ,EAAOF,IAElF,OAAIE,GAAO/L,SAEH,gBACIoO,MAAO,CACH/P,SAAU,WACV8yB,MAAO,EACPnjB,gBAAiB,uBACjBojB,QAAS,OACTC,KAAM,EACNC,eAAgB,SAChBC,WAAY,UACf,UACD,SAAC,GAAS,MAKlBxlB,GAAOylB,OAEH,gBACIpjB,MAAO,CACH/P,SAAU,WACV8yB,MAAO,EACPnjB,gBAAiB,uBACjBojB,QAAS,OACTC,KAAM,EACNC,eAAgB,SAChBC,WAAY,aAMjB,yBCvCT,GAAU,IAAyBl2B,iBAAiB,QAE7Co2B,GAAkB,UAAa;;;;;;;WAOhC/1B,GAAUA,EAAMC,MAAM6D,MAAMK;aAC1BnE,GAAUA,EAAMC,MAAMU,MAAMC;;;wBAGjBZ,GAAUA,EAAMC,MAAMU,MAAMC;;4BAExBZ,GAAUA,EAAMC,MAAMU,MAAM+I;;;;OAInD,IAAAmD;EAGOmpB,GAA6B,EAAG7lB,SAAQ1P,WACjD,MAAM0J,GAAW,UACXhK,GAAO,IAAAC,WAEPsR,GAAiB,IAAA9M,aAAY,KAC/BuF,EAAS,KAAayG,MAAMnF,QAAQia,kBACpCvb,EACI,KAAayG,MAAMnF,QAAQiG,eAAe,CACtCvB,SACA1P,WAGT,CAAC0J,EAAUgG,EAAQ1P,IAChBw1B,EAAM,KAAOxoB,WAAWhN,GAE9B,OACI,SAACs1B,GAAe,CAAC3yB,QAASsO,EAAc,UACpC,SAAC,GAAO,CACJkB,OAAQ,GAAGzS,EAAKW,cAAc,CAAEC,GAAI,4BAA6BZ,EAAKW,cAAc,CAChFC,GAAIk1B,EAAItqB,mBC5Cf,GAAY,OAAU;;;EAyCtBuqB,GAjCO,EAAG/lB,SAAQ/M,UAASyC,eACpC,MAAM5F,GAAQ,IAAAC,YACR+R,GAAS,QAAgB5B,GAAU,KAAO/P,UAAUmf,yBAAyBpP,EAAOF,GAAS,GAAAI,cAE7F4B,GAAgB,IAAApD,SAAQ,KACnB,CACHpO,MAAOsR,GAAUA,EAAc,MAAIG,OAAOH,EAAc,OAAKhS,EAAMU,MAAM0R,MACzEC,gBACIL,GAAUA,EAAO,oBAAsBG,OAAOH,EAAO,qBAAuBhS,EAAMU,MAAMa,MAC5FkV,aAAczE,GAAUA,EAAO,iBAAmB,GAAGA,EAAO,qBAAuB,MACnFkkB,YAAalkB,EAAO,gBAAkBG,OAAOH,EAAO,iBAAmBhS,EAAMU,MAAM0R,MACnF+jB,YAAankB,EAAO,gBAAkB,GAAGA,EAAO,oBAAsB,MACtEokB,YAAapkB,EAAO,gBAAkBG,OAAOH,EAAO,iBAAmB,SAE5E,CAACA,EAAQhS,IAEZ,OACI,SAAC,GAAS,CACNmD,QAASA,EACTsP,MAAO,CACH/R,MAAOwR,EAAcxR,MACrBw1B,YAAahkB,EAAcgkB,YAC3BE,YAAalkB,EAAckkB,YAC3B3f,aAAcvE,EAAcuE,aAC5B0f,YAAajkB,EAAcikB,YAC3B9jB,gBAAiBH,EAAcG,gBAC/B7O,SAAU6yB,OAAOnkB,EAAcuE,cAAgB,EAAI,SAAW,WACjE,SACA7Q,KClCP0wB,GAAa,IAAyB52B,iBAAiB,cAEhD62B,GAAmB,KAAuC;;;;;;;;;;aAUzDx2B,GAAWA,EAAMW,MAAQX,EAAMW,MAAQX,EAAMC,MAAMU,MAAM0R;;;;iBAIrDrS,GAAWA,EAAMW,MAAQX,EAAMW,MAAQX,EAAMC,MAAMU,MAAM0R;;EAI9DokB,GAAuB,EAChCtmB,SACA1P,OACA0V,MACAmL,YAOA,MAAM2U,EAAM,KAAOxoB,WAAWhN,GACxBqnB,GAAQ,QACTzX,GAAqB,IAAViR,EAAc,KAAOhhB,UAAUynB,sBAAsB1X,EAAOF,GAAU,EAClF,GAAAI,cAEE0B,GAAS,QAAgB5B,GAAU,KAAO/P,UAAUmf,yBAAyBpP,EAAOF,GAAS,GAAAI,cAEnG,OACI,SAACimB,GAAgB,CACbn0B,KAAM8T,EACN5T,OAAO,SACP5B,MAAOyR,OAAOH,EAAOtR,aAAU8B,EAC/Bi0B,IAAI,aAAY,aACJT,EAAItqB,MAAK,UACrB,SAAC4qB,GAAU,CAACzO,MAAOA,EAAOrZ,IAAKwnB,EAAIxnB,IAAK9C,MAAOsqB,EAAItqB,MAAOgrB,SAAU,SCtBnEC,GAAoB,EAC7BzmB,SACAgT,eACA9a,SACAoM,WAAU,EACVtH,OACA6D,QACAgjB,UACAzP,iBACAsN,yBACAlrB,aAEA,MAAMwD,GAAW,UACX6H,GAAgB,QAAgB3B,GAAU,KAAO/P,UAAUgQ,aAAaD,EAAOF,IAC/E0mB,GAAa,QAAgBxmB,GAAUA,EAAM7C,QAAQspB,YAAY3mB,GAAS,GAAAI,cAC1EwmB,GAA0B,QAAgB1mB,GAAUA,EAAM7C,QAAQupB,wBAAyB,GAAAxmB,cAC3FP,GAAW,QAAgBK,GAAUA,EAAM7C,QAAQupB,0BAA4B5mB,EAAQ,GAAAI,eACvF,mBAAEymB,EAAkB,sBAAEC,IAA0B,UAAoB,IAE1E,IAAA1xB,WAAU,KACF4d,GACAhZ,EAAS,KAAOyG,MAAMnF,QAAQyrB,qBAAqB,CAAE/mB,SAAQ+V,OAAQ/C,MAG1E,KAEH,IAAA5d,WAAU,KACF8C,GAIA8B,EAAS,KAAOyG,MAAMnF,QAAQ0rB,eAAe,CAAEhnB,SAAQ9H,SAAQ2rB,cAGpE,KAEH,IAAAzuB,WAAU,KACDyxB,GACG7mB,IAAW4mB,GACX5sB,EAAS,KAAOyG,MAAMnF,QAAQ2rB,oBAAoB,CAAEjnB,YAAQ1N,MAIrE,CAACu0B,KAEJ,IAAAzxB,WAAU,KACFyxB,IAAuBhnB,GACvBinB,EAAsBjnB,IAG3B,CAACA,IAEJ,MAAM0B,GAAiB,IAAA9M,aAAY,KAC/B,QAAsBnC,IAAlBuP,GAAwC,SAAT7E,EAC/B,OAEJhD,EAAS,KAAayG,MAAMnF,QAAQia,kBAIpC,MAAM,OAAErd,GAAW2J,EACnB7H,EACI,KAAayG,MAAMnF,QAAQiG,eAAe,CACtCvB,OAAQ9H,EAAO8H,OACf1P,KAAM4H,EAAO5H,SAGtB,CAAC0J,EAAUgD,EAAM6E,IAEpB,YAAsBvP,IAAlBuP,GACO,kEAGPyC,GAAoB,SAATtH,GAEP,UAAC+oB,GAAkB,CACf/lB,OAAQA,EACR/M,QAAS,KACL6zB,GAAsB,GAClBJ,IACA1sB,EAAS,KAAOyG,MAAMnF,QAAQ4rB,iBAAiB,CAAEj1B,MAAOy0B,EAAWz0B,SACnE+H,EAAS,KAAOyG,MAAMnF,QAAQ2rB,oBAAoB,CAAEjnB,cAE3D,WACD,SAACyhB,GAAa,CACVjrB,OAAQA,EACRqK,MAAOA,EACP3I,OAAQ,IACD2J,EAAc3J,UACb2J,EAActP,OAAS,CACvBA,MAAOsP,EAActP,QAG7B+R,QAASA,EACTtH,KAAMA,EACN+T,cAAe,CAACI,EAAOnL,IAEfmL,GAAS,IACL,SAACmV,GAAoB,CACjBtmB,OAAQ9H,EAAOA,OAAO8H,OACtB1P,KAAM4H,EAAOA,OAAO5H,KACpB6gB,MAAOA,EACPnL,IAAKA,OAMzB,SAACid,GAAW,CAACjjB,OAAQA,EAAQhD,KAAMA,KACnC,SAACqoB,GAAW,CAAC/0B,KAAMuR,EAAc3J,OAAO5H,KAAM0P,OAAQ6B,EAAc3J,OAAO8H,OAAQsE,QAASA,QAMpG,UAACyhB,GAAkB,CAAC/lB,OAAQA,EAAQ/M,QAASsO,EAAc,WACvD,SAACkgB,GAAa,CACVjrB,OAAQA,EACR0B,OAAQ,IACD2J,EAAc3J,UACb2J,EAActP,OAAS,CACvBA,MAAOsP,EAActP,QAG7B+R,QAASA,EACTtH,KAAMA,EACN6D,MAAOA,EACPuT,eAAgBA,EAChBsN,uBAAwBA,EACxB3Q,cAAe,CAACI,EAAOnL,IAEfmL,GAAS,IACL,SAACmV,GAAoB,CACjBtmB,OAAQ9H,EAAOA,OAAO8H,OACtB1P,KAAM4H,EAAOA,OAAO5H,KACpB6gB,MAAOA,EACPnL,IAAKA,OAMzB,SAACid,GAAW,CAACjjB,OAAQA,EAAQhD,KAAMA,IACzB,SAATA,IAAmB,SAAC6oB,GAA0B,CAAC7lB,OAAQA,EAAQ1P,KAAM4H,EAAOA,OAAO5H,QACpF,SAAC+0B,GAAW,CAAC/0B,KAAMuR,EAAc3J,OAAO5H,KAAM0P,OAAQ6B,EAAc3J,OAAO8H,OAAQsE,QAASA,QAKxG,MCnLa6iB,GAA+B,OAAU;qBAChCt3B,GAAUA,EAAMC,MAAM6D,MAAM8F;wBACzB5J,GAAUA,EAAMC,MAAMU,MAAMgM;wBAC5B3M,GAAUA,EAAMC,MAAMU,MAAMa;;ECM/C+1B,GAAa,IAAyB53B,iBAAiB,WAEhD63B,GAAuC,EAAGhqB,cACnD,MAAMrN,GAAO,IAAAC,WACPq3B,GAAiB,QAAe,KAAOn3B,UAAUo3B,qBAAsB,GAAAnnB,cAE7E,OACI,8BACK/C,EACI6gB,OAAQhQ,IAAQoZ,EAAe5hB,SAASwI,EAAGhW,OAAO8H,SAClDjO,IACImG,GACGA,GACAA,EAAOA,SACH,SAACivB,GAA4B,WACzB,SAAC,GAAiB,CACdnnB,OAAQ9H,EAAOA,OAAO8H,OACtB9H,OAAQA,EACRoM,SAAO,EACPtH,KAAM,OACN0kB,uBAAyBxpB,IACrB,SAACkvB,GAAU,CACP12B,QAAS,OACT8T,QAASxU,EAAKW,cAAc,CAAEC,GAAI,yBAA2B,CAAEsH,aAGvE2rB,QAAS,aAZkB3rB,EAAOA,OAAO8H,YCdvE,GAAa,IAAyBxQ,iBAAiB,WAEhDg4B,GAAqC33B,IAQ9C,MAAMG,GAAO,IAAAC,YACP,QAAEoN,EAAO,QAAEjD,EAAO,QAAEkK,EAAO,KAAEtH,EAAI,mBAAEyqB,GAAuB53B,EAC1Dy3B,GAAiB,QAAe,KAAOn3B,UAAUo3B,qBAAsB,GAAAnnB,cAE7E,OACI,8BACK/C,EACI6gB,OAAQhQ,IAAQoZ,EAAe5hB,SAASwI,EAAGhW,OAAO8H,SAClDjO,IACImG,GACGA,IACI,SAACivB,GAA4B,WACzB,SAAC,GAAiB,CACdnnB,OAAQ9H,EAAOA,OAAO8H,OACtBgT,aAAc5Y,EACdlC,OAAQA,EACRoM,QAASA,EACTtH,KAAMA,EACNoX,eAAgBqT,EAChB/F,uBAAyBxpB,IAEjB,SAAC,GAAU,CACPxH,QAAS,OACT8T,QAASxU,EAAKW,cACV,CAAEC,GAAI,yBACN,CAAEsH,aAKlB2rB,QAAS,aAnBkB3rB,EAAOA,OAAO8H,YC5BhE0nB,GAAe,KAOxB,MAAOt0B,EAAM6G,IAAW,IAAApI,WAAS,IAC1BuN,EAAQC,IAAa,IAAAxN,YAS5B,MAAO,CACHuB,OACAu0B,SAAWtvB,IACP+G,GAAQG,YAAY,cAAc,EAAO,aAAalH,gBACtD4B,GAAQ,IAEZuF,MAAO,IAAMvF,GAAQ,GACrBwF,KAfQ,IAAAb,SACR,IACI,EAAAc,2BAA2BkoB,KACtBhoB,GAAOP,EAAUO,GAClB,IAAM3F,GAAQ,IAEtB,IAUA4F,UAAU,ICpBZgoB,GAAe,IAAyBr4B,iBAAiB,gBACzD,GAAQ,IAAyBA,iBAAiB,SAU3Cs4B,GAAY,EAAGH,WAAUv0B,OAAMoM,YACxC,MAAMxF,GAAW,UACXU,GAAkB,WACjBvG,EAAS4zB,IAAc,IAAAl2B,WAAS,IAChC+1B,EAAMI,IAAW,IAAAn2B,UAAgB,KACjCyC,EAAO2zB,IAAY,IAAAp2B,UAAyC,CAAEq2B,OAAG51B,EAAW61B,OAAQ,IAErFhf,GAAU,IAAA1U,aAAY,KACxB+K,IACAyoB,EAAS,CAAEC,OAAG51B,EAAW61B,OAAQ,KAClC,CAAC3oB,IAsBJ,OApBA,IAAApK,WAAU,KACN2yB,GAAW,GACX,aACKK,QACG,CAAEF,EAAG5zB,EAAM4zB,GAAK,UAAWx2B,MAlBpB,GAkB2Cy2B,OAAQ7zB,EAAM6zB,QAChE,CAAEntB,OAAQN,EAAgBM,SAE7BlG,KAAM+F,IACHmtB,EAAyB,IAAjB1zB,EAAM6zB,OAAettB,EAAI5F,OAAUozB,GAAS,IAAIA,KAASxtB,EAAI5F,WAExEC,MAAOuG,IACCA,EAAEiS,SACH1T,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOC,EAAE1G,UAAY,oBAG3D6Y,QAAQ,KACLma,GAAW,MAEpB,CAACrtB,EAAiBV,EAAU1F,KAG3B,SAAC,GAAK,CACF/B,MAAO,MACPa,KAAMA,EACNF,aAAciW,EACdhW,2BAAyB,EACzBzC,QAAS,eACT+E,QAAS,CACL,CACIC,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,kBAC/BJ,MAAO,SACPmF,aAAcwT,IAErB,UACD,SAAC0e,GAAY,CACTD,KAAMA,EACNU,YAAaX,EACbxzB,QAASA,EACTo0B,SAAWL,GAAMD,EAAS,CAAEC,IAAGC,OAAQ,IACvCK,WAAY,KACRP,EAAUI,IAAS,IAAMA,EAAMF,OAAQE,EAAKF,OAtDzC,YCejBM,GAAkB,IAAyBj5B,iBAAiB,mBAe5Dk5B,GAAsB,OAAU;;;;;;;EASzBC,GAAe,EACxB9uB,YACAnJ,UAAU,SACVk4B,aACAC,cAAc,UACdC,iBACAhvB,iBAEA,MAAM9J,GAAO,IAAAC,WACPH,GAAQ,IAAAC,YACRiK,GAAW,WAEVqJ,EAAOiR,IAAY,IAAAziB,aACnBsC,EAAS4zB,IAAc,IAAAl2B,WAAS,IAChCwL,EAAS0rB,IAAc,IAAAl3B,UAA+B,KAEtD0iB,EAAcC,IAAmB,IAAA3iB,WAAS,GAE3C8rB,GAAc,QAAe,KAAYxtB,UAAU2K,KACnDkuB,GAAY,QAAe,KAAO74B,UAAU84B,eAC5Cpf,GAAuB,QAAe,KAAQ1Z,UAAU2Z,4BACxDof,GAAyB,QAAe,KAAQ/4B,UAAUg5B,8BAC1Dpf,GAAS,QAAe,KAAM5Z,UAAU6Z,WACxCof,GAAiB,QAAe,KAASj5B,UAAUk5B,sBACnDC,GAAe,QAAgBppB,GAAU,KAAQ/P,UAAUo5B,YAAYrpB,EAAOrG,IAC9E2vB,GAAY,QAAgBtpB,GAAU,KAAK/P,UAAUywB,WAAW1gB,EAAO,cACvEupB,GAAW,QAAgBvpB,GAAU,KAAY/P,UAAU0U,WAAW3E,EAAO,iBAC7EwpB,GAAa,QAAgBxpB,GAAU,KAAK/P,UAAUywB,WAAW1gB,EAAO,gBACvEypB,EAAuBC,IAA4B,IAAA/3B,UAASi3B,IAC5De,EAAaC,IAAkB,IAAAj4B,UAAsD,OACtF,KACFuB,EAAI,SACJkM,EACAE,MAAOyK,EACPxK,IAAKyK,EACLrK,SAAUsK,GACVhL,MAEA/L,KAAM22B,EACNvqB,MAAOwqB,EACPrC,SAAUW,EACV7oB,IAAKwqB,EACLpqB,SAAUqqB,GACVxC,MAEJ,EAAAyC,GAAA,GAAatwB,GzDhGS,EAACuwB,EAAkCrvB,KACzD,MAAMf,GAAW,UACXqwB,GAAc,IAAAzrB,SAAQ,IAAM0rB,GAAA,EAAQ,IACpCC,GAAa,IAAA3rB,SACf,IAAM,KAAQ4rB,0BAA0BxwB,EAAUowB,EAAYrvB,GAC9D,CAACf,EAAUowB,EAAYrvB,KAG3B,IAAA3F,WAAU,KACNm1B,EAAWvyB,QAASyyB,IAChBJ,EAAYK,UAAUD,EAAQvtB,UAAWutB,EAAQE,SAAUF,EAAQA,WAEhE,KACHF,EAAWvyB,QAASyyB,IAChBJ,EAAYO,WAAWH,EAAQvtB,UAAWutB,EAAQE,SAAUF,EAAQA,aAG7E,CAACF,EAAYF,KyDiFhB,CACIf,EAAav3B,IAAKqG,GAAMA,EAAExH,IAC1BiJ,GAGJ,MAAM0K,GAAU,IAAA9P,aACX+P,IACGxK,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOgJ,GAAWxU,EAAKW,cAAc,CAAEC,GAAI,qBAE9E,CAACoJ,EAAUhK,IA0BTokB,EAAiB,KACnBpa,EAAS,KAAQsB,QAAQuvB,cAAc,CAAE9vB,UAAWlB,KACpDqb,KAGEA,GAAa,IAAAzgB,aAAY,KACtB4O,GAAUkR,IACXC,GAAgB,GAChB,YACKnR,QACAvO,KAAM+F,IACHyZ,EAASzZ,EAAI5F,QACbuf,GAAgB,GAGhBxa,EAAS,KAAOyG,MAAMnF,QAAQgZ,SAAS,CAAEjR,MAAOxI,EAAI5F,YAEvDC,MAAOuG,IACJ8I,EAAQ9I,EAAE1G,cAGvB,CAACwP,EAASlB,EAAOkR,EAAcva,IAE5B8wB,GAAY,IAAAr2B,aACdkH,MAAOovB,IACH,GAAI1nB,EAAO,CACP0kB,GAAW,GACX,MAAMiD,EAAoClzB,OAAOC,KAAKixB,GACjDj3B,IAAKnB,GACEyM,GAAS4tB,KAAM1U,GAAMA,EAAEre,OAAO8H,SAAWpP,GAClCo4B,EAAUp4B,GAEd,MAEVstB,OAAQ3H,GAAqC,OAANA,GAE5C,UAGU,YACD2U,WAAW,IACLH,EACH1tB,QAAS2tB,EACT3nB,QACAtI,UAAWlB,EACXhG,KAAMg1B,IAET/zB,KAAK,KACFi0B,EAAW,MAEnB7T,GACJ,CAAE,MAAOzZ,GAEL,MADA8I,EAAQ9I,EAAE1G,UACJ0G,CACV,C,QACIssB,GAAW,EACf,CACJ,GAEJ,CAACluB,EAAWgvB,EAAa3T,EAAY3Q,EAASlB,EAAO2lB,EAAW3rB,IA4BpE,OAzBA,IAAAjI,WAAU,KACN8f,KACD,CAACA,KAEJ,IAAA9f,WAAU,KACN4E,EAAS,KAAQsB,QAAQuvB,cAAc,CAAE9vB,UAAWlB,MACrD,CAACA,EAAWG,KAEf,IAAA5E,WAAU,KACDk0B,GAGLA,EAAatxB,QAASoC,IAClBA,EAAQ+wB,UAAUnzB,QAASE,IACvB8B,EAAS,KAAOyG,MAAMnF,QAAQyrB,qBAAqB,CAAE/mB,OAAQ9H,EAAOA,OAAO8H,OAAQ+V,OAAQ3b,KAC3FJ,EACI,KAAOyG,MAAMnF,QAAQ8vB,2BAA2B,CAC5CprB,OAAQ9H,EAAOA,OAAO8H,OACtBqrB,OAAQjxB,EAAQkxB,eAKjC,CAAChC,EAActvB,KAGd,gCACK6P,GAAwBqf,IACrB,+BACI,SAACR,GAAmB,WAChB,SAACD,GAAe,CACZG,WAAYA,EACZz0B,QAASA,EACTkP,MAAOA,EACPkoB,SAAUjC,EACVwB,UAAWA,EACXU,gBAzHA7vB,MAAOuC,IAC3B,MAAMutB,EAA4CnC,EAAanxB,KAAMnG,GAASA,EAAKpB,KAAOsN,EAAKwtB,WAC/F,GAAKD,EACL,OAAO,YACFE,cAAc,CACXD,UAAWxtB,EAAKwtB,UAChBr5B,YAAa6L,EAAK7L,aAAeo5B,EAAgBp5B,kBAAeC,EAChE+Q,MAAOnF,EAAKmF,MACZhG,QAASa,EAAKb,UAEjBvI,KAAK,KACFkF,EAAS,KAAQsB,QAAQuvB,cAAc,CAAE9vB,UAAWlB,KACpDqb,MAEHhgB,MAAOuG,IACJ8I,EAAQ9I,EAAE1G,aA2GE62B,gBAvGAjwB,MAAO+vB,IAC3B1xB,EAAS,KAAQsB,QAAQuwB,cAAc,CAAEH,YAAW3wB,UAAWlB,MAuG3CiyB,kBAAmBpC,GAAY7pB,WAAY6pB,GAAYqC,UAAUrmB,SAAS,YAC1EsmB,mBAEQtC,GAAY7pB,UACZ6pB,GAAYuC,QACZvC,GAAYqC,UAAUrmB,SAAS,YAGvCwmB,qBACI,SAACnvB,GAAU,CACPC,KAAM,UACNE,UAAW,UACXC,SAAWjF,IACP6wB,EAAW,CAAC7wB,IACZ8B,EACI,KAAOyG,MAAMnF,QAAQ0rB,eAAe,CAChChnB,OAAQ9H,EAAOA,OAAO8H,OACtB9H,OAAQA,EACR2rB,QAAS,aAGjBvP,OAAShiB,GACT4iB,KAEJjY,KAAM,SAGdkvB,4BAA4B,SAAC9E,GAAoC,CAAChqB,QAASA,IAC3E+uB,gCAAiC,CAAChyB,EAASiD,EAASL,EAAMsH,GAAU,KAChE,SAACkjB,GAAiC,CAC9BptB,QAASA,EACTiD,QAASA,EACTL,KAAMA,EACNsH,QAASA,EACTmjB,mBAAoBrT,EACpBiY,mBAAoBnX,IAG5ByI,YAAaA,EACb2O,cAAe,CACXhiB,cAAe,IACRT,EACH0iB,QAASrD,EAAuBsD,iBAEpCjiB,iBAAiB,QAA0BR,EAAQja,EAAOyU,IAE9DA,QAASA,EACTkoB,gBAAiBrD,EAAesD,oBAChCC,kBAAmBvD,EAAeuD,kBAClCC,UAAW7iB,EAAO5R,KAAM00B,GAAiB,SAAXA,EAAEh5B,MAChCi5B,eAAiBtoB,GACbxK,EACI,KAAMsB,QAAQlH,MAAM,CAChBoH,MAAOgJ,GAAWxU,EAAKW,cAAc,CAAEC,GAAI,oBAIvDm8B,aACI,IACQtD,GAAYD,EAAY,CAAC,YAAc,MACxC,KAAKwD,MAAMC,2BAA2BzD,GAAW0D,SAG5Dx8B,QAASA,EACT+Z,SAAU,CACN0iB,MAAO,UACPC,SAAU,aACVroB,KAAM,SACNsoB,cAAe,kBACfzX,KAAM,SACN0X,OAAQ,WACRC,eAAgB,oBAEpBzE,eACIa,EACM,IACOA,EACH6D,iBAAmBC,IACf7D,EAAyB,IAClBD,EACH8D,aACAC,YAAY,KAGpBC,mBAAoB,KAChB/D,EAAyB,IAClBD,EACH8D,gBAAYn7B,EACZo7B,YAAY,WAIxBp7B,EAEVuH,UAAWA,EACX2Q,qBAAsB,CAACN,EAAa+f,GACpC2D,SAAW7zB,GAAe+vB,EAAe,CAAEjwB,YAAWE,aAAYD,qBAKjFqQ,IAAoB,SAAClB,GAAa,CAAC3J,SAAUA,EAAUlM,KAAMA,EAAMoM,MAAOyK,IAC1E4f,IAAe,SAAClwB,EAAc,CAACC,QAAS,IAAMkwB,EAAe,SAAWD,IACxEK,IAAgB,SAACpC,GAAS,CAAC10B,KAAM22B,EAAevqB,MAAOwqB,EAAgBrC,SAAUW,QC7UxFuF,GAAmB,MAAS;;EAI5BC,GAAuB,KAAQ;;;WAG1B,EAAGh+B,WAAYA,EAAM6D,MAAM8F;;aAEzB,EAAG3J,WAAYA,EAAMi+B,KAAKv9B;eACxB,EAAGV,WAAYA,EAAM6D,MAAM8F,QAAQ,EAAG3J,WAAYA,EAAM6D,MAAMK,QAAQ,EAAGlE,WAAYA,EAAM6D,MAAM8F;UACtG,EAAG3J,WAAYA,EAAM6D,MAAMoc;qBAChB,EAAGjgB,WAAYA,EAAMS,KAAKkJ;;;;4BAInB,EAAG3J,WAAYA,EAAMU,MAAMgM;iBACtC,EAAG1M,WAAYA,EAAMi+B,KAAKv9B;;EAIrC,GAAO,IAAyBhB,iBAAiB,QACjDw+B,GAAU,IAAyBx+B,iBAAiB,WACpD,GAAa,IAAyBA,iBAAiB,cACvDy+B,GAAW,IAAyBz+B,iBAAiB,YAE9C0+B,GAAiB,KAC1B,MAAMp+B,GAAQ,IAAAC,YACRC,GAAO,IAAAC,WACPk+B,GAAkB,QAAgBjuB,GAAU,KAAY/P,UAAU0U,WAAW3E,EAAO,wBACpFkuB,GAAc,QAAgBluB,GAAU,KAAY/P,UAAU0U,WAAW3E,EAAO,aAChFmuB,GAAa,QAAgBnuB,GAAU,KAAY/P,UAAU0U,WAAW3E,EAAO,mBAErF,OAAKkuB,GAKD,UAACJ,GAAO,CAACv6B,EAAG,SAAQ,WAChB,SAAC,GAAI,CAACnD,KAAM,QAAU89B,EAAYlvB,KAAMxO,QAAQ,SAASF,MAAO49B,EAAY59B,MAAOD,KAAM,MACzF,SAAC,GAAU,CAACG,QAAQ,KAAKH,KAAK,KAAK+9B,OAAO,SAAQ,SAC7CF,EAAY5yB,SAEf6yB,GAAcF,KACZ,iCACI,SAAC,GAAU,CAAC59B,KAAK,KAAKC,MAAO,QAAO,gBAGpC,SAACy9B,GAAQ,CACLM,YAAU,EACVvI,YAAa,QACbwI,SACI,UAACR,GAAO,CAACv6B,EAAG,SAAUC,IAAK5D,EAAM6D,MAAMoc,GAAE,WACrC,SAAC,GAAU,CAACxf,KAAK,KAAKC,MAAO,QAAO,SAC/BR,EAAKW,cAAc,CAAEC,GAAI,uBAE9B,SAAC,GAAI,CAACN,KAAM,oBAAqBE,MAAO,QAASD,KAAM,QAG/D0f,SAAU,KACN,UAAC+d,GAAO,CAACpxB,UAAW,SAAUlJ,IAAK5D,EAAM6D,MAAM8F,GAAI+I,GAAI,KAAI,UACtD6rB,IACG,SAACR,GAAgB,WACb,UAACC,GAAoB,CAAC57B,KAAMm8B,EAAWroB,IAAG,WACtC,SAAC,GAAI,CACD1V,KAAM,QAAU+9B,EAAWnvB,KAC3B3O,KAAM,GACNG,QAAS,SACTF,MAAO69B,EAAW79B,SAEtB,SAAC,GAAU,CAACD,KAAK,IAAG,SAAE89B,EAAW7yB,aAI5C2yB,IACG,SAACN,GAAgB,WACb,UAACC,GAAoB,CAAC57B,KAAMi8B,EAAgBnoB,IAAG,WAC3C,SAAC,GAAI,CACD1V,KAAM,QAAU69B,EAAgBjvB,KAChC3O,KAAM,GACNG,QAAS,SACTF,MAAO29B,EAAgB39B,SAE3B,SAAC,GAAU,CAACD,KAAK,IAAG,SAAE49B,EAAgB3yB,wBAjDnE,MClCT,GAAa,IAAyBhM,iBAAiB,cACvD,GAAU,IAAyBA,iBAAiB,WACpD,GAAiB,IAAyBA,iBAAiB,kBAC3Di/B,GAAW,IAAyBj/B,iBAAiB,YACrDk/B,GAAa,IAAyBl/B,iBAAiB,cACvDm/B,GAAiB,IAAyBn/B,iBAAiB,kBAC3Do/B,GAAmB,IAAyBp/B,iBAAiB,oBAC7D,GAAa,IAAyBA,iBAAiB,cAEvDq/B,GAAQ,IAAO,GAAW;;oBAEZ,EAAG/+B,WAAYA,EAAM6D,MAAMK;EAGzC86B,GAAe,OAAU;;;;EAMzBC,GAAoB,OAAU;iBACnB,EAAGj/B,WAAYA,EAAM6D,MAAMK;EAS/Bg7B,GAAkB,EAC3BxzB,QACAyB,OACAgyB,eACAC,cACAxW,YACAyW,oBACAC,UACAC,kBACAC,yBAYA,MAAMt/B,GAAO,IAAAC,WACP+J,GAAW,WACX,MAAEu1B,IAAU,QAAe,KAASp/B,UAAUq/B,sBAC9CrB,GAAkB,QAAgBjuB,GAAU,KAAY/P,UAAU0U,WAAW3E,EAAO,wBACpFuvB,GAAsB,QAAgBvvB,GAAU,KAAK/P,UAAUywB,WAAW1gB,EAAO,wBACjFwvB,GAAU,QAAgBxvB,GAAU,KAAY/P,UAAU0U,WAAW3E,EAAO,gBAC5EyvB,GAAY,QAAgBzvB,GAAU,KAAY/P,UAAU0U,WAAW3E,EAAO,kBAE9E0vB,GAA6B,IAAAhxB,SAC/B,IAAM,CACF,CACIpD,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,gCAChCqC,QAAS,KACLo8B,EAAgB,oBAGpBK,EACE,CACI,CACIl0B,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,4BAChCqC,QAAS,KACLo8B,EAAgB,cAI5B,MACFlB,GAAmBsB,GAAqBxD,OACtC,CACI,CACIzwB,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,oCAChCsB,KAAM,iDAGd,IAEV,CAACi8B,EAAiBsB,GAAqBxD,OAAQj8B,EAAM0/B,EAASL,IAE5DQ,GAAoB,IAAAjxB,SACtB,IAAM,CACF,CACIpD,OAAO,SAAC,EAAAI,iBAAgB,CAAChL,GAAG,0BAC5B0Y,MAAO,kBAEPomB,EACE,CACI,CACIl0B,OAAO,SAAC,EAAAI,iBAAgB,CAAChL,GAAG,sBAC5B0Y,MAAO,YAGf,MACF6kB,EACE,CACI,CACI3yB,OAAO,SAAC,EAAAI,iBAAgB,CAAChL,GAAG,8BAC5B0Y,MAAO,oBAGf,MACFqmB,EACE,CACI,CACIn0B,OAAO,SAAC,EAAAI,iBAAgB,CAAChL,GAAG,wBAC5B0Y,MAAO,cAGf,IAEV,CAAC6kB,EAAiBwB,EAAWD,IAGjC,OACI,UAAC,GAAO,CAACj8B,EAAG,SAAQ,UACA,SAAfwJ,EAAKqM,QACF,UAAC,EAAAwmB,SAAQ,YACL,SAACjB,GAAK,CAACt+B,KAAM,IAAK+9B,OAAQ,SAAQ,SAC7B9yB,KAEL,UAAC,GAAO,YACJ,SAACkzB,GAAU,CAACxvB,KAAM,oBAAqBjM,QAAS,IAAMi8B,GAAa7G,OAAQ73B,MAAO,WAClF,SAACk+B,GAAU,CAACxvB,KAAM,qBAAsBjM,QAAS,IAAMi8B,GAAaa,OAAQv/B,MAAO,cAEvF,SAACk+B,GAAU,CACPxvB,KAAM,gBACNjM,QAAS,IAAMi8B,GAAatW,QAC5BoX,QAAS,CAAE39B,YAAa,iBAAkBG,SAAU,UACpDhC,MAAO,cAInB,SAACs+B,GAAY,WACT,SAACH,GAAc,CACXxxB,SAAUiyB,EACV9lB,MAAOrM,EACP3M,KAAM,aACNsV,QAASqpB,EACTrgB,SAAW9J,GAAWA,EAAOtJ,MAC7BkT,SAAW5J,GAAWA,EAAOwE,MAC7B+E,UAAQ,EACR7P,UAAU,EACVrK,QAASukB,EACTuX,UAAQ,OAGhB,SAAC,GAAc,CACXA,UAAQ,EACRz/B,MAAO,UACP0O,KAAM,YACN1D,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,eAChCgV,QAASgqB,EACTp5B,OAAQ,8BAEZ,SAACi4B,GAAQ,CACLD,SACI,SAACE,GAAU,cACK1+B,EAAKW,cAAc,CAAEC,GAAI,kBACrCs/B,aAAc,QACdhxB,KAAM,cACNixB,YAAaZ,EAAMv8B,SAG3Bid,SAAU,KACN,SAAC8e,GAAiB,WACd,UAAC,GAAO,CAACnyB,UAAW,SAAQ,WACxB,SAAC,GAAU,CAAC0xB,OAAQ,SAAU99B,MAAO,UAAS,SACzCR,EAAKW,cAAc,CAAEC,GAAI,qBAE9B,SAACg+B,GAAgB,CACbwB,cAAe,SACfC,aAAc,WACdzzB,UAAW,SACXO,SAAWsI,IACPzL,EAAS,KAASsB,QAAQg1B,SAAS7qB,IACnC0pB,EAAkB,CAAEI,MAAO9pB,KAE/BG,QAASiqB,EACTvmB,MAAOimB,EACPj/B,KAAM,OAEV,SAAC,GAAU,CACP2C,QAAS,KACL+G,EAAS,KAASsB,QAAQg1B,SAAS,KACnCnB,EAAkB,CAAEI,MAAO,MAE/B/sB,GAAI,SACJhS,MAAO,SACP4Y,SAA2B,IAAjBmmB,EAAMv8B,OAAY,SAC3BhD,EAAKW,cAAc,CAAEC,GAAI,wBAK1C29B,YAAU,EACVz4B,MAAO,WAEX,SAAC,GAAc,CACXm6B,UAAQ,EACRtf,OAAK,EACLC,mBAAoB,OACpBpgB,MAAO,UACPE,QAAS,WACTwO,KAAM,kBACN1D,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,mBAChCgV,QAAS,CACL,CACIpK,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2CAChCqC,QAAS,IAAMq8B,GAAmB,WCjNpDiB,GAAW,IAAyB/gC,iBAAiB,YAErDghC,GAAoB,OAAU;qBACf,EAAG1gC,WAAYA,EAAM6D,MAAMK;EAG1Cy8B,GAAS,OAAkC;;;;;MAK3C,EAAGxzB,OAAMnN,WAAqB,SAATmN,GAAmB,4BAA4BnN,EAAMU,MAAM+I;iBACrE,EAAGzJ,WAAYA,EAAM6D,MAAMK;EAGtC4R,GAAoD,CACtD,CACIpK,MAAO,wBACP8N,MAAO,gBAEX,CACI9N,MAAO,wBACP8N,MAAO,gBAEX,CACI9N,MAAO,uBACP8N,MAAO,eAEX,CACI9N,MAAO,oBACP8N,MAAO,SAIFonB,GAAkB,EAC3BC,QAAQ,CAAC,eAAgB,OAAQ,cAAe,gBAChD3zB,OAAO,OACPof,eAAc,EACdwU,cAAa,EACbC,eAAc,EACdC,QACAp7B,WACAiyB,eA2BA,MAAM33B,GAAO,IAAAC,WACP+J,GAAW,UACX+2B,GAAW,KAAAC,eCjFC,MAClB,MAAMh3B,GAAW,UACXqwB,GAAc,IAAAzrB,SAAQ,IAAM0rB,GAAA,EAAQ,IACpCC,GAAa,IAAA3rB,SAAQ,IAAM,KAASqyB,sBAAsBj3B,EAAU,KAAO,CAACA,KAElF,IAAA5E,WAAU,KACNm1B,EAAWvyB,QAASyyB,IAChBJ,EAAYK,UAAUD,EAAQvtB,UAAWutB,EAAQE,SAAUF,EAAQA,WAEhE,KACHF,EAAWvyB,QAASyyB,IAChBJ,EAAYO,WAAWH,EAAQvtB,UAAWutB,EAAQE,SAAUF,EAAQA,aAG7E,CAACF,EAAYF,KDoEhB,GACA,MAAO7uB,EAAOmY,IAAY,IAAA9hB,aACpB,MAAEq/B,EAAK,QAAE/8B,EAAO,KAAEmd,EAAI,qBAAE6f,IAAyB,QAAe,KAAchhC,UAAUq/B,uBACvFN,EAAakC,IAAkB,IAAAv/B,aAC/Bw/B,EAAeC,IAAoB,IAAAz/B,UAA+B,OAClE0/B,EAAmBjC,IAAsB,IAAAz9B,WAAS,GACnD2/B,GAAoB,QAAgBtxB,GAAU,KAAK/P,UAAUywB,WAAW1gB,EAAO,kBAAkBuxB,YACjGA,GAAc,IAAA7yB,SAAQ,KACxB,MAAM8yB,EAAW,IAAIC,gBAAgBvsB,OAAOoJ,SAASojB,QAAQ92B,IAAI,QACjE,OAAQ42B,GACJ,IAAK,eACL,IAAK,cACL,IAAK,eACL,IAAK,OACD,OAAOA,EACX,QACI,MAA6B,aAAtBF,EAAmC,eAAiB,SAEpE,CAACA,IAEEvC,GAAe,IAAArwB,SACjB,IACIgH,GACKsY,OAAQhQ,GAAOyiB,EAAMjrB,SAASwI,EAAG5E,QACjCvX,IAAK+S,IACK,CAAEtJ,MAAOxL,EAAKW,cAAc,CAAEC,GAAIkU,EAAOtJ,QAAU8N,MAAOxE,EAAOwE,SAEpF,CAACqnB,EAAO3gC,KAELiN,EAAMmyB,IAAW,IAAAv9B,UACpBo9B,EAAa92B,KAAME,GAAMA,EAAEiR,QAAUmoB,IAAgBxC,EAAa,IAGhEE,GAAoB,IAAA16B,aACrBo9B,IACG,MAAM9G,EAAS,IAAI4G,gBAAgBvsB,OAAOoJ,SAASojB,aAC7Bt/B,IAAlBu/B,EAAQtC,QACJsC,EAAQtC,MAAMv8B,OAAS,EACvB+3B,EAAO+G,IAAI,QAASD,EAAQtC,MAAMj3B,KAAK,MAEvCyyB,EAAOxX,OAAO,eAGDjhB,IAAjBu/B,EAAQ50B,OACJ40B,EAAQ50B,KACR8tB,EAAO+G,IAAI,OAAQD,EAAQ50B,MAE3B8tB,EAAOxX,OAAO,SAGtBwd,EAAS,IAAIhG,EAAOhS,aAAc,CAAE1P,SAAS,KAEjD,CAAC0nB,IAGCxsB,GAAU,IAAA9P,aACXkZ,IACG3T,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOmS,GAAO3d,EAAKW,cAAc,CAAEC,GAAI,qBAE1E,CAACoJ,EAAUhK,IAGT+hC,GAAY,IAAAt9B,aACb+P,IACGxK,EAAS,KAAMsB,QAAQC,QAAQ,CAAEC,MAAOgJ,MAE5C,CAACxK,IAGCg4B,GAAmB,IAAAv9B,aACpBwI,IACGmyB,EAAQnyB,GACRkyB,EAAkB,CAAElyB,KAAMA,EAAKqM,SAEnC,CAAC6lB,IAGC8C,GAAoB,IAAAx9B,aACtB,CAAC6vB,EAAa4N,KACV,MAAMhB,EAAQ,CAAE5M,MAAO,EAAA1xB,MAAMC,KAAKs/B,WAAW7N,GAAQ4N,IAAK,EAAAt/B,MAAMC,KAAKs/B,WAAWD,IAChFl4B,EAAS,KAAcsB,QAAQ82B,SAASlB,KAE5C,CAACl3B,KAGEq4B,EAAchD,IAAmB,IAAAx9B,UAA+D,MAevG,OAbA,IAAAuD,WAAU,KACN4E,EACI,KAAcsB,QAAQg1B,SACjB,IAAIqB,gBAAgBvsB,OAAOoJ,SAASojB,QAChC92B,IAAI,UACHw3B,MAAM,KACPpU,OAAQrqB,GACL,CAAC,cAAe,UAAW,kBAAmB,aAAa6R,SAAS7R,KACxD,MAG7B,CAACmG,KAGA,UAAC,EAAA81B,SAAQ,WACJp6B,GACGA,EAAS,CACLw7B,QACAG,gBACAgB,eACAd,oBACAD,mBACAjC,kBACAC,wBAENsB,GAAcC,KACZ,UAACJ,GAAM,CAACxzB,KAAMA,EAAKqM,MAAK,UACnBsnB,IAAc,SAAC1C,GAAc,IAC7B2C,IACG,SAAC7B,GAAe,CACZxzB,MAAOA,EACPkd,UAAuB,YAAZvkB,EACX8I,KAAMA,EACNiyB,YAAaA,EACbD,aAAcA,EACdE,kBAAmBA,EACnBC,QAASA,EACTC,gBAAiBA,EACjBC,mBAAoBA,QAKpC,SAACiB,GAAQ,CACLO,MAAOA,EACP9zB,KAAMA,EACNu1B,YAAU,EACVnW,YAAaA,EACboW,OAAQlhB,EACRnd,QAAqB,YAAZA,EACTs2B,QAAS,CACL6C,OAAQ,WACRmF,SAAU,aACVv4B,QAAS,aAEbu3B,YAAax0B,EAAKqM,MAClBopB,yBAA0B,EAAG9hC,KAAIP,MAAKi7B,aAE9B,SAACkF,GAAiB,WACd,SAAC7H,GAAY,CAAC9uB,UAAWjJ,EAAIkJ,WAAYzJ,EAAKu4B,WAAY0C,EAAOlxB,YAI7Eu4B,gBAAiB,CACbC,cAAejf,EACfkf,kBAAmBzB,EACnBn0B,QAEJ61B,cAAeb,EACf1tB,QAASA,EACTwtB,UAAWA,EACXgB,aAAcf,EACdgB,cAAe,KACXh5B,EACI,KAAMsB,QAAQC,QAAQ,CAAEC,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,oCAGhEqiC,mBAAoB3B,EACpB4B,eAAiBnI,GAAW/wB,EAAS,KAAcsB,QAAQ63B,eAAepI,IAC1EqI,sBAAwBxiC,GAAOugC,EAAqBlG,KAAMoI,GAAQA,EAAIC,UAAY1iC,GAClF+2B,SAAUA,QEhPb4L,IAR4B,OAAU;;EAIZ,OAAU;;EAIlB,OAAiC;;wBAEvC1jC,GAAWA,EAAMgQ,SAAW,iBAAmB;;sBAEjDhQ,GAAWA,EAAMgQ,SAAW,MAAQ;;;;GAM9C2zB,GAAkB,OAAU;;;;+BAIT3jC,GAAUA,EAAMC,MAAMU,MAAM+I;EAG/Ck6B,GAAkB,OAAU;;;;;EAO5BC,GAAiB,OAAU;;;;;EAQ3BC,GAAgB,OAAU;;;;aAI1BC;EAGAC,GAAY,OAA0C;;;MAG5DhkC,GAA8B,SAAnBA,EAAM2C,SAAsB,aAAe;MACtD3C,GAA8B,UAAnBA,EAAM2C,SAAuB,kBAAoB;aCzDvC;;;wBD6DH3C,GAAUA,EAAMC,MAAMU,MAAMa;;;;;;;;EAUxCyiC,GAAmB,OAAU;;;;;;;;EAU7BC,GAAe,OAAU;;;;EAMzBC,GAAkB,OAAU;;;;;;;EAS5BC,GAAoB,OAAU;;;wBAGlBpkC,GAAUA,EAAMC,MAAMU,MAAMa;eACrCxB,GAAUA,EAAMC,MAAM6D,MAAMK;EAG/BkgC,GAAgB,OAAU;aCtGN;;;;8BD2GFrkC,GAAUA,EAAMC,MAAMU,MAAM+I;EAG9C46B,GAAsB,UAAqC;;;;;;;;;wBAS/CtkC,GAAWA,EAAMgQ,SAAWhQ,EAAMC,MAAMU,MAAM+I,MAAQ1J,EAAMC,MAAMU,MAAMa;;OAE3F,IAAAqL;;;4BAGuB7M,GAAUA,EAAMC,MAAMU,MAAM+I;;EEzHnD,IF6HyB,OAAU;;wBAEhB1J,GAAUA,EAAMC,MAAMU,MAAMgM;qBA/HtC;;;;;kBADM;;;EA2IU,OAAU;;;;wBAIhB3M,GAAUA,EAAMC,MAAMU,MAAMgJ;;;EAKjB,OAAU;;;;EAMT,OAAU;;;;;EAOjB,OAAU;;;;EAML,OAAU;;;;EEtK3B,IAAyBhK,iBAAiB,WACtD,GAAU,IAAyBA,iBAAiB,QAK7C4kC,GAAc,EAAGp0B,aAC1B,MAAMhG,GAAW,UACXoF,GAAS,QAAgBc,GAAU,KAAa/P,UAAUkkC,aAAan0B,EAAOF,IAUpF,OAAIZ,GAAUA,EAAOk1B,OAASl1B,EAAOnC,MAE7B,iBAAKsF,MAAO,CAAEijB,KAAM,EAAGD,QAAS,OAAQgP,cAAe,SAAUpyB,gBAAiB,QAASqyB,UAAW,IAAI,WACtG,UAAChB,GAAe,YACZ,SAACC,GAAe,KAChB,SAACC,GAAc,qBACf,SAACD,GAAe,WACZ,SAACU,GAAmB,CAAClhC,QAfzB,KACZ+G,EAAS,KAAayG,MAAMnF,QAAQm5B,iBAAiB,CAAEz0B,aAcF,UACjC,SAAC,GAAO,CAAC1P,KAAK,aAAaE,MAAM,QAAQD,KAAM,gBAI3D,gBAAKgS,MAAO,CAAEijB,KAAM,EAAGD,QAAS,QAAQ,SAAGnmB,EAAOnC,QAClD,SAACu2B,GAAe,WACZ,SAAC,GAAS,CAACvgC,QAlBZ,KACX+G,EAAS,KAAayG,MAAMnF,QAAQm5B,iBAAiB,CAAEz0B,aAiBjB,wBAMnC,yB,cCKX,MAAM00B,GAA2B,IAAyBllC,iBAAiB,4BACrEmlC,GAA0B,IAAyBnlC,iBAAiB,2BACpEolC,GAA6B,IAAyBplC,iBAAiB,8BACvEqlC,GAAgC,IAAyBrlC,iBAAiB,iCAC1EslC,GAA4B,IAAyBtlC,iBAAiB,6BACtEulC,GAA2B,IAAyBvlC,iBAAiB,4BACrEwlC,GAAqB,IAAyBxlC,iBAAiB,sBAC/D,GAAwB,IAAyBA,iBAAiB,yBAClE,GAA0B,IAAyBA,iBAAiB,2BACpEylC,GAA8B,IAAyBzlC,iBAAiB,+BACxE0lC,GAAmC,IAAyB1lC,iBAAiB,oCAC7E2lC,GAAuB,IAAyB3lC,iBAAiB,wBACjE4lC,GAA2B,IAAyB5lC,iBAAiB,4BACrE6lC,GAAyB,IAAyB7lC,iBAAiB,0BACnE8lC,GAA6B,IAAyB9lC,iBAAiB,8BACvE+lC,GAA6B,IAAyB/lC,iBAAiB,8BACvEgmC,GAA0B,IAAyBhmC,iBAAiB,2BACpEimC,GAAsB,IAAyBjmC,iBAAiB,uBAChEkmC,GAAwB,IAAyBlmC,iBAAiB,yBAM3DmmC,GAAS,EAAG31B,aACrB,MAAMhG,GAAW,UACXqJ,GAAQ,QAAe,KAAOlT,UAAUmT,aACxCzB,GAAgB,QAAgB3B,GAAU,KAAO/P,UAAUgQ,aAAaD,EAAOF,GAAS,GAAAI,cAExFw1B,GAAiB,QAClB11B,GAAU,KAAa/P,UAAUkkC,aAAan0B,EAAOF,IAAS61B,OAC/D,GAAAz1B,cAGE01B,EAAsBxlC,GACjB,KAAKH,UAAUywB,WAAW,KAAMmV,WAAYzlC,IAAOuP,SAGxDg2B,EAAUjyB,IAIR/B,GACA7H,EAAS,KAAOyG,MAAMnF,QAAQ6a,aAAa,CAAEnW,SAAQ4D,aAGzD5J,EAAS,KAAayG,MAAMnF,QAAQ06B,YAAY,CAAEh2B,YAE9C41B,GACAA,EAAehyB,IAIjBqyB,EAAgB,CAACC,EAA0BtlC,KAKzCoJ,OADO1H,IAAP1B,EACS,KAAO6P,MAAMnF,QAAQmJ,eAAe,CAAEzE,OAAQpP,KAAOslC,IAErD,KAAOz1B,MAAMnF,QAAQmJ,eAAe,CAAEzE,YAAWk2B,MAI5DC,EAAUl5B,IAIZjD,EAAS,KAAayG,MAAMnF,QAAQ86B,oBAAoB,CAAEp2B,SAAQ/C,WAGhE/E,EAAS2J,GAAe3J,OAE9B,OAAKA,GAED,IAAAypB,+BAA8BzpB,IAE1B,SAAC88B,GAAkB,IACX98B,EAAO0L,QACXzG,SAAWyG,IACP5J,GAAS,QAAgDgG,EAAQ4D,GAAS,KAE9EiyB,OAAQ,IAAMA,EAAO,CAAC,MAGvB,IAAAjU,gCAA+B1pB,IAElC,SAAC08B,GAA0B,CACvBvxB,MAAOA,EACPO,QAAS1L,EAAO0L,QAChBzG,SAAWyG,GACP5J,GAAS,QAAiDgG,EAAQ4D,GAAS,IAE/EiyB,OAAQA,EACRI,cAAeA,KAGhB,IAAAnU,mCAAkC5pB,IAErC,SAAC28B,GAA6B,CAC1BxxB,MAAOA,EACPO,QAAS1L,EAAO0L,QAChBzG,SAAWyG,IACP5J,GAAS,QAAoDgG,EAAQ4D,GAAS,KAElFiyB,OAAQA,EACRI,cAAeA,EACfE,OAAQA,KAGT,IAAAtU,8BAA6B3pB,IAC7B,SAACk9B,GAAwB,KACzB,IAAArT,8BAA6B7pB,IAEhC,SAAC68B,GAAwB,CACrBnxB,QAAS1L,EAAO0L,QAChBP,MAAOA,EACPlG,SAAWyG,IACP5J,GAAS,QAA+CgG,EAAQ4D,GAAS,KAE7EiyB,OAAQA,EACRI,cAAeA,KAGhB,IAAAjU,+BAA8B9pB,QACpB5F,IAAV+Q,GACH,SAACyxB,GAAyB,CACtB3sB,OAAQjQ,EAAO0L,QAAQuE,QAAU,GACjCS,KAAM1Q,EAAO0L,QAAQgF,OAAQ,EAC7BD,QAASzQ,EAAO0L,QAAQ+E,UAAW,EACnCxL,SAAWyG,IACP5J,GAAS,QAAgDgG,EAAQ4D,GAAS,KAE9EP,MAAOA,EACPwyB,OAAQA,KAGZ,sDAEG,IAAA5T,8BAA6B/pB,IAEhC,SAACw8B,GAAwB,CACrBv3B,SAAWyG,IACP5J,GAAS,QAA+CgG,EAAQ4D,GAAS,KAE7EiyB,OAAQA,EACRjyB,QAAS1L,EAAO0L,QAChBuyB,OAAQA,KAGT,IAAAjU,6BAA4BhqB,IAE/B,SAACy8B,GAAuB,CACpBx3B,SAAWyG,IACP5J,GAAS,QAA8CgG,EAAQ4D,GAAS,KAE5EiyB,OAAQA,EACRjyB,QAAS1L,EAAO0L,WAGjB,IAAAye,0BAAyBnqB,IAE5B,SAACi9B,GAAoB,CACjBh4B,SAAWyG,IACP5J,GAAS,QAA2CgG,EAAQ4D,GAAS,KAEzEiyB,OAAQA,EACRI,cAAeA,KACX/9B,EAAO0L,WAGZ,IAAAyR,2BAA0Bnd,IAE7B,SAAC,GAAqB,CAClBmL,MAAOA,EACPrD,OAAQ9H,EAAO8H,OACf4D,QAAS,IACF1L,EAAO0L,QACV6R,IAAKvd,EAAO0L,QAAQ6R,KAAK1jB,IAAKwkB,IAAM,IAC7BA,EACHhkB,MAAO,EAAAK,MAAM4jB,KAAKC,uBAAuBF,EAAEhkB,WAGnDmkB,gBAAiB,CAAC1W,EAAQ4D,KACtB5J,GAAS,QAAoBgG,EAAQ4D,GAAS,KAElD+S,gBAAkB/S,IACd5J,EACI,KAAOyG,MAAMnF,QAAQoF,oBAAoB,IAClCkD,EACHrR,MAAO,EAAAK,MAAM4jB,KAAKC,uBAAuB7S,EAAQrR,WAI7D4b,aAAevK,GACX5J,GAAS,QAA4CgG,EAAQ4D,GAAS,OAI3E,IAAA0e,6BAA4BpqB,IAE/B,SAAC,GAAuB,CACpBmL,MAAOA,EACPrD,OAAQ9H,EAAO8H,OACf4D,QAAS1L,EAAO0L,QAChB8S,gBAAiB,CAAC1W,EAAQ4D,KACtB5J,GAAS,QAA8CgG,EAAQ4D,GAAS,KAE5E+S,gBAAkB/S,IACd5J,EAAS,KAAOyG,MAAMnF,QAAQoF,oBAAoB,IAAKkD,MAE3DuK,aAAevK,GACX5J,GAAS,QAA8CgG,EAAQ4D,GAAS,OAI7E,IAAAue,sCAAqCjqB,IAExC,SAACg9B,GAAgC,IACzBh9B,EAAO0L,QACXvT,IAAK6H,EAAO0L,QAAQvT,IACpBqB,MAAOwG,EAAO0L,QAAQlS,OAAS,GAC/BivB,KAAM,CAAE9gB,SAAUi2B,GAClBrrB,SAAU,CACN4rB,SAAU,CACN/V,WAAY,eACZgW,QAAS,YACTlJ,SAAU,aACVmJ,MAAO,WAEXC,YAAa,IAAMP,EAAc,CAAErsB,MAAM,IACzC6sB,YAAc9oB,GAAQ3T,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOmS,EAAI5Y,YAChE2hC,cAAe,IAAMT,EAAc,CAAErsB,MAAM,KAE/CisB,OAAQA,EACR14B,SAAU,CAACyG,EAAS+yB,IAChB38B,GAAS,QAAkDgG,EAAQ4D,EAAS+yB,IAAY,IAE5FV,cAAeA,EACf1xB,QAAU/I,GAAUxB,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,cAGpD,IAAAinB,4BAA2BvqB,IAC3B,SAACm9B,GAAsB,KACvB,IAAAzS,2BAA0B1qB,IAE7B,SAACw9B,GAAqB,CAClBxU,cAAehpB,EAAO0L,QAAQsd,cAC9B/jB,SAAU,CAACyG,EAAS+yB,IAChB38B,GAAS,QAA4CgG,EAAQ4D,EAAS+yB,IAAY,IAEtFd,OAAQA,EACRI,cAAeA,KAGhB,IAAAzT,gCAA+BtqB,IAC/B,SAACo9B,GAA0B,KAC3B,IAAA/S,gCAA+BrqB,IAC/B,SAACq9B,GAA0B,KAC3B,IAAAnT,iCAAgClqB,IAEnC,SAAC+8B,GAA2B,IACpB/8B,EAAO0L,QACXvT,IAAK6H,EAAO0L,QAAQvT,IACpBqB,MAAOwG,EAAO0L,QAAQlS,OAAS,GAC/BivB,KAAM,CAAE9gB,SAAUi2B,GAClBrrB,SAAU,CACN4rB,SAAU,CACN/V,WAAY,eACZgW,QAAS,YACTM,YAAa,gBACbxJ,SAAU,cAEdoJ,YAAa,IAAMP,EAAc,CAAErsB,MAAM,IACzC6sB,YAAc9oB,GAAQ3T,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOmS,EAAI5Y,YAChE2hC,cAAe,IAAMT,EAAc,CAAErsB,MAAM,KAE/CisB,OAAQA,EACR14B,SAAU,CAACyG,EAAS+yB,IAChB38B,GAAS,QAAkDgG,EAAQ4D,EAAS+yB,IAAY,IAE5FV,cAAeA,EACf1xB,QAAU/I,IACNxB,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,eAIpC,IAAAknB,6BAA4BxqB,IAE/B,SAACs9B,GAAuB,CACpBx1B,OAAQ9H,EAAO8H,OACf4D,QAAS1L,EAAO0L,QAChB8S,gBAAiB,CAAC1W,EAAQ4D,KACtB5J,GAAS,QAA8CgG,EAAQ4D,GAAS,QAI7E,IAAA+e,yBAAwBzqB,IAE3B,SAACu9B,GAAmB,CAChBz1B,OAAQ9H,EAAO8H,OACf4D,QAAS1L,EAAO0L,QAChB8S,gBAAiB,CAAC1W,EAAQ4D,KACtB5J,GAAS,QAA0CgG,EAAQ4D,GAAS,QAMzE,wDA5OS,MCpHlB,GAAO,IAAyBpU,iBAAiB,QAI1CqnC,GAAiB,EAAG72B,SAAQxN,eACrC,MAAMwH,GAAW,UACXlK,GAAQ,IAAAC,YAOd,OACI,SAAC0jC,GAAe,WACZ,SAACU,GAAmB,CAAClhC,QARb,KACZ+G,EACI,KAAayG,MAAMnF,QAAQw7B,kBAAkB,CAAE92B,SAAQxN,SAAuB,SAAbA,EAAsB,QAAU,WAM5D,UACjC,SAAC,GAAI,CACDlC,KAAmB,SAAbkC,EAAsB,mBAAqB,kBACjDhC,MAAOV,EAAMU,MAAMc,SACnBf,KAAM,aCnBpBwmC,GAAgB,IAAyBvnC,iBAAiB,iBAEnD,GAAQ,SAAY;;;;;;;EASpBwnC,GAAW,YAAe;;;EAK1BC,GAAmB,EAC5Bz7B,QACAyS,eACAE,mBAMA,MAAMre,GAAQ,IAAAC,YAGRmnC,EAAW,CACb,CACI5mC,MAJK,IAAAL,WAIMU,cAAc,CAAEC,GAAI,0BAC/BumC,OAAQ,CACJrnC,EAAMU,MAAMC,QACZX,EAAMU,MAAM6oB,UACZvpB,EAAMU,MAAM4mC,YACZtnC,EAAMU,MAAMc,SACZxB,EAAMU,MAAMob,OACZ9b,EAAMU,MAAM6mC,MACZvnC,EAAMU,MAAM8mC,KACZxnC,EAAMU,MAAM+mC,SACZznC,EAAMU,MAAMgnC,mBAKxB,OACI,UAACR,GAAQ,YACL,SAAC,GAAK,WACF,SAAC,EAAAp7B,iBAAgB,CAAChL,GAAI4K,OAE1B,SAACu7B,GAAa,CACVG,SAAUA,EACV17B,MAAOA,EACPyS,aAAcA,GAAgBne,EAAMU,MAAMC,QAC1CH,KAAM,mBACN6M,SAAUgR,QCtDpBspB,GAAiB,IAAyBjoC,iBAAiB,eAEpDkoC,GAAoB,EAC7Bl8B,QACAyS,eACAE,mBAMA,MAAMne,GAAO,IAAAC,YAEP,QAAEqH,EAAO,MAAE+I,IAAU,IAAA5I,SAAQ,CAC/BV,cAAe,CAAEuS,MAAO2E,GAAgB,KACxCvW,aAAc,QAUlB,OAPA,IAAAtC,WAAU,KACN,MAAMmL,EAAeF,EAAOG,IACxB2N,EAAa3N,EAAK8I,OAAS,MAE/B,MAAO,IAAM/I,EAAaI,eAC3B,CAACN,EAAO8N,KAGP,SAACspB,GAAc,CACXj8B,MAAOA,EACPlL,KAAM,QACNuQ,MAAM,OACNvJ,QAASA,EACTsJ,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI4K,OC7B5C,GAAsB,IAAyBhM,iBAAiB,uBAEzDmoC,GAAoB,EAC7Bn8B,QACAoK,UAAU,GACVqI,eACAI,YAAW,EACXF,mBAQA,MAAMypB,GAAyB,IAAAh5B,SAAQ,IAC/BqP,GAAgBrI,EAAQzN,KAAM+V,GAAOA,EAAG5E,QAAU2E,GAC3CrI,EAAQzN,KAAM+V,GAAOA,EAAG5E,QAAU2E,GAGtCrI,EAAQ,GAChB,CAACqI,EAAcrI,KAEZ,QAAEtO,EAAO,MAAE+I,IAAU,IAAA5I,SAAQ,CAC/BV,cAAe,CAAE8gC,OAAQD,GACzBlgC,aAAc,QAWlB,OARA,IAAAtC,WAAU,KACN,MAAMmL,EAAeF,EAAOG,IACxB2N,EAAa3N,EAAKq3B,OAAOvuB,SAE7B,MAAO,IAAM/I,EAAaI,eAE3B,CAACN,EAAO8N,KAGP,SAAC,GAAmB,CAChBvI,QAASA,EACTpK,MAAOA,EACPkT,SAAWC,GAAMA,EAAErF,MACnBsF,SAAS,QACTC,UAAU,QACVT,MAAO,CAAEC,YACTypB,gBAAgB,EAChBzpB,SAAUA,EACV/W,QAASA,EACThH,KAAM,YCzCZ,GAAe,IAAyBd,iBAAiB,aAKlDuoC,GAAmB,EAAG/3B,aAC/B,MAAMhQ,GAAO,IAAAC,WACP+J,GAAW,UACXg+B,GAAU,QAAgB93B,GAAU,KAAO/P,UAAUgQ,aAAaD,EAAOF,IACzEi4B,GAAgB,QAAgB/3B,GAAU,KAAO/P,UAAU+nC,oBAAoBh4B,EAAOF,GAAS,GAAAI,cAC/FtQ,GAAQ,IAAAC,YAER+R,GAAS,QAAgB5B,GAAU,KAAO/P,UAAU4R,uBAAuB7B,EAAOF,GAAS,GAAAI,eAE3F,QAAE9I,EAAO,MAAE+I,IAAU,IAAA5I,SAAQ,CAC/BV,cAAe,CAAEpC,KAAMqjC,GAASzlC,MAAM8W,QAAQ,SAAU,MAAQ,IAChE3R,aAAc,SAGlB,IAAAtC,WAAU,KACN,MAAMmL,EAAeF,EAAOG,IACxBxG,EAAS,KAAOyG,MAAMnF,QAAQoF,oBAAoB,CAAEV,SAAQzN,MAAOiO,EAAK7L,UAE5E,MAAO,IAAM4L,EAAaI,eAC3B,CAACN,EAAOL,EAAQhG,IAEnB,MAAMgI,GAAgB,IAAApD,SAAQ,KACnB,CACHpO,MAAOsR,GAAUA,EAAc,MAAIG,OAAOH,EAAc,OAAKhS,EAAMU,MAAM0R,MACzEC,gBAAiBL,GAAUA,EAAO,oBAAsBG,OAAOH,EAAO,qBAAuB,cAC7FM,SAAUN,GAAUA,EAAO,aAAeG,OAAOH,EAAO,cAAgB,KACxEO,WAAYP,GAAUA,EAAO,eAAiBG,OAAOH,EAAO,gBAAkB,SAC9EQ,UAAWR,GAAUA,EAAO,cAAgBG,OAAOH,EAAO,eAAiB,SAEhF,CAACA,EAAQhS,IAENqe,GAAe,IAAA1Z,aACjB,CAACnE,EAAcgZ,KACXtP,EACI,KAAOyG,MAAMnF,QAAQ68B,oBAAoB,CACrCn4B,SACA8B,OAAQ,CAAE,CAACxR,GAAOgZ,OAI9B,CAACtP,EAAUgG,IAGf,OAAOg4B,GACH,iCACI,SAAC,GAAY,CACT1nC,KAAM,OACNkL,MAAO,eACPqF,MAAM,OACNvJ,QAASA,EACTsJ,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,mBAEvB,YAAlBqnC,IACG,iCACI,SAAChB,GAAgB,CACbz7B,MAAM,mBACNyS,aAAcjM,EAAcxR,MAC5B2d,aAAeiqB,GAAejqB,EAAa,QAASiqB,MAExD,SAACnB,GAAgB,CACbz7B,MAAM,yBACNyS,aAAcjM,EAAcG,gBAC5BgM,aAAekqB,GAAyBlqB,EAAa,mBAAoBkqB,MAE7E,SAACX,GAAiB,CACdl8B,MAAO,kBACPyS,aAAcjM,EAAcI,SAC5B+L,aAAemqB,GAAkBnqB,EAAa,YAAamqB,MAE/D,SAACX,GAAiB,CACdn8B,MAAO,oBACPyS,aAAcjM,EAAcK,WAC5BuD,QAAS,CACL,CAAEpK,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,6BAA+B0Y,MAAO,UACxE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,6BAA+B0Y,MAAO,UACxE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2BAA6B0Y,MAAO,SAE1E+E,UAAU,EACVF,aAAeoqB,GAAoBpqB,EAAa,cAAeoqB,MAEnE,SAACZ,GAAiB,CACdn8B,MAAO,mBACPyS,aAAcjM,EAAcM,UAC5BsD,QAAS,CACL,CAAEpK,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,0BAA4B0Y,MAAO,QACrE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,4BAA8B0Y,MAAO,UACvE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,6BAA+B0Y,MAAO,WACxE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2BAA6B0Y,MAAO,UAE1E+E,UAAU,EACVF,aAAeqqB,GAAmBrqB,EAAa,aAAcqqB,YAM7E,yBC7GF,GAAS,IAAyBhpC,iBAAiB,UAE5CipC,GAAe,EAAGz4B,aAC3B,MAAM0J,GAAS,QAAgBxJ,GAAU,KAAO/P,UAAUwZ,kBAAkBzJ,EAAOF,GAAS,GAAAI,eAAewJ,KAC3G,OACI,8BACKF,IACG,SAACsqB,GAAe,WACZ,SAAC,GAAM,CAACzjC,KAAM,WCRrBmoC,GAAiB,EAAG14B,aAC7B,MAAMhQ,GAAO,IAAAC,WACPwb,GAAW,QAAgBvL,GAAU,KAAO/P,UAAUwZ,kBAAkBzJ,EAAOF,GAAS,GAAAI,eAAeqjB,OAC7G,OAAOhY,GACH,SAACwoB,GAAiB,UAAEjkC,EAAKW,cAAc,CAAEC,GAAI,iCAE7C,yBCLF,GAAY,IAAyBpB,iBAAiB,UAE/CmpC,GAAa,EAAG34B,SAAQhD,WACjC,MAAMhN,GAAO,IAAAC,WACP+J,GAAW,UACXg+B,GAAU,QAAgB93B,GAAU,KAAO/P,UAAUgQ,aAAaD,EAAOF,GAAS,GAAAI,cAClF/P,GAAM,QAAgB6P,GAAU,KAAO/P,UAAUykB,sBAAsB1U,EAAOF,GAAS,GAAAI,cA6B7F,OACI,SAAC,GAAS,CAAC5P,MAAM,QAAQyC,QA5BT,KAChB+G,EAAS,KAAayG,MAAMnF,QAAQ06B,YAAY,CAAEh2B,YAClD,MAAM4D,EAAUo0B,GAAWA,EAAQ9/B,QAAU8/B,EAAQ9/B,OAAO0L,QACvDvT,GAAQ2nC,GAAYp0B,IACb,QAAR5G,GACA,WACKmZ,aAAoC,CACjC9lB,MACA2P,OAAQA,EACRzN,MAAOylC,EAAQzlC,MACfqR,QAASA,EACTwS,IAAI,IAEPlhB,MAAOuG,IACJzB,EACI,KAAMsB,QAAQlH,MAAM,CAChBoH,MAAOC,EAAE1G,UAAY/E,EAAKW,cAAc,CAAEC,GAAI,sBAMrD,SAAToM,GACAhD,EAAS,KAAOyG,MAAMnF,QAAQ6a,aAAa,CAAEnW,SAAQ4D,QAASA,OAKrB,SACxC5T,EAAKW,cAAc,CAAEC,GAAI,mBC9BzBgoC,GAA2B,EAAG54B,aACvC,MAAMlQ,GAAQ,IAAAC,YACRiK,GAAW,UACXhK,GAAO,IAAAC,WAEP6R,GAAS,QAAgB5B,GAAU,KAAO/P,UAAUmf,yBAAyBpP,EAAOF,GAAS,GAAAI,cAE7F4B,GAAgB,IAAApD,SAAQ,KACnB,CACHpO,MAAOsR,GAAUA,EAAc,MAAIG,OAAOH,EAAc,OAAKhS,EAAMU,MAAM0R,MACzEC,gBACIL,GAAUA,EAAO,oBAAsBG,OAAOH,EAAO,qBAAuBhS,EAAMU,MAAMa,MAC5Fke,QAASzN,GAAUA,EAAgB,QAAIG,OAAOH,EAAgB,SAAK,IACnEyE,aAAczE,GAAUA,EAAO,iBAAmBG,OAAOH,EAAO,kBAAoB,IACpFkkB,YAAalkB,EAAO,gBAAkBG,OAAOH,EAAO,iBAAmBhS,EAAMU,MAAM0R,MACnF+jB,YAAankB,EAAO,gBAAkBG,OAAOH,EAAO,iBAAmB,IACvEokB,YAAapkB,EAAO,gBAAkBG,OAAOH,EAAO,iBAAmB,SAE5E,CAACA,EAAQhS,IAENqe,GAAe,IAAA1Z,aACjB,CAACnE,EAAcgZ,KACXtP,EACI,KAAOyG,MAAMnF,QAAQu9B,sBAAsB,CACvC74B,SACA8B,OAAQ,CAAE,CAACxR,GAAOgZ,OAI9B,CAACtJ,EAAQhG,IAGb,OACI,iCACI,SAACi9B,GAAgB,CACbz7B,MAAO,yBACPyS,aAAcjM,EAAcG,gBAC5BgM,aAAekqB,GAAyBlqB,EAAa,mBAAoBkqB,MAE7E,SAACpB,GAAgB,CACbz7B,MAAO,mBACPyS,aAAcjM,EAAcxR,MAC5B2d,aAAe3d,GAAU2d,EAAa,QAAS3d,MAEnD,mBACA,SAACknC,GAAiB,CACdl8B,MAAO,gBACPyS,aAAcjM,EAAcuN,QAC5BpB,aAAe2qB,GAAiB3qB,EAAa,UAAWlM,OAAO62B,OAEnE,SAACpB,GAAiB,CACdl8B,MAAO,eACPyS,aAAcjM,EAAcuE,aAC5B4H,aAAe4qB,GAAsB5qB,EAAa,gBAAiBlM,OAAO82B,OAE9E,SAACpB,GAAiB,CACdn8B,MAAO,qBACPyS,aAAcjM,EAAckkB,YAC5BtgB,QAAS,CACL,CAAEpK,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,4BAA8B0Y,MAAO,QACvE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,6BAA+B0Y,MAAO,SACxE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,8BAAgC0Y,MAAO,UACzE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,8BAAgC0Y,MAAO,WAE7E+E,UAAU,EACVF,aAAe6qB,IACX7qB,EAAa,eAAgB6qB,GACR,SAArBA,GAA+B7qB,EAAa,eAAgBre,EAAMU,MAAM0R,OACnD,SAArB82B,GAA+B7qB,EAAa,eAAgB,QAG9B,iBAA9BnM,EAAckkB,aAA0D,SAA9BlkB,EAAckkB,cAC5D,SAAC+Q,GAAgB,CACbz7B,MAAO,qBACPyS,aAAcjM,EAAcgkB,YAC5B7X,aAAe8qB,GAAqB9qB,EAAa,eAAgB8qB,KAGnC,iBAA9Bj3B,EAAckkB,aAA0D,SAA9BlkB,EAAckkB,cAC5D,SAACwR,GAAiB,CACdl8B,MAAO,qBACPyS,aAAcjM,EAAcikB,YAC5B9X,aAAe+qB,GAAqB/qB,EAAa,eAAgB+qB,SChFxEC,GAAwB,EAAGn5B,aACpC,MAAMhG,GAAW,UACXhK,GAAO,IAAAC,WACPmP,GAAS,QAAgBc,GAAU,KAAa/P,UAAUkkC,aAAan0B,EAAOF,GAAS,GAAAI,cACvF0lB,EAAM,KAAOxoB,WAAW8B,GAAQ9O,MAChC6gB,GAAQ,QAAgBjR,GAAU,KAAO/P,UAAUihB,kBAAkBlR,EAAOF,GAAS,GAAAI,cAErF+N,GAAe,IAAA1Z,aAChB0c,IACGnX,EAAS,KAAOyG,MAAMnF,QAAQoF,oBAAoB,CAAEV,SAAQmR,MAAOgV,OAAOhV,OAE9E,CAACnR,EAAQhG,IAGb,OACI,SAAC29B,GAAiB,CACdxpB,aAAcA,EACdE,UAAU,EACV7S,MAAO,8BACPyS,aAAckD,EAAQlP,OAAOkP,GAAS,IACtCvL,QAAS,CACL,CAAEpK,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2BAA6B0Y,MAAO,KACtE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2BAA6B0Y,MAAO,KACtE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2BAA6B0Y,MAAO,KACtE,CAAE9N,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2BAA6B0Y,MAAO,MACxE4U,OAAQhQ,GACNpI,MAAMC,QAAQ+f,EAAIsT,cAAgBtT,EAAIsT,aAAa1zB,SAASygB,OAAOjY,EAAG5E,QAA2B,OCb3G+vB,GAAgB,CAClB,kBACA,sBACA,oBACA,qBACA,yBACA,0BAGE,GAAO,IAAyB7pC,iBAAiB,QACjD,GAAU,IAAyBA,iBAAiB,WAa7C8pC,GAAgB,EAAGt5B,SAAQxN,eACpC,MAAMxC,GAAO,IAAAC,WACP+J,GAAW,UACXlK,GAAQ,IAAAC,YACRuG,GAAM,IAAAO,QAAuB,MAC7BuI,GAAS,QAAgBc,GAAU,KAAa/P,UAAUkkC,aAAan0B,EAAOF,GAAS,GAAAI,cAEvF0lB,EAAM,KAAOxoB,WAAW8B,GAAQ9O,MAEhCipC,GAAoB,IAAA36B,SAAiB,SACXtM,IAArBwzB,EAAIsT,cAA8BtzB,MAAMC,QAAQ+f,EAAIsT,eAA6C,IAA5BtT,EAAIsT,aAAapmC,OAC9F,CAAC8yB,IACE0T,GAAoB,IAAA56B,SAAQ,IACvB,CACH,CACItO,KAAM,eACNkL,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,gBAChC6oC,OAAQ3T,EAAI4T,MAAMC,WAClBz6B,KAAM,aAEV,CACI5O,KAAM,mBACNkL,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,2BAChC6oC,OAAQ3T,EAAI4T,MAAME,aAClB16B,KAAM,gBAEV,CACI5O,KAAM,kBACNkL,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,0BAChC6oC,OAAQ3T,EAAI4T,MAAMG,UAClB36B,KAAM,YAEV,CACI5O,KAAM,eACNkL,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,uBAChC6oC,OAAQF,EACRr6B,KAAM,cAGf,CAAC4mB,EAAK91B,EAAMupC,IAETO,GAAa,IAAAl7B,SAA+B,IAC1CknB,EAAI4T,MAAMG,UACHL,EAAKrhC,KAAM+V,GAAmB,oBAAZA,EAAG5d,MAGzBkpC,EAAKtb,OAAQhQ,GAAOA,EAAGurB,QAAQ,GACvC,CAAC3T,EAAK0T,KAEFO,EAAYC,IAAiB,IAAAnoC,UAAgCioC,GAcpE,OARA,IAAA1kC,WAAU,KACN6kC,WAAW,KACH3jC,GAAOA,EAAIkC,UACXlC,EAAIkC,QAAQ+F,UAAYjI,EAAIkC,QAAQ+F,UAAY,aAErD,IACJ,IAEIa,GACH,UAACu0B,GAAa,YACV,UAACE,GAAS,CAACv9B,IAAKA,EAAK9D,SAAUA,EAAQ,WACnC,SAAC0hC,GAAa,UACTsF,EACItb,OAAQgc,GAAQA,EAAIT,QACpB1nC,IAAKmoC,IAEE,SAAC/F,GAAmB,CAEhBt0B,SAAUk6B,GAAcA,EAAWzpC,OAAS4pC,EAAI5pC,KAChD2C,QAAS,IAAM+mC,EAAcE,GAAI,UACjC,SAAC,GAAO,CAAC1nC,SAAU,OAAQH,YAAa6nC,EAAI1+B,MAAK,UAC7C,SAAC,GAAI,CACDlL,KAAM4pC,EAAIh7B,KACV1O,MACIupC,GAAcA,EAAWzpC,OAAS4pC,EAAI5pC,KAChCR,EAAMU,MAAMa,MACZvB,EAAMU,MAAMc,cATzB4oC,EAAI5pC,UAiB7B,iBAAKiS,MAAO,CAAEijB,KAAM,EAAGD,QAAS,OAAQgP,cAAe,SAAU1zB,MAAO,SAA6B,WACjG,UAAC2yB,GAAe,YACZ,SAACqD,GAAc,CAAC72B,OAAQA,EAAQxN,SAAU4M,EAAO5M,YACjD,SAACkhC,GAAc,WACX,wBAAKqG,EAAaA,EAAWv+B,MAAQxL,EAAKW,cAAc,CAAEC,GAAIk1B,EAAItqB,aAEtE,SAACi4B,GAAe,WACZ,SAACU,GAAmB,CAAClhC,QA7C7B,KACZ+G,EAAS,KAAayG,MAAMnF,QAAQ06B,YAAY,CAAEh2B,aA4CO,UACjC,SAAC,GAAI,CAAC1P,KAAK,aAAaE,MAAOV,EAAMU,MAAMc,SAAUf,KAAM,gBAIvE,UAACujC,GAAgB,YACb,UAACC,GAAY,WACRgG,GAAkC,oBAApBA,EAAWzpC,MAA8Bw1B,EAAI4T,MAAMG,YAC9D,SAAClE,GAAM,CAAC31B,OAAQZ,EAAOY,SAE1B+5B,GAAkC,iBAApBA,EAAWzpC,MAA2Bw1B,EAAI4T,MAAMC,aAC3D,SAAC5B,GAAgB,CAAC/3B,OAAQZ,EAAOY,SAEpC+5B,GAAkC,qBAApBA,EAAWzpC,OACtB,SAACsoC,GAAwB,CAAC54B,OAAQA,IAErC+5B,GAAkC,iBAApBA,EAAWzpC,MAA2BipC,IACjD,SAACJ,GAAqB,CAACn5B,OAAQA,QAGvC,SAACy4B,GAAY,CAACz4B,OAAQA,KACtB,SAAC04B,GAAc,CAAC14B,OAAQA,IACvBq5B,GAAc3zB,SAAStG,EAAO9O,QAAS,SAACqoC,GAAU,CAAC34B,OAAQA,EAAQhD,KAAMoC,EAAOpC,gBAI5FoC,GAAQk1B,OACL,gBAAK/xB,MAAO,CAAE/P,SAAU,WAAY8yB,MAAO,EAAGnjB,gBAAiB,OAAQ2gB,QAAS,SAEhF,4BAIR,yBCxKKqX,GAAyB,OAAU;;;;;EAOnCC,GAA8B,OAAiC;;;kBdpBlD;sBcwBHvqC,GAAWA,EAAMgQ,SAAW,MAAQ;EAG9Cw6B,GAAqB,OAAU;;;;;EAO/BC,GAA2B,OAAU;adjCtB;;EcyCfC,GAAgB,KACzB,MAAMvgC,GAAW,WACjB,IAAA5E,WAAU,KACN,MAAMolC,EAAQ,KACVxgC,EAAS,KAAayG,MAAMnF,QAAQia,mBAIxC,OADAnQ,OAAOmD,iBAAiB,yBAA0BiyB,GAC3C,KACHp1B,OAAOoD,oBAAoB,yBAA0BgyB,KAE1D,CAACxgC,IAEJ,MAAMygC,GAAU,QAAe,KAAatqC,UAAUuqC,cAAe,GAAAt6B,cAErE,OACI,SAAC+5B,GAAsB,CAAC57B,UAAU,wBAAuB,SACpDk8B,EAAQ1oC,IAAKqN,IAEN,SAACm0B,GAAe,CAAC1zB,UAAU,EAAK,UAC5B,SAACw6B,GAAkB,UACM,SAApBj7B,EAAO5M,UACJ,iCACI,SAAC8mC,GAAa,CAACt5B,OAAQZ,EAAOY,OAAQxN,SAAU4M,EAAO5M,YACvD,SAAC4nC,GAA2B,CAACv6B,cAA2BvN,IAAjB8M,EAAOk1B,MAAmB,UAC7D,SAACF,GAAW,CAACp0B,OAAQZ,EAAOY,YAEhC,SAACs6B,GAAwB,QAG7B,iCACI,SAACA,GAAwB,KACzB,SAACF,GAA2B,CAACv6B,cAA2BvN,IAAjB8M,EAAOk1B,MAAmB,UAC7D,SAACF,GAAW,CAACp0B,OAAQZ,EAAOY,YAEhC,SAACs5B,GAAa,CAACt5B,OAAQZ,EAAOY,OAAQxN,SAAU4M,EAAO5M,iBAhBhC4M,EAAOY,YC5DrD26B,GAAQ,KAAM,wBCGrB,GAAY,IAAyBnrC,iBAAiB,aAK/CorC,GAAiB,KAEtB,SAAC,EAAAC,SAAQ,CAACC,UAAU,wBAAK,UACrB,SAAC,GAAS,CAAC34B,gBAAiB,QAASnF,KAAM,QAASu3B,cAAe,SAAQ,UACvE,SAAC,GAAAwG,OAAM,Q,cCDhB,MAAMC,GAAQ,KACjB,MAAO1mC,EAAO2zB,IAAY,IAAAp2B,YACpB7B,GAAO,IAAAC,WAEP4P,GAAW,IAAAjB,SAAQ,IAEjBwiB,EAAE6Z,OAAOC,eAAer7B,UACxBuhB,EAAE6Z,OAAOC,eAAeC,WACxB/Z,EAAE6Z,MAAMC,cAAcC,UAAUnoC,OAErC,IAEGooC,GAAqB,IAAA3mC,aAAaH,IASpC2zB,EAAS,IACF3zB,EACHkB,OANoB8T,IACpBhV,EAAMkB,OAAO8T,GACb2e,OAAS31B,IAKTsD,QAXqB0T,IACrBhV,EAAMsB,QAAQ0T,GACd2e,OAAS31B,OAWd,IAEG+oC,GAAQ,IAAA5mC,aACV,CAACE,EAAcE,IACJ,IAAI8F,QAAgB,CAAC/E,EAASJ,KACjC4lC,EAAmB,CACf5lC,SACAI,UACAjB,OACAE,iBAIZ,CAACumC,IAGCE,GAAiB,IAAA18B,SAAQ,KACpB,CACH28B,QAAU5mC,GAAiB0mC,EAAM1mC,EAAM,WACvC6mC,UAAY7mC,GAAiB0mC,EAAM1mC,EAAM,aACzC8mC,KAAO9mC,GAAiB0mC,EAAM1mC,EAAM,QACpC+mC,GAAK/mC,GAAiB0mC,EAAM1mC,EAAM,MAClCgnC,GAAKhnC,GAAiB0mC,EAAM1mC,EAAM,MAClCinC,OAASjnC,GAAiB0mC,EAAM1mC,EAAM,UACtCknC,MAAQlnC,GAAiB0mC,EAAM1mC,EAAM,WAE1C,CAAC0mC,IAIJ,MAAO,CAAE/mC,QAAOmL,KAFJ,IAAAb,SAAQ,IAAM,EAAAc,2BAA2Bo8B,IAAIR,EAAgBtrC,GAAO,CAACA,EAAMsrC,IAElEz7B,aCnDnBk8B,GAAkB,IAAyBvsC,iBAAiB,gBAOrDwsC,GAA+DnsC,IACxE,MAAMG,GAAO,IAAAC,WACP+J,GAAW,UACXlK,GAAQ,IAAAC,YACRga,GAAS,QAAe,KAAM5Z,UAAU6Z,YACxC,MAAE1V,EAAOmL,IAAKw8B,EAAOp8B,SAAUq8B,GAAelB,MAC9C,KACF5nC,EAAI,SACJkM,EACAE,MAAOyK,EACPxK,IAAKyK,EACLrK,SAAUsK,GACVhL,MAEAK,MAAOwqB,EACP52B,KAAM22B,EACNlqB,SAAUqqB,EAAY,SACtBvC,EACAloB,IAAK08B,GACLzU,KAEE0U,GAAW,IAAAx9B,SAAQ,IACd,IACCuL,EAAmB,CAACD,GAAe,MACnCgyB,EAAa,CAACD,GAAS,MACvB/R,EAAe,CAACiS,GAAW,IAEpC,CAACF,EAAO/xB,EAAaiyB,EAASD,EAAYhS,EAAc/f,IAErDkyB,GAAuB,IAAA5nC,aACxB+P,IACGxK,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOgJ,GAAWxU,EAAKW,cAAc,CAAEC,GAAI,qBAE9E,CAACoJ,EAAUhK,IAGToa,GAAsB,IAAAxL,SAAQ,KACzB,QAA0BmL,EAAQja,EAAOusC,GACjD,CAACtyB,EAAQsyB,EAAsBvsC,IAE5Bwa,GAAgB,IAAA1L,SAAQ,IAAM,MAAsB,IAE1D,OACI,gCACK0L,IACG,SAACyxB,GAAe,CACZzxB,cAAeA,EACfE,qBAAsB4xB,EACtB7xB,gBAAiBH,KACbva,IAGXqsC,IAAc,SAAC7nC,EAAO,CAACC,MAAOA,IAC9B6V,IAAoB,SAAClB,GAAa,CAAC3J,SAAUA,EAAUlM,KAAMA,EAAMoM,MAAOyK,IAC1EigB,IAAgB,SAACpC,GAAS,CAACH,SAAUA,EAAUv0B,KAAM22B,EAAevqB,MAAOwqB,QChElFsS,GAAqB,IAAyB9sC,iBAAiB,mBAOxD+sC,GAA6B1sC,IACtC,MAAMG,GAAO,IAAAC,WACP+J,GAAW,UACXlK,GAAQ,IAAAC,YACRga,GAAS,QAAe,KAAM5Z,UAAU6Z,YACxC,MAAE1V,EAAOmL,IAAKw8B,EAAOp8B,SAAUq8B,GAAelB,MAC9C,KACF5nC,EAAI,SACJkM,EACAE,MAAOyK,EACPxK,IAAKyK,EACLrK,SAAUsK,GACVhL,KAEEi9B,GAAW,IAAAx9B,SAAQ,IACd,IAAKuL,EAAmB,CAACD,GAAe,MAASgyB,EAAa,CAACD,GAAS,IAChF,CAACA,EAAO/xB,EAAagyB,EAAY/xB,IAE9BkyB,GAAuB,IAAA5nC,aACxB+P,IACGxK,EAAS,KAAMsB,QAAQlH,MAAM,CAAEoH,MAAOgJ,GAAWxU,EAAKW,cAAc,CAAEC,GAAI,qBAE9E,CAACoJ,EAAUhK,IAGToa,GAAsB,IAAAxL,SAAQ,KACzB,QAA0BmL,EAAQja,EAAOusC,GACjD,CAACtyB,EAAQsyB,EAAsBvsC,IAE5Bwa,GAAgB,IAAA1L,SAAQ,IAAM,MAAsB,IAE1D,OACI,gCACK0L,IACG,SAACgyB,GAAkB,CACfhyB,cAAeA,EACfE,qBAAsB4xB,EACtB7xB,gBAAiBH,KACbva,IAGXqsC,IAAc,SAAC7nC,EAAO,CAACC,MAAOA,IAC9B6V,IAAoB,SAAClB,GAAa,CAAC3J,SAAUA,EAAUlM,KAAMA,EAAMoM,MAAOyK,QC1DjFuyB,GAAmB,IAAyBhtC,iBAAiB,iBAC7D,GAAa,IAAyBA,iBAAiB,WACvDitC,GAAW,IAAyBjtC,iBAAiB,SAY9CktC,GAAgB,EACzBtpC,OACAF,eACAX,QACA+E,UACAqlC,iBACApmC,WACAjG,OAAO,gBAEP,MAAMN,GAAO,IAAAC,WACb,OACI,UAACwsC,GAAQ,CACLrpC,KAAMA,EACNF,aAAcA,EACdX,MAAOA,GAASvC,EAAKW,cAAc,CAAEC,GAAI,oBACzC6E,QAAS,CACL,CACIC,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,kBAC/BJ,MAAO,SACPmF,aAAc,IAAMzC,KAExB,CACIsD,OAAQ,uBACRd,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,oBAC/BJ,MAAO,SACPmF,aAAc,KACVzC,IACAqD,OAGX,WACD,SAAC,GAAU,CACP7F,QAAS,UACT8T,QAASm4B,GAAkB3sC,EAAKW,cAAc,CAAEC,GAAI,2BAExD,SAAC4rC,GAAgB,CACbI,aAAeC,GAAuB,aAAkBC,aAAaD,GACrEE,YAAY,EACZzlC,QAASA,EACTyL,UAAU,EACVnC,YAAa5Q,EAAKW,cAAc,CAAEC,GAAI,oBACtCN,KAAMA,Q,aCjDtB,MAAM,GAAY,IAAyBd,iBAAiB,aACtDwtC,GAAgB,IAAyBxtC,iBAAiB,iBAC1DytC,GAAe,IAAyBztC,iBAAiB,gBACzD,GAAU,IAAyBA,iBAAiB,WACpD,GAAa,IAAyBA,iBAAiB,cAavD0tC,GAAoB,OAAU;qBACf,EAAGptC,WAAYA,EAAM6D,MAAMoc;EAGnCotB,GAAgB,EAAG/pC,OAAMF,eAAcqD,eAChD,MAAMvG,GAAO,IAAAC,WACP+J,GAAW,UACXojC,GAAU,QAAe,KAASjtC,UAAUktC,eAC5CC,GAAO,IAAA7lC,SAAsB,CAC/BV,cAAe4E,UACX,MAAM+L,EAAM,IAAIR,KAChB,MAAO,CACHq2B,aAAc,GAAG,EAAA3qC,MAAMC,KAAKs/B,WAAWzqB,OAAQ,IAAA81B,mBAAkB91B,EAAI+1B,gBAAe,IAAAD,mBAAkB91B,EAAIg2B,gBAC1GC,aAAa,cAKnBC,EAAkBN,EAAKjmC,aAAcmJ,IACvCjK,EAASiK,MAGb,IAAApL,WAAU,KACFhC,GACAkqC,EAAK/lC,SAEV,CAAC+lC,EAAMlqC,IAEV,MAAMuqC,GAAc,IAAAE,UAAS,CAAEvmC,QAASgmC,EAAKhmC,QAAShH,KAAM,gBACtDwtC,GAAY,IAAAl/B,SAAQ,IACf,GAAGw+B,cAAoBO,IAC/B,CAACA,EAAaP,IAEjB,OACI,UAAC,GAAS,CACNhqC,KAAMA,EACNF,aAAcA,EACdqD,SAAUqnC,EACVvqC,UAAW,QACXd,MAAOvC,EAAKW,cAAc,CAAEC,GAAI,oBAChC6E,QAAS,CACL,CACIC,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,kBAC/BJ,MAAO,SACPmF,aAAc,IAAMzC,KAExB,CACIwC,UAAU,SAAC,EAAAkG,iBAAgB,CAAChL,GAAG,oBAC/BJ,MAAO,QACPmF,aAAc,KACVzC,IACA0qC,KAEJx0B,UAAWk0B,EAAKj9B,MAAM,kBAE7B,WACD,SAAC28B,GAAa,CACV5uB,MAAO,CAAEC,UAAU,GACnB7S,MAAO,wBACPlE,QAASgmC,EAAKhmC,QACdhH,KAAM,kBAEV,UAAC,GAAO,CAACmD,EAAG,WAAU,WAClB,SAACwpC,GAAY,CACTzhC,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,qBAChC0Y,MAAOw0B,EACP3gC,SAAU,IAAM,KAChB2D,OAAQ,IACRD,MAAO,UAEX,SAACq8B,GAAiB,WACd,SAAC,GAAU,CACPa,OAAQ,mBACR7+B,KAAM,YACNgxB,aAAc,UACdj9B,QAAS,KACL+qC,UAAUC,UAAUC,UAAUJ,GAAWhpC,KAAK,KAC1CkF,EACI,KAAMsB,QAAQC,QAAQ,CAClBC,MAAOxL,EAAKW,cAAc,CAAEC,GAAI,4CCrGlE,GAAY,IAAyBpB,iBAAiB,aACtD2uC,GAAY,IAAyB3uC,iBAAiB,aACtD4uC,GAAa,IAAyB5uC,iBAAiB,cAEtD,SAAS6uC,IAAa,eACzBC,EAAc,OACdC,EAAM,YACNlsC,EAAW,KACX2K,EAAO,SAAQ,gBACfwhC,IAEA,MAAMxuC,GAAO,IAAAC,YACP,SAAEwuC,IAAa,KAAAC,eAEfC,GAAe,IAAA//B,SAAQ,IAAM9G,OAAOF,OAAO2mC,GAAS,CAACA,KACpDK,EAAWC,IAAgB,IAAAhtC,UAAS8sC,IAAe,IAAIG,KAExDtF,EAAOmF,EAAa5sC,IAAKmoC,IAAQ,IAChCA,EACH1+B,MAAOxL,EAAKW,cAAc,CAAEC,GAAIspC,EAAI1+B,QACpCtJ,KAAMgoC,EAAI6E,aAAe7E,EAAItyB,KAAO,UAAU02B,KAAkBpE,EAAItyB,OACpEo3B,MAAO9E,EAAI8E,MAAQhvC,EAAKW,cAAc,CAAEC,GAAIspC,EAAI8E,aAAW1sC,KAkB/D,OAfA,IAAA8C,WAAU,KACN,MAAM6pC,EAAcN,EAAaxmC,KAAM+mC,GAC/B,UAAUZ,KAAkBY,EAAMt3B,SAAW62B,GAI1CS,EAAMC,OAAOC,OAAgB,CAACC,EAAwBC,KACzD,MAAMC,EAAU,UAAUjB,KAAkBgB,IACtCE,EAA2C,QAAjC,KAAAC,WAAUF,EAASd,GACnC,OAAOY,GAAiBG,IACzB,IAEHP,GAAaJ,EAAaI,EAAYH,MAC3C,CAACL,EAAUE,EAAcL,KAGxB,SAAC,EAAAzD,SAAQ,CAACC,UAAU,wBAAK,UACrB,UAAC,GAAS,CAAC99B,KAAMA,EAAI,WACjB,SAACmhC,GAAS,CAACnhC,KAAMA,EAAM3K,YAAaA,EAAamnC,KAAMA,EAAMoF,UAAWA,GAAa,MACrF,SAACR,GAAU,CAACphC,KAAMA,EAAMwoB,MAAM,KAAUgZ,EAAe,UACnD,SAAC,GAAAzD,OAAM,UAK3B,C","sources":["webpack://ReactCore/./src/components/Avatar.tsx","webpack://ReactCore/./src/components/Audience.tsx","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/displayer/DisplayForm.component.tsx","webpack://ReactCore/./src/components/comments/AddReportModal.tsx","webpack://ReactCore/./src/hooks/useCommentsLikeRT.ts","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/hooks/useMarkdownModal.ts","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetTitleEdit.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetHeaderEdit.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetTitle.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetUploader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleAttachmentWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleButtonWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleGalleryWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleImageWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleSliderWrapper.tsx","webpack://ReactCore/./src/components/tinymce/extension/MarkdownModal.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTextWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTitleWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/OfficeConfigurationPrompt.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetScroll.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetStylePadding.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetIntranetTitle.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetHeader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/WidgetCalendarCalDav/WidgetCalendarCalDavHeader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCalendarCalDavWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetRemove.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetFooterView.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetInlineInputText.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetIsPending.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCheckListWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/WidgetContactCardDav/WidgetContactCardDavHeader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetContactCardDavWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/WidgetEmailsImap/WidgetEmailsImapHeader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetEmailsImapWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetLuccaAbsenceWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapperClosing.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetQuickSurveyWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetUserProfileWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/utils.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetExcelDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/WidgetLicenseWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetWelcomeWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetExtensionWrapper.tsx","webpack://ReactCore/./src/components/widgets/Widget.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.tsx","webpack://ReactCore/./src/components/widgets/WidgetState.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCoreEditHover.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetStyleWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetIconWrapper.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCore.tsx","webpack://ReactCore/./src/components/comments/CommentsBloc.styles.ts","webpack://ReactCore/./src/components/comments/CommentsBlocAddCommentWidgetsWrapper.tsx","webpack://ReactCore/./src/components/comments/CommentsBlocCommentWidgetsWrapper.tsx","webpack://ReactCore/./src/hooks/useGifsModal.ts","webpack://ReactCore/./src/components/tinymce/extension/GifsModal.tsx","webpack://ReactCore/./src/components/CommentsBloc.tsx","webpack://ReactCore/./src/components/calendar/CalendarHeader.tsx","webpack://ReactCore/./src/components/calendar/CalendarToolbar.tsx","webpack://ReactCore/./src/components/calendar/CalendarWrapper.tsx","webpack://ReactCore/./src/hooks/useCalendarRT.ts","webpack://ReactCore/./src/components/editors/style.tsx","webpack://ReactCore/./src/components/editors/const.ts","webpack://ReactCore/./src/components/editors/EditorPopup.tsx","webpack://ReactCore/./src/components/editors/Editor.tsx","webpack://ReactCore/./src/components/editors/EditorPosition.tsx","webpack://ReactCore/./src/components/editors/components/EditorInputColor.tsx","webpack://ReactCore/./src/components/editors/components/EditorInputNumber.tsx","webpack://ReactCore/./src/components/editors/components/EditorInputSelect.tsx","webpack://ReactCore/./src/components/editors/EditorTabWrapper.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsBusy.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsLocked.tsx","webpack://ReactCore/./src/components/editors/components/EditorSave.tsx","webpack://ReactCore/./src/components/editors/EditorTabWidgetSelection.tsx","webpack://ReactCore/./src/components/editors/EditorTabDisplayLevel.tsx","webpack://ReactCore/./src/components/editors/EditorWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorsPortal.tsx","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/components/FullPageLayout.tsx","webpack://ReactCore/./src/hooks/useAI.ts","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExt.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/components/modals/ModalAudience.tsx","webpack://ReactCore/./src/components/modals/ModalSchedule.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx"],"sourcesContent":["import { Network } from 'jamespot-front-business';\r\nimport { JRCAvatarProps, SROnly } from 'jamespot-react-components';\r\nimport { useIntl } from 'react-intl';\r\nimport styled, { useTheme } from 'styled-components';\r\nimport { useAppSelector } from '../redux/store';\r\nimport { commonComponentsRegistry } from '../registry/CommonRegistry';\r\n\r\nconst JRCIcon = commonComponentsRegistry.getLazyComponent('Icon');\r\nconst JRCAvatar = commonComponentsRegistry.getLazyComponent('JRCAvatar');\r\n\r\nconst BASE_MULTIPLE = 8;\r\n\r\nconst SR = styled.span`\r\n ${SROnly}\r\n`;\r\n\r\nexport const Avatar = (props: JRCAvatarProps) => {\r\n const theme = useTheme();\r\n const intl = useIntl();\r\n const networkPublic = useAppSelector(Network.selectors.selectNetworkPublic);\r\n\r\n if (props.uri === networkPublic?.uri) {\r\n return (\r\n <>\r\n <JRCIcon\r\n name={'icon-fs-wall'}\r\n size={(props.size ?? 3) * BASE_MULTIPLE}\r\n color={theme.color.primary}\r\n variant={'circle'}\r\n />\r\n <SR>{intl.formatMessage({ id: 'NETWORK_Public' })}</SR>\r\n </>\r\n );\r\n }\r\n\r\n return <JRCAvatar {...props} />;\r\n};\r\n","import { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { useIntl } from 'react-intl';\nimport { Utils } from 'jamespot-react-components';\nimport { Avatar } from './Avatar';\nimport { jObjectLittle } from 'jamespot-user-api';\nimport { commonComponentsRegistry } from '../registry/CommonRegistry';\n\nconst JRCFlexBox = commonComponentsRegistry.getLazyComponent('FlexBox');\nconst JRCModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCStyledHref = commonComponentsRegistry.getLazyComponent('StyledHref');\nconst JRCTooltip = commonComponentsRegistry.getLazyComponent('Tooltip');\nconst JRCTypography = commonComponentsRegistry.getLazyComponent('Typography');\n\nexport type AudienceProps<T extends jObjectLittle> = {\n audience: T[];\n limit?: number;\n};\n\nconst LIMIT = 2;\n\nconst AudienceWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 24px;\n`;\n\nexport const AvatarLink = styled.a<{ overlap?: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 40px;\n height: 40px;\n border-radius: 40px;\n overflow: hidden;\n color: ${(props) => props.theme.color.white};\n background-color: ${(props) => props.theme.color.lavender};\n border: 4px solid ${(props) => props.theme.color.white};\n margin-left: ${(props) => (props.overlap ? '-18px' : '0')};\n cursor: pointer;\n`;\n\nexport const Audience = <T extends jObjectLittle>({ audience, limit = LIMIT }: AudienceProps<T>) => {\n const intl = useIntl();\n const theme = useTheme();\n const [isModalOpen, setModalOpen] = useState(false);\n\n return (\n <>\n <JRCFlexBox>\n {[...audience].splice(0, limit).map((item, index) => (\n <AvatarLink overlap={index !== 0} href={item._url} target={'_blank'} key={item.id}>\n <JRCTooltip description={item.title === undefined ? ' ' : item.title} position=\"left\">\n <Avatar\n uri={item.uri}\n size={4}\n variant=\"circle\"\n alt=\"image\"\n timestamp={item.dateModified ? Utils.date.strToTimestamp(item.dateModified) : undefined}\n focusable\n />\n </JRCTooltip>\n </AvatarLink>\n ))}\n {audience.length > limit && (\n <AvatarLink onClick={() => setModalOpen(true)} overlap={true}>\n +{audience.length - limit}\n </AvatarLink>\n )}\n </JRCFlexBox>\n {audience.length > limit && (\n <JRCModalLayout\n closeHandler={() => setModalOpen(false)}\n enableClickAwayCloseModal\n open={isModalOpen}\n variant={'fixed-height'}\n maxHeight={'800px'}>\n <JRCModalContent\n title={intl.formatMessage({ id: 'GLOBAL_Audience' })}\n overflow={'scroll'}\n onClickIconClose={() => setModalOpen(false)}>\n <AudienceWrapper>\n {audience.map((item, i) => (\n <JRCFlexBox key={`audience-${i}`} y={'center'} gap={theme.space.l}>\n <Avatar size={5} uri={`${item.type}/${item.id}`} />\n <JRCStyledHref href={`${item.type}/${item.id}`}>\n <JRCTypography>{item.title}</JRCTypography>\n </JRCStyledHref>\n </JRCFlexBox>\n ))}\n </AudienceWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import jamespot from 'jamespot-user-api';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled, { useTheme } from 'styled-components';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { JiaTextEnhanceQuery } from '../../../hooks/useAI';\n\nconst JRCLoader = commonComponentsRegistry.getLazyComponent('Loader');\nconst JRCModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCTypography = commonComponentsRegistry.getLazyComponent('Typography');\n\nconst TextWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport type AIModalProps = {\n query: JiaTextEnhanceQuery | undefined;\n};\n\ntype ResponseType = {\n response: string | undefined;\n loading: boolean;\n error: string | undefined;\n};\n\nconst loadingResponse: ResponseType = {\n response: undefined,\n loading: true,\n error: undefined,\n};\n\nexport const AIModal = ({ query }: AIModalProps) => {\n const intl = useIntl();\n const [response, setResponse] = useState<ResponseType>(loadingResponse);\n const theme = useTheme();\n\n const sendAIRequest = useCallback(\n (query: JiaTextEnhanceQuery) => {\n setResponse(loadingResponse);\n jamespot.jia\n .textEnhancement({ text: query.text, capacity: query.capability })\n .then((response) => {\n if (response.error) {\n setResponse({\n error: `${intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' })}${\n response.errorMsg && ': ' + response.errorMsg\n }`,\n loading: false,\n response: undefined,\n });\n return;\n }\n const textResponse = response.result.text;\n setResponse({\n error: undefined,\n loading: false,\n response: textResponse,\n });\n })\n .catch((_err) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n },\n [intl],\n );\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query, sendAIRequest]);\n\n return (\n <JRCModalLayout\n zIndex={theme.zIndex.tinyMCEModal}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}>\n <JRCModalContent\n overflow=\"scroll\"\n buttons={[\n {\n children: intl.formatMessage({ id: 'GLOBAL_Try_Again' }),\n clickHandler: () => {\n query && sendAIRequest(query);\n },\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Validation' }),\n clickHandler: () => response.response && query?.resolve(response.response),\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Cancel' }),\n clickHandler: () => query?.reject(),\n },\n ]}\n isFull>\n <TextWrapper>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">\n {intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}\n </JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </TextWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n );\n};\n","import { DisplayFormFieldsConfig, DisplayFormRef } from './types';\nimport { useForm, Control, FieldValues } from 'react-hook-form';\nimport { useDisplayForm } from './useDisplay';\nimport styled, { css } from 'styled-components';\nimport {\n FormEventHandler,\n ForwardedRef,\n forwardRef,\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { AudienceAutocomplete } from 'jamespot-user-api';\n\nconst StretchContainer = css`\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n`;\n\nconst Container = styled.div<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst Form = styled.form<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst FormElement = (\n props: {\n stretch?: boolean;\n onSubmit?: FormEventHandler<HTMLFormElement>;\n children: ReactNode;\n dataCy?: string;\n },\n ref: ForwardedRef<HTMLFormElement | HTMLDivElement>,\n) => {\n return props.onSubmit ? (\n <Form\n stretch={props.stretch}\n onSubmit={props.onSubmit}\n ref={ref as Ref<HTMLFormElement>}\n data-cy={props.dataCy}>\n {props.children}\n </Form>\n ) : (\n <Container stretch={props.stretch} ref={ref as Ref<HTMLDivElement>} data-cy={props.dataCy}>\n {props.children}\n </Container>\n );\n};\nconst FormElm = forwardRef(FormElement);\n\nconst FieldsetWrapper = styled.div<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n flex: 1;\n`}\n`;\n\ntype FormFn<TFieldValues extends FieldValues> = Omit<\n ReturnType<typeof useForm<TFieldValues>>,\n 'handleSubmit' | 'control' | 'reset'\n>;\n\nexport type DisplayFormProps<TFieldValues extends FieldValues> = {\n type: string;\n fields: DisplayFormFieldsConfig<TFieldValues>;\n extraInputs?: (control: Control<TFieldValues>) => ReactNode;\n defaultValues?: any;\n onSubmit?: any;\n buttons?: ReactNode;\n readOnly?: boolean;\n dataCy?: string;\n stretch?: boolean;\n children?: ReactNode;\n forceMandatory?: boolean;\n onInit?: (formFn: FormFn<TFieldValues>) => void;\n};\n\n/****\n * The jamespot model depend on the platform\n * For example a user can have the size attribute only for a given platform\n * The model specifics of a platform are stored in J.model\n *\n * This component display an array of attributes only if this attribute is activated on the platform\n */\nconst _DisplayForm = <TFieldValues extends FieldValues>(\n { onInit, ...props }: DisplayFormProps<TFieldValues>,\n ref: ForwardedRef<DisplayFormRef>,\n) => {\n const formRef = useRef<HTMLFormElement | HTMLDivElement>(null);\n\n const [configuration, defaultValues] = useDisplayForm(props.fields, props.type, props.forceMandatory);\n const [isInit, setIsInit] = useState(false);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n if (onInit && !isInit) {\n onInit(formFn);\n setIsInit(true);\n }\n }, [onInit, formFn, isInit]);\n\n const formatValuesForSubmit = useCallback(\n (values: any) => {\n const toRet: any = {};\n Object.keys(values).forEach((k) => {\n const widget = configuration.find((c) => c.name === k)?.widget;\n switch (widget?.type) {\n case 'audience':\n toRet[k] = values[k].map((v: AudienceAutocomplete) => v.uri).join(',');\n break;\n case 'taxonomy':\n toRet[k] = values[k].map((v: any) => v.title).join(',');\n break;\n case 'toggle':\n toRet[k] = values[k] ? '1' : '0';\n break;\n default:\n toRet[k] = values[k];\n break;\n }\n });\n return toRet;\n },\n [configuration],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n ...formFn,\n handleSubmit,\n control,\n reset: () => {\n // in case the form is scrollable\n formRef?.current?.scrollTo(0, 0);\n // reset react-hook-form form\n reset();\n },\n getFormattedValues: () => {\n return formatValuesForSubmit(formFn.getValues());\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n return (\n <FormElm\n dataCy={props.dataCy}\n stretch={props.stretch}\n onSubmit={props.onSubmit ? handleSubmit(props.onSubmit) : undefined}\n ref={formRef}>\n <FieldsetWrapper stretch={props.stretch}>\n {configuration.map(({ Input, ...conf }) => (\n <Input\n key={conf.name}\n control={control}\n {...conf}\n dataCy={`${props.dataCy}-${conf.name}`}\n readOnly={props.readOnly}\n />\n ))}\n {props.extraInputs && props.extraInputs(control)}\n </FieldsetWrapper>\n {props.buttons}\n </FormElm>\n );\n};\n\nexport const DisplayForm = forwardRef<DisplayFormRef>(_DisplayForm as any) as <TFieldValues extends FieldValues>(\n props: DisplayFormProps<TFieldValues> & {\n ref?: ForwardedRef<DisplayFormRef>;\n },\n) => ReturnType<typeof _DisplayForm>;\n","import { Toast } from 'jamespot-front-business';\r\nimport jApi, { ArticlesList, jCommentList } from 'jamespot-user-api';\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport styled from 'styled-components';\r\nimport { DisplayForm } from '../../displayer/DisplayForm.component';\r\nimport { DisplayFormRef } from '../../displayer/types';\r\nimport { useAbortController } from '../../hooks';\r\nimport { useAppDispatch } from '../../redux/store';\r\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\r\n\r\nconst ModalForm = commonComponentsRegistry.getLazyComponent('ModalForm');\r\nconst Loader = commonComponentsRegistry.getLazyComponent('Loader');\r\nconst Icon = commonComponentsRegistry.getLazyComponent('Icon');\r\nconst Typography = commonComponentsRegistry.getLazyComponent('Typography');\r\nconst Ellipsis = commonComponentsRegistry.getLazyComponent('Deprecated_Ellipsis');\r\nconst StyledHref = commonComponentsRegistry.getLazyComponent('StyledHref');\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${({ theme }) => theme.space.md}px;\r\n`;\r\n\r\nconst ContentPreview = styled.div`\r\n display: flex;\r\n gap: ${({ theme }) => theme.space.md}px;\r\n align-items: center;\r\n border: 1px solid ${({ theme }) => theme.color.grey2};\r\n background-color: ${({ theme }) => theme.color.grey0};\r\n border-radius: ${({ theme }) => theme.size.sm}px;\r\n padding: ${({ theme }) => theme.space.md}px;\r\n`;\r\n\r\nconst ContentWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${({ theme }) => theme.space.sm}px;\r\n`;\r\n\r\nexport type AddReportModalProps = {\r\n onClose: () => void;\r\n articleId: number;\r\n articleUri: string;\r\n commentUri: string;\r\n};\r\n\r\nexport const AddReportModal = ({ onClose, articleId, articleUri, commentUri }: AddReportModalProps) => {\r\n const intl = useIntl();\r\n const formRef = useRef<DisplayFormRef>(null);\r\n const dispatch = useAppDispatch();\r\n const [open, setOpen] = useState(true);\r\n const [article, setArticle] = useState<ArticlesList>();\r\n const [comment, setComment] = useState<jCommentList>();\r\n const [contentLoading, setContentLoading] = useState(true);\r\n const [submitLoading, setSubmitLoading] = useState(false);\r\n const abortController = useAbortController();\r\n\r\n useEffect(() => {\r\n Promise.all([\r\n (async () => {\r\n const res = await jApi.article.get(\r\n { idArticle: articleId },\r\n { signal: abortController.signal, format: 'raw-list' },\r\n );\r\n setArticle(res.result);\r\n })(),\r\n (async () => {\r\n if (commentUri) {\r\n const res = await jApi.article.getComments(\r\n { idArticle: articleId },\r\n {\r\n format: 'raw-list',\r\n signal: abortController.signal,\r\n },\r\n );\r\n setComment(res.result.find((c) => c.uri === commentUri));\r\n }\r\n })(),\r\n ]).then(() => {\r\n setContentLoading(false);\r\n });\r\n }, [abortController, articleId, commentUri]);\r\n\r\n const closeModal = useCallback(() => {\r\n setOpen(false);\r\n onClose();\r\n }, [onClose]);\r\n\r\n const submit = useCallback(\r\n (description?: string) => {\r\n if (!description?.trim()) {\r\n dispatch(\r\n Toast.actions.error({ label: intl.formatMessage({ id: 'CRPT_Report_Description_Required' }) }),\r\n );\r\n } else {\r\n setSubmitLoading(true);\r\n jApi.contentReport\r\n .createReport({\r\n uri: commentUri || articleUri,\r\n description: description,\r\n })\r\n .then(() => {\r\n dispatch(Toast.actions.success({ label: intl.formatMessage({ id: 'CRPT_Report_Sent' }) }));\r\n closeModal();\r\n })\r\n .catch((e) => {\r\n Toast.actions.error({ label: e.errorMsg ?? 'GLOBAL_Error' });\r\n setSubmitLoading(false);\r\n });\r\n }\r\n },\r\n [articleUri, closeModal, commentUri, dispatch, intl],\r\n );\r\n\r\n const submitForm = useCallback(\r\n ({ description }: { description: string }) => {\r\n submit(description);\r\n },\r\n [submit],\r\n );\r\n\r\n return (\r\n <ModalForm\r\n title={intl.formatMessage({ id: 'CRPT_Add_Report' })}\r\n open={open}\r\n closeHandler={closeModal}\r\n onSubmit={async () => submit(formRef.current?.getValues().description)}\r\n enableClickAwayCloseModal\r\n maxHeight={'520px'}\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: closeModal,\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Send\" />,\r\n clickHandler: () => submit(formRef.current?.getValues().description),\r\n color: 'valid',\r\n loading: submitLoading,\r\n },\r\n ]}>\r\n {contentLoading ? (\r\n <Loader size={'l'} />\r\n ) : (\r\n <Container>\r\n <ContentPreview>\r\n <Icon name={commentUri ? 'icon-comment' : 'icon-file'} size={50} variant={'square'} />\r\n <ContentWrapper>\r\n <Typography variant={commentUri ? 'h3' : 'h2'}>\r\n <Ellipsis label={article?.title} length={40} />\r\n </Typography>\r\n {comment && (\r\n <Typography>\r\n {intl.formatMessage({ id: 'CRPT_Comment_Of' })}{' '}\r\n <StyledHref href={comment?._user._url}>{comment?._user.title}</StyledHref>\r\n </Typography>\r\n )}\r\n </ContentWrapper>\r\n </ContentPreview>\r\n <DisplayForm ref={formRef} fields={['description']} type=\"contentReport\" onSubmit={submitForm} />\r\n </Container>\r\n )}\r\n </ModalForm>\r\n );\r\n};\r\n","import { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\nimport socket from '../utils/socket';\nimport { useAppDispatch } from '../redux/store';\n\nconst useCommentsLikeRT = (idComments: number[] | undefined, idArticle: number) => {\n const dispatch = useAppDispatch();\n const reactSocket = useMemo(() => socket, []);\n const rtHandlers = useMemo(\n () => Comment.getCommentsLikeRTHandlers(dispatch, idComments, idArticle),\n [dispatch, idComments, idArticle],\n );\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n reactSocket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n reactSocket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, reactSocket]);\n};\n\nexport default useCommentsLikeRT;\n","import { DashedFocusBorder } from 'jamespot-react-components';\nimport styled from 'styled-components';\n\nexport const CSSSquareWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 10px;\n justify-content: center;\n`;\n\nexport const CSSSquareWidget = styled.div<{ available: boolean }>`\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n cursor: pointer;\n padding: 12px;\n position: relative;\n opacity: ${(props) => (props.available ? '1' : '.4')};\n pointer-events: ${(props) => (props.available ? 'all' : 'none')};\n\n .show-on-hover {\n position: absolute;\n inset: 0;\n border-radius: 8px;\n justify-content: center;\n align-items: center;\n display: flex;\n opacity: 0;\n background-color: #ffffffe6;\n }\n\n &:hover {\n .show-on-hover {\n opacity: 1;\n }\n }\n`;\n\nexport const CSSWidgetButton = styled.div<{ open: boolean; height: number }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? props.height : '54')}px;\n border-radius: 8px;\n display: flex;\n justify-content: top;\n flex-direction: column;\n transition: height 0.4s;\n overflow: hidden;\n flex-direction: column;\n`;\n\nexport const CSSWrapWidgetWrapper = styled.div<{ column?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n ${(props) => props.column && `flex-direction: column;`}\n`;\n\nexport const CSSWrapTitle = styled.div`\n min-height: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n`;\n\nexport const CSSWrapWidget = styled.button<{ open: boolean; index: number; full?: boolean; parentIsColumn?: boolean }>`\n display: flex;\n align-items: center;\n padding: ${(props) => (props.parentIsColumn ? '36px 16px' : '0 10px')};\n gap: 10px;\n width: 40%;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-radius: 8px;\n transition: opacity 0.4s ease ${(props) => props.index * 40}ms;\n opacity: ${(props) => (props.open ? 1 : 0)};\n img {\n width: 40px;\n }\n ${(props) => props.full && `flex: 1; width: 100%;`}\n ${(props) => props.parentIsColumn && `flex-basis: 72px;`}\n ${(props) => !props.parentIsColumn && `height: 72px;`}\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n\n ${DashedFocusBorder()}\n`;\n\nexport const Flex = styled.div<{ direction: 'row' | 'column'; gap?: number }>`\n display: flex;\n flex-direction: ${(props) => (props.direction === 'row' ? 'row' : 'column')};\n align-items: ${(props) => (props.direction === 'row' ? 'center' : 'flex-start')};\n justify-content: ${(props) => (props.direction === 'row' ? 'flex-start' : 'center')};\n flex: 1;\n ${(props) => props.gap && `gap:${props.gap}px`}\n`;\n","import { useMemo, useState } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { WidgetDefinitionProps, WidgetKeys, WidgetWrapperProps } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\nimport { JRCModalLayoutProps } from 'jamespot-react-components';\nimport { getBuilderWidgets } from '../namespace';\nimport {\n CSSSquareWidget,\n CSSSquareWidgetWrapper,\n CSSWidgetButton,\n CSSWrapTitle,\n CSSWrapWidget,\n CSSWrapWidgetWrapper,\n Flex,\n} from './WidgetList.style';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst JRCTooltip = commonComponentsRegistry.getLazyComponent('Tooltip');\nconst JRCIconButton = commonComponentsRegistry.getLazyComponent('IconButton');\n\ntype WidgetListMode = 'button' | 'list' | 'gallery' | 'custom' | 'article' | 'comment';\n\n/*\n Widget Builder\n*/\nexport const WidgetList = ({\n mode,\n view,\n children,\n namespace = 'default',\n onChange,\n}: {\n mode?: WidgetListMode;\n view?: string;\n children?: any;\n namespace?: string;\n onChange: (widget: WidgetWrapperProps) => void;\n}) => {\n const [isOpen, setOpen] = useState<boolean>(false);\n const widgets = getBuilderWidgets(namespace);\n const intl = useIntl();\n\n const args: JRCModalLayoutProps = {\n open: isOpen,\n portalId: 'react-modal',\n variant: 'full-height',\n closeHandler: () => setOpen(false),\n };\n\n const onClick = (name: WidgetKeys) => {\n onChange(Widget.factory(name));\n setOpen(false);\n };\n return (\n <>\n <JRCModalLayout {...args}>\n <JRCModalContent\n onClickIconClose={args.closeHandler}\n buttons={\n mode === 'comment'\n ? [\n {\n children: <FormattedMessage id=\"GLOBAL_Close\" />,\n color: 'cancel',\n clickHandler: () => setOpen(false),\n },\n ]\n : undefined\n }\n title={intl.formatMessage({ id: 'WIDGET_Builder' })}>\n {mode === 'comment' ? (\n <CSSWrapWidgetWrapper column>\n {widgets.map((widget, index) => (\n <CSSWrapWidget\n key={widget.name}\n open={true}\n full\n parentIsColumn\n index={index}\n onClick={() => onClick(widget.name)}>\n <Flex direction={'row'} gap={12}>\n <img src={widget.img} />\n <Flex direction={'column'}>\n <h3>{intl.formatMessage({ id: widget.label })}</h3>\n <p>{intl.formatMessage({ id: widget.description })}</p>\n </Flex>\n </Flex>\n </CSSWrapWidget>\n ))}\n </CSSWrapWidgetWrapper>\n ) : (\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n )}\n </JRCModalContent>\n </JRCModalLayout>\n {mode === 'custom' && children ? <div onClick={() => setOpen(true)}>{children}</div> : <></>}\n {mode === 'button' && view === 'edit' ? (\n <JRCButton onClick={() => setOpen(true)} variant={'outlined'} minWidth={'100%'}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </JRCButton>\n ) : (\n <></>\n )}\n {mode === 'gallery' && view === 'edit' ? (\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n ) : (\n <></>\n )}\n {mode === 'article' && view === 'edit' ? <WidgetModeArticle widgets={widgets} onClick={onClick} /> : <></>}\n {mode === 'comment' && view === 'edit' ? (\n <WidgetModeComment\n onClick={() => {\n setOpen(true);\n }}\n />\n ) : (\n <></>\n )}\n </>\n );\n};\n\nconst HEIGHT_CLOSED = 50;\nconst HEIGHT = 80;\nconst MARGIN_BOTTOM = 10;\n\nconst WidgetModeArticle = ({\n widgets,\n onClick,\n}: {\n widgets: WidgetDefinitionProps[];\n onClick: (name: WidgetKeys) => void;\n}) => {\n const [open, isOpen] = useState(false);\n const intl = useIntl();\n\n const calcHeight = useMemo(() => {\n return Math.ceil(widgets.length / 2) * HEIGHT + HEIGHT_CLOSED + MARGIN_BOTTOM;\n }, [widgets]);\n\n return (\n <>\n <CSSWidgetButton open={open} height={calcHeight}>\n <CSSWrapTitle onClick={() => isOpen(!open)}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </CSSWrapTitle>\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => {\n return (\n <CSSWrapWidget\n key={widget.name}\n open={open}\n index={index}\n onClick={() => onClick(widget.name)}>\n <img src={widget.img} />\n {intl.formatMessage({ id: widget.label })}\n </CSSWrapWidget>\n );\n })}\n </CSSWrapWidgetWrapper>\n </CSSWidgetButton>\n </>\n );\n};\n\nconst WidgetModeComment = ({ onClick }: { onClick: () => void }) => {\n const intl = useIntl();\n return (\n <>\n <JRCTooltip description={intl.formatMessage({ id: 'COMMENT_Add_Widget' })}>\n <JRCIconButton\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={22}\n onClick={() => {\n onClick();\n }}\n icon={'icon-fs-puzzle'}\n />\n </JRCTooltip>\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { WidgetDefinitionProps, WidgetsName } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [Widget.definition(WidgetsName.ArticleTitle), Widget.definition(WidgetsName.ArticleButton)];\n case 'comment':\n return [\n Widget.definition(WidgetsName.CheckList),\n Widget.definition(WidgetsName.Presence),\n Widget.definition(WidgetsName.QuickSurvey),\n ];\n default:\n return [\n Widget.definition(WidgetsName.ArticleTitle),\n Widget.definition(WidgetsName.ArticleText),\n Widget.definition(WidgetsName.ArticleImage),\n Widget.definition(WidgetsName.ArticleButton),\n Widget.definition(WidgetsName.ArticleSlider),\n Widget.definition(WidgetsName.ArticleAttachment),\n Widget.definition(WidgetsName.Presence),\n ];\n }\n}\n","import { useMemo, useState } from 'react';\r\nimport { Editor, JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\r\nimport { useIntl } from 'react-intl';\r\n\r\nexport const useMarkdownModal = (): {\r\n open: boolean;\r\n onInsert: (v: string) => void;\r\n close: () => void;\r\n ext: ReturnType<typeof JTinyMCEExtensionsBuilders.markdown>;\r\n isActive?: boolean;\r\n} => {\r\n const intl = useIntl();\r\n const [open, setOpen] = useState(false);\r\n const [editor, setEditor] = useState<Editor>();\r\n const ext = useMemo(\r\n () =>\r\n JTinyMCEExtensionsBuilders.markdown((ed) => {\r\n setEditor(ed);\r\n setOpen(true);\r\n }, intl),\r\n [intl],\r\n );\r\n return {\r\n open,\r\n onInsert: (v: string) => {\r\n editor?.execCommand('InsertHTML', false, v);\r\n },\r\n close: () => setOpen(false),\r\n ext,\r\n isActive: true,\r\n };\r\n};\r\n","import { Widget } from 'jamespot-front-business';\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual } from 'react-redux';\nimport { useAppDispatch, useAppSelector } from '../../../../redux/store';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\n\nconst JRCInputText = commonComponentsRegistry.getLazyComponent('InputText');\n\nexport const WidgetTitleEdit = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const widgetWrapperTitle = useAppSelector(\n (state) => Widget.selectors.selectWidget(state, uniqid)?.title,\n shallowEqual,\n );\n\n const { control, watch } = useForm({\n defaultValues: { widgetTitle: widgetWrapperTitle },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title: data.widgetTitle }));\n });\n return () => subscription.unsubscribe();\n }, [watch, dispatch, uniqid]);\n\n return (\n <JRCInputText\n name={'widgetTitle'}\n control={control}\n placeholder={intl.formatMessage({ id: 'GLOBAL_Title' })}\n width=\"100%\"\n margin=\"0\"\n />\n );\n};\n","import { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetsName } from 'jamespot-user-api';\nimport { useCallback, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { useAppDispatch } from '../../../../redux/store';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\nimport { WidgetTitleEdit } from './WidgetTitleEdit';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst JRCIconButton = commonComponentsRegistry.getLazyComponent('IconButton');\n\nexport const CSSModalFooter = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const CSSWidgetHeaderEdit = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n gap: ${(props) => props.theme.space.sm}px;\n padding: ${(props) => props.theme.space.sm}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const CSSWidgetHeaderEditTitle = styled.div`\n flex: 1;\n display: flex;\n fieldset:first-of-type {\n margin: 0px !important;\n }\n`;\n\nexport const CSSWidgetHeaderEditActions = styled.div`\n display: flex;\n gap: ${(props) => props.theme.space.sm}px;\n`;\n\nexport const WidgetHeaderEdit = ({\n uniqid,\n name,\n handleOpenEditor,\n}: {\n uniqid: string;\n name: WidgetsName;\n handleOpenEditor?: () => void;\n}) => {\n const dispatch = useAppDispatch();\n const intl = useIntl();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const handleOnClick = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n mode: 'edit',\n }),\n );\n }, [uniqid, dispatch, name]);\n\n const handleRemoveWidget = useCallback(() => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n }, [uniqid, dispatch]);\n\n return (\n <>\n <CSSWidgetHeaderEdit>\n <CSSWidgetHeaderEditTitle>\n <WidgetTitleEdit uniqid={uniqid} />\n </CSSWidgetHeaderEditTitle>\n <CSSWidgetHeaderEditActions>\n <JRCIconButton\n icon=\"icon-pencil\"\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={14}\n onClick={handleOpenEditor ?? handleOnClick}\n title={intl.formatMessage({ id: 'BUTTON_Title_Open_Edit_Panel' })}\n />\n <JRCIconButton\n icon=\"icon-trash\"\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={14}\n onClick={() => setIsOpen(true)}\n title={intl.formatMessage({ id: 'BUTTON_Title_Open_Remove_Widget' })}\n />\n </CSSWidgetHeaderEditActions>\n </CSSWidgetHeaderEdit>\n {isOpen && (\n <JRCModalLayout enableClickAwayCloseModal={true} open={isOpen} closeHandler={() => setIsOpen(false)}>\n <JRCModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}\n onClickIconClose={() => setIsOpen(false)}>\n {intl.formatMessage({ id: 'WIDGET_Delete_Widget_Confirmation' })}\n </JRCModalContent>\n <CSSModalFooter>\n <JRCButton label={intl.formatMessage({ id: 'GLOBAL_Confirm' })} onClick={handleRemoveWidget} />\n </CSSModalFooter>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { CSSProperties, useMemo } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport styled, { useTheme } from 'styled-components';\nimport { useAppSelector } from '../../../../redux/store';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\n\nconst JRCHtml = commonComponentsRegistry.getLazyComponent('Html');\n\nexport const CSSWidgetTitle = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const WidgetTitle = ({ uniqid }: { uniqid: string }) => {\n const widgetWrapper = useAppSelector((state) => Widget.selectors.selectWidget(state, uniqid), shallowEqual);\n const theme = useTheme();\n const styles = useAppSelector((state) => Widget.selectors.selectWidgetTitleStyle(state, uniqid), shallowEqual);\n\n const initialValues = useMemo(() => {\n return {\n color: styles && styles['color'] ? String(styles['color']) : theme.color.black,\n backgroundColor:\n styles && styles['background-color'] ? String(styles['background-color']) : theme.color.white,\n fontSize: styles && styles['font-size'] ? `${styles['font-size']}px` : '24px',\n fontWeight: styles && styles['font-weight'] ? String(styles['font-weight']) : 'medium',\n textAlign: styles && styles['text-align'] ? String(styles['text-align']) : 'left',\n };\n }, [styles, theme]);\n\n const title = useMemo(() => {\n return widgetWrapper && typeof widgetWrapper.title === 'string' && widgetWrapper.title.length !== 0\n ? widgetWrapper.title\n : undefined;\n }, [widgetWrapper]);\n\n if (!title) return <></>;\n\n return (\n <CSSWidgetTitle\n style={{\n color: initialValues.color,\n backgroundColor: initialValues.backgroundColor,\n fontSize: initialValues.fontSize,\n fontWeight: initialValues.fontWeight,\n textAlign: initialValues.textAlign as CSSProperties['textAlign'],\n }}>\n <JRCHtml as=\"span\" __html={title} />\n </CSSWidgetTitle>\n );\n};\n","import { ReactNode, useEffect, useRef, useState } from 'react';\nimport { jFileLittle } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppSelector } from '../../../redux/store';\n\nconst JRCInputFileAdvancedRaw = commonComponentsRegistry.getLazyComponent('InputFileAdvancedRaw');\n\nexport const CSSHidden = styled.div`\n width: 0;\n height: 0;\n overflow: hidden;\n`;\n\ntype InplaceUploaderProps = {\n children: ReactNode;\n initialFiles: jFileLittle[];\n initialClick?: boolean;\n multiple: boolean;\n accept: string;\n onUploadStart: () => void;\n onUploadEnd: () => void;\n onUploadSuccess: (files: jFileLittle[]) => void;\n};\n\nexport const WidgetUploader = ({\n children,\n initialFiles,\n initialClick,\n multiple,\n accept,\n onUploadStart,\n onUploadEnd,\n onUploadSuccess,\n}: InplaceUploaderProps) => {\n const uploadRef = useRef<HTMLInputElement>(null);\n const token = useAppSelector(Widget.selectors.selectToken);\n const [total, setTotal] = useState<number>(0);\n const [files, setFiles] = useState<jFileLittle[]>(initialFiles);\n\n useEffect(() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }, [initialClick]);\n\n useEffect(() => {\n if (initialFiles.length !== files.length) {\n setFiles(initialFiles);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFiles]);\n\n useEffect(() => {\n onUploadSuccess(files);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [total]);\n\n return (\n <>\n <div\n onClick={() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }}>\n {children}\n </div>\n <CSSHidden>\n <JRCInputFileAdvancedRaw\n ref={uploadRef}\n id=\"widget-upload-file\"\n name=\"editorFiles\"\n content={''}\n accept={accept as any}\n multiple={multiple}\n token={token}\n onUploadStart={(totalFile) => {\n if (totalFile !== undefined) {\n setTotal((prevTotal) => prevTotal + totalFile);\n }\n if (typeof onUploadStart === 'function' && totalFile !== 0) {\n onUploadStart();\n }\n }}\n onUploadSuccess={(fileResponse) => {\n if (fileResponse === undefined) {\n return;\n }\n setTotal((prevTotal) => (prevTotal !== undefined ? prevTotal - 1 : 0));\n setFiles((prevFiles) => (multiple ? [...prevFiles, fileResponse] : [fileResponse]));\n }}\n />\n </CSSHidden>\n </>\n );\n};\n","import { useEffect } from 'react';\nimport styled from 'styled-components';\nimport { shallowEqual } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport jamespot, {\n jFileLittle,\n WidgetArticleAttachmentType,\n WidgetDisplayMode,\n WidgetArticleAttachmentContent,\n resolveFilePath,\n} from 'jamespot-user-api';\nimport { Application, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst WidgetAttachment = commonComponentsRegistry.getLazyComponent('WidgetAttachment');\nconst JRCWidgetEmptyInplace = commonComponentsRegistry.getLazyComponent('WidgetEmptyInplace');\nconst FileViewer = commonComponentsRegistry.getLazyComponent('FileViewer');\n\n// DUPLICATE FROM WEDOC\nexport const wedocWindowOpen = (idFile: number, hash: string, target?: '_blank') => {\n window.open(getWedocFilePath(idFile, hash), target);\n};\n\n// DUPLICATE FROM WEDOC\nexport function getWedocFilePath(idFile: number, hash: string) {\n return `/ng/rr/file/${idFile}/${hash}`;\n}\n\nexport const CSSWrapper = styled.div`\n flex: 1;\n`;\n\nexport const JRCWidgetArticleAttachmentWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleAttachmentType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const intl = useIntl();\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useAppDispatch();\n const isActive = useAppSelector((state) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n const onError = (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n };\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !files || files.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n const weDoc = useAppSelector((state) => Application.selectors.selectById(state, 'WeDocHook'));\n\n const onClick = (file: jFileLittle | undefined) => {\n if (!file) {\n return;\n }\n jamespot.object\n .getAccessHash(`fileArticle/${file.id}`)\n .then((response) => {\n if (response.result === '') {\n throw new Error('result empty');\n }\n const hash = response.result;\n wedocWindowOpen(file.id, hash);\n })\n .catch(() => {\n dispatch(Toast.actions.error({ label: 'WIDGET_Open_Failed' }, 6000));\n });\n };\n\n const option = [\n {\n label: intl.formatMessage({ id: 'WIDGET_Open_With_Wedoc' }),\n onClick: onClick,\n },\n ];\n\n const openWithOptions: JRCFileViewerOpenWithOptionsType = weDoc\n ? [\n {\n condition: (f) =>\n [\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ].includes(f.mimetype),\n options: option,\n },\n ]\n : [];\n\n return files !== undefined ? (\n <CSSWrapper>\n {mode !== 'view' ? (\n <WidgetAttachment files={files} onClick={() => undefined} onError={onError} />\n ) : (\n <FileViewer files={files} openWithOptions={openWithOptions}>\n {(open) => {\n return (\n <WidgetAttachment\n files={files.map((f) => ({\n ...f,\n uri: resolveFilePath(f),\n }))}\n onClick={(idFile) => open(idFile)}\n onError={onError}\n />\n );\n }}\n </FileViewer>\n )}\n {inplace && mode !== 'view' && (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n multiple={true}\n accept={'*'}\n onUploadSuccess={(files) => {\n if (Array.isArray(files)) {\n dispatch(\n updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, {\n files: files.map((f) => ({\n ...f,\n uri: resolveFilePath(f) ?? '',\n })),\n }),\n );\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {mode === 'edit' ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Attachment_Empty_Label'}\n description={'WIDGET_Article_Attachment_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n ) : (\n <></>\n )}\n </WidgetUploader>\n )}\n </CSSWrapper>\n ) : (\n <></>\n );\n};\n","import { useEffect } from 'react';\nimport styled from 'styled-components';\nimport { WidgetArticleButtonType, WidgetDisplayMode } from 'jamespot-user-api';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst JRCWidgetButton = commonComponentsRegistry.getLazyComponent('WidgetButton');\n\nconst CSSButtonWrapper = styled.div`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nconst CSSPointer = styled.div<{ clickable: boolean }>`\n pointer-events: ${(props) => (props.clickable ? 'all' : 'none')};\n cursor: pointer;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nexport const JRCWidgetArticleButtonWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleButtonType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useAppDispatch();\n const { uniqid } = widget;\n const { text, url, target, color, backgroundColor, buttonSize, borderRadius, variant } = widget.content;\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSButtonWrapper\n onClick={() => {\n if (mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}>\n <CSSPointer clickable={mode !== 'edit'}>\n <JRCWidgetButton\n text={text}\n url={url}\n target={target}\n color={color}\n backgroundColor={backgroundColor}\n buttonSize={buttonSize}\n borderRadius={borderRadius}\n variant={variant}\n />\n </CSSPointer>\n </CSSButtonWrapper>\n );\n};\n","import { useEffect } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport styled from 'styled-components';\nimport { WidgetArticleGalleryContent, WidgetArticleGalleryType, WidgetDisplayMode } from 'jamespot-user-api';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { WidgetUploader } from '../components/WidgetUploader';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst JRCWidgetArticleGallery = commonComponentsRegistry.getLazyComponent('WidgetArticleGallery');\nconst JRCWidgetEmptyInplace = commonComponentsRegistry.getLazyComponent('WidgetEmptyInplace');\nconst FileViewer = commonComponentsRegistry.getLazyComponent('FileViewer');\n\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nexport const JRCWidgetArticleGalleryWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleGalleryType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useAppDispatch();\n const isActive = useAppSelector((state) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return files !== undefined ? (\n <>\n {mode === 'edit' ? (\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={800}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={() => undefined}\n />\n ) : (\n <FileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer>\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={600}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={(idFile) => open(idFile)}\n />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={true}\n onUploadSuccess={(files) => {\n if (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, { files }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Gallery_Empty_Label'}\n description={'WIDGET_Article_Gallery_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n ) : (\n <></>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetImage = commonComponentsRegistry.getLazyComponent('WidgetImage');\nconst FileViewer = commonComponentsRegistry.getLazyComponent('FileViewer');\nconst JRCWidgetEmptyInplace = commonComponentsRegistry.getLazyComponent('WidgetEmptyInplace');\n\nimport styled from 'styled-components';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst CSSImageWrapperHover = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n pointer-events: none;\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: 0;\n color: ${(props) => props.theme.color.white};\n &:hover {\n opacity: 1;\n }\n`;\n\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n size: 10,\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleImageWrapper = ({\n widget,\n width,\n inplace,\n mode,\n}: {\n widget: WidgetArticleImageType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const { file, useFilter } = widget.content;\n const dispatch = useAppDispatch();\n const isActive = useAppSelector((state) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const [uri, setUri] = useState<string | undefined>(undefined);\n const intl = useIntl();\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, empty: !file }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [file]);\n\n useEffect(() => {\n if (file) {\n setUri(\n formatImgUrl({\n timestamp: file.dateModified ? strToTimestamp(file.dateModified) : Date.now(),\n from: 'imagecache',\n size: 'fitx1200',\n uri: file.uri,\n }),\n );\n }\n }, [file]);\n\n return (\n <>\n {mode !== 'edit' && (\n <FileViewer\n files={[\n {\n ...mockFileLittle,\n ...file,\n path: uri,\n mimetype: 'image/png',\n },\n ]}\n openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer onClick={() => open(file?.id ?? 0)}>\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\n\n {mode === 'edit' && (\n <>\n {uri !== undefined && (\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n )}\n {inplace && (\n <WidgetUploader\n initialFiles={[]}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={false}\n onUploadSuccess={(files) => {\n if (Array.isArray(files) && files[0] !== undefined) {\n dispatch(\n updateWidgetContent<WidgetArticleImageContent>(uniqid, { file: files[0] }),\n );\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {file !== undefined ? (\n <CSSImageWrapperHover>\n {intl.formatMessage({ id: 'ARTICLE_Widget_Image_Change' })}\n </CSSImageWrapperHover>\n ) : (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Image_Empty_Label'}\n description={'WIDGET_Article_Image_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n )}\n </WidgetUploader>\n )}\n </>\n )}\n </>\n );\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { WidgetArticleSliderType, WidgetDisplayMode, formatImgUrl, jFileLittle } from 'jamespot-user-api';\nimport styled from 'styled-components';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { shallowEqual } from 'react-redux';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst FileViewer = commonComponentsRegistry.getLazyComponent('FileViewer');\nconst JRCWidgetEmptyInplace = commonComponentsRegistry.getLazyComponent('WidgetEmptyInplace');\nconst JRCWidgetSlider = commonComponentsRegistry.getLazyComponent('WidgetSlider');\n\nconst Wrapper = styled.div<{ maxWidth: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n width: ${(props) => props.maxWidth}px;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n size: 10,\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleSliderWrapper = ({\n widget,\n mode,\n width,\n}: {\n widget: WidgetArticleSliderType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const dispatch = useAppDispatch();\n const isActive = useAppSelector((state) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const maxWidth = width ?? 600;\n const [dynamicWidth, setDynamicWidth] = useState<number | undefined>(undefined);\n const ref = useRef<HTMLDivElement>(null);\n const fileViewerFiles = useMemo(\n () =>\n widget.content.slides\n ? [\n ...widget.content.slides.map((slide, index) => {\n return {\n ...mockFileLittle,\n id: slide.file ? slide.file.id : index,\n mimetype: slide.file ? slide.file.mimetype : mockFileLittle.mimetype,\n path:\n slide.file && slide.file.uri\n ? formatImgUrl({\n size: 'fitx1200',\n uri: slide.file.uri,\n from: 'imagecache',\n timestamp:\n slide.file && slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n })\n : '',\n };\n }),\n ]\n : [],\n [widget.content.slides],\n );\n\n const slides = useMemo(\n () =>\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: formatImgUrl({\n timestamp: slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n size: `fitx${dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}`,\n from: 'imagecache',\n uri: slide.file.uri,\n }),\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : [],\n [widget.content.slides, dynamicWidth, maxWidth],\n );\n\n useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n useEffect(() => {\n const handleResize = () => {\n if (ref.current) {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n }\n };\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !widget.content.slides || widget.content.slides.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widget.content.slides]);\n\n const isEditable = useMemo(\n () => mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0,\n [widget.content.slides, mode],\n );\n\n const handleEditor = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }, [dispatch, widget.uniqid, widget.name]);\n\n /** small hack to catch the real width of the div */\n if (dynamicWidth === undefined) {\n return <div ref={ref} style={{ width: '100%' }}></div>;\n }\n\n return (\n <Wrapper maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={slides}\n maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}\n useDots={widget.content.useDots ?? true}\n loop={widget.content.loop ?? false}\n startAt={0}\n onClickSlide={(index) => {\n if (mode !== 'edit') {\n if (widget.content.slides) {\n const slide = widget.content.slides[index];\n if (slide && slide.file) {\n open(slide.file.id);\n }\n }\n } else {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}\n />\n );\n }}\n </FileViewer>\n {isEditable ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Slider_Empty_Label'}\n description={'WIDGET_Article_Slider_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={handleEditor}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import { useCallback, useState } from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { marked } from 'marked';\r\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\r\n\r\nconst InputTextareaRaw = commonComponentsRegistry.getLazyComponent('InputTextareaRaw');\r\nconst Modal = commonComponentsRegistry.getLazyComponent('Modal');\r\n\r\nexport type MarkdownModalProps = {\r\n onInsert: (html: string) => void;\r\n open: boolean;\r\n close: () => void;\r\n};\r\n\r\nexport const MarkdownModal = ({ onInsert, open, close }: MarkdownModalProps) => {\r\n const intl = useIntl();\r\n const [markdown, setMarkdown] = useState('');\r\n\r\n const doClose = useCallback(() => {\r\n setMarkdown('');\r\n close();\r\n }, [close]);\r\n\r\n return (\r\n <Modal\r\n title={intl.formatMessage({ id: 'TINY_MCE_Insert_Markdown' })}\r\n open={open}\r\n closeHandler={doClose}\r\n enableClickAwayCloseModal\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: doClose,\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Insert\" />,\r\n color: 'valid',\r\n disabled: !markdown,\r\n clickHandler: () => {\r\n onInsert(marked.parse(markdown, { async: false }).replace(/<br>/g, '<br><br>'));\r\n doClose();\r\n },\r\n },\r\n ]}>\r\n <InputTextareaRaw value={markdown} onChange={(e) => setMarkdown(e.target.value)} height={'400px'} />\r\n </Modal>\r\n );\r\n};\r\n","import { Model, TinyMCE, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport jApi, { WidgetArticleTextContent, WidgetArticleTextType, WidgetDisplayMode } from 'jamespot-user-api';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual } from 'react-redux';\nimport styled, { useTheme } from 'styled-components';\n\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { getTinyMCEMentionsQueries } from '../../../utils/tinymce';\nimport { useMarkdownModal } from '../../../hooks/useMarkdownModal';\nimport { MarkdownModal } from '../../tinymce/extension/MarkdownModal';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst WidgetArticleText = commonComponentsRegistry.getLazyComponent('WidgetArticleText');\n\nconst CSSTextWrapper = styled.div`\n width: 100%;\n cursor: text;\n\n p {\n word-wrap: break-word;\n }\n\n a {\n word-wrap: break-word;\n }\n`;\n\nexport const JRCWidgetArticleTextWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleTextType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const theme = useTheme();\n const { text } = widget.content;\n const dispatch = useAppDispatch();\n const isActive = useAppSelector((state) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const isBusy = useAppSelector((state) => Widget.selectors.selectWidgetState(state, uniqid)?.busy);\n const token = useAppSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useAppSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useAppSelector(Model.selectors.selectAll);\n\n const intl = useIntl();\n\n const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onError);\n }, [models, onError, theme]);\n\n // small hack to hide and redraw tinymce to avoid initialization issue\n if (isBusy) {\n return <></>;\n }\n return (\n <CSSTextWrapper>\n <WidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={\n mode === 'edit' && tinyMCECommonOptions\n ? {\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: tinyMentionsQueries,\n }\n : undefined\n }\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n additionalExtensions={[extMarkdown]}\n handlers={{ file: jApi.file }}\n />\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\n </CSSTextWrapper>\n );\n};\n","import { useEffect } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { WidgetArticleTitleContent, WidgetArticleTitleType, WidgetDisplayMode } from 'jamespot-user-api';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst WidgetArticleTitle = commonComponentsRegistry.getLazyComponent('WidgetArticleTitle');\n\nconst CSSTextWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: text;\n`;\n\nconst ToolWrapper = styled.div`\n display: flex;\n flex-direction: row;\n border-radius: 8px;\n overflow: hidden;\n margin: 4px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nconst Tool = styled.button<{ isActive: boolean }>`\n display: flex;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n opacity: ${(props) => (props.isActive ? '1.0' : '.8')};\n background-color: ${(props) => (props.isActive ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const JRCWidgetArticleTitleWrapper = ({\n widget,\n inplace,\n mode,\n dataCy,\n}: {\n widget: WidgetArticleTitleType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n dataCy?: string;\n}) => {\n const { uniqid } = widget;\n const { text, color, heading } = widget.content;\n const dispatch = useAppDispatch();\n const isActive = useAppSelector((state) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSTextWrapper>\n <WidgetArticleTitle\n dataCy={dataCy}\n text={text}\n color={color}\n heading={heading}\n autoFocus={isActive}\n inplace={inplace}\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { text }));\n }}\n />\n {isActive && mode === 'edit' ? (\n <Toolbar\n heading={heading}\n onClick={(heading) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { heading }));\n }}\n />\n ) : (\n <></>\n )}\n </CSSTextWrapper>\n );\n};\n\nexport const Toolbar = ({ heading = 'h1', onClick }: { heading?: string; onClick: (size: string) => void }) => {\n const sizes: string[] = ['h1', 'h2', 'h3', 'h4'];\n return (\n <ToolWrapper>\n {sizes.map((sizeValue, index: number) => (\n <Tool key={index} isActive={heading === sizeValue} onClick={() => onClick(sizeValue)}>\n {sizeValue}\n </Tool>\n ))}\n </ToolWrapper>\n );\n};\n","import { Toast } from 'jamespot-front-business';\nimport { useAbortController } from 'jamespot-react-components';\nimport jApi, {\n ImapConnection,\n OfficeProvider,\n OfficeSetConfigurationPayload,\n ValueOf,\n WidgetDisplayMode,\n WidgetEmailsImapType,\n} from 'jamespot-user-api';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { useAppDispatch } from '../../../../redux/store';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\n\nconst ModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst ModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst Button = commonComponentsRegistry.getLazyComponent('Button');\nconst InputText = commonComponentsRegistry.getLazyComponent('InputText');\nconst InputNumber = commonComponentsRegistry.getLazyComponent('InputNumber');\nconst InputSelectExtended = commonComponentsRegistry.getLazyComponent('InputSelectExtended');\nconst InputPassword = commonComponentsRegistry.getLazyComponent('InputPassword');\nconst Typography = commonComponentsRegistry.getLazyComponent('Typography');\nconst JRCLoader = commonComponentsRegistry.getLazyComponent('Loader');\n\nexport const UIForm = styled.div<{ isLocked: boolean }>`\n display: flex;\n flex-direction: column;\n opacity: ${(props) => (props.isLocked ? '.4' : '1.0')};\n`;\n\nexport const UIWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const UIProviderError = styled.div`\n background-color: ${(props) => props.theme.color.orange};\n color: ${(props) => props.theme.color.white};\n padding: ${(props) => props.theme.space.sm}px;\n border-radius: ${(props) => props.theme.space.sm}px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const UISection = styled.div`\n margin-bottom: ${(props) => props.theme.space.md}px;\n`;\n\nexport type JRCWidgetEmailsImapProps = {\n widget: WidgetEmailsImapType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n};\n\nexport const officeConfigurationInitialState = {\n username: '',\n password: '',\n hostname: '',\n imapPort: 993,\n imapConnectionSecurity: ImapConnection.NONE,\n imapMailbox: '',\n cardDavAddressBook: '',\n calDavCalendar: '',\n provider: '',\n};\n\nexport const OfficeConfigurationPrompt = () => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const abortController = useAbortController();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isPending, setIsPending] = useState<boolean>(false);\n const {\n control,\n reset,\n setValue,\n getValues,\n watch,\n formState: { isValid },\n } = useForm<OfficeSetConfigurationPayload>({\n defaultValues: officeConfigurationInitialState,\n criteriaMode: 'all',\n });\n\n const refresh = () => window.location.reload();\n const [providerList, setProviderList] = useState<OfficeProvider[]>([]);\n const data = watch();\n\n const imapConnectionSecurityOptions = [\n { label: 'NONE', value: ImapConnection.NONE },\n { label: 'SSL', value: ImapConnection.SSL },\n { label: 'STARTTLS', value: ImapConnection.STARTTLS },\n ];\n\n const fetchConfiguration = useCallback(\n (providers: string[]) => {\n jApi.office.getConfiguration().then(({ result }) => {\n reset({\n ...result,\n provider: !providers.includes(result.provider ?? '') ? providers[0] : result.provider,\n });\n });\n },\n [reset],\n );\n\n const handleSubmit = () => {\n if (isPending) return;\n setIsPending(true);\n jApi.office\n .setConfiguration(data)\n .then(() => refresh())\n .catch((err) => dispatch(Toast.actions.error({ label: err.errorMsg })))\n .finally(() => {\n setIsOpen(false);\n setIsPending(false);\n reset();\n });\n };\n\n useEffect(() => {\n if (!isOpen) return;\n setIsPending(true);\n jApi.office\n .getProviders({ signal: abortController.signal })\n .then(({ result }) => {\n if (!abortController.signal.aborted) {\n setProviderList(result);\n fetchConfiguration(result.map((provider) => provider.id));\n }\n })\n .catch((err) => {\n if (!abortController.signal.aborted) {\n dispatch(Toast.actions.error({ label: err.errorMsg }));\n }\n })\n .finally(() => {\n setIsPending(false);\n });\n }, [isOpen, abortController.signal, dispatch, fetchConfiguration]);\n\n useEffect(() => {\n if (providerList.length === 1) {\n setValue('provider', providerList[0].id);\n }\n }, [providerList, setValue]);\n\n const handleClose = () => setIsOpen(false);\n\n const hasProvider = useMemo(() => providerList.length > 1, [providerList]);\n\n return (\n <>\n <UIWrapper>\n <Button\n label={intl.formatMessage({ id: 'Office_Set_Configuration' })}\n onClick={() => setIsOpen(true)}\n />\n </UIWrapper>\n <ModalLayout open={isOpen} radius=\"small\" closeHandler={handleClose}>\n <ModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'Office_Set_Configuration' })}\n onClickIconClose={handleClose}>\n {isPending ? (\n <JRCLoader size=\"s\" />\n ) : (\n <>\n {providerList.length === 0 && (\n <UIProviderError>{intl.formatMessage({ id: 'Office_No_Providers' })}</UIProviderError>\n )}\n <UIForm isLocked={providerList.length === 0}>\n {hasProvider && (\n <>\n <UISection>\n <Typography size={'l'}>\n <FormattedMessage id=\"OfficeHook_Conf_Provider\" />\n </Typography>\n <SelectProvider\n label=\"OfficeHook_Conf_Select_Provider\"\n initialValue={{\n label: providerList[0].label,\n value: providerList[0].id,\n }}\n options={providerList.map((el) => {\n return { label: el.label, value: el.id };\n })}\n handleChange={(value) => {\n if (getValues('provider') !== value) {\n reset();\n }\n setValue('provider', value);\n }}\n />\n </UISection>\n </>\n )}\n <UISection>\n <Typography size={'l'}>\n <FormattedMessage id=\"OfficeHook_Settings\" />\n </Typography>\n <InputText\n control={control}\n name={'hostname'}\n width={'400'}\n placeholder={intl.formatMessage({ id: 'OfficeHook_Conf_IMap_Hostname' })}\n rules={{ required: true }}\n />\n <InputText\n control={control}\n name={'username'}\n width={'400'}\n placeholder={intl.formatMessage({ id: 'OfficeHook_Conf_Username' })}\n rules={{ required: true }}\n />\n <InputPassword\n control={control}\n name={'password'}\n width={'400'}\n placeholder={intl.formatMessage({ id: 'OfficeHook_Conf_Password' })}\n rules={{ required: true }}\n />\n </UISection>\n <UISection>\n <Typography size={'l'}>\n <FormattedMessage id=\"OfficeHook_Conf_IMap_Mailbox\" />\n </Typography>\n <InputNumber\n control={control}\n name={'imapPort'}\n width={'400'}\n placeholder={intl.formatMessage({ id: 'OfficeHook_Conf_IMap_Port' })}\n rules={{ required: true }}\n />\n <SelectProvider\n label=\"OfficeHook_Conf_Select_Connection_Security\"\n initialValue={imapConnectionSecurityOptions[0]}\n options={imapConnectionSecurityOptions}\n handleChange={(value) =>\n setValue('imapConnectionSecurity', value as ValueOf<typeof ImapConnection>)\n }\n />\n <InputText\n control={control}\n name={'imapMailbox'}\n width={'400'}\n placeholder={intl.formatMessage({ id: 'OfficeHook_Conf_IMap_Mailbox' })}\n rules={{ required: true }}\n />\n </UISection>\n <UISection>\n <Typography size={'l'}>\n <FormattedMessage id=\"OfficeHook_Conf_CalDav_Calendar\" />\n </Typography>\n <InputText\n control={control}\n name={'calDavCalendar'}\n width={'400'}\n placeholder={intl.formatMessage({ id: 'OfficeHook_Conf_CalDav_Calendar' })}\n rules={{ required: true }}\n />\n </UISection>\n <UISection>\n <Typography size={'l'}>\n <FormattedMessage id=\"OfficeHook_Conf_CardDav_Address_Book\" />\n </Typography>\n <InputText\n control={control}\n name={'cardDavAddressBook'}\n width={'400'}\n placeholder={intl.formatMessage({ id: 'OfficeHook_Conf_CardDav_Address_Book' })}\n rules={{ required: true }}\n />\n </UISection>\n </UIForm>\n <Button\n label={intl.formatMessage({ id: 'OfficeHook_Conf_Prompt_Submit' })}\n loader={isPending}\n disabled={isPending || providerList.length === 0 || !isValid}\n onClick={handleSubmit}\n />\n </>\n )}\n </ModalContent>\n </ModalLayout>\n </>\n );\n};\n\nconst SelectProvider = ({\n label,\n initialValue,\n options,\n handleChange,\n}: {\n label: string;\n initialValue: { label: string; value: string };\n options: { label: string; value: string }[];\n handleChange: (value: string) => void;\n}) => {\n const { control, watch } = useForm<{ provider: { label: string; value: string } }>({\n defaultValues: {\n provider: initialValue,\n },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data) => {\n if (!data.provider || !data.provider.value) return;\n handleChange(data.provider.value);\n });\n return () => subscription.unsubscribe();\n }, [watch, handleChange]);\n\n return (\n <InputSelectExtended\n label={label}\n name=\"provider\"\n options={options ?? []}\n getValue={(o) => o.value}\n getLabel=\"label\"\n getSearch=\"label\"\n control={control}\n rules={{ required: true }}\n />\n );\n};\n","import { ReactNode } from 'react';\nimport styled from 'styled-components';\n\nexport const UIFlex = styled.div`\n flex-direction: column;\n display: flex;\n flex: 1;\n`;\n\nexport const UIScrollWrapper = styled.div`\n position: relative;\n display: flex;\n flex: 1;\n`;\n\nexport const UIScroll = styled.div`\n overflow: auto;\n position: absolute;\n inset: 0;\n`;\n\n// TODO: BETTER NAMING ?\nexport const WidgetScroll = ({\n header,\n scrollable,\n footer,\n}: {\n header?: () => ReactNode;\n scrollable?: () => ReactNode;\n footer?: () => ReactNode;\n}) => {\n return (\n <UIFlex>\n {header && header()}\n <UIScrollWrapper>\n <UIScroll>{scrollable && scrollable()}</UIScroll>\n </UIScrollWrapper>\n {footer && footer()}\n </UIFlex>\n );\n};\n","import { ReactNode, useMemo } from 'react';\nimport { Widget } from 'jamespot-front-business';\n\nimport { shallowEqual } from 'react-redux';\nimport { useAppSelector } from '../../../../redux/store';\nimport styled from 'styled-components';\n\nexport const UIWrapper = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nexport const WidgetStylePadding = ({ uniqid, children }: { uniqid: string; children: ReactNode }) => {\n const styles = useAppSelector((state) => Widget.selectors.selectWidgetWrapperStyle(state, uniqid), shallowEqual);\n\n const initialValues = useMemo(() => {\n return {\n padding: styles && styles['padding'] ? `${styles['padding']}px` : '0px',\n };\n }, [styles]);\n\n return <UIWrapper style={{ padding: initialValues.padding }}>{children}</UIWrapper>;\n};\n","import { Widget } from 'jamespot-front-business';\n\nimport { shallowEqual } from 'react-redux';\nimport { useAppSelector } from '../../../../redux/store';\nimport styled from 'styled-components';\n\nexport const CSSWidgetTitle = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n padding-right: 0px;\n`;\n\nexport const UITitle = styled.div<{ fontSize: string; fontWeight: string; textAlign: string; color: string }>`\n text-align: ${(props) => props.textAlign};\n font-size: ${(props) => props.fontSize}px;\n font-weight: ${(props) => props.fontWeight};\n color: ${(props) => props.color};\n`;\n\nexport const WidgetIntranetTitle = ({\n uniqid,\n textAlign = 'left',\n fontSize = '16',\n fontWeight = 'medium',\n color,\n}: {\n uniqid: string;\n textAlign: string;\n fontSize: string;\n fontWeight: string;\n color: string;\n}) => {\n const widgetWrapper = useAppSelector((state) => Widget.selectors.selectWidget(state, uniqid), shallowEqual);\n return (\n <>\n {widgetWrapper && typeof widgetWrapper.title === 'string' && widgetWrapper.title.length !== 0 && (\n <CSSWidgetTitle>\n <UITitle textAlign={textAlign} fontSize={fontSize} fontWeight={fontWeight} color={color}>\n {widgetWrapper.title}\n </UITitle>\n </CSSWidgetTitle>\n )}\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { ReactNode, useMemo } from 'react';\nimport { shallowEqual } from 'react-redux';\n\nimport styled, { useTheme } from 'styled-components';\nimport { useAppSelector } from '../../../../redux/store';\nimport { WidgetIntranetTitle } from './WidgetIntranetTitle';\n\nexport const UIHeaderWrapper = styled.div<{ backroundColor: string }>`\n background-color: ${(props) => props.backroundColor};\n`;\n\nexport const UIHeader = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n\nexport const UICount = styled.div`\n padding: ${(props) => props.theme.space.sm}px ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.grey4};\n`;\n\nexport const UIHeaderFlex = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n gap: ${(props) => props.theme.space.xs}px;\n align-items: center;\n`;\n\nexport const WidgetHeader = ({\n uniqid,\n dropdown,\n subHeader,\n}: {\n uniqid: string;\n dropdown?: () => ReactNode;\n subHeader?: (color: string) => ReactNode;\n}) => {\n const theme = useTheme();\n const styles = useAppSelector((state) => Widget.selectors.selectWidgetTitleStyle(state, uniqid), shallowEqual);\n\n const styleValues = useMemo(() => {\n return {\n color: styles && styles['color'] ? String(styles['color']) : theme.color.black,\n backgroundColor: styles && styles['background-color'] ? String(styles['background-color']) : 'transparent',\n fontSize: styles && styles['font-size'] ? String(styles['font-size']) : '16',\n fontWeight: styles && styles['font-weight'] ? String(styles['font-weight']) : 'medium',\n textAlign: styles && styles['text-align'] ? String(styles['text-align']) : 'left',\n };\n }, [styles, theme]);\n\n return (\n <UIHeaderWrapper backroundColor={styleValues.backgroundColor}>\n <UIHeader>\n <UIHeaderFlex>\n <WidgetIntranetTitle\n uniqid={uniqid}\n fontWeight={styleValues.fontWeight}\n fontSize={styleValues.fontSize}\n textAlign={styleValues.textAlign}\n color={styleValues.color}\n />\n {subHeader && subHeader(styleValues.color)}\n </UIHeaderFlex>\n {dropdown && dropdown()}\n </UIHeader>\n </UIHeaderWrapper>\n );\n};\n","import jApi from 'jamespot-user-api';\n\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { JRCButtonDropdownOptionProps } from 'jamespot-react-components';\nimport { officeConfigurationInitialState } from '../components/OfficeConfigurationPrompt';\n\nimport { useDispatch } from 'react-redux';\nimport { Widget } from 'jamespot-front-business';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\nimport { WidgetHeader } from '../components/WidgetHeader';\n\nconst ButtonDropdown = commonComponentsRegistry.getLazyComponent('ButtonDropdown');\nconst Tooltip = commonComponentsRegistry.getLazyComponent('Tooltip');\n\nexport const UIDropdown = styled.div`\n margin-right: ${(props) => props.theme.space.sm}px;\n button {\n background: ${(props) => props.theme.color.white};\n }\n`;\n\nexport const WidgetCalendarCalDavHeader = ({\n uniqid,\n isConfigurationValid = false,\n handleLogout,\n}: {\n uniqid: string;\n isConfigurationValid: boolean;\n handleLogout: () => void;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const onLogout = () => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n jApi.office.setConfiguration(officeConfigurationInitialState).finally(handleLogout);\n };\n\n const options: JRCButtonDropdownOptionProps[] = [\n { label: intl.formatMessage({ id: 'WIDGET_Prompt_Logout' }), onClick: onLogout },\n ];\n\n return (\n <WidgetHeader\n uniqid={uniqid}\n dropdown={() => {\n return (\n isConfigurationValid && (\n <UIDropdown>\n <Tooltip\n position={'left'}\n description={intl.formatMessage({ id: 'WIDGET_Prompt_Dropdown' })}>\n <ButtonDropdown\n small\n smallOpenDirection=\"left\"\n options={options}\n icon={'icon-cogwheel'}\n label={''}\n color=\"primary\"\n variant=\"outlined\"\n />\n </Tooltip>\n </UIDropdown>\n )\n );\n }}\n />\n );\n};\n","import { Toast, Widget } from 'jamespot-front-business';\nimport { Utils } from 'jamespot-react-components';\nimport jApi, {\n DavCalendarEvent,\n WIDGET_LEVEL_1,\n WIDGET_LEVEL_3,\n WidgetCalendarCalDavType,\n WidgetDisplayMode,\n WidgetWrapperLevel,\n} from 'jamespot-user-api';\nimport { ReactNode, useCallback, useEffect, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { officeConfigurationInitialState, OfficeConfigurationPrompt } from './components/OfficeConfigurationPrompt';\nimport { WidgetScroll } from './components/WidgetScroll';\nimport { WidgetStylePadding } from './components/WidgetStylePadding';\nimport { WidgetCalendarCalDavHeader } from './WidgetCalendarCalDav/WidgetCalendarCalDavHeader';\n\nconst WidgetCalendarCalDav = commonComponentsRegistry.getLazyComponent('WidgetCalendarCalDav');\n\nexport type JRCWidgetCalendarCalDavWrapperProps = {\n widget: WidgetCalendarCalDavType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n levelFallback?: (level: WidgetWrapperLevel, url: string) => ReactNode | undefined;\n};\n\nconst REFRESH_INTERVAL = 60 * 1000;\n\nexport const JRCWidgetCalendarCalDavWrapper = ({\n widget,\n mode,\n levelFallback,\n}: JRCWidgetCalendarCalDavWrapperProps) => {\n const { uniqid } = widget;\n const dispatch = useAppDispatch();\n const [isConfigurationValid, setIsConfigurationValid] = useState<boolean | undefined>(undefined);\n const [doInterval, setDoInterval] = useState<boolean>(false);\n const level = useAppSelector((state) => Widget.selectors.selectWidgetLevel(state, uniqid), shallowEqual);\n\n const [url, setUrl] = useState<string | undefined>(undefined);\n const [list, setList] = useState<DavCalendarEvent[]>([]);\n\n const handleLogout = useCallback(\n (err?: any, reload?: boolean) => {\n if (err && err.error === 400) {\n jApi.office.setConfiguration(officeConfigurationInitialState);\n }\n if (reload) {\n window.location.reload();\n return;\n }\n\n setIsConfigurationValid(false);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true, loading: false }));\n },\n [dispatch, uniqid],\n );\n\n const handleLogin = useCallback(\n (isValid: boolean) => {\n setIsConfigurationValid(isValid);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true }));\n },\n [dispatch, uniqid],\n );\n\n const handleLoading = useCallback(\n (loading: boolean) => dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading })),\n [uniqid, dispatch],\n );\n\n const fetchProviderUrls = useCallback(() => {\n jApi.office\n .getProviderBaseUrls()\n .then(({ result }) => {\n setUrl(result.dav_calendar_url);\n })\n .finally(() => handleLoading(false));\n }, [handleLoading]);\n\n const fetchData = useCallback(() => {\n const now = new Date();\n const nextMonth = Utils.date.addMonth(new Date(now));\n\n jApi.office\n .davCalendarGetEvents({\n limit: 10,\n dateStart: Utils.date.formatDateTime(now),\n dateEnd: Utils.date.formatDateTime(nextMonth),\n })\n .then(({ result }) => {\n setList(result);\n setDoInterval(true);\n })\n .catch(() => {\n dispatch(Toast.actions.error({ label: 'PLUGIN_Manager_Connection_Error' }));\n setIsConfigurationValid(false);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true, loading: false }));\n })\n .finally(() => handleLoading(false));\n }, [handleLoading, dispatch, uniqid]);\n\n useEffect(() => {\n if (!doInterval) return;\n if (!isConfigurationValid) return;\n if (level !== WIDGET_LEVEL_3) return;\n const interval = setInterval(fetchData, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, [isConfigurationValid, fetchData, doInterval, level]);\n\n useEffect(() => {\n handleLoading(true);\n jApi.office\n .isConfigurationValid()\n .then(({ result }) => handleLogin(result))\n .catch(handleLogout);\n }, [handleLogout, handleLoading, handleLogin]);\n\n useEffect(() => {\n if (!isConfigurationValid) return;\n if (level === WIDGET_LEVEL_1) {\n handleLoading(true);\n fetchProviderUrls();\n return;\n }\n fetchData();\n }, [isConfigurationValid, fetchProviderUrls, handleLoading, fetchData, level]);\n\n if (isConfigurationValid && level && level !== WIDGET_LEVEL_3 && levelFallback) {\n return <>{levelFallback(level, url ?? '')}</>;\n }\n\n return (\n <WidgetScroll\n header={() => {\n return (\n <>\n <WidgetCalendarCalDavHeader\n uniqid={uniqid}\n isConfigurationValid={isConfigurationValid !== undefined && isConfigurationValid === true}\n handleLogout={() => handleLogout(undefined, true)}\n />\n </>\n );\n }}\n scrollable={() => {\n return (\n <WidgetStylePadding uniqid={uniqid}>\n {isConfigurationValid && <WidgetCalendarCalDav calendarListEvent={list} />}\n {isConfigurationValid === undefined && <></>}\n {isConfigurationValid !== undefined && isConfigurationValid === false && mode === 'view' && (\n <OfficeConfigurationPrompt />\n )}\n </WidgetStylePadding>\n );\n }}\n />\n );\n};\n","import { Toast, Widget } from 'jamespot-front-business';\nimport jamespot from 'jamespot-user-api';\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { useAppDispatch } from '../../../../redux/store';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst JRCIconButton = commonComponentsRegistry.getLazyComponent('IconButton');\n\nexport const Button = styled.button`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const Footer = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const WidgetRemove = ({ id, type, uniqid }: { id: number; type: string; uniqid: string }) => {\n const dispatch = useAppDispatch();\n const intl = useIntl();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const handleRemove = () => {\n jamespot.widget\n .removeWidget({ id, type, uniqid })\n .then(() => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n };\n\n return (\n <>\n <JRCIconButton iconSize={14} onClick={() => setIsOpen(true)} icon=\"icon-trash\" />\n {isOpen && (\n <JRCModalLayout enableClickAwayCloseModal={true} open={isOpen} closeHandler={() => setIsOpen(false)}>\n <JRCModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}\n onClickIconClose={() => setIsOpen(false)}>\n {intl.formatMessage({ id: 'WIDGET_Delete_Widget_Confirmation' })}\n </JRCModalContent>\n <Footer>\n <JRCButton label={intl.formatMessage({ id: 'GLOBAL_Confirm' })} onClick={handleRemove} />\n </Footer>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import { useCallback, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport { WidgetsName, ensureWidgetObjectHasMinimumProperties, Rights, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { shallowEqual } from 'react-redux';\n\nimport styled from 'styled-components';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetRemove } from './WidgetRemove';\nimport { useAppDispatch, useAppSelector } from '../../../../redux/store';\n\nexport const Footer = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n border-top: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const Button = styled.button`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n background-color: ${(props) => props.theme.color.white};\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n`;\n\nexport const WidgetFooterView = ({\n name,\n uniqid,\n mode,\n collaborationRights,\n handleOpenEditor,\n}: {\n name: WidgetsName;\n uniqid: string;\n mode?: WidgetDisplayMode;\n collaborationRights?: Pick<Rights, 'update'>;\n handleOpenEditor?: () => void;\n}) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const widgetObject = useAppSelector((state) => Widget.selectors.selectWidgetObject(state, uniqid), shallowEqual);\n const widgetObjectRights = useAppSelector(\n (state) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(\n () =>\n (widgetObject && widgetObjectRights && widgetObjectRights.update) ||\n (collaborationRights && collaborationRights.update),\n [widgetObject, widgetObjectRights, collaborationRights],\n );\n\n const canDelete = useMemo(\n () => widgetObject && widgetObjectRights && widgetObjectRights.delete,\n [widgetObject, widgetObjectRights],\n );\n\n const handleOnClick = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n mode,\n }),\n );\n }, [uniqid, dispatch, name, mode]);\n\n return canUpdate && ensureWidgetObjectHasMinimumProperties(widgetObject) ? (\n <Footer>\n <Button onClick={handleOpenEditor ?? handleOnClick}>\n {intl.formatMessage({ id: 'WIDGET_Set_Widget' })}\n </Button>\n {canDelete && <WidgetRemove id={widgetObject.id} type={widgetObject.type} uniqid={uniqid} />}\n </Footer>\n ) : (\n <></>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { useAppDispatch } from '../../../../redux/store';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCInputText = commonComponentsRegistry.getLazyComponent('InputText');\n\nexport const CSSWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row;\n fieldset {\n margin: 0.2rem !important;\n }\n`;\n\nexport const WidgetInlineInputText = ({\n placeholder,\n handleClick,\n}: {\n placeholder: string;\n handleClick: (label: string) => void;\n}) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [label, setLabel] = useState<string>('');\n\n const { control, watch, reset } = useForm({\n defaultValues: { label },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data) => {\n setLabel(data.label ?? '');\n });\n return () => subscription.unsubscribe();\n }, [watch, dispatch]);\n\n return (\n <CSSWrapper>\n <JRCInputText name={'label'} control={control} placeholder={placeholder} width=\"100%\" />\n <JRCButton\n label={intl.formatMessage({ id: 'GLOBAL_Confirm' })}\n disabled={!label.length}\n onClick={() => {\n handleClick(label);\n setLabel('');\n reset();\n }}\n />\n </CSSWrapper>\n );\n};\n","import styled from 'styled-components';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\n\nconst JRCLoader = commonComponentsRegistry.getLazyComponent('Loader');\n\nexport const Wrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: rgba(255, 255, 255, 0.4);\n`;\n\nexport const WidgetIsPending = () => {\n return (\n <Wrapper>\n <JRCLoader size={'m'} />\n </Wrapper>\n );\n};\n","import { Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCWidgetCheckListEntries, Utils } from 'jamespot-react-components';\nimport jApi, {\n CombinedWidgetContent,\n ensureWidgetCheckListType,\n jFileLittle,\n WidgetCheckListContent,\n WidgetCheckListType,\n WidgetDisplayMode,\n WidgetsName,\n} from 'jamespot-user-api';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual } from 'react-redux';\nimport styled from 'styled-components';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { RTProvider } from '../../RTProvider.component';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { WidgetInlineInputText } from './components/WidgetInlineInputText';\nimport { WidgetIsPending } from './components/WidgetIsPending';\n\nconst WidgetCheckList = commonComponentsRegistry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = commonComponentsRegistry.getLazyComponent('WidgetCheckListEditor');\nconst JRCFileViewer = commonComponentsRegistry.getLazyComponent('FileViewer');\n\nexport const CSSRowLinkWrapper = styled.div<{ border?: boolean }>`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n border: ${(props) => (props.border ? `1px solid ${props.theme.color.grey2}` : 'none')};\n min-height: 24px;\n border-radius: 4px;\n padding: 4px 8px;\n`;\n\nconst CommentContainer = styled.div`\n width: 100%;\n display: flex;\n gap: 14px;\n padding: 16px;\n`;\n\nexport const CSSWidgetCheckListWrapper = styled.div`\n position: relative;\n`;\n\ntype JRCWidgetCheckListWrapperProps = {\n widget: WidgetCheckListType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n onWidgetUpdate?: () => void;\n};\n\nexport const JRCWidgetCheckListWrapper = ({\n widget,\n inplace,\n mode,\n onWidgetUpdate,\n}: JRCWidgetCheckListWrapperProps) => {\n const intl = useIntl();\n const { uniqid, content: widgetContent } = widget;\n const dispatch = useAppDispatch();\n const [token, setToken] = useState<string>();\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const [entries, setEntries] = useState<JRCWidgetCheckListEntries | undefined>();\n const [isPending, setIsPending] = useState(false);\n\n const tokenFromStore = useAppSelector(Widget.selectors.selectToken, shallowEqual);\n\n const uri = useAppSelector((state) => Widget.selectors.selectWidgetObjectUri(state, widget.uniqid), shallowEqual);\n\n const widgetObjectRights = useAppSelector(\n (state) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const allRt = useAppSelector(\n (state) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const canEditCollaboration = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.update;\n }, [widgetObjectRights]);\n\n const canAdministrate = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.administrate;\n }, [widgetObjectRights]);\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const fetchToken = useCallback(() => {\n if (!token && !tokenLoading) {\n setTokenLoading(true);\n jApi.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n\n // set comment token to our widget slice to be able to upload image inside our widgets\n dispatch(Widget.slice.actions.setToken({ token: res.result }));\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading, dispatch]);\n\n if (!tokenFromStore) {\n fetchToken();\n } else if (!token) {\n setToken(tokenFromStore);\n }\n\n const onChange = useCallback(\n (uniqid: string, content: WidgetCheckListContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n },\n [dispatch],\n );\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n };\n\n const handleCheckItem = (id: string, index: number) => {\n if (!uri) return;\n if (isPending) return;\n setIsPending(true);\n jApi.widget\n .checkListRespond({\n uri,\n uniqid: id,\n index: index,\n })\n .then(() => {\n if (onWidgetUpdate) onWidgetUpdate();\n })\n .catch((err) => {\n onError(err.message);\n setIsPending(false);\n });\n };\n\n const handleReloadWidget = useCallback(() => {\n if (!uri) return;\n setIsPending(true);\n jApi.widget\n .getWidget<WidgetCheckListType>({ uri, uniqid })\n .then((response) => {\n if (ensureWidgetCheckListType(response.result)) {\n onChange(uniqid, response.result.content);\n }\n })\n .catch((err) => {\n return !err.aborted && onError;\n })\n .finally(() => setIsPending(false));\n }, [uniqid, onError, uri, onChange]);\n\n const openEditorPanel = (token: string) => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(Widget.slice.actions.setToken({ token }));\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: WidgetsName.CheckList,\n mode,\n }),\n );\n };\n\n useEffect(() => {\n if (!token && mode === 'edit') {\n jApi.network.token().then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n });\n }\n }, [mode, token, dispatch]);\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n file: item.file ?? undefined,\n checked: item.value ?? false,\n ...(item.links && {\n links: item.links,\n }),\n ...(item.user && { user: item.user ?? undefined }),\n ...(item.id && { id: item.id, mimetype: 'image/png' }),\n }));\n\n setEntries(finalEntries);\n }, [widget.content.arr, widgetContent]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt) return;\n if (!uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === widget.uniqid) {\n if (lastRt.fn === 'check-list-response' || lastRt.fn === 'widget-update') {\n handleReloadWidget();\n }\n }\n }, [allRt, widget.uniqid, uri, onError, dispatch, handleReloadWidget]);\n\n const handleCollabAddEntry = (label: string) => {\n if (!widget.content.arr || !uri) return;\n\n const contentToUpdate = {\n ...widget.content,\n arr: [...widget.content.arr, { title: label, value: false }],\n };\n\n jApi.widget\n .updateWidget<CombinedWidgetContent>({\n uri,\n uniqid: widget.uniqid,\n content: contentToUpdate as CombinedWidgetContent,\n v2: true,\n })\n .then(() => onChange(widget.uniqid, contentToUpdate))\n .catch((err) => onError(err.errorMsg));\n };\n\n const files = useMemo(() => {\n if (!Array.isArray(widgetContent.arr)) return [];\n\n const fs: jFileLittle[] = [];\n widgetContent.arr.forEach((el) => {\n if (el.file) {\n fs.push(el.file);\n }\n });\n\n return fs;\n }, [widgetContent]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <CommentContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={{\n ...widgetContent,\n arr: widgetContent.arr?.map((w) => ({\n ...w,\n title: Utils.html.htmlDecodeSpecialChars(w.title),\n })),\n }}\n inplace={inplace}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetCheckListContent>(widget.uniqid, content))\n }\n />\n </CommentContainer>\n );\n }\n }\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n {entries && (\n <JRCFileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <CSSWidgetCheckListWrapper key={widget.uniqid}>\n <WidgetCheckList\n limit={10}\n initialEntries={entries}\n onFileClick={(entry) => entry.id && open(entry.id)}\n onItemCheckListChange={(index) => handleCheckItem(widget.uniqid, index)}\n />\n {widgetContent.edit && (\n <WidgetInlineInputText\n handleClick={handleCollabAddEntry}\n placeholder={intl.formatMessage({\n id: 'COMMENT_WIDGET_CHECKLIST_Add_New_Task',\n })}\n />\n )}\n {canAdministrate && token && (\n <WidgetFooterView\n uniqid={widget.uniqid}\n name={widget.name}\n collaborationRights={{\n update: !!(widgetContent.edit || canEditCollaboration),\n }}\n mode={mode}\n handleOpenEditor={() => {\n if (!token) {\n setIsPending(true);\n jApi.network\n .token()\n .then((response) => {\n dispatch(\n Widget.slice.actions.setToken({ token: response.result }),\n );\n openEditorPanel(response.result);\n })\n .finally(() => setIsPending(false));\n } else {\n openEditorPanel(token);\n }\n }}\n />\n )}\n {isPending && <WidgetIsPending />}\n </CSSWidgetCheckListWrapper>\n );\n }}\n </JRCFileViewer>\n )}\n </RTProvider>\n );\n};\n","import jApi from 'jamespot-user-api';\n\nimport styled from 'styled-components';\nimport { JRCButtonDropdownOptionProps } from 'jamespot-react-components';\nimport { officeConfigurationInitialState } from '../components/OfficeConfigurationPrompt';\n\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport { Widget } from 'jamespot-front-business';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\nimport { WidgetHeader } from '../components/WidgetHeader';\n\nconst ButtonDropdown = commonComponentsRegistry.getLazyComponent('ButtonDropdown');\nconst Tooltip = commonComponentsRegistry.getLazyComponent('Tooltip');\n\nexport const UIDropdown = styled.div`\n margin-right: ${(props) => props.theme.space.sm}px;\n button {\n background: ${(props) => props.theme.color.white};\n }\n`;\n\nexport const WidgetContactCardDavHeader = ({\n uniqid,\n isConfigurationValid = false,\n handleLogout,\n}: {\n uniqid: string;\n isConfigurationValid: boolean;\n handleLogout: () => void;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const onLogout = () => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n jApi.office.setConfiguration(officeConfigurationInitialState).finally(handleLogout);\n };\n\n const options: JRCButtonDropdownOptionProps[] = [\n { label: intl.formatMessage({ id: 'WIDGET_Prompt_Logout' }), onClick: onLogout },\n ];\n\n return (\n <WidgetHeader\n uniqid={uniqid}\n dropdown={() => {\n return (\n isConfigurationValid && (\n <UIDropdown>\n <Tooltip\n position={'left'}\n description={intl.formatMessage({ id: 'WIDGET_Prompt_Dropdown' })}>\n <ButtonDropdown\n small\n smallOpenDirection=\"left\"\n options={options}\n icon={'icon-cogwheel'}\n label={''}\n color=\"primary\"\n variant=\"outlined\"\n />\n </Tooltip>\n </UIDropdown>\n )\n );\n }}\n />\n );\n};\n","import jApi, {\n DavAddressBookContact,\n WIDGET_LEVEL_1,\n WIDGET_LEVEL_3,\n WidgetContactCardDavType,\n WidgetDisplayMode,\n WidgetWrapperLevel,\n} from 'jamespot-user-api';\nimport { Toast, Widget } from 'jamespot-front-business';\nimport { ReactNode, useCallback, useEffect, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { officeConfigurationInitialState, OfficeConfigurationPrompt } from './components/OfficeConfigurationPrompt';\nimport { WidgetContactCardDavHeader } from './WidgetContactCardDav/WidgetContactCardDavHeader';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { WidgetScroll } from './components/WidgetScroll';\nimport { WidgetStylePadding } from './components/WidgetStylePadding';\nimport { useAppSelector, useAppDispatch } from '../../../redux/store';\n\nconst WidgetContactCardDav = commonComponentsRegistry.getLazyComponent('WidgetContactCardDav');\n\nexport type JRCWidgetContactCardDavProps = {\n widget: WidgetContactCardDavType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n levelFallback?: (level: WidgetWrapperLevel, url: string) => ReactNode | undefined;\n};\n\nconst REFRESH_INTERVAL = 4000;\n\nexport const JRCWidgetContactCardDavWrapper = ({ widget, mode, levelFallback }: JRCWidgetContactCardDavProps) => {\n const { uniqid } = widget;\n const dispatch = useAppDispatch();\n const [isConfigurationValid, setIsConfigurationValid] = useState<boolean | undefined>(undefined);\n const [url, setUrl] = useState<string | undefined>(undefined);\n const [doInterval, setDoInterval] = useState<boolean>(false);\n const level = useAppSelector((state) => Widget.selectors.selectWidgetLevel(state, uniqid), shallowEqual);\n const [list, setList] = useState<DavAddressBookContact[]>([]);\n\n const handleLogout = useCallback(\n (err?: any, reload?: boolean) => {\n if (err && err.error === 400) {\n jApi.office.setConfiguration(officeConfigurationInitialState);\n }\n if (reload) {\n window.location.reload();\n return;\n }\n\n setIsConfigurationValid(false);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true, loading: false }));\n },\n [dispatch, uniqid],\n );\n\n const handleLogin = useCallback(\n (isValid: boolean) => {\n setIsConfigurationValid(isValid);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true }));\n },\n [dispatch, uniqid],\n );\n\n const handleLoading = useCallback(\n (loading: boolean) => dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading })),\n [uniqid, dispatch],\n );\n\n const fetchProviderUrls = useCallback(() => {\n jApi.office\n .getProviderBaseUrls()\n .then(({ result }) => {\n setUrl(result.dav_address_book_url);\n })\n .finally(() => handleLoading(false));\n }, [handleLoading]);\n\n const fetchData = useCallback(() => {\n jApi.office\n .davAddressBookGetContacts({ limit: 10 })\n .then(({ result }) => {\n setList(result);\n setDoInterval(true);\n })\n .catch(() => {\n dispatch(Toast.actions.error({ label: 'PLUGIN_Manager_Connection_Error' }));\n setIsConfigurationValid(false);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true, loading: false }));\n })\n .finally(() => handleLoading(false));\n }, [handleLoading, dispatch, uniqid]);\n\n useEffect(() => {\n if (!doInterval) return;\n if (!isConfigurationValid) return;\n if (level !== WIDGET_LEVEL_3) return;\n const interval = setInterval(fetchData, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, [isConfigurationValid, fetchData, doInterval, level]);\n\n useEffect(() => {\n handleLoading(true);\n jApi.office\n .isConfigurationValid()\n .then(({ result }) => handleLogin(result))\n .catch(handleLogout)\n .finally(() => handleLoading(false));\n }, [handleLogin, level, fetchProviderUrls, handleLoading, handleLogout]);\n\n useEffect(() => {\n if (!isConfigurationValid) return;\n if (level === WIDGET_LEVEL_1) {\n handleLoading(true);\n fetchProviderUrls();\n return;\n }\n fetchData();\n }, [isConfigurationValid, fetchProviderUrls, handleLoading, fetchData, level]);\n\n if (isConfigurationValid && level && level !== WIDGET_LEVEL_3 && levelFallback) {\n return <>{levelFallback(level, url ?? '')}</>;\n }\n\n return (\n <WidgetScroll\n header={() => {\n return (\n <>\n <WidgetContactCardDavHeader\n uniqid={uniqid}\n isConfigurationValid={isConfigurationValid !== undefined && isConfigurationValid === true}\n handleLogout={() => handleLogout(undefined, true)}\n />\n </>\n );\n }}\n scrollable={() => {\n return (\n <WidgetStylePadding uniqid={uniqid}>\n {isConfigurationValid && <WidgetContactCardDav contactCardList={list} />}\n {isConfigurationValid === undefined && <></>}\n {isConfigurationValid !== undefined && isConfigurationValid === false && mode === 'view' && (\n <OfficeConfigurationPrompt />\n )}\n </WidgetStylePadding>\n );\n }}\n />\n );\n};\n","import jApi from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\nimport { shallowEqual } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { JRCButtonDropdownOptionProps } from 'jamespot-react-components';\nimport { officeConfigurationInitialState } from '../components/OfficeConfigurationPrompt';\nimport { useAppSelector, useAppDispatch } from '../../../../redux/store';\nimport { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\nimport { WidgetHeader } from '../components/WidgetHeader';\n\nconst ButtonDropdown = commonComponentsRegistry.getLazyComponent('ButtonDropdown');\nconst Tooltip = commonComponentsRegistry.getLazyComponent('Tooltip');\n\nexport const UIDropdown = styled.div`\n margin-right: ${(props) => props.theme.space.sm}px;\n button {\n background: ${(props) => props.theme.color.white};\n }\n`;\n\nexport const UICount = styled.div<{ color: string }>`\n font-size: ${(props) => props.theme.size.sm + 4}px;\n color: ${(props) => props.color};\n`;\n\nexport const WidgetEmailsImapHeader = ({\n uniqid,\n isConfigurationValid = false,\n handleLogout,\n}: {\n uniqid: string;\n isConfigurationValid: boolean;\n handleLogout: () => void;\n}) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n\n const count = useAppSelector((state) => Widget.selectors.selectWidgetChipCount(state, uniqid), shallowEqual);\n\n const onLogout = () => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n jApi.office.setConfiguration(officeConfigurationInitialState).finally(handleLogout);\n };\n\n const options: JRCButtonDropdownOptionProps[] = [\n { label: intl.formatMessage({ id: 'WIDGET_Prompt_Logout' }), onClick: onLogout },\n ];\n\n return (\n <WidgetHeader\n uniqid={uniqid}\n dropdown={() => {\n return (\n isConfigurationValid && (\n <UIDropdown>\n <Tooltip\n position={'left'}\n description={intl.formatMessage({ id: 'WIDGET_Prompt_Dropdown' })}>\n <ButtonDropdown\n small\n smallOpenDirection=\"left\"\n options={options}\n icon={'icon-cogwheel'}\n label={''}\n color=\"primary\"\n variant=\"outlined\"\n />\n </Tooltip>\n </UIDropdown>\n )\n );\n }}\n subHeader={(color: string) => {\n return (\n isConfigurationValid &&\n count !== 0 && (\n <UICount color={color}>\n ({intl.formatMessage({ id: 'WIDGET_Email_IMAP_Unread_Emails' }, { count })})\n </UICount>\n )\n );\n }}\n />\n );\n};\n","import jApi, {\n ImapInboxMail,\n WIDGET_LEVEL_1,\n WIDGET_LEVEL_2,\n WIDGET_LEVEL_3,\n WidgetDisplayMode,\n WidgetEmailsImapType,\n WidgetWrapperLevel,\n} from 'jamespot-user-api';\nimport { Toast, Widget } from 'jamespot-front-business';\nimport { ReactNode, useCallback, useEffect, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { WidgetEmailsImapHeader } from './WidgetEmailsImap/WidgetEmailsImapHeader';\nimport { officeConfigurationInitialState, OfficeConfigurationPrompt } from './components/OfficeConfigurationPrompt';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { WidgetScroll } from './components/WidgetScroll';\nimport { WidgetStylePadding } from './components/WidgetStylePadding';\nimport { useAppSelector, useAppDispatch } from '../../../redux/store';\n\nconst WidgetEmailsImap = commonComponentsRegistry.getLazyComponent('WidgetEmailsImap');\n\nconst REFRESH_INTERVAL = 60 * 1000;\n\nexport type JRCWidgetEmailsImapProps = {\n widget: WidgetEmailsImapType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n levelFallback?: (level: WidgetWrapperLevel, url: string) => ReactNode | undefined;\n};\n\nexport const JRCWidgetEmailsImapWrapper = ({ widget, mode, levelFallback }: JRCWidgetEmailsImapProps) => {\n const { uniqid } = widget;\n const dispatch = useAppDispatch();\n const [isConfigurationValid, setIsConfigurationValid] = useState<boolean | undefined>(undefined);\n const [doInterval, setDoInterval] = useState<boolean>(false);\n const [list, setList] = useState<ImapInboxMail[]>([]);\n const [url, setUrl] = useState<string | undefined>(undefined);\n const level = useAppSelector((state) => Widget.selectors.selectWidgetLevel(state, widget.uniqid), shallowEqual);\n\n const handleLogout = useCallback(\n (err?: any, reload?: boolean) => {\n if (err && err.error === 400) {\n jApi.office.setConfiguration(officeConfigurationInitialState);\n }\n if (reload) {\n window.location.reload();\n return;\n }\n\n setIsConfigurationValid(false);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true, loading: false }));\n },\n [dispatch, uniqid],\n );\n\n const fetchUnreadEmailsCount = useCallback(() => {\n jApi.office\n .imapInboxGetUnreadEmailsCount()\n .then(({ result }) => {\n dispatch(Widget.slice.actions.setWidgetChipCount({ uniqid, count: result }));\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true }));\n })\n .catch(handleLogout);\n }, [dispatch, uniqid, handleLogout]);\n\n const handleLoading = useCallback(\n (loading: boolean) => dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading })),\n [uniqid, dispatch],\n );\n\n const fetchProviderUrls = useCallback(() => {\n jApi.office\n .getProviderBaseUrls()\n .then(({ result }) => {\n setUrl(result.imap_inbox_url);\n })\n .finally(() => handleLoading(false));\n }, [handleLoading]);\n\n const handleLogin = useCallback(\n (isValid: boolean) => {\n setIsConfigurationValid(isValid);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true }));\n },\n [dispatch, uniqid],\n );\n\n const fetchData = useCallback(() => {\n jApi.office\n .imapInboxGetEmails({ limit: 10 })\n .then(({ result }) => {\n setList(result);\n setDoInterval(true);\n })\n .catch(() => {\n dispatch(Toast.actions.error({ label: 'PLUGIN_Manager_Connection_Error' }));\n setIsConfigurationValid(false);\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, initialized: true, loading: false }));\n })\n .finally(() => handleLoading(false));\n }, [handleLoading, dispatch, uniqid]);\n\n useEffect(() => {\n if (!doInterval) return;\n if (!isConfigurationValid) return;\n if (level === WIDGET_LEVEL_1) return;\n const interval = setInterval(() => {\n if (level === WIDGET_LEVEL_2) {\n fetchUnreadEmailsCount();\n }\n if (level === WIDGET_LEVEL_3) {\n fetchUnreadEmailsCount();\n fetchData();\n }\n }, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, [isConfigurationValid, fetchData, doInterval, fetchUnreadEmailsCount, level]);\n\n useEffect(() => {\n jApi.office\n .isConfigurationValid()\n .then(({ result }) => handleLogin(result))\n .catch(handleLogout);\n }, [handleLogin, handleLogout]);\n\n useEffect(() => {\n if (!isConfigurationValid) return;\n if (level === WIDGET_LEVEL_1) {\n handleLoading(true);\n fetchProviderUrls();\n return;\n }\n if (level === WIDGET_LEVEL_2) {\n handleLoading(true);\n fetchUnreadEmailsCount();\n fetchProviderUrls();\n return;\n }\n\n handleLoading(true);\n fetchUnreadEmailsCount();\n fetchData();\n }, [isConfigurationValid, level, fetchProviderUrls, fetchData, handleLoading, fetchUnreadEmailsCount, dispatch]);\n\n if (isConfigurationValid && level && level !== WIDGET_LEVEL_3 && levelFallback) {\n return <>{levelFallback(level, url ?? '')}</>;\n }\n\n return (\n <WidgetScroll\n header={() => {\n return (\n <>\n <WidgetEmailsImapHeader\n uniqid={uniqid}\n isConfigurationValid={isConfigurationValid !== undefined && isConfigurationValid === true}\n handleLogout={() => handleLogout(undefined, true)}\n />\n </>\n );\n }}\n scrollable={() => {\n return (\n <WidgetStylePadding uniqid={uniqid}>\n {isConfigurationValid === undefined && <></>}\n {isConfigurationValid !== undefined && isConfigurationValid === false && mode === 'view' && (\n <OfficeConfigurationPrompt />\n )}\n {isConfigurationValid && <WidgetEmailsImap emailList={list} />}\n </WidgetStylePadding>\n );\n }}\n />\n );\n};\n","import jamespot, { WidgetLuccaAbsenceUser } from 'jamespot-user-api';\nimport { useEffect, useMemo, useState } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport styled from 'styled-components';\nimport { useAbortController } from '../../../hooks';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { WidgetHeader } from './components/WidgetHeader';\nimport { WidgetScroll } from './components/WidgetScroll';\nimport { WidgetStylePadding } from './components/WidgetStylePadding';\n\nexport const UIOverlay = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst WidgetLuccaAbsence = commonComponentsRegistry.getLazyComponent('WidgetLuccaAbsence');\nconst JRCLoader = commonComponentsRegistry.getLazyComponent('Loader');\n\nexport const JRCWidgetLuccaAbsenceWrapper = ({ uniqid }: { uniqid: string }) => {\n const [list, setList] = useState<WidgetLuccaAbsenceUser[]>([]);\n const [error, setError] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n\n const abortController = useAbortController();\n\n const today = useMemo(() => {\n return (\n new Date().getFullYear() +\n '-' +\n (new Date().getMonth() + 1).toString().padStart(2, '0') +\n '-' +\n new Date().getDate().toString().padStart(2, '0') +\n ' 00:00:00'\n );\n }, []);\n\n useEffect(() => {\n jamespot.lucca\n .getAbsence({ date: today }, { signal: abortController.signal })\n .then(({ result }) => setList(result))\n .catch(() => {\n if (!abortController.signal.aborted) {\n setError(true);\n }\n })\n .finally(() => setIsLoading(false));\n }, [today, abortController.signal]);\n\n if (isLoading) {\n return (\n <UIOverlay>\n <JRCLoader size={'m'} />\n </UIOverlay>\n );\n }\n\n if (error) {\n return (\n <UIOverlay>\n <FormattedMessage id={'WIDGET_Lucca_Absence_Url_Error'} />\n </UIOverlay>\n );\n }\n\n return (\n <WidgetScroll\n header={() => {\n return <WidgetHeader uniqid={uniqid} />;\n }}\n scrollable={() => {\n return (\n <WidgetStylePadding uniqid={uniqid}>\n <WidgetLuccaAbsence list={list} />\n </WidgetStylePadding>\n );\n }}\n />\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport jamespot, { WidgetDisplayMode, WidgetPresenceContent } from 'jamespot-user-api';\n\nimport { shallowEqual } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nexport const CSSPaddingMd = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const CSSHref = styled.a`\n cursor: pointer;\n color: ${(props) => props.theme.color.secondary};\n`;\n\nexport const CSSHorizontalAlign = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nexport const WidgetPresenceWrapperClosing = ({\n mode,\n uniqid,\n content,\n}: {\n mode?: WidgetDisplayMode;\n uniqid: string;\n content: WidgetPresenceContent;\n}) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n\n const uri = useAppSelector((state) => Widget.selectors.selectWidgetObjectUri(state, uniqid), shallowEqual);\n\n const widgetObjectRights = useAppSelector(\n (state) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo<boolean>(() => !!(widgetObjectRights && widgetObjectRights.update), [widgetObjectRights]);\n\n const handleClosing = useCallback(() => {\n if (mode === 'edit' || !canUpdate || !uri) {\n return;\n }\n\n const contentToUpdate = { ...content, isClosed: true };\n\n jamespot.widget\n .updateWidget({\n uri,\n uniqid,\n content: contentToUpdate,\n v2: true,\n })\n .then(() => dispatch(Widget.slice.actions.updateWidget({ uniqid, content: contentToUpdate })))\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }, [mode, uniqid, canUpdate, uri, content, dispatch]);\n\n return (\n <>\n {canUpdate && !content.isClosed && (\n <CSSPaddingMd>\n <CSSHorizontalAlign>\n <CSSHref onClick={handleClosing}>\n {intl.formatMessage({ id: 'WIDGET_Presence_Closing' })}\n </CSSHref>\n </CSSHorizontalAlign>\n </CSSPaddingMd>\n )}\n </>\n );\n};\n","import jApi, {\n WidgetDisplayMode,\n WidgetPresenceResponse,\n WidgetPresenceResponseUserList,\n WidgetPresenceType,\n} from 'jamespot-user-api';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual } from 'react-redux';\nimport styled from 'styled-components';\nimport { Toast, updateWidgetContent, Widget } from 'jamespot-front-business';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { WidgetPresenceWrapperClosing } from './JRCWidgetPresenceWrapperClosing';\nimport { WidgetIsPending } from './components/WidgetIsPending';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { RTProvider } from '../../RTProvider.component';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst JRCWidgetPresence = commonComponentsRegistry.getLazyComponent('WidgetPresence');\nconst ModalUserList = commonComponentsRegistry.getLazyComponent('ModalUserList');\n\nexport const CSSWidgetPresenceWrapper = styled.div`\n display: flex;\n flex: 1;\n position: relative;\n flex-direction: column;\n`;\n\nexport const CSSWidgetPresenceState = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.7);\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nexport const CSSWidgetPresenceIsClosed = styled.div`\n flex: 1;\n display: flex;\n padding: ${(props) => props.theme.space.md}px;\n border: 1px dashed ${(props) => props.theme.color.orange};\n justify-content: center;\n align-items: center;\n border-radius: ${(props) => props.theme.space.sm}px;\n margin: ${(props) => props.theme.space.sm}px;\n`;\n\nexport const JRCWidgetPresenceWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetPresenceType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const { limit, limitValue, closing, isClosed } = widget.content;\n const { uniqid } = widget;\n const [response, setResponse] = useState<WidgetPresenceResponse>({\n userValue: -1,\n userAvailableList: [],\n userUnavailableList: [],\n userAvailableTotal: 0,\n userUnavailableTotal: 0,\n });\n const [isPendingResponse, setIsPendingResponse] = useState<boolean>(false);\n const [abortController] = useState<AbortController>(new AbortController());\n const [openUsersModal, setOpenUsersModal] = useState(false);\n const [usersListIndex, setUsersListIndex] = useState<number>();\n const [usersList, setUsersList] = useState<WidgetPresenceResponseUserList>();\n const ref = useRef<AbortController>(abortController);\n\n const uri = useAppSelector((state) => Widget.selectors.selectWidgetObjectUri(state, uniqid), shallowEqual);\n\n const allRt = useAppSelector((state) => Widget.selectors.selectAllWidgetRTObject(state, uniqid), shallowEqual);\n\n const handleClickAvailable = () => (response.userValue === 1 ? handleCancelRespond() : handleRespond(1));\n const handleClickUnavailable = () => (response.userValue === 0 ? handleCancelRespond() : handleRespond(0));\n\n const handleError = useCallback(\n () => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })),\n [dispatch],\n );\n\n const canRespond = useMemo<boolean>(\n () => !(limit && limitValue && response.userAvailableTotal >= limitValue),\n [limit, limitValue, response.userAvailableTotal],\n );\n\n const lockedRespondHandler = useMemo(() => {\n return (closing && isClosed) || mode === 'edit';\n }, [closing, isClosed, mode]);\n\n const handleCancelRespond = useCallback(() => {\n if (!uri || lockedRespondHandler) return;\n if (!canRespond) {\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Limit_Response_Error' }));\n return;\n }\n\n setIsPendingResponse(true);\n jApi.widget\n .presenceCancel({ uri, uniqid })\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n }, [dispatch, uniqid, handleError, uri, canRespond, lockedRespondHandler]);\n\n const handleRespond = useCallback(\n (value: 1 | 0) => {\n if (!uri || lockedRespondHandler) return;\n\n setIsPendingResponse(true);\n jApi.widget\n .presenceRespond(\n {\n uri,\n uniqid,\n value,\n },\n ref.current.signal,\n )\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n },\n [uri, uniqid, handleError, lockedRespondHandler],\n );\n\n const handleResponse = useCallback(() => {\n if (mode === 'edit' || !uri) return;\n setIsPendingResponse(true);\n jApi.widget\n .presenceGetResponse({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n setResponse(response.result);\n })\n .catch((err) => !err.aborted && handleError())\n .finally(() => setIsPendingResponse(false));\n }, [uri, handleError, uniqid, mode]);\n\n const handleLoadUsersList = (index: number, page?: number) => {\n if (!uri) return;\n jApi.widget\n .presenceGetResponseUserList({ uri, uniqid, index, page, limit: 8 }, ref.current.signal)\n .then((response) => {\n setUsersList({\n ...response.result,\n data: [...response.result.data],\n cnt: response.result.cnt,\n });\n })\n .catch((err) => {\n return !err.aborted && handleError;\n });\n };\n\n const handleReloadWidget = useCallback(() => {\n if (!uri) return;\n setIsPendingResponse(true);\n jApi.widget\n .getWidget<WidgetPresenceType>({ uri, uniqid })\n .then((response) => {\n dispatch(updateWidgetContent(uniqid, response.result));\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPendingResponse(false));\n }, [dispatch, handleError, uri, uniqid]);\n\n useEffect(() => {\n const elm = ref.current;\n return () => {\n elm.abort();\n };\n }, []);\n\n useEffect(() => {\n handleResponse();\n }, [handleResponse]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt || !uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === uniqid) {\n if (lastRt.fn === 'widget-presence-response') {\n handleResponse();\n }\n if (lastRt.fn === 'widget-update') {\n handleReloadWidget();\n }\n }\n }, [allRt, handleResponse, uniqid, uri, handleReloadWidget]);\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n <CSSWidgetPresenceWrapper>\n <JRCWidgetPresence\n limit={limit}\n limitValue={limitValue}\n userAvailableList={response.userAvailableList}\n userUnavailableList={response.userUnavailableList}\n userValue={response.userValue}\n userAvailableTotal={response?.userAvailableTotal}\n userUnavailableTotal={response?.userUnavailableTotal}\n isClosed={closing && isClosed}\n handleClickAvailable={handleClickAvailable}\n handleClickUnavailable={handleClickUnavailable}\n handleOpenUsersModal={(index) => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n setUsersListIndex(index);\n handleLoadUsersList(index);\n setOpenUsersModal(true);\n }}\n />\n {closing && isClosed && (\n <CSSWidgetPresenceIsClosed>\n {intl.formatMessage({ id: 'WIDGET_Presence_Is_Closed' })}\n </CSSWidgetPresenceIsClosed>\n )}\n {closing && !isClosed && (\n <WidgetPresenceWrapperClosing mode={mode} uniqid={widget.uniqid} content={widget.content} />\n )}\n {mode === 'view' && <WidgetFooterView uniqid={widget.uniqid} name={widget.name} mode={mode} />}\n {isPendingResponse && <WidgetIsPending />}\n <ModalUserList\n open={openUsersModal}\n usersList={usersList}\n title={\n usersListIndex === 1\n ? intl.formatMessage({ id: 'WIDGET_Presence_On' })\n : intl.formatMessage({ id: 'WIDGET_Presence_Off' })\n }\n setOpen={setOpenUsersModal}\n onClose={() => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n }}\n handleLoadUsersList={(page) => {\n handleLoadUsersList(usersListIndex ?? 0, page);\n }}\n />\n </CSSWidgetPresenceWrapper>\n </RTProvider>\n );\n};\n","import { Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport jApi, {\n CombinedWidgetContent,\n jFileLittle,\n WidgetDisplayMode,\n WidgetQuickSurveyContent,\n WidgetQuickSurveyResponse,\n WidgetQuickSurveyResponseUserList,\n WidgetQuickSurveyType,\n WidgetsName,\n} from 'jamespot-user-api';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual } from 'react-redux';\nimport styled from 'styled-components';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { WidgetInlineInputText } from './components/WidgetInlineInputText';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetIsPending } from './components/WidgetIsPending';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { RTProvider } from '../../RTProvider.component';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst WidgetQuickSurvey = commonComponentsRegistry.getLazyComponent('WidgetQuickSurvey');\nconst WidgetQuickSurveyEditor = commonComponentsRegistry.getLazyComponent('WidgetQuickSurveyEditor');\nconst ModalUserList = commonComponentsRegistry.getLazyComponent('ModalUserList');\nconst JRCFileViewer = commonComponentsRegistry.getLazyComponent('FileViewer');\n\nconst WrapperContainer = styled.div<{ withPadding?: boolean }>`\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 14px;\n ${(props) => props.withPadding && `padding: 0 12px;`}\n padding-top: 16px;\n`;\n\ntype JRCWidgetQuickSurveyWrapperProps = {\n widget: WidgetQuickSurveyType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n};\n\nexport const JRCWidgetQuickSurveyWrapper = ({ widget, inplace, mode }: JRCWidgetQuickSurveyWrapperProps) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const { uniqid, content: widgetContent } = widget;\n const [response, setResponse] = useState<WidgetQuickSurveyResponse>({\n userResponses: [],\n totalRespondent: 0,\n totalResponse: 0,\n userLoggedResponses: [],\n });\n const [openUsersModal, setOpenUsersModal] = useState(false);\n const [isPending, setIsPending] = useState(false);\n const [usersListIndex, setUsersListIndex] = useState<number>();\n const [usersList, setUsersList] = useState<WidgetQuickSurveyResponseUserList>();\n\n const [abortController] = useState<AbortController>(new AbortController());\n const ref = useRef<AbortController>(abortController);\n\n const token = useAppSelector(Widget.selectors.selectToken, shallowEqual);\n\n const uri = useAppSelector((state) => Widget.selectors.selectWidgetObjectUri(state, widget.uniqid), shallowEqual);\n\n const widgetObjectRights = useAppSelector(\n (state) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const allRt = useAppSelector(\n (state) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const onChange = useCallback(\n (uniqid: string, content: WidgetQuickSurveyContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n },\n [dispatch],\n );\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n };\n\n const openEditorPanel = (token: string) => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(Widget.slice.actions.setToken({ token }));\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: WidgetsName.QuickSurvey,\n }),\n );\n };\n\n const handleError = useCallback(\n () => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })),\n [dispatch],\n );\n\n const handleResponse = useCallback(\n (uniqid: string) => {\n if (mode === 'edit' || !uri) return;\n setIsPending(true);\n jApi.widget\n .quickSurveyGetResponse({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n setResponse(response.result);\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPending(false));\n },\n [handleError, uri, mode],\n );\n\n const handleWidgetGet = useCallback(() => {\n if (!uri) return;\n setIsPending(true);\n jApi.widget\n .getWidget<WidgetQuickSurveyType>({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n onChange(uniqid, response.result.content);\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPending(false));\n }, [uniqid, handleError, uri, onChange]);\n\n const handleRespond = (index: number) => {\n if (mode === 'edit' || !uri) return;\n setIsPending(true);\n jApi.widget\n .quickSurveyRespond({ uri, index, multi: widgetContent.multi ? 1 : 0, uniqid }, ref.current.signal)\n .then(() => {\n handleResponse(widget.uniqid);\n })\n .catch((err) => !err.aborted && handleError)\n .finally(() => setIsPending(false));\n };\n\n const handleCloseSurvey = () => {\n if (!uri) return;\n if (widgetContent.closing) {\n const finalContent = { ...widgetContent, isClosed: true } as CombinedWidgetContent;\n\n jApi.widget\n .updateWidget<WidgetQuickSurveyType>({\n uri,\n uniqid,\n content: finalContent,\n })\n .catch(() => {\n handleError();\n });\n }\n };\n\n const handleProgressBarClick = (index: number) => {\n handleRespond(index);\n };\n\n const handleAddQuickAnswer = (title: string) => {\n if (!uri) return;\n\n const newContent = {\n ...widgetContent,\n arr: [...(widgetContent.arr ?? []), { title }],\n } as CombinedWidgetContent;\n\n jApi.widget\n .quickSurveyAddEnty({ uri, uniqid, label: title })\n .then(() => {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content: newContent }));\n })\n .catch(handleError);\n };\n\n const handleLoadUsersList = (index: number, page?: number) => {\n if (!uri) return;\n jApi.widget\n .quickSurveyGetResponseUserList({ uri, uniqid, index, page, limit: 8 }, ref.current.signal)\n .then((response) => {\n setUsersList({\n ...response.result,\n data: [...response.result.data],\n cnt: response.result.cnt,\n });\n })\n .catch((err) => {\n return !err.aborted && handleError;\n });\n };\n\n const canUpdate = useMemo(() => widgetObjectRights && widgetObjectRights.update, [widgetObjectRights]);\n\n useEffect(() => {\n handleResponse(widget.uniqid);\n }, [handleResponse, widget.uniqid]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt) return;\n if (!uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === widget.uniqid) {\n if (lastRt.fn === 'widget-quick-survey-response') {\n handleResponse(widget.uniqid);\n }\n if (lastRt.fn === 'widget-update') {\n handleWidgetGet();\n }\n }\n }, [allRt, uri, widget.uniqid, handleWidgetGet, handleResponse]);\n\n const files = useMemo(() => {\n if (!Array.isArray(widgetContent.arr)) return [];\n\n const fs: jFileLittle[] = [];\n widgetContent.arr.forEach((el) => {\n if (el.file) {\n fs.push(el.file);\n }\n });\n\n return fs;\n }, [widgetContent]);\n\n useEffect(() => {\n if (!token && mode === 'edit') {\n jApi.network.token().then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n });\n }\n }, [mode, token, dispatch]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <WrapperContainer withPadding={true}>\n <WidgetQuickSurveyEditor\n token={token}\n uniqid={uniqid}\n content={widget.content}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n handleChange={(content) => onChange(uniqid, content)}\n inplace={inplace}\n />\n </WrapperContainer>\n );\n }\n }\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n <WrapperContainer>\n <JRCFileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <WidgetQuickSurvey\n limit={response.totalResponse ?? 0}\n values={widgetContent.arr ?? []}\n userResponses={response.userResponses}\n userHasAlreadyVoted={response.userLoggedResponses.length > 0}\n canCloseSurvey={widget.content.closing ?? false}\n isClosed={widget.content.isClosed ?? false}\n open={widget.content.open ?? false}\n anonymize={widget.content.anonymize ?? false}\n seeResponseAfter={widget.content.seeResponseAfter ?? false}\n canUpdate={canUpdate}\n handleClickFile={(entry) => entry.id && open(entry.id)}\n handleCloseSurvey={handleCloseSurvey}\n handleProgressBarClick={handleProgressBarClick}\n setOpenUsersModal={(index) => {\n setUsersListIndex(index);\n handleLoadUsersList(index);\n setOpenUsersModal(true);\n }}\n />\n );\n }}\n </JRCFileViewer>\n\n {widgetContent.open && (\n <WidgetInlineInputText\n handleClick={handleAddQuickAnswer}\n placeholder={intl.formatMessage({ id: 'FIELDS_Add_Option' })}\n />\n )}\n {canUpdate && (\n <WidgetFooterView\n uniqid={widget.uniqid}\n name={widget.name}\n collaborationRights={{\n update: !!canUpdate,\n }}\n mode={mode}\n handleOpenEditor={() => {\n if (!token) {\n setIsPending(true);\n jApi.network\n .token()\n .then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n openEditorPanel(response.result);\n })\n .finally(() => setIsPending(false));\n } else {\n openEditorPanel(token);\n }\n }}\n />\n )}\n {isPending && <WidgetIsPending />}\n <ModalUserList\n open={openUsersModal}\n usersList={usersList}\n title={widgetContent.arr?.[usersListIndex ?? 0]?.title ?? ''}\n setOpen={setOpenUsersModal}\n handleLoadUsersList={(page) => {\n handleLoadUsersList(usersListIndex ?? 0, page);\n }}\n onClose={() => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n }}\n />\n </WrapperContainer>\n </RTProvider>\n );\n};\n","import { WidgetUserProfileType, WidgetDisplayMode } from 'jamespot-user-api';\nimport { UserCurrent, Widget, WidgetEditor } from 'jamespot-front-business';\n\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\nimport { useEffect } from 'react';\n\nconst WidgetUserProfile = commonComponentsRegistry.getLazyComponent('WidgetUserProfile');\n\ntype JRCWidgetUserProfileWrapperProps = {\n widget: WidgetUserProfileType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n};\n\nexport const JRCWidgetUserProfileWrapper = ({ widget, mode }: JRCWidgetUserProfileWrapperProps) => {\n const dispatch = useAppDispatch();\n const { uniqid, name, content } = widget;\n\n const currentUser = useAppSelector(UserCurrent.selectors.get);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n return () => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: false }));\n };\n }, [uniqid, dispatch]);\n\n useEffect(() => {\n if (mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n }\n }, [dispatch, mode, name, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n return (\n <WidgetUserProfile\n currentUser={currentUser}\n pictureSize={content.pictureSize}\n displayMode={content.buttonName}\n css={content.css}\n />\n );\n};\n","import { WidgetTableColumn, WidgetTableColumnsData } from 'jamespot-user-api';\n\nexport const getVisibleColumns = (tableColumnsData: WidgetTableColumnsData, columns: WidgetTableColumn[]) => {\n const toRet: WidgetTableColumn[] = [];\n tableColumnsData\n .filter((data) => data.isVisible)\n .forEach((data) => {\n const column = columns.find((el) => el.name === data.name);\n if (column) {\n toRet.push(column);\n }\n });\n\n return toRet;\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport jamespot, {\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetExcelDatasourceTableContent,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\nimport styled from 'styled-components';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { getVisibleColumns } from './utils';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\n\nconst WidgetTable = commonComponentsRegistry.getLazyComponent('WidgetTable');\nconst Loader = commonComponentsRegistry.getLazyComponent('Loader');\n\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WidgetExcelDatasourceTableWrapper = ({\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetExcelDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const dispatch = useAppDispatch();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n\n const definition = useMemo(() => Widget.definition(WidgetsName.ExcelDatasourceTable), []);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n })\n .finally(() => setIsLoading(false));\n }\n }, [uri, tableColumnsData, datasourceModel]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 && mode !== 'edit' ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n />\n )}\n </>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport jamespot, {\n DatasourceResultSort,\n DatasourceType,\n Format,\n WidgetDatasourceTableContent,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\nimport styled from 'styled-components';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { getVisibleColumns } from './utils';\nimport { FitType, useArticleRT } from '../hooks';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst WidgetTable = commonComponentsRegistry.getLazyComponent('WidgetTable');\nconst Loader = commonComponentsRegistry.getLazyComponent('Loader');\n\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WidgetDatasourceTableWrapper = ({\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const dispatch = useAppDispatch();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n const [datasourceSort, setDatasourceSort] = useState<DatasourceResultSort>({ order: 'ascending', name: 'unknown' });\n const [datasourceType, setDatasourceType] = useState<DatasourceType | undefined>(undefined);\n const [datasourceIdentifier, setDatasourceIdentifier] = useState<string>('');\n\n const definition = useMemo(() => Widget.definition(WidgetsName.DatasourceTable), []);\n const rtConditions = useMemo<FitType[]>(() => {\n if (datasourceType === 'studio') {\n return [{ type: [datasourceIdentifier] }];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n const rtAudience = useMemo<string[]>(() => {\n if (datasourceType === 'doc') {\n return [datasourceIdentifier];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n\n const { rtLastObject } = useArticleRT(rtConditions, rtAudience);\n\n const fetchDatasource = useCallback(() => {\n if (!uri) {\n return;\n }\n\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n setDatasourceSort(response.result.sort);\n setDatasourceType(response.result.datasource.datasourceType);\n setDatasourceIdentifier(response.result.datasource.datasourceIdentifier);\n })\n .finally(() => setIsLoading(false));\n }, [uri]);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n fetchDatasource();\n }\n }, [uri, tableColumnsData, datasourceModel, fetchDatasource]);\n\n useEffect(() => {\n if (!rtLastObject) {\n return;\n }\n\n fetchDatasource();\n }, [rtLastObject, fetchDatasource]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 && mode !== 'edit' ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n tableDefaultSortOrder={datasourceSort.order}\n tableDefaultSortName={datasourceSort.name}\n />\n )}\n </>\n );\n};\n","import { useAppSelector } from '../../../redux/store';\nimport { Hook } from 'jamespot-front-business';\nimport { LicenseHookListType } from 'jamespot-user-api';\nimport { ReactNode } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst UILicenseRequired = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${(props) => props.theme.color.orange};\n`;\n\nexport const WidgetLicenseWrapper = ({ children, name }: { children: ReactNode; name: keyof LicenseHookListType }) => {\n const hook = useAppSelector((state) => Hook.selectors.selectHook(state, name));\n const intl = useIntl();\n\n if (hook && !hook.hasLicense) {\n return (\n <UILicenseRequired>\n {intl.formatMessage({ id: 'WIDGET_Missing_License' }, { label: 'label' in hook ? hook.label : '' })}\n </UILicenseRequired>\n );\n }\n\n return <>{children}</>;\n};\n","import { WidgetWelcomeType, WidgetDisplayMode } from 'jamespot-user-api';\nimport { UserCurrent, Widget, WidgetEditor } from 'jamespot-front-business';\n\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\nimport { useEffect } from 'react';\n\nconst WidgetWelcome = commonComponentsRegistry.getLazyComponent('WidgetWelcome');\n\ntype JRCWidgetWelcomeWrapperProps = {\n widget: WidgetWelcomeType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n};\n\nexport const JRCWidgetWelcomeWrapper = ({ widget, mode }: JRCWidgetWelcomeWrapperProps) => {\n const dispatch = useAppDispatch();\n const { uniqid, name, content } = widget;\n\n const currentUser = useAppSelector(UserCurrent.selectors.get);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n return () => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: false }));\n };\n }, [uniqid, dispatch]);\n\n useEffect(() => {\n if (mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n }\n }, [dispatch, mode, name, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n return (\n <WidgetWelcome\n currentUser={currentUser}\n position={content.position}\n lineBreak={content.lineBreak}\n message={content.message}\n displayMode={content.buttonName}\n css={content.css}\n />\n );\n};\n","import { WidgetExtensionContent, WidgetKeys } from 'jamespot-user-api';\nimport { useEffect, useMemo } from 'react';\n\nexport const JRCWidgetExtensionWrapper = ({\n uniqid,\n extensionName,\n}: {\n uniqid: string;\n name: WidgetKeys;\n} & WidgetExtensionContent) => {\n const uuid = useMemo(() => `widget-extension-${extensionName}-${uniqid}`, [extensionName, uniqid]);\n\n useEffect(() => {\n if (!extensionName) return;\n J.react.require(extensionName, { anchorId: uuid });\n }, [extensionName, uuid]);\n\n return <div id={uuid}></div>;\n};\n","import {\n CombinedWidgetType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCalendarCalDavType,\n ensureWidgetCheckListType,\n ensureWidgetContactCardDavType,\n ensureWidgetDatasourceTableType,\n ensureWidgetEmailsImapType,\n ensureWidgetExcelDatasourceTableType,\n ensureWidgetExtensionType,\n ensureWidgetLuccaAbsenceType,\n ensureWidgetPresenceType,\n ensureWidgetQuickSurveyType,\n ensureWidgetUserProfileType,\n ensureWidgetWelcomeType,\n // hygen: inject:here ensure\n WidgetDisplayMode,\n WidgetWrapperLevel,\n} from 'jamespot-user-api';\nimport { ReactNode } from 'react';\nimport styled from 'styled-components';\nimport { WidgetHeaderEdit } from './wrapper/components/WidgetHeaderEdit';\nimport { WidgetTitle } from './wrapper/components/WidgetTitle';\nimport { JRCWidgetArticleAttachmentWrapper } from './wrapper/JRCWidgetArticleAttachmentWrapper';\nimport { JRCWidgetArticleButtonWrapper } from './wrapper/JRCWidgetArticleButtonWrapper';\nimport { JRCWidgetArticleGalleryWrapper } from './wrapper/JRCWidgetArticleGalleryWrapper';\nimport { JRCWidgetArticleImageWrapper } from './wrapper/JRCWidgetArticleImageWrapper';\nimport { JRCWidgetArticleSliderWrapper } from './wrapper/JRCWidgetArticleSliderWrapper';\nimport { JRCWidgetArticleTextWrapper } from './wrapper/JRCWidgetArticleTextWrapper';\nimport { JRCWidgetArticleTitleWrapper } from './wrapper/JRCWidgetArticleTitleWrapper';\nimport { JRCWidgetCalendarCalDavWrapper } from './wrapper/JRCWidgetCalendarCalDavWrapper';\nimport { JRCWidgetCheckListWrapper } from './wrapper/JRCWidgetCheckListWrapper';\nimport { JRCWidgetContactCardDavWrapper } from './wrapper/JRCWidgetContactCardDavWrapper';\nimport { JRCWidgetEmailsImapWrapper } from './wrapper/JRCWidgetEmailsImapWrapper';\nimport { JRCWidgetLuccaAbsenceWrapper } from './wrapper/JRCWidgetLuccaAbsenceWrapper';\nimport { JRCWidgetPresenceWrapper } from './wrapper/JRCWidgetPresenceWrapper';\nimport { JRCWidgetQuickSurveyWrapper } from './wrapper/JRCWidgetQuickSurveyWrapper';\nimport { JRCWidgetUserProfileWrapper } from './wrapper/JRCWidgetUserProfileWrapper';\nimport { WidgetExcelDatasourceTableWrapper } from './wrapper/JRCWidgetExcelDatasourceTableWrapper';\nimport { WidgetDatasourceTableWrapper } from './wrapper/JRCWidgetDatasourceTableWrapper';\n\nimport { WidgetLicenseWrapper } from './wrapper/WidgetLicenseWrapper';\nimport { JRCWidgetWelcomeWrapper } from './wrapper/JRCWidgetWelcomeWrapper';\nimport { JRCWidgetExtensionWrapper } from './wrapper/JRCWidgetExtensionWrapper';\n\nexport const CSSWidgetWithTitle = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\nexport const DisplayWidget = ({\n widget,\n width,\n inplace = false,\n mode = 'view',\n onWidgetUpdate,\n cannotDisplayComponent,\n levelFallback,\n dataCy,\n}: {\n widget: CombinedWidgetType;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n onWidgetUpdate?: () => void;\n cannotDisplayComponent?: (widget: string) => ReactNode;\n levelFallback?: (level: WidgetWrapperLevel, url: string) => ReactNode | undefined;\n dataCy?: string;\n}) => {\n const { name } = widget;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return <JRCWidgetArticleButtonWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return <JRCWidgetArticleGalleryWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetLuccaAbsenceType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetLicenseWrapper name={'LuccaAbsenceHook'}>\n <JRCWidgetLuccaAbsenceWrapper uniqid={widget.uniqid} />\n </WidgetLicenseWrapper>\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return <JRCWidgetArticleAttachmentWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleImageType(widget)) {\n return <JRCWidgetArticleImageWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleSliderType(widget)) {\n return <JRCWidgetArticleSliderWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n } else if (ensureWidgetArticleTitleType(widget)) {\n return <JRCWidgetArticleTitleWrapper widget={widget} inplace={inplace} mode={mode} dataCy={dataCy} />;\n } else if (ensureWidgetArticleTextType(widget)) {\n return <JRCWidgetArticleTextWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetTitle uniqid={widget.uniqid} />\n <WidgetExcelDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetTitle uniqid={widget.uniqid} />\n <WidgetDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetCheckListType(widget, widget.name === 'widget-check-list')) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetCheckListWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n onWidgetUpdate={onWidgetUpdate}\n />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetPresenceWrapper widget={widget} inplace={inplace} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetQuickSurveyType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetQuickSurveyWrapper widget={widget} inplace={inplace} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetCalendarCalDavType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetLicenseWrapper name={'OfficeHook'}>\n <JRCWidgetCalendarCalDavWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n levelFallback={levelFallback}\n />\n </WidgetLicenseWrapper>\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetContactCardDavType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetLicenseWrapper name={'OfficeHook'}>\n <JRCWidgetContactCardDavWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n levelFallback={levelFallback}\n />\n </WidgetLicenseWrapper>\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetEmailsImapType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetLicenseWrapper name={'OfficeHook'}>\n <JRCWidgetEmailsImapWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n levelFallback={levelFallback}\n />\n </WidgetLicenseWrapper>\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetUserProfileType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <JRCWidgetUserProfileWrapper widget={widget} inplace={inplace} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetWelcomeType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <JRCWidgetWelcomeWrapper widget={widget} inplace={inplace} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetExtensionType(widget) && widget.content.extensionName) {\n return (\n <CSSWidgetWithTitle>\n <JRCWidgetExtensionWrapper\n uniqid={widget.uniqid}\n name={widget.name}\n extensionName={widget.content.extensionName}\n />\n </CSSWidgetWithTitle>\n );\n // hygen: inject:here elseif\n } else {\n return cannotDisplayComponent ? <>{cannotDisplayComponent(name)}</> : <>cannot display widget ({name})</>;\n }\n};\n","import styled from 'styled-components';\n\nexport const CSSWidgetLayer = styled.div<{ opacity: number; backgroundColor: string; pointerEvents: string }>`\n position: absolute;\n inset: 0;\n opacity: ${(props) => props.opacity};\n background-color: ${(props) => props.backgroundColor};\n pointer-events: ${(props) => props.pointerEvents};\n`;\n","import { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { WidgetVector, WidgetDisplayMode, WidgetKeys } from 'jamespot-user-api';\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\n// eslint-disable-next-line import/no-cycle\nimport WidgetWrapperCore from '../WidgetWrapperCore';\nimport { CSSWidgetLayer } from './WidgetLayer.style';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst BETA_JRCDoubleClick = commonComponentsRegistry.getLazyComponent('DoubleClick');\n\n/*\n Widget layering\n*/\n\nexport const WidgetLayer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layers = useAppSelector((state) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n return (\n <>\n {layers?.map((layer, index) => {\n if (mode === 'edit') {\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n }\n\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n })}\n </>\n );\n};\n\nconst Layer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layer = useAppSelector((state) => state.widgets.layers[uniqid]);\n if (mode === 'view') {\n return (\n <CSSWidgetLayer opacity={1} backgroundColor={'transparent'} pointerEvents={'none'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'view'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n }\n\n return (\n <CSSWidgetLayer\n opacity={layer.visible ? 1 : 0}\n backgroundColor={layer.visible ? 'rgba(255,255,255,.1)' : 'transparent'}\n pointerEvents={layer.locked ? 'none' : 'all'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'edit'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n};\n\n/*\n Widget from the layer\n*/\nconst LayerWidget = ({ uniqid, layerId, mode }: { uniqid: string; layerId: string; mode: WidgetDisplayMode }) => {\n const dispatch = useAppDispatch();\n const widgetWrapper = useAppSelector((state) => state.widgets.ids[uniqid], shallowEqual);\n const layer = useAppSelector((state) => state.widgets.layers[layerId]);\n\n if (!widgetWrapper) {\n return <></>;\n }\n\n if (!layer) {\n return <></>;\n }\n\n if (!layer.position) {\n return <></>;\n }\n\n const onDoubleTap = (uniqid: string, name: WidgetKeys) => {\n /*\n Open editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const onMouseUp = (position: WidgetVector) => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid: layerId, props: { position } }));\n };\n\n if (mode === 'view') {\n return (\n <div style={{ position: 'absolute', top: layer.position.y, left: layer.position.x }}>\n <WidgetWrapperCore\n uniqid={uniqid}\n widget={widgetWrapper}\n mode={mode}\n inplace={true}\n context={'article'}\n />\n </div>\n );\n }\n\n return (\n <DraggableHandler\n position={{ x: layer.position.x, y: layer.position.y }}\n onMouseUp={(position: WidgetVector) => {\n if (\n (layer.position && layer.position.x !== position.x) ||\n (layer.position && layer.position.y !== position.y)\n ) {\n onMouseUp(position);\n }\n }}>\n <BETA_JRCDoubleClick\n onDoubleTap={() => onDoubleTap(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n <WidgetWrapperCore\n uniqid={uniqid}\n widget={widgetWrapper}\n mode={mode}\n inplace={true}\n context={'article'}\n />\n </BETA_JRCDoubleClick>\n </DraggableHandler>\n );\n};\n\nexport type Vector = {\n x: number;\n y: number;\n};\n\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\nexport const DraggableHandler = ({\n position,\n children,\n onMouseUp,\n}: {\n position: Vector;\n children: ReactElement;\n onMouseUp: (position: Vector) => void;\n}) => {\n const [mouseIsDown, setMouseDown] = useState<boolean>(false);\n const [mouse, setMouse] = useState<Vector>({ x: 0, y: 0 });\n const [start, setStart] = useState<Vector>({ x: 0, y: 0 });\n const [child, setChild] = useState<Vector>({ x: position.x, y: position.y });\n\n const ref = useRef<HTMLDivElement>(null);\n\n const handleMouseDown = useCallback(\n (event: any) => {\n setMouseDown(true);\n if (ref.current) {\n setMouse({ x: event.nativeEvent.clientX, y: event.nativeEvent.clientY });\n setStart({ x: child.x, y: child.y });\n }\n },\n [child.x, child.y],\n );\n\n const handleMouseMove = useCallback(\n (event: any) => {\n if (mouseIsDown && ref.current) {\n const dx = start.x + (event.clientX - mouse.x);\n const dy = start.y + (event.clientY - mouse.y);\n\n setChild({ x: dx, y: dy });\n }\n },\n [mouse.x, mouse.y, mouseIsDown, start.x, start.y],\n );\n\n const handleMouseUp = useCallback(() => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n }, [child.x, child.y, onMouseUp]);\n\n useEffect(() => {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n\n return (\n <div style={{ position: 'absolute', top: child.y, left: child.x }} ref={ref} onMouseDown={handleMouseDown}>\n {children}\n </div>\n );\n};\n","import { WidgetKeys } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { useAppSelector } from '../../redux/store';\n\nconst JRCLoader = commonComponentsRegistry.getLazyComponent('Loader');\n\n/*\n Widget state\n*/\n\n//TODO: REFACTORING\nexport const WidgetState = ({ uniqid, inplace }: { name: WidgetKeys; uniqid: string; inplace: boolean }) => {\n const state = useAppSelector((state) => Widget.selectors.selectWidgetState(state, uniqid));\n\n if (state?.loading) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <JRCLoader />\n </div>\n );\n }\n\n if (state?.hover) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}></div>\n );\n }\n\n if (!state?.initialized && inplace) {\n return <></>;\n }\n\n return <></>;\n};\n","import { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { DashedFocusBorder } from 'jamespot-react-components';\nimport { WidgetKeys } from 'jamespot-user-api';\nimport { useCallback } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { useAppDispatch } from '../../redux/store';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst JRCHtml = commonComponentsRegistry.getLazyComponent('Html');\n\nexport const WrapperEditMode = styled.button`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n\n ${DashedFocusBorder()}\n`;\n\nexport const WidgetWrapperCoreEditHover = ({ uniqid, name }: { uniqid: string; name: WidgetKeys }) => {\n const dispatch = useAppDispatch();\n const intl = useIntl();\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n }),\n );\n }, [dispatch, uniqid, name]);\n const def = Widget.definition(name);\n\n return (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: def.label,\n })}</b>`}\n />\n </WrapperEditMode>\n );\n};\n","import { ReactNode, useMemo } from 'react';\nimport { Widget } from 'jamespot-front-business';\nimport { shallowEqual } from 'react-redux';\nimport { useAppSelector } from '../../../../redux/store';\nimport styled, { useTheme } from 'styled-components';\n\nexport const UIWrapper = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\n/*\n DO NOT USE PADDING HERE (LOOK AT WIDGET STYLE PADDING COMPONENT)\n*/\nconst WidgetStyle = ({ uniqid, onClick, children }: { uniqid: string; onClick: () => void; children: ReactNode }) => {\n const theme = useTheme();\n const styles = useAppSelector((state) => Widget.selectors.selectWidgetWrapperStyle(state, uniqid), shallowEqual);\n\n const initialValues = useMemo(() => {\n return {\n color: styles && styles['color'] ? String(styles['color']) : theme.color.black,\n backgroundColor:\n styles && styles['background-color'] ? String(styles['background-color']) : theme.color.white,\n borderRadius: styles && styles['border-radius'] ? `${styles['border-radius']}px` : '0px',\n borderColor: styles['border-color'] ? String(styles['border-color']) : theme.color.black,\n borderWidth: styles['border-width'] ? `${styles['border-width']}px` : '0px',\n borderStyle: styles['border-style'] ? String(styles['border-style']) : 'none',\n };\n }, [styles, theme]);\n\n return (\n <UIWrapper\n onClick={onClick}\n style={{\n color: initialValues.color,\n borderColor: initialValues.borderColor,\n borderStyle: initialValues.borderStyle,\n borderRadius: initialValues.borderRadius,\n borderWidth: initialValues.borderWidth,\n backgroundColor: initialValues.backgroundColor,\n overflow: Number(initialValues.borderRadius) > 0 ? 'hidden' : 'initial',\n }}>\n {children}\n </UIWrapper>\n );\n};\n\nexport const WidgetStyleWrapper = WidgetStyle;\n","import { WidgetKeys, WidgetWrapperLevel } from 'jamespot-user-api';\n\nimport { Widget } from 'jamespot-front-business';\nimport { shallowEqual } from 'react-redux';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppSelector } from '../../../redux/store';\nimport styled from 'styled-components';\n\nconst WidgetIcon = commonComponentsRegistry.getLazyComponent('WidgetIcon');\n\nexport const CSSIconAbsoluteA = styled.a<{ color: string | undefined }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n color: ${(props) => (props.color ? props.color : props.theme.color.black)};\n transition: background-color 0.4s;\n &:hover {\n background-color: rgba(0, 0, 0, 0.1);\n color: ${(props) => (props.color ? props.color : props.theme.color.black)};\n }\n`;\n\nexport const JRCWidgetIconWrapper = ({\n uniqid,\n name,\n url,\n level,\n}: {\n uniqid: string;\n name: WidgetKeys;\n url: string;\n level: WidgetWrapperLevel;\n}) => {\n const def = Widget.definition(name);\n const count = useAppSelector(\n (state) => (level === 2 ? Widget.selectors.selectWidgetChipCount(state, uniqid) : 0),\n shallowEqual,\n );\n const styles = useAppSelector((state) => Widget.selectors.selectWidgetWrapperStyle(state, uniqid), shallowEqual);\n\n return (\n <CSSIconAbsoluteA\n href={url}\n target=\"_blank\"\n color={String(styles.color) ?? undefined}\n rel=\"noreferrer\"\n aria-label={def.label}>\n <WidgetIcon count={count} img={def.img} label={def.label} maxValue={999} />\n </CSSIconAbsoluteA>\n );\n};\n","import { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { jCommentList, WidgetContext, WidgetDisplayMode, WidgetWrapperProps } from 'jamespot-user-api';\nimport { ReactNode, useCallback, useEffect } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { useComponentVisible } from './hooks';\nimport { DisplayWidget } from './Widget';\n\n// eslint-disable-next-line import/no-cycle\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\nimport { WidgetState } from './WidgetState';\nimport { WidgetWrapperCoreEditHover } from './WidgetWrapperCoreEditHover';\n\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\nimport { WidgetStyleWrapper } from './wrapper/components/WidgetStyleWrapper';\nimport { JRCWidgetIconWrapper } from './wrapper/JRCWidgetIconWrapper';\ntype WidgetWrapperCoreProps = {\n uniqid: string;\n widgetObject?: Partial<jCommentList>;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n context: WidgetContext;\n onWidgetUpdate?: () => void;\n cannotDisplayComponent?: (widget: string) => ReactNode;\n dataCy?: string;\n};\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widgetObject,\n widget,\n inplace = true,\n mode,\n width,\n context,\n onWidgetUpdate,\n cannotDisplayComponent,\n dataCy,\n}: WidgetWrapperCoreProps) => {\n const dispatch = useAppDispatch();\n const widgetWrapper = useAppSelector((state) => Widget.selectors.selectWidget(state, uniqid));\n const indexOrder = useAppSelector((state) => state.widgets.editableMap[uniqid], shallowEqual);\n const currentEditableWidgetId = useAppSelector((state) => state.widgets.currentEditableWidgetId, shallowEqual);\n const isActive = useAppSelector((state) => state.widgets.currentEditableWidgetId === uniqid, shallowEqual);\n const { isComponentVisible, setIsComponentVisible } = useComponentVisible(false);\n\n useEffect(() => {\n if (widgetObject) {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid, object: widgetObject }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (widget) {\n /*\n Register widget\n */\n dispatch(Widget.slice.actions.registerWidget({ uniqid, widget, context }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!isComponentVisible) {\n if (uniqid === currentEditableWidgetId) {\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid: undefined }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isComponentVisible]);\n\n useEffect(() => {\n if (isComponentVisible !== isActive) {\n setIsComponentVisible(isActive);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n const registerEditor = useCallback(() => {\n if (widgetWrapper === undefined || mode === 'view') {\n return;\n }\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n /*\n Register editor\n */\n const { widget } = widgetWrapper;\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }, [dispatch, mode, widgetWrapper]);\n\n if (widgetWrapper === undefined) {\n return <>This widget cannot be displayed</>;\n }\n\n if (inplace && mode !== 'view') {\n return (\n <WidgetStyleWrapper\n uniqid={uniqid}\n onClick={() => {\n setIsComponentVisible(true);\n if (indexOrder) {\n dispatch(Widget.slice.actions.setEditableIndex({ index: indexOrder.index }));\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid }));\n }\n }}>\n <DisplayWidget\n dataCy={dataCy}\n width={width}\n widget={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\n inplace={inplace}\n mode={mode}\n levelFallback={(level, url) => {\n return (\n level <= 2 && (\n <JRCWidgetIconWrapper\n uniqid={widget.widget.uniqid}\n name={widget.widget.name}\n level={level}\n url={url}\n />\n )\n );\n }}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </WidgetStyleWrapper>\n );\n }\n\n return (\n <WidgetStyleWrapper uniqid={uniqid} onClick={registerEditor}>\n <DisplayWidget\n dataCy={dataCy}\n widget={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\n inplace={inplace}\n mode={mode}\n width={width}\n onWidgetUpdate={onWidgetUpdate}\n cannotDisplayComponent={cannotDisplayComponent}\n levelFallback={(level, url) => {\n return (\n level <= 2 && (\n <JRCWidgetIconWrapper\n uniqid={widget.widget.uniqid}\n name={widget.widget.name}\n level={level}\n url={url}\n />\n )\n );\n }}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n {mode === 'edit' && <WidgetWrapperCoreEditHover uniqid={uniqid} name={widget.widget.name} />}\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </WidgetStyleWrapper>\n );\n};\n\nexport default WidgetWrapperCore;\n","import styled from 'styled-components';\nexport const CSSCommentsBlocWidgetWrapper = styled.div`\n border-radius: ${(props) => props.theme.space.sm}px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n background-color: ${(props) => props.theme.color.white};\n overflow: hidden;\n`;\n","import { Widget } from 'jamespot-front-business';\nimport { WidgetWrapperProps } from 'jamespot-user-api';\n\nimport { useIntl } from 'react-intl';\nimport { shallowEqual } from 'react-redux';\nimport { useAppSelector } from '../../redux/store';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\nimport { CSSCommentsBlocWidgetWrapper } from './CommentsBloc.styles';\n\nconst JRCMessage = commonComponentsRegistry.getLazyComponent('Message');\n\nexport const CommentsBlocAddCommentWidgetsWrapper = ({ widgets }: { widgets: WidgetWrapperProps[] }) => {\n const intl = useIntl();\n const flushedWidgets = useAppSelector(Widget.selectors.selectFlushedWidgets, shallowEqual);\n\n return (\n <>\n {widgets\n .filter((el) => !flushedWidgets.includes(el.widget.uniqid))\n .map(\n (widget) =>\n widget &&\n widget.widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widget={widget}\n inplace\n mode={'edit'}\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage({ id: 'WIDGET_Cannot_Display' }, { widget })}\n />\n )}\n context={'comment'}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { jCommentList, WidgetDisplayMode, WidgetWrapperProps } from 'jamespot-user-api';\n\nimport { useIntl } from 'react-intl';\nimport { shallowEqual } from 'react-redux';\nimport { useAppSelector } from '../../redux/store';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\nimport { CSSCommentsBlocWidgetWrapper } from './CommentsBloc.styles';\n\nconst JRCMessage = commonComponentsRegistry.getLazyComponent('Message');\n\nexport const CommentsBlocCommentWidgetsWrapper = (props: {\n comment: jCommentList;\n widgets: WidgetWrapperProps[];\n mode: WidgetDisplayMode;\n inplace: boolean;\n handleWidgetUpdate: () => void;\n handleWidgetRemove: () => void;\n}) => {\n const intl = useIntl();\n const { widgets, comment, inplace, mode, handleWidgetUpdate } = props;\n const flushedWidgets = useAppSelector(Widget.selectors.selectFlushedWidgets, shallowEqual);\n\n return (\n <>\n {widgets\n .filter((el) => !flushedWidgets.includes(el.widget.uniqid))\n .map(\n (widget) =>\n widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widgetObject={comment}\n widget={widget}\n inplace={inplace}\n mode={mode}\n onWidgetUpdate={handleWidgetUpdate}\n cannotDisplayComponent={(widget) => {\n return (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage(\n { id: 'WIDGET_Cannot_Display' },\n { widget },\n )}\n />\n );\n }}\n context={'comment'}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n );\n};\n","import { useMemo, useState } from 'react';\r\nimport { Editor, JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\r\n\r\nexport const useGifsModal = (): {\r\n open: boolean;\r\n onSelect: (v: string) => void;\r\n close: () => void;\r\n ext: ReturnType<typeof JTinyMCEExtensionsBuilders.gifs>;\r\n isActive?: boolean;\r\n} => {\r\n const [open, setOpen] = useState(false);\r\n const [editor, setEditor] = useState<Editor>();\r\n const ext = useMemo(\r\n () =>\r\n JTinyMCEExtensionsBuilders.gifs(\r\n (ed) => setEditor(ed),\r\n () => setOpen(true),\r\n ),\r\n [],\r\n );\r\n return {\r\n open,\r\n onSelect: (v: string) => {\r\n editor?.execCommand('InsertHTML', false, `<img src=\"${v}\" alt=\"\" />`);\r\n setOpen(false);\r\n },\r\n close: () => setOpen(false),\r\n ext,\r\n isActive: true,\r\n };\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\r\nimport jApi, { Gif } from 'jamespot-user-api';\r\nimport { useAppDispatch } from '../../../redux/store';\r\nimport { Toast } from 'jamespot-front-business';\r\nimport { useAbortController } from '../../../hooks';\r\n\r\nconst GifsSelector = commonComponentsRegistry.getLazyComponent('GifsSelector');\r\nconst Modal = commonComponentsRegistry.getLazyComponent('Modal');\r\n\r\nexport type GifsModalProps = {\r\n onSelect: (url: string) => void;\r\n open: boolean;\r\n close: () => void;\r\n};\r\n\r\nconst nbItemsPerPage = 10;\r\n\r\nexport const GifsModal = ({ onSelect, open, close }: GifsModalProps) => {\r\n const dispatch = useAppDispatch();\r\n const abortController = useAbortController();\r\n const [loading, setLoading] = useState(false);\r\n const [gifs, setGifs] = useState<Gif[]>([]);\r\n const [query, setQuery] = useState<{ q?: string; offset: number }>({ q: undefined, offset: 0 });\r\n\r\n const doClose = useCallback(() => {\r\n close();\r\n setQuery({ q: undefined, offset: 0 });\r\n }, [close]);\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n jApi.jamespot\r\n .getGifs(\r\n { q: query.q || 'awesome', limit: nbItemsPerPage, offset: query.offset },\r\n { signal: abortController.signal },\r\n )\r\n .then((res) => {\r\n setGifs(query.offset === 0 ? res.result : (prev) => [...prev, ...res.result]);\r\n })\r\n .catch((e) => {\r\n if (!e.aborted) {\r\n dispatch(Toast.actions.error({ label: e.errorMsg ?? 'GLOBAL_Error' }));\r\n }\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n }, [abortController, dispatch, query]);\r\n\r\n return (\r\n <Modal\r\n title={'Gif'}\r\n open={open}\r\n closeHandler={doClose}\r\n enableClickAwayCloseModal\r\n variant={'fixed-height'}\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: doClose,\r\n },\r\n ]}>\r\n <GifsSelector\r\n gifs={gifs}\r\n onSelectGif={onSelect}\r\n loading={loading}\r\n onSearch={(q) => setQuery({ q, offset: 0 })}\r\n onReachEnd={() => {\r\n setQuery((prev) => ({ ...prev, offset: prev.offset + nbItemsPerPage }));\r\n }}\r\n />\r\n </Modal>\r\n );\r\n};\r\n","import {\n Application,\n Comment,\n Hook,\n Model,\n Platform,\n TinyMCE,\n Toast,\n UserCurrent,\n Widget,\n} from 'jamespot-front-business';\nimport { DriveOrFilebank } from 'jamespot-react-components';\nimport jApi, { AddCommentParams, jCommentList, UpdateCommentParams, WidgetWrapperProps } from 'jamespot-user-api';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled, { useTheme } from 'styled-components';\nimport useCommentRT from '../hooks/useCommentRT';\nimport useCommentsLikeRT from '../hooks/useCommentsLikeRT';\n\nimport { WidgetList } from './widgets/WidgetList/WidgetList';\n\nimport { useMarkdownModal } from '../hooks/useMarkdownModal';\nimport { useAppDispatch, useAppSelector } from '../redux/store';\nimport { commonComponentsRegistry } from '../registry/CommonRegistry';\nimport { getTinyMCEMentionsQueries } from '../utils/tinymce';\nimport { AddReportModal, AddReportModalProps } from './comments/AddReportModal';\nimport { CommentsBlocAddCommentWidgetsWrapper } from './comments/CommentsBlocAddCommentWidgetsWrapper';\nimport { CommentsBlocCommentWidgetsWrapper } from './comments/CommentsBlocCommentWidgetsWrapper';\nimport { MarkdownModal } from './tinymce/extension/MarkdownModal';\nimport { useGifsModal } from '../hooks/useGifsModal';\nimport { GifsModal } from './tinymce/extension/GifsModal';\n\nconst JRCCommentsBloc = commonComponentsRegistry.getLazyComponent('JRCCommentsBloc');\n\nexport type CommentsBlocProps = {\n articleId: number;\n articleUri: string;\n variant?: 'modal' | 'inline';\n canComment: boolean;\n commentType?: 'comment' | 'commentResponse';\n socialQuestion?: {\n isResolved: boolean;\n responseId?: number;\n canSelectResponse: boolean;\n };\n};\n\nconst CommentsBlocWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n width: 100%;\n margin-top: 10px;\n`;\n\nexport const CommentsBloc = ({\n articleId,\n variant = 'inline',\n canComment,\n commentType = 'comment',\n socialQuestion,\n articleUri,\n}: CommentsBlocProps) => {\n const intl = useIntl();\n const theme = useTheme();\n const dispatch = useAppDispatch();\n\n const [token, setToken] = useState<string>();\n const [loading, setLoading] = useState(false);\n const [widgets, setWidgets] = useState<WidgetWrapperProps[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const currentUser = useAppSelector(UserCurrent.selectors.get);\n const widgetIds = useAppSelector(Widget.selectors.selectWidgets);\n const tinyMCECommonOptions = useAppSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const tinyMCEExtendedOptions = useAppSelector(TinyMCE.selectors.selectTinyMCEExtendedOptions);\n const models = useAppSelector(Model.selectors.selectAll);\n const platformConfig = useAppSelector(Platform.selectors.selectPlatformConfig);\n const commentsList = useAppSelector((state) => Comment.selectors.commentList(state, articleId));\n const driveHook = useAppSelector((state) => Hook.selectors.selectHook(state, 'DriveHook'));\n const fileBank = useAppSelector((state) => Application.selectors.selectById(state, 'FileBankHook'));\n const widgetHook = useAppSelector((state) => Hook.selectors.selectHook(state, 'WidgetHook'));\n const [socialQuestionOptions, setSocialQuestionOptions] = useState(socialQuestion);\n const [reportProps, setReportProps] = useState<Omit<AddReportModalProps, 'onClose'> | null>(null);\n const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n const {\n open: gifsModalOpen,\n close: closeGifsModal,\n onSelect: onSelectGif,\n ext: extGifs,\n isActive: isGifsActive,\n } = useGifsModal();\n\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList.map((c) => c.id),\n articleId,\n );\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onCommentUpdate = async (args: UpdateCommentParams) => {\n const commentToUpdate: jCommentList | undefined = commentsList.find((item) => item.id === args.idComment);\n if (!commentToUpdate) return;\n return jApi.article\n .updateComment({\n idComment: args.idComment,\n description: args.description ?? commentToUpdate.description ?? undefined,\n token: args.token,\n widgets: args.widgets,\n })\n .then(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n\n const onCommentDelete = async (idComment: number) => {\n dispatch(Comment.actions.deleteComment({ idComment, idArticle: articleId }));\n };\n\n const onWidgetUpdate = () => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n };\n\n const fetchToken = useCallback(() => {\n if (!token && !tokenLoading) {\n setTokenLoading(true);\n jApi.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n\n // set comment token to our widget slice to be able to upload image inside our widgets\n dispatch(Widget.slice.actions.setToken({ token: res.result }));\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading, dispatch]);\n\n const onComment = useCallback(\n async (params: Pick<AddCommentParams, 'content' | 'alertAuthor' | 'sendAlert'>) => {\n if (token) {\n setLoading(true);\n const finalWidget: WidgetWrapperProps[] = Object.keys(widgetIds)\n .map((id) => {\n if (widgets?.some((w) => w.widget.uniqid === id)) {\n return widgetIds[id];\n }\n return null;\n })\n .filter((w): w is WidgetWrapperProps => w !== null);\n\n try {\n // TODO : passer par le store pour avoir une réactivité directe après ajout (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n await jApi.article\n .addComment({\n ...params,\n widgets: finalWidget,\n token,\n idArticle: articleId,\n type: commentType,\n })\n .then(() => {\n setWidgets([]);\n });\n fetchToken();\n } catch (e: any) {\n onError(e.errorMsg);\n throw e;\n } finally {\n setLoading(false);\n }\n }\n },\n [articleId, commentType, fetchToken, onError, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n }, [articleId, dispatch]);\n\n useEffect(() => {\n if (!commentsList) {\n return;\n }\n commentsList.forEach((comment) => {\n comment._widgets?.forEach((widget) => {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid: widget.widget.uniqid, object: comment }));\n dispatch(\n Widget.slice.actions.registerWidgetObjectRights({\n uniqid: widget.widget.uniqid,\n rights: comment._right,\n }),\n );\n });\n });\n }, [commentsList, dispatch]);\n\n return (\n <>\n {tinyMCECommonOptions && tinyMCEExtendedOptions && (\n <>\n <CommentsBlocWrapper>\n <JRCCommentsBloc\n canComment={canComment}\n loading={loading}\n token={token}\n comments={commentsList}\n onComment={onComment}\n onCommentUpdate={onCommentUpdate}\n onCommentDelete={onCommentDelete}\n isWidgetActive={!!(widgetHook?.isActive && widgetHook?.autorize?.includes('comment'))}\n canCreateWidget={\n !!(\n widgetHook?.isActive &&\n widgetHook?.create &&\n widgetHook?.autorize?.includes('comment')\n )\n }\n widgetListComponent={\n <WidgetList\n mode={'comment'}\n namespace={'comment'}\n onChange={(widget) => {\n setWidgets([widget]); // COMMENT DO NOT SUPPORT MULTI WIDGET\n dispatch(\n Widget.slice.actions.registerWidget({\n uniqid: widget.widget.uniqid,\n widget: widget,\n context: 'comment',\n }),\n );\n setToken(undefined);\n fetchToken();\n }}\n view={'edit'}\n />\n }\n newWidgetsWrapperComponent={<CommentsBlocAddCommentWidgetsWrapper widgets={widgets} />}\n existingWidgetsWrapperComponent={(comment, widgets, mode, inplace = true) => (\n <CommentsBlocCommentWidgetsWrapper\n comment={comment}\n widgets={widgets}\n mode={mode}\n inplace={inplace}\n handleWidgetUpdate={onWidgetUpdate}\n handleWidgetRemove={fetchToken}\n />\n )}\n currentUser={currentUser}\n tinyMCEConfig={{\n commonOptions: {\n ...tinyMCECommonOptions,\n toolbar: tinyMCEExtendedOptions.commentsToolbar,\n },\n mentionsQueries: getTinyMCEMentionsQueries(models, theme, onError),\n }}\n onError={onError}\n highlightFields={platformConfig.userHighlightFields}\n userAccountStatus={platformConfig.userAccountStatus}\n userModel={models.find((m) => m.type === 'user')}\n onGetHashError={(message?: string) =>\n dispatch(\n Toast.actions.error({\n label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n )\n }\n activeDrives={\n [\n ...(fileBank && driveHook ? ['fileBank'] : []),\n ...Hook.utils.buildDrivesArrayFromObject(driveHook?.drives),\n ] as DriveOrFilebank[]\n }\n variant={variant}\n handlers={{\n drive: jApi.drive,\n filebank: jApi.filebank,\n file: jApi.file,\n fileIntegrity: jApi.fileIntegrity,\n user: jApi.user,\n global: jApi.global,\n questionAnswer: jApi.questionAnswer,\n }}\n socialQuestion={\n socialQuestionOptions\n ? {\n ...socialQuestionOptions,\n onSelectResponse: (responseId: number) => {\n setSocialQuestionOptions({\n ...socialQuestionOptions,\n responseId,\n isResolved: true,\n });\n },\n onUnselectResponse: () => {\n setSocialQuestionOptions({\n ...socialQuestionOptions,\n responseId: undefined,\n isResolved: false,\n });\n },\n }\n : undefined\n }\n articleId={articleId}\n additionalExtensions={[extMarkdown, extGifs]}\n onReport={(commentUri) => setReportProps({ articleId, commentUri, articleUri })}\n />\n </CommentsBlocWrapper>\n </>\n )}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\n {reportProps && <AddReportModal onClose={() => setReportProps(null)} {...reportProps} />}\n {isGifsActive && <GifsModal open={gifsModalOpen} close={closeGifsModal} onSelect={onSelectGif} />}\n </>\n );\n};\n","import { Application } from 'jamespot-front-business';\n\nimport { useIntl } from 'react-intl';\nimport styled, { useTheme } from 'styled-components';\n\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { useAppSelector } from '../../redux/store';\n\nconst AppsDropdownItem = styled.li`\n list-style: none;\n`;\n\nconst AppsDropdownItemLink = styled.a`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.space.sm}px;\n text-decoration: none;\n color: ${({ theme }) => theme.font.color};\n padding: ${({ theme }) => theme.space.sm}px ${({ theme }) => theme.space.md}px ${({ theme }) => theme.space.sm}px\n ${({ theme }) => theme.space.xs}px;\n border-radius: ${({ theme }) => theme.size.sm}px;\n\n &:hover {\n text-decoration: none;\n background-color: ${({ theme }) => theme.color.grey1};\n color: ${({ theme }) => theme.font.color};\n }\n`;\n\nconst Icon = commonComponentsRegistry.getLazyComponent('Icon');\nconst FlexBox = commonComponentsRegistry.getLazyComponent('FlexBox');\nconst Typography = commonComponentsRegistry.getLazyComponent('Typography');\nconst DropDown = commonComponentsRegistry.getLazyComponent('DropDown');\n\nexport const CalendarHeader = () => {\n const theme = useTheme();\n const intl = useIntl();\n const animatedMeeting = useAppSelector((state) => Application.selectors.selectById(state, 'AnimatedMeetingHook'));\n const calendarApp = useAppSelector((state) => Application.selectors.selectById(state, 'calendar'));\n const surveyDate = useAppSelector((state) => Application.selectors.selectById(state, 'SurveyDateHook'));\n\n if (!calendarApp) {\n return null;\n }\n\n return (\n <FlexBox y={'center'}>\n <Icon name={'icon-' + calendarApp.icon} variant=\"circle\" color={calendarApp.color} size={40} />\n <Typography variant=\"h1\" size=\"xl\" weight=\"medium\">\n {calendarApp.label}\n </Typography>\n {(surveyDate || animatedMeeting) && (\n <>\n <Typography size=\"xl\" color={'grey4'}>\n /\n </Typography>\n <DropDown\n withBorder\n borderColor={'grey3'}\n trigger={\n <FlexBox y={'center'} gap={theme.space.xs}>\n <Typography size=\"xl\" color={'grey4'}>\n {intl.formatMessage({ id: 'CALENDAR_Agenda' })}\n </Typography>\n <Icon name={'icon-chevron-down'} color={'grey4'} size={16} />\n </FlexBox>\n }\n dropdown={() => (\n <FlexBox direction={'column'} gap={theme.space.sm} as={'ul'}>\n {surveyDate && (\n <AppsDropdownItem>\n <AppsDropdownItemLink href={surveyDate.url}>\n <Icon\n name={'icon-' + surveyDate.icon}\n size={25}\n variant={'circle'}\n color={surveyDate.color}\n />\n <Typography size=\"l\">{surveyDate.label}</Typography>\n </AppsDropdownItemLink>\n </AppsDropdownItem>\n )}\n {animatedMeeting && (\n <AppsDropdownItem>\n <AppsDropdownItemLink href={animatedMeeting.url}>\n <Icon\n name={'icon-' + animatedMeeting.icon}\n size={25}\n variant={'circle'}\n color={animatedMeeting.color}\n />\n <Typography size=\"l\">{animatedMeeting.label}</Typography>\n </AppsDropdownItemLink>\n </AppsDropdownItem>\n )}\n </FlexBox>\n )}\n />\n </>\n )}\n </FlexBox>\n );\n};\n","import { Application, Calendar, Hook } from 'jamespot-front-business';\nimport { CalendarApi, CalendarView } from 'jamespot-react-components';\nimport { Fragment, useMemo } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst Typography = commonComponentsRegistry.getLazyComponent('Typography');\nconst FlexBox = commonComponentsRegistry.getLazyComponent('FlexBox');\nconst ButtonDropdown = commonComponentsRegistry.getLazyComponent('ButtonDropdown');\nconst Dropdown = commonComponentsRegistry.getLazyComponent('DropDown');\nconst IconButton = commonComponentsRegistry.getLazyComponent('IconButton');\nconst InputSelectRaw = commonComponentsRegistry.getLazyComponent('InputSelectRaw');\nconst InputCheckboxRaw = commonComponentsRegistry.getLazyComponent('InputCheckboxRaw');\nconst StyledHref = commonComponentsRegistry.getLazyComponent('StyledHref');\n\nconst Label = styled(Typography)`\n text-transform: capitalize;\n margin-right: ${({ theme }) => theme.space.md}px;\n`;\n\nconst InputWrapper = styled.div`\n max-width: 200px;\n display: flex;\n align-items: center;\n`;\n\nconst DropdownContainer = styled.div`\n padding: 0 ${({ theme }) => theme.space.md}px;\n`;\n\ntype Filter = ('socialEvent' | 'meeting' | 'animatedMeeting' | 'boardCard')[];\ntype OptionView = {\n label: string;\n value: CalendarView;\n};\n\nexport const CalendarToolbar = ({\n label,\n view,\n viewsOptions,\n calendarApi,\n isLoading,\n navigateWithQuery,\n setView,\n setCreationType,\n setExportModalOpen,\n}: {\n label?: string;\n view: OptionView;\n viewsOptions: { label: string; value: CalendarView }[];\n calendarApi?: CalendarApi;\n isLoading: boolean;\n navigateWithQuery: (queries: { types?: Filter; view?: CalendarView }) => void;\n setView: (view: any) => void;\n setCreationType: (type: 'socialEvent' | 'meeting' | 'animatedMeeting' | null) => void;\n setExportModalOpen: (value: boolean) => void;\n}) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const { types } = useAppSelector(Calendar.selectors.selectCalendarEvents);\n const animatedMeeting = useAppSelector((state) => Application.selectors.selectById(state, 'AnimatedMeetingHook'));\n const animatedMeetingHook = useAppSelector((state) => Hook.selectors.selectHook(state, 'AnimatedMeetingHook'));\n const meeting = useAppSelector((state) => Application.selectors.selectById(state, 'MeetingHook'));\n const boardCard = useAppSelector((state) => Application.selectors.selectById(state, 'BoardcardHook'));\n\n const createCalendarEventOptions = useMemo(\n () => [\n {\n label: intl.formatMessage({ id: 'CALENDAR_Create_SocialEvent' }),\n onClick: () => {\n setCreationType('socialEvent');\n },\n },\n ...(meeting\n ? [\n {\n label: intl.formatMessage({ id: 'CALENDAR_Create_Meeting' }),\n onClick: () => {\n setCreationType('meeting');\n },\n },\n ]\n : []),\n ...(animatedMeeting && animatedMeetingHook?.create\n ? [\n {\n label: intl.formatMessage({ id: 'CALENDAR_Create_AnimatedMeeting' }),\n href: '/?action=spotlight-edit&type=animatedMeeting',\n },\n ]\n : []),\n ],\n [animatedMeeting, animatedMeetingHook?.create, intl, meeting, setCreationType],\n );\n const viewOptionEntries = useMemo(\n () => [\n {\n label: <FormattedMessage id=\"CALENDAR_SocialEvents\" />,\n value: 'socialEvent',\n },\n ...(meeting\n ? [\n {\n label: <FormattedMessage id=\"CALENDAR_Meetings\" />,\n value: 'meeting',\n },\n ]\n : []),\n ...(animatedMeeting\n ? [\n {\n label: <FormattedMessage id=\"CALENDAR_AnimatedMeetings\" />,\n value: 'animatedMeeting',\n },\n ]\n : []),\n ...(boardCard\n ? [\n {\n label: <FormattedMessage id=\"CALENDAR_BoardCards\" />,\n value: 'boardCard',\n },\n ]\n : []),\n ],\n [animatedMeeting, boardCard, meeting],\n );\n\n return (\n <FlexBox y={'center'}>\n {view.value !== 'list' && (\n <Fragment>\n <Label size={'l'} weight={'medium'}>\n {label}\n </Label>\n <FlexBox>\n <IconButton icon={'icon-chevron-left'} onClick={() => calendarApi?.prev()} color={'grey5'} />\n <IconButton icon={'icon-chevron-right'} onClick={() => calendarApi?.next()} color={'grey5'} />\n </FlexBox>\n <IconButton\n icon={'icon-calendar'}\n onClick={() => calendarApi?.today()}\n tooltip={{ description: 'CALENDAR_Today', position: 'bottom' }}\n color={'grey5'}\n />\n </Fragment>\n )}\n <InputWrapper>\n <InputSelectRaw<{ selectView: OptionView }>\n onChange={setView}\n value={view}\n name={'selectView'}\n options={viewsOptions}\n getLabel={(option) => option.label}\n getValue={(option) => option.value}\n required\n minWidth={false}\n loading={isLoading}\n noMargin\n />\n </InputWrapper>\n <ButtonDropdown\n noMargin\n color={'primary'}\n icon={'icon-plus'}\n label={intl.formatMessage({ id: 'GLOBAL_Add' })}\n options={createCalendarEventOptions}\n dataCy={'calendar-create-dropdown'}\n />\n <Dropdown\n trigger={\n <IconButton\n aria-label={intl.formatMessage({ id: 'GLOBAL_Filter' })}\n colorVariant={'light'}\n icon={'icon-filter'}\n badgeNumber={types.length}\n />\n }\n dropdown={() => (\n <DropdownContainer>\n <FlexBox direction={'column'}>\n <Typography weight={'medium'} color={'primary'}>\n {intl.formatMessage({ id: 'GLOBAL_Filter' })}\n </Typography>\n <InputCheckboxRaw<Filter>\n labelPosition={'before'}\n checkboxMode={'checkbox'}\n direction={'column'}\n onChange={(f: Filter) => {\n dispatch(Calendar.actions.setTypes(f));\n navigateWithQuery({ types: f });\n }}\n options={viewOptionEntries}\n value={types}\n name={'0'}\n />\n <StyledHref\n onClick={() => {\n dispatch(Calendar.actions.setTypes([]));\n navigateWithQuery({ types: [] });\n }}\n as={'button'}\n color={'cancel'}\n disabled={types.length === 0}>\n {intl.formatMessage({ id: 'GLOBAL_Reset' })}\n </StyledHref>\n </FlexBox>\n </DropdownContainer>\n )}\n withBorder\n align={'right'}\n />\n <ButtonDropdown\n noMargin\n small\n smallOpenDirection={'left'}\n color={'primary'}\n variant={'outlined'}\n icon={'icon-ellipsis-v'}\n label={intl.formatMessage({ id: 'GLOBAL_Options' })}\n options={[\n {\n label: intl.formatMessage({ id: 'EVENT_Export_Calendar_ICalendar_Format' }),\n onClick: () => setExportModalOpen(true),\n },\n ]}\n />\n </FlexBox>\n );\n};\n","import { Calendar as CalendarSlice, Hook, Toast } from 'jamespot-front-business';\nimport { CalendarApi, CalendarEvent, CalendarView, JRCCalendarProps, Utils } from 'jamespot-react-components';\nimport jApi from 'jamespot-user-api';\nimport { Fragment, ReactNode, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { CommentsBloc } from '../../components/CommentsBloc';\nimport useCalendarRT from '../../hooks/useCalendarRT';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { CalendarHeader } from './CalendarHeader';\nimport { CalendarToolbar } from './CalendarToolbar';\n\ntype Filter = ('socialEvent' | 'meeting' | 'animatedMeeting' | 'boardCard')[];\n\nconst Calendar = commonComponentsRegistry.getLazyComponent('Calendar');\n\nconst CommentsContainer = styled.div`\n margin-bottom: ${({ theme }) => theme.space.md}px;\n`;\n\nconst Header = styled.div<{ view: CalendarView }>`\n height: 54px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n ${({ view, theme }) => view === 'list' && `border-bottom: 1px solid ${theme.color.grey2};`}\n padding: 0 ${({ theme }) => theme.space.md}px;\n`;\n\nconst options: { label: string; value: CalendarView }[] = [\n {\n label: 'CALENDAR_dayGridMonth',\n value: 'dayGridMonth',\n },\n {\n label: 'CALENDAR_timeGridWeek',\n value: 'timeGridWeek',\n },\n {\n label: 'CALENDAR_timeGridDay',\n value: 'timeGridDay',\n },\n {\n label: 'CALENDAR_listWeek',\n value: 'list',\n },\n];\n\nexport const CalendarWrapper = ({\n views = ['dayGridMonth', 'list', 'timeGridDay', 'timeGridWeek'],\n mode = 'full',\n withPadding = true,\n withHeader = true,\n withToolbar = true,\n fluid,\n children,\n onSelect,\n}: {\n views: Array<'dayGridMonth' | 'timeGridWeek' | 'timeGridDay' | 'list'>;\n mode?: JRCCalendarProps['mode'];\n fluid?: boolean;\n withPadding?: boolean;\n withHeader?: boolean;\n withToolbar?: boolean;\n onSelect?: (params: { start: Date; end: Date; allDay: boolean } | null) => void;\n children?({\n dates,\n eventToUpdate,\n creationType,\n isExportModalOpen,\n setCreationType,\n setEventToUpdate,\n setExportModalOpen,\n }: {\n dates?: { start: string; end: string };\n eventToUpdate?: CalendarEvent | null;\n creationType: string | null;\n isExportModalOpen: boolean;\n setEventToUpdate: React.Dispatch<React.SetStateAction<CalendarEvent | null>>;\n setCreationType: React.Dispatch<React.SetStateAction<'socialEvent' | 'meeting' | 'animatedMeeting' | null>>;\n setExportModalOpen: React.Dispatch<React.SetStateAction<boolean>>;\n }): ReactNode;\n}) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n useCalendarRT();\n const [label, setLabel] = useState<string>();\n const { dates, loading, list, pendingStatusChanges } = useAppSelector(CalendarSlice.selectors.selectCalendarEvents);\n const [calendarApi, setCalendarApi] = useState<CalendarApi>();\n const [eventToUpdate, setEventToUpdate] = useState<CalendarEvent | null>(null);\n const [isExportModalOpen, setExportModalOpen] = useState(false);\n const globalDefaultView = useAppSelector((state) => Hook.selectors.selectHook(state, 'calendarHook'))?.defaultView;\n const defaultView = useMemo(() => {\n const urlQuery = new URLSearchParams(window.location.search).get('view');\n switch (urlQuery) {\n case 'dayGridMonth':\n case 'timeGridDay':\n case 'timeGridWeek':\n case 'list':\n return urlQuery;\n default:\n return globalDefaultView === 'calendar' ? 'dayGridMonth' : 'list';\n }\n }, [globalDefaultView]);\n\n const viewsOptions = useMemo<{ label: string; value: CalendarView }[]>(\n () =>\n options\n .filter((el) => views.includes(el.value))\n .map((option) => {\n return { label: intl.formatMessage({ id: option.label }), value: option.value };\n }),\n [views, intl],\n );\n const [view, setView] = useState<(typeof viewsOptions)[number]>(\n viewsOptions.find((v) => v.value === defaultView) ?? viewsOptions[0],\n );\n\n const navigateWithQuery = useCallback(\n (queries: { types?: Filter; view?: CalendarView }) => {\n const params = new URLSearchParams(window.location.search);\n if (queries.types !== undefined) {\n if (queries.types.length > 0) {\n params.set('types', queries.types.join(','));\n } else {\n params.delete('types');\n }\n }\n if (queries.view !== undefined) {\n if (queries.view) {\n params.set('view', queries.view);\n } else {\n params.delete('view');\n }\n }\n navigate(`?${params.toString()}`, { replace: true });\n },\n [navigate],\n );\n\n const onError = useCallback(\n (err?: string) => {\n dispatch(Toast.actions.error({ label: err ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onSuccess = useCallback(\n (message: string) => {\n dispatch(Toast.actions.success({ label: message }));\n },\n [dispatch],\n );\n\n const handleChangeView = useCallback(\n (view: { label: string; value: CalendarView }) => {\n setView(view);\n navigateWithQuery({ view: view.value });\n },\n [navigateWithQuery],\n );\n\n const handleChangeDates = useCallback(\n (start: Date, end: Date) => {\n const dates = { start: Utils.date.formatDate(start), end: Utils.date.formatDate(end) };\n dispatch(CalendarSlice.actions.setDates(dates));\n },\n [dispatch],\n );\n\n const [creationType, setCreationType] = useState<'socialEvent' | 'meeting' | 'animatedMeeting' | null>(null);\n\n useEffect(() => {\n dispatch(\n CalendarSlice.actions.setTypes(\n (new URLSearchParams(window.location.search)\n .get('types')\n ?.split(',')\n .filter((type) =>\n ['socialEvent', 'meeting', 'animatedMeeting', 'boardCard'].includes(type),\n ) as Filter) ?? [],\n ),\n );\n }, [dispatch]);\n\n return (\n <Fragment>\n {children &&\n children({\n dates,\n eventToUpdate,\n creationType,\n isExportModalOpen,\n setEventToUpdate,\n setCreationType,\n setExportModalOpen,\n })}\n {(withHeader || withToolbar) && (\n <Header view={view.value}>\n {withHeader && <CalendarHeader />}\n {withToolbar && (\n <CalendarToolbar\n label={label}\n isLoading={loading === 'pending'}\n view={view}\n calendarApi={calendarApi}\n viewsOptions={viewsOptions}\n navigateWithQuery={navigateWithQuery}\n setView={setView}\n setCreationType={setCreationType}\n setExportModalOpen={setExportModalOpen}\n />\n )}\n </Header>\n )}\n <Calendar\n fluid={fluid}\n mode={mode}\n fullScreen\n withPadding={withPadding}\n events={list}\n loading={loading === 'pending'}\n handler={{\n global: jApi.global,\n calendar: jApi.calendar,\n article: jApi.article,\n }}\n defaultView={view.value}\n eventModalExtraComponent={({ id, uri, _right }) => {\n return (\n <CommentsContainer>\n <CommentsBloc articleId={id} articleUri={uri} canComment={_right.comment} />\n </CommentsContainer>\n );\n }}\n deportedToolbar={{\n onChangeLabel: setLabel,\n onCalendarApiInit: setCalendarApi,\n view,\n }}\n onChangeDates={handleChangeDates}\n onError={onError}\n onSuccess={onSuccess}\n onChangeView={handleChangeView}\n onDeleteEvent={() => {\n dispatch(\n Toast.actions.success({ label: intl.formatMessage({ id: 'GLOBAL_Successfully_Deleted' }) }),\n );\n }}\n onClickUpdateEvent={setEventToUpdate}\n onUpdateStatus={(params) => dispatch(CalendarSlice.actions.changeResponse(params))}\n isUpdateStatusLoading={(id) => pendingStatusChanges.some((psc) => psc.eventId === id)}\n onSelect={onSelect}\n />\n </Fragment>\n );\n};\n","import { useEffect, useMemo } from 'react';\nimport { Calendar } from 'jamespot-front-business';\nimport socket from '../utils/socket';\nimport { useAppDispatch } from '../redux/store';\nimport jApi from 'jamespot-user-api';\n\nconst useCalendarRT = () => {\n const dispatch = useAppDispatch();\n const reactSocket = useMemo(() => socket, []);\n const rtHandlers = useMemo(() => Calendar.getCalendarRTHandlers(dispatch, jApi), [dispatch]);\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n reactSocket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n reactSocket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, reactSocket]);\n};\n\nexport default useCalendarRT;\n","import styled from 'styled-components';\nimport { EDITOR_MENU_WIDTH, EDITOR_WIDTH } from './const';\nimport { DashedFocusBorder } from 'jamespot-react-components';\n\nconst INPUT_HEIGHT = 50;\nconst RADIUS = 8;\n\nexport const CSSEditorComponentWrapper = styled.div`\n margin-bottom: 24px;\n`;\n\nexport const CSSEditorComponentLabel = styled.div`\n margin-bottom: 4px;\n`;\n\nexport const CSSEditorPortal = styled.div<{ isActive: boolean }>`\n position: absolute;\n background-color: ${(props) => (props.isActive ? 'rgba(0,0,0,.1)' : 'transparent')};\n inset: 0;\n pointer-events: ${(props) => (props.isActive ? 'all' : 'none')};\n flex: 1;\n display: flex;\n overflow: hidden;\n`;\n\nexport const CSSEditorHeader = styled.div`\n flex-direction: row;\n display: flex;\n min-height: 60px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const CSSEditorAction = styled.div`\n width: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditorLabel = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\n// This is a mask to hide top shadow. EDITOR_WIDTH + 20 is used to keep the left shadow\nexport const CSSEditorMask = styled.div`\n position: relative;\n overflow: hidden;\n top: 0px;\n width: ${EDITOR_WIDTH + 20}px;\n`;\n\nexport const CSSEditor = styled.div<{ position: 'left' | 'right' }>`\n position: absolute;\n top: 0;\n ${(props) => (props.position === 'left' ? 'left: 0px;' : '')}\n ${(props) => (props.position === 'right' ? 'right: -1000px;' : '')}\n width: ${EDITOR_WIDTH}px;\n bottom: 00px;\n display: flex;\n background-color: ${(props) => props.theme.color.white};\n flex-direction: row;\n transition: all 0.4s;\n box-shadow: -4px 0px 20px 0px #00000017;\n\n &.animate {\n right: 0px;\n }\n`;\n\nexport const CSSEditorContent = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: 12px;\n overflow: auto;\n margin-bottom: 12px;\n position: relative;\n`;\n\nexport const CSSEditorTab = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n\nexport const CSSEditorIsBusy = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditorIsLocked = styled.div`\n position: absolute;\n inset: 0;\n background-color: ${(props) => props.theme.color.white};\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const CSSEditorMenu = styled.div`\n width: ${EDITOR_MENU_WIDTH}px;\n padding-top: 60px;\n display: flex;\n flex-direction: column;\n border-right: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const CSSEditorMenuButton = styled.button<{ isActive?: boolean }>`\n border-radius: 4px;\n cursor: pointer;\n height: 42px;\n margin: 4px;\n width: 42px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${(props) => (props.isActive ? props.theme.color.grey2 : props.theme.color.white)};\n\n ${DashedFocusBorder()}\n\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n }\n`;\n\nexport const CSSInputWrapper = styled.div`\n display: flex;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-radius: ${RADIUS}px;\n margin-bottom: 24px;\n input {\n width: 100%;\n border: 0;\n height: ${INPUT_HEIGHT}px;\n margin: 0;\n }\n`;\n\nexport const CSSEditorWidget = styled.div`\n display: flex;\n flex-direction: row;\n padding: 12px;\n background-color: ${(props) => props.theme.color.grey0};\n border-radius: 8px;\n margin-bottom: 4px;\n`;\n\nexport const CSSEditorWidgetLabel = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n`;\n\nexport const CSSEditorWidgetOption = styled.div`\n width: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const CSSEditorLayer = styled.div`\n flex-direction: row;\n display: flex;\n align-items: center;\n`;\n\nexport const CSSEditorLayerTitle = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n`;\n","export const EDITOR_TOP = 90;\nexport const EDITOR_WIDTH = 440;\nexport const EDITOR_MENU_WIDTH = 50;\nexport const EDITOR_CONTENT_WIDTH = EDITOR_WIDTH - EDITOR_MENU_WIDTH;\n","import { CSSEditorAction, CSSEditorHeader, CSSEditorLabel, CSSEditorMenuButton } from './style';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCIcon = commonComponentsRegistry.getLazyComponent('Icon');\n\n/*\n Editor popup (center part)\n*/\nexport const EditorPopup = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useAppDispatch();\n const editor = useAppSelector((state) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const onClick = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n const onSave = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n if (editor && editor.popup && editor.view) {\n return (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', backgroundColor: 'white', marginTop: 90 }}>\n <CSSEditorHeader>\n <CSSEditorAction />\n <CSSEditorLabel>Popup</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" size={26.75} />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <div style={{ flex: 1, display: 'flex' }}>{editor.view}</div>\n <CSSEditorHeader>\n <JRCButton onClick={onSave}>Save</JRCButton>\n </CSSEditorHeader>\n </div>\n );\n }\n\n return <></>;\n};\n","import { Hook, Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { Utils } from 'jamespot-react-components';\nimport jamespot, {\n CombinedWidgetContent,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCalendarCalDavType,\n ensureWidgetCheckListType,\n ensureWidgetContactCardDavType,\n ensureWidgetDatasourceTableType,\n ensureWidgetEmailsImapType,\n ensureWidgetExcelDatasourceTableType,\n ensureWidgetExtensionType,\n ensureWidgetLuccaAbsenceType,\n ensureWidgetPresenceType,\n ensureWidgetQuickSurveyType,\n ensureWidgetUserProfileType,\n ensureWidgetWelcomeType,\n // hygen: inject:here ensure\n HookListType,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetCheckListContent,\n WidgetDatasourceTableContent,\n WidgetExtensionContent,\n WidgetPresenceContent,\n WidgetQuickSurveyContent,\n WidgetWelcomeContent,\n // hygen: inject:here content\n WidgetStateProps,\n WidgetUserProfileContent,\n} from 'jamespot-user-api';\nimport { ReactElement } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { store } from '../../redux/initStore';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst WidgetArticleTitleEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleTitleEditor');\nconst WidgetArticleTextEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleTextEditor');\nconst WidgetArticleGalleryEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleGalleryEditor');\nconst WidgetArticleAttachmentEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleAttachmentEditor');\nconst WidgetArticleSliderEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleSliderEditor');\nconst WidgetArticleImageEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleImageEditor');\nconst WidgetButtonEditor = commonComponentsRegistry.getLazyComponent('WidgetButtonEditor');\nconst WidgetCheckListEditor = commonComponentsRegistry.getLazyComponent('WidgetCheckListEditor');\nconst WidgetQuickSurveyEditor = commonComponentsRegistry.getLazyComponent('WidgetQuickSurveyEditor');\nconst WidgetDatasourceTableEditor = commonComponentsRegistry.getLazyComponent('WidgetDatasourceTableEditor');\nconst WidgetExcelDatasourceTableEditor = commonComponentsRegistry.getLazyComponent('WidgetExcelDatasourceTableEditor');\nconst WidgetPresenceEditor = commonComponentsRegistry.getLazyComponent('WidgetPresenceEditor');\nconst WidgetLuccaAbsenceEditor = commonComponentsRegistry.getLazyComponent('WidgetLuccaAbsenceEditor');\nconst WidgetEmailsImapEditor = commonComponentsRegistry.getLazyComponent('WidgetEmailsImapEditor');\nconst WidgetContactCardDavEditor = commonComponentsRegistry.getLazyComponent('WidgetContactCardDavEditor');\nconst WidgetCalendarCalDavEditor = commonComponentsRegistry.getLazyComponent('WidgetCalendarCalDavEditor');\nconst WidgetUserProfileEditor = commonComponentsRegistry.getLazyComponent('WidgetUserProfileEditor');\nconst WidgetWelcomeEditor = commonComponentsRegistry.getLazyComponent('WidgetWelcomeEditor');\nconst WidgetExtensionEditor = commonComponentsRegistry.getLazyComponent('WidgetExtensionEditor');\n// hygen: inject:here getLazy\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useAppDispatch();\n const token = useAppSelector(Widget.selectors.selectToken);\n const widgetWrapper = useAppSelector((state) => Widget.selectors.selectWidget(state, uniqid), shallowEqual);\n\n const onSaveCallback = useAppSelector(\n (state) => WidgetEditor.selectors.selectEditor(state, uniqid)?.onSave,\n shallowEqual,\n );\n\n const handleHookIsActive = (name: keyof HookListType) => {\n return Hook.selectors.selectHook(store.getState(), name)?.isActive;\n };\n\n const onSave = (content: Partial<CombinedWidgetContent>) => {\n /*\n Update widget & Flush editor\n */\n if (widgetWrapper) {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content }));\n }\n\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n\n if (onSaveCallback) {\n onSaveCallback(content);\n }\n };\n\n const onStateChange = (states: WidgetStateProps, id?: string) => {\n /*\n Set widget state (busy, loading, initialized)\n */\n if (id !== undefined) {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid: id, ...states }));\n } else {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, ...states }));\n }\n };\n\n const onOpen = (view: ReactElement) => {\n /*\n Register popup (central)\n */\n dispatch(WidgetEditor.slice.actions.registerEditorPopup({ uniqid, view }));\n };\n\n const widget = widgetWrapper?.widget;\n\n if (!widget) return null;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return (\n <WidgetButtonEditor\n {...widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n );\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n onOpen={onOpen}\n />\n );\n } else if (ensureWidgetLuccaAbsenceType(widget)) {\n return <WidgetLuccaAbsenceEditor />;\n } else if (ensureWidgetArticleImageType(widget)) {\n return (\n <WidgetArticleImageEditor\n content={widget.content}\n token={token}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetArticleSliderType(widget)) {\n return token !== undefined ? (\n <WidgetArticleSliderEditor\n slides={widget.content.slides ?? []}\n loop={widget.content.loop ?? false}\n useDots={widget.content.useDots ?? true}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleSliderContent>(uniqid, content, false));\n }}\n token={token}\n onSave={onSave}\n />\n ) : (\n <>Token is mandatory</>\n );\n } else if (ensureWidgetArticleTitleType(widget)) {\n return (\n <WidgetArticleTitleEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n onOpen={onOpen}\n />\n );\n } else if (ensureWidgetArticleTextType(widget)) {\n return (\n <WidgetArticleTextEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n />\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <WidgetPresenceEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetPresenceContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n {...widget.content}\n />\n );\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <WidgetCheckListEditor\n token={token}\n uniqid={widget.uniqid}\n content={{\n ...widget.content,\n arr: widget.content.arr?.map((w) => ({\n ...w,\n title: Utils.html.htmlDecodeSpecialChars(w.title),\n })),\n }}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(\n Widget.slice.actions.updateWidgetWrapper({\n ...content,\n title: Utils.html.htmlDecodeSpecialChars(content.title),\n }),\n );\n }}\n handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetCheckListContent>(uniqid, content, false))\n }\n />\n );\n } else if (ensureWidgetQuickSurveyType(widget)) {\n return (\n <WidgetQuickSurveyEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent<WidgetQuickSurveyContent>(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetQuickSurveyContent>(uniqid, content, false))\n }\n />\n );\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return (\n <WidgetExcelDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n filebank: jamespot.filebank,\n wedoc: jamespot.wedoc,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => dispatch(Toast.actions.error({ label }))}\n />\n );\n } else if (ensureWidgetEmailsImapType(widget)) {\n return <WidgetEmailsImapEditor />;\n } else if (ensureWidgetExtensionType(widget)) {\n return (\n <WidgetExtensionEditor\n extensionName={widget.content.extensionName}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetExtensionContent>(uniqid, content, override ?? false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetContactCardDavType(widget)) {\n return <WidgetContactCardDavEditor />;\n } else if (ensureWidgetCalendarCalDavType(widget)) {\n return <WidgetCalendarCalDavEditor />;\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return (\n <WidgetDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n application: jamespot.application,\n filebank: jamespot.filebank,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => {\n dispatch(Toast.actions.error({ label }));\n }}\n />\n );\n } else if (ensureWidgetUserProfileType(widget)) {\n return (\n <WidgetUserProfileEditor\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent<WidgetUserProfileContent>(uniqid, content, false));\n }}\n />\n );\n } else if (ensureWidgetWelcomeType(widget)) {\n return (\n <WidgetWelcomeEditor\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent<WidgetWelcomeContent>(uniqid, content, false));\n }}\n />\n );\n // hygen: inject:here elseif\n } else {\n return <>cannot display editor</>;\n }\n};\n","import { CSSEditorAction, CSSEditorMenuButton } from './style';\nimport { WidgetEditor } from 'jamespot-front-business';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { useAppDispatch } from '../../redux/store';\n\nconst Icon = commonComponentsRegistry.getLazyComponent('Icon');\n\nimport { useTheme } from 'styled-components';\n\nexport const EditorPosition = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const dispatch = useAppDispatch();\n const theme = useTheme();\n const onClick = () => {\n dispatch(\n WidgetEditor.slice.actions.setEditorPosition({ uniqid, position: position === 'left' ? 'right' : 'left' }),\n );\n };\n\n return (\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <Icon\n name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'}\n color={theme.color.lavender}\n size={26.75}\n />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n );\n};\n","import styled, { useTheme } from 'styled-components';\nimport { useIntl, FormattedMessage } from 'react-intl';\n\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst InputColorRaw = commonComponentsRegistry.getLazyComponent('InputColorRaw');\n\nexport const Label = styled.label`\n margin-left: 2px;\n margin-right: 2px;\n margin-bottom: 8px;\n font-size: 14px;\n width: 100%;\n min-height: 20px;\n`;\n\nexport const Fieldset = styled.fieldset`\n margin: 12px 0px !important;\n width: 100% !important;\n`;\n\nexport const EditorInputColor = ({\n label,\n initialValue,\n handleChange,\n}: {\n label: string;\n initialValue?: string;\n handleChange: (color: string) => void;\n}) => {\n const theme = useTheme();\n const intl = useIntl();\n\n const palettes = [\n {\n name: intl.formatMessage({ id: 'GLOBAL_Platform_Color' }),\n colors: [\n theme.color.primary,\n theme.color.secondary,\n theme.color.headerColor,\n theme.color.lavender,\n theme.color.orange,\n theme.color.green,\n theme.color.navy,\n theme.color.overseas,\n theme.color.transparentHexa,\n ],\n },\n ];\n\n return (\n <Fieldset>\n <Label>\n <FormattedMessage id={label} />\n </Label>\n <InputColorRaw\n palettes={palettes}\n label={label}\n initialValue={initialValue ?? theme.color.primary}\n name={`background-color`}\n onChange={handleChange}\n />\n </Fieldset>\n );\n};\n","import { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\n\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useEffect } from 'react';\n\nconst JRCInputNumber = commonComponentsRegistry.getLazyComponent('InputNumber');\n\nexport const EditorInputNumber = ({\n label,\n initialValue,\n handleChange,\n}: {\n label: string;\n initialValue?: string;\n handleChange: (value: string) => void;\n}) => {\n const intl = useIntl();\n\n const { control, watch } = useForm({\n defaultValues: { value: initialValue ?? '0' },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data) => {\n handleChange(data.value ?? '');\n });\n return () => subscription.unsubscribe();\n }, [watch, handleChange]);\n\n return (\n <JRCInputNumber\n label={label}\n name={'value'}\n width=\"100%\"\n control={control}\n placeholder={intl.formatMessage({ id: label })}\n />\n );\n};\n","import { useEffect, useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\n\nexport type EditorSelectOption = { label: string; value: string };\nexport type EditorSelectOptions = EditorSelectOption[];\n\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst InputSelectExtended = commonComponentsRegistry.getLazyComponent('InputSelectExtended');\n\nexport const EditorInputSelect = ({\n label,\n options = [],\n initialValue,\n required = false,\n handleChange,\n}: {\n label: string;\n options: { label: string; value: string }[];\n initialValue?: string;\n required: boolean;\n handleChange: (value: string) => void;\n}) => {\n const optionFromInitialValue = useMemo(() => {\n if (initialValue && options.find((el) => el.value === initialValue)) {\n return options.find((el) => el.value === initialValue);\n }\n\n return options[0];\n }, [initialValue, options]);\n\n const { control, watch } = useForm({\n defaultValues: { select: optionFromInitialValue },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data: any) => {\n handleChange(data.select.value);\n });\n return () => subscription.unsubscribe();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [watch, handleChange]);\n\n return (\n <InputSelectExtended\n options={options}\n label={label}\n getValue={(o) => o.value}\n getLabel=\"label\"\n getSearch=\"label\"\n rules={{ required }}\n hideDeleteIcon={true}\n required={required}\n control={control}\n name={'select'}\n />\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\n\nimport { EditorInputColor } from './components/EditorInputColor';\nimport { EditorInputNumber } from './components/EditorInputNumber';\nimport { EditorInputSelect } from './components/EditorInputSelect';\n\nimport { shallowEqual } from 'react-redux';\nimport { useTheme } from 'styled-components';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst JRCInputText = commonComponentsRegistry.getLazyComponent('InputText');\n\n/*\n Editor tab wrapper (this is all the properties available on a widget wrapper)\n*/\nexport const EditorTabWrapper = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const wrapper = useAppSelector((state) => Widget.selectors.selectWidget(state, uniqid));\n const widgetContext = useAppSelector((state) => Widget.selectors.selectWidgetContext(state, uniqid), shallowEqual);\n const theme = useTheme();\n\n const styles = useAppSelector((state) => Widget.selectors.selectWidgetTitleStyle(state, uniqid), shallowEqual);\n\n const { control, watch } = useForm({\n defaultValues: { text: wrapper?.title.replace(/&amp;/g, '&') ?? '' },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data: any) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title: data.text }));\n });\n return () => subscription.unsubscribe();\n }, [watch, uniqid, dispatch]);\n\n const initialValues = useMemo(() => {\n return {\n color: styles && styles['color'] ? String(styles['color']) : theme.color.black,\n backgroundColor: styles && styles['background-color'] ? String(styles['background-color']) : 'transparent',\n fontSize: styles && styles['font-size'] ? String(styles['font-size']) : '24',\n fontWeight: styles && styles['font-weight'] ? String(styles['font-weight']) : 'medium',\n textAlign: styles && styles['text-align'] ? String(styles['text-align']) : 'left',\n };\n }, [styles, theme]);\n\n const handleChange = useCallback(\n (name: string, value: string | number) => {\n dispatch(\n Widget.slice.actions.setWidgetTitleStyle({\n uniqid,\n styles: { [name]: value },\n }),\n );\n },\n [dispatch, uniqid],\n );\n\n return wrapper ? (\n <>\n <JRCInputText\n name={'text'}\n label={'WIDGET_Title'}\n width=\"100%\"\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}\n />\n {widgetContext !== 'comment' && (\n <>\n <EditorInputColor\n label=\"STYLE_Text_Color\"\n initialValue={initialValues.color}\n handleChange={(colorValue) => handleChange('color', colorValue)}\n />\n <EditorInputColor\n label=\"STYLE_Background_Color\"\n initialValue={initialValues.backgroundColor}\n handleChange={(backgroundColorValue) => handleChange('background-color', backgroundColorValue)}\n />\n <EditorInputNumber\n label={'STYLE_Text_Size'}\n initialValue={initialValues.fontSize}\n handleChange={(fontSizeValue) => handleChange('font-size', fontSizeValue)}\n />\n <EditorInputSelect\n label={'STYLE_Font_Weight'}\n initialValue={initialValues.fontWeight}\n options={[\n { label: intl.formatMessage({ id: 'STYLE_Font_Weight_Normal' }), value: 'normal' },\n { label: intl.formatMessage({ id: 'STYLE_Font_Weight_Medium' }), value: 'medium' },\n { label: intl.formatMessage({ id: 'STYLE_Font_Weight_Bold' }), value: 'bold' },\n ]}\n required={false}\n handleChange={(fontWeightValue) => handleChange('font-weight', fontWeightValue)}\n />\n <EditorInputSelect\n label={'STYLE_Text_Align'}\n initialValue={initialValues.textAlign}\n options={[\n { label: intl.formatMessage({ id: 'STYLE_Text_Align_Left' }), value: 'left' },\n { label: intl.formatMessage({ id: 'STYLE_Text_Align_Center' }), value: 'center' },\n { label: intl.formatMessage({ id: 'STYLE_Text_Align_Justify' }), value: 'justify' },\n { label: intl.formatMessage({ id: 'STYLE_Text_Align_Right' }), value: 'right' },\n ]}\n required={false}\n handleChange={(textAlignValue) => handleChange('text-align', textAlignValue)}\n />\n </>\n )}\n </>\n ) : (\n <></>\n );\n};\n","import { shallowEqual } from 'react-redux';\nimport { CSSEditorIsBusy } from '../style';\nimport { Widget } from 'jamespot-front-business';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppSelector } from '../../../redux/store';\n\nconst Loader = commonComponentsRegistry.getLazyComponent('Loader');\n\nexport const EditorIsBusy = ({ uniqid }: { uniqid: string }) => {\n const isBusy = useAppSelector((state) => Widget.selectors.selectWidgetState(state, uniqid), shallowEqual)?.busy;\n return (\n <>\n {isBusy && (\n <CSSEditorIsBusy>\n <Loader size={'l'} />\n </CSSEditorIsBusy>\n )}\n </>\n );\n};\n","import { useIntl } from 'react-intl';\nimport { CSSEditorIsLocked } from '../style';\nimport { shallowEqual } from 'react-redux';\nimport { Widget } from 'jamespot-front-business';\nimport { useAppSelector } from '../../../redux/store';\n\nexport const EditorIsLocked = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const isLocked = useAppSelector((state) => Widget.selectors.selectWidgetState(state, uniqid), shallowEqual)?.locked;\n return isLocked ? (\n <CSSEditorIsLocked>{intl.formatMessage({ id: 'INTRANET_Panel_Change_Off' })}</CSSEditorIsLocked>\n ) : (\n <></>\n );\n};\n","import { shallowEqual } from 'react-redux';\nimport { Toast, Widget, WidgetEditor } from 'jamespot-front-business';\nimport jApi, { CombinedWidgetContent, WidgetDisplayMode } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../../redux/store';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\n\nexport const EditorSave = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const wrapper = useAppSelector((state) => Widget.selectors.selectWidget(state, uniqid), shallowEqual);\n const uri = useAppSelector((state) => Widget.selectors.selectWidgetObjectUri(state, uniqid), shallowEqual);\n\n const handleClick = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n const content = wrapper && wrapper.widget && wrapper.widget.content;\n if (!uri || !wrapper || !content) return;\n if (mode == 'view') {\n jApi.widget\n .updateWidget<CombinedWidgetContent>({\n uri,\n uniqid: uniqid,\n title: wrapper.title,\n content: content as CombinedWidgetContent,\n v2: true,\n })\n .catch((e: any) => {\n dispatch(\n Toast.actions.error({\n label: e.errorMsg ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n );\n });\n }\n\n if (mode === 'edit') {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content: content as CombinedWidgetContent }));\n }\n };\n\n return (\n <JRCButton color=\"valid\" onClick={handleClick}>\n {intl.formatMessage({ id: 'GLOBAL_Save' })}\n </JRCButton>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useIntl } from 'react-intl';\n\nimport { useTheme } from 'styled-components';\n\nimport { shallowEqual } from 'react-redux';\nimport { Widget } from 'jamespot-front-business';\nimport { EditorInputNumber } from './components/EditorInputNumber';\nimport { EditorInputSelect } from './components/EditorInputSelect';\nimport { EditorInputColor } from './components/EditorInputColor';\n\nimport { useAppSelector, useAppDispatch } from '../../redux/store';\n\nexport const EditorTabWidgetSelection = ({ uniqid }: { uniqid: string }) => {\n const theme = useTheme();\n const dispatch = useAppDispatch();\n const intl = useIntl();\n\n const styles = useAppSelector((state) => Widget.selectors.selectWidgetWrapperStyle(state, uniqid), shallowEqual);\n\n const initialValues = useMemo(() => {\n return {\n color: styles && styles['color'] ? String(styles['color']) : theme.color.black,\n backgroundColor:\n styles && styles['background-color'] ? String(styles['background-color']) : theme.color.white,\n padding: styles && styles['padding'] ? String(styles['padding']) : '0',\n borderRadius: styles && styles['border-radius'] ? String(styles['border-radius']) : '0',\n borderColor: styles['border-color'] ? String(styles['border-color']) : theme.color.black,\n borderWidth: styles['border-width'] ? String(styles['border-width']) : '0',\n borderStyle: styles['border-style'] ? String(styles['border-style']) : 'none',\n };\n }, [styles, theme]);\n\n const handleChange = useCallback(\n (name: string, value: string) => {\n dispatch(\n Widget.slice.actions.setWidgetWrapperStyle({\n uniqid,\n styles: { [name]: value },\n }),\n );\n },\n [uniqid, dispatch],\n );\n\n return (\n <>\n <EditorInputColor\n label={'STYLE_Background_Color'}\n initialValue={initialValues.backgroundColor}\n handleChange={(backgroundColorValue) => handleChange('background-color', backgroundColorValue)}\n />\n <EditorInputColor\n label={'STYLE_Text_Color'}\n initialValue={initialValues.color}\n handleChange={(color) => handleChange('color', color)}\n />\n <hr />\n <EditorInputNumber\n label={'STYLE_Padding'}\n initialValue={initialValues.padding}\n handleChange={(paddingValue) => handleChange('padding', String(paddingValue))}\n />\n <EditorInputNumber\n label={'STYLE_Radius'}\n initialValue={initialValues.borderRadius}\n handleChange={(borderRadiusValue) => handleChange('border-radius', String(borderRadiusValue))}\n />\n <EditorInputSelect\n label={'STYLE_Border_Style'}\n initialValue={initialValues.borderStyle}\n options={[\n { label: intl.formatMessage({ id: 'STYLE_Border_Style_None' }), value: 'none' },\n { label: intl.formatMessage({ id: 'STYLE_Border_Style_Solid' }), value: 'solid' },\n { label: intl.formatMessage({ id: 'STYLE_Border_Style_Dashed' }), value: 'dashed' },\n { label: intl.formatMessage({ id: 'STYLE_Border_Style_Dotted' }), value: 'dotted' },\n ]}\n required={false}\n handleChange={(borderStyleValue) => {\n handleChange('border-style', borderStyleValue);\n borderStyleValue !== 'none' && handleChange('border-color', theme.color.black);\n borderStyleValue !== 'none' && handleChange('border-width', '1');\n }}\n />\n {typeof initialValues.borderStyle === 'string' && initialValues.borderStyle !== 'none' && (\n <EditorInputColor\n label={'STYLE_Border_Color'}\n initialValue={initialValues.borderColor}\n handleChange={(borderColorValue) => handleChange('border-color', borderColorValue)}\n />\n )}\n {typeof initialValues.borderStyle === 'string' && initialValues.borderStyle !== 'none' && (\n <EditorInputNumber\n label={'STYLE_Border_Width'}\n initialValue={initialValues.borderWidth}\n handleChange={(borderWidthValue) => handleChange('border-width', borderWidthValue)}\n />\n )}\n </>\n );\n};\n","import { useCallback } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport { useIntl } from 'react-intl';\n\nimport { EditorInputSelect } from './components/EditorInputSelect';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\n\n/**\n *\n * level 1 : Icon only (iOS like)\n * level 2 : Icon + Notification cell (iOS like)\n * level 3 : Default display\n * Level 4 : ???\n *\n */\nexport const EditorTabDisplayLevel = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useAppDispatch();\n const intl = useIntl();\n const editor = useAppSelector((state) => WidgetEditor.selectors.selectEditor(state, uniqid), shallowEqual);\n const def = Widget.definition(editor?.name);\n const level = useAppSelector((state) => Widget.selectors.selectWidgetLevel(state, uniqid), shallowEqual);\n\n const handleChange = useCallback(\n (level: string) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, level: Number(level) as 1 | 2 | 3 | 4 }));\n },\n [uniqid, dispatch],\n );\n\n return (\n <EditorInputSelect\n handleChange={handleChange}\n required={true}\n label={'WIDGET_Display_Level_Select'}\n initialValue={level ? String(level) : '3'}\n options={[\n { label: intl.formatMessage({ id: 'WIDGET_Display_Level_1' }), value: '1' },\n { label: intl.formatMessage({ id: 'WIDGET_Display_Level_2' }), value: '2' },\n { label: intl.formatMessage({ id: 'WIDGET_Display_Level_3' }), value: '3' },\n { label: intl.formatMessage({ id: 'WIDGET_Display_Level_4' }), value: '4' },\n ].filter((el) =>\n Array.isArray(def.displayLevel) ? def.displayLevel.includes(Number(el.value) as 1 | 2 | 3 | 4) : [],\n )}\n />\n );\n};\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { Editor } from './Editor';\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorTab,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMask,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useIntl } from 'react-intl';\nimport { EDITOR_CONTENT_WIDTH } from './const';\nimport { EditorPosition } from './EditorPosition';\nimport { EditorTabWrapper } from './EditorTabWrapper';\nimport { EditorIsBusy } from './states/EditorIsBusy';\nimport { EditorIsLocked } from './states/EditorIsLocked';\n\nimport { EditorSave } from './components/EditorSave';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\nimport { useTheme } from 'styled-components';\nimport { EditorTabWidgetSelection } from './EditorTabWidgetSelection';\nimport { EditorTabDisplayLevel } from './EditorTabDisplayLevel';\n\nconst OVERRIDE_SAVE = [\n 'widget-presence',\n 'widget-quick-survey',\n 'widget-check-list',\n 'widget-emails-imap',\n 'widget-contact-cardDav',\n 'widget-calendar-calDav',\n];\n\nconst Icon = commonComponentsRegistry.getLazyComponent('Icon');\nconst Tooltip = commonComponentsRegistry.getLazyComponent('Tooltip');\n\ntype EditorTabs = 'widget-settings' | 'widget-title' | 'widget-selection' | 'widget-level';\ntype EditorTab = {\n name: EditorTabs;\n label: string;\n icon: string;\n enable: boolean;\n};\n\n/*\n Editor wrapper (right part)\n*/\nexport const EditorWrapper = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const theme = useTheme();\n const ref = useRef<HTMLDivElement>(null);\n const editor = useAppSelector((state) => WidgetEditor.selectors.selectEditor(state, uniqid), shallowEqual);\n\n const def = Widget.definition(editor?.name);\n\n const enableWidgetLevel = useMemo<boolean>(() => {\n return def.displayLevel !== undefined && Array.isArray(def.displayLevel) && def.displayLevel.length !== 0;\n }, [def]);\n const tabs: EditorTab[] = useMemo(() => {\n return [\n {\n name: 'widget-title',\n label: intl.formatMessage({ id: 'PANEL_Title' }),\n enable: def.panel.useWrapper,\n icon: 'icon-font',\n },\n {\n name: 'widget-selection',\n label: intl.formatMessage({ id: 'PANEL_Widget_Selection' }),\n enable: def.panel.useSelection,\n icon: 'icon-sliders',\n },\n {\n name: 'widget-settings',\n label: intl.formatMessage({ id: 'PANEL_Widget_Settings' }),\n enable: def.panel.useEditor,\n icon: 'icon-pen',\n },\n {\n name: 'widget-level',\n label: intl.formatMessage({ id: 'PANEL_Widget_Level' }),\n enable: enableWidgetLevel,\n icon: 'icon-edit',\n },\n ];\n }, [def, intl, enableWidgetLevel]);\n\n const defaultTab = useMemo<EditorTab | undefined>(() => {\n if (def.panel.useEditor) {\n return tabs.find((el) => el.name === 'widget-settings');\n }\n\n return tabs.filter((el) => el.enable)[0];\n }, [def, tabs]);\n\n const [currentTab, setCurrentTab] = useState<EditorTab | undefined>(defaultTab);\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n useEffect(() => {\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.className = ref.current.className + ' animate';\n }\n }, 0);\n }, []);\n\n return editor ? (\n <CSSEditorMask>\n <CSSEditor ref={ref} position={position}>\n <CSSEditorMenu>\n {tabs\n .filter((tab) => tab.enable)\n .map((tab) => {\n return (\n <CSSEditorMenuButton\n key={tab.name}\n isActive={currentTab && currentTab.name === tab.name}\n onClick={() => setCurrentTab(tab)}>\n <Tooltip position={'left'} description={tab.label}>\n <Icon\n name={tab.icon}\n color={\n currentTab && currentTab.name === tab.name\n ? theme.color.white\n : theme.color.lavender\n }\n />\n </Tooltip>\n </CSSEditorMenuButton>\n );\n })}\n </CSSEditorMenu>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', width: `${EDITOR_CONTENT_WIDTH}px` }}>\n <CSSEditorHeader>\n <EditorPosition uniqid={uniqid} position={editor.position} />\n <CSSEditorLabel>\n <h3>{currentTab ? currentTab.label : intl.formatMessage({ id: def.label })}</h3>\n </CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <Icon name=\"icon-times\" color={theme.color.lavender} size={26.75} />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <CSSEditorContent>\n <CSSEditorTab>\n {currentTab && currentTab.name === 'widget-settings' && def.panel.useEditor && (\n <Editor uniqid={editor.uniqid} />\n )}\n {currentTab && currentTab.name === 'widget-title' && def.panel.useWrapper && (\n <EditorTabWrapper uniqid={editor.uniqid} />\n )}\n {currentTab && currentTab.name === 'widget-selection' && (\n <EditorTabWidgetSelection uniqid={uniqid} />\n )}\n {currentTab && currentTab.name === 'widget-level' && enableWidgetLevel && (\n <EditorTabDisplayLevel uniqid={uniqid} />\n )}\n </CSSEditorTab>\n <EditorIsBusy uniqid={uniqid} />\n <EditorIsLocked uniqid={uniqid} />\n {OVERRIDE_SAVE.includes(editor.name) && <EditorSave uniqid={uniqid} mode={editor.mode} />}\n </CSSEditorContent>\n </div>\n </CSSEditor>\n {editor?.popup ? (\n <div style={{ position: 'absolute', inset: 0, backgroundColor: '#000', opacity: '.7' }}></div>\n ) : (\n <></>\n )}\n </CSSEditorMask>\n ) : (\n <></>\n );\n};\n","import { useEffect } from 'react';\n\nimport { shallowEqual } from 'react-redux';\n\nimport { EDITOR_TOP, EDITOR_WIDTH } from './const';\nimport { EditorPopup } from './EditorPopup';\nimport { EditorWrapper } from './EditorWrapper';\nimport { CSSEditorPortal } from './style';\nimport { WidgetEditor } from 'jamespot-front-business';\n\nimport styled from 'styled-components';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\n\nexport const CSSEditorPortalWrapper = styled.div`\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 1;\n`;\n\nexport const CSSEditorPortalPopupWrapper = styled.div<{ isActive: boolean }>`\n flex: 1;\n display: flex;\n margin-top: ${EDITOR_TOP}px;\n pointer-events: ${(props) => (props.isActive ? 'all' : 'none')};\n`;\n\nexport const CSSEditorPortalRow = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n pointer-events: none;\n`;\n\nexport const CSSEditorPortalFreeSpace = styled.div`\n width: ${EDITOR_WIDTH}px;\n pointer-events: none;\n`;\n\n/*\n Editors wrapper (template)\n*/\nexport const EditorsPortal = () => {\n const dispatch = useAppDispatch();\n useEffect(() => {\n const flush = () => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n };\n\n window.addEventListener('NGWidgetEditorFlushAll', flush);\n return () => {\n window.removeEventListener('NGWidgetEditorFlushAll', flush);\n };\n }, [dispatch]);\n\n const editors = useAppSelector(WidgetEditor.selectors.selectEditors, shallowEqual);\n\n return (\n <CSSEditorPortalWrapper className=\"editor-portal-wrapper\">\n {editors.map((editor) => {\n return (\n <CSSEditorPortal isActive={false} key={editor.uniqid}>\n <CSSEditorPortalRow>\n {editor.position === 'left' ? (\n <>\n <EditorWrapper uniqid={editor.uniqid} position={editor.position}></EditorWrapper>\n <CSSEditorPortalPopupWrapper isActive={editor.popup !== undefined}>\n <EditorPopup uniqid={editor.uniqid} />\n </CSSEditorPortalPopupWrapper>\n <CSSEditorPortalFreeSpace />\n </>\n ) : (\n <>\n <CSSEditorPortalFreeSpace />\n <CSSEditorPortalPopupWrapper isActive={editor.popup !== undefined}>\n <EditorPopup uniqid={editor.uniqid} />\n </CSSEditorPortalPopupWrapper>\n <EditorWrapper uniqid={editor.uniqid} position={editor.position}></EditorWrapper>\n </>\n )}\n </CSSEditorPortalRow>\n </CSSEditorPortal>\n );\n })}\n </CSSEditorPortalWrapper>\n );\n};\n","// FIXME move to j-react-components + display error if dev mode\nexport const Empty = () => <></>;\n","import { Suspense } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { commonComponentsRegistry } from '../registry/CommonRegistry';\n\nconst Container = commonComponentsRegistry.getLazyComponent('Container');\n\n// TODO: when we use it more globally, we will wanted to add a common header to not repeat it.\n// an exemple is in the @TwoColLayout component.\n// Currently (2025-08-20), calendar and accessibility are the only components that use it.\nexport const FullPageLayout = () => {\n return (\n <Suspense fallback={<></>}>\n <Container backgroundColor={'white'} mode={'fluid'} flexDirection={'column'}>\n <Outlet />\n </Container>\n </Suspense>\n );\n};\n","import { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\nimport { JIACapabilities } from 'jamespot-user-api';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nexport type JiaTextEnhanceQuery = {\n resolve: (value: string | PromiseLike<string>) => void;\n reject: (reason?: any) => void;\n capability: JIACapabilities;\n text: string;\n};\n\nexport const useAI = () => {\n const [query, setQuery] = useState<JiaTextEnhanceQuery | undefined>();\n const intl = useIntl();\n\n const isActive = useMemo(() => {\n return (\n J.hooks?.MagicWandHook?.isActive &&\n J.hooks?.MagicWandHook?.menuItems &&\n J.hooks.MagicWandHook.menuItems.length\n );\n }, []);\n\n const PrepareAndSetQuery = useCallback((query: JiaTextEnhanceQuery) => {\n const internalResolve = (value: string | PromiseLike<string>) => {\n query.resolve(value);\n setQuery(undefined);\n };\n const internalReject = (value: any) => {\n query.reject(value);\n setQuery(undefined);\n };\n setQuery({\n ...query,\n reject: internalReject,\n resolve: internalResolve,\n });\n }, []);\n\n const fetch = useCallback(\n (text: string, capability: JIACapabilities) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability,\n });\n });\n },\n [PrepareAndSetQuery],\n );\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => fetch(text, 'develop'),\n summarize: (text: string) => fetch(text, 'summarize'),\n tldr: (text: string) => fetch(text, 'tldr'),\n en: (text: string) => fetch(text, 'en'),\n es: (text: string) => fetch(text, 'es'),\n formal: (text: string) => fetch(text, 'formal'),\n funny: (text: string) => fetch(text, 'funny'),\n };\n }, [fetch]);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), [intl, AICapabilities]);\n\n return { query, ext, isActive } as const;\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport { useCallback, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { FieldValues } from 'react-hook-form';\nimport { AIModal } from './extension/AIModal';\nimport { useMarkdownModal } from '../../hooks/useMarkdownModal';\nimport { MarkdownModal } from './extension/MarkdownModal';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { tinymceCommonOptions } from '../../initTinymce';\nimport { getTinyMCEMentionsQueries } from '../../utils/tinymce';\nimport { useAI } from '../../hooks/useAI';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\nimport { GifsModal } from './extension/GifsModal';\nimport { useGifsModal } from '../../hooks/useGifsModal';\n\nconst JRCInputTinyMCE = commonComponentsRegistry.getLazyComponent('InputTinyMCE');\n\nexport type JRCInputTinyMCEWithExtProps<T extends FieldValues> = Omit<\n JRCInputTinyMCEProps<T>,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExt = <T extends FieldValues = FieldValues>(props: JRCInputTinyMCEWithExtProps<T>) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const theme = useTheme();\n const models = useAppSelector(Model.selectors.selectAll);\n const { query, ext: extAI, isActive: isAIActive } = useAI();\n const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n const {\n close: closeGifsModal,\n open: gifsModalOpen,\n isActive: isGifsActive,\n onSelect,\n ext: gifsExt,\n } = useGifsModal();\n\n const extArray = useMemo(() => {\n return [\n ...(isMarkdownActive ? [extMarkdown] : []),\n ...(isAIActive ? [extAI] : []),\n ...(isGifsActive ? [gifsExt] : []),\n ];\n }, [extAI, extMarkdown, gifsExt, isAIActive, isGifsActive, isMarkdownActive]);\n\n const onMentionsQueryError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => tinymceCommonOptions, []);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCE\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n {isAIActive && <AIModal query={query} />}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\n {isGifsActive && <GifsModal onSelect={onSelect} open={gifsModalOpen} close={closeGifsModal} />}\n </>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport { useCallback, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { JRCInputTinyMCERawProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport { MarkdownModal } from './extension/MarkdownModal';\nimport { useMarkdownModal } from '../../hooks/useMarkdownModal';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { tinymceCommonOptions } from '../../initTinymce';\nimport { getTinyMCEMentionsQueries } from '../../utils/tinymce';\nimport { useAI } from '../../hooks/useAI';\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\n\nconst JRCInputTinyMCERaw = commonComponentsRegistry.getLazyComponent('InputTinyMCERaw');\n\nexport type JRCInputTinyMCEWithExtProps = Omit<\n JRCInputTinyMCERawProps,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExtRaw = (props: JRCInputTinyMCEWithExtProps) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const theme = useTheme();\n const models = useAppSelector(Model.selectors.selectAll);\n const { query, ext: extAI, isActive: isAIActive } = useAI();\n const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n\n const extArray = useMemo(() => {\n return [...(isMarkdownActive ? [extMarkdown] : []), ...(isAIActive ? [extAI] : [])];\n }, [extAI, extMarkdown, isAIActive, isMarkdownActive]);\n\n const onMentionsQueryError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => tinymceCommonOptions, []);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCERaw\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n {isAIActive && <AIModal query={query} />}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\n </>\n );\n};\n","import { FormattedMessage, useIntl } from 'react-intl';\r\nimport { Control } from 'react-hook-form';\r\nimport jamespot from 'jamespot-user-api';\r\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\r\n\r\nconst JRCInputAudience = commonComponentsRegistry.getLazyComponent('InputAudience');\r\nconst JRCMessage = commonComponentsRegistry.getLazyComponent('Message');\r\nconst JRCModal = commonComponentsRegistry.getLazyComponent('Modal');\r\n\r\nexport type ModalAudienceProps = {\r\n open: boolean;\r\n closeHandler: () => void;\r\n title?: string;\r\n control: Control<any>;\r\n warningMessage?: string;\r\n onSubmit: () => void;\r\n name?: string;\r\n};\r\n\r\nexport const ModalAudience = ({\r\n open,\r\n closeHandler,\r\n title,\r\n control,\r\n warningMessage,\r\n onSubmit,\r\n name = 'publishTo',\r\n}: ModalAudienceProps) => {\r\n const intl = useIntl();\r\n return (\r\n <JRCModal\r\n open={open}\r\n closeHandler={closeHandler}\r\n title={title ?? intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: () => closeHandler(),\r\n },\r\n {\r\n dataCy: 'no-audience-continue',\r\n children: <FormattedMessage id=\"GLOBAL_Continue\" />,\r\n color: 'danger',\r\n clickHandler: () => {\r\n closeHandler();\r\n onSubmit();\r\n },\r\n },\r\n ]}>\r\n <JRCMessage\r\n variant={'warning'}\r\n message={warningMessage ?? intl.formatMessage({ id: 'FORM_Audience_Empty' })}\r\n />\r\n <JRCInputAudience\r\n asyncPromise={(inputValue: string) => jamespot.audience.autocomplete(inputValue)}\r\n searchable={true}\r\n control={control}\r\n multiple={true}\r\n placeholder={intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n name={name}\r\n />\r\n </JRCModal>\r\n );\r\n};\r\n","import { useEffect, useMemo } from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\r\nimport { useForm, useWatch } from 'react-hook-form';\r\nimport { Utils } from 'jamespot-react-components';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { Platform, Toast } from 'jamespot-front-business';\r\nimport { useAppDispatch, useAppSelector } from '../../redux/store';\r\nimport styled from 'styled-components';\r\nimport { padStartTwoDigits } from 'jamespot-user-api';\r\n\r\nconst ModalForm = commonComponentsRegistry.getLazyComponent('ModalForm');\r\nconst InputDateTime = commonComponentsRegistry.getLazyComponent('InputDateTime');\r\nconst InputTextRaw = commonComponentsRegistry.getLazyComponent('InputTextRaw');\r\nconst FlexBox = commonComponentsRegistry.getLazyComponent('FlexBox');\r\nconst IconButton = commonComponentsRegistry.getLazyComponent('IconButton');\r\n\r\ntype ScheduleData = {\r\n scheduleDate: string;\r\n permalinkId: string;\r\n};\r\n\r\nexport type ModalScheduleProps = {\r\n open: boolean;\r\n closeHandler: () => void;\r\n onSubmit: (data: ScheduleData) => void;\r\n};\r\n\r\nconst IconButtonWrapper = styled.div`\r\n margin-bottom: ${({ theme }) => theme.space.xs}px;\r\n`;\r\n\r\nexport const ModalSchedule = ({ open, closeHandler, onSubmit }: ModalScheduleProps) => {\r\n const intl = useIntl();\r\n const dispatch = useAppDispatch();\r\n const urlBase = useAppSelector(Platform.selectors.selectUrlBase);\r\n const form = useForm<ScheduleData>({\r\n defaultValues: async () => {\r\n const now = new Date();\r\n return {\r\n scheduleDate: `${Utils.date.formatDate(now)} ${padStartTwoDigits(now.getHours())}:${padStartTwoDigits(now.getMinutes())}`,\r\n permalinkId: uuid(),\r\n };\r\n },\r\n });\r\n\r\n const onSubmitHandler = form.handleSubmit((data) => {\r\n onSubmit(data);\r\n });\r\n\r\n useEffect(() => {\r\n if (open) {\r\n form.reset();\r\n }\r\n }, [form, open]);\r\n\r\n const permalinkId = useWatch({ control: form.control, name: 'permalinkId' });\r\n const permalink = useMemo(() => {\r\n return `${urlBase}permalink/${permalinkId}`;\r\n }, [permalinkId, urlBase]);\r\n\r\n return (\r\n <ModalForm\r\n open={open}\r\n closeHandler={closeHandler}\r\n onSubmit={onSubmitHandler}\r\n maxHeight={'620px'}\r\n title={intl.formatMessage({ id: 'GLOBAL_Schedule' })}\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: () => closeHandler(),\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Schedule\" />,\r\n color: 'valid',\r\n clickHandler: () => {\r\n closeHandler();\r\n onSubmitHandler();\r\n },\r\n disabled: !form.watch('scheduleDate'),\r\n },\r\n ]}>\r\n <InputDateTime\r\n rules={{ required: true }}\r\n label={'GLOBAL_Scheduled_Date'}\r\n control={form.control}\r\n name={'scheduleDate'}\r\n />\r\n <FlexBox y={'flex-end'}>\r\n <InputTextRaw\r\n label={intl.formatMessage({ id: 'GLOBAL_Permalink' })}\r\n value={permalink}\r\n onChange={() => null}\r\n margin={'0'}\r\n width={'100%'}\r\n />\r\n <IconButtonWrapper>\r\n <IconButton\r\n srOnly={'GLOBAL_Copy_Link'}\r\n icon={'icon-copy'}\r\n colorVariant={'primary'}\r\n onClick={() => {\r\n navigator.clipboard.writeText(permalink).then(() => {\r\n dispatch(\r\n Toast.actions.success({\r\n label: intl.formatMessage({ id: 'CLIPBOARD_Copy_Success' }),\r\n }),\r\n );\r\n });\r\n }}\r\n />\r\n </IconButtonWrapper>\r\n </FlexBox>\r\n </ModalForm>\r\n );\r\n};\r\n","import { Suspense, useEffect, useMemo, useState } from 'react';\nimport { Outlet, matchPath, useLocation } from 'react-router-dom';\nimport { useIntl } from 'react-intl';\nimport { commonComponentsRegistry } from '../registry/CommonRegistry';\nimport { TwoColLayoutProps } from './types';\n\nconst Container = commonComponentsRegistry.getLazyComponent('Container');\nconst AppColumn = commonComponentsRegistry.getLazyComponent('AppColumn');\nconst MainColumn = commonComponentsRegistry.getLazyComponent('MainColumn');\n\nexport function TwoColLayout({\n extensionRoute,\n routes,\n description,\n mode = 'center',\n mainColumnProps,\n}: TwoColLayoutProps) {\n const intl = useIntl();\n const { pathname } = useLocation();\n\n const ROUTES_ARRAY = useMemo(() => Object.values(routes), [routes]);\n const [activeTab, setActiveTab] = useState(ROUTES_ARRAY?.[0]?.key);\n\n const tabs = ROUTES_ARRAY.map((tab) => ({\n ...tab,\n label: intl.formatMessage({ id: tab.label }),\n href: tab.absolutePath ? tab.path : `/ng/rr/${extensionRoute}/${tab.path}`,\n group: tab.group ? intl.formatMessage({ id: tab.group }) : undefined,\n }));\n\n useEffect(() => {\n const activeRoute = ROUTES_ARRAY.find((route) => {\n if (`/ng/rr/${extensionRoute}/${route.path}` === pathname) {\n return true;\n }\n\n return route.paths?.reduce<boolean>((previousValue: boolean, currentValue: string) => {\n const pattern = `/ng/rr/${extensionRoute}/${currentValue}`;\n const isMatch = matchPath(pattern, pathname) !== null;\n return previousValue || isMatch;\n }, false);\n });\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname, ROUTES_ARRAY, extensionRoute]);\n\n return (\n <Suspense fallback={<></>}>\n <Container mode={mode}>\n <AppColumn mode={mode} description={description} tabs={tabs} activeTab={activeTab || ''} />\n <MainColumn mode={mode} flex={true} {...mainColumnProps}>\n <Outlet />\n </MainColumn>\n </Container>\n </Suspense>\n );\n}\n"],"names":["JRCIcon","getLazyComponent","JRCAvatar","SR","SROnly","Avatar","props","theme","useTheme","intl","useIntl","networkPublic","selectors","selectNetworkPublic","uri","name","size","color","primary","variant","formatMessage","id","JRCFlexBox","JRCModalContent","JRCModalLayout","JRCStyledHref","JRCTooltip","JRCTypography","AudienceWrapper","AvatarLink","white","lavender","overlap","Audience","audience","limit","isModalOpen","setModalOpen","useState","splice","map","item","index","href","_url","target","description","undefined","title","position","alt","timestamp","dateModified","Utils","date","strToTimestamp","focusable","length","onClick","closeHandler","enableClickAwayCloseModal","open","maxHeight","overflow","onClickIconClose","i","y","gap","space","l","type","JRCLoader","TextWrapper","md","loadingResponse","response","loading","error","AIModal","query","setResponse","sendAIRequest","useCallback","textEnhancement","text","capacity","capability","then","errorMsg","textResponse","result","catch","_err","useEffect","trim","zIndex","tinyMCEModal","reject","buttons","children","clickHandler","resolve","isFull","align","StretchContainer","css","Container","stretch","Form","FormElm","forwardRef","ref","onSubmit","dataCy","FieldsetWrapper","DisplayForm","onInit","formRef","useRef","configuration","defaultValues","useDisplay","fields","forceMandatory","isInit","setIsInit","handleSubmit","control","reset","formFn","useForm","criteriaMode","formatValuesForSubmit","values","toRet","Object","keys","forEach","k","widget","find","c","v","join","useImperativeHandle","current","scrollTo","getFormattedValues","getValues","Input","conf","readOnly","extraInputs","ModalForm","Loader","Icon","Typography","Ellipsis","StyledHref","ContentPreview","grey2","grey0","sm","ContentWrapper","AddReportModal","onClose","articleId","articleUri","commentUri","dispatch","setOpen","article","setArticle","comment","setComment","contentLoading","setContentLoading","submitLoading","setSubmitLoading","abortController","Promise","all","res","get","idArticle","signal","format","getComments","closeModal","submit","createReport","actions","success","label","e","submitForm","async","FormattedMessage","_user","CSSSquareWidgetWrapper","CSSSquareWidget","available","CSSWidgetButton","height","CSSWrapWidgetWrapper","column","CSSWrapTitle","CSSWrapWidget","parentIsColumn","grey1","full","DashedFocusBorder","Flex","direction","JRCButton","JRCIconButton","WidgetList","mode","view","namespace","onChange","isOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","Presence","QuickSurvey","ArticleText","ArticleImage","ArticleSlider","ArticleAttachment","getBuilderWidgets","args","portalId","factory","src","img","className","minWidth","WidgetModeArticle","WidgetModeComment","calcHeight","useMemo","Math","ceil","bg","bgHover","iconSize","icon","useMarkdownModal","editor","setEditor","onInsert","execCommand","close","ext","JTinyMCEExtensionsBuilders","markdown","ed","isActive","JRCInputText","WidgetTitleEdit","uniqid","widgetWrapperTitle","state","selectWidget","shallowEqual","watch","widgetTitle","subscription","data","slice","updateWidgetWrapper","unsubscribe","placeholder","width","margin","CSSModalFooter","CSSWidgetHeaderEdit","CSSWidgetHeaderEditTitle","CSSWidgetHeaderEditActions","WidgetHeaderEdit","handleOpenEditor","setIsOpen","handleOnClick","registerEditor","handleRemoveWidget","flushWidget","JRCHtml","CSSWidgetTitle","WidgetTitle","widgetWrapper","styles","selectWidgetTitleStyle","initialValues","String","black","backgroundColor","fontSize","fontWeight","textAlign","style","as","__html","JRCInputFileAdvancedRaw","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","selectToken","total","setTotal","files","setFiles","click","content","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","JRCWidgetEmptyInplace","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","onError","message","setWidgetState","mounted","empty","weDoc","selectById","option","file","getAccessHash","Error","hash","idFile","window","getWedocFilePath","wedocWindowOpen","openWithOptions","condition","f","includes","mimetype","options","resolveFilePath","Array","isArray","url","JRCWidgetButton","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","buttonSize","borderRadius","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","WidgetImage","CSSImageWrapperHover","mockFileLittle","mainType","dateCreation","str","Date","parse","isNaN","getTime","JRCWidgetArticleImageWrapper","useFilter","setUri","formatImgUrl","now","from","path","JRCWidgetSlider","Wrapper","JRCWidgetArticleSliderWrapper","dynamicWidth","setDynamicWidth","fileViewerFiles","slides","slide","handleResize","offsetWidth","addEventListener","removeEventListener","isEditable","handleEditor","useDots","loop","startAt","onClickSlide","InputTextareaRaw","Modal","MarkdownModal","setMarkdown","doClose","disabled","replace","value","WidgetArticleText","CSSTextWrapper","JRCWidgetArticleTextWrapper","isBusy","selectWidgetState","busy","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","closeMarkdownModal","extMarkdown","isMarkdownActive","tinyMentionsQueries","autoFocus","commonOptions","mentionsQueries","additionalExtensions","handlers","WidgetArticleTitle","ToolWrapper","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","ModalLayout","ModalContent","Button","InputText","InputNumber","InputSelectExtended","InputPassword","UIForm","isLocked","UIWrapper","UIProviderError","orange","UISection","officeConfigurationInitialState","username","password","hostname","imapPort","imapConnectionSecurity","ImapConnection","NONE","imapMailbox","cardDavAddressBook","calDavCalendar","provider","OfficeConfigurationPrompt","useAbortController","isPending","setIsPending","setValue","formState","isValid","providerList","setProviderList","imapConnectionSecurityOptions","SSL","STARTTLS","fetchConfiguration","providers","getConfiguration","getProviders","aborted","err","finally","handleClose","hasProvider","radius","SelectProvider","initialValue","el","handleChange","rules","required","loader","setConfiguration","location","reload","getValue","o","getLabel","getSearch","UIFlex","UIScrollWrapper","UIScroll","WidgetScroll","header","scrollable","footer","WidgetStylePadding","selectWidgetWrapperStyle","padding","UITitle","WidgetIntranetTitle","UIHeaderWrapper","backroundColor","UIHeader","UIHeaderFlex","grey4","xs","WidgetHeader","dropdown","subHeader","styleValues","ButtonDropdown","Tooltip","UIDropdown","WidgetCalendarCalDavHeader","isConfigurationValid","handleLogout","useDispatch","small","smallOpenDirection","WidgetCalendarCalDav","JRCWidgetCalendarCalDavWrapper","levelFallback","setIsConfigurationValid","doInterval","setDoInterval","level","selectWidgetLevel","setUrl","list","setList","initialized","handleLogin","handleLoading","fetchProviderUrls","getProviderBaseUrls","dav_calendar_url","fetchData","nextMonth","addMonth","davCalendarGetEvents","dateStart","formatDateTime","dateEnd","WIDGET_LEVEL_3","interval","setInterval","clearInterval","WIDGET_LEVEL_1","calendarListEvent","Footer","WidgetRemove","removeWidget","WidgetFooterView","collaborationRights","widgetObject","selectWidgetObject","widgetObjectRights","selectWidgetObjectRights","canUpdate","update","canDelete","delete","ensureWidgetObjectHasMinimumProperties","WidgetInlineInputText","handleClick","setLabel","WidgetIsPending","WidgetCheckList","WidgetCheckListEditor","JRCFileViewer","CommentContainer","border","CSSWidgetCheckListWrapper","JRCWidgetCheckListWrapper","onWidgetUpdate","widgetContent","setToken","tokenLoading","setTokenLoading","entries","setEntries","tokenFromStore","selectWidgetObjectUri","allRt","selectAllWidgetRTObject","canEditCollaboration","canAdministrate","administrate","fetchToken","handleReloadWidget","getWidget","ensureWidgetCheckListType","openEditorPanel","flushAllEditor","finalEntries","arr","checked","links","user","lastRt","at","object","fn","handleCollabAddEntry","contentToUpdate","updateWidget","v2","fs","push","w","html","htmlDecodeSpecialChars","onChangeContent","onChangeWrapper","useRT","initialEntries","onFileClick","entry","onItemCheckListChange","checkListRespond","handleCheckItem","edit","WidgetContactCardDavHeader","WidgetContactCardDav","JRCWidgetContactCardDavWrapper","dav_address_book_url","davAddressBookGetContacts","contactCardList","WidgetEmailsImapHeader","count","selectWidgetChipCount","WidgetEmailsImap","JRCWidgetEmailsImapWrapper","fetchUnreadEmailsCount","imapInboxGetUnreadEmailsCount","setWidgetChipCount","imap_inbox_url","imapInboxGetEmails","WIDGET_LEVEL_2","emailList","UIOverlay","WidgetLuccaAbsence","JRCWidgetLuccaAbsenceWrapper","setError","isLoading","setIsLoading","today","getFullYear","getMonth","toString","padStart","getDate","getAbsence","CSSPaddingMd","CSSHref","secondary","CSSHorizontalAlign","WidgetPresenceWrapperClosing","handleClosing","isClosed","JRCWidgetPresence","ModalUserList","CSSWidgetPresenceWrapper","CSSWidgetPresenceIsClosed","JRCWidgetPresenceWrapper","limitValue","closing","userValue","userAvailableList","userUnavailableList","userAvailableTotal","userUnavailableTotal","isPendingResponse","setIsPendingResponse","AbortController","openUsersModal","setOpenUsersModal","usersListIndex","setUsersListIndex","usersList","setUsersList","handleError","canRespond","lockedRespondHandler","handleCancelRespond","presenceCancel","handleRespond","presenceRespond","handleResponse","presenceGetResponse","handleLoadUsersList","page","presenceGetResponseUserList","cnt","elm","abort","handleClickAvailable","handleClickUnavailable","handleOpenUsersModal","WidgetQuickSurvey","WidgetQuickSurveyEditor","WrapperContainer","withPadding","JRCWidgetQuickSurveyWrapper","userResponses","totalRespondent","totalResponse","userLoggedResponses","quickSurveyGetResponse","handleWidgetGet","handleCloseSurvey","finalContent","handleProgressBarClick","quickSurveyRespond","multi","quickSurveyGetResponseUserList","userHasAlreadyVoted","canCloseSurvey","anonymize","seeResponseAfter","handleClickFile","newContent","quickSurveyAddEnty","WidgetUserProfile","JRCWidgetUserProfileWrapper","currentUser","pictureSize","displayMode","buttonName","getVisibleColumns","tableColumnsData","columns","filter","isVisible","WidgetTable","AbsoluteWrapper","WidgetExcelDatasourceTableWrapper","tableHeadColor","tableHeadTextColor","tableHeadIconColor","tableRowColor","tableRowTextColor","tableBorderRadius","tableSizedColumns","tableSizedColumnsWidth","datasourceData","setDatasourceData","datasourceModel","setDatasourceModel","ExcelDatasourceTable","Format","VIEW","model","rows","WidgetDatasourceTableWrapper","datasourceSort","setDatasourceSort","order","datasourceType","setDatasourceType","datasourceIdentifier","setDatasourceIdentifier","DatasourceTable","rtConditions","rtAudience","rtLastObject","fetchDatasource","sort","datasource","tableDefaultSortOrder","tableDefaultSortName","UILicenseRequired","WidgetLicenseWrapper","hook","selectHook","hasLicense","WidgetWelcome","JRCWidgetWelcomeWrapper","lineBreak","JRCWidgetExtensionWrapper","extensionName","uuid","J","react","require","anchorId","CSSWidgetWithTitle","DisplayWidget","cannotDisplayComponent","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetLuccaAbsenceType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetExcelDatasourceTableType","ensureWidgetDatasourceTableType","ensureWidgetPresenceType","ensureWidgetQuickSurveyType","ensureWidgetCalendarCalDavType","ensureWidgetContactCardDavType","ensureWidgetEmailsImapType","ensureWidgetUserProfileType","ensureWidgetWelcomeType","ensureWidgetExtensionType","CSSWidgetLayer","opacity","pointerEvents","BETA_JRCDoubleClick","WidgetLayer","layers","ids","layer","Layer","LayerWidget","layerId","visible","locked","top","left","x","context","DraggableHandler","onMouseUp","updateLayer","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseDown","event","nativeEvent","clientX","clientY","handleMouseMove","dx","dy","handleMouseUp","document","onMouseDown","WidgetState","inset","display","flex","justifyContent","alignItems","hover","WrapperEditMode","WidgetWrapperCoreEditHover","def","WidgetStyleWrapper","borderColor","borderWidth","borderStyle","Number","WidgetIcon","CSSIconAbsoluteA","JRCWidgetIconWrapper","rel","maxValue","WidgetWrapperCore","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidgetObject","registerWidget","setEditableWidgetId","setEditableIndex","CSSCommentsBlocWidgetWrapper","JRCMessage","CommentsBlocAddCommentWidgetsWrapper","flushedWidgets","selectFlushedWidgets","CommentsBlocCommentWidgetsWrapper","handleWidgetUpdate","useGifsModal","onSelect","gifs","GifsSelector","GifsModal","setLoading","setGifs","setQuery","q","offset","getGifs","prev","onSelectGif","onSearch","onReachEnd","JRCCommentsBloc","CommentsBlocWrapper","CommentsBloc","canComment","commentType","socialQuestion","setWidgets","widgetIds","selectWidgets","tinyMCEExtendedOptions","selectTinyMCEExtendedOptions","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","fileBank","widgetHook","socialQuestionOptions","setSocialQuestionOptions","reportProps","setReportProps","gifsModalOpen","closeGifsModal","extGifs","isGifsActive","useCommentRT","idComments","reactSocket","socket","rtHandlers","getCommentsLikeRTHandlers","handler","onMessage","function","offMessage","fetchComments","onComment","params","finalWidget","some","addComment","_widgets","registerWidgetObjectRights","rights","_right","comments","onCommentUpdate","commentToUpdate","idComment","updateComment","onCommentDelete","deleteComment","isWidgetActive","autorize","canCreateWidget","create","widgetListComponent","newWidgetsWrapperComponent","existingWidgetsWrapperComponent","handleWidgetRemove","tinyMCEConfig","toolbar","commentsToolbar","highlightFields","userHighlightFields","userAccountStatus","userModel","m","onGetHashError","activeDrives","utils","buildDrivesArrayFromObject","drives","drive","filebank","fileIntegrity","global","questionAnswer","onSelectResponse","responseId","isResolved","onUnselectResponse","onReport","AppsDropdownItem","AppsDropdownItemLink","font","FlexBox","DropDown","CalendarHeader","animatedMeeting","calendarApp","surveyDate","weight","withBorder","trigger","Dropdown","IconButton","InputSelectRaw","InputCheckboxRaw","Label","InputWrapper","DropdownContainer","CalendarToolbar","viewsOptions","calendarApi","navigateWithQuery","setView","setCreationType","setExportModalOpen","types","selectCalendarEvents","animatedMeetingHook","meeting","boardCard","createCalendarEventOptions","viewOptionEntries","Fragment","next","tooltip","noMargin","colorVariant","badgeNumber","labelPosition","checkboxMode","setTypes","Calendar","CommentsContainer","Header","CalendarWrapper","views","withHeader","withToolbar","fluid","navigate","useNavigate","getCalendarRTHandlers","dates","pendingStatusChanges","setCalendarApi","eventToUpdate","setEventToUpdate","isExportModalOpen","globalDefaultView","defaultView","urlQuery","URLSearchParams","search","queries","set","onSuccess","handleChangeView","handleChangeDates","end","formatDate","setDates","creationType","split","fullScreen","events","calendar","eventModalExtraComponent","deportedToolbar","onChangeLabel","onCalendarApiInit","onChangeDates","onChangeView","onDeleteEvent","onClickUpdateEvent","onUpdateStatus","changeResponse","isUpdateStatusLoading","psc","eventId","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditorMask","EDITOR_WIDTH","CSSEditor","CSSEditorContent","CSSEditorTab","CSSEditorIsBusy","CSSEditorIsLocked","CSSEditorMenu","CSSEditorMenuButton","EditorPopup","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetDatasourceTableEditor","WidgetExcelDatasourceTableEditor","WidgetPresenceEditor","WidgetLuccaAbsenceEditor","WidgetEmailsImapEditor","WidgetContactCardDavEditor","WidgetCalendarCalDavEditor","WidgetUserProfileEditor","WidgetWelcomeEditor","WidgetExtensionEditor","Editor","onSaveCallback","onSave","handleHookIsActive","getState","flushEditor","onStateChange","states","onOpen","registerEditorPopup","jamespot","network","wedoc","handleStart","handleCatch","handleFinally","override","application","EditorPosition","setEditorPosition","InputColorRaw","Fieldset","EditorInputColor","palettes","colors","headerColor","green","navy","overseas","transparentHexa","JRCInputNumber","EditorInputNumber","EditorInputSelect","optionFromInitialValue","select","hideDeleteIcon","EditorTabWrapper","wrapper","widgetContext","selectWidgetContext","setWidgetTitleStyle","colorValue","backgroundColorValue","fontSizeValue","fontWeightValue","textAlignValue","EditorIsBusy","EditorIsLocked","EditorSave","EditorTabWidgetSelection","setWidgetWrapperStyle","paddingValue","borderRadiusValue","borderStyleValue","borderColorValue","borderWidthValue","EditorTabDisplayLevel","displayLevel","OVERRIDE_SAVE","EditorWrapper","enableWidgetLevel","tabs","enable","panel","useWrapper","useSelection","useEditor","defaultTab","currentTab","setCurrentTab","setTimeout","tab","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","EditorsPortal","flush","editors","selectEditors","Empty","FullPageLayout","Suspense","fallback","Outlet","useAI","hooks","MagicWandHook","menuItems","PrepareAndSetQuery","fetch","AICapabilities","develop","summarize","tldr","en","es","formal","funny","jia","JRCInputTinyMCE","JRCInputTinyMCEWithExt","extAI","isAIActive","gifsExt","extArray","onMentionsQueryError","JRCInputTinyMCERaw","JRCInputTinyMCEWithExtRaw","JRCInputAudience","JRCModal","ModalAudience","warningMessage","asyncPromise","inputValue","autocomplete","searchable","InputDateTime","InputTextRaw","IconButtonWrapper","ModalSchedule","urlBase","selectUrlBase","form","scheduleDate","padStartTwoDigits","getHours","getMinutes","permalinkId","onSubmitHandler","useWatch","permalink","srOnly","navigator","clipboard","writeText","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","mainColumnProps","pathname","useLocation","ROUTES_ARRAY","activeTab","setActiveTab","key","absolutePath","group","activeRoute","route","paths","reduce","previousValue","currentValue","pattern","isMatch","matchPath"],"sourceRoot":""}