@reltio/remotes 1.4.1621 → 1.4.1623
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.
- package/1039.js +1 -1
- package/1146.js +1 -1
- package/1148.js +1 -1
- package/1334.js +1 -1
- package/1425.js +1 -1
- package/1572.js +1 -1
- package/1572.js.map +1 -1
- package/1664.js +1 -1
- package/1707.js +1 -1
- package/1790.js +1 -1
- package/1840.js +1 -1
- package/1925.js +1 -1
- package/1925.js.map +1 -1
- package/2049.js +1 -1
- package/2066.js +1 -1
- package/2066.js.map +1 -1
- package/2201.js +1 -1
- package/2400.js +1 -1
- package/2400.js.map +1 -1
- package/2404.js +1 -1
- package/2404.js.map +1 -1
- package/2463.js +1 -1
- package/2641.js +1 -1
- package/2641.js.map +1 -1
- package/3096.js +1 -1
- package/3348.js +1 -1
- package/3358.js +1 -1
- package/3358.js.map +1 -1
- package/3373.js +1 -1
- package/3381.js +1 -1
- package/3383.js +1 -1
- package/3463.js +1 -1
- package/3469.js +1 -1
- package/3538.js +1 -1
- package/3538.js.map +1 -1
- package/356.js +1 -1
- package/3875.js +1 -1
- package/3902.js +1 -1
- package/3902.js.map +1 -1
- package/3926.js +1 -1
- package/3926.js.map +1 -1
- package/415.js +1 -1
- package/4212.js +1 -1
- package/4390.js +1 -1
- package/4481.js +1 -1
- package/4703.js +1 -1
- package/4780.js +1 -1
- package/4806.js +1 -1
- package/4838.js +1 -1
- package/50.js +1 -1
- package/5034.js +1 -1
- package/5039.js +1 -1
- package/5053.js +1 -1
- package/5108.js +1 -1
- package/5163.js +1 -1
- package/5163.js.map +1 -1
- package/5617.js +1 -1
- package/6020.js +1 -1
- package/6173.js +1 -1
- package/6228.js +1 -1
- package/6280.js +1 -1
- package/6287.js +1 -1
- package/6531.js +1 -1
- package/6606.js +1 -1
- package/6606.js.map +1 -1
- package/6799.js +1 -1
- package/6844.js +1 -1
- package/6853.js +1 -1
- package/6860.js +1 -1
- package/6903.js +1 -1
- package/7340.js +1 -1
- package/735.js +1 -1
- package/7422.js +1 -1
- package/7626.js +1 -1
- package/764.js +1 -1
- package/7896.js +1 -1
- package/8168.js +1 -1
- package/820.js +1 -1
- package/8207.js +1 -1
- package/8322.js +1 -1
- package/8481.js +2 -0
- package/8481.js.map +1 -0
- package/8565.js +1 -1
- package/8741.js +1 -1
- package/9016.js +1 -1
- package/9028.js +1 -1
- package/9028.js.map +1 -1
- package/9283.js +1 -1
- package/9309.js +1 -1
- package/9328.js +1 -1
- package/9387.js +1 -1
- package/9719.js +1 -1
- package/9736.js +1 -1
- package/9861.js +1 -1
- package/987.js +1 -1
- package/99.js +1 -1
- package/9945.js +2 -0
- package/9945.js.map +1 -0
- package/9960.js +1 -1
- package/main.js +1 -1
- package/package.json +1 -1
- package/remoteEntry.js +1 -1
- package/remoteEntry.js.map +1 -1
- package/3727.js +0 -2
- package/3727.js.map +0 -1
- package/673.js +0 -2
- package/673.js.map +0 -1
package/3926.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3926.js","mappings":"sqBAEA,MAAMA,GAAYC,E,SAAAA,aAAW,KAAM,CAC/BC,sBAAuB,CACnBC,SAAU,EACVC,OAAQ,OACRC,YAAa,OAEjBC,KAAM,CACFC,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,QAAS,OACTC,cAAe,SACfC,SAAU,cCPZC,EAAsB,IAYfC,EAAwB,IAA0E,IAAzE,cAACC,EAAD,SAAgBC,EAAhB,aAA0BC,EAA1B,SAAwCC,EAAxC,WAAkDC,GAAuB,EAC3G,MAAMC,EAAStB,KAET,oBAACuB,EAAD,0BAAsBC,IAA6BC,EAAAA,EAAAA,GAAwBR,IAC3E,MAACS,EAAQX,GAAuBQ,GAAuB,GACvDI,EAASN,IAAcE,MAAAA,OAAJ,EAAIA,EAAqBI,QAC5CC,IAAmBC,EAAAA,EAAAA,OAAMF,KAAYP,EAErCU,GAAuBC,EAAAA,EAAAA,cACxBC,IACGR,EAA0BQ,KAE9B,CAACR,IAGCS,GAAeF,EAAAA,EAAAA,cAChBG,IAEGJ,EAAqB,CAACH,OADJA,IAAWO,EAAQ,KAAOA,MAGhD,CAACP,EAAQG,IAGPK,GAAcJ,EAAAA,EAAAA,cAAY,KAC5BD,EAAqB,CAACH,OAAQ,SAC/B,CAACG,IAEEM,GAAuBL,EAAAA,EAAAA,cACzB,IAAY,IAAX,KAACM,GAAU,EACRP,EAAqB,CAACJ,MAAOW,MAEjC,CAACP,IAGL,OACI,oCACI,kBAACQ,EAAA,EAAD,CACIC,UAAWjB,EAAOpB,sBAClBsC,QAAQ,SACRC,YAAY,WACZJ,KAAMT,EAAkBF,EAAQ,EAChCgB,QApDQ,IAqDRC,QApDQ,IAqDRC,YAAahB,EACbiB,SAAUT,EACVU,iBAAkB,MAElB,yBAAKP,UAAWjB,EAAOhB,MAAOY,EAAS,IACvC,yBAAKqB,UAAWjB,EAAOhB,OAAOyC,EAAAA,EAAAA,cAAa7B,EAAS,GAAI,CAACS,OAAAA,EAAQqB,QAASb,MAE9E,kBAACc,EAAA,EAAD,CACI7B,SAAUA,EACVD,aAAcA,EACd+B,cAAejB,EACfkB,cAAexB,MAM/BX,EAAsBoC,YAAc,yB,mGC7E7B,MAAMpD,GAAYC,E,SAAAA,aAAYoD,IAAD,CAChCC,UAAW,CACP1C,QAAS,OACTC,cAAe,SACf0C,WAAY,EACZ7B,MAAO,OACP8B,WAAY,MACZC,gBAAiBJ,EAAMK,QAAQC,WAAWC,MAC1CC,UAAW,8FAEflC,OAAQ,CACJ8B,iBAAiBK,EAAAA,EAAAA,IAAMT,EAAMK,QAAQlB,QAAQuB,KAAM,KACnDC,MAAOX,EAAMK,QAAQlB,QAAQuB,KAC7B,UAAW,CACPE,QAAS,KACT1D,SAAU,WACVH,OAAQ,OACRsB,MAAO,MACP+B,gBAAiBJ,EAAMK,QAAQlB,QAAQuB,KACvCtD,KAAM,OACNyD,aAAc,gBAGtBC,cAAe,CACX5D,SAAU,WACVmB,MAAO,OACPtB,OAAQ,OACRQ,QAAS,OACTwD,WAAY,SACZC,eAAgB,SAChBH,aAAc,MACdI,OAAQ,UACRN,MAAOX,EAAMK,QAAQa,KAAKC,e,okBCjB3B,MAAMvB,EAAmB,IAOnB,IAPoB,SAC7B7B,EAD6B,aAE7BD,EAF6B,cAG7BgC,EAH6B,UAI7BZ,EAJ6B,cAK7BW,EAL6B,QAM7BuB,EAAU,IACD,EACT,MAAMnD,EAAStB,KACT,OAAC2B,EAAD,cAASwC,GAAuCM,EAArBC,EAAjC,EAAsDD,EAAtD,4BAEA,OACI,yBAAKlC,UAAWoC,GAAAA,CAAWrD,EAAOgC,UAAWf,IACxCpB,EAAayD,KAAI,IAA0B,IAAzB,GAACC,GAAwB,EAAjBC,EAAiB,YACxC,OACI,kBAACC,EAAA,EAAD,KACQD,EADR,CAEI1D,SAAUA,EACVqD,QAASC,EACTrC,KAAK,IACL2C,IAAKH,EACLtC,UAAWoC,GAAAA,CACP,CAAC,CAACA,GAAAA,CAAWrD,EAAOK,OAAQA,IAAUwB,IAAkB0B,GACxDvD,EAAO6C,cACPA,GAEJc,QAAS,IAAM/B,EAAc2B,GAC7B,iBAAiB,oCAAmCA,a,wDCtCrE,MAAMK,E,MAA8BC,GAAAA,cAA+C,CACtFC,SAAU,GACVvC,SAAU,SAGdqC,EAA4B9B,YAAc,8BAEnC,MAAM3B,EAA2BR,IACpC,MAAM,SAACmE,EAAD,SAAWvC,IAAYwC,EAAAA,EAAAA,YAAWH,IAAgC,GAClE3D,EAAsB6D,MAAAA,OAAH,EAAGA,EAAWnE,GASvC,MAAO,CAACO,2BAP0BO,EAAAA,EAAAA,cAC7BC,IACGa,EAAS5B,EAAee,KAE5B,CAACf,EAAe4B,IAGetB,oBAAAA,K,gDCxBhC,MAAM+D,EAAoBC,IAC7B,MAAOC,EAAUC,IAAeC,EAAAA,EAAAA,WAAS,IAClCC,EAAYC,IAAiBF,EAAAA,EAAAA,UAAoC,IAWxE,OATAG,EAAAA,EAAAA,YAAU,KACNN,IACKO,MAAMH,IACHC,EAAcD,GAAc,OAE/BG,MAAMC,GAAMN,GAAY,KACxBO,OAAOD,GAAMN,GAAY,OAC/B,IAEI,CAACD,SAAAA,EAAUG,WAAAA,K,kcCbf,MAAM3F,GAAYC,EAAAA,EAAAA,YAAW,CAChCgG,OAAQ,CACJrF,QAAS,OACTC,cAAe,MACfuD,WAAY,SACZ8B,QAAS,YACTC,aAAc,kCAElBC,YAAa,CACT/F,YAAa,UCARgG,EAAiB,IAAoC,IAAnC,OAAC1E,EAAD,QAASqB,EAAT,KAAkBsD,GAAiB,EAC9D,MAAMhF,EAAStB,KACT,QAACiE,EAAD,MAAUsC,GAASD,EAAK3E,IAAW,GAEzC,OACI,oCACI,yBAAKY,UAAWjB,EAAO2E,QACnB,kBAAClB,EAAA,EAAD,CAAiBxC,UAAWjB,EAAO8E,YAAaI,KAAMC,EAAAA,QAAWxB,QAASjC,IACzEuD,GAEJtC,I,+CCrBN,IAAKyC,G,SAAAA,GAAAA,EAAAA,UAAAA,aAAAA,EAAAA,OAAAA,SAAAA,EAAAA,YAAAA,c,CAAAA,IAAAA,EAAAA,KCGZ,MAAMC,EAAaC,IAAgCC,EAAAA,EAAAA,OAAKjC,EAAAA,EAAAA,MAAIkC,EAAAA,EAAAA,MAAK,UAAWC,EAAAA,IAAzBF,CAA8BD,G,wcCOjF,MAiCA,EAjCkB,QAAC,KAACI,EAAD,MAAOtF,EAAP,OAActB,GAAf,SACd6G,EAAAA,EAAAA,UAAQ,KACJ,IAAKvF,IAAUtB,EAAQ,MAAO,CAAC8G,MAAO,GAAIN,MAAO,IAEjD,MAeMO,EDvBC,WAGX,IAAIC,EAAY,GACZC,EAAwB,GACxBC,EAAwB,GACxBC,EAAc,EACdlF,EAAO,CAAC,EAAG,GAEf,SAASmF,EAAT,GAA4C,IAA5B,MAACN,EAAD,MAAQN,GAAoB,EACxC,MAAMa,EAAQ,CAACP,MAAAA,EAAON,MAAAA,GAOtB,OA8DJ,YAAsD,IAA5B,MAACM,EAAD,MAAQN,GAAoB,EAClDM,EAAMQ,SAASC,IACXA,EAAKC,YAAc,GACnBD,EAAKE,YAAc,MAEvBjB,EAAMc,SAASI,IACXA,EAAKC,OAAOH,YAAYI,KAAKF,GAC7BA,EAAKG,OAAOJ,YAAYG,KAAKF,MA3EjCI,CAAiBT,GAgFrB,YAAgD,IAArB,MAACP,GAAoB,EAC5CA,EAAMQ,SAASC,IACXA,EAAKQ,MAAQC,KAAKC,IAAI1B,EAAUgB,EAAKC,aAAcjB,EAAUgB,EAAKE,iBAjFtES,CAAkBb,GAyFtB,YAAkD,IAArB,MAACP,GAAoB,EAC9C,IAAKA,EAAMqB,OAAQ,OACnB,IACIC,EADAC,EAAiB,CAACvB,EAAM,IAExBwB,EAAI,EAER,KAAOD,EAAeF,QAClBC,EAAY,GACZC,EAAef,SAASC,IACpBA,EAAKe,EAAIA,EACTf,EAAKgB,GAAKvB,EACVO,EAAKE,YAAYH,SAASI,IAClBU,EAAUI,QAAQd,EAAKC,QAAU,GACjCS,EAAUR,KAAKF,EAAKC,cAIhCU,EAAiBD,IACfE,EAON,GAJAxB,EAAMQ,SAASC,IACXA,EAAKe,EAAIA,EAAI,EAAIf,EAAKe,KAGtBA,EAAI,EAAG,CACP,MAAMG,GAAKxG,EAAK,GAAK,EAAI+E,EA9HX,KA8HyCsB,EAAI,GAC3DxB,EAAMQ,SAASC,IACNA,EAAKC,aAA0C,GAA3BD,EAAKC,YAAYW,OACrCZ,EAAKe,GAAKG,EADwClB,EAAKe,EAAIrG,EAAK,GAAK+E,UAI9EF,EAAM,GAAGwB,EAAIrG,EAAK,GAAK+E,EACvBF,EAAM,GAAGwB,EAAIxB,EAAM,GAAGwB,EArIR,GAqI4BtB,EAzH9C0B,CAAoBrB,GA6HxB,YAAuD,IAA5B,MAACP,EAAD,MAAQN,GAAoB,EACnD,MAAMmC,GAAiBlC,EAAAA,EAAAA,OACnBmC,EAAAA,EAAAA,UAAQlC,EAAAA,EAAAA,MAAK,MACbmC,EAAAA,SACAC,EAAAA,EAAAA,OAAK,CAACC,EAAGC,IAAMD,EAAE,GAAKC,EAAE,MACxBxE,EAAAA,EAAAA,MAAIyE,EAAAA,EAAAA,KAAI,IAJWxC,CAKrBK,IAsBF,WACI,IAAIoC,GAAKzC,EAAAA,EAAAA,OACLjC,EAAAA,EAAAA,MAAKsC,IAAW7E,EAAK,IAAM6E,EAAMqB,OAAS,GAAKhB,GAAeZ,EAAUO,MACxEqC,EAAAA,EAAAA,QAAOnB,KAAKoB,IAAKC,EAAAA,GAFZ5C,CAGPkC,GAEF,MAAMS,GAAM3C,EAAAA,EAAAA,OACRjC,EAAAA,EAAAA,MAAK+C,IAAD,aAAUA,EAAKQ,QAAS,UAAAR,EAAKE,mBAAL,eAAkBU,SAAU,OACxDgB,EAAAA,EAAAA,QAAOnB,KAAKoB,IAAKC,EAAAA,GAFT5C,CAGVK,GAEFoC,EAAKlB,KAAKC,IAAID,KAAKoB,IAAIF,EAAIjC,EAAwBmC,GAAMlC,EAAwBkC,GAEjFT,EAAerB,SAASR,IACpBA,EAAMQ,SAAQ,CAACC,EAAM+B,KACjB/B,EAAKgC,EAAID,EACT/B,EAAKiC,GAAKjC,EAAKQ,MAAQmB,QAI/B1C,EAAMc,SAASI,IACXA,EAAK8B,GAAK9B,EAAKK,MAAQmB,MAxC/BO,GA6CId,EAAerB,SAASR,IACpB,IAAIS,EACAiC,EAEAF,EADAI,EAAK,EAET,MAAMC,EAAI7C,EAAMqB,OAIhB,IADArB,EAAMgC,MAAK,CAACC,EAAGC,IAAMD,EAAEQ,EAAIP,EAAEO,IACxBD,EAAI,EAAGA,EAAIK,IAAKL,EACjB/B,EAAOT,EAAMwC,GACbE,EAAKE,EAAKnC,EAAKgC,EACXC,EAAK,IAAGjC,EAAKgC,GAAKC,GACtBE,EAAKnC,EAAKgC,EAAIhC,EAAKiC,GAAKrC,EAK5B,GADAqC,EAAKE,EAAKvC,EAAclF,EAAK,GACzBuH,EAAK,EAIL,IAHAE,EAAKnC,EAAKgC,GAAKC,EAGVF,EAAIK,EAAI,EAAGL,GAAK,IAAKA,EACtB/B,EAAOT,EAAMwC,GACbE,EAAKjC,EAAKgC,EAAIhC,EAAKiC,GAAKrC,EAAcuC,EAClCF,EAAK,IAAGjC,EAAKgC,GAAKC,GACtBE,EAAKnC,EAAKgC,KApE1B,MAAMtB,GAAMxB,EAAAA,EAAAA,OACRjC,EAAAA,EAAAA,MAAKsC,IAAWA,EAAMqB,OAAS,GAAKhB,GAAcR,EAAAA,EAAAA,MAAInC,EAAAA,EAAAA,MAAK+C,GAASA,EAAKiC,IAAI1C,OAC7EqC,EAAAA,EAAAA,QAAOnB,KAAKC,IAAK,GAFTxB,CAGVkC,GAEIiB,GAAM3H,EAAK,GAAKgG,GAAO,EAE7BU,EAAerB,SAASR,IACpB,MAAM,EAACyC,EAAD,GAAIC,IAAMK,EAAAA,EAAAA,MAAK/C,GACf4C,EAAKzH,EAAK,IAAMsH,EAAIC,GAC1B1C,EAAMQ,SAASC,IACXA,EAAKgC,GAAKG,EACNE,EAAK,IAAGrC,EAAKgC,GAAKK,SApJ9BE,CAAkBzC,GAClB0C,EAAkB1C,GAmRtB,YAAgD,IAArB,MAACP,GAAoB,GACrBL,EAAAA,EAAAA,OACnBmC,EAAAA,EAAAA,UAAQlC,EAAAA,EAAAA,MAAK,MACbmC,EAAAA,SACAC,EAAAA,EAAAA,OAAK,CAACC,EAAWC,IAAcA,EAAE,GAAKD,EAAE,MACxCvE,EAAAA,EAAAA,MAAIyE,EAAAA,EAAAA,KAAI,IAJWxC,CAKrBK,GAEaQ,SAASR,KACpBA,EAAQA,EAAMkD,SAASlB,MAAK,CAACC,EAAGC,IAAMD,EAAEQ,EAAIP,EAAEO,KACxCjC,SAAQ,CAACC,EAAM+B,KAAM,MACvB,aAAI/B,EAAKC,mBAAT,OAAI,EAAkBW,OAAQ,WAC1B,MAAM,OAACN,EAAD,GAASoC,EAAT,GAAaT,IAAMK,EAAAA,EAAAA,MAAKtC,EAAKC,aACnC,IAAIkC,EAAK7B,EAAO0B,EAAIU,EAAKT,EAAKjC,EAAKiC,IAC/B,UAAA1C,EAAMwC,EAAI,UAAV,eAAchB,IAAKf,EAAKe,GAAKoB,GAAK,UAAA5C,EAAMwC,EAAI,UAAV,eAAcC,IAAd,UAAkBzC,EAAMwC,EAAI,UAA5B,aAAkB,EAAcE,IAAKrC,IACvEuC,EAAK5C,EAAMwC,EAAI,GAAGC,EAAIzC,EAAMwC,EAAI,GAAGE,GAAKrC,GACxCI,EAAKgC,EAAIG,IACTnC,EAAKgC,EAAIG,UAnSzBQ,CAAkB7C,GACXA,EAgNX,SAAS0C,EAAT,GAAgD,IAArB,MAACjD,GAAoB,GACrBL,EAAAA,EAAAA,OACnBmC,EAAAA,EAAAA,UAAQlC,EAAAA,EAAAA,MAAK,MACbmC,EAAAA,SACAC,EAAAA,EAAAA,OAAK,CAACC,EAAWC,IAAcD,EAAE,GAAKC,EAAE,MACxCxE,EAAAA,EAAAA,MAAIyE,EAAAA,EAAAA,KAAI,IAJWxC,CAKrBK,GAEaQ,SAASR,IACpBA,EAAMQ,SAASC,IAAS,QACpB,aAAIA,EAAKE,mBAAT,OAAI,EAAkBU,OAAQ,CAC1B,MAAMgC,EAAS,GACTC,EAAc7C,EAAKE,YAAYjD,KAAK6F,GAAMA,EAAEC,UAAUC,OACtDC,EAAc,GACpBjD,EAAKE,YAAYH,SAAQ,SAAU+C,IACA,GAA3BI,KAAKjC,QAAQ6B,EAAE1C,SAAe8C,KAAK7C,KAAKyC,EAAE1C,UAC/C6C,GACH,IAAK,IAAIlB,EAAI,EAAGA,EAAIkB,EAAYrC,OAAQmB,IACpC,IAAK,IAAIoB,EAAI,EAAGA,EAAIF,EAAYlB,GAAG9B,YAAYW,OAAQuC,IAAK,CACxD,MAAMC,EAAQP,EAAY5B,QAAQgC,EAAYlB,GAAG9B,YAAYkD,GAAGJ,UAAUC,OAC5D,GAAVI,GAAaR,EAAOvC,KAAKL,EAAKE,YAAYkD,IAEtDpD,EAAKE,YAAc0C,EAGvB,aAAI5C,EAAKC,mBAAT,OAAI,EAAkBW,OAAQ,OAC1B,MAAMgC,EAAS,GACf,aAAI5C,EAAKE,mBAAT,OAAI,EAAkBU,OAAQ,CAC1B,MAAMiC,EAAc7C,EAAKC,YAAYhD,KAAK6F,GAAMA,EAAEC,UAAUC,OAC5D,IAAK,IAAIjB,EAAI,EAAGA,EAAI/B,EAAKE,YAAYU,OAAQmB,IAAK,CAC9C,MAAMqB,EAAQP,EAAY5B,QAAQjB,EAAKE,YAAY6B,GAAGgB,UAAUC,OAClD,GAAVI,GAAaR,EAAOvC,KAAKL,EAAKC,YAAYmD,KAItD,MAAMC,EAAeT,EAAO3F,KAAK6F,GAAMA,EAAEC,UAAUC,OAC7CM,EAAatD,EAAKC,YAAYsD,QAAO,SAAUT,GACjD,OAA0C,GAAnCI,KAAKjC,QAAQ6B,EAAEC,UAAUC,QACjCK,GAGH,GADArD,EAAKC,YAAcqD,EAAWb,OAAOG,GACjCA,EAAOhC,OAAS,EAAG,CACnB,IAAI4C,EAAoB,EACxB,IAAK,IAAIzB,EAAI,EAAGA,EAAIuB,EAAW1C,OAAQmB,IAAKyB,GAAqBF,EAAWvB,GAAGE,GAC/EjC,EAAKwD,kBAAoBA,UAMzCjE,EAAMQ,SAASC,IACX,IAAIyD,EAAK,EACLf,EAAK1C,EAAKwD,mBAAqB,SAC5BxD,EAAKwD,kBACZxD,EAAKC,YAAYF,SAASI,IACtBA,EAAKsD,GAAKA,EACVA,GAAMtD,EAAK8B,MAEfjC,EAAKE,YAAYH,SAASI,IACtBA,EAAKuC,GAAKA,EACVA,GAAMvC,EAAK8B,SA6BvB,OAtSApC,EAAOJ,UAAY,IAAMA,EACzBI,EAAO6D,aAAgB3J,IAAoB0F,GAAa1F,EAAQ8F,GAEhEA,EAAOD,YAAc,IAAMA,EAC3BC,EAAO8D,eAAkBpF,IAAsBqB,GAAerB,EAAUsB,GAExEA,EAAOH,sBAAwB,IAAMA,EACrCG,EAAO+D,yBAA4BnL,IAAqBiH,GAAyBjH,EAASoH,GAE1FA,EAAOF,sBAAwB,IAAMA,EACrCE,EAAOgE,yBAA4BpL,IAAqBkH,GAAyBlH,EAASoH,GAE1FA,EAAOnF,KAAO,IAAMA,EACpBmF,EAAOiE,QAAWC,IAAgCrJ,EAAOqJ,EAAUlE,GAEnEA,EAAOmE,OAAUlE,IACb0C,EAAkB1C,GACXA,GAGXD,EAAOM,KAAO,KACV,IAAI8D,EAAY,GAEhB,SAAS9D,EAAK+D,GACV,MAAMC,GAAYD,EAAE5D,OAAOL,aAA8C,GAA/BiE,EAAE5D,OAAOL,YAAYW,OAEzDwD,EAAKF,EAAE9D,OAAOW,EAAImD,EAAE9D,OAAOY,GAC7BqD,EAAKH,EAAE5D,OAAOS,EACduD,GAlDsC9C,IAA3BA,EAkDY4C,GAlDyB3C,IAA1BA,EAkDK4C,GAlD+BE,GAAM/C,GAAK,EAAI+C,GAAK9C,EAAI8C,GAmDlFC,EAAKF,EAAGL,GACRQ,EAAKH,EAAG,EAAIL,GACZ9B,EAAK+B,EAAE9D,OAAO4B,EAAIkC,EAAET,GANN,IAOdpB,EAAK6B,EAAE5D,OAAO0B,EAAIkC,EAAExB,GAPN,IA/CJ,IAAClB,EAAWC,EAuD1B,MAAMiD,EAAYP,EAEZ,GADC,IAAGE,EAAK5E,KAAa4C,MAAOgC,EAAK5E,KAAa4C,EAAK6B,EAAEjC,GAAK,MAGjE,OAAOE,IAAOE,EACP,IAAG+B,KAAMjC,2BACNkC,KAAMhC,IAAKqC,2BACXL,KAAMhC,EAAK6B,EAAEjC,GAAK,6BAClBmC,KAAMjC,EAAK+B,EAAEjC,GAAK,QACrB,IAAGmC,KAAMjC,0BACNqC,KAAMrC,KAAMsC,KAAMpC,KAAMgC,KAAMhC,IAAKqC,2BACnCL,KAAMhC,EAAK6B,EAAEjC,GAAK,6BAClBwC,KAAMpC,EAAK6B,EAAEjC,GAAK,OAAiBuC,KAAMrC,EAAK+B,EAAEjC,GAAK,4BACtDmC,KAAMjC,EAAK+B,EAAEjC,GAAK,QAS/B,OANA9B,EAAK8D,UAAY,SAAU7F,GACvB,OAAKuG,UAAU/D,QACfqD,GAAa7F,EACN+B,GAFuB8D,GAK3B9D,GA+OJN,ECnSkBA,GAChB6D,aAAa,IACbC,eAAe,IACfG,QAAQ,CAACrL,EAAS,EAAGsB,EAAQ,IAE5B0F,EAAYD,EAAaC,YACzBmF,EAAOpF,EAAaW,OAEpB0E,EAvBexF,CAAAA,IACjB,MAAMyF,EAAYzF,EAAKE,MAAMtC,KAAK+C,GAAD,KAAeA,KAC1C+E,EAAeC,IACjB,MAAM5B,EAAQ/D,EAAKE,MAAM0B,QAAQ+D,GACjC,OAAOF,EAAU1B,IAGf6B,EAAY5F,EAAKJ,MAAMhC,KAAKkD,GAAD,KAC1BA,EAD0B,CAE7BC,OAAQ2E,EAAY5E,EAAKC,QACzBE,OAAQyE,EAAY5E,EAAKG,YAE7B,MAAO,CAACf,MAAOuF,EAAW7F,MAAOgG,IAWpBC,CAAY7F,IACvB,MAACE,EAAD,MAAQN,GAAqBO,EAAaqF,GAEhD,MAAO,CAACtF,MAAAA,EAAON,MAAAA,EAAOQ,UAAAA,EAAWmF,KAAAA,KAClC,CAACvF,EAAM5G,EAAQsB,K,gDCvCf,MAAM1B,IAAYC,EAAAA,EAAAA,YAAW,CAChC6M,aAAc,CACVC,WAAY,IACZC,SAAU,OACVC,WAAY,OACZC,cAAe,SACfC,aAAc,MACdC,WAAY,QAEhBC,WAAY,CACRzM,QAAS,OACTwD,WAAY,SACZ4I,SAAU,OACVC,WAAY,OACZF,WAAY,SACZ,qBAAsB,CAClBI,aAAc,QAGtBG,YAAa,CACTN,SAAU,OACVhJ,MAAO,sBACP3D,YAAa,OAEjBsH,KAAM,CACF4F,OAAQ,UACRC,YAAa,EACbC,cAAe,KAEnBC,SAAU,CACNC,UAAW,gBACXP,WAAY,OACZJ,SAAU,QAEdY,eAAgB,CACZ1H,QAAS,EACT2H,UAAW,gBCFnB,GAvB4B,IAAmC,IAAlC,KAACC,EAAD,KAAOC,EAAP,SAAa7M,GAAqB,EAC3D,MAAMI,EAAStB,KACT8M,EACF,6BACI,0BAAMvK,UAAWjB,EAAOwL,cAAekB,IAAAA,KAAU,kBACjD,yBAAKzL,UAAWjB,EAAO+L,YACnB,kBAACY,EAAA,EAAD,CAAmB1L,UAAWjB,EAAOgM,cACpCU,IAAAA,KAAUD,EAAM,UAErB,yBAAKxL,UAAWjB,EAAO+L,YACnB,kBAACa,GAAA,EAAD,CAAY3L,UAAWjB,EAAOgM,cAC7BQ,IAKb,OACI,kBAACK,EAAA,EAAD,CAAmB5H,MAAOuG,EAAcsB,UAAW,OAC9ClN,I,gBC/Bb,SAASmN,KAA2Q,OAA9PA,GAAWC,OAAOC,QAAU,SAAUtG,GAAU,IAAK,IAAIyB,EAAI,EAAGA,EAAI4C,UAAU/D,OAAQmB,IAAK,CAAE,IAAI3B,EAASuE,UAAU5C,GAAI,IAAK,IAAI1E,KAAO+C,EAAcuG,OAAOE,UAAUC,eAAeC,KAAK3G,EAAQ/C,KAAQiD,EAAOjD,GAAO+C,EAAO/C,IAAY,OAAOiD,GAAkBoG,GAASM,MAAM9D,KAAMyB,WAGhT,SAAgB,QAAC,OACfhL,EAAS,IADK,EAEXsN,E,kXAFW,sBAGVzJ,IAAAA,cAAoB,MAAOkJ,GAAS,CACxC3M,MAAO,KACPtB,OAAQ,KACRyO,QAAS,YACTC,QAAS,MACTC,MAAO,6BACPC,WAAY,gCACXJ,GAAQzJ,IAAAA,cAAoB,OAAQ,KAAMA,IAAAA,cAAoB,OAAQ,CACvE0G,EAAG,uNACHhH,GAAI,oBACDM,IAAAA,cAAoB,IAAK,CAC5BoI,OAAQ,OACRC,YAAa,IACbyB,KAAM,OACNC,SAAU,WACT/J,IAAAA,cAAoB,OAAQ,CAC7BN,GAAI,iBACJoK,KAAM,QACL9J,IAAAA,cAAoB,MAAO,CAC5BgK,UAAW,qBACRhK,IAAAA,cAAoB,OAAQ,CAC/BiK,YAAa,MACbH,KAAM,OACNI,KAAM,uBACNxD,EAAG,qBC0GL,GApHoB,IAAkG,IAAjG,KAAClE,EAAD,UAAOP,EAAP,iBAAkBkI,EAAlB,UAAoCC,EAApC,eAA+CC,EAA/C,UAA+DC,EAA/D,WAA0EC,GAAuB,EAClH,MAAMpO,EAAStB,MACR2P,EAAQC,IAAalK,EAAAA,EAAAA,UAAS,IAC9BmK,EAAUC,IAAepK,EAAAA,EAAAA,UAAS,MACnCqK,GAAUC,EAAAA,EAAAA,QAAO,OACjB,EACFtH,EADE,EAEFiB,EAFE,KAGFsG,EAHE,MAIFC,EAJE,YAKFrI,EALE,YAMFD,EACAuI,QAAQ,WAACC,EAAa,GAAd,OAAkBC,IAC1B1I,GACG2I,GAAkBF,GACnB,SAACG,EAAD,mBAAWC,EAAX,gBAA+BC,IAAmBC,EAAAA,EAAAA,IAAsBJ,GACxEtM,GAAQ2M,EAAAA,EAAAA,IAAkBL,GAC1BM,EAAkBR,MAAAA,GAAAA,EAAY7H,OAC9BX,EAAYwI,EAAW7H,OAAS,GAAG6C,GAAKxD,EAAYwI,EAAW7H,OAAS,GAAGqB,GAC3E,EAkCAiH,EAAa,IAAMf,EAAY,MAgBrC,OAVAjK,EAAAA,EAAAA,YAAU,KAAM,MACZ,MAAMiL,EAAanJ,EAAKiC,GAClBmH,GAAYhB,MAAAA,GAAA,UAAAA,EAASiB,eAAT,eAAkBC,cAAe,EAC/CH,EAAaC,GAAWnB,EAAUkB,EAAa,EAAIC,EAAY,KACpE,KAEHlL,EAAAA,EAAAA,YAAU,KACF6J,GAAgBG,GAAUgB,MAC/B,CAACnB,IAGA,uBAAG/B,UAAY,aAAYjF,KAAKiB,MAClB,SAATsG,EACG,0BAAMrG,IAAK,EAAGjB,GAAIgH,EAAQuB,IAAKnB,EAASxN,UAAWjB,EAAOoM,UACrDwC,GAAS,IAGd,oCACI,0BACI9P,OAAQwQ,EACRlP,MAAO,GACPa,UAAWjB,EAAOqG,KAClBsH,KAAMM,EAAagB,EAAW,sBAAwBvM,EAAS,UAC/DgB,IAAK,YACLmM,QAAS7B,GAAoBiB,EAAW,IAAO,EAC/Ca,aAAc,KACN9B,GAAkBkB,KAE1Ba,aAAc,KACN/B,GAAkBmB,KAE1BxL,QAASuK,EAAiB8B,EAAAA,GAtC3BC,GAAkCzB,EAAYyB,EAAEC,eAuC/CC,OAAQjC,EAAiB,UAAY,UACrC,iBAAe,6BAEnB,kBAACkC,EAAA,GAAD,CACIC,OAAQ9B,EACRA,SAAUA,EACV+B,aAAc,CAACC,SAAU,MAAOC,WAAY,SAC5C9O,QAAS6N,EACTpM,QAAS,CAACb,MAAOtC,EAAOsM,gBACxB,iBAAe,wBAEf,kBAAC,KAAD,CACIvL,KAAK,KACLyK,aAAckB,IAAAA,KAAU,WACxBxH,KAAMuL,GACN9M,QApDF,KAClBwK,EAAUQ,GACVY,UAqDehJ,MAAAA,IAAAA,EAAaU,SAxFP,MACrB,MAAMyJ,GAAUnL,EAAAA,EAAAA,OAAKjC,EAAAA,EAAAA,MAAIkC,EAAAA,EAAAA,MAAK,YAAYkC,EAAAA,EAAAA,UAAQlC,EAAAA,EAAAA,MAAK,SAAvCD,CAAiDgB,GAEjE,OAAOwI,MAAAA,OAAP,EAAOA,EAAQzL,KAAI,CAAC,EAAcmG,KAAU,IAAxB,KAACgD,EAAD,KAAOD,GAAiB,EACxC,MAAMmE,EAAUD,EAAQjE,GACxB,IAAKkE,EAAS,OAEd,MAAOC,EAAOC,GAAOF,EAAQ1I,QACzB,CAAC6I,EAAD,SAAM,YAACxK,GAAP,QAAwB,EACpB4B,EAAAA,EAAAA,MAAI6I,EAAAA,EAAAA,MAAKzK,GAAayC,GAAI+H,EAAI,KAC9B/J,EAAAA,EAAAA,MAAI4B,EAAAA,EAAAA,MAAKrC,GAAayC,IAAKJ,EAAAA,EAAAA,MAAKrC,GAAagC,GAAIwI,EAAI,OAEzD,CAAC3I,EAAAA,EAAU,IAGf,OACI,kBAAC,GAAD,CAAcqE,KAAMA,EAAMC,KAAMA,EAAM/I,IAAK,QAAU+F,GACjD,0BACI4C,UAAY,eAAcuE,KAC1B9R,OAAQ+R,EAAMD,EACdxQ,MAAO0F,EACP7E,UAAWjB,EAAOqG,KAClByH,YAAa,IACbH,KAAM,UACNkC,QAAS7B,GAAoBiB,EAAW,IAAO,SAgEzB+B,MCnG9C,GAnBoB,IAAsD,IAArD,KAACxK,EAAD,KAAOyE,EAAP,iBAAa+C,EAAb,UAA+BC,GAAsB,EACtE,MAAM,UAAC7E,GAAa5C,EACd9D,GAAQ2M,EAAAA,EAAAA,IAAkBjG,IAC1B,SAAC6F,EAAD,mBAAWC,EAAX,gBAA+BC,IAAmBC,EAAAA,EAAAA,IAAsBhG,GAC9E,OACI,0BACImB,EAAGU,EACH0C,KAAMM,EAAagB,EAAW,sBAAwBvM,EAAS,UAC/DmN,QAAS7B,GAAoBiB,EAAW,IAAO,EAC/Ca,aAAc,KACN9B,GAAkBkB,KAE1Ba,aAAc,KACN/B,GAAkBmB,QC8EtC,GAvFoB,IAAiF,IAAhF,MAAC/O,EAAD,OAAQtB,EAAR,KAAgB4G,EAAhB,mBAAsBuL,EAAtB,UAA0C9C,EAA1C,eAAqDD,GAA2B,EACjG,MAAOE,EAAY8C,IAAe9M,EAAAA,EAAAA,WAAS,IACpC+M,EAAaC,IAAgBhN,EAAAA,EAAAA,WAAS,IACtCiN,EAAeC,IAAoBlN,EAAAA,EAAAA,UAAS,IAC5CmN,EAASC,IAAcpN,EAAAA,EAAAA,UAAS,IACjC,MAACkB,EAAD,MAAQM,EAAR,UAAeE,EAAf,KAA0BmF,GAAQwG,EAAU,CAAC/L,KAAAA,EAAMtF,MAAAA,EAAOtB,OAAAA,KAEhEyF,EAAAA,EAAAA,YAAU,KACNiN,EAAW,GACXF,EAAiB,KAClB,CAAClR,EAAOtB,IAEX,MAAM4S,GAAc/L,EAAAA,EAAAA,UAChB,IACIC,EAAMtC,KAAI,CAAC+C,EAAMoD,IACb,kBAAC,GAAD,CACIuE,iBAAkBiD,EAClBhD,UAAWgD,EACX5K,KAAMA,EACNP,UAAWA,EACXpC,IAAM,cAAa+F,IACnByE,eAAgBA,EAChBC,UAAWA,EACXC,WAAYA,OAGxB,CAACxI,EAAOqL,EAAoBnL,EAAW1F,EAAOtB,EAAQsP,IAGpDuD,GAAchM,EAAAA,EAAAA,UAChB,IACIL,EAAMhC,KAAI,CAACkD,EAAMiD,IACb,kBAAC,GAAD,CACIuE,kBAAmBiD,EACnBhD,WAAYgD,EACZzK,KAAMA,EACNyE,KAAMA,EAAKzE,GACX9C,IAAM,cAAa+F,SAG/B,CAACwH,EAAoB3L,EAAO2F,IAG1B2G,EAAwBC,IAC1B,MAAM1S,EAAO0S,EAAMC,MACbP,EAAUpS,EAAOkS,EAEvB,OADAC,EAAiBnS,GACVoS,GAcLQ,EAAO,KACTX,GAAa,GACbF,GAAY,IAGVc,EAAgB5D,EAAa,OAAS,OACtC+B,EAAS/B,EAAa,OAAS,OAErC,OACI,yBACIhO,MAAOA,EACPtB,OAAQA,EACRqR,OAAQA,EACR8B,YAxBQJ,IACZA,EAAMK,iBACNd,GAAa,GACbQ,EAAqBC,IAsBjBM,YApBQN,IACZ,IAAKV,EAAa,OAClBD,GAAY,GACZ,MAAM/R,EAAOyS,EAAqBC,GAClCL,EAAWD,EAAUpS,IAiBjBiT,UAAWL,EACXhC,aAAcgC,GAEd,uBAAG1F,UAAY,aAAYkF,KAAWzS,EAAS,iBAAkBkT,cAAeA,GAC5E,2BAAIL,GACJ,2BAAID,M,yHC5FpB,MAAMW,IAAuBC,EAAAA,EAAAA,QACzB,CAACC,EAAsCnJ,KAClCmJ,GAAuBA,EAAoBC,MAAKC,EAAAA,EAAAA,KAAarJ,MAGhEsJ,IAA4BJ,EAAAA,EAAAA,QAAM,CAACC,EAAsCI,KACpEC,EAAAA,EAAAA,QACH,CACI9D,YAAYlF,EAAAA,EAAAA,QAAOyI,GAAqBE,IACxCxD,QAAQzL,EAAAA,EAAAA,MACJsP,EAAAA,EAAAA,QAAO,CACHC,QAAQvP,EAAAA,EAAAA,KAAIoP,GAA0BH,QAIlDI,KAIFG,GAAwBH,IAC1B,IAAII,EAAQ,EACZ,MAAMC,GAAiBzN,EAAAA,EAAAA,OACnBqN,EAAAA,EAAAA,QAAO,CAAC9D,YAAYxL,EAAAA,EAAAA,MAAK8F,G,+UAAD,IAAoBA,EAApB,CAA+BC,KAAM0J,WAC7DH,EAAAA,EAAAA,QAAO,CACH7D,QAAQzL,EAAAA,EAAAA,MACJsP,EAAAA,EAAAA,QAAO,CACHC,QAAQvP,EAAAA,EAAAA,MAAK2P,GAAUD,EAAeC,WAKtD,OAAOD,EAAeL,IAGpBO,GAAeP,IACjB,MAAM/M,EAAsB,GACtBN,EAAsB,GAEtB6N,EAAiB,CAACR,EAAMS,EAAa3G,KACvC,MAAM,WAACqC,EAAa,GAAd,OAAkBC,EAAS,GAA3B,IAA+BsE,EAAM,GAArC,MAAyCzE,GAAS+D,EAExD/M,EAAMc,KAAK,CAACmI,OAAQ8D,EAAMhE,KAAM0E,EAAK5G,KAAAA,EAAMmC,MAAAA,IAC3C,MAAMnF,EAAQ7D,EAAMqB,OAAS,EAEvBqM,GAAmB/N,EAAAA,EAAAA,OACrBgO,EAAAA,EAAAA,QAAM,IAAoB,IAAnB,OAACV,EAAD,KAASpG,GAAU,EACtB,OAAOlH,EAAAA,EAAAA,OACHqE,EAAAA,EAAAA,SAAQqJ,IAAD,eAAW,UAAAA,EAAMnE,kBAAN,eAAkB7H,UAAlB,UAA4BgM,EAAMlE,cAAlC,aAA4B,EAAc9H,YAC5DsM,EAAAA,EAAAA,QAAON,GAAUE,EAAeF,EAAOxJ,EAAOgD,KAF3ClH,CAGLsN,OAEN/J,EAAAA,EAAAA,QAAOgG,GAPcvJ,CAQvBwJ,GAYF,OAVoB,GAAhBqE,GACAE,EAAiBlN,SAASgD,GACtB9D,EAAMoB,KAAK,CACPD,OAAQb,EAAM6D,GACd9C,OAAQf,EAAMwN,GACdvM,MAAO,GACPuC,UAAAA,MAILkK,GAEXH,EAAeR,GAAO,EAAGa,KAAKC,OAE9B,MAAMC,GAAcnO,EAAAA,EAAAA,OAChBgO,EAAAA,EAAAA,QAAM,QAAC,OAAC9M,EAAD,OAASE,GAAV,QAAsB,CAACF,EAAQE,MACrCgN,EAAAA,KAFgBpO,CAGlBD,GAEF,MAAO,CAACM,MAAOA,EAAMgE,QAAQvD,GAASqN,EAAYE,SAASvN,KAAQf,MAAAA,IC3E1D5G,IAAYC,EAAAA,EAAAA,aAAW,KAAM,CACtCwH,MAAO,CACHvB,QAAS,UACT2H,UAAW,aACXzN,OAAQ,OACRsB,MAAO,YCuCf,IAAeyT,EAAAA,EAAAA,OA7BW,IAOb,IAPc,cACvBC,EADuB,YAEvBC,EAFuB,kBAGvBC,EAHuB,mBAIvB/C,EAJuB,eAKvB/C,GAAiB,EALM,UAMvBC,EAAY6B,EAAAA,IACH,EACT,MAAMhQ,EAAStB,KACTuV,EFsDmB,SACzBH,GAGC,IAFDC,EAEC,uDAFa,GACdxB,EACC,uCACD,OAAOhN,EAAAA,EAAAA,MACHmN,GAA0BH,GAC1BO,GACAI,GAHG3N,CAIL,CAAC8N,IAAK,OAAQzE,MAAOmF,EAAajF,WAAY,GAAIC,OAAQ,CAAC,CAACtC,KAAM+G,KAAKC,MAAOZ,OAAQ,CAACiB,OE/DtEI,CAAcJ,EAAeC,EAAaC,GAE7D,OACI,yBAAK/S,UAAWjB,EAAOmG,MAAO,iBAAe,yBACzC,kBAAC,IAAD,CAAqBgO,YAAY,WAAWC,YAAa,IAAKC,aAAW,EAACC,cAAY,IACjF,QAAC,MAAClU,EAAQ,EAAT,OAAYtB,EAAS,KAAtB,SACG,kBAAC,GAAD,CACIsB,MAAOA,EACPtB,OAAQA,EACR4G,KAAMuO,EACNhD,mBAAoBA,EACpB/C,eAAgBA,EAChBC,UAAWA,W,ykBChC5B,MAAMzP,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCwS,KAAM,CACFjV,QAAS,OACTwD,WAAY,SACZ0R,aAAc,MACd,oBAAqB,CACjBC,WAAY,QAGpBC,YAAa,QAAC,UAACC,GAAF,QAA+B,CACxCvU,MAAO,GACPtB,OAAQ,GACR4D,MAAOiS,EAAY,OAAS,sBAC5B/R,aAAc,IAElBqC,MAAO,CACHvC,MAAOX,EAAMK,QAAQa,KAAKC,UAC1B0R,YAAa,MACbJ,aAAc,OAElBnB,IAAK,CACD1H,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAK/B,a,mNCPlC,MAwBA,GAxBuB,IAAsF,IAArF,eAAC2T,EAAD,UAAiBC,EAAjB,mBAA4BC,EAA5B,cAAgDC,EAAhD,UAA+DL,GAAsB,EACzG,MAAM3U,EAAStB,GAAU,CAACiW,UAAAA,IAC1B,OACI,yBAAK1T,UAAWjB,EAAOuU,MACnB,kBAAC,KAAD,CACIxT,KAAK,MACL4C,QAAS,IAAMqR,IACf/T,UAAWjB,EAAO0U,YAClBxP,KAAM4P,GAAaG,GAAAA,EACnBnV,UAAWgV,EACXtJ,aAAcsJ,GAAapI,IAAAA,KAAU,WAEzC,kBAACwI,EAAA,EAAD,CAAYC,QAAS,QAASlU,UAAWjB,EAAOqT,KAC5C,0BAAMpS,UAAWjB,EAAOiF,OAAQyH,IAAAA,KAAU,gBACzC0I,EAAAA,EAAAA,KAAeP,IAEpB,kBAACQ,GAAA,EAAD,MACCN,EAAmBzR,KAAI,CAAC,EAAwB8E,KAAM,IAA9B,KAACkN,GAA6B,EAApB9R,E,kXAAoB,aACnD,OAAO8R,GAAQ,kBAAC,KAAD,IAA4B5R,IAAK0E,EAAGrH,KAAK,KAAKwU,iBAAe,GAAK/R,SCjCpF9E,IAAYC,EAAAA,EAAAA,aAAW,KAAM,CACtC4V,KAAM,QAAC,iBAACiB,GAAF,QAAsC,CACxC9J,SAAU,OACVzM,SAAU,WACVK,QAAS,OACTC,cAAe,SACfuD,WAAY,UACZ2S,OAAQ,gCACRb,YAAa,MACb,WAAY,CACRjS,QAAS,MACT+S,WAAa,aAAYF,IACzBvW,SAAU,WACVC,KAAM,EACNC,KAAM,EACNE,QAAS,GAEb,gBAAiB,CACbsW,UAAW,SAGnBC,OAAQ,CACJhR,QAAS,yBCsJjB,GA/HuB,IAiBV,IAjBW,UACpB3D,EADoB,eAEpB4T,EAFoB,kBAGpBgB,EAHoB,oBAIpBC,EAJoB,gBAKpBC,EALoB,WAMpBC,EANoB,oBAOpBC,EAPoB,qBAQpBC,EARoB,uBASpBC,EAToB,0BAUpBC,EAVoB,UAWpBjI,EAXoB,OAYpBkI,EAZoB,SAapBC,EAboB,MAcpBC,EAdoB,uBAepBC,EAfoB,yBAgBpBC,GACS,EACT,MAAMjB,EAAmBK,GAAoBa,EAAAA,EAAAA,KAAoB7B,GAAkB,sBAC7E7U,EAAStB,GAAU,CAAC8W,iBAAAA,IACpBmB,GAAcC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,gBAE1BjH,GAAMlB,EAAAA,EAAAA,QAAO,OACZoI,IAAqBC,EAAAA,EAAAA,OAC5BxS,EAAAA,EAAAA,YAAU,KAYA,MAXFsR,GAAqBiB,KACFvR,EAAAA,EAAAA,OACfyR,EAAAA,EAAAA,OAAK,QAAC,OAACvQ,GAAF,SAAcA,IAAWqQ,EAAkBG,SAChDC,EAAAA,EAAAA,QAAO,GAAI,qBACXC,EAAAA,OACAC,EAAAA,QAJe7R,CAKjBuQ,GAEatD,MACNpJ,IAAcqJ,EAAAA,EAAAA,KAAaqE,EAAmB1N,IAAcA,IAAc0N,MAG/ElH,MAAAA,GAAA,UAAAA,EAAKF,eAAL,SAAc2H,eAAe,CAACC,SAAU,eAGjD,CAACR,IAEJ,MAAOS,EAAYC,IAAiBpT,EAAAA,EAAAA,WAAS,GAEvCqT,GAAkClS,EAAAA,EAAAA,OACpCmS,EAAAA,EAAAA,OAAM,sBACNV,EAAAA,EAAAA,OAAMlI,GAAeA,EAAW6I,GAAAA,EAAAA,QAAsB1Q,QAAU6H,EAAW6I,GAAAA,EAAAA,OAAqB1Q,UAChGqG,EAAAA,EAAAA,OAAM,CAACqK,GAAAA,EAAAA,OAAsBA,GAAAA,EAAAA,QAC7BP,EAAAA,QACArG,EAAAA,KALoCxL,CAMtCuQ,IACI,qBAAC8B,EAAD,UAAuBjD,IAAakD,EAAAA,EAAAA,IAAkBJ,GAEtDK,GAA8DvS,EAAAA,EAAAA,OAChEmS,EAAAA,EAAAA,OAAM,sBACNnE,EAAAA,EAAAA,OAAM4D,EAAAA,QACNC,EAAAA,QAHgE7R,CAIlEuQ,GAEIiC,GAAiCC,EAAAA,EAAAA,KAA4BF,EAA0BnB,GASvF5B,EAAqB,CACvB,CACI7P,KAAM+S,GAAAA,EACNzM,aAAckB,IAAAA,KAAU,iBACxB/I,QAAS,IAAM6T,GAAc,GAC7B1X,SAAUmW,EACVX,OAAQmC,GAEZ,CACIvS,KAAMuL,GACNjF,aAAckB,IAAAA,KAAU,WACxB/I,QAAS,IAAMwK,IACfrO,SAAUsW,EACVd,KAAMU,GAEV,CACI9Q,KAAMgT,GAAAA,EACN1M,aAAckB,IAAAA,KAAU,eACxB/I,QAAS,IAxBb8S,EAAyB,CACrB5B,eAAAA,EACAsD,WAAYJ,EACZ3O,UAAWqO,IAsBX3X,SAAUsW,EACVd,KAAMU,KAAgB+B,IAI9B,OACI,yBAAKnI,IAAKA,EAAK3O,UAAWoC,IAAAA,CAAWrD,EAAOuU,KAAMtT,IAC9C,kBAAC,GAAD,CACI4T,eAAgBA,EAChBC,UAAWe,KAAuB4B,EAClC9C,UAAWkB,GAAqBlB,EAChCK,cAAe4C,EACf7C,mBAAoBA,IAEvBe,EAAoBxS,KAAI,QAAC,OAACmD,EAAD,kBAAS2R,GAAV,SACrB,kBAACC,GAAA,EAAD,CACI3U,IAAK+C,EACLA,OAAQA,EACR2R,kBAAmBA,EACnBE,qBAAsBzC,EACtB0C,wBAAyB1C,EACzB2C,SAAUzC,MAAAA,OAAF,EAAEA,EAAiBnC,SAASnN,GACpCyP,qBAAsBA,EACtBC,uBAAwBA,EACxBE,OAAQA,EACRC,SAAUA,EACVmC,iBAAkB,IAAMjC,EAAuB/P,QAGtD8Q,GACG,kBAACmB,GAAA,EAAD,CACIzX,UAAWjB,EAAO4V,OAClBW,MAAQnN,GAAcmN,EAAM,CAACkB,qBAAAA,EAAsBrO,UAAAA,IACnD1H,QAAS,IAAM8V,GAAc,OCzKpC9Y,IAAYC,EAAAA,EAAAA,aAAW,KAAM,CACtCga,MAAO,CACHC,UAAW,OACXC,UAAW,SACXjE,YAAa,OACbJ,aAAc,OAElBsE,SAAU,CACN,QAAS,CACLnD,UAAW,QAEf3S,OAAQ,OACR+V,SAAU,a,2cCsBlB,MAuFA,IAAelF,EAAAA,EAAAA,OAvFK,IAeP,IAfQ,mBACjB5C,EADiB,OAEjBpC,EAFiB,WAGjBmK,EAHiB,aAIjBC,EAJiB,uBAKjBC,EALiB,0BAMjBC,EANiB,SAOjBC,EAPiB,WAQjBpD,EARiB,eASjB9H,EATiB,eAUjBmL,EAAiBrJ,EAAAA,GAVA,gBAWjBsJ,EAAkBtJ,EAAAA,GAXD,kBAYjBuJ,EAAoBvJ,EAAAA,GAZH,qBAajBwJ,EAAuBxJ,EAAAA,GAbN,yBAcjByG,EAA2BzG,EAAAA,IAClB,EACT,MAAMhQ,EAAStB,KAET+a,GAAW9T,EAAAA,EAAAA,UACb,IClC0B,SAC9BkJ,EACAoK,GAEa,IADbC,EACa,uDAD6B,GAE1C,MAAMQ,EAAgC7K,EAAOC,YAAc,GACrD6K,GAA0CC,EAAAA,EAAAA,KAAsB/K,GACtE,OAAOoK,EACFrP,QAAQiQ,KAAiBC,EAAAA,EAAAA,KAAaD,EAAY/K,cAClDxL,KAAI,IAAuB,IAAtB,IAAC+P,EAAD,WAAMvE,GAAgB,EAexB,MAAO,CAAC+F,eAAgBxB,EAAKyC,qBAdDvQ,EAAAA,EAAAA,OACxBjC,EAAAA,EAAAA,MAAK8F,IACD,GAA4B,aAAxBA,EAAU2Q,UAA0B,CACpC,MAAMC,EAAoBL,EAAmB3C,MAAKvE,EAAAA,EAAAA,KAAarJ,IAC/D,OAAO4Q,GAAqB,IAACD,UAAW,YAAeC,GACpD,CACH,MAAMC,EAAkBP,EAAiB1C,MAAKvE,EAAAA,EAAAA,KAAarJ,IAC3D,OAAO6Q,GAAmB,IAACF,UAAW,UAAaE,QAG3DrQ,EAAAA,EAAAA,SAAQR,KAAgBA,KACxB8Q,EAAAA,GAAAA,GAAiCrL,EAAOoI,KAAMiC,GAXtB3T,CAY1BuJ,OAILlF,QAAO,QAAC,oBAACkM,GAAF,SAA2BA,EAAoB7O,OAAS,KDQ1DkT,CAAmBtL,EAAQoK,EAAcC,IAC/C,CAACrK,EAAQoK,EAAcC,KAEpBkB,EAAuBC,IAA4BjW,EAAAA,EAAAA,UAA+C,IACnG4P,GAAoBrO,EAAAA,EAAAA,UACtB,ICVgC,EACpC8T,EACAW,IAEOX,EAASxR,QAAO,CAAC6I,EAAD,KAAgD,IAA1C,eAAC+D,EAAD,oBAAiBiB,GAAyB,EACnE,MAAM9B,GAAoBT,EAAAA,EAAAA,QAAM,IAAiC,UAAhC,OAAC9M,EAAD,kBAAS2R,GAAuB,EAC7D,MAAMkC,EAAgB,UAAGF,EAAsBvF,UAAzB,aAAG,EAAuCjB,SAASnN,GACzE,OAAO2R,EAAkBT,GAAAA,EAAAA,QACpB7O,OAAOsP,EAAkBT,GAAAA,EAAAA,QACzB7O,OAAOwR,EAAmBlC,EAAkBT,GAAAA,EAAAA,WAA2B,MAC7E7B,GACH,OAAOhF,EAAIhI,OAAOkL,KACnB,IDFOuG,CAAyBd,EAAUW,IACzC,CAACX,EAAUW,KAEf7V,EAAAA,EAAAA,YAAU,KACN4U,EAA0BnF,KAC3B,CAACA,IAEJ,MAAMwG,GAAe/Z,EAAAA,EAAAA,cAChBga,IACGlB,EAAkB,CAACmB,UAAW7L,MAAAA,OAAF,EAAEA,EAAQwE,IAAKoH,YAAAA,MAE/C,CAAC5L,MAAAA,OAAD,EAACA,EAAQwE,IAAKkG,IAGZoB,GAAala,EAAAA,EAAAA,cACdma,IACGtB,EAAgB,MAAIsB,EAAL,CAAaF,UAAW7L,MAAAA,OAAF,EAAEA,EAAQwE,SAEnD,CAACxE,MAAAA,OAAD,EAACA,EAAQwE,IAAKiG,IAGlB,OACI,yBAAKrY,UAAWjB,EAAO2Y,OAClBc,EAASnW,KAAI,IAA2C,IAA1C,eAACuR,EAAD,oBAAiBiB,GAAyB,EACrD,OACI,kBAAC,GAAD,CACIpS,IAAKmR,EACL5T,UAAWjB,EAAO8Y,SAClB9C,WAAYA,EACZnB,eAAgBA,EAChBgB,kBAAmB5E,EACnB6E,oBAAqBA,EACrBG,oBAAqBmD,KAAayB,EAAAA,EAAAA,KAAwB7B,GAC1D9C,qBAAsBkD,KAAa0B,EAAAA,EAAAA,KAAsB9B,GACzD7C,uBAAwBiD,KAAa2B,EAAAA,EAAAA,KAAwB/B,GAC7D5C,0BAA2BlI,EAC3BqI,MAAQqE,GAAWvB,EAAe,MAAIuB,EAAL,CAAa/L,OAAAA,KAC9CyH,SAAUkE,EACVnE,OAAQsE,EACRxM,UAAW,IAAMqL,EAAqB3E,GACtC4B,yBAA0BA,EAC1BV,gBAAiBqE,EAAsBvF,GACvC2B,uBAAyBwE,IACrBX,GACI9U,EAAAA,EAAAA,OACI0V,EAAAA,EAAAA,SAAOC,EAAAA,EAAAA,KAAIrG,IAAiBsG,EAAAA,EAAAA,OAAMtG,EAAgB,MAClDjC,EAAAA,EAAAA,QAAO,CACH,CAACiC,IAAiBuG,EAAAA,EAAAA,SACdxH,EAAAA,EAAAA,UAASoH,IACTK,EAAAA,EAAAA,SAAQ,CAACL,KACTM,EAAAA,EAAAA,QAAON,kB,0EE5G5C,MAAMtc,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCC,UAAW,CACP1C,QAAS,OACTC,cAAe,SACf,QAAS,CACLkV,WAAY,SAGpBxP,MAAO,CACHyG,SAAU,OACVC,WAAY,OACZjJ,MAAO,UACPmJ,aAAc,OAElB0P,SAAU,CACNnb,MAAO,OACPtB,OAAQ,OACR0c,cAAe,UAEnBrV,MAAO,CACH/F,MAAO,QACPtB,OAAQ,QACR8D,aAAc,MACdP,WAAY,sBACZoT,OAAQ,gCACRxW,SAAU,YAEdwc,YAAa,CACTxc,SAAU,WACVH,OAAQ,OACRsB,MAAO,OACPhB,MAAO,OACPF,IAAK,OACLwD,MAAOX,EAAMK,QAAQlB,QAAQuB,MAEjCiZ,aAAc,CACVjG,OAAS,aAAY1T,EAAMK,QAAQlB,QAAQuB,OAC3CJ,WAAY,+BCjBPsZ,GAAiB,IAAiF,IAAhF,kBAACC,EAAD,cAAoB9H,EAApB,SAAmC+H,EAAnC,MAA6C5W,EAA7C,SAAoD6W,EAAW9L,EAAAA,IAAiB,EAC3G,MAAMhQ,EAAStB,KACTqd,GAAoBtb,EAAAA,EAAAA,cACrB2I,GACUwS,EAAkBhI,SAASxK,EAAUiK,MACtC2I,EAAAA,EAAAA,MAAwBC,EAAAA,EAAAA,KAAe7S,IACvC,WAEV,CAACwS,IAEL,OACI,kBAAC,KAAD,CAA2BG,kBAAmBA,GAC1C,yBAAK9a,UAAWjB,EAAOgC,UAAW2B,QAASmY,GACvC,0BAAM7a,UAAWjB,EAAOiF,OACnBA,EADL,IACY,kBAACiX,EAAA,EAAD,CAAUjb,UAAWjB,EAAOub,YAExC,yBAAKta,UAAWoC,IAAAA,CAAWrD,EAAOmG,MAAO,CAAC,CAAE,GAAEnG,EAAO0b,gBAAiBG,KACjEA,GAAY,kBAACM,GAAA,EAAD,CAAiBlb,UAAWjB,EAAOyb,cAChD,kBAAC,GAAD,CAAmB3H,cAAeA,EAAe5F,gBAAgB,QCtCxExP,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCqa,gBAAiB,CACbrD,SAAU,SAEdsD,YAAa,CACTzX,QAAS,mBACT6G,WAAY,IACZC,SAAU,OACVC,WAAY,OACZC,cAAe,UAEnB0Q,cAAe,CACXhd,QAAS,OACTC,cAAe,SACfqF,QAAS,oBAEb2X,MAAO,CACHjd,QAAS,QAEb+T,IAAK,CACD3H,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAK/B,QAC1B2K,aAAc,QAElB5G,MAAO,CACHyG,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAKC,UAC1BsR,aAAc,WCJTgI,GAAgB,IAAoF,IAAnF,WAACxG,EAAD,YAAa6D,EAAb,cAA0B/F,EAA1B,QAAyCpS,EAAzC,qBAAkD8X,GAAiC,EAC7G,MAAMxZ,EAAStB,MAER+d,EAAkBC,IAAuBtY,EAAAA,EAAAA,UAASuY,EAAAA,IAAAA,SAEnDC,GAAuBnc,EAAAA,EAAAA,cACxBoc,IAA2BC,EAAAA,EAAAA,KAAiCjD,EAAagD,GAAevZ,KAAI,QAAC,IAAC+P,GAAF,SAAWA,MACxG,CAACwG,IAQL,OACI,kBAACkD,GAAA,EAAD,CAAQ1M,MAAM,EAAM3O,QAASA,EAASyB,QAAS,CAACb,MAAOtC,EAAOoc,kBAC1D,kBAACY,GAAA,EAAD,CAAa7Z,QAAS,CAACoR,KAAMvU,EAAOqc,cAAe3P,IAAAA,KAAU,YAC7D,kBAACuQ,GAAA,EAAD,CAAe9Z,QAAS,CAACoR,KAAMvU,EAAOsc,gBAClC,kBAACpH,EAAA,EAAD,CAAYC,QAAS,QAASlU,UAAWjB,EAAOqT,KAC5C,0BAAMpS,UAAWjB,EAAOiF,OAAQyH,IAAAA,KAAU,iBACzC0I,EAAAA,EAAAA,KAAeyE,EAAYxG,KAAK6J,eAErC,yBAAKjc,UAAWjB,EAAOuc,OACnB,kBAACZ,GAAD,CACIG,SAAU,IAAMY,EAAoBC,EAAAA,IAAAA,SACpCd,SAAUY,IAAqBE,EAAAA,IAAAA,QAC/B1X,MAAOyH,IAAAA,KAAU,WACjBoH,cAAeA,EACf8H,kBAAmBgB,GAAqB,KAE3C/C,EAAY9K,QAAU8K,EAAYxG,MAAQS,EAAcT,KACrD,kBAACsI,GAAD,CACIG,SAAU,IAAMY,EAAoBC,EAAAA,IAAAA,aACpCd,SAAUY,IAAqBE,EAAAA,IAAAA,YAC/B1X,MAAOyH,IAAAA,KAAU,gBACjBoH,cAAeA,EACf8H,kBAAmBgB,GAAqB,OAKxD,kBAACO,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAQzZ,QAASjC,GAAUgL,IAAAA,KAAU,WACrC,kBAAC0Q,GAAA,EAAD,CAAQtd,UAAWkW,EAAYrS,QAlChB,KACvB6V,EAAqBiD,GACrB/a,KAgCoEgB,MAAM,WAC7DgK,IAAAA,KAAU,eCtElBhO,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCqa,gBAAiB,CACbrD,SAAU,SAEdsD,YAAa,CACTzX,QAAS,mBACT6G,WAAY,IACZC,SAAU,OACVC,WAAY,OACZC,cAAe,UAEnB0Q,cAAe,CACXhd,QAAS,OACTC,cAAe,SACfqF,QAAS,oBAEbyO,IAAK,CACD3H,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAK/B,QAC1B2K,aAAc,QAElB5G,MAAO,CACHyG,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAKC,UAC1BsR,aAAc,WCPT6I,GAAoB,IAMpB,IANqB,eAC9BC,EAD8B,YAE9BzD,EAF8B,cAG9B/F,EAH8B,QAI9BpS,EAJ8B,yBAK9B+U,GACS,EACT,MAAMzW,EAAStB,KAETkd,GAAoBjW,EAAAA,EAAAA,UACtB,KAAMmX,EAAAA,EAAAA,KAAiCjD,GAAa,GAAMvW,KAAI,QAAC,IAAC+P,GAAF,SAAWA,MACzE,CAACwG,IAQL,OACI,kBAACkD,GAAA,EAAD,CAAQ1M,MAAM,EAAM3O,QAASA,EAASyB,QAAS,CAACb,MAAOtC,EAAOoc,kBAC1D,kBAACY,GAAA,EAAD,CAAa7Z,QAAS,CAACoR,KAAMvU,EAAOqc,cAAe3P,IAAAA,KAAU,gBAC7D,kBAACuQ,GAAA,EAAD,CAAe9Z,QAAS,CAACoR,KAAMvU,EAAOsc,gBAClC,kBAACpH,EAAA,EAAD,CAAYC,QAAS,QAASlU,UAAWjB,EAAOqT,KAC5C,0BAAMpS,UAAWjB,EAAOiF,OAAQyH,IAAAA,KAAU,iBACzC0I,EAAAA,EAAAA,KAAeyE,EAAYxG,KAAK6J,eAErC,kBAACvB,GAAD,CACIE,UAAQ,EACR5W,MAAOyH,IAAAA,KAAU,eACjBoH,cAAeA,EACf8H,kBAAmBA,KAG3B,kBAACuB,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAQzZ,QAASjC,GAAUgL,IAAAA,KAAU,WACrC,kBAAC0Q,GAAA,EAAD,CAAQtd,UAAWwd,EAAgB3Z,QAtBhB,KAC3B8S,IACA/U,KAoB4EgB,MAAM,WACrEgK,IAAAA,KAAU,mBCxDlBhO,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCwS,KAAM,CACFjV,QAAS,OACTC,cAAe,SACfuD,WAAY,SACZhE,OAAQ,QAEZye,aAAc,CACVpb,gBAAiBJ,EAAMK,QAAQC,WAAWC,MAC1CqT,UAAW,OAEf6H,SAAU,CACN9R,SAAU,OACV3M,YAAa,OAEjB0e,KAAM,CACF/a,MAAOX,EAAMK,QAAQa,KAAKC,UAC1B5D,QAAS,OACTC,cAAe,MACfuD,WAAY,SACZ4a,UAAW,aACX1a,OAAQ,sBAEZ2a,SAAU,CACNjS,SAAU,OACVC,WAAY,QAEhBiS,eAAgB,CACZ9e,OAAQ,OACRsB,MAAO,oBACP4C,OAAQ,WACRX,WAAYN,EAAMK,QAAQyb,QAC1BhO,QAAS,IAEb7Q,KAAM,CACFC,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,QAAS,OACTC,cAAe,SACfC,SAAU,UAEdZ,sBAAuB,CACnBC,SAAU,EACVuB,MAAO,Y,mNCTR,MAiKP,IAAeyT,EAAAA,EAAAA,OA9II,IASN,IATO,WAChBiK,EADgB,aAEhB7E,EAFgB,cAGhBnF,EAHgB,OAIhBjF,EAJgB,aAKhBkP,EALgB,qBAMhBvE,EAAuBxJ,EAAAA,GANP,yBAOhByG,EAA2BzG,EAAAA,IAElB,EADNgO,E,kXACM,4HACT,MAAMhe,EAAStB,KAETuf,GAAqBrH,EAAAA,EAAAA,aAAYsH,EAAAA,GAAAA,UAAAA,aACjClF,GAA0BmF,EAAAA,EAAAA,KAAcF,EAAUpP,MAAAA,OAAX,EAAWA,EAAQoI,MAE1DmH,GAAU1P,EAAAA,EAAAA,WACT2P,EAAUC,IAAela,EAAAA,EAAAA,UAlCN,KAmCpBtD,GAAuBL,EAAAA,EAAAA,cAAY,QAAC,eAAC8d,GAAF,SAAsBD,EAAYC,KAAiB,KAErFC,EAAuBC,IAA4Bra,EAAAA,EAAAA,aACnDsa,EAAiBC,IAAsBva,EAAAA,EAAAA,YAMxCwa,GAAoBjZ,EAAAA,EAAAA,UAAQ,KAAMkZ,EAAAA,EAAAA,KAA2B/K,IAAgB,CAACA,IAC9EkC,EAAa4I,EAAoB,GAEvCra,EAAAA,EAAAA,YAAU,KAAM,MACZ,MAAMzF,EAASgI,KAAKC,IAhDE,IADK,GAiDa6X,GAClCE,GAAgB,UAAAV,EAAQ1O,eAAR,eAAiBqP,cAhDjB,IAiDtBT,EAAYxX,KAAKoB,IAAI4W,EAAehgB,MACrC,CAAC8f,IAEJ,MAAMI,GAAQrZ,EAAAA,EAAAA,UACV,IAAM,CACF,CACIpC,GAAI6B,EAAW6Z,UACfha,MAAOyH,IAAAA,KAAU,cAErB,CACInJ,GAAI6B,EAAW8Z,OACfja,MAAOyH,IAAAA,KAAU,WAErB,CACInJ,GAAI6B,EAAW+Z,YACfla,MAAOyH,IAAAA,KAAU,kBAGzB,KAGGsH,EAAmBoL,IAAwBhb,EAAAA,EAAAA,YAC5C6M,EAAqB6M,IAAe1Y,EAAW+Z,YAC/CjR,EAAiB8P,EAAW5E,YAAaiG,EAAAA,EAAAA,KAAwBC,EAAAA,IAAAA,QAA6BtG,GAEpG,OACI,yBAAK/X,UAAWjB,EAAOuU,KAAM3E,IAAKwO,GAC7BI,GACG,kBAAChC,GAAD,CACIxG,WAAYA,EACZtU,QAAS,IAAM+c,EAAyB,MACxCjF,qBAAuB+F,IACnB/F,EAAqB,CACjBkB,UAAW7L,EAAOwE,IAClBwB,eAAgB2J,EAChBe,cAAAA,KAGRzL,cAAeA,EACf+F,YAAaZ,EAAajC,MAAK,QAAC,IAAC3D,GAAF,SAAWA,IAAQmL,OAGzDE,GACG,kBAACrB,GAAD,CACIC,eAAgBtH,EAChBtU,QAAS,IAAMid,EAAmB,MAClClI,yBAA0B,IACtBA,EAAyB,CACrB0B,WAAYuG,EAAgBvG,WAC5B/O,UAAWsV,EAAgBtV,YAGnC0K,cAAeA,EACf+F,YAAaZ,EAAajC,MAAK,QAAC,IAAC3D,GAAF,SAAWA,IAAQqL,EAAgB7J,oBAG1E,kBAAC2K,EAAA,EAAD,CACIR,MAAOA,EACPS,OAAQ3B,EACR7c,UAAWjB,EAAOud,aAClBhc,SAAUwc,IAEd,kBAAC/c,EAAA,EAAD,CACIC,UAAWjB,EAAOpB,sBAClBuC,YAAY,aACZJ,KAAMsd,EACNjd,QApHc,IAqHdC,SApHc,IAqHdC,aAAW,EACXC,SAAUT,GAEV,yBAAKG,UAAWjB,EAAOhB,MAClB8U,KAAkB4L,EAAAA,EAAAA,SAAQ1L,IACvB,kBAAC,GAAD,CACID,aAAa4L,EAAAA,EAAAA,KAAS9Q,MAAAA,OAAD,EAACA,EAAQD,OAC9BkF,cAAeA,EACfE,kBAAmBA,EACnB/C,mBAAoBA,EACpB/C,eAAgBA,IAAmB8H,EACnC7H,UAAWsQ,KAIvB,yBAAKxd,UAAWjB,EAAOhB,MACnB,yBAAKiC,UAAWjB,EAAOyd,MACnB,kBAACvB,EAAA,EAAD,CAAUjb,UAAWjB,EAAOwd,WAC5B,0BAAMvc,UAAWjB,EAAO2d,UACnBjR,IAAAA,KAAU,oEAGlBmC,GACG,kBAAC,GAAD,IACI2K,qBAAsBiF,EACtBhI,yBAA0BkI,EAC1B1N,mBAAoBA,EACpBgI,aAAcA,EACdpK,OAAQA,EACRmK,WAAYA,EACZG,0BAA2BiG,EAC3BpJ,WAAYA,EACZ9H,eAAgBA,GACZ8P,U,gBC/LhC,SAASjR,KAA2Q,OAA9PA,GAAWC,OAAOC,QAAU,SAAUtG,GAAU,IAAK,IAAIyB,EAAI,EAAGA,EAAI4C,UAAU/D,OAAQmB,IAAK,CAAE,IAAI3B,EAASuE,UAAU5C,GAAI,IAAK,IAAI1E,KAAO+C,EAAcuG,OAAOE,UAAUC,eAAeC,KAAK3G,EAAQ/C,KAAQiD,EAAOjD,GAAO+C,EAAO/C,IAAY,OAAOiD,GAAkBoG,GAASM,MAAM9D,KAAMyB,WAGhT,SAAgB,QAAC,OACfhL,EAAS,IADK,EAEXsN,E,kXAFW,sBAGVzJ,IAAAA,cAAoB,MAAOkJ,GAAS,CACxC3M,MAAO,KACPtB,OAAQ,KACRyO,QAAS,YACTI,KAAM,OACNF,MAAO,8BACNH,GAAQzJ,IAAAA,cAAoB,OAAQ,CACrCN,GAAI,iBACJqc,SAAU,QACVC,UAAW,iBACXzY,EAAG,IACHiB,EAAG,IACHjI,MAAO,KACPtB,OAAQ,MACP+E,IAAAA,cAAoB,OAAQ,CAC7B+J,SAAU,UACVkS,SAAU,UACVvV,EAAG,4JACHoD,KAAM,UACH9J,IAAAA,cAAoB,IAAK,CAC5BkK,KAAM,wBACLlK,IAAAA,cAAoB,OAAQ,CAC7BiK,YAAa,MACbH,KAAM,OACNpD,EAAG,qBC1BQwV,GAAoBC,IAC7BC,QAAQD,MAAMA,GACdE,EAAAA,EAAAA,SAAoB,CAChBjb,MAAOyH,IAAAA,KAAU,SACjByT,SAASC,EAAAA,EAAAA,KAAuBJ,EAAOtT,IAAAA,KAAU,4B,wCCRzD,SAASK,KAA2Q,OAA9PA,GAAWC,OAAOC,QAAU,SAAUtG,GAAU,IAAK,IAAIyB,EAAI,EAAGA,EAAI4C,UAAU/D,OAAQmB,IAAK,CAAE,IAAI3B,EAASuE,UAAU5C,GAAI,IAAK,IAAI1E,KAAO+C,EAAcuG,OAAOE,UAAUC,eAAeC,KAAK3G,EAAQ/C,KAAQiD,EAAOjD,GAAO+C,EAAO/C,IAAY,OAAOiD,GAAkBoG,GAASM,MAAM9D,KAAMyB,WAGhT,SAAgB,QAAC,OACfhL,EAAS,IADK,EAEXsN,E,kXAFW,sBAGVzJ,IAAAA,cAAoB,MAAOkJ,GAAS,CACxC3M,MAAO,KACPtB,OAAQ,KACRyO,QAAS,YACTI,KAAM,OACNF,MAAO,8BACNH,GAAQzJ,IAAAA,cAAoB,SAAU,CACvCwc,GAAI,KACJC,GAAI,KACJC,EAAG,KACH5S,KAAM,UACNG,YAAa,OACXjK,IAAAA,cAAoB,OAAQ,CAC9BN,GAAI,gBACJid,MAAO,CACLC,SAAU,SAEZZ,UAAW,iBACXzY,EAAG,IACHiB,EAAG,IACHjI,MAAO,KACPtB,OAAQ,MACP+E,IAAAA,cAAoB,SAAU,CAC/Bwc,GAAI,KACJC,GAAI,KACJC,EAAG,KACH5S,KAAM,UACH9J,IAAAA,cAAoB,IAAK,CAC5BkK,KAAM,uBACLlK,IAAAA,cAAoB,OAAQ,CAC7B+J,SAAU,UACVkS,SAAU,UACVvV,EAAG,iCACHoD,KAAM,wBACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,MACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,sEACHoD,KAAM,wBACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,MACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,+IACHoD,KAAM,SACJ9J,IAAAA,cAAoB,OAAQ,CAC9B+J,SAAU,UACVkS,SAAU,UACVvV,EAAG,kKACHoD,KAAM,SACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,iHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,iHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,+GACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,+GACHoD,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,iHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,kFACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,MACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gDACHoD,KAAM,SACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,4IACHoD,KAAM,SACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,oMACHoD,KAAM,aACH9J,IAAAA,cAAoB,OAAQ,KAAMA,IAAAA,cAAoB,iBAAkB,CAC3EN,GAAI,gBACJmH,GAAI,SACJhC,GAAI,QACJmC,GAAI,SACJ6V,GAAI,KACJC,cAAe,kBACd9c,IAAAA,cAAoB,OAAQ,CAC7B+c,UAAW,UACXC,YAAa,QACXhd,IAAAA,cAAoB,OAAQ,CAC9Bid,OAAQ,IACRF,UAAW,aACR/c,IAAAA,cAAoB,iBAAkB,CACzCN,GAAI,gBACJmH,GAAI,SACJhC,GAAI,SACJmC,GAAI,SACJ6V,GAAI,QACJC,cAAe,kBACd9c,IAAAA,cAAoB,OAAQ,CAC7Bgd,YAAa,QACXhd,IAAAA,cAAoB,OAAQ,CAC9Bid,OAAQ,UChMGpiB,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCwS,KAAM,CACFzV,OAAQ,OACRU,SAAU,SACV6C,WAAYN,EAAMK,QAAQC,WAAW0e,QACrCzhB,QAAS,OACTC,cAAe,SACfuD,WAAY,SACZZ,WAAY,SAEhB8e,KAAM,CACFte,MAAOX,EAAMK,QAAQa,KAAKC,UAC1BwI,SAAU,OACVC,WAAY,OACZgK,UAAW,YCGnB,GAbmB,KACf,MAAM3V,EAAStB,KAEf,OACI,yBAAKuC,UAAWjB,EAAOuU,MACnB,kBAAC,GAAD,MACA,0BAAMtT,UAAWjB,EAAOghB,MACnBtU,IAAAA,KAAU,gE,4BCXpB,MAAMhO,IAAYC,EAAAA,EAAAA,YAAW,CAChCsiB,gBAAiB,CACb3hB,QAAS,OACTwD,WAAY,UAEhBoe,aAAc,CACV1M,aAAc,MC6BtB,GApB2B,IAA8B,IAA7B,OAAC3F,EAAD,QAASsR,GAAoB,EACrD,MAAMngB,EAAStB,KACTyiB,GAASvK,EAAAA,EAAAA,aAAYsH,EAAAA,GAAAA,UAAAA,YACrB,kBAACkD,IAAqBrd,EAAAA,EAAAA,YAAWsd,GAAAA,GACjCC,EAAaF,EAAkB,CAACD,OAAAA,EAAQ9N,IAAKxE,EAAOwE,MAE1D,OACI,yBAAKpS,UAAWjB,EAAOihB,iBACnB,kBAAC/E,EAAA,EAAD,CAAUjb,UAAWjB,EAAOkhB,eAC5B,kBAAChM,EAAA,EAAD,MACKyK,EAAAA,EAAAA,KAAS9Q,EAAOD,OAAQ,IACzB,kBAAC,KAAD,CAAM2S,KAAMD,EAAY3a,OAAO,SAAS6a,UAAU,SAC7C9U,IAAAA,KAAU,mBACP,IACPyT,K,4BC7BV,MAAMzhB,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCwS,KAAM,CACFjV,QAAS,OACTC,cAAe,SACfuD,WAAY,aACZZ,WAAY,OACZuf,cAAe,OACf5c,aAAc,gCACd6c,WAAY,SACZ,eAAgB,CACZ7c,aAAc,SAGtB+J,MAAO,CACH/C,aAAc,MACdH,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAK/B,SAE9BygB,YAAa,CACTjW,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAKC,e,mNCV3B,MAAM0e,GAAgB,IAAyC,IAAxC,SAACC,EAAD,WAAWC,EAAX,KAAuBpc,GAAiB,EAClE,MAAM1F,EAAStB,MACT,MAACkQ,EAAD,YAAQ+S,GAAejc,EAE7B,OACI,kBAACqc,GAAA,EAAD,IAAU9gB,UAAWjB,EAAOuU,KAAM3E,IAAKiS,GAAcC,GACjD,kBAAC5M,EAAA,EAAD,CAAYjU,UAAWjB,EAAO4O,OAAQA,GACrC+S,GAAe,kBAACzM,EAAA,EAAD,CAAYjU,UAAWjB,EAAO2hB,aAAcA,K,yHClBjE,MAAMK,GACT1U,IAEA,MAAM,SAACuU,EAAD,UAAWI,EAAX,SAAsBriB,GAAY0N,EAClCtN,E,+UAAS,IAAIiiB,EAAU,WAAY3U,GAA7B,CAAqC4U,UAAW,QAAStd,QAAS,IAC9E,OACI,yBAAKgL,IAAKiS,EAAUrB,MAAOxgB,GACtBJ,ICRAlB,IAAYC,EAAAA,EAAAA,YAAW,CAChC4V,KAAM,CACFnU,MAAO,W,yHCWR,MAAM+hB,GAAmB,IAAwE,IAAvE,mBAACC,EAAD,4BAAqBC,EAArB,SAAkD9gB,GAAqB,EACpG,MAAMvB,EAAStB,KACT4jB,EAAUF,EAAmB9e,KAAKif,G,+UAAD,IAAgBA,EAAhB,CAAuB3T,OAAO+Q,EAAAA,EAAAA,KAAS4C,EAAM3T,WAC9E/H,EAAQyb,EAAQtL,MAAKwL,EAAAA,EAAAA,QAAO,MAAOH,IACzC,OACI,kBAACI,GAAA,EAAD,CACI3jB,OAAQ,GACRmC,UAAWjB,EAAOuU,KAClBmO,WAAY,CAACC,OAAQf,GAAegB,SAAUZ,IAC9CpT,MAAOlC,IAAAA,KAAU,YACjB4V,QAASA,EACTzb,MAAOA,EACPtF,UAAUgE,EAAAA,EAAAA,OAAKC,EAAAA,EAAAA,MAAK,OAAQjE,MCzB3B7C,IAAYC,EAAAA,EAAAA,YAAW,CAChCkkB,YAAa,CACT5jB,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRwZ,UAAW,SACXD,UAAW,OACXkK,WAAY,uCACZxjB,QAAS,QAEb,4BAA6B,CACzBwjB,WAAY,wCAEhB,iCAAkC,CAC9BA,WAAY,wCAEhBlkB,sBAAuB,CACnBC,SAAU,EACVC,OAAQ,QAEZE,KAAM,CACFC,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,QAAS,OACTC,cAAe,SACfC,SAAU,UAEdujB,cAAe,CACXtO,WAAY,OACZ1V,YAAa,MACbD,OAAQ,OACRkkB,YAAa,uBAEjBC,gBAAiB,CACb9gB,gBAAiB,UCYnBxC,GAAgB,S,IAYjBujB,I,SAAAA,GAAAA,EAAAA,EAAAA,OAAAA,GAAAA,SAAAA,EAAAA,EAAAA,QAAAA,GAAAA,U,CAAAA,KAAAA,GAAAA,KAKL,MAyPA,IAAeC,EAAAA,EAAAA,UARUC,IACd,CACHvU,OAAQqP,EAAAA,GAAAA,UAAAA,UAA8BkF,GACtCnF,SAAUC,EAAAA,GAAAA,UAAAA,YAAgCkF,GAC1CC,aAAcnF,EAAAA,GAAAA,UAAAA,gBAAoCkF,MAI1D,EAzPoB,IAQP,IARQ,OACjBE,EACAzU,OAAQ0U,EAFS,SAGjBtF,EAHiB,cAIjBha,EAJiB,UAKjBuf,EALiB,SAMjBC,EANiB,aAOjBJ,GACS,EACT,MAAMrjB,EAAStB,MACRof,EAAY4F,IAAiBtf,EAAAA,EAAAA,UAASgB,EAAW6Z,YACjD0E,EAAwBC,IAA6Bxf,EAAAA,EAAAA,WAAS,IAE/D,mBACFge,EADE,4BAEFC,EAFE,0BAGFwB,EAHE,OAIFhV,EAJE,8BAKFiV,EACAC,UAAWC,GClF6BT,CAAAA,IAC5C,MAAMU,EAAgBV,MAAAA,OAAH,EAAGA,EAAetM,KAC/BgH,GAAWrH,EAAAA,EAAAA,aAAYsH,EAAAA,GAAAA,UAAAA,aACvBkE,GAAqB7c,EAAAA,EAAAA,OAAK4Y,EAAAA,EAAAA,KAAcF,IAAW/G,EAAAA,EAAAA,QAAO,GAAI,sBAAzC3R,CAAgE0e,GACrFC,GAA8B3e,EAAAA,EAAAA,OAAKyR,EAAAA,EAAAA,OAAKwL,EAAAA,EAAAA,QAAO,WAAW,KAAQhd,EAAAA,EAAAA,MAAK,OAAzCD,CAAiD6c,IAC9EC,EAA6B8B,IAAkC/f,EAAAA,EAAAA,UAAS,OACxEyK,EAAQuV,IAAahgB,EAAAA,EAAAA,UAAS,OAC9B2f,EAAWM,IAAgBjgB,EAAAA,EAAAA,WAAS,GACrCkgB,GAAcC,EAAAA,GAAAA,KA2BpB,OAzBAhgB,EAAAA,EAAAA,YAAU,KACFgf,IACAa,EAAUb,GACVY,EAA+BD,MAEpC,CAACX,EAAeW,IAoBZ,CACH9B,mBAAAA,EACAC,4BAAAA,EACAwB,2BArB8BpjB,EAAAA,EAAAA,cAC7B+jB,IACGL,EAA+BK,GACON,IAAgCM,EAOlEJ,EAAUb,IALVc,GAAa,GACbC,GAAYG,EAAAA,EAAAA,KAAgC5V,EAAOwE,IAAKmR,IACnDhgB,KAAK4f,GACLM,SAAQ,IAAML,GAAa,QAKxC,CAACd,EAAeW,EAA6BrV,EAAQyV,IASrDzV,OAAAA,EACAkV,UAAAA,EACAD,8BARkCI,IAAgC7B,IDkDlEsC,CAAgCpB,IAE9B,iBAACqB,EAAD,mBAAmBC,IAAsBC,EAAAA,EAAAA,GAAkB,CAC7DnlB,cAAAA,GACAkP,OAAAA,EACAkW,gBAAiB7B,GAAY8B,UAG3BC,EAAkBJ,EAAqBhW,EAAS,KAEhD6L,EAAYuK,MAAAA,OAAH,EAAGA,EAAiB5R,IAC7B2F,GAAamF,EAAAA,EAAAA,KAAcF,EAAUpP,MAAAA,OAAX,EAAWA,EAAQoI,OAE7C,aAACiO,IAAgBC,EAAAA,EAAAA,GAAgB,CAACtW,OAAQoW,EAAiB5B,aAAAA,KAE1D+B,GAAmBC,KAAwBjhB,EAAAA,EAAAA,aAClDkhB,EAAAA,EAAAA,IAAmB,KACfD,QAAqBE,KACtB,CAACL,KACJI,EAAAA,EAAAA,IAAmB,KACfD,QAAqBE,KACtB,CAAC7K,IAEJ,MAAM,iBAAC8K,GAAD,oBAAmBC,KAAuBC,EAAAA,EAAAA,GAAY,CACxDpV,aAAc,CAACC,SAAU,MAAOC,WAAY,UAC5CmV,aAAa,KAEX,SAACzhB,GAAD,WAAWG,KAAcL,EAAAA,EAAAA,GAAiCC,IACzD2hB,GAAgBC,KAAqBzhB,EAAAA,EAAAA,aAC5CG,EAAAA,EAAAA,YAAU,KACFL,IACA2hB,GAAkBxhB,GAAWuhB,kBAElC,CAAC1hB,MACJK,EAAAA,EAAAA,YAAU,KACN,MAAMuhB,IAA4BC,EAAAA,EAAAA,QAAOH,GAAgBvhB,GAAWuhB,gBAChE1hB,IAAY4hB,GACZtC,EAAU,CAACoC,eAAAA,OAEhB,CAACA,KAEJ,MAAMI,IAAwBvlB,EAAAA,EAAAA,cAAY,KACtCmjB,GAA0B,KAC3B,KAEG,cAAC9P,GAAemS,OAAQC,IE9HF,KAA0C,IAAzC,UAACxL,EAAD,UAAYyL,EAAYnW,EAAAA,IAAiB,EACtE,MAAO8D,EAAesS,IAAoBhiB,EAAAA,EAAAA,UAAwB,MAC5DkgB,GAAcC,EAAAA,GAAAA,KAEd8B,EAAWpW,IACbgQ,QAAQqG,KAAK,gCAAiCrW,GAC9CmW,EAAiB,OAGfG,GAAW9lB,EAAAA,EAAAA,cAAY,KACrBia,EACA4J,GAAYkC,EAAAA,EAAAA,KAAiB,CAAC9L,UAAAA,KACzBlW,MAAMiiB,IACHL,EAAiBK,MAEpB/hB,MAAM2hB,GACN3B,QAAQyB,IAEbC,EAAiB,MACjBD,OAEL,CAACzL,EAAWyL,IAMf,OAJA5hB,EAAAA,EAAAA,YAAU,KACNgiB,MACD,CAACA,IAEG,CAACzS,cAAAA,EAAemS,OAAQM,IFmGsBG,CAAiB,CAClEhM,WAAWwK,MAAAA,OAAA,EAAAA,EAAcyB,QAAQtT,MAAOqH,EACxCyL,UAAWH,KAET/M,IAAetT,EAAAA,EAAAA,UAAQ,KAAMihB,EAAAA,EAAAA,KAA4B9S,KAAgB,CAACA,KAE1E+S,IAAgBpmB,EAAAA,EAAAA,cAAY,KAC9Bia,GACI+I,EACIqD,EAAAA,GAAAA,OAAAA,QAAAA,WAAkC,CAC9BC,OAAQzD,EAAO/f,GACf8P,IAAKqH,OAGlB,CAACA,EAAW4I,EAAQG,IAEjBuD,IAAcvmB,EAAAA,EAAAA,cAAY8E,EAAAA,EAAAA,MAAKshB,GAAeX,IAAsB,CAACW,GAAeX,MAEpF,eACFe,GADE,cAEFC,GAFE,uBAGFC,GAHE,kBAIFC,GAJE,eAKFC,GALE,kBAMFC,GANE,gBAOFC,GAPE,eAQFC,GARE,uBASFC,KACAC,EAAAA,EAAAA,GAAkB,CAClB7Y,QAAQqW,MAAAA,OAAA,EAAAA,EAAcyB,UAAW1B,EACjC0C,SAAUX,GACVX,QAAStG,KAGP6H,GGnJ0B,KAA+C,IAA9C,WAAC9J,EAAD,aAAa7E,EAAb,OAA2BpK,GAAmB,EAC/E,MAAMgZ,GAAiCpnB,EAAAA,EAAAA,cAClC2I,IAA6B,MAC1B,OAAQ0U,GACJ,KAAK1Y,EAAW8Z,OACZ,OAAO4I,EAAAA,EAAAA,KAAe1e,EAAU6N,MACpC,KAAK7R,EAAW+Z,YACZ,OAAOzI,EAAAA,EAAAA,MAAoB,WAAAqR,EAAAA,EAAAA,KAA4B9O,EAAc7P,UAA1C,eAAsDiK,MAAO,IAC5F,KAAKjO,EAAW6Z,UACZ,OAAOlD,EAAAA,EAAAA,MAAkBE,EAAAA,EAAAA,KAAe7S,OAGpD,CAAC0U,EAAY7E,KAEV+O,EAAuBC,IAA4B7jB,EAAAA,EAAAA,UAA0B,IAC9E8jB,GAA6BxZ,EAAAA,EAAAA,QAAO,IACpCyZ,GAA6B1nB,EAAAA,EAAAA,cAC/B2nB,EAAAA,EAAAA,MAAS,KACLH,EAAyB,IAAIC,EAA2BxY,YACzD,IACH,IAEE2Y,GAA6B5nB,EAAAA,EAAAA,cAC9B6nB,IACGJ,EAA2BxY,QAAU4Y,EACrCH,EAA2BG,KAE/B,CAACH,IAGCI,GAA0B9nB,EAAAA,EAAAA,cAC5B,CAAC2I,EAA0Bof,KACvB,GAAKpf,EACL,GAAIof,EACA,GAAI1K,IAAe1Y,EAAW+Z,YAAa,CACvC,MAAMtF,GAAckO,EAAAA,EAAAA,KAA4B9O,EAAc7P,GAC9Dif,EAA2B,CAACjf,MAAeyQ,MAAAA,OAAA,EAAAA,EAAa/K,aAAc,UAEtEuZ,EAA2B,CAACjf,SAGhCif,EAA2B,MAGnC,CAACvK,EAAYuK,EAA4BpP,KAGtCwP,EAAmBC,IAAwBtkB,EAAAA,EAAAA,UAA0B,IACtEukB,GAA6BloB,EAAAA,EAAAA,cAC/B,CAACmoB,EAAuBC,KACpB/f,EAAAA,EAAAA,QACI8f,EAAKhf,QAAQkf,KAAmBC,EAAAA,EAAAA,MAAItW,EAAAA,EAAAA,KAAaqW,GAAgBD,KACjEA,EAAKjf,QAAQof,KAAmBD,EAAAA,EAAAA,MAAItW,EAAAA,EAAAA,KAAauW,GAAgBJ,OAEzE,IAEEhR,GAAuBnX,EAAAA,EAAAA,cACxB2I,IACG,GAAKA,EACL,GAAI0U,IAAe1Y,EAAW+Z,YAAa,CACvC,MAAMtF,GAAckO,EAAAA,EAAAA,KAA4B9O,EAAc7P,GAC9Dsf,GAAsBO,GAClBN,EAA2B,CAACvf,MAAeyQ,MAAAA,OAAA,EAAAA,EAAa/K,aAAc,IAAMma,UAGhFP,GAAsBO,GAAcN,EAA2B,CAACvf,GAAY6f,OAGpF,CAACnL,EAAY6K,EAA4B1P,IAS7C,OANA1U,EAAAA,EAAAA,YAAU,KACFkkB,EAAkBxhB,QAClByhB,EAAqB,MAE1B,CAAC5K,EAAYjP,IAET,CACHkN,kBAAmB8L,EACnBG,uBAAuBriB,EAAAA,EAAAA,UACnB,IAAM,IAAIqiB,KAA0BS,IACpC,CAACT,EAAuBS,IAE5BA,kBAAAA,EACA7Q,qBAAAA,EACA2Q,wBAAAA,IH8DiBW,CAAqB,CAACpL,WAAAA,EAAY7E,aAAAA,GAAcpK,OAAAA,IAC/Dsa,IAAgB1oB,EAAAA,EAAAA,cAAY,CAAC0f,EAAiBtR,KAChD4W,GAAoB5W,EAAS,kBAAC,GAAD,CAAoBA,OAAQA,EAAQsR,QAASA,IAAcA,KACzF,KAEG,aAACiJ,GAAD,gBAAeC,GAAf,cAAgCC,GAAhC,mBAA+CC,GAA/C,uBAAmEC,II1JtC,KAK1B,IAL2B,OACpCC,EAASzZ,EAAAA,GAD2B,UAEpCmW,EAAYnW,EAAAA,GAFwB,QAGpCqW,EAAUrW,EAAAA,GAH0B,cAIpCmZ,EAAgBnZ,EAAAA,IACP,EACT,MAAM,aAACoZ,EAAD,cAAeE,EAAf,gBAA8BD,IAAmBK,EAAAA,GAAAA,GAAoB,CAACD,OAAAA,EAAQtD,UAAAA,EAAWE,QAAAA,IACzFsD,GAAW/S,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvB+S,GAAShT,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WAErBgT,GAAeppB,EAAAA,EAAAA,cAChBqpB,IACGL,IACAK,EACKtlB,MAAK,KACF2hB,OAEHzhB,MAAM2hB,KAEf,CAACoD,EAAQpD,EAASF,IAoCtB,MAAO,CACHiD,aAAAA,EACAE,cAAAA,EACAD,gBAAAA,EACAE,oBArCuB9oB,EAAAA,EAAAA,cACtBoR,IACGtM,EAAAA,EAAAA,MACIwkB,EAAAA,KACAC,EAAAA,EAAAA,UAASC,IACLd,EAAczc,IAAAA,KAAU,qBAAsBud,EAASniB,GAChDmiB,KAEXJ,EANJtkB,CAOEsM,IACN,CAACgY,EAAcV,IA4BfK,wBAzB2B/oB,EAAAA,EAAAA,cAC3B,QAAC,UAAC2I,EAAD,WAAY+O,GAAb,SACI5S,EAAAA,EAAAA,MACI2kB,EAAAA,KACAF,EAAAA,EAAAA,UAASC,IACL,IAAKA,EAASE,WAAY,MAAM,IAAIC,MAAM1d,IAAAA,KAAU,sCACpD,OAAOud,KAEXJ,EANJtkB,CAOE,CACEokB,SAAAA,EACA9iB,MAAOuC,EAAUvC,MACjBoQ,KAAM7N,EAAU6N,KAChBoT,YAAajhB,EAAUihB,YACvBlS,WAAYA,EAAW5U,GACvB+mB,eAAgBV,MAExB,CAACC,EAAcF,EAAUC,MJuGzBW,CAAwB,CACpBpB,cAAAA,GACAhD,UAAWa,GACXX,SAAS5lB,EAAAA,EAAAA,cACJuf,IACGD,GAAiBC,GACbA,EAAMwK,YAAcC,EAAAA,IAAAA,qBACpBzD,OAGR,CAACA,KAELyC,QAAQhpB,EAAAA,EAAAA,cAAY,IAAMmjB,GAA0B,IAAO,OAG7D,cACF8G,GADE,cAEFC,GACA5G,UAAW6G,GAHT,aAIFC,GAJE,iBAKFC,GALE,YAMFC,GANE,WAOFC,KACAC,EAAAA,EAAAA,IAAW,CAACpc,OAAQoW,EAAiBiG,QAAStG,IAE5C5f,GAAO,CACT,CACIxB,YAAa,CACTD,GAAI2f,GAAYiI,OAChBjmB,KAAMkmB,GACN5f,aAAckB,IAAAA,KAAU,WAE5BzH,MAAO,kBAACiQ,EAAA,EAAD,CAAYC,QAAQ,MAAMzI,IAAAA,KAAU,WAC3C/J,QACI,kBAAC,GAAD,CACImb,WAAYA,EACZC,aAAc2F,EACd7U,QAAQqW,MAAAA,OAAA,EAAAA,EAAcyB,UAAW1B,EACjCnR,cAAeA,GACfmF,aAAcA,GACdC,uBAAwBkM,GACxBhM,WAAY8L,GAAgBvB,EAC5BtK,eAAgB+P,GAChB5P,qBAAsB+P,GACtB9S,yBAA0B+S,GAC1BlQ,gBAAiBgQ,GACjB/P,kBAAmB8P,MAI/B,CACI7lB,YAAa,CACTD,GAAI2f,GAAY8B,QAChB9f,KAAMmmB,EAAAA,EACN7f,aAAckB,IAAAA,KAAU,YAE5BzH,MACI,kBAACqmB,EAAA,EAAD,CACIC,QAAQV,MAAAA,QAAA,EAAAA,GAAc5jB,SAAU,GAAK,EACrC+R,WAAYA,EACZpP,OAAQ8gB,GACRC,cAAeA,KAGvBhoB,QAASkiB,EACL,kBAAC2G,EAAA,EAAD,CACIzH,UAAW6G,GACXE,iBAAkBA,GAClBW,iBAAkBZ,GAClBnQ,UAAWA,EACX2I,aAAcA,EACd2H,WAAYA,GACZD,YAAaA,KAGjB,kBAACW,EAAA,EAAD,QAINC,GACF,oCACI,kBAACxJ,GAAD,CACIC,mBAAoBA,EACpBC,4BAA6BA,EAC7B9gB,SAAUsiB,IAEd,kBAAC+H,EAAA,EAAD,CAAS3qB,UAAWjB,EAAO+iB,cAAe5hB,YAAY,cAI9D,OACI,yBAAKF,UAAWjB,EAAO6iB,aACnB,kBAAC,KAA8B+E,GAC3B,kBAAC,GAAAiE,YAAD,CAAaC,QAASC,GAAAA,SAClB,kBAACC,EAAA,EAAD,MACA,kBAACtsB,EAAA,EAAD,CACIC,cAAeA,GACfE,cAAc0F,EAAAA,EAAAA,OAAK0mB,EAAAA,EAAAA,SAAOzJ,EAAAA,EAAAA,QAAO,UAAU,KAAQ9K,EAAAA,EAAAA,OAAM,eAA3CnS,CAA2DP,KAEzE,oCACI,kBAACknB,EAAA,EAAD,CAAmBrd,OAAQA,EAAQqW,aAAcA,IAChDL,EACG,kBAAC,IAAD,CAA4BsH,cAAehF,IACvC,kBAACiF,EAAA,EAAD,CACInrB,UAAWjB,EAAOijB,gBAClBc,UAAWC,EACX4B,eAAgBA,GAChByG,uBAAwBxG,GACxBhX,OAAQoY,GACRC,cAAeA,GACfhO,uBAAwBkM,GACxBkH,uBAAwBjH,GACxBjM,WAAY8L,IAAiBpB,EAC7BxN,SAAU8Q,GACVmF,MAAOlF,GACPmF,SAAUlF,GACVjR,OAAQkR,GACRhR,MAAOiR,GACPC,uBAAwBA,GACxBkE,sBAAuBA,GACvBc,2BAA4BpK,KAIpC,kBAAC,GAAD,OAGR,kBAACtd,EAAD,CAAgBC,KAAMA,QAIlC,kBAACwgB,GAAD,UKpSNkH,IAAoBC,EAAAA,EAAAA,GAAwB,CAC9CC,iBAAkB,qBAClBC,eAAe,EACfC,KAAM,SCfV,GD0B2B,IAAgE,IAA/D,OAACxJ,EAAD,MAASyJ,EAAT,SAAgBC,EAAhB,UAA0BxJ,EAA1B,cAAqCvf,GAA0B,EACvF,MAAMgpB,GAA6DxsB,EAAAA,EAAAA,cAAYysB,EAAAA,EAAAA,KAAkBjpB,GAAgB,CAC7GA,IAEJ,OACI,kBAAC,EAAAkpB,SAAD,CAAUJ,MAAOA,GACb,kBAACK,EAAA,WAAD,CAAwBvmB,MAAOyc,EAAO/f,IAClC,kBAAC8pB,EAAA,GAAD,CAAgBX,kBAAmBA,IAC/B,kBAACY,EAAA,EAAD,CAAsBC,YAAaC,EAAAA,GAC/B,kBAAC,IAAD,CACIlZ,cAAY,EACZ0Y,SAAU,CAAC5sB,EAAOtB,IAAWkuB,MAAAA,OAAnB,EAAmBA,EAAWlmB,KAAK2mB,MAAMrtB,GAAQ0G,KAAK2mB,MAAM3uB,MAEzEwkB,GACG,kBAAC,GAAD,CACIA,OAAQA,EACRE,UAAWA,EACXvf,cAAegpB,IAGvB,kBAAC/M,EAAA,EAAD","sources":["webpack://@reltio/remotes/../components/src/components/ProfileResizablePanes/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileResizablePanes/ProfileResizablePanes.tsx","webpack://@reltio/remotes/../components/src/components/SideIconPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/SideButtonsPanel.tsx","webpack://@reltio/remotes/../components/src/contexts/PerspectivesSettingsContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../sources/src/types/LegendMode.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/sankey.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/useSankey.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/styles.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/MergeTooltip.tsx","webpack://@reltio/remotes/../sources/src/icons/notMatch.svg","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Node.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Link.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/SankeyChart.tsx","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/helpers.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/styles.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/CrosswalkTreeView.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/ContributorRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/LegendTableRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTable.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/helpers.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/styles.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/SelectableTree.tsx","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/UnmergeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/UnsubscribeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/LegendView/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendView/LegendView.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/icons/LegendIcon.svg","webpack://@reltio/remotes/../sources/src/services/errors.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/icons/EmptySources.svg","webpack://@reltio/remotes/../sources/src/components/EmptyState/styles.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/EmptyState.tsx","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/styles.ts","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/TreeActionSnackbar.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/RulesetOption.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetsMenuList/RulesetsMenuList.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesestsSelector.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/styles.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/SourcesView.tsx","webpack://@reltio/remotes/../sources/src/hooks/useEntityWithSurvivorshipGroups.tsx","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTree.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalksDisplay.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTreeActions.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/index.tsx","webpack://@reltio/remotes/./src/sources.ts"],"sourcesContent":["import {makeStyles} from '@mui/styles';\n\nconst useStyles = makeStyles(() => ({\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%',\n marginRight: '1px'\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n }\n}));\n\nexport {useStyles};\n","import React, {useCallback, cloneElement} from 'react';\nimport {ResizablePanes} from '../ResizablePanes/ResizablePanes';\nimport {SideButtonsPanel} from '../SideIconPanel/SideButtonsPanel';\nimport {usePerspectivesSettings} from '../../contexts';\nimport {isNil} from 'ramda';\n\nimport {useStyles} from './styles';\nimport {RightPanelTab} from '../../types';\n\nconst DEFAULT_R_PANE_SIZE = 480;\nconst MIN_R_PANE_SIZE = 320;\nconst MAX_R_PANE_SIZE = 640;\n\ntype Props = {\n perspectiveId: string;\n children: [React.ReactElement, React.ReactElement];\n buttonsProps: Array<RightPanelTab['buttonProps']>;\n disabled?: boolean;\n defaultTab?: number;\n};\n\nexport const ProfileResizablePanes = ({perspectiveId, children, buttonsProps, disabled, defaultTab}: Props) => {\n const styles = useStyles();\n\n const {perspectiveSettings, updatePerspectiveSettings} = usePerspectivesSettings(perspectiveId);\n const {width = DEFAULT_R_PANE_SIZE} = perspectiveSettings || {};\n const active = defaultTab || perspectiveSettings?.active;\n const isSidePanelOpen = !isNil(active) && !disabled;\n\n const handleUpdateSettings = useCallback(\n (newSetting) => {\n updatePerspectiveSettings(newSetting);\n },\n [updatePerspectiveSettings]\n );\n\n const toggleActive = useCallback(\n (newId: number) => {\n const newActive = active === newId ? null : newId;\n handleUpdateSettings({active: newActive});\n },\n [active, handleUpdateSettings]\n );\n\n const resetActive = useCallback((): void => {\n handleUpdateSettings({active: null});\n }, [handleUpdateSettings]);\n\n const handlePaneSizeChange = useCallback(\n ({size}) => {\n handleUpdateSettings({width: size});\n },\n [handleUpdateSettings]\n );\n\n return (\n <>\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n primary=\"second\"\n orientation=\"vertical\"\n size={isSidePanelOpen ? width : 0}\n minSize={MIN_R_PANE_SIZE}\n maxSize={MAX_R_PANE_SIZE}\n allowResize={isSidePanelOpen}\n onChange={handlePaneSizeChange}\n debounceInterval={2500}\n >\n <div className={styles.pane}>{children[0]}</div>\n <div className={styles.pane}>{cloneElement(children[1], {active, onClose: resetActive})}</div>\n </ResizablePanes>\n <SideButtonsPanel\n disabled={disabled}\n buttonsProps={buttonsProps}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </>\n );\n};\n\nProfileResizablePanes.displayName = 'ProfileResizablePanes';\n","import {alpha} from '@mui/material/styles';\n\nimport {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: '64px',\n paddingTop: '8px',\n backgroundColor: theme.palette.background.paper,\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)'\n },\n active: {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n color: theme.palette.primary.main,\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n height: '42px',\n width: '3px',\n backgroundColor: theme.palette.primary.main,\n left: '-8px',\n borderRadius: '0 6px 6px 0'\n }\n },\n buttonWrapper: {\n position: 'relative',\n width: '48px',\n height: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n margin: '2px 8px',\n color: theme.palette.text.secondary\n }\n}));\n","import React, {ElementType} from 'react';\nimport classnames from 'classnames';\nimport {IconButtonProps} from '@mui/material/IconButton';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n disabled: boolean;\n buttonsProps: Array<{\n icon: ElementType;\n tooltipTitle: string;\n id: number;\n }>;\n classes?: {active?: string; buttonWrapper?: string} & IconButtonProps['classes'];\n activeIndexId: number;\n className?: string;\n onButtonClick: (id: number) => void;\n};\n\nexport const SideButtonsPanel = ({\n disabled,\n buttonsProps,\n activeIndexId,\n className,\n onButtonClick,\n classes = {}\n}: Props) => {\n const styles = useStyles();\n const {active, buttonWrapper, ...iconButtonClasses} = classes;\n\n return (\n <div className={classnames(styles.container, className)}>\n {buttonsProps.map(({id, ...buttonProps}) => {\n return (\n <SmallIconButtonWithTooltip\n {...buttonProps}\n disabled={disabled}\n classes={iconButtonClasses}\n size=\"S\"\n key={id}\n className={classnames(\n {[classnames(styles.active, active)]: activeIndexId === id},\n styles.buttonWrapper,\n buttonWrapper\n )}\n onClick={() => onButtonClick(id)}\n data-reltio-id={`reltio-profile-right-side-button-${id}`}\n />\n );\n })}\n </div>\n );\n};\n","import React, {useCallback, useContext} from 'react';\nimport {PerspectivesSettings, PerspectiveSettingItem} from '../../types';\n\ntype PerspectivesSettingsProps = {\n settings: PerspectivesSettings;\n onChange: (perspectiveId: string, newSetting: Partial<PerspectiveSettingItem>) => void;\n};\n\nexport const PerspectivesSettingsContext = React.createContext<PerspectivesSettingsProps>({\n settings: {},\n onChange: () => {}\n});\n\nPerspectivesSettingsContext.displayName = 'PerspectivesSettingsContext';\n\nexport const usePerspectivesSettings = (perspectiveId: string) => {\n const {settings, onChange} = useContext(PerspectivesSettingsContext) || {};\n const perspectiveSettings = settings?.[perspectiveId];\n\n const updatePerspectiveSettings = useCallback(\n (newSetting: Partial<PerspectiveSettingItem>) => {\n onChange(perspectiveId, newSetting);\n },\n [perspectiveId, onChange]\n );\n\n return {updatePerspectiveSettings, perspectiveSettings};\n};\n","import {useEffect, useState} from 'react';\n\nexport const useSavedState = <T>(getSavedState: () => Promise<T>) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [savedState, setSavedState] = useState<T | Record<string, never>>({});\n\n useEffect(() => {\n getSavedState()\n .then((savedState) => {\n setSavedState(savedState || {});\n })\n .then((_) => setIsLoaded(true))\n .catch((_) => setIsLoaded(true));\n }, []); // eslint-disable-line\n\n return {isLoaded, savedState};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '16px 12px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12);'\n },\n closeButton: {\n marginRight: '12px'\n }\n});\n","import React from 'react';\nimport CloseIcon from '@mui/icons-material/Close';\nimport {RightPanelTab, SmallIconButton} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClose?: () => void;\n active?: number;\n tabs: RightPanelTab[];\n};\n\nexport const RightSidePanel = ({active, onClose, tabs}: Props) => {\n const styles = useStyles();\n const {content, title} = tabs[active] || {};\n\n return (\n <>\n <div className={styles.header}>\n <SmallIconButton className={styles.closeButton} icon={CloseIcon} onClick={onClose} />\n {title}\n </div>\n {content}\n </>\n );\n};\n","export enum LegendMode {\n Crosswalk = 'crosswalks',\n Source = 'source',\n Contributor = 'contributor'\n}\n","import {sum, map, pipe, groupBy, toPairs, sort, nth, prop, reduce, last} from 'ramda';\nimport {SankeyLink, SankeyData} from '../../types/SankeyChartData';\n\nconst sumValues = (links: SankeyLink[]): number => pipe(map(prop('value')), sum)(links);\nconst interpolateNumber = (a: number, b: number) => ((a = +a), (b = +b), (t) => a * (1 - t) + b * t);\n\nexport default function Sankey() {\n const lastLinksSize = 22;\n\n let nodeWidth = 24,\n smallestNodeMaxHeight = 15,\n smallestNodeMinHeight = 10,\n nodePadding = 8,\n size = [1, 1] as [number, number];\n\n function sankey({nodes, links}: SankeyData) {\n const graph = {nodes, links};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeBreadths(graph);\n computeNodeDepths(graph);\n computeLinkDepths(graph);\n correctNodesDepth(graph);\n return graph;\n }\n\n sankey.nodeWidth = () => nodeWidth;\n sankey.setNodeWidth = (width: number) => ((nodeWidth = +width), sankey);\n\n sankey.nodePadding = () => nodePadding;\n sankey.setNodePadding = (padding: number) => ((nodePadding = +padding), sankey);\n\n sankey.smallestNodeMaxHeight = () => smallestNodeMaxHeight;\n sankey.setSmallestNodeMaxHeight = (height: number) => ((smallestNodeMaxHeight = +height), sankey);\n\n sankey.smallestNodeMinHeight = () => smallestNodeMinHeight;\n sankey.setSmallestNodeMinHeight = (height: number) => ((smallestNodeMinHeight = +height), sankey);\n\n sankey.size = () => size;\n sankey.setSize = (newSize: [number, number]) => ((size = newSize), sankey);\n\n sankey.update = (graph) => {\n computeLinkDepths(graph);\n return graph;\n };\n\n sankey.link = () => {\n let curvature = 0.5;\n\n function link(d) {\n const lastLine = !d.target.sourceLinks || d.target.sourceLinks.length == 0;\n const addPixels = 0.13;\n const x0 = d.source.x + d.source.dx,\n x1 = d.target.x,\n xi = interpolateNumber(x0, x1),\n x2 = xi(curvature),\n x3 = xi(1 - curvature),\n y0 = d.source.y + d.sy - addPixels,\n y1 = d.target.y + d.ty - addPixels;\n const appendix = !lastLine\n ? `L${x1 + nodeWidth},${y1} L${x1 + nodeWidth},${y1 + d.dy + 2 * addPixels}`\n : '';\n\n return y0 === y1\n ? `M${x0},${y0} \n L${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n L${x0},${y0 + d.dy + 2 * addPixels} Z`\n : `M${x0},${y0}\n C${x2},${y0} ${x3},${y1} ${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n C${x3},${y1 + d.dy + 2 * addPixels} ${x2},${y0 + d.dy + 2 * addPixels} \n ${x0},${y0 + d.dy + 2 * addPixels} Z`;\n }\n\n link.curvature = function (_) {\n if (!arguments.length) return curvature;\n curvature = +_;\n return link;\n };\n\n return link;\n };\n\n // Populate the sourceLinks and targetLinks for each node.\n function computeNodeLinks({nodes, links}: SankeyData) {\n nodes.forEach((node) => {\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n links.forEach((link) => {\n link.source.sourceLinks.push(link);\n link.target.targetLinks.push(link);\n });\n }\n\n // Compute the value (size) of each node by summing the associated links.\n function computeNodeValues({nodes}: SankeyData) {\n nodes.forEach((node) => {\n node.value = Math.max(sumValues(node.sourceLinks), sumValues(node.targetLinks));\n });\n }\n\n // Iteratively assign the breadth (x-position) for each node.\n // Nodes are assigned the maximum breadth of incoming neighbors plus one;\n // nodes with no incoming links are assigned breadth zero, while\n // nodes with no outgoing links are assigned the maximum breadth.\n function computeNodeBreadths({nodes}: SankeyData) {\n if (!nodes.length) return;\n let remainingNodes = [nodes[0]],\n nextNodes,\n x = 0;\n\n while (remainingNodes.length) {\n nextNodes = [];\n remainingNodes.forEach((node) => {\n node.x = x;\n node.dx = nodeWidth;\n node.targetLinks.forEach((link) => {\n if (nextNodes.indexOf(link.source) < 0) {\n nextNodes.push(link.source);\n }\n });\n });\n remainingNodes = nextNodes;\n ++x;\n }\n\n nodes.forEach((node) => {\n node.x = x - 1 - node.x;\n });\n\n if (x > 2) {\n const w = (size[0] - 2 * nodeWidth - lastLinksSize) / (x - 2);\n nodes.forEach((node) => {\n if (!node.sourceLinks || node.sourceLinks.length == 0) node.x = size[0] - nodeWidth;\n else node.x *= w;\n });\n } else {\n nodes[0].x = size[0] - nodeWidth;\n nodes[1].x = nodes[0].x - lastLinksSize - nodeWidth;\n }\n }\n\n function computeNodeDepths({nodes, links}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a, b) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n //\n initializeNodeDepth();\n resolveCollisions();\n\n const max = pipe(\n map((nodes) => (nodes.length - 1) * nodePadding + sum(map((node) => node.dy, nodes))),\n reduce(Math.max, 0)\n )(nodesByBreadth);\n\n const y1 = (size[1] - max) / 2;\n\n nodesByBreadth.forEach((nodes) => {\n const {y, dy} = last(nodes);\n const y0 = size[1] - (y + dy);\n nodes.forEach((node) => {\n node.y += y0;\n if (y1 > 0) node.y -= y1;\n });\n });\n\n function initializeNodeDepth() {\n let ky = pipe(\n map((nodes) => (size[1] - (nodes.length - 1) * nodePadding) / sumValues(nodes)),\n reduce(Math.min, Infinity)\n )(nodesByBreadth);\n\n const min = pipe(\n map((node) => node.value / (node.targetLinks?.length || 1)),\n reduce(Math.min, Infinity)\n )(nodes);\n\n ky = Math.max(Math.min(ky, smallestNodeMaxHeight / min), smallestNodeMinHeight / min);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node, i) => {\n node.y = i;\n node.dy = node.value * ky;\n });\n });\n\n links.forEach((link) => {\n link.dy = link.value * ky;\n });\n }\n\n function resolveCollisions() {\n nodesByBreadth.forEach((nodes) => {\n let node,\n dy,\n y0 = 0,\n i;\n const n = nodes.length;\n\n // Push any overlapping nodes down.\n nodes.sort((a, b) => a.y - b.y);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dy = y0 - node.y;\n if (dy > 0) node.y += dy;\n y0 = node.y + node.dy + nodePadding;\n }\n\n // If the bottommost node goes outside the bounds, push it back up.\n dy = y0 - nodePadding - size[1];\n if (dy > 0) {\n y0 = node.y -= dy;\n\n // Push any overlapping nodes back up.\n for (i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.y + node.dy + nodePadding - y0;\n if (dy > 0) node.y -= dy;\n y0 = node.y;\n }\n }\n });\n }\n }\n\n function computeLinkDepths({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node) => {\n if (node.targetLinks?.length) {\n const result = [];\n const linksByUuid = node.targetLinks.map((l) => l.crosswalk.uuid);\n const sourceNodes = [];\n node.targetLinks.forEach(function (l) {\n if (this.indexOf(l.source) == -1) this.push(l.source);\n }, sourceNodes);\n for (let i = 0; i < sourceNodes.length; i++)\n for (let j = 0; j < sourceNodes[i].sourceLinks.length; j++) {\n const index = linksByUuid.indexOf(sourceNodes[i].sourceLinks[j].crosswalk.uuid);\n if (index != -1) result.push(node.targetLinks[index]);\n }\n node.targetLinks = result;\n }\n\n if (node.sourceLinks?.length) {\n const result = [];\n if (node.targetLinks?.length) {\n const linksByUuid = node.sourceLinks.map((l) => l.crosswalk.uuid);\n for (let i = 0; i < node.targetLinks.length; i++) {\n const index = linksByUuid.indexOf(node.targetLinks[i].crosswalk.uuid);\n if (index != -1) result.push(node.sourceLinks[index]);\n }\n }\n\n const resultByUuid = result.map((l) => l.crosswalk.uuid);\n const newSources = node.sourceLinks.filter(function (l) {\n return this.indexOf(l.crosswalk.uuid) == -1;\n }, resultByUuid);\n\n node.sourceLinks = newSources.concat(result);\n if (result.length > 0) {\n let sizeForNewSources = 0;\n for (let i = 0; i < newSources.length; i++) sizeForNewSources += newSources[i].dy;\n node.sizeForNewSources = sizeForNewSources;\n }\n }\n });\n });\n\n nodes.forEach((node) => {\n let sy = 0,\n ty = node.sizeForNewSources || 0;\n delete node.sizeForNewSources;\n node.sourceLinks.forEach((link) => {\n link.sy = sy;\n sy += link.dy;\n });\n node.targetLinks.forEach((link) => {\n link.ty = ty;\n ty += link.dy;\n });\n });\n }\n\n function correctNodesDepth({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => b[0] - a[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes = nodes.concat().sort((a, b) => a.y - b.y);\n nodes.forEach((node, i) => {\n if (node.sourceLinks?.length) {\n const {target, ty, dy} = last(node.sourceLinks);\n let y0 = target.y + ty + dy - node.dy;\n if (nodes[i - 1]?.x == node.x && y0 < nodes[i - 1]?.y + nodes[i - 1]?.dy + nodePadding)\n y0 = nodes[i - 1].y + nodes[i - 1].dy + nodePadding;\n if (node.y > y0) {\n node.y = y0;\n }\n }\n });\n });\n }\n\n return sankey;\n}\n","import {useMemo} from 'react';\nimport {SankeyData, SankeyNode} from '../../types/SankeyChartData';\nimport sankey from './sankey';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n};\n\nconst useSankey = ({data, width, height}: Props) =>\n useMemo(() => {\n if (!width || !height) return {nodes: [], links: []};\n\n const shallowCopy = (data: SankeyData): SankeyData => {\n const safeNodes = data.nodes.map((node) => ({...node}));\n const getSafeNode = (originalNode: SankeyNode) => {\n const index = data.nodes.indexOf(originalNode);\n return safeNodes[index];\n };\n\n const safeLinks = data.links.map((link) => ({\n ...link,\n source: getSafeNode(link.source),\n target: getSafeNode(link.target)\n }));\n return {nodes: safeNodes, links: safeLinks};\n };\n\n const sankeyLayout = sankey()\n .setNodeWidth(14)\n .setNodePadding(20)\n .setSize([height - 2, width - 2]);\n\n const nodeWidth = sankeyLayout.nodeWidth();\n const path = sankeyLayout.link();\n\n const safeData = shallowCopy(data);\n const {nodes, links}: SankeyData = sankeyLayout(safeData);\n\n return {nodes, links, nodeWidth, path};\n }, [data, height, width]);\n\nexport default useSankey;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n tooltipTitle: {\n fontWeight: 500,\n fontSize: '16px',\n lineHeight: '24px',\n letterSpacing: '0.15px',\n marginBottom: '8px',\n userSelect: 'none'\n },\n tooltipRow: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: 'normal',\n '&:not(:last-child)': {\n marginBottom: '4px'\n }\n },\n tooltipIcon: {\n fontSize: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n marginRight: '8px'\n },\n node: {\n stroke: '#000000',\n strokeWidth: 1,\n strokeOpacity: 0.38\n },\n rootNode: {\n transform: 'rotate(90deg)',\n userSelect: 'none',\n fontSize: '13px'\n },\n popupContainer: {\n padding: 5,\n boxSizing: 'border-box'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {LightArrowTooltip} from '@reltio/components';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport PersonIcon from '@mui/icons-material/Person';\nimport {useStyles} from './styles';\n\ntype Props = {\n user: string;\n time: number;\n children: React.ReactElement;\n};\n\nexport const MergeTooltip = ({user, time, children}: Props) => {\n const styles = useStyles();\n const tooltipTitle = (\n <div>\n <span className={styles.tooltipTitle}>{i18n.text('Merge details')}</span>\n <div className={styles.tooltipRow}>\n <CalendarTodayIcon className={styles.tooltipIcon} />\n {i18n.date(time, 'L LTS')}\n </div>\n <div className={styles.tooltipRow}>\n <PersonIcon className={styles.tooltipIcon} />\n {user}\n </div>\n </div>\n );\n\n return (\n <LightArrowTooltip title={tooltipTitle} placement={'top'}>\n {children}\n </LightArrowTooltip>\n );\n};\n\nexport default MergeTooltip;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M17 13.138l4.5 4.5-4.5 4.5V18.5h-1.247l-3.488-3.479 1.413-1.414 2.901 2.893H17v-3.362zM17 1.5L21.5 6 17 10.5V7.138h-.421l-11.03 11H2v-2h2.723l11.03-11H17V1.5zm-11.45 4l3.294 3.286-1.414 1.413L4.723 7.5H2v-2h3.55z\",\n id: \"svg2499598299a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2499598299b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2499598299a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2499598299b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import React, {MouseEvent, useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Popover from '@mui/material/Popover';\nimport MergeTooltip from './MergeTooltip';\nimport {SankeyNode} from '../../types/SankeyChartData';\nimport {SmallIconButtonWithTooltip, noop, useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {groupBy, prop, pipe, map, head, last, max, min} from 'ramda';\nimport UnmergeIcon from '../../icons/notMatch.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n nodeWidth: number;\n node: SankeyNode;\n highlightEnabled: boolean;\n isColored: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n isDragging: boolean;\n};\n\nexport const Node = ({node, nodeWidth, highlightEnabled, isColored, disableUnmerge, onUnmerge, isDragging}: Props) => {\n const styles = useStyles();\n const [labelX, setLabelX] = useState(0);\n const [anchorEl, setAnchorEl] = useState(null);\n const textRef = useRef(null);\n const {\n x,\n y,\n name,\n label,\n targetLinks,\n sourceLinks,\n entity: {crosswalks = [], merges}\n } = node;\n const [firstCrosswalk] = crosswalks;\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(firstCrosswalk);\n const color = useCrosswalkColor(firstCrosswalk);\n const startNodeHeight = crosswalks?.length\n ? sourceLinks[crosswalks.length - 1].sy + sourceLinks[crosswalks.length - 1].dy\n : 0;\n\n const renderMergeNodes = () => {\n const timeMap = pipe(map(prop('source')), groupBy(prop('time')))(targetLinks);\n\n return merges?.map(({time, user}, index) => {\n const sources = timeMap[time];\n if (!sources) return;\n\n const [start, end] = sources.reduce(\n (acc, {sourceLinks}) => [\n min(head(sourceLinks).ty, acc[0]),\n max(last(sourceLinks).ty + last(sourceLinks).dy, acc[1])\n ],\n [Infinity, 0]\n );\n\n return (\n <MergeTooltip user={user} time={time} key={'node-' + index}>\n <rect\n transform={`translate(0,${start})`}\n height={end - start}\n width={nodeWidth}\n className={styles.node}\n fillOpacity={0.54}\n fill={'#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.38 : 1}\n />\n </MergeTooltip>\n );\n });\n };\n\n const openPopup = (e: MouseEvent<SVGRectElement>) => setAnchorEl(e.currentTarget);\n const closePopup = () => setAnchorEl(null);\n const handleUnmerge = () => {\n onUnmerge(name);\n closePopup();\n };\n\n useEffect(() => {\n const nodeHeight = node.dy;\n const textWidth = textRef?.current?.clientWidth || 0;\n if (nodeHeight < textWidth) setLabelX(nodeHeight / 2 - textWidth / 2);\n }, []);\n\n useEffect(() => {\n if (isDragging && !!anchorEl) closePopup();\n }, [isDragging]);\n\n return (\n <g transform={`translate(${x},${y})`}>\n {name === 'ROOT' ? (\n <text dy={-5} dx={labelX} ref={textRef} className={styles.rootNode}>\n {label || ''}\n </text>\n ) : (\n <>\n <rect\n height={startNodeHeight}\n width={14}\n className={styles.node}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n key={'node-main'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n onClick={disableUnmerge ? noop : openPopup}\n cursor={disableUnmerge ? 'default' : 'pointer'}\n data-reltio-id=\"reltio-sankey-chart-node\"\n />\n <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n anchorOrigin={{vertical: 'top', horizontal: 'right'}}\n onClose={closePopup}\n classes={{paper: styles.popupContainer}}\n data-reltio-id=\"reltio-unmerge-popup\"\n >\n <SmallIconButtonWithTooltip\n size=\"XS\"\n tooltipTitle={i18n.text('Unmerge')}\n icon={UnmergeIcon}\n onClick={handleUnmerge}\n />\n </Popover>\n {!!targetLinks?.length && renderMergeNodes()}\n </>\n )}\n </g>\n );\n};\n\nexport default Node;\n","import React from 'react';\nimport {useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {SankeyLink} from '../../types/SankeyChartData';\n\ntype Props = {\n link: SankeyLink;\n path: string;\n highlightEnabled: boolean;\n isColored: boolean;\n};\n\nexport const Link = ({link, path, highlightEnabled, isColored}: Props) => {\n const {crosswalk} = link;\n const color = useCrosswalkColor(crosswalk);\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(crosswalk);\n return (\n <path\n d={path}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n />\n );\n};\n\nexport default Link;\n","import React, {useMemo, useState, useEffect} from 'react';\nimport useSankey from './useSankey';\nimport Node from './Node';\nimport Link from './Link';\nimport {SankeyData} from '../../types/SankeyChartData';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n accentContributors?: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n};\n\nconst SankeyChart = ({width, height, data, accentContributors, onUnmerge, disableUnmerge}: Props) => {\n const [isDragging, setDragging] = useState(false);\n const [isMouseDown, setMouseDown] = useState(false);\n const [previousPageX, setPreviousPageX] = useState(0);\n const [offsetX, setOffsetX] = useState(0);\n const {links, nodes, nodeWidth, path} = useSankey({data, width, height});\n\n useEffect(() => {\n setOffsetX(0);\n setPreviousPageX(0);\n }, [width, height]);\n\n const sankeyNodes = useMemo(\n () =>\n nodes.map((node, index) => (\n <Node\n highlightEnabled={accentContributors}\n isColored={accentContributors}\n node={node}\n nodeWidth={nodeWidth}\n key={`SankeyNode-${index}`}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n isDragging={isDragging}\n />\n )),\n [nodes, accentContributors, nodeWidth, width, height, isDragging]\n );\n\n const sankeyLinks = useMemo(\n () =>\n links.map((link, index) => (\n <Link\n highlightEnabled={!accentContributors}\n isColored={!accentContributors}\n link={link}\n path={path(link)}\n key={`SankeyLink-${index}`}\n />\n )),\n [accentContributors, links, path]\n );\n\n const extractPositionDelta = (event: React.MouseEvent) => {\n const left = event.pageX;\n const offsetX = left - previousPageX;\n setPreviousPageX(left);\n return offsetX;\n };\n\n const onDown = (event: React.MouseEvent) => {\n event.preventDefault();\n setMouseDown(true);\n extractPositionDelta(event);\n };\n const onMove = (event: React.MouseEvent) => {\n if (!isMouseDown) return;\n setDragging(true);\n const left = extractPositionDelta(event);\n setOffsetX(offsetX + left);\n };\n const onUp = () => {\n setMouseDown(false);\n setDragging(false);\n };\n\n const pointerEvents = isDragging ? 'none' : 'auto';\n const cursor = isDragging ? 'move' : 'auto';\n\n return (\n <svg\n width={width}\n height={height}\n cursor={cursor}\n onMouseDown={onDown}\n onMouseMove={onMove}\n onMouseUp={onUp}\n onMouseLeave={onUp}\n >\n <g transform={`translate(${offsetX},${height - 1}) rotate(-90)`} pointerEvents={pointerEvents}>\n <g>{sankeyLinks}</g>\n <g>{sankeyNodes}</g>\n </g>\n </svg>\n );\n};\n\nexport default SankeyChart;\n","import {chain, concat, curry, evolve, filter, map, pipe, uniq} from 'ramda';\nimport {CrosswalkBase, CrosswalkTree, eqCrosswalks} from '@reltio/mdm-sdk';\nimport {SankeyLink, SankeyNode} from '../../types/SankeyChartData';\n\nconst isCrosswalkDisplayed = curry(\n (displayedCrosswalks: CrosswalkBase[], crosswalk: CrosswalkBase) =>\n !displayedCrosswalks || displayedCrosswalks.some(eqCrosswalks(crosswalk))\n);\n\nconst filterDisplayedCrosswalks = curry((displayedCrosswalks: CrosswalkBase[], tree: CrosswalkTree) => {\n return evolve(\n {\n crosswalks: filter(isCrosswalkDisplayed(displayedCrosswalks)),\n merges: map(\n evolve({\n losers: map(filterDisplayedCrosswalks(displayedCrosswalks))\n })\n )\n },\n tree\n );\n});\n\nconst addCrosswalkUniqueId = (tree: CrosswalkTree) => {\n let count = 1;\n const addIdToSubtree = pipe(\n evolve({crosswalks: map((crosswalk) => ({...crosswalk, uuid: count++}))}),\n evolve({\n merges: map(\n evolve({\n losers: map((loser) => addIdToSubtree(loser))\n })\n )\n })\n );\n return addIdToSubtree(tree);\n};\n\nconst processTree = (tree: CrosswalkTree & {label?: string}) => {\n const nodes: SankeyNode[] = [];\n const links: SankeyLink[] = [];\n\n const processSubTree = (tree, parentIndex, time) => {\n const {crosswalks = [], merges = [], uri = '', label} = tree;\n\n nodes.push({entity: tree, name: uri, time, label});\n const index = nodes.length - 1;\n\n const mergesCrosswalks = pipe(\n chain(({losers, time}) => {\n return pipe(\n filter((loser) => loser.crosswalks?.length || loser.merges?.length),\n chain((loser) => processSubTree(loser, index, time))\n )(losers);\n }),\n concat(crosswalks)\n )(merges);\n\n if (parentIndex != -1)\n mergesCrosswalks.forEach((crosswalk) =>\n links.push({\n source: nodes[index],\n target: nodes[parentIndex],\n value: 10,\n crosswalk\n })\n );\n\n return mergesCrosswalks;\n };\n processSubTree(tree, -1, Date.now());\n\n const linkedNodes = pipe(\n chain(({source, target}) => [source, target]),\n uniq\n )(links);\n\n return {nodes: nodes.filter((node) => linkedNodes.includes(node)), links};\n};\n\nexport const getSankeyData = (\n crosswalkTree: CrosswalkTree,\n entityLabel = '',\n displayedCrosswalks?: CrosswalkBase[]\n) => {\n return pipe(\n filterDisplayedCrosswalks(displayedCrosswalks),\n addCrosswalkUniqueId,\n processTree\n )({uri: 'ROOT', label: entityLabel, crosswalks: [], merges: [{time: Date.now(), losers: [crosswalkTree]}]});\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n graph: {\n padding: '8px 0px',\n boxSizing: 'border-box',\n height: '100%',\n width: '100%'\n }\n}));\n","import React, {memo} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {noop} from '@reltio/components';\nimport SankeyChart from '../SankeyChart/SankeyChart';\nimport {getSankeyData} from './helpers';\nimport {CrosswalkBase, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n crosswalkTree: CrosswalkTree;\n entityLabel?: string;\n visibleCrosswalks?: CrosswalkBase[];\n accentContributors?: boolean;\n disableUnmerge?: boolean;\n onUnmerge?: (contributorUri: string) => void;\n};\n\nconst CrosswalkTreeView = ({\n crosswalkTree,\n entityLabel,\n visibleCrosswalks,\n accentContributors,\n disableUnmerge = false,\n onUnmerge = noop\n}: Props) => {\n const styles = useStyles();\n const sankeyData = getSankeyData(crosswalkTree, entityLabel, visibleCrosswalks);\n\n return (\n <div className={styles.graph} data-reltio-id=\"reltio-crosswalk-tree\">\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n {({width = 0, height = 200}: {width: number; height: number}) => (\n <SankeyChart\n width={width}\n height={height}\n data={sankeyData}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n />\n )}\n </ReactResizeDetector>\n </div>\n );\n};\n\nexport default memo(CrosswalkTreeView);\n","import {makeStyles} from '@mui/styles';\n\ntype StylesProps = {\n isFocused?: boolean;\n};\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n paddingRight: '8px',\n '& button + button': {\n marginLeft: '4px'\n }\n },\n focusedIcon: ({isFocused}: StylesProps) => ({\n width: 28,\n height: 28,\n color: isFocused ? '#000' : 'rgba(0, 0, 0, 0.54)',\n borderRadius: 0\n }),\n title: {\n color: theme.palette.text.secondary,\n paddingLeft: '6px',\n paddingRight: '2px'\n },\n uri: {\n lineHeight: '15px',\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Typography from '@mui/material/Typography';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport {SmallIconButtonWithTooltip, Spacer} from '@reltio/components';\nimport {getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype ContributorAction = React.ComponentPropsWithRef<typeof SmallIconButtonWithTooltip> & {\n show: boolean;\n};\n\ntype Props = {\n contributorUri: string;\n isFocused: boolean;\n focusable: boolean;\n onToggleFocus: () => void;\n contributorActions: ContributorAction[];\n};\n\nconst ContributorRow = ({contributorUri, focusable, contributorActions, onToggleFocus, isFocused}: Props) => {\n const styles = useStyles({isFocused});\n return (\n <div className={styles.root}>\n <SmallIconButtonWithTooltip\n size=\"XXS\"\n onClick={() => onToggleFocus()}\n className={styles.focusedIcon}\n icon={focusable && VisibilityIcon}\n disabled={!focusable}\n tooltipTitle={focusable && i18n.text('Focus')}\n />\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity ID:')}</span>\n {getLastUriPart(contributorUri)}\n </Typography>\n <Spacer />\n {contributorActions.map(({show, ...buttonProps}, i) => {\n return show && <SmallIconButtonWithTooltip key={i} size=\"XS\" showForDisabled {...buttonProps} />;\n })}\n </div>\n );\n};\n\nexport default ContributorRow;\n","import {makeStyles} from '@mui/styles';\n\ntype StylesProps = {\n contributorColor: string;\n};\n\nexport const useStyles = makeStyles(() => ({\n root: ({contributorColor}: StylesProps) => ({\n fontSize: '13px',\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n border: '1px solid rgba(0, 0, 0, 0.05)',\n paddingLeft: '8px',\n '&:before': {\n content: '\" \"',\n borderLeft: `8px solid ${contributorColor}`,\n position: 'absolute',\n top: -1,\n left: 0,\n bottom: -1\n },\n '& > div + div': {\n marginTop: '1px'\n }\n }),\n editor: {\n padding: '0px 30px 0px 25px'\n }\n}));\n","import React, {useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CrosswalkEditor,\n SourceCrosswalksRow,\n CrosswalksByTypes,\n CrosswalkType,\n useCrosswalkFocus,\n useHighlightedCrosswalks\n} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {\n Crosswalk,\n DataTenant,\n eqCrosswalks,\n getContributorColor,\n getDataTenantFromCrosswalks,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport {chain, find, flatten, head, pipe, pluck, propOr, props, values} from 'ramda';\nimport AddIcon from '@mui/icons-material/Add';\nimport UnmergeIcon from '../../../icons/notMatch.svg';\nimport UnsubscribeIcon from '@mui/icons-material/Delete';\nimport ContributorRow from './ContributorRow/ContributorRow';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n contributorUri: string;\n accentContributor?: boolean;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n canUnmerge: boolean;\n disableAddCrosswalk: boolean;\n disableEditCrosswalk: boolean;\n disableDeleteCrosswalk: boolean;\n disableUnmergeContributor: boolean;\n onAdd: (event: {contributorCrosswalk: Crosswalk; crosswalk: Omit<Crosswalk, 'uri'>}) => void;\n onDelete: (crosswalkId: string) => void;\n onEdit: (event: {crosswalkId: string; attributeName: string; value?: string}) => void;\n onUnmerge: () => void;\n expandedSources?: string[];\n onToggleSourceExpanded: (sourceUri: string) => void;\n onUnsubscribeContributor: (event: {contributorUri: string; dataTenant: DataTenant; crosswalk: Crosswalk}) => void;\n};\n\nconst LegendTableRow = ({\n className,\n contributorUri,\n accentContributor,\n crosswalksBySources,\n expandedSources,\n canUnmerge,\n disableAddCrosswalk,\n disableEditCrosswalk,\n disableDeleteCrosswalk,\n disableUnmergeContributor,\n onUnmerge,\n onEdit,\n onDelete,\n onAdd,\n onToggleSourceExpanded,\n onUnsubscribeContributor\n}: Props) => {\n const contributorColor = accentContributor ? getContributorColor(contributorUri) : 'rgba(0, 0, 0, 0.38)';\n const styles = useStyles({contributorColor});\n const dataTenants = useSelector(mdm.selectors.getDataTenants);\n\n const ref = useRef(null);\n const [scrollToCrosswalk] = useHighlightedCrosswalks();\n useEffect(() => {\n if (accentContributor && scrollToCrosswalk) {\n const crosswalks = pipe(\n find(({source}) => source === scrollToCrosswalk.type),\n propOr({}, 'crosswalksByTypes'),\n values,\n flatten\n )(crosswalksBySources);\n if (\n crosswalks.some(\n (crosswalk) => eqCrosswalks(scrollToCrosswalk, crosswalk) && crosswalk !== scrollToCrosswalk\n )\n ) {\n ref?.current?.scrollIntoView({behavior: 'smooth'});\n }\n }\n }, [scrollToCrosswalk]);\n\n const [showEditor, setShowEditor] = useState(false);\n\n const contributorCrosswalk: Crosswalk = pipe(\n pluck('crosswalksByTypes'),\n find((crosswalks) => crosswalks[CrosswalkType.Simple].length || crosswalks[CrosswalkType.Empty].length),\n props([CrosswalkType.Simple, CrosswalkType.Empty]),\n flatten,\n head\n )(crosswalksBySources);\n const {toggleCrosswalkFocus, isFocused} = useCrosswalkFocus(contributorCrosswalk);\n\n const allContributorCrosswalks: (Crosswalk | RelationCrosswalk)[] = pipe(\n pluck('crosswalksByTypes'),\n chain(values),\n flatten\n )(crosswalksBySources);\n\n const dataTenantForExternalCrosswalk = getDataTenantFromCrosswalks(allContributorCrosswalks, dataTenants);\n\n const unsubscribeContributor = () =>\n onUnsubscribeContributor({\n contributorUri,\n dataTenant: dataTenantForExternalCrosswalk,\n crosswalk: contributorCrosswalk\n });\n\n const contributorActions = [\n {\n icon: AddIcon,\n tooltipTitle: i18n.text('Add crosswalk'),\n onClick: () => setShowEditor(true),\n disabled: disableAddCrosswalk,\n show: !!contributorCrosswalk\n },\n {\n icon: UnmergeIcon,\n tooltipTitle: i18n.text('Unmerge'),\n onClick: () => onUnmerge(),\n disabled: disableUnmergeContributor,\n show: canUnmerge\n },\n {\n icon: UnsubscribeIcon,\n tooltipTitle: i18n.text('Unsubscribe'),\n onClick: () => unsubscribeContributor(),\n disabled: disableUnmergeContributor,\n show: canUnmerge && !!dataTenantForExternalCrosswalk\n }\n ];\n\n return (\n <div ref={ref} className={classnames(styles.root, className)}>\n <ContributorRow\n contributorUri={contributorUri}\n focusable={accentContributor && !!contributorCrosswalk}\n isFocused={accentContributor && isFocused}\n onToggleFocus={toggleCrosswalkFocus}\n contributorActions={contributorActions}\n />\n {crosswalksBySources.map(({source, crosswalksByTypes}) => (\n <SourceCrosswalksRow\n key={source}\n source={source}\n crosswalksByTypes={crosswalksByTypes}\n showCrosswalkColors={!accentContributor}\n crosswalksFocusEnabled={!accentContributor}\n expanded={expandedSources?.includes(source)}\n disableEditCrosswalk={disableEditCrosswalk}\n disableDeleteCrosswalk={disableDeleteCrosswalk}\n onEdit={onEdit}\n onDelete={onDelete}\n onToggleExpanded={() => onToggleSourceExpanded(source)}\n />\n ))}\n {showEditor && (\n <CrosswalkEditor\n className={styles.editor}\n onAdd={(crosswalk) => onAdd({contributorCrosswalk, crosswalk})}\n onClose={() => setShowEditor(false)}\n />\n )}\n </div>\n );\n};\n\nexport default LegendTableRow;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n table: {\n overflowY: 'auto',\n overflowX: 'hidden',\n paddingLeft: '16px',\n paddingRight: '6px'\n },\n tableRow: {\n '& + &': {\n marginTop: '10px'\n },\n margin: 'auto',\n maxWidth: '448px'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n AttributeType,\n checkCanCreateCrosswalk,\n checkCanDeleteCrosswalk,\n checkCanEditCrosswalk,\n Contributor,\n CrosswalkBase,\n Entity,\n TEntityType\n} from '@reltio/mdm-sdk';\nimport {AddCrosswalkEvent, DeleteCrosswalkEvent, EditCrosswalkEvent, noop} from '@reltio/components';\nimport {buildTableRowsData, collectVisibleCrosswalks} from './helpers';\nimport LegendTableRow from './LegendTableRow/LegendTableRow';\nimport {append, assoc, evolve, has, ifElse, includes, pipe, unless, without} from 'ramda';\nimport {UnsubscribeContributorEvent} from '../../types';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n entityType: TEntityType;\n contributors: Contributor[];\n accentContributors?: boolean;\n selectedAttributeTypes?: AttributeType[];\n onChangeVisibleCrosswalks: (visibleCrosswalks: CrosswalkBase[]) => void;\n readOnly?: boolean;\n canUnmerge: boolean;\n disableUnmerge: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (contributorUri: string) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent & {contributorUri: string}) => void;\n};\n\nconst LegendTable = ({\n accentContributors,\n entity,\n entityType,\n contributors,\n selectedAttributeTypes,\n onChangeVisibleCrosswalks,\n readOnly,\n canUnmerge,\n disableUnmerge,\n onAddCrosswalk = noop,\n onEditCrosswalk = noop,\n onDeleteCrosswalk = noop,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop\n}: Props) => {\n const styles = useStyles();\n\n const rowsData = useMemo(\n () => buildTableRowsData(entity, contributors, selectedAttributeTypes),\n [entity, contributors, selectedAttributeTypes]\n );\n const [expandedByContributor, setExpandedByContributor] = useState<{[contributorUri: string]: string[]}>({});\n const visibleCrosswalks = useMemo(\n () => collectVisibleCrosswalks(rowsData, expandedByContributor),\n [rowsData, expandedByContributor]\n );\n useEffect(() => {\n onChangeVisibleCrosswalks(visibleCrosswalks);\n }, [visibleCrosswalks]);\n\n const handleDelete = useCallback(\n (crosswalkId: string) => {\n onDeleteCrosswalk({entityUri: entity?.uri, crosswalkId});\n },\n [entity?.uri, onDeleteCrosswalk]\n );\n\n const handleEdit = useCallback(\n (params: Omit<EditCrosswalkEvent, 'entityUri'>) => {\n onEditCrosswalk({...params, entityUri: entity?.uri});\n },\n [entity?.uri, onEditCrosswalk]\n );\n\n return (\n <div className={styles.table}>\n {rowsData.map(({contributorUri, crosswalksBySources}) => {\n return (\n <LegendTableRow\n key={contributorUri}\n className={styles.tableRow}\n canUnmerge={canUnmerge}\n contributorUri={contributorUri}\n accentContributor={accentContributors}\n crosswalksBySources={crosswalksBySources}\n disableAddCrosswalk={readOnly || !checkCanCreateCrosswalk(entityType)}\n disableEditCrosswalk={readOnly || !checkCanEditCrosswalk(entityType)}\n disableDeleteCrosswalk={readOnly || !checkCanDeleteCrosswalk(entityType)}\n disableUnmergeContributor={disableUnmerge}\n onAdd={(params) => onAddCrosswalk({...params, entity})}\n onDelete={handleDelete}\n onEdit={handleEdit}\n onUnmerge={() => onUnmergeContributor(contributorUri)}\n onUnsubscribeContributor={onUnsubscribeContributor}\n expandedSources={expandedByContributor[contributorUri]}\n onToggleSourceExpanded={(sourceUri: string) => {\n setExpandedByContributor(\n pipe(\n unless(has(contributorUri), assoc(contributorUri, [])),\n evolve({\n [contributorUri]: ifElse(\n includes(sourceUri),\n without([sourceUri]),\n append(sourceUri)\n )\n })\n )\n );\n }}\n />\n );\n })}\n </div>\n );\n};\n\nexport default memo(LegendTable);\n","import {\n AttributeType,\n Contributor,\n Crosswalk,\n Entity,\n eqCrosswalks,\n getRelationCrosswalks,\n isEmptyValue,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport {chain, filter, map, pipe} from 'ramda';\nimport {CrosswalksByTypes, CrosswalkType, groupCrosswalksByTypesAndSources} from '@reltio/components';\n\ntype TableRow = {\n contributorUri: string;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n};\n\nexport const buildTableRowsData = (\n entity: Entity,\n contributors: Contributor[],\n selectedAttributeTypes: AttributeType[] = []\n): TableRow[] => {\n const entityCrosswalks: Crosswalk[] = entity.crosswalks || [];\n const relationCrosswalks: RelationCrosswalk[] = getRelationCrosswalks(entity);\n return contributors\n .filter((contributor) => !isEmptyValue(contributor.crosswalks))\n .map(({uri, crosswalks}) => {\n const crosswalksBySources = pipe(\n map((crosswalk) => {\n if (crosswalk.ownerType === 'relation') {\n const relationCrosswalk = relationCrosswalks.find(eqCrosswalks(crosswalk));\n return relationCrosswalk && {ownerType: 'relation', ...relationCrosswalk};\n } else {\n const entityCrosswalk = entityCrosswalks.find(eqCrosswalks(crosswalk));\n return entityCrosswalk && {ownerType: 'entity', ...entityCrosswalk};\n }\n }),\n filter((crosswalk) => !!crosswalk),\n groupCrosswalksByTypesAndSources(entity.type, selectedAttributeTypes)\n )(crosswalks);\n\n return {contributorUri: uri, crosswalksBySources};\n })\n .filter(({crosswalksBySources}) => crosswalksBySources.length > 0);\n};\n\nexport const collectVisibleCrosswalks = (\n rowsData: TableRow[],\n expandedByContributor: {[contributorUri: string]: string[]}\n) => {\n return rowsData.reduce((acc, {contributorUri, crosswalksBySources}) => {\n const visibleCrosswalks = chain(({source, crosswalksByTypes}) => {\n const isExpandedSource = expandedByContributor[contributorUri]?.includes(source);\n return crosswalksByTypes[CrosswalkType.Simple]\n .concat(crosswalksByTypes[CrosswalkType.Empty])\n .concat(isExpandedSource ? crosswalksByTypes[CrosswalkType.Dependent] : []);\n }, crosswalksBySources);\n return acc.concat(visibleCrosswalks);\n }, []);\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n '& + &': {\n marginLeft: '16px'\n }\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: '#666666',\n marginBottom: '7px'\n },\n hintIcon: {\n width: '16px',\n height: '16px',\n verticalAlign: 'middle'\n },\n graph: {\n width: '400px',\n height: '300px',\n borderRadius: '8px',\n background: 'rgba(0, 0, 0, 0.03)',\n border: '1px solid rgba(0, 0, 0, 0.03)',\n position: 'relative'\n },\n checkedIcon: {\n position: 'absolute',\n height: '20px',\n width: '20px',\n right: '10px',\n top: '10px',\n color: theme.palette.primary.main\n },\n selectedTree: {\n border: `1px solid ${theme.palette.primary.main}`,\n background: 'rgba(0, 114, 206, 0.05)'\n }\n}));\n","import React, {useCallback} from 'react';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport InfoIcon from '@mui/icons-material/Info';\nimport {CrosswalksDisplayProvider, noop} from '@reltio/components';\nimport {\n CrosswalkBase,\n CrosswalkTree,\n getCrosswalkColor as getUniqueCrosswalkColor,\n getCrosswalkId\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport {useStyles} from './styles';\n\ntype Props = {\n coloredCrosswalks: string[];\n crosswalkTree: CrosswalkTree;\n selected: boolean;\n title: string;\n onSelect?: () => void;\n};\n\nexport const SelectableTree = ({coloredCrosswalks, crosswalkTree, selected, title, onSelect = noop}: Props) => {\n const styles = useStyles();\n const getCrosswalkColor = useCallback(\n (crosswalk: CrosswalkBase) => {\n return coloredCrosswalks.includes(crosswalk.uri)\n ? getUniqueCrosswalkColor(getCrosswalkId(crosswalk))\n : '#CACCD1';\n },\n [coloredCrosswalks]\n );\n return (\n <CrosswalksDisplayProvider getCrosswalkColor={getCrosswalkColor}>\n <div className={styles.container} onClick={onSelect}>\n <span className={styles.title}>\n {title} <InfoIcon className={styles.hintIcon} />\n </span>\n <div className={classnames(styles.graph, {[`${styles.selectedTree}`]: selected})}>\n {selected && <CheckCircleIcon className={styles.checkedIcon} />}\n <CrosswalkTreeView crosswalkTree={crosswalkTree} disableUnmerge={true} />\n </div>\n </div>\n </CrosswalksDisplayProvider>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n dialogContainer: {\n maxWidth: 'unset'\n },\n dialogTitle: {\n padding: '13px 16px 0 16px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px'\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'column',\n padding: '13px 16px 0 16px'\n },\n trees: {\n display: 'flex'\n },\n uri: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.primary,\n marginBottom: '15px'\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary,\n paddingRight: '2px'\n }\n}));\n","import React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Typography from '@mui/material/Typography';\nimport {SelectableTree} from '../SelectableTree/SelectableTree';\nimport {\n collectCrosswalksFromContributor,\n Contributor,\n CrosswalkTree,\n getLastUriPart,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n contributor: Contributor;\n crosswalkTree: CrosswalkTree;\n canUnmerge?: boolean;\n onClose: () => void;\n onUnmergeContributor: (operationType: UnmergeOperation) => void;\n};\n\nexport const UnmergeDialog = ({canUnmerge, contributor, crosswalkTree, onClose, onUnmergeContributor}: Props) => {\n const styles = useStyles();\n\n const [unmergeOperation, setUnmergeOperation] = useState(UnmergeOperation.Unmerge);\n\n const getColoredCrosswalks = useCallback(\n (includeMerges: boolean) => collectCrosswalksFromContributor(contributor, includeMerges).map(({uri}) => uri),\n [contributor]\n );\n\n const unmergeContributor = () => {\n onUnmergeContributor(unmergeOperation);\n onClose();\n };\n\n return (\n <Dialog open={true} onClose={onClose} classes={{paper: styles.dialogContainer}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>{i18n.text('Unmerge')}</DialogTitle>\n <DialogContent classes={{root: styles.dialogContent}}>\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity URI:')}</span>\n {getLastUriPart(contributor.uri).toUpperCase()}\n </Typography>\n <div className={styles.trees}>\n <SelectableTree\n onSelect={() => setUnmergeOperation(UnmergeOperation.Unmerge)}\n selected={unmergeOperation === UnmergeOperation.Unmerge}\n title={i18n.text('Unmerge')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={getColoredCrosswalks(true)}\n />\n {contributor.merges && contributor.uri !== crosswalkTree.uri && (\n <SelectableTree\n onSelect={() => setUnmergeOperation(UnmergeOperation.TreeUnmerge)}\n selected={unmergeOperation === UnmergeOperation.TreeUnmerge}\n title={i18n.text('Tree unmerge')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={getColoredCrosswalks(false)}\n />\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button disabled={!canUnmerge} onClick={unmergeContributor} color=\"primary\">\n {i18n.text('Unmerge')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n dialogContainer: {\n maxWidth: 'unset'\n },\n dialogTitle: {\n padding: '13px 16px 0 16px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px'\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'column',\n padding: '13px 16px 0 16px'\n },\n uri: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.primary,\n marginBottom: '15px'\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary,\n paddingRight: '2px'\n }\n}));\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Typography from '@mui/material/Typography';\nimport {SelectableTree} from '../SelectableTree/SelectableTree';\nimport {collectCrosswalksFromContributor, Contributor, CrosswalkTree, getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n contributor: Contributor;\n crosswalkTree: CrosswalkTree;\n canUnsubscribe?: boolean;\n onClose: () => void;\n onUnsubscribeContributor: () => void;\n};\n\nexport const UnsubscribeDialog = ({\n canUnsubscribe,\n contributor,\n crosswalkTree,\n onClose,\n onUnsubscribeContributor\n}: Props) => {\n const styles = useStyles();\n\n const coloredCrosswalks = useMemo(\n () => collectCrosswalksFromContributor(contributor, true).map(({uri}) => uri),\n [contributor]\n );\n\n const unsubscribeContributor = () => {\n onUnsubscribeContributor();\n onClose();\n };\n\n return (\n <Dialog open={true} onClose={onClose} classes={{paper: styles.dialogContainer}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>{i18n.text('Unsubscribe')}</DialogTitle>\n <DialogContent classes={{root: styles.dialogContent}}>\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity URI:')}</span>\n {getLastUriPart(contributor.uri).toUpperCase()}\n </Typography>\n <SelectableTree\n selected\n title={i18n.text('Unsubscribe')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={coloredCrosswalks}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button disabled={!canUnsubscribe} onClick={unsubscribeContributor} color=\"primary\">\n {i18n.text('Unsubscribe')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n height: '100%'\n },\n modeSwitcher: {\n backgroundColor: theme.palette.background.paper,\n marginTop: '8px'\n },\n infoIcon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n hint: {\n color: theme.palette.text.secondary,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n margin: '5px 12px 10px 12px'\n },\n hintText: {\n fontSize: '12px',\n lineHeight: '16px'\n },\n crosswalksList: {\n height: '100%',\n width: 'calc(100% - 24px)',\n margin: '8px 12px',\n background: theme.palette.divider,\n opacity: 0.2\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n width: '100%'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport InfoIcon from '@mui/icons-material/Info';\nimport i18n from 'ui-i18n';\nimport {isEmpty} from 'ramda';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeType,\n calculateCrosswalkTreeDeep,\n checkMetadataPermission,\n Contributor,\n Crosswalk,\n CrosswalkBase,\n CrosswalkTree,\n DataTenant,\n Entity,\n getEntityType,\n getLabel,\n Metadata,\n MetadataPermissions,\n TEntityType,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\nimport {\n AddCrosswalkEvent,\n DeleteCrosswalkEvent,\n EditCrosswalkEvent,\n ModeSwitcher,\n noop,\n ResizablePanes\n} from '@reltio/components';\nimport {LegendMode, UnmergeContributorEvent, UnsubscribeContributorEvent} from '../../types';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport LegendTable from '../LegendTable/LegendTable';\nimport {UnmergeDialog} from '../UnmergeDialog/UnmergeDialog';\nimport {UnsubscribeDialog} from '../UnsubscribeDialog/UnsubscribeDialog';\n\nimport {useStyles} from './styles';\n\nexport const DEFAULT_LINK_HEIGHT = 60;\nexport const MIN_PANE1_SIZE = 170;\nexport const MIN_PANE2_SIZE = 170;\n\ntype Props = {\n activeMode: LegendMode;\n onChangeMode: (mode: LegendMode) => void;\n crosswalkTree: CrosswalkTree;\n entity: Entity;\n contributors: Contributor[];\n selectedAttributeTypes?: AttributeType[];\n readOnly?: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (event: UnmergeContributorEvent) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent) => void;\n};\n\nconst LegendView = ({\n activeMode,\n contributors,\n crosswalkTree,\n entity,\n onChangeMode,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop,\n ...tableProps\n}: Props) => {\n const styles = useStyles();\n\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityType: TEntityType = getEntityType(metadata, entity?.type);\n\n const viewRef = useRef<HTMLDivElement>();\n const [paneSize, setPaneSize] = useState(MIN_PANE1_SIZE);\n const handlePaneSizeChange = useCallback(({percentageSize}) => setPaneSize(percentageSize), []);\n\n const [contributorForUnmerge, setContributorForUnmerge] = useState<string>();\n const [unsubscribeInfo, setUnsubscribeInfo] = useState<{\n contributorUri: string;\n dataTenant: DataTenant;\n crosswalk: Crosswalk;\n }>();\n\n const crosswalkTreeDeep = useMemo(() => calculateCrosswalkTreeDeep(crosswalkTree), [crosswalkTree]);\n const canUnmerge = crosswalkTreeDeep > 1;\n\n useEffect(() => {\n const height = Math.max(MIN_PANE1_SIZE, crosswalkTreeDeep * DEFAULT_LINK_HEIGHT);\n const maxPaneHeight = viewRef.current?.clientHeight - MIN_PANE2_SIZE;\n setPaneSize(Math.min(maxPaneHeight, height));\n }, [crosswalkTreeDeep]);\n\n const modes = useMemo(\n () => [\n {\n id: LegendMode.Crosswalk,\n title: i18n.text('Crosswalk')\n },\n {\n id: LegendMode.Source,\n title: i18n.text('Source')\n },\n {\n id: LegendMode.Contributor,\n title: i18n.text('Contributor')\n }\n ],\n []\n );\n\n const [visibleCrosswalks, setVisibleCrosswalks] = useState<CrosswalkBase[]>();\n const accentContributors = activeMode === LegendMode.Contributor;\n const disableUnmerge = tableProps.readOnly || !checkMetadataPermission(MetadataPermissions.UNMERGE, entityType);\n\n return (\n <div className={styles.root} ref={viewRef}>\n {contributorForUnmerge && (\n <UnmergeDialog\n canUnmerge={canUnmerge}\n onClose={() => setContributorForUnmerge(null)}\n onUnmergeContributor={(operationType: UnmergeOperation) => {\n onUnmergeContributor({\n entityUri: entity.uri,\n contributorUri: contributorForUnmerge,\n operationType\n });\n }}\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === contributorForUnmerge)}\n />\n )}\n {unsubscribeInfo && (\n <UnsubscribeDialog\n canUnsubscribe={canUnmerge}\n onClose={() => setUnsubscribeInfo(null)}\n onUnsubscribeContributor={() =>\n onUnsubscribeContributor({\n dataTenant: unsubscribeInfo.dataTenant,\n crosswalk: unsubscribeInfo.crosswalk\n })\n }\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === unsubscribeInfo.contributorUri)}\n />\n )}\n <ModeSwitcher<LegendMode>\n modes={modes}\n modeId={activeMode}\n className={styles.modeSwitcher}\n onChange={onChangeMode}\n />\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n orientation=\"horizontal\"\n size={paneSize}\n minSize={MIN_PANE1_SIZE}\n maxSize={-MIN_PANE2_SIZE}\n allowResize\n onChange={handlePaneSizeChange}\n >\n <div className={styles.pane}>\n {crosswalkTree && !isEmpty(visibleCrosswalks) && (\n <CrosswalkTreeView\n entityLabel={getLabel(entity?.label)}\n crosswalkTree={crosswalkTree}\n visibleCrosswalks={visibleCrosswalks}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge || !canUnmerge}\n onUnmerge={setContributorForUnmerge}\n />\n )}\n </div>\n <div className={styles.pane}>\n <div className={styles.hint}>\n <InfoIcon className={styles.infoIcon} />\n <span className={styles.hintText}>\n {i18n.text('You can drag a crosswalk to add values to attributes swimlanes')}\n </span>\n </div>\n {entity && (\n <LegendTable\n onUnmergeContributor={setContributorForUnmerge}\n onUnsubscribeContributor={setUnsubscribeInfo}\n accentContributors={accentContributors}\n contributors={contributors}\n entity={entity}\n entityType={entityType}\n onChangeVisibleCrosswalks={setVisibleCrosswalks}\n canUnmerge={canUnmerge}\n disableUnmerge={disableUnmerge}\n {...tableProps}\n />\n )}\n </div>\n </ResizablePanes>\n </div>\n );\n};\n\nexport default memo(LegendView);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg4041339336a\",\n masktype: \"alpha\",\n maskUnits: \"userSpaceOnUse\",\n x: \"2\",\n y: \"3\",\n width: \"19\",\n height: \"17\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S4.83 6.5 4 6.5 2.5 5.83 2.5 5zM21 20H8v-2h13v2zM8 10h13V8H8v2zm0-4V4h13v2H8zm0 10h13v-2H8v2zm-2.5.5v-3h-3v3h3z\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg4041339336a)\"\n}, React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n d: \"M0 0h24v24H0z\"\n}))));","import {ErrorPopup} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport {getRequestErrorMessage} from '@reltio/mdm-sdk';\n\nexport const showErrorMessage = (error: unknown) => {\n console.error(error); // eslint-disable-line\n ErrorPopup.addError({\n title: i18n.text('Error'),\n message: getRequestErrorMessage(error, i18n.text('Something went wrong'))\n });\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"90\",\n height: \"90\",\n viewBox: \"0 0 90 90\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"45\",\n cy: \"45\",\n r: \"45\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg985456408a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"90\",\n height: \"90\"\n}, React.createElement(\"circle\", {\n cx: \"45\",\n cy: \"45\",\n r: \"45\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg985456408a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-5.625 3.164h90V90h-90V3.164z\",\n fill: \"url(#paint0_linear)\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M66.01 19.992l20.615 20.615v52.337H32.83L18.281 79.131V19.99H66.01z\",\n fill: \"url(#paint1_linear)\"\n}), React.createElement(\"path\", {\n opacity: \".06\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.523 20.39H87.54A2.46 2.46 0 0190 22.853v55.195a2.46 2.46 0 01-2.46 2.46H16.522a2.46 2.46 0 01-2.46-2.46V22.852a2.46 2.46 0 012.46-2.461z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.578 19.688h70.664c.971 0 1.758.787 1.758 1.757v55.196c0 .97-.787 1.757-1.758 1.757H17.578c-.97 0-1.758-.787-1.758-1.757V21.445c0-.97.787-1.758 1.758-1.758z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 25.536c0-.583.472-1.055 1.055-1.055h14.633a1.055 1.055 0 110 2.11H38.101a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 29.754c0-.582.472-1.054 1.055-1.054H60.54a1.055 1.055 0 110 2.11H37.969a1.055 1.055 0 01-1.055-1.056z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 57.305c0-.583.472-1.055 1.055-1.055h14.633a1.055 1.055 0 110 2.11H38.101a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 61.523c0-.582.472-1.054 1.055-1.054H60.54a1.055 1.055 0 110 2.11H37.969a1.055 1.055 0 01-1.055-1.056z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 67.852c0-.583.472-1.055 1.055-1.055h28.696a1.055 1.055 0 110 2.11H38.1a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 72.07c0-.582.472-1.054 1.055-1.054h26.087a1.055 1.055 0 110 2.109H37.97a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.648 36.21c0-.582.472-1.054 1.054-1.054h28.696a1.055 1.055 0 110 2.11H49.702a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.516 40.43c0-.583.472-1.055 1.054-1.055h22.572a1.055 1.055 0 110 2.11H49.57a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"27.773\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"27.773\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"42.188\",\n cy: \"37.266\",\n r: \"2.109\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"42.188\",\n cy: \"47.813\",\n r: \"2.109\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"59.414\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"69.961\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.648 46.758c0-.583.472-1.055 1.054-1.055h28.696a1.055 1.055 0 110 2.11H49.702a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.516 50.977c0-.583.472-1.055 1.054-1.055h26.088a1.055 1.055 0 110 2.11H49.57a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.524 37.969v-2.813h-.703v14.191h3.93v-.703h-3.227v-9.972h3.227v-.703h-3.227z\",\n fill: \"#2B98F0\"\n}), React.createElement(\"path\", {\n opacity: \".54\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M33.423 27.07l-1.242 1.243-1.243-1.243h2.485z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n opacity: \".6\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.578 7.734h65.39a2.11 2.11 0 012.11 2.11v6.328a2.11 2.11 0 01-2.11 2.11h-65.39a2.11 2.11 0 01-2.11-2.11V9.844a2.11 2.11 0 012.11-2.11z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M20.39 13.008a2.11 2.11 0 012.11-2.11h24.61a2.11 2.11 0 110 4.22H22.5a2.11 2.11 0 01-2.11-2.11zM52.031 13.008a2.11 2.11 0 012.11-2.11h3.515a2.11 2.11 0 110 4.22h-3.515a2.11 2.11 0 01-2.11-2.11z\",\n fill: \"#979797\"\n})), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: \"-5.625\",\n y1: \"3.164\",\n x2: \"-5.625\",\n y2: \"90\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear\",\n x1: \"93.557\",\n y1: \"63.672\",\n x2: \"54.451\",\n y2: \"27.31\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n height: '100%',\n overflow: 'hidden',\n background: theme.palette.background.default,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: '115px'\n },\n info: {\n color: theme.palette.text.secondary,\n fontSize: '16px',\n lineHeight: '24px',\n marginTop: '16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport EmptyIcon from './icons/EmptySources.svg';\n\nimport {useStyles} from './styles';\n\nconst EmptyState = () => {\n const styles = useStyles();\n\n return (\n <div className={styles.root}>\n <EmptyIcon />\n <span className={styles.info}>\n {i18n.text('Please persist your profile to be able to edit crosswalks')}\n </span>\n </div>\n );\n};\n\nexport default EmptyState;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n snackbarMessage: {\n display: 'flex',\n alignItems: 'center'\n },\n snackbarIcon: {\n paddingRight: 16\n }\n});\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, getLabel} from '@reltio/mdm-sdk';\nimport {UrlGeneratorsContext} from '@reltio/components';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport InfoIcon from '@mui/icons-material/Info';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n message: string;\n};\n\nconst TreeActionSnackbar = ({entity, message}: Props) => {\n const styles = useStyles();\n const uiPath = useSelector(mdmModule.selectors.getUIPath);\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n const entityLink = generateEntityUrl({uiPath, uri: entity.uri});\n\n return (\n <div className={styles.snackbarMessage}>\n <InfoIcon className={styles.snackbarIcon} />\n <Typography>\n {getLabel(entity.label)}{' '}\n <Link href={entityLink} target=\"_blank\" underline=\"hover\">\n {i18n.text('lookup profile')}\n </Link>{' '}\n {message}\n </Typography>\n </div>\n );\n};\n\nexport default TreeActionSnackbar;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n paddingTop: '14px',\n paddingBottom: '13px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.05)',\n whiteSpace: 'normal',\n '&:last-child': {\n borderBottom: 'none'\n }\n },\n label: {\n marginBottom: '2px',\n fontSize: '16px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n description: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary\n }\n}));\n","import React from 'react';\nimport {SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\n\ntype MenuItemProps = React.ComponentPropsWithoutRef<typeof MenuItem>;\n\ntype Props = {\n innerRef: React.Ref<HTMLLIElement>;\n innerProps: MenuItemProps;\n data: SurvivorshipGroupType;\n};\n\nexport const RulesetOption = ({innerRef, innerProps, data}: Props) => {\n const styles = useStyles();\n const {label, description} = data;\n\n return (\n <MenuItem className={styles.root} ref={innerRef} {...innerProps}>\n <Typography className={styles.label}>{label}</Typography>\n {description && <Typography className={styles.description}>{description}</Typography>}\n </MenuItem>\n );\n};\n","import React from 'react';\nimport {MenuListComponentProps} from 'react-select';\n\nexport const RulesetsMenuList = <OptionType, IsMulti extends boolean>(\n props: MenuListComponentProps<OptionType, IsMulti>\n) => {\n const {innerRef, getStyles, children} = props;\n const styles = {...getStyles('menuList', props), maxHeight: '500px', padding: 0};\n return (\n <div ref={innerRef} style={styles}>\n {children}\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n width: '280px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, propEq, prop} from 'ramda';\nimport {DropDownSelector} from '@reltio/components';\nimport {getLabel, SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport {RulesetOption} from './RulesetOption/RulesetOption';\nimport {RulesetsMenuList} from './RulesetsMenuList/RulesetsMenuList';\nimport {useStyles} from './styles';\n\ntype Props = {\n survivorshipGroups: SurvivorshipGroupType[];\n currentSurvivorshipGroupUri: string;\n onChange: (uri: string) => void;\n};\n\nexport const RulesetsSelector = ({survivorshipGroups, currentSurvivorshipGroupUri, onChange}: Props) => {\n const styles = useStyles();\n const options = survivorshipGroups.map((group) => ({...group, label: getLabel(group.label)}));\n const value = options.find(propEq('uri', currentSurvivorshipGroupUri));\n return (\n <DropDownSelector\n height={40}\n className={styles.root}\n components={{Option: RulesetOption, MenuList: RulesetsMenuList}}\n label={i18n.text('Rulesets')}\n options={options}\n value={value}\n onChange={pipe(prop('uri'), onChange)}\n />\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n sourcesView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n display: 'flex'\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%'\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n headerDivider: {\n marginLeft: '16px',\n marginRight: '8px',\n height: '32px',\n borderColor: 'rgba(0, 0, 0, 0.12)'\n },\n attributesTable: {\n backgroundColor: '#fff'\n }\n});\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {Dispatch} from 'redux';\nimport {connect} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {equals, pipe, pluck, propEq, reject} from 'ramda';\nimport mdmModule, {HistoryEvent, profile} from '@reltio/mdm-module';\nimport {\n ApiError,\n ApiErrorCode,\n AttributeType,\n collectContributorsFromTree,\n Entity,\n getEntityType,\n Metadata,\n SourcesPerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport {\n AttributesTable,\n CrosswalkDragLayer,\n CrosswalksDisplayProvider,\n ExpandedAttributesProvider,\n HistoryHeader,\n HistoryPanelEmptyState,\n HistoryView,\n ProfileResizablePanes,\n ScreenProfileBand,\n useDidUpdateEffect,\n useHistory,\n useHistoryEnabled,\n useHistorySlice,\n useModifiedEntity,\n useSavedState,\n useSnackbar\n} from '@reltio/components';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport HistoryIcon from '@mui/icons-material/History';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport LegendView from '../LegendView/LegendView';\nimport {LegendMode, SourcesSavedState} from '../../types';\nimport {useCrosswalkTree} from '../../hooks/useCrosswalkTree';\nimport LegendIcon from './icons/LegendIcon.svg';\nimport {showErrorMessage} from '../../services/errors';\nimport {useCrosswalkTreeActions} from '../../hooks/useCrosswalkTreeActions';\nimport {useCrosswalksDisplay} from '../../hooks/useCrosswalksDisplay';\nimport {useEntityWithSurvivorshipGroups} from '../../hooks/useEntityWithSurvivorshipGroups';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport {DndProvider} from 'react-dnd';\nimport EmptyState from '../EmptyState/EmptyState';\nimport TreeActionSnackbar from '../TreeActionSnackbar/TreeActionSnackbar';\nimport {RulesetsSelector} from '../RulesestsSelector/RulesestsSelector';\nimport {useStyles} from './styles';\n\nconst perspectiveId = 'source';\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n entity: Entity;\n metadata: Metadata;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: () => Promise<SourcesSavedState>;\n dispatch: Dispatch;\n historyEvent: HistoryEvent;\n};\n\nenum ActivePanel {\n Legend,\n History\n}\n\nconst SourcesView = ({\n config,\n entity: defaultEntity,\n metadata,\n getSavedState,\n saveState,\n dispatch,\n historyEvent\n}: Props) => {\n const styles = useStyles();\n const [activeMode, setActiveMode] = useState(LegendMode.Crosswalk);\n const [isCrosswalkTreeLoading, setIsCrosswalkTreeLoading] = useState(false);\n\n const {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isDefaultSurvivorshipGroupUri,\n isLoading: isEntityLoading\n } = useEntityWithSurvivorshipGroups(defaultEntity);\n\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({\n perspectiveId,\n entity,\n historyButtonId: ActivePanel.History\n });\n\n const persistedEntity = isProfilePersisted ? entity : null;\n\n const entityUri = persistedEntity?.uri;\n const entityType = getEntityType(metadata, entity?.type);\n\n const {historySlice} = useHistorySlice({entity: persistedEntity, historyEvent});\n\n const [selectedAttrTypes, setSelectedAttrTypes] = useState<AttributeType[]>();\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [historySlice]);\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [entityUri]);\n\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar({\n anchorOrigin: {vertical: 'top', horizontal: 'center'},\n showDismiss: true\n });\n const {isLoaded, savedState} = useSavedState<SourcesSavedState>(getSavedState);\n const [visibleColumns, setVisibleColumns] = useState<string[]>();\n useEffect(() => {\n if (isLoaded) {\n setVisibleColumns(savedState.visibleColumns);\n }\n }, [isLoaded]); // eslint-disable-line\n useEffect(() => {\n const hasVisibleColumnsChanged = !equals(visibleColumns, savedState.visibleColumns);\n if (isLoaded && hasVisibleColumnsChanged) {\n saveState({visibleColumns});\n }\n }, [visibleColumns]); // eslint-disable-line\n\n const onCrosswalkTreeLoaded = useCallback(() => {\n setIsCrosswalkTreeLoading(false);\n }, []);\n\n const {crosswalkTree, reload: reloadCrosswalkTree} = useCrosswalkTree({\n entityUri: historySlice?.aEntity.uri || entityUri,\n onSuccess: onCrosswalkTreeLoaded\n });\n const contributors = useMemo(() => collectContributorsFromTree(crosswalkTree), [crosswalkTree]);\n\n const refreshEntity = useCallback(() => {\n entityUri &&\n dispatch(\n profile.entity.actions.loadEntity({\n viewId: config.id,\n uri: entityUri\n })\n );\n }, [entityUri, config, dispatch]);\n\n const refreshData = useCallback(pipe(refreshEntity, reloadCrosswalkTree), [refreshEntity, reloadCrosswalkTree]);\n\n const {\n modifiedEntity,\n crosswalksMap,\n newlyCreatedAttributes,\n onDeleteAttribute,\n onPinAttribute,\n onIgnoreAttribute,\n onEditAttribute,\n onAddAttribute,\n emptyTempAttributeUris\n } = useModifiedEntity({\n entity: historySlice?.aEntity || persistedEntity,\n onModify: refreshData,\n onError: showErrorMessage\n });\n\n const displayProps = useCrosswalksDisplay({activeMode, contributors, entity});\n const onShowMessage = useCallback((message: string, entity?: Entity) => {\n showSnackbarMessage(entity ? <TreeActionSnackbar entity={entity} message={message} /> : message);\n }, []);\n\n const {addCrosswalk, deleteCrosswalk, editCrosswalk, unmergeContributor, unsubscribeContributor} =\n useCrosswalkTreeActions({\n onShowMessage,\n onSuccess: refreshData,\n onError: useCallback(\n (error: ApiError) => {\n showErrorMessage(error);\n if (error.errorCode === ApiErrorCode.CROSSWALK_NOT_FOUND) {\n refreshData();\n }\n },\n [refreshData]\n ),\n onLoad: useCallback(() => setIsCrosswalkTreeLoading(true), [])\n });\n\n const {\n historyFilter,\n onApplyFilter,\n isLoading: isHistoryLoading,\n historicUris,\n historyWithTotal,\n canLoadMore,\n onLoadMore\n } = useHistory({entity: persistedEntity, enabled: isHistoryEnabled});\n\n const tabs = [\n {\n buttonProps: {\n id: ActivePanel.Legend,\n icon: LegendIcon,\n tooltipTitle: i18n.text('Legend')\n },\n title: <Typography variant=\"h6\">{i18n.text('Legend')}</Typography>,\n content: (\n <LegendView\n activeMode={activeMode}\n onChangeMode={setActiveMode}\n entity={historySlice?.aEntity || persistedEntity}\n crosswalkTree={crosswalkTree}\n contributors={contributors}\n selectedAttributeTypes={selectedAttrTypes}\n readOnly={!!historySlice || isCrosswalkTreeLoading}\n onAddCrosswalk={addCrosswalk}\n onUnmergeContributor={unmergeContributor}\n onUnsubscribeContributor={unsubscribeContributor}\n onEditCrosswalk={editCrosswalk}\n onDeleteCrosswalk={deleteCrosswalk}\n />\n )\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n title: (\n <HistoryHeader\n total={(historicUris?.length || 0) + 1}\n entityType={entityType}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n ),\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isHistoryLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entityUri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n )\n }\n ];\n const additionalHeaderItems = (\n <>\n <RulesetsSelector\n survivorshipGroups={survivorshipGroups}\n currentSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n onChange={onChangeSurvivorshipGroup}\n />\n <Divider className={styles.headerDivider} orientation=\"vertical\" />\n </>\n );\n\n return (\n <div className={styles.sourcesView}>\n <CrosswalksDisplayProvider {...displayProps}>\n <DndProvider backend={HTML5Backend}>\n <CrosswalkDragLayer />\n <ProfileResizablePanes\n perspectiveId={perspectiveId}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n >\n <>\n <ScreenProfileBand entity={entity} historySlice={historySlice} />\n {isProfilePersisted ? (\n <ExpandedAttributesProvider attributeUris={newlyCreatedAttributes}>\n <AttributesTable\n className={styles.attributesTable}\n isLoading={isEntityLoading}\n visibleColumns={visibleColumns}\n onChangeVisibleColumns={setVisibleColumns}\n entity={modifiedEntity}\n crosswalksMap={crosswalksMap}\n selectedAttributeTypes={selectedAttrTypes}\n onSelectAttributeTypes={setSelectedAttrTypes}\n readOnly={!!historySlice || !isDefaultSurvivorshipGroupUri}\n onDelete={onDeleteAttribute}\n onPin={onPinAttribute}\n onIgnore={onIgnoreAttribute}\n onEdit={onEditAttribute}\n onAdd={onAddAttribute}\n emptyTempAttributeUris={emptyTempAttributeUris}\n additionalHeaderItems={additionalHeaderItems}\n activeSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n />\n </ExpandedAttributesProvider>\n ) : (\n <EmptyState />\n )}\n </>\n <RightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </DndProvider>\n </CrosswalksDisplayProvider>\n <SnackbarRenderer />\n </div>\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n entity: mdmModule.selectors.getEntity(state),\n metadata: mdmModule.selectors.getMetadata(state),\n historyEvent: mdmModule.selectors.getHistoryEvent(state)\n };\n};\n\nexport default connect(mapStateToProps)(SourcesView);\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pipe, propOr, find, propEq, prop} from 'ramda';\nimport {getEntityType, getEntityBySurvivorshipGroupUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useEntityWithSurvivorshipGroups = (defaultEntity: Entity) => {\n const entityTypeUri = defaultEntity?.type;\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const survivorshipGroups = pipe(getEntityType(metadata), propOr([], 'survivorshipGroups'))(entityTypeUri);\n const defaultSurvivorshipGroupUri = pipe(find(propEq('default', true)), prop('uri'))(survivorshipGroups);\n const [currentSurvivorshipGroupUri, setCurrentSurvivorshipGroupUri] = useState(null);\n const [entity, setEntity] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n\n useEffect(() => {\n if (defaultEntity) {\n setEntity(defaultEntity);\n setCurrentSurvivorshipGroupUri(defaultSurvivorshipGroupUri);\n }\n }, [defaultEntity, defaultSurvivorshipGroupUri]);\n\n const onChangeSurvivorshipGroup = useCallback(\n (survivorshipGroupUri: string) => {\n setCurrentSurvivorshipGroupUri(survivorshipGroupUri);\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === survivorshipGroupUri;\n if (!isDefaultSurvivorshipGroupUri) {\n setIsLoading(true);\n safePromise(getEntityBySurvivorshipGroupUri(entity.uri, survivorshipGroupUri))\n .then(setEntity)\n .finally(() => setIsLoading(false));\n } else {\n setEntity(defaultEntity);\n }\n },\n [defaultEntity, defaultSurvivorshipGroupUri, entity, safePromise]\n );\n\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === currentSurvivorshipGroupUri;\n\n return {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isLoading,\n isDefaultSurvivorshipGroupUri\n };\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {getCrosswalkTree, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {noop, useSafePromise} from '@reltio/components';\n\ntype Props = {\n entityUri?: string;\n onSuccess?: () => void;\n};\n\nexport const useCrosswalkTree = ({entityUri, onSuccess = noop}: Props) => {\n const [crosswalkTree, setCrosswalkTree] = useState<CrosswalkTree>(null);\n const safePromise = useSafePromise();\n\n const onError = (e) => {\n console.warn('Failed to load crosswalk tree', e);\n setCrosswalkTree(null);\n };\n\n const loadData = useCallback(() => {\n if (entityUri) {\n safePromise(getCrosswalkTree({entityUri}))\n .then((results) => {\n setCrosswalkTree(results);\n })\n .catch(onError)\n .finally(onSuccess);\n } else {\n setCrosswalkTree(null);\n onSuccess();\n }\n }, [entityUri, onSuccess]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return {crosswalkTree, reload: loadData};\n};\n","import {useCallback, useEffect, useMemo, useState, useRef} from 'react';\nimport {any, concat} from 'ramda';\nimport {LegendMode} from '../types';\nimport {\n Contributor,\n CrosswalkBase,\n debounce,\n Entity,\n eqCrosswalks,\n findContributorForCrosswalk,\n getContributorColor,\n getCrosswalkColor,\n getCrosswalkId,\n getSourceColor\n} from '@reltio/mdm-sdk';\n\ntype Props = {\n activeMode: LegendMode;\n contributors: Contributor[];\n entity: Entity;\n};\n\nexport const useCrosswalksDisplay = ({activeMode, contributors, entity}: Props) => {\n const getCrosswalkColorForActiveMode = useCallback(\n (crosswalk: CrosswalkBase) => {\n switch (activeMode) {\n case LegendMode.Source:\n return getSourceColor(crosswalk.type);\n case LegendMode.Contributor:\n return getContributorColor(findContributorForCrosswalk(contributors, crosswalk)?.uri || '');\n case LegendMode.Crosswalk:\n return getCrosswalkColor(getCrosswalkId(crosswalk));\n }\n },\n [activeMode, contributors]\n );\n const [highlightedCrosswalks, setHighlightedCrosswalks] = useState<CrosswalkBase[]>([]);\n const highlightedCrosswalksCache = useRef([]);\n const applyHighlightedCrosswalks = useCallback(\n debounce(() => {\n setHighlightedCrosswalks([...highlightedCrosswalksCache.current]);\n }, 50),\n []\n );\n const cacheHighlightedCrosswalks = useCallback(\n (arr) => {\n highlightedCrosswalksCache.current = arr;\n applyHighlightedCrosswalks(arr);\n },\n [applyHighlightedCrosswalks]\n );\n\n const setCrosswalkHighlighted = useCallback(\n (crosswalk: CrosswalkBase, highlighted: boolean) => {\n if (!crosswalk) return;\n if (highlighted) {\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n cacheHighlightedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])]);\n } else {\n cacheHighlightedCrosswalks([crosswalk]);\n }\n } else {\n cacheHighlightedCrosswalks([]);\n }\n },\n [activeMode, cacheHighlightedCrosswalks, contributors]\n );\n\n const [focusedCrosswalks, setFocusedCrosswalks] = useState<CrosswalkBase[]>([]);\n const calculateFocusedCrosswalks = useCallback(\n (prev: CrosswalkBase[], next: CrosswalkBase[]) =>\n concat(\n prev.filter((prevCrosswalk) => !any(eqCrosswalks(prevCrosswalk), next)),\n next.filter((nextCrosswalk) => !any(eqCrosswalks(nextCrosswalk), prev))\n ),\n []\n );\n const toggleCrosswalkFocus = useCallback(\n (crosswalk: CrosswalkBase) => {\n if (!crosswalk) return;\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n setFocusedCrosswalks((prevValue) =>\n calculateFocusedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])], prevValue)\n );\n } else {\n setFocusedCrosswalks((prevValue) => calculateFocusedCrosswalks([crosswalk], prevValue));\n }\n },\n [activeMode, calculateFocusedCrosswalks, contributors]\n );\n\n useEffect(() => {\n if (focusedCrosswalks.length) {\n setFocusedCrosswalks([]);\n }\n }, [activeMode, entity]);\n\n return {\n getCrosswalkColor: getCrosswalkColorForActiveMode,\n highlightedCrosswalks: useMemo(\n () => [...highlightedCrosswalks, ...focusedCrosswalks],\n [highlightedCrosswalks, focusedCrosswalks]\n ),\n focusedCrosswalks,\n toggleCrosswalkFocus,\n setCrosswalkHighlighted\n };\n};\n","import {useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport {andThen, pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {\n Entity,\n unmergeContributor as unmergeContributorRequest,\n unsubscribeEntityFromDataTenantEntity\n} from '@reltio/mdm-sdk';\nimport {useCrosswalkActions, noop} from '@reltio/components';\nimport {UnmergeContributorEvent, UnsubscribeContributorEvent} from '../types';\n\ntype Props = {\n onLoad?: () => void;\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n onShowMessage?: (message: string, entity?: Entity) => void;\n};\n\nexport const useCrosswalkTreeActions = ({\n onLoad = noop,\n onSuccess = noop,\n onError = noop,\n onShowMessage = noop\n}: Props) => {\n const {addCrosswalk, editCrosswalk, deleteCrosswalk} = useCrosswalkActions({onLoad, onSuccess, onError});\n const dtssPath = useSelector(mdm.selectors.getDtssPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n\n const handleAction = useCallback(\n (request: Promise<unknown>) => {\n onLoad();\n request\n .then(() => {\n onSuccess();\n })\n .catch(onError);\n },\n [onLoad, onError, onSuccess]\n );\n\n const unmergeContributor = useCallback(\n (event: UnmergeContributorEvent) =>\n pipe(\n unmergeContributorRequest,\n andThen((response) => {\n onShowMessage(i18n.text('has been unmerged'), response.b);\n return response;\n }),\n handleAction\n )(event),\n [handleAction, onShowMessage]\n );\n\n const unsubscribeContributor = useCallback(\n ({crosswalk, dataTenant}: UnsubscribeContributorEvent) =>\n pipe(\n unsubscribeEntityFromDataTenantEntity,\n andThen((response) => {\n if (!response.successful) throw new Error(i18n.text('Failed to unsubscribe contributor'));\n return response;\n }),\n handleAction\n )({\n dtssPath,\n value: crosswalk.value,\n type: crosswalk.type,\n sourceTable: crosswalk.sourceTable,\n dataTenant: dataTenant.id,\n customerTenant: tenant\n }),\n [handleAction, dtssPath, tenant]\n );\n\n return {\n addCrosswalk,\n editCrosswalk,\n deleteCrosswalk,\n unmergeContributor,\n unsubscribeContributor\n };\n};\n","import React, {useCallback} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\n\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {SourcesSavedState} from '../../types';\nimport SourcesView from './SourcesView';\nimport {promisifyCallback, SourcesPerspectiveConfig} from '@reltio/mdm-sdk';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'sourcesPerspective',\n disableGlobal: true,\n seed: 'srcs'\n});\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: (clb: (state: SourcesSavedState) => void) => void;\n};\n\nconst SourcesPerspective = ({config, store, onResize, saveState, getSavedState}: Props) => {\n const getSavedStatePromisified: () => Promise<SourcesSavedState> = useCallback(promisifyCallback(getSavedState), [\n getSavedState\n ]);\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize?.(Math.floor(width), Math.floor(height))}\n />\n {config && (\n <SourcesView\n config={config}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n )}\n <ErrorPopup />\n </LocalizationProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default SourcesPerspective;\n","import {SourcesView} from '@reltio/sources';\n\nexport default SourcesView;\n"],"names":["useStyles","makeStyles","resizablePanesWrapper","flexGrow","height","marginRight","pane","position","top","left","right","bottom","display","flexDirection","overflow","DEFAULT_R_PANE_SIZE","ProfileResizablePanes","perspectiveId","children","buttonsProps","disabled","defaultTab","styles","perspectiveSettings","updatePerspectiveSettings","usePerspectivesSettings","width","active","isSidePanelOpen","isNil","handleUpdateSettings","useCallback","newSetting","toggleActive","newId","resetActive","handlePaneSizeChange","size","ResizablePanes","className","primary","orientation","minSize","maxSize","allowResize","onChange","debounceInterval","cloneElement","onClose","SideButtonsPanel","onButtonClick","activeIndexId","displayName","theme","container","flexShrink","paddingTop","backgroundColor","palette","background","paper","boxShadow","alpha","main","color","content","borderRadius","buttonWrapper","alignItems","justifyContent","margin","text","secondary","classes","iconButtonClasses","classnames","map","id","buttonProps","SmallIconButton","key","onClick","PerspectivesSettingsContext","React","settings","useContext","useSavedState","getSavedState","isLoaded","setIsLoaded","useState","savedState","setSavedState","useEffect","then","_","catch","header","padding","borderBottom","closeButton","RightSidePanel","tabs","title","icon","CloseIcon","LegendMode","sumValues","links","pipe","prop","sum","data","useMemo","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","sankey","graph","forEach","node","sourceLinks","targetLinks","link","source","push","target","computeNodeLinks","value","Math","max","computeNodeValues","length","nextNodes","remainingNodes","x","dx","indexOf","w","computeNodeBreadths","nodesByBreadth","groupBy","toPairs","sort","a","b","nth","ky","reduce","min","Infinity","i","y","dy","initializeNodeDepth","y0","n","y1","last","computeNodeDepths","computeLinkDepths","concat","ty","correctNodesDepth","result","linksByUuid","l","crosswalk","uuid","sourceNodes","this","j","index","resultByUuid","newSources","filter","sizeForNewSources","sy","setNodeWidth","setNodePadding","setSmallestNodeMaxHeight","setSmallestNodeMinHeight","setSize","newSize","update","curvature","d","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","path","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","tooltipTitle","fontWeight","fontSize","lineHeight","letterSpacing","marginBottom","userSelect","tooltipRow","tooltipIcon","stroke","strokeWidth","strokeOpacity","rootNode","transform","popupContainer","boxSizing","user","time","i18n","CalendarToday","Person","LightArrowTooltip","placement","_extends","Object","assign","prototype","hasOwnProperty","call","apply","props","viewBox","version","xmlns","xmlnsXlink","fill","fillRule","xlinkHref","fillOpacity","mask","highlightEnabled","isColored","disableUnmerge","onUnmerge","isDragging","labelX","setLabelX","anchorEl","setAnchorEl","textRef","useRef","name","label","entity","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","closePopup","nodeHeight","textWidth","current","clientWidth","ref","opacity","onMouseEnter","onMouseLeave","noop","e","currentTarget","cursor","Popover","open","anchorOrigin","vertical","horizontal","UnmergeIcon","timeMap","sources","start","end","acc","head","renderMergeNodes","accentContributors","setDragging","isMouseDown","setMouseDown","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","event","pageX","onUp","pointerEvents","onMouseDown","preventDefault","onMouseMove","onMouseUp","isCrosswalkDisplayed","curry","displayedCrosswalks","some","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","count","addIdToSubtree","loser","processTree","processSubTree","parentIndex","uri","mergesCrosswalks","chain","Date","now","linkedNodes","uniq","includes","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","root","paddingRight","marginLeft","focusedIcon","isFocused","paddingLeft","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","Typography","variant","getLastUriPart","Spacer","show","showForDisabled","contributorColor","border","borderLeft","marginTop","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","useSelector","mdm","scrollToCrosswalk","useHighlightedCrosswalks","find","type","propOr","values","flatten","scrollIntoView","behavior","showEditor","setShowEditor","contributorCrosswalk","pluck","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnsubscribeIcon","dataTenant","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","maxWidth","entityType","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","readOnly","onAddCrosswalk","onEditCrosswalk","onDeleteCrosswalk","onUnmergeContributor","rowsData","entityCrosswalks","relationCrosswalks","getRelationCrosswalks","contributor","isEmptyValue","ownerType","relationCrosswalk","entityCrosswalk","groupCrosswalksByTypesAndSources","buildTableRowsData","expandedByContributor","setExpandedByContributor","isExpandedSource","collectVisibleCrosswalks","handleDelete","crosswalkId","entityUri","handleEdit","params","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","sourceUri","unless","has","assoc","ifElse","without","append","hintIcon","verticalAlign","checkedIcon","selectedTree","SelectableTree","coloredCrosswalks","selected","onSelect","getCrosswalkColor","getUniqueCrosswalkColor","getCrosswalkId","Info","CheckCircle","dialogContainer","dialogTitle","dialogContent","trees","UnmergeDialog","unmergeOperation","setUnmergeOperation","UnmergeOperation","getColoredCrosswalks","includeMerges","collectCrosswalksFromContributor","Dialog","DialogTitle","DialogContent","toUpperCase","DialogActions","Button","UnsubscribeDialog","canUnsubscribe","modeSwitcher","infoIcon","hint","alignSelf","hintText","crosswalksList","divider","activeMode","onChangeMode","tableProps","metadata","mdmModule","getEntityType","viewRef","paneSize","setPaneSize","percentageSize","contributorForUnmerge","setContributorForUnmerge","unsubscribeInfo","setUnsubscribeInfo","crosswalkTreeDeep","calculateCrosswalkTreeDeep","maxPaneHeight","clientHeight","modes","Crosswalk","Source","Contributor","setVisibleCrosswalks","checkMetadataPermission","MetadataPermissions","operationType","ModeSwitcher","modeId","isEmpty","getLabel","masktype","maskUnits","clipRule","showErrorMessage","error","console","ErrorPopup","message","getRequestErrorMessage","cx","cy","r","style","maskType","y2","gradientUnits","stopColor","stopOpacity","offset","default","info","snackbarMessage","snackbarIcon","uiPath","generateEntityUrl","UrlGeneratorsContext","entityLink","href","underline","paddingBottom","whiteSpace","description","RulesetOption","innerRef","innerProps","MenuItem","RulesetsMenuList","getStyles","maxHeight","RulesetsSelector","survivorshipGroups","currentSurvivorshipGroupUri","options","group","propEq","DropDownSelector","components","Option","MenuList","sourcesView","fontFamily","headerDivider","borderColor","attributesTable","ActivePanel","connect","state","historyEvent","config","defaultEntity","saveState","dispatch","setActiveMode","isCrosswalkTreeLoading","setIsCrosswalkTreeLoading","onChangeSurvivorshipGroup","isDefaultSurvivorshipGroupUri","isLoading","isEntityLoading","entityTypeUri","defaultSurvivorshipGroupUri","setCurrentSurvivorshipGroupUri","setEntity","setIsLoading","safePromise","useSafePromise","survivorshipGroupUri","getEntityBySurvivorshipGroupUri","finally","useEntityWithSurvivorshipGroups","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyButtonId","History","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","undefined","SnackbarRenderer","showSnackbarMessage","useSnackbar","showDismiss","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","onCrosswalkTreeLoaded","reload","reloadCrosswalkTree","onSuccess","setCrosswalkTree","onError","warn","loadData","getCrosswalkTree","results","useCrosswalkTree","aEntity","collectContributorsFromTree","refreshEntity","profile","viewId","refreshData","modifiedEntity","crosswalksMap","newlyCreatedAttributes","onDeleteAttribute","onPinAttribute","onIgnoreAttribute","onEditAttribute","onAddAttribute","emptyTempAttributeUris","useModifiedEntity","onModify","displayProps","getCrosswalkColorForActiveMode","getSourceColor","findContributorForCrosswalk","highlightedCrosswalks","setHighlightedCrosswalks","highlightedCrosswalksCache","applyHighlightedCrosswalks","debounce","cacheHighlightedCrosswalks","arr","setCrosswalkHighlighted","highlighted","focusedCrosswalks","setFocusedCrosswalks","calculateFocusedCrosswalks","prev","next","prevCrosswalk","any","nextCrosswalk","prevValue","useCrosswalksDisplay","onShowMessage","addCrosswalk","deleteCrosswalk","editCrosswalk","unmergeContributor","unsubscribeContributor","onLoad","useCrosswalkActions","dtssPath","tenant","handleAction","request","unmergeContributorRequest","andThen","response","unsubscribeEntityFromDataTenantEntity","successful","Error","sourceTable","customerTenant","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","isHistoryLoading","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabled","Legend","LegendIcon","HistoryIcon","HistoryHeader","total","HistoryView","contributorsUris","HistoryPanelEmptyState","additionalHeaderItems","Divider","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","reject","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","activeSurvivorshipGroupUri","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","store","onResize","getSavedStatePromisified","promisifyCallback","Provider","ViewIdContext","StylesProvider","LocalizationProvider","dateAdapter","AdapterMoment","floor"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"3926.js","mappings":"sqBAEA,MAAMA,GAAYC,E,SAAAA,aAAW,KAAM,CAC/BC,sBAAuB,CACnBC,SAAU,EACVC,OAAQ,OACRC,YAAa,OAEjBC,KAAM,CACFC,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,QAAS,OACTC,cAAe,SACfC,SAAU,cCPZC,EAAsB,IAYfC,EAAwB,IAA0E,IAAzE,cAACC,EAAD,SAAgBC,EAAhB,aAA0BC,EAA1B,SAAwCC,EAAxC,WAAkDC,GAAuB,EAC3G,MAAMC,EAAStB,KAET,oBAACuB,EAAD,0BAAsBC,IAA6BC,EAAAA,EAAAA,GAAwBR,IAC3E,MAACS,EAAQX,GAAuBQ,GAAuB,GACvDI,EAASN,IAAcE,MAAAA,OAAJ,EAAIA,EAAqBI,QAC5CC,IAAmBC,EAAAA,EAAAA,OAAMF,KAAYP,EAErCU,GAAuBC,EAAAA,EAAAA,cACxBC,IACGR,EAA0BQ,KAE9B,CAACR,IAGCS,GAAeF,EAAAA,EAAAA,cAChBG,IAEGJ,EAAqB,CAACH,OADJA,IAAWO,EAAQ,KAAOA,MAGhD,CAACP,EAAQG,IAGPK,GAAcJ,EAAAA,EAAAA,cAAY,KAC5BD,EAAqB,CAACH,OAAQ,SAC/B,CAACG,IAEEM,GAAuBL,EAAAA,EAAAA,cACzB,IAAY,IAAX,KAACM,GAAU,EACRP,EAAqB,CAACJ,MAAOW,MAEjC,CAACP,IAGL,OACI,oCACI,kBAACQ,EAAA,EAAD,CACIC,UAAWjB,EAAOpB,sBAClBsC,QAAQ,SACRC,YAAY,WACZJ,KAAMT,EAAkBF,EAAQ,EAChCgB,QApDQ,IAqDRC,QApDQ,IAqDRC,YAAahB,EACbiB,SAAUT,EACVU,iBAAkB,MAElB,yBAAKP,UAAWjB,EAAOhB,MAAOY,EAAS,IACvC,yBAAKqB,UAAWjB,EAAOhB,OAAOyC,EAAAA,EAAAA,cAAa7B,EAAS,GAAI,CAACS,OAAAA,EAAQqB,QAASb,MAE9E,kBAACc,EAAA,EAAD,CACI7B,SAAUA,EACVD,aAAcA,EACd+B,cAAejB,EACfkB,cAAexB,MAM/BX,EAAsBoC,YAAc,yB,mGC7E7B,MAAMpD,GAAYC,E,SAAAA,aAAYoD,IAAD,CAChCC,UAAW,CACP1C,QAAS,OACTC,cAAe,SACf0C,WAAY,EACZ7B,MAAO,OACP8B,WAAY,MACZC,gBAAiBJ,EAAMK,QAAQC,WAAWC,MAC1CC,UAAW,8FAEflC,OAAQ,CACJ8B,iBAAiBK,EAAAA,EAAAA,IAAMT,EAAMK,QAAQlB,QAAQuB,KAAM,KACnDC,MAAOX,EAAMK,QAAQlB,QAAQuB,KAC7B,UAAW,CACPE,QAAS,KACT1D,SAAU,WACVH,OAAQ,OACRsB,MAAO,MACP+B,gBAAiBJ,EAAMK,QAAQlB,QAAQuB,KACvCtD,KAAM,OACNyD,aAAc,gBAGtBC,cAAe,CACX5D,SAAU,WACVmB,MAAO,OACPtB,OAAQ,OACRQ,QAAS,OACTwD,WAAY,SACZC,eAAgB,SAChBH,aAAc,MACdI,OAAQ,UACRN,MAAOX,EAAMK,QAAQa,KAAKC,e,okBCjB3B,MAAMvB,EAAmB,IAOnB,IAPoB,SAC7B7B,EAD6B,aAE7BD,EAF6B,cAG7BgC,EAH6B,UAI7BZ,EAJ6B,cAK7BW,EAL6B,QAM7BuB,EAAU,IACD,EACT,MAAMnD,EAAStB,KACT,OAAC2B,EAAD,cAASwC,GAAuCM,EAArBC,EAAjC,EAAsDD,EAAtD,4BAEA,OACI,yBAAKlC,UAAWoC,GAAAA,CAAWrD,EAAOgC,UAAWf,IACxCpB,EAAayD,KAAI,IAA0B,IAAzB,GAACC,GAAwB,EAAjBC,EAAiB,YACxC,OACI,kBAACC,EAAA,EAAD,KACQD,EADR,CAEI1D,SAAUA,EACVqD,QAASC,EACTrC,KAAK,IACL2C,IAAKH,EACLtC,UAAWoC,GAAAA,CACP,CAAC,CAACA,GAAAA,CAAWrD,EAAOK,OAAQA,IAAUwB,IAAkB0B,GACxDvD,EAAO6C,cACPA,GAEJc,QAAS,IAAM/B,EAAc2B,GAC7B,iBAAiB,oCAAmCA,a,wDCtCrE,MAAMK,E,MAA8BC,GAAAA,cAA+C,CACtFC,SAAU,GACVvC,SAAU,SAGdqC,EAA4B9B,YAAc,8BAEnC,MAAM3B,EAA2BR,IACpC,MAAM,SAACmE,EAAD,SAAWvC,IAAYwC,EAAAA,EAAAA,YAAWH,IAAgC,GAClE3D,EAAsB6D,MAAAA,OAAH,EAAGA,EAAWnE,GASvC,MAAO,CAACO,2BAP0BO,EAAAA,EAAAA,cAC7BC,IACGa,EAAS5B,EAAee,KAE5B,CAACf,EAAe4B,IAGetB,oBAAAA,K,gDCxBhC,MAAM+D,EAAoBC,IAC7B,MAAOC,EAAUC,IAAeC,EAAAA,EAAAA,WAAS,IAClCC,EAAYC,IAAiBF,EAAAA,EAAAA,UAAoC,IAWxE,OATAG,EAAAA,EAAAA,YAAU,KACNN,IACKO,MAAMH,IACHC,EAAcD,GAAc,OAE/BG,MAAMC,GAAMN,GAAY,KACxBO,OAAOD,GAAMN,GAAY,OAC/B,IAEI,CAACD,SAAAA,EAAUG,WAAAA,K,kcCbf,MAAM3F,GAAYC,EAAAA,EAAAA,YAAW,CAChCgG,OAAQ,CACJrF,QAAS,OACTC,cAAe,MACfuD,WAAY,SACZ8B,QAAS,YACTC,aAAc,kCAElBC,YAAa,CACT/F,YAAa,UCARgG,EAAiB,IAAoC,IAAnC,OAAC1E,EAAD,QAASqB,EAAT,KAAkBsD,GAAiB,EAC9D,MAAMhF,EAAStB,KACT,QAACiE,EAAD,MAAUsC,GAASD,EAAK3E,IAAW,GAEzC,OACI,oCACI,yBAAKY,UAAWjB,EAAO2E,QACnB,kBAAClB,EAAA,EAAD,CAAiBxC,UAAWjB,EAAO8E,YAAaI,KAAMC,EAAAA,QAAWxB,QAASjC,IACzEuD,GAEJtC,I,+CCrBN,IAAKyC,G,SAAAA,GAAAA,EAAAA,UAAAA,aAAAA,EAAAA,OAAAA,SAAAA,EAAAA,YAAAA,c,CAAAA,IAAAA,EAAAA,KCGZ,MAAMC,EAAaC,IAAgCC,EAAAA,EAAAA,OAAKjC,EAAAA,EAAAA,MAAIkC,EAAAA,EAAAA,MAAK,UAAWC,EAAAA,IAAzBF,CAA8BD,G,wcCOjF,MAiCA,EAjCkB,QAAC,KAACI,EAAD,MAAOtF,EAAP,OAActB,GAAf,SACd6G,EAAAA,EAAAA,UAAQ,KACJ,IAAKvF,IAAUtB,EAAQ,MAAO,CAAC8G,MAAO,GAAIN,MAAO,IAEjD,MAeMO,EDvBC,WAGX,IAAIC,EAAY,GACZC,EAAwB,GACxBC,EAAwB,GACxBC,EAAc,EACdlF,EAAO,CAAC,EAAG,GAEf,SAASmF,EAAT,GAA4C,IAA5B,MAACN,EAAD,MAAQN,GAAoB,EACxC,MAAMa,EAAQ,CAACP,MAAAA,EAAON,MAAAA,GAOtB,OA8DJ,YAAsD,IAA5B,MAACM,EAAD,MAAQN,GAAoB,EAClDM,EAAMQ,SAASC,IACXA,EAAKC,YAAc,GACnBD,EAAKE,YAAc,MAEvBjB,EAAMc,SAASI,IACXA,EAAKC,OAAOH,YAAYI,KAAKF,GAC7BA,EAAKG,OAAOJ,YAAYG,KAAKF,MA3EjCI,CAAiBT,GAgFrB,YAAgD,IAArB,MAACP,GAAoB,EAC5CA,EAAMQ,SAASC,IACXA,EAAKQ,MAAQC,KAAKC,IAAI1B,EAAUgB,EAAKC,aAAcjB,EAAUgB,EAAKE,iBAjFtES,CAAkBb,GAyFtB,YAAkD,IAArB,MAACP,GAAoB,EAC9C,IAAKA,EAAMqB,OAAQ,OACnB,IACIC,EADAC,EAAiB,CAACvB,EAAM,IAExBwB,EAAI,EAER,KAAOD,EAAeF,QAClBC,EAAY,GACZC,EAAef,SAASC,IACpBA,EAAKe,EAAIA,EACTf,EAAKgB,GAAKvB,EACVO,EAAKE,YAAYH,SAASI,IAClBU,EAAUI,QAAQd,EAAKC,QAAU,GACjCS,EAAUR,KAAKF,EAAKC,cAIhCU,EAAiBD,IACfE,EAON,GAJAxB,EAAMQ,SAASC,IACXA,EAAKe,EAAIA,EAAI,EAAIf,EAAKe,KAGtBA,EAAI,EAAG,CACP,MAAMG,GAAKxG,EAAK,GAAK,EAAI+E,EA9HX,KA8HyCsB,EAAI,GAC3DxB,EAAMQ,SAASC,IACNA,EAAKC,aAA0C,GAA3BD,EAAKC,YAAYW,OACrCZ,EAAKe,GAAKG,EADwClB,EAAKe,EAAIrG,EAAK,GAAK+E,UAI9EF,EAAM,GAAGwB,EAAIrG,EAAK,GAAK+E,EACvBF,EAAM,GAAGwB,EAAIxB,EAAM,GAAGwB,EArIR,GAqI4BtB,EAzH9C0B,CAAoBrB,GA6HxB,YAAuD,IAA5B,MAACP,EAAD,MAAQN,GAAoB,EACnD,MAAMmC,GAAiBlC,EAAAA,EAAAA,OACnBmC,EAAAA,EAAAA,UAAQlC,EAAAA,EAAAA,MAAK,MACbmC,EAAAA,SACAC,EAAAA,EAAAA,OAAK,CAACC,EAAGC,IAAMD,EAAE,GAAKC,EAAE,MACxBxE,EAAAA,EAAAA,MAAIyE,EAAAA,EAAAA,KAAI,IAJWxC,CAKrBK,IAsBF,WACI,IAAIoC,GAAKzC,EAAAA,EAAAA,OACLjC,EAAAA,EAAAA,MAAKsC,IAAW7E,EAAK,IAAM6E,EAAMqB,OAAS,GAAKhB,GAAeZ,EAAUO,MACxEqC,EAAAA,EAAAA,QAAOnB,KAAKoB,IAAKC,EAAAA,GAFZ5C,CAGPkC,GAEF,MAAMS,GAAM3C,EAAAA,EAAAA,OACRjC,EAAAA,EAAAA,MAAK+C,IAAD,aAAUA,EAAKQ,QAAS,UAAAR,EAAKE,mBAAL,eAAkBU,SAAU,OACxDgB,EAAAA,EAAAA,QAAOnB,KAAKoB,IAAKC,EAAAA,GAFT5C,CAGVK,GAEFoC,EAAKlB,KAAKC,IAAID,KAAKoB,IAAIF,EAAIjC,EAAwBmC,GAAMlC,EAAwBkC,GAEjFT,EAAerB,SAASR,IACpBA,EAAMQ,SAAQ,CAACC,EAAM+B,KACjB/B,EAAKgC,EAAID,EACT/B,EAAKiC,GAAKjC,EAAKQ,MAAQmB,QAI/B1C,EAAMc,SAASI,IACXA,EAAK8B,GAAK9B,EAAKK,MAAQmB,MAxC/BO,GA6CId,EAAerB,SAASR,IACpB,IAAIS,EACAiC,EAEAF,EADAI,EAAK,EAET,MAAMC,EAAI7C,EAAMqB,OAIhB,IADArB,EAAMgC,MAAK,CAACC,EAAGC,IAAMD,EAAEQ,EAAIP,EAAEO,IACxBD,EAAI,EAAGA,EAAIK,IAAKL,EACjB/B,EAAOT,EAAMwC,GACbE,EAAKE,EAAKnC,EAAKgC,EACXC,EAAK,IAAGjC,EAAKgC,GAAKC,GACtBE,EAAKnC,EAAKgC,EAAIhC,EAAKiC,GAAKrC,EAK5B,GADAqC,EAAKE,EAAKvC,EAAclF,EAAK,GACzBuH,EAAK,EAIL,IAHAE,EAAKnC,EAAKgC,GAAKC,EAGVF,EAAIK,EAAI,EAAGL,GAAK,IAAKA,EACtB/B,EAAOT,EAAMwC,GACbE,EAAKjC,EAAKgC,EAAIhC,EAAKiC,GAAKrC,EAAcuC,EAClCF,EAAK,IAAGjC,EAAKgC,GAAKC,GACtBE,EAAKnC,EAAKgC,KApE1B,MAAMtB,GAAMxB,EAAAA,EAAAA,OACRjC,EAAAA,EAAAA,MAAKsC,IAAWA,EAAMqB,OAAS,GAAKhB,GAAcR,EAAAA,EAAAA,MAAInC,EAAAA,EAAAA,MAAK+C,GAASA,EAAKiC,IAAI1C,OAC7EqC,EAAAA,EAAAA,QAAOnB,KAAKC,IAAK,GAFTxB,CAGVkC,GAEIiB,GAAM3H,EAAK,GAAKgG,GAAO,EAE7BU,EAAerB,SAASR,IACpB,MAAM,EAACyC,EAAD,GAAIC,IAAMK,EAAAA,EAAAA,MAAK/C,GACf4C,EAAKzH,EAAK,IAAMsH,EAAIC,GAC1B1C,EAAMQ,SAASC,IACXA,EAAKgC,GAAKG,EACNE,EAAK,IAAGrC,EAAKgC,GAAKK,SApJ9BE,CAAkBzC,GAClB0C,EAAkB1C,GAmRtB,YAAgD,IAArB,MAACP,GAAoB,GACrBL,EAAAA,EAAAA,OACnBmC,EAAAA,EAAAA,UAAQlC,EAAAA,EAAAA,MAAK,MACbmC,EAAAA,SACAC,EAAAA,EAAAA,OAAK,CAACC,EAAWC,IAAcA,EAAE,GAAKD,EAAE,MACxCvE,EAAAA,EAAAA,MAAIyE,EAAAA,EAAAA,KAAI,IAJWxC,CAKrBK,GAEaQ,SAASR,KACpBA,EAAQA,EAAMkD,SAASlB,MAAK,CAACC,EAAGC,IAAMD,EAAEQ,EAAIP,EAAEO,KACxCjC,SAAQ,CAACC,EAAM+B,KAAM,MACvB,aAAI/B,EAAKC,mBAAT,OAAI,EAAkBW,OAAQ,WAC1B,MAAM,OAACN,EAAD,GAASoC,EAAT,GAAaT,IAAMK,EAAAA,EAAAA,MAAKtC,EAAKC,aACnC,IAAIkC,EAAK7B,EAAO0B,EAAIU,EAAKT,EAAKjC,EAAKiC,IAC/B,UAAA1C,EAAMwC,EAAI,UAAV,eAAchB,IAAKf,EAAKe,GAAKoB,GAAK,UAAA5C,EAAMwC,EAAI,UAAV,eAAcC,IAAd,UAAkBzC,EAAMwC,EAAI,UAA5B,aAAkB,EAAcE,IAAKrC,IACvEuC,EAAK5C,EAAMwC,EAAI,GAAGC,EAAIzC,EAAMwC,EAAI,GAAGE,GAAKrC,GACxCI,EAAKgC,EAAIG,IACTnC,EAAKgC,EAAIG,UAnSzBQ,CAAkB7C,GACXA,EAgNX,SAAS0C,EAAT,GAAgD,IAArB,MAACjD,GAAoB,GACrBL,EAAAA,EAAAA,OACnBmC,EAAAA,EAAAA,UAAQlC,EAAAA,EAAAA,MAAK,MACbmC,EAAAA,SACAC,EAAAA,EAAAA,OAAK,CAACC,EAAWC,IAAcD,EAAE,GAAKC,EAAE,MACxCxE,EAAAA,EAAAA,MAAIyE,EAAAA,EAAAA,KAAI,IAJWxC,CAKrBK,GAEaQ,SAASR,IACpBA,EAAMQ,SAASC,IAAS,QACpB,aAAIA,EAAKE,mBAAT,OAAI,EAAkBU,OAAQ,CAC1B,MAAMgC,EAAS,GACTC,EAAc7C,EAAKE,YAAYjD,KAAK6F,GAAMA,EAAEC,UAAUC,OACtDC,EAAc,GACpBjD,EAAKE,YAAYH,SAAQ,SAAU+C,IACA,GAA3BI,KAAKjC,QAAQ6B,EAAE1C,SAAe8C,KAAK7C,KAAKyC,EAAE1C,UAC/C6C,GACH,IAAK,IAAIlB,EAAI,EAAGA,EAAIkB,EAAYrC,OAAQmB,IACpC,IAAK,IAAIoB,EAAI,EAAGA,EAAIF,EAAYlB,GAAG9B,YAAYW,OAAQuC,IAAK,CACxD,MAAMC,EAAQP,EAAY5B,QAAQgC,EAAYlB,GAAG9B,YAAYkD,GAAGJ,UAAUC,OAC5D,GAAVI,GAAaR,EAAOvC,KAAKL,EAAKE,YAAYkD,IAEtDpD,EAAKE,YAAc0C,EAGvB,aAAI5C,EAAKC,mBAAT,OAAI,EAAkBW,OAAQ,OAC1B,MAAMgC,EAAS,GACf,aAAI5C,EAAKE,mBAAT,OAAI,EAAkBU,OAAQ,CAC1B,MAAMiC,EAAc7C,EAAKC,YAAYhD,KAAK6F,GAAMA,EAAEC,UAAUC,OAC5D,IAAK,IAAIjB,EAAI,EAAGA,EAAI/B,EAAKE,YAAYU,OAAQmB,IAAK,CAC9C,MAAMqB,EAAQP,EAAY5B,QAAQjB,EAAKE,YAAY6B,GAAGgB,UAAUC,OAClD,GAAVI,GAAaR,EAAOvC,KAAKL,EAAKC,YAAYmD,KAItD,MAAMC,EAAeT,EAAO3F,KAAK6F,GAAMA,EAAEC,UAAUC,OAC7CM,EAAatD,EAAKC,YAAYsD,QAAO,SAAUT,GACjD,OAA0C,GAAnCI,KAAKjC,QAAQ6B,EAAEC,UAAUC,QACjCK,GAGH,GADArD,EAAKC,YAAcqD,EAAWb,OAAOG,GACjCA,EAAOhC,OAAS,EAAG,CACnB,IAAI4C,EAAoB,EACxB,IAAK,IAAIzB,EAAI,EAAGA,EAAIuB,EAAW1C,OAAQmB,IAAKyB,GAAqBF,EAAWvB,GAAGE,GAC/EjC,EAAKwD,kBAAoBA,UAMzCjE,EAAMQ,SAASC,IACX,IAAIyD,EAAK,EACLf,EAAK1C,EAAKwD,mBAAqB,SAC5BxD,EAAKwD,kBACZxD,EAAKC,YAAYF,SAASI,IACtBA,EAAKsD,GAAKA,EACVA,GAAMtD,EAAK8B,MAEfjC,EAAKE,YAAYH,SAASI,IACtBA,EAAKuC,GAAKA,EACVA,GAAMvC,EAAK8B,SA6BvB,OAtSApC,EAAOJ,UAAY,IAAMA,EACzBI,EAAO6D,aAAgB3J,IAAoB0F,GAAa1F,EAAQ8F,GAEhEA,EAAOD,YAAc,IAAMA,EAC3BC,EAAO8D,eAAkBpF,IAAsBqB,GAAerB,EAAUsB,GAExEA,EAAOH,sBAAwB,IAAMA,EACrCG,EAAO+D,yBAA4BnL,IAAqBiH,GAAyBjH,EAASoH,GAE1FA,EAAOF,sBAAwB,IAAMA,EACrCE,EAAOgE,yBAA4BpL,IAAqBkH,GAAyBlH,EAASoH,GAE1FA,EAAOnF,KAAO,IAAMA,EACpBmF,EAAOiE,QAAWC,IAAgCrJ,EAAOqJ,EAAUlE,GAEnEA,EAAOmE,OAAUlE,IACb0C,EAAkB1C,GACXA,GAGXD,EAAOM,KAAO,KACV,IAAI8D,EAAY,GAEhB,SAAS9D,EAAK+D,GACV,MAAMC,GAAYD,EAAE5D,OAAOL,aAA8C,GAA/BiE,EAAE5D,OAAOL,YAAYW,OAEzDwD,EAAKF,EAAE9D,OAAOW,EAAImD,EAAE9D,OAAOY,GAC7BqD,EAAKH,EAAE5D,OAAOS,EACduD,GAlDsC9C,IAA3BA,EAkDY4C,GAlDyB3C,IAA1BA,EAkDK4C,GAlD+BE,GAAM/C,GAAK,EAAI+C,GAAK9C,EAAI8C,GAmDlFC,EAAKF,EAAGL,GACRQ,EAAKH,EAAG,EAAIL,GACZ9B,EAAK+B,EAAE9D,OAAO4B,EAAIkC,EAAET,GANN,IAOdpB,EAAK6B,EAAE5D,OAAO0B,EAAIkC,EAAExB,GAPN,IA/CJ,IAAClB,EAAWC,EAuD1B,MAAMiD,EAAYP,EAEZ,GADC,IAAGE,EAAK5E,KAAa4C,MAAOgC,EAAK5E,KAAa4C,EAAK6B,EAAEjC,GAAK,MAGjE,OAAOE,IAAOE,EACP,IAAG+B,KAAMjC,2BACNkC,KAAMhC,IAAKqC,2BACXL,KAAMhC,EAAK6B,EAAEjC,GAAK,6BAClBmC,KAAMjC,EAAK+B,EAAEjC,GAAK,QACrB,IAAGmC,KAAMjC,0BACNqC,KAAMrC,KAAMsC,KAAMpC,KAAMgC,KAAMhC,IAAKqC,2BACnCL,KAAMhC,EAAK6B,EAAEjC,GAAK,6BAClBwC,KAAMpC,EAAK6B,EAAEjC,GAAK,OAAiBuC,KAAMrC,EAAK+B,EAAEjC,GAAK,4BACtDmC,KAAMjC,EAAK+B,EAAEjC,GAAK,QAS/B,OANA9B,EAAK8D,UAAY,SAAU7F,GACvB,OAAKuG,UAAU/D,QACfqD,GAAa7F,EACN+B,GAFuB8D,GAK3B9D,GA+OJN,ECnSkBA,GAChB6D,aAAa,IACbC,eAAe,IACfG,QAAQ,CAACrL,EAAS,EAAGsB,EAAQ,IAE5B0F,EAAYD,EAAaC,YACzBmF,EAAOpF,EAAaW,OAEpB0E,EAvBexF,CAAAA,IACjB,MAAMyF,EAAYzF,EAAKE,MAAMtC,KAAK+C,GAAD,KAAeA,KAC1C+E,EAAeC,IACjB,MAAM5B,EAAQ/D,EAAKE,MAAM0B,QAAQ+D,GACjC,OAAOF,EAAU1B,IAGf6B,EAAY5F,EAAKJ,MAAMhC,KAAKkD,GAAD,KAC1BA,EAD0B,CAE7BC,OAAQ2E,EAAY5E,EAAKC,QACzBE,OAAQyE,EAAY5E,EAAKG,YAE7B,MAAO,CAACf,MAAOuF,EAAW7F,MAAOgG,IAWpBC,CAAY7F,IACvB,MAACE,EAAD,MAAQN,GAAqBO,EAAaqF,GAEhD,MAAO,CAACtF,MAAAA,EAAON,MAAAA,EAAOQ,UAAAA,EAAWmF,KAAAA,KAClC,CAACvF,EAAM5G,EAAQsB,K,gDCvCf,MAAM1B,IAAYC,EAAAA,EAAAA,YAAW,CAChC6M,aAAc,CACVC,WAAY,IACZC,SAAU,OACVC,WAAY,OACZC,cAAe,SACfC,aAAc,MACdC,WAAY,QAEhBC,WAAY,CACRzM,QAAS,OACTwD,WAAY,SACZ4I,SAAU,OACVC,WAAY,OACZF,WAAY,SACZ,qBAAsB,CAClBI,aAAc,QAGtBG,YAAa,CACTN,SAAU,OACVhJ,MAAO,sBACP3D,YAAa,OAEjBsH,KAAM,CACF4F,OAAQ,UACRC,YAAa,EACbC,cAAe,KAEnBC,SAAU,CACNC,UAAW,gBACXP,WAAY,OACZJ,SAAU,QAEdY,eAAgB,CACZ1H,QAAS,EACT2H,UAAW,gBCFnB,GAvB4B,IAAmC,IAAlC,KAACC,EAAD,KAAOC,EAAP,SAAa7M,GAAqB,EAC3D,MAAMI,EAAStB,KACT8M,EACF,6BACI,0BAAMvK,UAAWjB,EAAOwL,cAAekB,IAAAA,KAAU,kBACjD,yBAAKzL,UAAWjB,EAAO+L,YACnB,kBAACY,EAAA,EAAD,CAAmB1L,UAAWjB,EAAOgM,cACpCU,IAAAA,KAAUD,EAAM,UAErB,yBAAKxL,UAAWjB,EAAO+L,YACnB,kBAACa,GAAA,EAAD,CAAY3L,UAAWjB,EAAOgM,cAC7BQ,IAKb,OACI,kBAACK,EAAA,EAAD,CAAmB5H,MAAOuG,EAAcsB,UAAW,OAC9ClN,I,gBC/Bb,SAASmN,KAA2Q,OAA9PA,GAAWC,OAAOC,QAAU,SAAUtG,GAAU,IAAK,IAAIyB,EAAI,EAAGA,EAAI4C,UAAU/D,OAAQmB,IAAK,CAAE,IAAI3B,EAASuE,UAAU5C,GAAI,IAAK,IAAI1E,KAAO+C,EAAcuG,OAAOE,UAAUC,eAAeC,KAAK3G,EAAQ/C,KAAQiD,EAAOjD,GAAO+C,EAAO/C,IAAY,OAAOiD,GAAkBoG,GAASM,MAAM9D,KAAMyB,WAGhT,SAAgB,QAAC,OACfhL,EAAS,IADK,EAEXsN,E,kXAFW,sBAGVzJ,IAAAA,cAAoB,MAAOkJ,GAAS,CACxC3M,MAAO,KACPtB,OAAQ,KACRyO,QAAS,YACTC,QAAS,MACTC,MAAO,6BACPC,WAAY,gCACXJ,GAAQzJ,IAAAA,cAAoB,OAAQ,KAAMA,IAAAA,cAAoB,OAAQ,CACvE0G,EAAG,uNACHhH,GAAI,oBACDM,IAAAA,cAAoB,IAAK,CAC5BoI,OAAQ,OACRC,YAAa,IACbyB,KAAM,OACNC,SAAU,WACT/J,IAAAA,cAAoB,OAAQ,CAC7BN,GAAI,iBACJoK,KAAM,QACL9J,IAAAA,cAAoB,MAAO,CAC5BgK,UAAW,qBACRhK,IAAAA,cAAoB,OAAQ,CAC/BiK,YAAa,MACbH,KAAM,OACNI,KAAM,uBACNxD,EAAG,qBC0GL,GApHoB,IAAkG,IAAjG,KAAClE,EAAD,UAAOP,EAAP,iBAAkBkI,EAAlB,UAAoCC,EAApC,eAA+CC,EAA/C,UAA+DC,EAA/D,WAA0EC,GAAuB,EAClH,MAAMpO,EAAStB,MACR2P,EAAQC,IAAalK,EAAAA,EAAAA,UAAS,IAC9BmK,EAAUC,IAAepK,EAAAA,EAAAA,UAAS,MACnCqK,GAAUC,EAAAA,EAAAA,QAAO,OACjB,EACFtH,EADE,EAEFiB,EAFE,KAGFsG,EAHE,MAIFC,EAJE,YAKFrI,EALE,YAMFD,EACAuI,QAAQ,WAACC,EAAa,GAAd,OAAkBC,IAC1B1I,GACG2I,GAAkBF,GACnB,SAACG,EAAD,mBAAWC,EAAX,gBAA+BC,IAAmBC,EAAAA,EAAAA,IAAsBJ,GACxEtM,GAAQ2M,EAAAA,EAAAA,IAAkBL,GAC1BM,EAAkBR,MAAAA,GAAAA,EAAY7H,OAC9BX,EAAYwI,EAAW7H,OAAS,GAAG6C,GAAKxD,EAAYwI,EAAW7H,OAAS,GAAGqB,GAC3E,EAkCAiH,EAAa,IAAMf,EAAY,MAgBrC,OAVAjK,EAAAA,EAAAA,YAAU,KAAM,MACZ,MAAMiL,EAAanJ,EAAKiC,GAClBmH,GAAYhB,MAAAA,GAAA,UAAAA,EAASiB,eAAT,eAAkBC,cAAe,EAC/CH,EAAaC,GAAWnB,EAAUkB,EAAa,EAAIC,EAAY,KACpE,KAEHlL,EAAAA,EAAAA,YAAU,KACF6J,GAAgBG,GAAUgB,MAC/B,CAACnB,IAGA,uBAAG/B,UAAY,aAAYjF,KAAKiB,MAClB,SAATsG,EACG,0BAAMrG,IAAK,EAAGjB,GAAIgH,EAAQuB,IAAKnB,EAASxN,UAAWjB,EAAOoM,UACrDwC,GAAS,IAGd,oCACI,0BACI9P,OAAQwQ,EACRlP,MAAO,GACPa,UAAWjB,EAAOqG,KAClBsH,KAAMM,EAAagB,EAAW,sBAAwBvM,EAAS,UAC/DgB,IAAK,YACLmM,QAAS7B,GAAoBiB,EAAW,IAAO,EAC/Ca,aAAc,KACN9B,GAAkBkB,KAE1Ba,aAAc,KACN/B,GAAkBmB,KAE1BxL,QAASuK,EAAiB8B,EAAAA,GAtC3BC,GAAkCzB,EAAYyB,EAAEC,eAuC/CC,OAAQjC,EAAiB,UAAY,UACrC,iBAAe,6BAEnB,kBAACkC,EAAA,GAAD,CACIC,OAAQ9B,EACRA,SAAUA,EACV+B,aAAc,CAACC,SAAU,MAAOC,WAAY,SAC5C9O,QAAS6N,EACTpM,QAAS,CAACb,MAAOtC,EAAOsM,gBACxB,iBAAe,wBAEf,kBAAC,KAAD,CACIvL,KAAK,KACLyK,aAAckB,IAAAA,KAAU,WACxBxH,KAAMuL,GACN9M,QApDF,KAClBwK,EAAUQ,GACVY,UAqDehJ,MAAAA,IAAAA,EAAaU,SAxFP,MACrB,MAAMyJ,GAAUnL,EAAAA,EAAAA,OAAKjC,EAAAA,EAAAA,MAAIkC,EAAAA,EAAAA,MAAK,YAAYkC,EAAAA,EAAAA,UAAQlC,EAAAA,EAAAA,MAAK,SAAvCD,CAAiDgB,GAEjE,OAAOwI,MAAAA,OAAP,EAAOA,EAAQzL,KAAI,CAAC,EAAcmG,KAAU,IAAxB,KAACgD,EAAD,KAAOD,GAAiB,EACxC,MAAMmE,EAAUD,EAAQjE,GACxB,IAAKkE,EAAS,OAEd,MAAOC,EAAOC,GAAOF,EAAQ1I,QACzB,CAAC6I,EAAD,SAAM,YAACxK,GAAP,QAAwB,EACpB4B,EAAAA,EAAAA,MAAI6I,EAAAA,EAAAA,MAAKzK,GAAayC,GAAI+H,EAAI,KAC9B/J,EAAAA,EAAAA,MAAI4B,EAAAA,EAAAA,MAAKrC,GAAayC,IAAKJ,EAAAA,EAAAA,MAAKrC,GAAagC,GAAIwI,EAAI,OAEzD,CAAC3I,EAAAA,EAAU,IAGf,OACI,kBAAC,GAAD,CAAcqE,KAAMA,EAAMC,KAAMA,EAAM/I,IAAK,QAAU+F,GACjD,0BACI4C,UAAY,eAAcuE,KAC1B9R,OAAQ+R,EAAMD,EACdxQ,MAAO0F,EACP7E,UAAWjB,EAAOqG,KAClByH,YAAa,IACbH,KAAM,UACNkC,QAAS7B,GAAoBiB,EAAW,IAAO,SAgEzB+B,MCnG9C,GAnBoB,IAAsD,IAArD,KAACxK,EAAD,KAAOyE,EAAP,iBAAa+C,EAAb,UAA+BC,GAAsB,EACtE,MAAM,UAAC7E,GAAa5C,EACd9D,GAAQ2M,EAAAA,EAAAA,IAAkBjG,IAC1B,SAAC6F,EAAD,mBAAWC,EAAX,gBAA+BC,IAAmBC,EAAAA,EAAAA,IAAsBhG,GAC9E,OACI,0BACImB,EAAGU,EACH0C,KAAMM,EAAagB,EAAW,sBAAwBvM,EAAS,UAC/DmN,QAAS7B,GAAoBiB,EAAW,IAAO,EAC/Ca,aAAc,KACN9B,GAAkBkB,KAE1Ba,aAAc,KACN/B,GAAkBmB,QC8EtC,GAvFoB,IAAiF,IAAhF,MAAC/O,EAAD,OAAQtB,EAAR,KAAgB4G,EAAhB,mBAAsBuL,EAAtB,UAA0C9C,EAA1C,eAAqDD,GAA2B,EACjG,MAAOE,EAAY8C,IAAe9M,EAAAA,EAAAA,WAAS,IACpC+M,EAAaC,IAAgBhN,EAAAA,EAAAA,WAAS,IACtCiN,EAAeC,IAAoBlN,EAAAA,EAAAA,UAAS,IAC5CmN,EAASC,IAAcpN,EAAAA,EAAAA,UAAS,IACjC,MAACkB,EAAD,MAAQM,EAAR,UAAeE,EAAf,KAA0BmF,GAAQwG,EAAU,CAAC/L,KAAAA,EAAMtF,MAAAA,EAAOtB,OAAAA,KAEhEyF,EAAAA,EAAAA,YAAU,KACNiN,EAAW,GACXF,EAAiB,KAClB,CAAClR,EAAOtB,IAEX,MAAM4S,GAAc/L,EAAAA,EAAAA,UAChB,IACIC,EAAMtC,KAAI,CAAC+C,EAAMoD,IACb,kBAAC,GAAD,CACIuE,iBAAkBiD,EAClBhD,UAAWgD,EACX5K,KAAMA,EACNP,UAAWA,EACXpC,IAAM,cAAa+F,IACnByE,eAAgBA,EAChBC,UAAWA,EACXC,WAAYA,OAGxB,CAACxI,EAAOqL,EAAoBnL,EAAW1F,EAAOtB,EAAQsP,IAGpDuD,GAAchM,EAAAA,EAAAA,UAChB,IACIL,EAAMhC,KAAI,CAACkD,EAAMiD,IACb,kBAAC,GAAD,CACIuE,kBAAmBiD,EACnBhD,WAAYgD,EACZzK,KAAMA,EACNyE,KAAMA,EAAKzE,GACX9C,IAAM,cAAa+F,SAG/B,CAACwH,EAAoB3L,EAAO2F,IAG1B2G,EAAwBC,IAC1B,MAAM1S,EAAO0S,EAAMC,MACbP,EAAUpS,EAAOkS,EAEvB,OADAC,EAAiBnS,GACVoS,GAcLQ,EAAO,KACTX,GAAa,GACbF,GAAY,IAGVc,EAAgB5D,EAAa,OAAS,OACtC+B,EAAS/B,EAAa,OAAS,OAErC,OACI,yBACIhO,MAAOA,EACPtB,OAAQA,EACRqR,OAAQA,EACR8B,YAxBQJ,IACZA,EAAMK,iBACNd,GAAa,GACbQ,EAAqBC,IAsBjBM,YApBQN,IACZ,IAAKV,EAAa,OAClBD,GAAY,GACZ,MAAM/R,EAAOyS,EAAqBC,GAClCL,EAAWD,EAAUpS,IAiBjBiT,UAAWL,EACXhC,aAAcgC,GAEd,uBAAG1F,UAAY,aAAYkF,KAAWzS,EAAS,iBAAkBkT,cAAeA,GAC5E,2BAAIL,GACJ,2BAAID,M,yHC5FpB,MAAMW,IAAuBC,EAAAA,EAAAA,QACzB,CAACC,EAAsCnJ,KAClCmJ,GAAuBA,EAAoBC,MAAKC,EAAAA,EAAAA,KAAarJ,MAGhEsJ,IAA4BJ,EAAAA,EAAAA,QAAM,CAACC,EAAsCI,KACpEC,EAAAA,EAAAA,QACH,CACI9D,YAAYlF,EAAAA,EAAAA,QAAOyI,GAAqBE,IACxCxD,QAAQzL,EAAAA,EAAAA,MACJsP,EAAAA,EAAAA,QAAO,CACHC,QAAQvP,EAAAA,EAAAA,KAAIoP,GAA0BH,QAIlDI,KAIFG,GAAwBH,IAC1B,IAAII,EAAQ,EACZ,MAAMC,GAAiBzN,EAAAA,EAAAA,OACnBqN,EAAAA,EAAAA,QAAO,CAAC9D,YAAYxL,EAAAA,EAAAA,MAAK8F,G,+UAAD,IAAoBA,EAApB,CAA+BC,KAAM0J,WAC7DH,EAAAA,EAAAA,QAAO,CACH7D,QAAQzL,EAAAA,EAAAA,MACJsP,EAAAA,EAAAA,QAAO,CACHC,QAAQvP,EAAAA,EAAAA,MAAK2P,GAAUD,EAAeC,WAKtD,OAAOD,EAAeL,IAGpBO,GAAeP,IACjB,MAAM/M,EAAsB,GACtBN,EAAsB,GAEtB6N,EAAiB,CAACR,EAAMS,EAAa3G,KACvC,MAAM,WAACqC,EAAa,GAAd,OAAkBC,EAAS,GAA3B,IAA+BsE,EAAM,GAArC,MAAyCzE,GAAS+D,EAExD/M,EAAMc,KAAK,CAACmI,OAAQ8D,EAAMhE,KAAM0E,EAAK5G,KAAAA,EAAMmC,MAAAA,IAC3C,MAAMnF,EAAQ7D,EAAMqB,OAAS,EAEvBqM,GAAmB/N,EAAAA,EAAAA,OACrBgO,EAAAA,EAAAA,QAAM,IAAoB,IAAnB,OAACV,EAAD,KAASpG,GAAU,EACtB,OAAOlH,EAAAA,EAAAA,OACHqE,EAAAA,EAAAA,SAAQqJ,IAAD,eAAW,UAAAA,EAAMnE,kBAAN,eAAkB7H,UAAlB,UAA4BgM,EAAMlE,cAAlC,aAA4B,EAAc9H,YAC5DsM,EAAAA,EAAAA,QAAON,GAAUE,EAAeF,EAAOxJ,EAAOgD,KAF3ClH,CAGLsN,OAEN/J,EAAAA,EAAAA,QAAOgG,GAPcvJ,CAQvBwJ,GAYF,OAVoB,GAAhBqE,GACAE,EAAiBlN,SAASgD,GACtB9D,EAAMoB,KAAK,CACPD,OAAQb,EAAM6D,GACd9C,OAAQf,EAAMwN,GACdvM,MAAO,GACPuC,UAAAA,MAILkK,GAEXH,EAAeR,GAAO,EAAGa,KAAKC,OAE9B,MAAMC,GAAcnO,EAAAA,EAAAA,OAChBgO,EAAAA,EAAAA,QAAM,QAAC,OAAC9M,EAAD,OAASE,GAAV,QAAsB,CAACF,EAAQE,MACrCgN,EAAAA,KAFgBpO,CAGlBD,GAEF,MAAO,CAACM,MAAOA,EAAMgE,QAAQvD,GAASqN,EAAYE,SAASvN,KAAQf,MAAAA,IC3E1D5G,IAAYC,EAAAA,EAAAA,aAAW,KAAM,CACtCwH,MAAO,CACHvB,QAAS,UACT2H,UAAW,aACXzN,OAAQ,OACRsB,MAAO,YCuCf,IAAeyT,EAAAA,EAAAA,OA7BW,IAOb,IAPc,cACvBC,EADuB,YAEvBC,EAFuB,kBAGvBC,EAHuB,mBAIvB/C,EAJuB,eAKvB/C,GAAiB,EALM,UAMvBC,EAAY6B,EAAAA,IACH,EACT,MAAMhQ,EAAStB,KACTuV,EFsDmB,SACzBH,GAGC,IAFDC,EAEC,uDAFa,GACdxB,EACC,uCACD,OAAOhN,EAAAA,EAAAA,MACHmN,GAA0BH,GAC1BO,GACAI,GAHG3N,CAIL,CAAC8N,IAAK,OAAQzE,MAAOmF,EAAajF,WAAY,GAAIC,OAAQ,CAAC,CAACtC,KAAM+G,KAAKC,MAAOZ,OAAQ,CAACiB,OE/DtEI,CAAcJ,EAAeC,EAAaC,GAE7D,OACI,yBAAK/S,UAAWjB,EAAOmG,MAAO,iBAAe,yBACzC,kBAAC,IAAD,CAAqBgO,YAAY,WAAWC,YAAa,IAAKC,aAAW,EAACC,cAAY,IACjF,QAAC,MAAClU,EAAQ,EAAT,OAAYtB,EAAS,KAAtB,SACG,kBAAC,GAAD,CACIsB,MAAOA,EACPtB,OAAQA,EACR4G,KAAMuO,EACNhD,mBAAoBA,EACpB/C,eAAgBA,EAChBC,UAAWA,W,ykBChC5B,MAAMzP,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCwS,KAAM,CACFjV,QAAS,OACTwD,WAAY,SACZ0R,aAAc,MACd,oBAAqB,CACjBC,WAAY,QAGpBC,YAAa,QAAC,UAACC,GAAF,QAA+B,CACxCvU,MAAO,GACPtB,OAAQ,GACR4D,MAAOiS,EAAY,OAAS,sBAC5B/R,aAAc,IAElBqC,MAAO,CACHvC,MAAOX,EAAMK,QAAQa,KAAKC,UAC1B0R,YAAa,MACbJ,aAAc,OAElBnB,IAAK,CACD1H,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAK/B,a,mNCPlC,MAwBA,GAxBuB,IAAsF,IAArF,eAAC2T,EAAD,UAAiBC,EAAjB,mBAA4BC,EAA5B,cAAgDC,EAAhD,UAA+DL,GAAsB,EACzG,MAAM3U,EAAStB,GAAU,CAACiW,UAAAA,IAC1B,OACI,yBAAK1T,UAAWjB,EAAOuU,MACnB,kBAAC,KAAD,CACIxT,KAAK,MACL4C,QAAS,IAAMqR,IACf/T,UAAWjB,EAAO0U,YAClBxP,KAAM4P,GAAaG,GAAAA,EACnBnV,UAAWgV,EACXtJ,aAAcsJ,GAAapI,IAAAA,KAAU,WAEzC,kBAACwI,EAAA,EAAD,CAAYC,QAAS,QAASlU,UAAWjB,EAAOqT,KAC5C,0BAAMpS,UAAWjB,EAAOiF,OAAQyH,IAAAA,KAAU,gBACzC0I,EAAAA,EAAAA,KAAeP,IAEpB,kBAACQ,GAAA,EAAD,MACCN,EAAmBzR,KAAI,CAAC,EAAwB8E,KAAM,IAA9B,KAACkN,GAA6B,EAApB9R,E,kXAAoB,aACnD,OAAO8R,GAAQ,kBAAC,KAAD,IAA4B5R,IAAK0E,EAAGrH,KAAK,KAAKwU,iBAAe,GAAK/R,SCjCpF9E,IAAYC,EAAAA,EAAAA,aAAW,KAAM,CACtC4V,KAAM,QAAC,iBAACiB,GAAF,QAAsC,CACxC9J,SAAU,OACVzM,SAAU,WACVK,QAAS,OACTC,cAAe,SACfuD,WAAY,UACZ2S,OAAQ,gCACRb,YAAa,MACb,WAAY,CACRjS,QAAS,MACT+S,WAAa,aAAYF,IACzBvW,SAAU,WACVC,KAAM,EACNC,KAAM,EACNE,QAAS,GAEb,gBAAiB,CACbsW,UAAW,SAGnBC,OAAQ,CACJhR,QAAS,yBCsJjB,GA/HuB,IAiBV,IAjBW,UACpB3D,EADoB,eAEpB4T,EAFoB,kBAGpBgB,EAHoB,oBAIpBC,EAJoB,gBAKpBC,EALoB,WAMpBC,EANoB,oBAOpBC,EAPoB,qBAQpBC,EARoB,uBASpBC,EAToB,0BAUpBC,EAVoB,UAWpBjI,EAXoB,OAYpBkI,EAZoB,SAapBC,EAboB,MAcpBC,EAdoB,uBAepBC,EAfoB,yBAgBpBC,GACS,EACT,MAAMjB,EAAmBK,GAAoBa,EAAAA,EAAAA,KAAoB7B,GAAkB,sBAC7E7U,EAAStB,GAAU,CAAC8W,iBAAAA,IACpBmB,GAAcC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,gBAE1BjH,GAAMlB,EAAAA,EAAAA,QAAO,OACZoI,IAAqBC,EAAAA,EAAAA,OAC5BxS,EAAAA,EAAAA,YAAU,KAYA,MAXFsR,GAAqBiB,KACFvR,EAAAA,EAAAA,OACfyR,EAAAA,EAAAA,OAAK,QAAC,OAACvQ,GAAF,SAAcA,IAAWqQ,EAAkBG,SAChDC,EAAAA,EAAAA,QAAO,GAAI,qBACXC,EAAAA,OACAC,EAAAA,QAJe7R,CAKjBuQ,GAEatD,MACNpJ,IAAcqJ,EAAAA,EAAAA,KAAaqE,EAAmB1N,IAAcA,IAAc0N,MAG/ElH,MAAAA,GAAA,UAAAA,EAAKF,eAAL,SAAc2H,eAAe,CAACC,SAAU,eAGjD,CAACR,IAEJ,MAAOS,EAAYC,IAAiBpT,EAAAA,EAAAA,WAAS,GAEvCqT,GAAkClS,EAAAA,EAAAA,OACpCmS,EAAAA,EAAAA,OAAM,sBACNV,EAAAA,EAAAA,OAAMlI,GAAeA,EAAW6I,GAAAA,EAAAA,QAAsB1Q,QAAU6H,EAAW6I,GAAAA,EAAAA,OAAqB1Q,UAChGqG,EAAAA,EAAAA,OAAM,CAACqK,GAAAA,EAAAA,OAAsBA,GAAAA,EAAAA,QAC7BP,EAAAA,QACArG,EAAAA,KALoCxL,CAMtCuQ,IACI,qBAAC8B,EAAD,UAAuBjD,IAAakD,EAAAA,EAAAA,IAAkBJ,GAEtDK,GAA8DvS,EAAAA,EAAAA,OAChEmS,EAAAA,EAAAA,OAAM,sBACNnE,EAAAA,EAAAA,OAAM4D,EAAAA,QACNC,EAAAA,QAHgE7R,CAIlEuQ,GAEIiC,GAAiCC,EAAAA,EAAAA,KAA4BF,EAA0BnB,GASvF5B,EAAqB,CACvB,CACI7P,KAAM+S,GAAAA,EACNzM,aAAckB,IAAAA,KAAU,iBACxB/I,QAAS,IAAM6T,GAAc,GAC7B1X,SAAUmW,EACVX,OAAQmC,GAEZ,CACIvS,KAAMuL,GACNjF,aAAckB,IAAAA,KAAU,WACxB/I,QAAS,IAAMwK,IACfrO,SAAUsW,EACVd,KAAMU,GAEV,CACI9Q,KAAMgT,GAAAA,EACN1M,aAAckB,IAAAA,KAAU,eACxB/I,QAAS,IAxBb8S,EAAyB,CACrB5B,eAAAA,EACAsD,WAAYJ,EACZ3O,UAAWqO,IAsBX3X,SAAUsW,EACVd,KAAMU,KAAgB+B,IAI9B,OACI,yBAAKnI,IAAKA,EAAK3O,UAAWoC,IAAAA,CAAWrD,EAAOuU,KAAMtT,IAC9C,kBAAC,GAAD,CACI4T,eAAgBA,EAChBC,UAAWe,KAAuB4B,EAClC9C,UAAWkB,GAAqBlB,EAChCK,cAAe4C,EACf7C,mBAAoBA,IAEvBe,EAAoBxS,KAAI,QAAC,OAACmD,EAAD,kBAAS2R,GAAV,SACrB,kBAACC,GAAA,EAAD,CACI3U,IAAK+C,EACLA,OAAQA,EACR2R,kBAAmBA,EACnBE,qBAAsBzC,EACtB0C,wBAAyB1C,EACzB2C,SAAUzC,MAAAA,OAAF,EAAEA,EAAiBnC,SAASnN,GACpCyP,qBAAsBA,EACtBC,uBAAwBA,EACxBE,OAAQA,EACRC,SAAUA,EACVmC,iBAAkB,IAAMjC,EAAuB/P,QAGtD8Q,GACG,kBAACmB,GAAA,EAAD,CACIzX,UAAWjB,EAAO4V,OAClBW,MAAQnN,GAAcmN,EAAM,CAACkB,qBAAAA,EAAsBrO,UAAAA,IACnD1H,QAAS,IAAM8V,GAAc,OCzKpC9Y,IAAYC,EAAAA,EAAAA,aAAW,KAAM,CACtCga,MAAO,CACHC,UAAW,OACXC,UAAW,SACXjE,YAAa,OACbJ,aAAc,OAElBsE,SAAU,CACN,QAAS,CACLnD,UAAW,QAEf3S,OAAQ,OACR+V,SAAU,a,2cCsBlB,MAuFA,IAAelF,EAAAA,EAAAA,OAvFK,IAeP,IAfQ,mBACjB5C,EADiB,OAEjBpC,EAFiB,WAGjBmK,EAHiB,aAIjBC,EAJiB,uBAKjBC,EALiB,0BAMjBC,EANiB,SAOjBC,EAPiB,WAQjBpD,EARiB,eASjB9H,EATiB,eAUjBmL,EAAiBrJ,EAAAA,GAVA,gBAWjBsJ,EAAkBtJ,EAAAA,GAXD,kBAYjBuJ,EAAoBvJ,EAAAA,GAZH,qBAajBwJ,EAAuBxJ,EAAAA,GAbN,yBAcjByG,EAA2BzG,EAAAA,IAClB,EACT,MAAMhQ,EAAStB,KAET+a,GAAW9T,EAAAA,EAAAA,UACb,IClC0B,SAC9BkJ,EACAoK,GAEa,IADbC,EACa,uDAD6B,GAE1C,MAAMQ,EAAgC7K,EAAOC,YAAc,GACrD6K,GAA0CC,EAAAA,EAAAA,KAAsB/K,GACtE,OAAOoK,EACFrP,QAAQiQ,KAAiBC,EAAAA,EAAAA,KAAaD,EAAY/K,cAClDxL,KAAI,IAAuB,IAAtB,IAAC+P,EAAD,WAAMvE,GAAgB,EAexB,MAAO,CAAC+F,eAAgBxB,EAAKyC,qBAdDvQ,EAAAA,EAAAA,OACxBjC,EAAAA,EAAAA,MAAK8F,IACD,GAA4B,aAAxBA,EAAU2Q,UAA0B,CACpC,MAAMC,EAAoBL,EAAmB3C,MAAKvE,EAAAA,EAAAA,KAAarJ,IAC/D,OAAO4Q,GAAqB,IAACD,UAAW,YAAeC,GACpD,CACH,MAAMC,EAAkBP,EAAiB1C,MAAKvE,EAAAA,EAAAA,KAAarJ,IAC3D,OAAO6Q,GAAmB,IAACF,UAAW,UAAaE,QAG3DrQ,EAAAA,EAAAA,SAAQR,KAAgBA,KACxB8Q,EAAAA,GAAAA,GAAiCrL,EAAOoI,KAAMiC,GAXtB3T,CAY1BuJ,OAILlF,QAAO,QAAC,oBAACkM,GAAF,SAA2BA,EAAoB7O,OAAS,KDQ1DkT,CAAmBtL,EAAQoK,EAAcC,IAC/C,CAACrK,EAAQoK,EAAcC,KAEpBkB,EAAuBC,IAA4BjW,EAAAA,EAAAA,UAA+C,IACnG4P,GAAoBrO,EAAAA,EAAAA,UACtB,ICVgC,EACpC8T,EACAW,IAEOX,EAASxR,QAAO,CAAC6I,EAAD,KAAgD,IAA1C,eAAC+D,EAAD,oBAAiBiB,GAAyB,EACnE,MAAM9B,GAAoBT,EAAAA,EAAAA,QAAM,IAAiC,UAAhC,OAAC9M,EAAD,kBAAS2R,GAAuB,EAC7D,MAAMkC,EAAgB,UAAGF,EAAsBvF,UAAzB,aAAG,EAAuCjB,SAASnN,GACzE,OAAO2R,EAAkBT,GAAAA,EAAAA,QACpB7O,OAAOsP,EAAkBT,GAAAA,EAAAA,QACzB7O,OAAOwR,EAAmBlC,EAAkBT,GAAAA,EAAAA,WAA2B,MAC7E7B,GACH,OAAOhF,EAAIhI,OAAOkL,KACnB,IDFOuG,CAAyBd,EAAUW,IACzC,CAACX,EAAUW,KAEf7V,EAAAA,EAAAA,YAAU,KACN4U,EAA0BnF,KAC3B,CAACA,IAEJ,MAAMwG,GAAe/Z,EAAAA,EAAAA,cAChBga,IACGlB,EAAkB,CAACmB,UAAW7L,MAAAA,OAAF,EAAEA,EAAQwE,IAAKoH,YAAAA,MAE/C,CAAC5L,MAAAA,OAAD,EAACA,EAAQwE,IAAKkG,IAGZoB,GAAala,EAAAA,EAAAA,cACdma,IACGtB,EAAgB,MAAIsB,EAAL,CAAaF,UAAW7L,MAAAA,OAAF,EAAEA,EAAQwE,SAEnD,CAACxE,MAAAA,OAAD,EAACA,EAAQwE,IAAKiG,IAGlB,OACI,yBAAKrY,UAAWjB,EAAO2Y,OAClBc,EAASnW,KAAI,IAA2C,IAA1C,eAACuR,EAAD,oBAAiBiB,GAAyB,EACrD,OACI,kBAAC,GAAD,CACIpS,IAAKmR,EACL5T,UAAWjB,EAAO8Y,SAClB9C,WAAYA,EACZnB,eAAgBA,EAChBgB,kBAAmB5E,EACnB6E,oBAAqBA,EACrBG,oBAAqBmD,KAAayB,EAAAA,EAAAA,KAAwB7B,GAC1D9C,qBAAsBkD,KAAa0B,EAAAA,EAAAA,KAAsB9B,GACzD7C,uBAAwBiD,KAAa2B,EAAAA,EAAAA,KAAwB/B,GAC7D5C,0BAA2BlI,EAC3BqI,MAAQqE,GAAWvB,EAAe,MAAIuB,EAAL,CAAa/L,OAAAA,KAC9CyH,SAAUkE,EACVnE,OAAQsE,EACRxM,UAAW,IAAMqL,EAAqB3E,GACtC4B,yBAA0BA,EAC1BV,gBAAiBqE,EAAsBvF,GACvC2B,uBAAyBwE,IACrBX,GACI9U,EAAAA,EAAAA,OACI0V,EAAAA,EAAAA,SAAOC,EAAAA,EAAAA,KAAIrG,IAAiBsG,EAAAA,EAAAA,OAAMtG,EAAgB,MAClDjC,EAAAA,EAAAA,QAAO,CACH,CAACiC,IAAiBuG,EAAAA,EAAAA,SACdxH,EAAAA,EAAAA,UAASoH,IACTK,EAAAA,EAAAA,SAAQ,CAACL,KACTM,EAAAA,EAAAA,QAAON,kB,0EE5G5C,MAAMtc,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCC,UAAW,CACP1C,QAAS,OACTC,cAAe,SACf,QAAS,CACLkV,WAAY,SAGpBxP,MAAO,CACHyG,SAAU,OACVC,WAAY,OACZjJ,MAAO,UACPmJ,aAAc,OAElB0P,SAAU,CACNnb,MAAO,OACPtB,OAAQ,OACR0c,cAAe,UAEnBrV,MAAO,CACH/F,MAAO,QACPtB,OAAQ,QACR8D,aAAc,MACdP,WAAY,sBACZoT,OAAQ,gCACRxW,SAAU,YAEdwc,YAAa,CACTxc,SAAU,WACVH,OAAQ,OACRsB,MAAO,OACPhB,MAAO,OACPF,IAAK,OACLwD,MAAOX,EAAMK,QAAQlB,QAAQuB,MAEjCiZ,aAAc,CACVjG,OAAS,aAAY1T,EAAMK,QAAQlB,QAAQuB,OAC3CJ,WAAY,+BCjBPsZ,GAAiB,IAAiF,IAAhF,kBAACC,EAAD,cAAoB9H,EAApB,SAAmC+H,EAAnC,MAA6C5W,EAA7C,SAAoD6W,EAAW9L,EAAAA,IAAiB,EAC3G,MAAMhQ,EAAStB,KACTqd,GAAoBtb,EAAAA,EAAAA,cACrB2I,GACUwS,EAAkBhI,SAASxK,EAAUiK,MACtC2I,EAAAA,EAAAA,MAAwBC,EAAAA,EAAAA,KAAe7S,IACvC,WAEV,CAACwS,IAEL,OACI,kBAAC,KAAD,CAA2BG,kBAAmBA,GAC1C,yBAAK9a,UAAWjB,EAAOgC,UAAW2B,QAASmY,GACvC,0BAAM7a,UAAWjB,EAAOiF,OACnBA,EADL,IACY,kBAACiX,EAAA,EAAD,CAAUjb,UAAWjB,EAAOub,YAExC,yBAAKta,UAAWoC,IAAAA,CAAWrD,EAAOmG,MAAO,CAAC,CAAE,GAAEnG,EAAO0b,gBAAiBG,KACjEA,GAAY,kBAACM,GAAA,EAAD,CAAiBlb,UAAWjB,EAAOyb,cAChD,kBAAC,GAAD,CAAmB3H,cAAeA,EAAe5F,gBAAgB,QCtCxExP,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCqa,gBAAiB,CACbrD,SAAU,SAEdsD,YAAa,CACTzX,QAAS,mBACT6G,WAAY,IACZC,SAAU,OACVC,WAAY,OACZC,cAAe,UAEnB0Q,cAAe,CACXhd,QAAS,OACTC,cAAe,SACfqF,QAAS,oBAEb2X,MAAO,CACHjd,QAAS,QAEb+T,IAAK,CACD3H,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAK/B,QAC1B2K,aAAc,QAElB5G,MAAO,CACHyG,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAKC,UAC1BsR,aAAc,WCJTgI,GAAgB,IAAoF,IAAnF,WAACxG,EAAD,YAAa6D,EAAb,cAA0B/F,EAA1B,QAAyCpS,EAAzC,qBAAkD8X,GAAiC,EAC7G,MAAMxZ,EAAStB,MAER+d,EAAkBC,IAAuBtY,EAAAA,EAAAA,UAASuY,EAAAA,IAAAA,SAEnDC,GAAuBnc,EAAAA,EAAAA,cACxBoc,IAA2BC,EAAAA,EAAAA,KAAiCjD,EAAagD,GAAevZ,KAAI,QAAC,IAAC+P,GAAF,SAAWA,MACxG,CAACwG,IAQL,OACI,kBAACkD,GAAA,EAAD,CAAQ1M,MAAM,EAAM3O,QAASA,EAASyB,QAAS,CAACb,MAAOtC,EAAOoc,kBAC1D,kBAACY,GAAA,EAAD,CAAa7Z,QAAS,CAACoR,KAAMvU,EAAOqc,cAAe3P,IAAAA,KAAU,YAC7D,kBAACuQ,GAAA,EAAD,CAAe9Z,QAAS,CAACoR,KAAMvU,EAAOsc,gBAClC,kBAACpH,EAAA,EAAD,CAAYC,QAAS,QAASlU,UAAWjB,EAAOqT,KAC5C,0BAAMpS,UAAWjB,EAAOiF,OAAQyH,IAAAA,KAAU,iBACzC0I,EAAAA,EAAAA,KAAeyE,EAAYxG,KAAK6J,eAErC,yBAAKjc,UAAWjB,EAAOuc,OACnB,kBAACZ,GAAD,CACIG,SAAU,IAAMY,EAAoBC,EAAAA,IAAAA,SACpCd,SAAUY,IAAqBE,EAAAA,IAAAA,QAC/B1X,MAAOyH,IAAAA,KAAU,WACjBoH,cAAeA,EACf8H,kBAAmBgB,GAAqB,KAE3C/C,EAAY9K,QAAU8K,EAAYxG,MAAQS,EAAcT,KACrD,kBAACsI,GAAD,CACIG,SAAU,IAAMY,EAAoBC,EAAAA,IAAAA,aACpCd,SAAUY,IAAqBE,EAAAA,IAAAA,YAC/B1X,MAAOyH,IAAAA,KAAU,gBACjBoH,cAAeA,EACf8H,kBAAmBgB,GAAqB,OAKxD,kBAACO,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAQzZ,QAASjC,GAAUgL,IAAAA,KAAU,WACrC,kBAAC0Q,GAAA,EAAD,CAAQtd,UAAWkW,EAAYrS,QAlChB,KACvB6V,EAAqBiD,GACrB/a,KAgCoEgB,MAAM,WAC7DgK,IAAAA,KAAU,eCtElBhO,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCqa,gBAAiB,CACbrD,SAAU,SAEdsD,YAAa,CACTzX,QAAS,mBACT6G,WAAY,IACZC,SAAU,OACVC,WAAY,OACZC,cAAe,UAEnB0Q,cAAe,CACXhd,QAAS,OACTC,cAAe,SACfqF,QAAS,oBAEbyO,IAAK,CACD3H,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAK/B,QAC1B2K,aAAc,QAElB5G,MAAO,CACHyG,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAKC,UAC1BsR,aAAc,WCPT6I,GAAoB,IAMpB,IANqB,eAC9BC,EAD8B,YAE9BzD,EAF8B,cAG9B/F,EAH8B,QAI9BpS,EAJ8B,yBAK9B+U,GACS,EACT,MAAMzW,EAAStB,KAETkd,GAAoBjW,EAAAA,EAAAA,UACtB,KAAMmX,EAAAA,EAAAA,KAAiCjD,GAAa,GAAMvW,KAAI,QAAC,IAAC+P,GAAF,SAAWA,MACzE,CAACwG,IAQL,OACI,kBAACkD,GAAA,EAAD,CAAQ1M,MAAM,EAAM3O,QAASA,EAASyB,QAAS,CAACb,MAAOtC,EAAOoc,kBAC1D,kBAACY,GAAA,EAAD,CAAa7Z,QAAS,CAACoR,KAAMvU,EAAOqc,cAAe3P,IAAAA,KAAU,gBAC7D,kBAACuQ,GAAA,EAAD,CAAe9Z,QAAS,CAACoR,KAAMvU,EAAOsc,gBAClC,kBAACpH,EAAA,EAAD,CAAYC,QAAS,QAASlU,UAAWjB,EAAOqT,KAC5C,0BAAMpS,UAAWjB,EAAOiF,OAAQyH,IAAAA,KAAU,iBACzC0I,EAAAA,EAAAA,KAAeyE,EAAYxG,KAAK6J,eAErC,kBAACvB,GAAD,CACIE,UAAQ,EACR5W,MAAOyH,IAAAA,KAAU,eACjBoH,cAAeA,EACf8H,kBAAmBA,KAG3B,kBAACuB,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAQzZ,QAASjC,GAAUgL,IAAAA,KAAU,WACrC,kBAAC0Q,GAAA,EAAD,CAAQtd,UAAWwd,EAAgB3Z,QAtBhB,KAC3B8S,IACA/U,KAoB4EgB,MAAM,WACrEgK,IAAAA,KAAU,mBCxDlBhO,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCwS,KAAM,CACFjV,QAAS,OACTC,cAAe,SACfuD,WAAY,SACZhE,OAAQ,QAEZye,aAAc,CACVpb,gBAAiBJ,EAAMK,QAAQC,WAAWC,MAC1CqT,UAAW,OAEf6H,SAAU,CACN9R,SAAU,OACV3M,YAAa,OAEjB0e,KAAM,CACF/a,MAAOX,EAAMK,QAAQa,KAAKC,UAC1B5D,QAAS,OACTC,cAAe,MACfuD,WAAY,SACZ4a,UAAW,aACX1a,OAAQ,sBAEZ2a,SAAU,CACNjS,SAAU,OACVC,WAAY,QAEhBiS,eAAgB,CACZ9e,OAAQ,OACRsB,MAAO,oBACP4C,OAAQ,WACRX,WAAYN,EAAMK,QAAQyb,QAC1BhO,QAAS,IAEb7Q,KAAM,CACFC,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,QAAS,OACTC,cAAe,SACfC,SAAU,UAEdZ,sBAAuB,CACnBC,SAAU,EACVuB,MAAO,Y,mNCTR,MAiKP,IAAeyT,EAAAA,EAAAA,OA9II,IASN,IATO,WAChBiK,EADgB,aAEhB7E,EAFgB,cAGhBnF,EAHgB,OAIhBjF,EAJgB,aAKhBkP,EALgB,qBAMhBvE,EAAuBxJ,EAAAA,GANP,yBAOhByG,EAA2BzG,EAAAA,IAElB,EADNgO,E,kXACM,4HACT,MAAMhe,EAAStB,KAETuf,GAAqBrH,EAAAA,EAAAA,aAAYsH,EAAAA,GAAAA,UAAAA,aACjClF,GAA0BmF,EAAAA,EAAAA,KAAcF,EAAUpP,MAAAA,OAAX,EAAWA,EAAQoI,MAE1DmH,GAAU1P,EAAAA,EAAAA,WACT2P,EAAUC,IAAela,EAAAA,EAAAA,UAlCN,KAmCpBtD,GAAuBL,EAAAA,EAAAA,cAAY,QAAC,eAAC8d,GAAF,SAAsBD,EAAYC,KAAiB,KAErFC,EAAuBC,IAA4Bra,EAAAA,EAAAA,aACnDsa,EAAiBC,IAAsBva,EAAAA,EAAAA,YAMxCwa,GAAoBjZ,EAAAA,EAAAA,UAAQ,KAAMkZ,EAAAA,EAAAA,KAA2B/K,IAAgB,CAACA,IAC9EkC,EAAa4I,EAAoB,GAEvCra,EAAAA,EAAAA,YAAU,KAAM,MACZ,MAAMzF,EAASgI,KAAKC,IAhDE,IADK,GAiDa6X,GAClCE,GAAgB,UAAAV,EAAQ1O,eAAR,eAAiBqP,cAhDjB,IAiDtBT,EAAYxX,KAAKoB,IAAI4W,EAAehgB,MACrC,CAAC8f,IAEJ,MAAMI,GAAQrZ,EAAAA,EAAAA,UACV,IAAM,CACF,CACIpC,GAAI6B,EAAW6Z,UACfha,MAAOyH,IAAAA,KAAU,cAErB,CACInJ,GAAI6B,EAAW8Z,OACfja,MAAOyH,IAAAA,KAAU,WAErB,CACInJ,GAAI6B,EAAW+Z,YACfla,MAAOyH,IAAAA,KAAU,kBAGzB,KAGGsH,EAAmBoL,IAAwBhb,EAAAA,EAAAA,YAC5C6M,EAAqB6M,IAAe1Y,EAAW+Z,YAC/CjR,EAAiB8P,EAAW5E,YAAaiG,EAAAA,EAAAA,KAAwBC,EAAAA,IAAAA,QAA6BtG,GAEpG,OACI,yBAAK/X,UAAWjB,EAAOuU,KAAM3E,IAAKwO,GAC7BI,GACG,kBAAChC,GAAD,CACIxG,WAAYA,EACZtU,QAAS,IAAM+c,EAAyB,MACxCjF,qBAAuB+F,IACnB/F,EAAqB,CACjBkB,UAAW7L,EAAOwE,IAClBwB,eAAgB2J,EAChBe,cAAAA,KAGRzL,cAAeA,EACf+F,YAAaZ,EAAajC,MAAK,QAAC,IAAC3D,GAAF,SAAWA,IAAQmL,OAGzDE,GACG,kBAACrB,GAAD,CACIC,eAAgBtH,EAChBtU,QAAS,IAAMid,EAAmB,MAClClI,yBAA0B,IACtBA,EAAyB,CACrB0B,WAAYuG,EAAgBvG,WAC5B/O,UAAWsV,EAAgBtV,YAGnC0K,cAAeA,EACf+F,YAAaZ,EAAajC,MAAK,QAAC,IAAC3D,GAAF,SAAWA,IAAQqL,EAAgB7J,oBAG1E,kBAAC2K,EAAA,EAAD,CACIR,MAAOA,EACPS,OAAQ3B,EACR7c,UAAWjB,EAAOud,aAClBhc,SAAUwc,IAEd,kBAAC/c,EAAA,EAAD,CACIC,UAAWjB,EAAOpB,sBAClBuC,YAAY,aACZJ,KAAMsd,EACNjd,QApHc,IAqHdC,SApHc,IAqHdC,aAAW,EACXC,SAAUT,GAEV,yBAAKG,UAAWjB,EAAOhB,MAClB8U,KAAkB4L,EAAAA,EAAAA,SAAQ1L,IACvB,kBAAC,GAAD,CACID,aAAa4L,EAAAA,EAAAA,KAAS9Q,MAAAA,OAAD,EAACA,EAAQD,OAC9BkF,cAAeA,EACfE,kBAAmBA,EACnB/C,mBAAoBA,EACpB/C,eAAgBA,IAAmB8H,EACnC7H,UAAWsQ,KAIvB,yBAAKxd,UAAWjB,EAAOhB,MACnB,yBAAKiC,UAAWjB,EAAOyd,MACnB,kBAACvB,EAAA,EAAD,CAAUjb,UAAWjB,EAAOwd,WAC5B,0BAAMvc,UAAWjB,EAAO2d,UACnBjR,IAAAA,KAAU,oEAGlBmC,GACG,kBAAC,GAAD,IACI2K,qBAAsBiF,EACtBhI,yBAA0BkI,EAC1B1N,mBAAoBA,EACpBgI,aAAcA,EACdpK,OAAQA,EACRmK,WAAYA,EACZG,0BAA2BiG,EAC3BpJ,WAAYA,EACZ9H,eAAgBA,GACZ8P,U,gBC/LhC,SAASjR,KAA2Q,OAA9PA,GAAWC,OAAOC,QAAU,SAAUtG,GAAU,IAAK,IAAIyB,EAAI,EAAGA,EAAI4C,UAAU/D,OAAQmB,IAAK,CAAE,IAAI3B,EAASuE,UAAU5C,GAAI,IAAK,IAAI1E,KAAO+C,EAAcuG,OAAOE,UAAUC,eAAeC,KAAK3G,EAAQ/C,KAAQiD,EAAOjD,GAAO+C,EAAO/C,IAAY,OAAOiD,GAAkBoG,GAASM,MAAM9D,KAAMyB,WAGhT,SAAgB,QAAC,OACfhL,EAAS,IADK,EAEXsN,E,kXAFW,sBAGVzJ,IAAAA,cAAoB,MAAOkJ,GAAS,CACxC3M,MAAO,KACPtB,OAAQ,KACRyO,QAAS,YACTI,KAAM,OACNF,MAAO,8BACNH,GAAQzJ,IAAAA,cAAoB,OAAQ,CACrCN,GAAI,iBACJqc,SAAU,QACVC,UAAW,iBACXzY,EAAG,IACHiB,EAAG,IACHjI,MAAO,KACPtB,OAAQ,MACP+E,IAAAA,cAAoB,OAAQ,CAC7B+J,SAAU,UACVkS,SAAU,UACVvV,EAAG,4JACHoD,KAAM,UACH9J,IAAAA,cAAoB,IAAK,CAC5BkK,KAAM,wBACLlK,IAAAA,cAAoB,OAAQ,CAC7BiK,YAAa,MACbH,KAAM,OACNpD,EAAG,qBC1BQwV,GAAoBC,IAC7BC,QAAQD,MAAMA,GACdE,EAAAA,EAAAA,SAAoB,CAChBjb,MAAOyH,IAAAA,KAAU,SACjByT,SAASC,EAAAA,EAAAA,KAAuBJ,EAAOtT,IAAAA,KAAU,4B,wCCRzD,SAASK,KAA2Q,OAA9PA,GAAWC,OAAOC,QAAU,SAAUtG,GAAU,IAAK,IAAIyB,EAAI,EAAGA,EAAI4C,UAAU/D,OAAQmB,IAAK,CAAE,IAAI3B,EAASuE,UAAU5C,GAAI,IAAK,IAAI1E,KAAO+C,EAAcuG,OAAOE,UAAUC,eAAeC,KAAK3G,EAAQ/C,KAAQiD,EAAOjD,GAAO+C,EAAO/C,IAAY,OAAOiD,GAAkBoG,GAASM,MAAM9D,KAAMyB,WAGhT,SAAgB,QAAC,OACfhL,EAAS,IADK,EAEXsN,E,kXAFW,sBAGVzJ,IAAAA,cAAoB,MAAOkJ,GAAS,CACxC3M,MAAO,KACPtB,OAAQ,KACRyO,QAAS,YACTI,KAAM,OACNF,MAAO,8BACNH,GAAQzJ,IAAAA,cAAoB,SAAU,CACvCwc,GAAI,KACJC,GAAI,KACJC,EAAG,KACH5S,KAAM,UACNG,YAAa,OACXjK,IAAAA,cAAoB,OAAQ,CAC9BN,GAAI,gBACJid,MAAO,CACLC,SAAU,SAEZZ,UAAW,iBACXzY,EAAG,IACHiB,EAAG,IACHjI,MAAO,KACPtB,OAAQ,MACP+E,IAAAA,cAAoB,SAAU,CAC/Bwc,GAAI,KACJC,GAAI,KACJC,EAAG,KACH5S,KAAM,UACH9J,IAAAA,cAAoB,IAAK,CAC5BkK,KAAM,uBACLlK,IAAAA,cAAoB,OAAQ,CAC7B+J,SAAU,UACVkS,SAAU,UACVvV,EAAG,iCACHoD,KAAM,wBACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,MACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,sEACHoD,KAAM,wBACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,MACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,+IACHoD,KAAM,SACJ9J,IAAAA,cAAoB,OAAQ,CAC9B+J,SAAU,UACVkS,SAAU,UACVvV,EAAG,kKACHoD,KAAM,SACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,iHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,iHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,+GACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,+GACHoD,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,SAAU,CAChCwc,GAAI,SACJC,GAAI,SACJC,EAAG,QACH5S,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,iHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gHACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,kFACHoD,KAAM,YACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,MACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,gDACHoD,KAAM,SACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,4IACHoD,KAAM,SACJ9J,IAAAA,cAAoB,OAAQ,CAC9BgM,QAAS,KACTjC,SAAU,UACVkS,SAAU,UACVvV,EAAG,oMACHoD,KAAM,aACH9J,IAAAA,cAAoB,OAAQ,KAAMA,IAAAA,cAAoB,iBAAkB,CAC3EN,GAAI,gBACJmH,GAAI,SACJhC,GAAI,QACJmC,GAAI,SACJ6V,GAAI,KACJC,cAAe,kBACd9c,IAAAA,cAAoB,OAAQ,CAC7B+c,UAAW,UACXC,YAAa,QACXhd,IAAAA,cAAoB,OAAQ,CAC9Bid,OAAQ,IACRF,UAAW,aACR/c,IAAAA,cAAoB,iBAAkB,CACzCN,GAAI,gBACJmH,GAAI,SACJhC,GAAI,SACJmC,GAAI,SACJ6V,GAAI,QACJC,cAAe,kBACd9c,IAAAA,cAAoB,OAAQ,CAC7Bgd,YAAa,QACXhd,IAAAA,cAAoB,OAAQ,CAC9Bid,OAAQ,UChMGpiB,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCwS,KAAM,CACFzV,OAAQ,OACRU,SAAU,SACV6C,WAAYN,EAAMK,QAAQC,WAAW0e,QACrCzhB,QAAS,OACTC,cAAe,SACfuD,WAAY,SACZZ,WAAY,SAEhB8e,KAAM,CACFte,MAAOX,EAAMK,QAAQa,KAAKC,UAC1BwI,SAAU,OACVC,WAAY,OACZgK,UAAW,YCGnB,GAbmB,KACf,MAAM3V,EAAStB,KAEf,OACI,yBAAKuC,UAAWjB,EAAOuU,MACnB,kBAAC,GAAD,MACA,0BAAMtT,UAAWjB,EAAOghB,MACnBtU,IAAAA,KAAU,gE,4BCXpB,MAAMhO,IAAYC,EAAAA,EAAAA,YAAW,CAChCsiB,gBAAiB,CACb3hB,QAAS,OACTwD,WAAY,UAEhBoe,aAAc,CACV1M,aAAc,MC6BtB,GApB2B,IAA8B,IAA7B,OAAC3F,EAAD,QAASsR,GAAoB,EACrD,MAAMngB,EAAStB,KACTyiB,GAASvK,EAAAA,EAAAA,aAAYsH,EAAAA,GAAAA,UAAAA,YACrB,kBAACkD,IAAqBrd,EAAAA,EAAAA,YAAWsd,GAAAA,GACjCC,EAAaF,EAAkB,CAACD,OAAAA,EAAQ9N,IAAKxE,EAAOwE,MAE1D,OACI,yBAAKpS,UAAWjB,EAAOihB,iBACnB,kBAAC/E,EAAA,EAAD,CAAUjb,UAAWjB,EAAOkhB,eAC5B,kBAAChM,EAAA,EAAD,MACKyK,EAAAA,EAAAA,KAAS9Q,EAAOD,OAAQ,IACzB,kBAAC,KAAD,CAAM2S,KAAMD,EAAY3a,OAAO,SAAS6a,UAAU,SAC7C9U,IAAAA,KAAU,mBACP,IACPyT,K,4BC7BV,MAAMzhB,IAAYC,EAAAA,EAAAA,aAAYoD,IAAD,CAChCwS,KAAM,CACFjV,QAAS,OACTC,cAAe,SACfuD,WAAY,aACZZ,WAAY,OACZuf,cAAe,OACf5c,aAAc,gCACd6c,WAAY,SACZ,eAAgB,CACZ7c,aAAc,SAGtB+J,MAAO,CACH/C,aAAc,MACdH,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAK/B,SAE9BygB,YAAa,CACTjW,SAAU,OACVC,WAAY,OACZjJ,MAAOX,EAAMK,QAAQa,KAAKC,e,mNCV3B,MAAM0e,GAAgB,IAAyC,IAAxC,SAACC,EAAD,WAAWC,EAAX,KAAuBpc,GAAiB,EAClE,MAAM1F,EAAStB,MACT,MAACkQ,EAAD,YAAQ+S,GAAejc,EAE7B,OACI,kBAACqc,GAAA,EAAD,IAAU9gB,UAAWjB,EAAOuU,KAAM3E,IAAKiS,GAAcC,GACjD,kBAAC5M,EAAA,EAAD,CAAYjU,UAAWjB,EAAO4O,OAAQA,GACrC+S,GAAe,kBAACzM,EAAA,EAAD,CAAYjU,UAAWjB,EAAO2hB,aAAcA,K,yHClBjE,MAAMK,GACT1U,IAEA,MAAM,SAACuU,EAAD,UAAWI,EAAX,SAAsBriB,GAAY0N,EAClCtN,E,+UAAS,IAAIiiB,EAAU,WAAY3U,GAA7B,CAAqC4U,UAAW,QAAStd,QAAS,IAC9E,OACI,yBAAKgL,IAAKiS,EAAUrB,MAAOxgB,GACtBJ,ICRAlB,IAAYC,EAAAA,EAAAA,YAAW,CAChC4V,KAAM,CACFnU,MAAO,W,yHCWR,MAAM+hB,GAAmB,IAAwE,IAAvE,mBAACC,EAAD,4BAAqBC,EAArB,SAAkD9gB,GAAqB,EACpG,MAAMvB,EAAStB,KACT4jB,EAAUF,EAAmB9e,KAAKif,G,+UAAD,IAAgBA,EAAhB,CAAuB3T,OAAO+Q,EAAAA,EAAAA,KAAS4C,EAAM3T,WAC9E/H,EAAQyb,EAAQtL,MAAKwL,EAAAA,EAAAA,QAAO,MAAOH,IACzC,OACI,kBAACI,GAAA,EAAD,CACI3jB,OAAQ,GACRmC,UAAWjB,EAAOuU,KAClBmO,WAAY,CAACC,OAAQf,GAAegB,SAAUZ,IAC9CpT,MAAOlC,IAAAA,KAAU,YACjB4V,QAASA,EACTzb,MAAOA,EACPtF,UAAUgE,EAAAA,EAAAA,OAAKC,EAAAA,EAAAA,MAAK,OAAQjE,MCzB3B7C,IAAYC,EAAAA,EAAAA,YAAW,CAChCkkB,YAAa,CACT5jB,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRwZ,UAAW,SACXD,UAAW,OACXkK,WAAY,uCACZxjB,QAAS,QAEb,4BAA6B,CACzBwjB,WAAY,wCAEhB,iCAAkC,CAC9BA,WAAY,wCAEhBlkB,sBAAuB,CACnBC,SAAU,EACVC,OAAQ,QAEZE,KAAM,CACFC,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,QAAS,OACTC,cAAe,SACfC,SAAU,UAEdujB,cAAe,CACXtO,WAAY,OACZ1V,YAAa,MACbD,OAAQ,OACRkkB,YAAa,uBAEjBC,gBAAiB,CACb9gB,gBAAiB,UCanBxC,GAAgB,S,IAYjBujB,I,SAAAA,GAAAA,EAAAA,EAAAA,OAAAA,GAAAA,SAAAA,EAAAA,EAAAA,QAAAA,GAAAA,U,CAAAA,KAAAA,GAAAA,KAKL,MAyPA,IAAeC,EAAAA,EAAAA,UARUC,IACd,CACHvU,OAAQqP,EAAAA,GAAAA,UAAAA,UAA8BkF,GACtCnF,SAAUC,EAAAA,GAAAA,UAAAA,YAAgCkF,GAC1CC,aAAcnF,EAAAA,GAAAA,UAAAA,gBAAoCkF,MAI1D,EAzPoB,IAQP,IARQ,OACjBE,EACAzU,OAAQ0U,EAFS,SAGjBtF,EAHiB,cAIjBha,EAJiB,UAKjBuf,EALiB,SAMjBC,EANiB,aAOjBJ,GACS,EACT,MAAMrjB,EAAStB,MACRof,EAAY4F,IAAiBtf,EAAAA,EAAAA,UAASgB,EAAW6Z,YACjD0E,EAAwBC,IAA6Bxf,EAAAA,EAAAA,WAAS,IAE/D,mBACFge,EADE,4BAEFC,EAFE,0BAGFwB,EAHE,OAIFhV,EAJE,8BAKFiV,EACAC,UAAWC,GCnF6BT,CAAAA,IAC5C,MAAMU,EAAgBV,MAAAA,OAAH,EAAGA,EAAetM,KAC/BgH,GAAWrH,EAAAA,EAAAA,aAAYsH,EAAAA,GAAAA,UAAAA,aACvBkE,GAAqB7c,EAAAA,EAAAA,OAAK4Y,EAAAA,EAAAA,KAAcF,IAAW/G,EAAAA,EAAAA,QAAO,GAAI,sBAAzC3R,CAAgE0e,GACrFC,GAA8B3e,EAAAA,EAAAA,OAAKyR,EAAAA,EAAAA,OAAKwL,EAAAA,EAAAA,QAAO,WAAW,KAAQhd,EAAAA,EAAAA,MAAK,OAAzCD,CAAiD6c,IAC9EC,EAA6B8B,IAAkC/f,EAAAA,EAAAA,UAAS,OACxEyK,EAAQuV,IAAahgB,EAAAA,EAAAA,UAAS,OAC9B2f,EAAWM,IAAgBjgB,EAAAA,EAAAA,WAAS,GACrCkgB,GAAcC,EAAAA,GAAAA,KA2BpB,OAzBAhgB,EAAAA,EAAAA,YAAU,KACFgf,IACAa,EAAUb,GACVY,EAA+BD,MAEpC,CAACX,EAAeW,IAoBZ,CACH9B,mBAAAA,EACAC,4BAAAA,EACAwB,2BArB8BpjB,EAAAA,EAAAA,cAC7B+jB,IACGL,EAA+BK,GACON,IAAgCM,EAOlEJ,EAAUb,IALVc,GAAa,GACbC,GAAYG,EAAAA,EAAAA,KAAgC5V,EAAOwE,IAAKmR,IACnDhgB,KAAK4f,GACLM,SAAQ,IAAML,GAAa,QAKxC,CAACd,EAAeW,EAA6BrV,EAAQyV,IASrDzV,OAAAA,EACAkV,UAAAA,EACAD,8BARkCI,IAAgC7B,IDmDlEsC,CAAgCpB,IAE9B,iBAACqB,EAAD,mBAAmBC,IAAsBC,EAAAA,EAAAA,GAAkB,CAC7DnlB,cAAAA,GACAkP,OAAAA,EACAkW,gBAAiB7B,GAAY8B,UAG3BC,EAAkBJ,EAAqBhW,EAAS,KAEhD6L,EAAYuK,MAAAA,OAAH,EAAGA,EAAiB5R,IAC7B2F,GAAamF,EAAAA,EAAAA,KAAcF,EAAUpP,MAAAA,OAAX,EAAWA,EAAQoI,OAE7C,aAACiO,IAAgBC,EAAAA,EAAAA,GAAgB,CAACtW,OAAQoW,EAAiB5B,aAAAA,KAE1D+B,GAAmBC,KAAwBjhB,EAAAA,EAAAA,aAClDkhB,EAAAA,EAAAA,IAAmB,KACfD,QAAqBE,KACtB,CAACL,KACJI,EAAAA,EAAAA,IAAmB,KACfD,QAAqBE,KACtB,CAAC7K,IAEJ,MAAM,iBAAC8K,GAAD,oBAAmBC,KAAuBC,EAAAA,EAAAA,GAAY,CACxDpV,aAAc,CAACC,SAAU,MAAOC,WAAY,UAC5CmV,aAAa,KAEX,SAACzhB,GAAD,WAAWG,KAAcL,EAAAA,EAAAA,GAAiCC,IACzD2hB,GAAgBC,KAAqBzhB,EAAAA,EAAAA,aAC5CG,EAAAA,EAAAA,YAAU,KACFL,IACA2hB,GAAkBxhB,GAAWuhB,kBAElC,CAAC1hB,MACJK,EAAAA,EAAAA,YAAU,KACN,MAAMuhB,IAA4BC,EAAAA,EAAAA,QAAOH,GAAgBvhB,GAAWuhB,gBAChE1hB,IAAY4hB,GACZtC,EAAU,CAACoC,eAAAA,OAEhB,CAACA,KAEJ,MAAMI,IAAwBvlB,EAAAA,EAAAA,cAAY,KACtCmjB,GAA0B,KAC3B,KAEG,cAAC9P,GAAemS,OAAQC,IE/HF,KAA0C,IAAzC,UAACxL,EAAD,UAAYyL,EAAYnW,EAAAA,IAAiB,EACtE,MAAO8D,EAAesS,IAAoBhiB,EAAAA,EAAAA,UAAwB,MAC5DkgB,GAAcC,EAAAA,GAAAA,KAEd8B,EAAWpW,IACbgQ,QAAQqG,KAAK,gCAAiCrW,GAC9CmW,EAAiB,OAGfG,GAAW9lB,EAAAA,EAAAA,cAAY,KACrBia,EACA4J,GAAYkC,EAAAA,EAAAA,KAAiB,CAAC9L,UAAAA,KACzBlW,MAAMiiB,IACHL,EAAiBK,MAEpB/hB,MAAM2hB,GACN3B,QAAQyB,IAEbC,EAAiB,MACjBD,OAEL,CAACzL,EAAWyL,IAMf,OAJA5hB,EAAAA,EAAAA,YAAU,KACNgiB,MACD,CAACA,IAEG,CAACzS,cAAAA,EAAemS,OAAQM,IFoGsBG,CAAiB,CAClEhM,WAAWwK,MAAAA,OAAA,EAAAA,EAAcyB,QAAQtT,MAAOqH,EACxCyL,UAAWH,KAET/M,IAAetT,EAAAA,EAAAA,UAAQ,KAAMihB,EAAAA,EAAAA,KAA4B9S,KAAgB,CAACA,KAE1E+S,IAAgBpmB,EAAAA,EAAAA,cAAY,KAC9Bia,GACI+I,EACIqD,EAAAA,GAAAA,OAAAA,QAAAA,WAAkC,CAC9BC,OAAQzD,EAAO/f,GACf8P,IAAKqH,OAGlB,CAACA,EAAW4I,EAAQG,IAEjBuD,IAAcvmB,EAAAA,EAAAA,cAAY8E,EAAAA,EAAAA,MAAKshB,GAAeX,IAAsB,CAACW,GAAeX,MAEpF,eACFe,GADE,cAEFC,GAFE,uBAGFC,GAHE,kBAIFC,GAJE,eAKFC,GALE,kBAMFC,GANE,gBAOFC,GAPE,eAQFC,GARE,uBASFC,KACAC,EAAAA,EAAAA,GAAkB,CAClB7Y,QAAQqW,MAAAA,OAAA,EAAAA,EAAcyB,UAAW1B,EACjC0C,SAAUX,GACVX,QAAStG,KAGP6H,GGpJ0B,KAA+C,IAA9C,WAAC9J,EAAD,aAAa7E,EAAb,OAA2BpK,GAAmB,EAC/E,MAAMgZ,GAAiCpnB,EAAAA,EAAAA,cAClC2I,IAA6B,MAC1B,OAAQ0U,GACJ,KAAK1Y,EAAW8Z,OACZ,OAAO4I,EAAAA,EAAAA,KAAe1e,EAAU6N,MACpC,KAAK7R,EAAW+Z,YACZ,OAAOzI,EAAAA,EAAAA,MAAoB,WAAAqR,EAAAA,EAAAA,KAA4B9O,EAAc7P,UAA1C,eAAsDiK,MAAO,IAC5F,KAAKjO,EAAW6Z,UACZ,OAAOlD,EAAAA,EAAAA,MAAkBE,EAAAA,EAAAA,KAAe7S,OAGpD,CAAC0U,EAAY7E,KAEV+O,EAAuBC,IAA4B7jB,EAAAA,EAAAA,UAA0B,IAC9E8jB,GAA6BxZ,EAAAA,EAAAA,QAAO,IACpCyZ,GAA6B1nB,EAAAA,EAAAA,cAC/B2nB,EAAAA,EAAAA,MAAS,KACLH,EAAyB,IAAIC,EAA2BxY,YACzD,IACH,IAEE2Y,GAA6B5nB,EAAAA,EAAAA,cAC9B6nB,IACGJ,EAA2BxY,QAAU4Y,EACrCH,EAA2BG,KAE/B,CAACH,IAGCI,GAA0B9nB,EAAAA,EAAAA,cAC5B,CAAC2I,EAA0Bof,KACvB,GAAKpf,EACL,GAAIof,EACA,GAAI1K,IAAe1Y,EAAW+Z,YAAa,CACvC,MAAMtF,GAAckO,EAAAA,EAAAA,KAA4B9O,EAAc7P,GAC9Dif,EAA2B,CAACjf,MAAeyQ,MAAAA,OAAA,EAAAA,EAAa/K,aAAc,UAEtEuZ,EAA2B,CAACjf,SAGhCif,EAA2B,MAGnC,CAACvK,EAAYuK,EAA4BpP,KAGtCwP,EAAmBC,IAAwBtkB,EAAAA,EAAAA,UAA0B,IACtEukB,GAA6BloB,EAAAA,EAAAA,cAC/B,CAACmoB,EAAuBC,KACpB/f,EAAAA,EAAAA,QACI8f,EAAKhf,QAAQkf,KAAmBC,EAAAA,EAAAA,MAAItW,EAAAA,EAAAA,KAAaqW,GAAgBD,KACjEA,EAAKjf,QAAQof,KAAmBD,EAAAA,EAAAA,MAAItW,EAAAA,EAAAA,KAAauW,GAAgBJ,OAEzE,IAEEhR,GAAuBnX,EAAAA,EAAAA,cACxB2I,IACG,GAAKA,EACL,GAAI0U,IAAe1Y,EAAW+Z,YAAa,CACvC,MAAMtF,GAAckO,EAAAA,EAAAA,KAA4B9O,EAAc7P,GAC9Dsf,GAAsBO,GAClBN,EAA2B,CAACvf,MAAeyQ,MAAAA,OAAA,EAAAA,EAAa/K,aAAc,IAAMma,UAGhFP,GAAsBO,GAAcN,EAA2B,CAACvf,GAAY6f,OAGpF,CAACnL,EAAY6K,EAA4B1P,IAS7C,OANA1U,EAAAA,EAAAA,YAAU,KACFkkB,EAAkBxhB,QAClByhB,EAAqB,MAE1B,CAAC5K,EAAYjP,IAET,CACHkN,kBAAmB8L,EACnBG,uBAAuBriB,EAAAA,EAAAA,UACnB,IAAM,IAAIqiB,KAA0BS,IACpC,CAACT,EAAuBS,IAE5BA,kBAAAA,EACA7Q,qBAAAA,EACA2Q,wBAAAA,IH+DiBW,CAAqB,CAACpL,WAAAA,EAAY7E,aAAAA,GAAcpK,OAAAA,IAC/Dsa,IAAgB1oB,EAAAA,EAAAA,cAAY,CAAC0f,EAAiBtR,KAChD4W,GAAoB5W,EAAS,kBAAC,GAAD,CAAoBA,OAAQA,EAAQsR,QAASA,IAAcA,KACzF,KAEG,aAACiJ,GAAD,gBAAeC,GAAf,cAAgCC,GAAhC,mBAA+CC,GAA/C,uBAAmEC,II3JtC,KAK1B,IAL2B,OACpCC,EAASzZ,EAAAA,GAD2B,UAEpCmW,EAAYnW,EAAAA,GAFwB,QAGpCqW,EAAUrW,EAAAA,GAH0B,cAIpCmZ,EAAgBnZ,EAAAA,IACP,EACT,MAAM,aAACoZ,EAAD,cAAeE,EAAf,gBAA8BD,IAAmBK,EAAAA,GAAAA,GAAoB,CAACD,OAAAA,EAAQtD,UAAAA,EAAWE,QAAAA,IACzFsD,GAAW/S,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvB+S,GAAShT,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WAErBgT,GAAeppB,EAAAA,EAAAA,cAChBqpB,IACGL,IACAK,EACKtlB,MAAK,KACF2hB,OAEHzhB,MAAM2hB,KAEf,CAACoD,EAAQpD,EAASF,IAoCtB,MAAO,CACHiD,aAAAA,EACAE,cAAAA,EACAD,gBAAAA,EACAE,oBArCuB9oB,EAAAA,EAAAA,cACtBoR,IACGtM,EAAAA,EAAAA,MACIwkB,EAAAA,KACAC,EAAAA,EAAAA,UAASC,IACLd,EAAczc,IAAAA,KAAU,qBAAsBud,EAASniB,GAChDmiB,KAEXJ,EANJtkB,CAOEsM,IACN,CAACgY,EAAcV,IA4BfK,wBAzB2B/oB,EAAAA,EAAAA,cAC3B,QAAC,UAAC2I,EAAD,WAAY+O,GAAb,SACI5S,EAAAA,EAAAA,MACI2kB,EAAAA,KACAF,EAAAA,EAAAA,UAASC,IACL,IAAKA,EAASE,WAAY,MAAM,IAAIC,MAAM1d,IAAAA,KAAU,sCACpD,OAAOud,KAEXJ,EANJtkB,CAOE,CACEokB,SAAAA,EACA9iB,MAAOuC,EAAUvC,MACjBoQ,KAAM7N,EAAU6N,KAChBoT,YAAajhB,EAAUihB,YACvBlS,WAAYA,EAAW5U,GACvB+mB,eAAgBV,MAExB,CAACC,EAAcF,EAAUC,MJwGzBW,CAAwB,CACpBpB,cAAAA,GACAhD,UAAWa,GACXX,SAAS5lB,EAAAA,EAAAA,cACJuf,IACGD,GAAiBC,GACbA,EAAMwK,YAAcC,EAAAA,IAAAA,qBACpBzD,OAGR,CAACA,KAELyC,QAAQhpB,EAAAA,EAAAA,cAAY,IAAMmjB,GAA0B,IAAO,OAG7D,cACF8G,GADE,cAEFC,GACA5G,UAAW6G,GAHT,aAIFC,GAJE,iBAKFC,GALE,YAMFC,GANE,WAOFC,KACAC,EAAAA,EAAAA,IAAW,CAACpc,OAAQoW,EAAiBiG,QAAStG,IAE5C5f,GAAO,CACT,CACIxB,YAAa,CACTD,GAAI2f,GAAYiI,OAChBjmB,KAAMkmB,GACN5f,aAAckB,IAAAA,KAAU,WAE5BzH,MAAO,kBAACiQ,EAAA,EAAD,CAAYC,QAAQ,MAAMzI,IAAAA,KAAU,WAC3C/J,QACI,kBAAC,GAAD,CACImb,WAAYA,EACZC,aAAc2F,EACd7U,QAAQqW,MAAAA,OAAA,EAAAA,EAAcyB,UAAW1B,EACjCnR,cAAeA,GACfmF,aAAcA,GACdC,uBAAwBkM,GACxBhM,WAAY8L,GAAgBvB,EAC5BtK,eAAgB+P,GAChB5P,qBAAsB+P,GACtB9S,yBAA0B+S,GAC1BlQ,gBAAiBgQ,GACjB/P,kBAAmB8P,MAI/B,CACI7lB,YAAa,CACTD,GAAI2f,GAAY8B,QAChB9f,KAAMmmB,EAAAA,EACN7f,aAAckB,IAAAA,KAAU,YAE5BzH,MACI,kBAACqmB,EAAA,EAAD,CACIC,QAAQV,MAAAA,QAAA,EAAAA,GAAc5jB,SAAU,GAAK,EACrC+R,WAAYA,EACZpP,OAAQ8gB,GACRC,cAAeA,KAGvBhoB,QAASkiB,EACL,kBAAC2G,EAAA,EAAD,CACIzH,UAAW6G,GACXE,iBAAkBA,GAClBW,iBAAkBZ,GAClBnQ,UAAWA,EACX2I,aAAcA,EACd2H,WAAYA,GACZD,YAAaA,KAGjB,kBAACW,EAAA,EAAD,QAINC,GACF,oCACI,kBAACxJ,GAAD,CACIC,mBAAoBA,EACpBC,4BAA6BA,EAC7B9gB,SAAUsiB,IAEd,kBAAC+H,EAAA,EAAD,CAAS3qB,UAAWjB,EAAO+iB,cAAe5hB,YAAY,cAI9D,OACI,yBAAKF,UAAWjB,EAAO6iB,aACnB,kBAAC,KAA8B+E,GAC3B,kBAAC,GAAAiE,YAAD,CAAaC,QAASC,GAAAA,SAClB,kBAACC,EAAA,EAAD,MACA,kBAACtsB,EAAA,EAAD,CACIC,cAAeA,GACfE,cAAc0F,EAAAA,EAAAA,OAAK0mB,EAAAA,EAAAA,SAAOzJ,EAAAA,EAAAA,QAAO,UAAU,KAAQ9K,EAAAA,EAAAA,OAAM,eAA3CnS,CAA2DP,KAEzE,oCACI,kBAACknB,EAAA,EAAD,CAAmBrd,OAAQA,EAAQqW,aAAcA,IAChDL,EACG,kBAAC,IAAD,CAA4BsH,cAAehF,IACvC,kBAACiF,EAAA,EAAD,CACInrB,UAAWjB,EAAOijB,gBAClBc,UAAWC,EACX4B,eAAgBA,GAChByG,uBAAwBxG,GACxBhX,OAAQoY,GACRC,cAAeA,GACfhO,uBAAwBkM,GACxBkH,uBAAwBjH,GACxBjM,WAAY8L,IAAiBpB,EAC7BxN,SAAU8Q,GACVmF,MAAOlF,GACPmF,SAAUlF,GACVjR,OAAQkR,GACRhR,MAAOiR,GACPC,uBAAwBA,GACxBkE,sBAAuBA,GACvBc,2BAA4BpK,KAIpC,kBAAC,GAAD,OAGR,kBAACtd,EAAD,CAAgBC,KAAMA,QAIlC,kBAACwgB,GAAD,UKrSNkH,IAAoBC,EAAAA,EAAAA,GAAwB,CAC9CC,iBAAkB,qBAClBC,eAAe,EACfC,KAAM,SCfV,GD0B2B,IAAgE,IAA/D,OAACxJ,EAAD,MAASyJ,EAAT,SAAgBC,EAAhB,UAA0BxJ,EAA1B,cAAqCvf,GAA0B,EACvF,MAAMgpB,GAA6DxsB,EAAAA,EAAAA,cAAYysB,EAAAA,EAAAA,KAAkBjpB,GAAgB,CAC7GA,IAEJ,OACI,kBAAC,EAAAkpB,SAAD,CAAUJ,MAAOA,GACb,kBAACK,EAAA,WAAD,CAAwBvmB,MAAOyc,EAAO/f,IAClC,kBAAC8pB,EAAA,GAAD,CAAgBX,kBAAmBA,IAC/B,kBAACY,EAAA,EAAD,CAAsBC,YAAaC,EAAAA,GAC/B,kBAAC,IAAD,CACIlZ,cAAY,EACZ0Y,SAAU,CAAC5sB,EAAOtB,IAAWkuB,MAAAA,OAAnB,EAAmBA,EAAWlmB,KAAK2mB,MAAMrtB,GAAQ0G,KAAK2mB,MAAM3uB,MAEzEwkB,GACG,kBAAC,GAAD,CACIA,OAAQA,EACRE,UAAWA,EACXvf,cAAegpB,IAGvB,kBAAC/M,EAAA,EAAD","sources":["webpack://@reltio/remotes/../components/src/components/ProfileResizablePanes/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileResizablePanes/ProfileResizablePanes.tsx","webpack://@reltio/remotes/../components/src/components/SideIconPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/SideButtonsPanel.tsx","webpack://@reltio/remotes/../components/src/contexts/PerspectivesSettingsContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../sources/src/types/LegendMode.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/sankey.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/useSankey.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/styles.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/MergeTooltip.tsx","webpack://@reltio/remotes/../sources/src/icons/notMatch.svg","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Node.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Link.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/SankeyChart.tsx","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/helpers.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/styles.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/CrosswalkTreeView.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/ContributorRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/LegendTableRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTable.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/helpers.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/styles.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/SelectableTree.tsx","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/UnmergeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/UnsubscribeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/LegendView/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendView/LegendView.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/icons/LegendIcon.svg","webpack://@reltio/remotes/../sources/src/services/errors.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/icons/EmptySources.svg","webpack://@reltio/remotes/../sources/src/components/EmptyState/styles.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/EmptyState.tsx","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/styles.ts","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/TreeActionSnackbar.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/RulesetOption.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetsMenuList/RulesetsMenuList.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesestsSelector.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/styles.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/SourcesView.tsx","webpack://@reltio/remotes/../sources/src/hooks/useEntityWithSurvivorshipGroups.tsx","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTree.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalksDisplay.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTreeActions.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/index.tsx","webpack://@reltio/remotes/./src/sources.ts"],"sourcesContent":["import {makeStyles} from '@mui/styles';\n\nconst useStyles = makeStyles(() => ({\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%',\n marginRight: '1px'\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n }\n}));\n\nexport {useStyles};\n","import React, {useCallback, cloneElement} from 'react';\nimport {ResizablePanes} from '../ResizablePanes/ResizablePanes';\nimport {SideButtonsPanel} from '../SideIconPanel/SideButtonsPanel';\nimport {usePerspectivesSettings} from '../../contexts';\nimport {isNil} from 'ramda';\n\nimport {useStyles} from './styles';\nimport {RightPanelTab} from '../../types';\n\nconst DEFAULT_R_PANE_SIZE = 480;\nconst MIN_R_PANE_SIZE = 320;\nconst MAX_R_PANE_SIZE = 640;\n\ntype Props = {\n perspectiveId: string;\n children: [React.ReactElement, React.ReactElement];\n buttonsProps: Array<RightPanelTab['buttonProps']>;\n disabled?: boolean;\n defaultTab?: number;\n};\n\nexport const ProfileResizablePanes = ({perspectiveId, children, buttonsProps, disabled, defaultTab}: Props) => {\n const styles = useStyles();\n\n const {perspectiveSettings, updatePerspectiveSettings} = usePerspectivesSettings(perspectiveId);\n const {width = DEFAULT_R_PANE_SIZE} = perspectiveSettings || {};\n const active = defaultTab || perspectiveSettings?.active;\n const isSidePanelOpen = !isNil(active) && !disabled;\n\n const handleUpdateSettings = useCallback(\n (newSetting) => {\n updatePerspectiveSettings(newSetting);\n },\n [updatePerspectiveSettings]\n );\n\n const toggleActive = useCallback(\n (newId: number) => {\n const newActive = active === newId ? null : newId;\n handleUpdateSettings({active: newActive});\n },\n [active, handleUpdateSettings]\n );\n\n const resetActive = useCallback((): void => {\n handleUpdateSettings({active: null});\n }, [handleUpdateSettings]);\n\n const handlePaneSizeChange = useCallback(\n ({size}) => {\n handleUpdateSettings({width: size});\n },\n [handleUpdateSettings]\n );\n\n return (\n <>\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n primary=\"second\"\n orientation=\"vertical\"\n size={isSidePanelOpen ? width : 0}\n minSize={MIN_R_PANE_SIZE}\n maxSize={MAX_R_PANE_SIZE}\n allowResize={isSidePanelOpen}\n onChange={handlePaneSizeChange}\n debounceInterval={2500}\n >\n <div className={styles.pane}>{children[0]}</div>\n <div className={styles.pane}>{cloneElement(children[1], {active, onClose: resetActive})}</div>\n </ResizablePanes>\n <SideButtonsPanel\n disabled={disabled}\n buttonsProps={buttonsProps}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </>\n );\n};\n\nProfileResizablePanes.displayName = 'ProfileResizablePanes';\n","import {alpha} from '@mui/material/styles';\n\nimport {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: '64px',\n paddingTop: '8px',\n backgroundColor: theme.palette.background.paper,\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)'\n },\n active: {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n color: theme.palette.primary.main,\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n height: '42px',\n width: '3px',\n backgroundColor: theme.palette.primary.main,\n left: '-8px',\n borderRadius: '0 6px 6px 0'\n }\n },\n buttonWrapper: {\n position: 'relative',\n width: '48px',\n height: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n margin: '2px 8px',\n color: theme.palette.text.secondary\n }\n}));\n","import React, {ElementType} from 'react';\nimport classnames from 'classnames';\nimport {IconButtonProps} from '@mui/material/IconButton';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n disabled: boolean;\n buttonsProps: Array<{\n icon: ElementType;\n tooltipTitle: string;\n id: number;\n }>;\n classes?: {active?: string; buttonWrapper?: string} & IconButtonProps['classes'];\n activeIndexId: number;\n className?: string;\n onButtonClick: (id: number) => void;\n};\n\nexport const SideButtonsPanel = ({\n disabled,\n buttonsProps,\n activeIndexId,\n className,\n onButtonClick,\n classes = {}\n}: Props) => {\n const styles = useStyles();\n const {active, buttonWrapper, ...iconButtonClasses} = classes;\n\n return (\n <div className={classnames(styles.container, className)}>\n {buttonsProps.map(({id, ...buttonProps}) => {\n return (\n <SmallIconButtonWithTooltip\n {...buttonProps}\n disabled={disabled}\n classes={iconButtonClasses}\n size=\"S\"\n key={id}\n className={classnames(\n {[classnames(styles.active, active)]: activeIndexId === id},\n styles.buttonWrapper,\n buttonWrapper\n )}\n onClick={() => onButtonClick(id)}\n data-reltio-id={`reltio-profile-right-side-button-${id}`}\n />\n );\n })}\n </div>\n );\n};\n","import React, {useCallback, useContext} from 'react';\nimport {PerspectivesSettings, PerspectiveSettingItem} from '../../types';\n\ntype PerspectivesSettingsProps = {\n settings: PerspectivesSettings;\n onChange: (perspectiveId: string, newSetting: Partial<PerspectiveSettingItem>) => void;\n};\n\nexport const PerspectivesSettingsContext = React.createContext<PerspectivesSettingsProps>({\n settings: {},\n onChange: () => {}\n});\n\nPerspectivesSettingsContext.displayName = 'PerspectivesSettingsContext';\n\nexport const usePerspectivesSettings = (perspectiveId: string) => {\n const {settings, onChange} = useContext(PerspectivesSettingsContext) || {};\n const perspectiveSettings = settings?.[perspectiveId];\n\n const updatePerspectiveSettings = useCallback(\n (newSetting: Partial<PerspectiveSettingItem>) => {\n onChange(perspectiveId, newSetting);\n },\n [perspectiveId, onChange]\n );\n\n return {updatePerspectiveSettings, perspectiveSettings};\n};\n","import {useEffect, useState} from 'react';\n\nexport const useSavedState = <T>(getSavedState: () => Promise<T>) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [savedState, setSavedState] = useState<T | Record<string, never>>({});\n\n useEffect(() => {\n getSavedState()\n .then((savedState) => {\n setSavedState(savedState || {});\n })\n .then((_) => setIsLoaded(true))\n .catch((_) => setIsLoaded(true));\n }, []); // eslint-disable-line\n\n return {isLoaded, savedState};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '16px 12px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12);'\n },\n closeButton: {\n marginRight: '12px'\n }\n});\n","import React from 'react';\nimport CloseIcon from '@mui/icons-material/Close';\nimport {RightPanelTab, SmallIconButton} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClose?: () => void;\n active?: number;\n tabs: RightPanelTab[];\n};\n\nexport const RightSidePanel = ({active, onClose, tabs}: Props) => {\n const styles = useStyles();\n const {content, title} = tabs[active] || {};\n\n return (\n <>\n <div className={styles.header}>\n <SmallIconButton className={styles.closeButton} icon={CloseIcon} onClick={onClose} />\n {title}\n </div>\n {content}\n </>\n );\n};\n","export enum LegendMode {\n Crosswalk = 'crosswalks',\n Source = 'source',\n Contributor = 'contributor'\n}\n","import {sum, map, pipe, groupBy, toPairs, sort, nth, prop, reduce, last} from 'ramda';\nimport {SankeyLink, SankeyData} from '../../types/SankeyChartData';\n\nconst sumValues = (links: SankeyLink[]): number => pipe(map(prop('value')), sum)(links);\nconst interpolateNumber = (a: number, b: number) => ((a = +a), (b = +b), (t) => a * (1 - t) + b * t);\n\nexport default function Sankey() {\n const lastLinksSize = 22;\n\n let nodeWidth = 24,\n smallestNodeMaxHeight = 15,\n smallestNodeMinHeight = 10,\n nodePadding = 8,\n size = [1, 1] as [number, number];\n\n function sankey({nodes, links}: SankeyData) {\n const graph = {nodes, links};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeBreadths(graph);\n computeNodeDepths(graph);\n computeLinkDepths(graph);\n correctNodesDepth(graph);\n return graph;\n }\n\n sankey.nodeWidth = () => nodeWidth;\n sankey.setNodeWidth = (width: number) => ((nodeWidth = +width), sankey);\n\n sankey.nodePadding = () => nodePadding;\n sankey.setNodePadding = (padding: number) => ((nodePadding = +padding), sankey);\n\n sankey.smallestNodeMaxHeight = () => smallestNodeMaxHeight;\n sankey.setSmallestNodeMaxHeight = (height: number) => ((smallestNodeMaxHeight = +height), sankey);\n\n sankey.smallestNodeMinHeight = () => smallestNodeMinHeight;\n sankey.setSmallestNodeMinHeight = (height: number) => ((smallestNodeMinHeight = +height), sankey);\n\n sankey.size = () => size;\n sankey.setSize = (newSize: [number, number]) => ((size = newSize), sankey);\n\n sankey.update = (graph) => {\n computeLinkDepths(graph);\n return graph;\n };\n\n sankey.link = () => {\n let curvature = 0.5;\n\n function link(d) {\n const lastLine = !d.target.sourceLinks || d.target.sourceLinks.length == 0;\n const addPixels = 0.13;\n const x0 = d.source.x + d.source.dx,\n x1 = d.target.x,\n xi = interpolateNumber(x0, x1),\n x2 = xi(curvature),\n x3 = xi(1 - curvature),\n y0 = d.source.y + d.sy - addPixels,\n y1 = d.target.y + d.ty - addPixels;\n const appendix = !lastLine\n ? `L${x1 + nodeWidth},${y1} L${x1 + nodeWidth},${y1 + d.dy + 2 * addPixels}`\n : '';\n\n return y0 === y1\n ? `M${x0},${y0} \n L${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n L${x0},${y0 + d.dy + 2 * addPixels} Z`\n : `M${x0},${y0}\n C${x2},${y0} ${x3},${y1} ${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n C${x3},${y1 + d.dy + 2 * addPixels} ${x2},${y0 + d.dy + 2 * addPixels} \n ${x0},${y0 + d.dy + 2 * addPixels} Z`;\n }\n\n link.curvature = function (_) {\n if (!arguments.length) return curvature;\n curvature = +_;\n return link;\n };\n\n return link;\n };\n\n // Populate the sourceLinks and targetLinks for each node.\n function computeNodeLinks({nodes, links}: SankeyData) {\n nodes.forEach((node) => {\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n links.forEach((link) => {\n link.source.sourceLinks.push(link);\n link.target.targetLinks.push(link);\n });\n }\n\n // Compute the value (size) of each node by summing the associated links.\n function computeNodeValues({nodes}: SankeyData) {\n nodes.forEach((node) => {\n node.value = Math.max(sumValues(node.sourceLinks), sumValues(node.targetLinks));\n });\n }\n\n // Iteratively assign the breadth (x-position) for each node.\n // Nodes are assigned the maximum breadth of incoming neighbors plus one;\n // nodes with no incoming links are assigned breadth zero, while\n // nodes with no outgoing links are assigned the maximum breadth.\n function computeNodeBreadths({nodes}: SankeyData) {\n if (!nodes.length) return;\n let remainingNodes = [nodes[0]],\n nextNodes,\n x = 0;\n\n while (remainingNodes.length) {\n nextNodes = [];\n remainingNodes.forEach((node) => {\n node.x = x;\n node.dx = nodeWidth;\n node.targetLinks.forEach((link) => {\n if (nextNodes.indexOf(link.source) < 0) {\n nextNodes.push(link.source);\n }\n });\n });\n remainingNodes = nextNodes;\n ++x;\n }\n\n nodes.forEach((node) => {\n node.x = x - 1 - node.x;\n });\n\n if (x > 2) {\n const w = (size[0] - 2 * nodeWidth - lastLinksSize) / (x - 2);\n nodes.forEach((node) => {\n if (!node.sourceLinks || node.sourceLinks.length == 0) node.x = size[0] - nodeWidth;\n else node.x *= w;\n });\n } else {\n nodes[0].x = size[0] - nodeWidth;\n nodes[1].x = nodes[0].x - lastLinksSize - nodeWidth;\n }\n }\n\n function computeNodeDepths({nodes, links}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a, b) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n //\n initializeNodeDepth();\n resolveCollisions();\n\n const max = pipe(\n map((nodes) => (nodes.length - 1) * nodePadding + sum(map((node) => node.dy, nodes))),\n reduce(Math.max, 0)\n )(nodesByBreadth);\n\n const y1 = (size[1] - max) / 2;\n\n nodesByBreadth.forEach((nodes) => {\n const {y, dy} = last(nodes);\n const y0 = size[1] - (y + dy);\n nodes.forEach((node) => {\n node.y += y0;\n if (y1 > 0) node.y -= y1;\n });\n });\n\n function initializeNodeDepth() {\n let ky = pipe(\n map((nodes) => (size[1] - (nodes.length - 1) * nodePadding) / sumValues(nodes)),\n reduce(Math.min, Infinity)\n )(nodesByBreadth);\n\n const min = pipe(\n map((node) => node.value / (node.targetLinks?.length || 1)),\n reduce(Math.min, Infinity)\n )(nodes);\n\n ky = Math.max(Math.min(ky, smallestNodeMaxHeight / min), smallestNodeMinHeight / min);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node, i) => {\n node.y = i;\n node.dy = node.value * ky;\n });\n });\n\n links.forEach((link) => {\n link.dy = link.value * ky;\n });\n }\n\n function resolveCollisions() {\n nodesByBreadth.forEach((nodes) => {\n let node,\n dy,\n y0 = 0,\n i;\n const n = nodes.length;\n\n // Push any overlapping nodes down.\n nodes.sort((a, b) => a.y - b.y);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dy = y0 - node.y;\n if (dy > 0) node.y += dy;\n y0 = node.y + node.dy + nodePadding;\n }\n\n // If the bottommost node goes outside the bounds, push it back up.\n dy = y0 - nodePadding - size[1];\n if (dy > 0) {\n y0 = node.y -= dy;\n\n // Push any overlapping nodes back up.\n for (i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.y + node.dy + nodePadding - y0;\n if (dy > 0) node.y -= dy;\n y0 = node.y;\n }\n }\n });\n }\n }\n\n function computeLinkDepths({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node) => {\n if (node.targetLinks?.length) {\n const result = [];\n const linksByUuid = node.targetLinks.map((l) => l.crosswalk.uuid);\n const sourceNodes = [];\n node.targetLinks.forEach(function (l) {\n if (this.indexOf(l.source) == -1) this.push(l.source);\n }, sourceNodes);\n for (let i = 0; i < sourceNodes.length; i++)\n for (let j = 0; j < sourceNodes[i].sourceLinks.length; j++) {\n const index = linksByUuid.indexOf(sourceNodes[i].sourceLinks[j].crosswalk.uuid);\n if (index != -1) result.push(node.targetLinks[index]);\n }\n node.targetLinks = result;\n }\n\n if (node.sourceLinks?.length) {\n const result = [];\n if (node.targetLinks?.length) {\n const linksByUuid = node.sourceLinks.map((l) => l.crosswalk.uuid);\n for (let i = 0; i < node.targetLinks.length; i++) {\n const index = linksByUuid.indexOf(node.targetLinks[i].crosswalk.uuid);\n if (index != -1) result.push(node.sourceLinks[index]);\n }\n }\n\n const resultByUuid = result.map((l) => l.crosswalk.uuid);\n const newSources = node.sourceLinks.filter(function (l) {\n return this.indexOf(l.crosswalk.uuid) == -1;\n }, resultByUuid);\n\n node.sourceLinks = newSources.concat(result);\n if (result.length > 0) {\n let sizeForNewSources = 0;\n for (let i = 0; i < newSources.length; i++) sizeForNewSources += newSources[i].dy;\n node.sizeForNewSources = sizeForNewSources;\n }\n }\n });\n });\n\n nodes.forEach((node) => {\n let sy = 0,\n ty = node.sizeForNewSources || 0;\n delete node.sizeForNewSources;\n node.sourceLinks.forEach((link) => {\n link.sy = sy;\n sy += link.dy;\n });\n node.targetLinks.forEach((link) => {\n link.ty = ty;\n ty += link.dy;\n });\n });\n }\n\n function correctNodesDepth({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => b[0] - a[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes = nodes.concat().sort((a, b) => a.y - b.y);\n nodes.forEach((node, i) => {\n if (node.sourceLinks?.length) {\n const {target, ty, dy} = last(node.sourceLinks);\n let y0 = target.y + ty + dy - node.dy;\n if (nodes[i - 1]?.x == node.x && y0 < nodes[i - 1]?.y + nodes[i - 1]?.dy + nodePadding)\n y0 = nodes[i - 1].y + nodes[i - 1].dy + nodePadding;\n if (node.y > y0) {\n node.y = y0;\n }\n }\n });\n });\n }\n\n return sankey;\n}\n","import {useMemo} from 'react';\nimport {SankeyData, SankeyNode} from '../../types/SankeyChartData';\nimport sankey from './sankey';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n};\n\nconst useSankey = ({data, width, height}: Props) =>\n useMemo(() => {\n if (!width || !height) return {nodes: [], links: []};\n\n const shallowCopy = (data: SankeyData): SankeyData => {\n const safeNodes = data.nodes.map((node) => ({...node}));\n const getSafeNode = (originalNode: SankeyNode) => {\n const index = data.nodes.indexOf(originalNode);\n return safeNodes[index];\n };\n\n const safeLinks = data.links.map((link) => ({\n ...link,\n source: getSafeNode(link.source),\n target: getSafeNode(link.target)\n }));\n return {nodes: safeNodes, links: safeLinks};\n };\n\n const sankeyLayout = sankey()\n .setNodeWidth(14)\n .setNodePadding(20)\n .setSize([height - 2, width - 2]);\n\n const nodeWidth = sankeyLayout.nodeWidth();\n const path = sankeyLayout.link();\n\n const safeData = shallowCopy(data);\n const {nodes, links}: SankeyData = sankeyLayout(safeData);\n\n return {nodes, links, nodeWidth, path};\n }, [data, height, width]);\n\nexport default useSankey;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n tooltipTitle: {\n fontWeight: 500,\n fontSize: '16px',\n lineHeight: '24px',\n letterSpacing: '0.15px',\n marginBottom: '8px',\n userSelect: 'none'\n },\n tooltipRow: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: 'normal',\n '&:not(:last-child)': {\n marginBottom: '4px'\n }\n },\n tooltipIcon: {\n fontSize: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n marginRight: '8px'\n },\n node: {\n stroke: '#000000',\n strokeWidth: 1,\n strokeOpacity: 0.38\n },\n rootNode: {\n transform: 'rotate(90deg)',\n userSelect: 'none',\n fontSize: '13px'\n },\n popupContainer: {\n padding: 5,\n boxSizing: 'border-box'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {LightArrowTooltip} from '@reltio/components';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport PersonIcon from '@mui/icons-material/Person';\nimport {useStyles} from './styles';\n\ntype Props = {\n user: string;\n time: number;\n children: React.ReactElement;\n};\n\nexport const MergeTooltip = ({user, time, children}: Props) => {\n const styles = useStyles();\n const tooltipTitle = (\n <div>\n <span className={styles.tooltipTitle}>{i18n.text('Merge details')}</span>\n <div className={styles.tooltipRow}>\n <CalendarTodayIcon className={styles.tooltipIcon} />\n {i18n.date(time, 'L LTS')}\n </div>\n <div className={styles.tooltipRow}>\n <PersonIcon className={styles.tooltipIcon} />\n {user}\n </div>\n </div>\n );\n\n return (\n <LightArrowTooltip title={tooltipTitle} placement={'top'}>\n {children}\n </LightArrowTooltip>\n );\n};\n\nexport default MergeTooltip;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M17 13.138l4.5 4.5-4.5 4.5V18.5h-1.247l-3.488-3.479 1.413-1.414 2.901 2.893H17v-3.362zM17 1.5L21.5 6 17 10.5V7.138h-.421l-11.03 11H2v-2h2.723l11.03-11H17V1.5zm-11.45 4l3.294 3.286-1.414 1.413L4.723 7.5H2v-2h3.55z\",\n id: \"svg2499598299a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2499598299b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2499598299a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2499598299b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import React, {MouseEvent, useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Popover from '@mui/material/Popover';\nimport MergeTooltip from './MergeTooltip';\nimport {SankeyNode} from '../../types/SankeyChartData';\nimport {SmallIconButtonWithTooltip, noop, useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {groupBy, prop, pipe, map, head, last, max, min} from 'ramda';\nimport UnmergeIcon from '../../icons/notMatch.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n nodeWidth: number;\n node: SankeyNode;\n highlightEnabled: boolean;\n isColored: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n isDragging: boolean;\n};\n\nexport const Node = ({node, nodeWidth, highlightEnabled, isColored, disableUnmerge, onUnmerge, isDragging}: Props) => {\n const styles = useStyles();\n const [labelX, setLabelX] = useState(0);\n const [anchorEl, setAnchorEl] = useState(null);\n const textRef = useRef(null);\n const {\n x,\n y,\n name,\n label,\n targetLinks,\n sourceLinks,\n entity: {crosswalks = [], merges}\n } = node;\n const [firstCrosswalk] = crosswalks;\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(firstCrosswalk);\n const color = useCrosswalkColor(firstCrosswalk);\n const startNodeHeight = crosswalks?.length\n ? sourceLinks[crosswalks.length - 1].sy + sourceLinks[crosswalks.length - 1].dy\n : 0;\n\n const renderMergeNodes = () => {\n const timeMap = pipe(map(prop('source')), groupBy(prop('time')))(targetLinks);\n\n return merges?.map(({time, user}, index) => {\n const sources = timeMap[time];\n if (!sources) return;\n\n const [start, end] = sources.reduce(\n (acc, {sourceLinks}) => [\n min(head(sourceLinks).ty, acc[0]),\n max(last(sourceLinks).ty + last(sourceLinks).dy, acc[1])\n ],\n [Infinity, 0]\n );\n\n return (\n <MergeTooltip user={user} time={time} key={'node-' + index}>\n <rect\n transform={`translate(0,${start})`}\n height={end - start}\n width={nodeWidth}\n className={styles.node}\n fillOpacity={0.54}\n fill={'#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.38 : 1}\n />\n </MergeTooltip>\n );\n });\n };\n\n const openPopup = (e: MouseEvent<SVGRectElement>) => setAnchorEl(e.currentTarget);\n const closePopup = () => setAnchorEl(null);\n const handleUnmerge = () => {\n onUnmerge(name);\n closePopup();\n };\n\n useEffect(() => {\n const nodeHeight = node.dy;\n const textWidth = textRef?.current?.clientWidth || 0;\n if (nodeHeight < textWidth) setLabelX(nodeHeight / 2 - textWidth / 2);\n }, []);\n\n useEffect(() => {\n if (isDragging && !!anchorEl) closePopup();\n }, [isDragging]);\n\n return (\n <g transform={`translate(${x},${y})`}>\n {name === 'ROOT' ? (\n <text dy={-5} dx={labelX} ref={textRef} className={styles.rootNode}>\n {label || ''}\n </text>\n ) : (\n <>\n <rect\n height={startNodeHeight}\n width={14}\n className={styles.node}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n key={'node-main'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n onClick={disableUnmerge ? noop : openPopup}\n cursor={disableUnmerge ? 'default' : 'pointer'}\n data-reltio-id=\"reltio-sankey-chart-node\"\n />\n <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n anchorOrigin={{vertical: 'top', horizontal: 'right'}}\n onClose={closePopup}\n classes={{paper: styles.popupContainer}}\n data-reltio-id=\"reltio-unmerge-popup\"\n >\n <SmallIconButtonWithTooltip\n size=\"XS\"\n tooltipTitle={i18n.text('Unmerge')}\n icon={UnmergeIcon}\n onClick={handleUnmerge}\n />\n </Popover>\n {!!targetLinks?.length && renderMergeNodes()}\n </>\n )}\n </g>\n );\n};\n\nexport default Node;\n","import React from 'react';\nimport {useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {SankeyLink} from '../../types/SankeyChartData';\n\ntype Props = {\n link: SankeyLink;\n path: string;\n highlightEnabled: boolean;\n isColored: boolean;\n};\n\nexport const Link = ({link, path, highlightEnabled, isColored}: Props) => {\n const {crosswalk} = link;\n const color = useCrosswalkColor(crosswalk);\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(crosswalk);\n return (\n <path\n d={path}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n />\n );\n};\n\nexport default Link;\n","import React, {useMemo, useState, useEffect} from 'react';\nimport useSankey from './useSankey';\nimport Node from './Node';\nimport Link from './Link';\nimport {SankeyData} from '../../types/SankeyChartData';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n accentContributors?: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n};\n\nconst SankeyChart = ({width, height, data, accentContributors, onUnmerge, disableUnmerge}: Props) => {\n const [isDragging, setDragging] = useState(false);\n const [isMouseDown, setMouseDown] = useState(false);\n const [previousPageX, setPreviousPageX] = useState(0);\n const [offsetX, setOffsetX] = useState(0);\n const {links, nodes, nodeWidth, path} = useSankey({data, width, height});\n\n useEffect(() => {\n setOffsetX(0);\n setPreviousPageX(0);\n }, [width, height]);\n\n const sankeyNodes = useMemo(\n () =>\n nodes.map((node, index) => (\n <Node\n highlightEnabled={accentContributors}\n isColored={accentContributors}\n node={node}\n nodeWidth={nodeWidth}\n key={`SankeyNode-${index}`}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n isDragging={isDragging}\n />\n )),\n [nodes, accentContributors, nodeWidth, width, height, isDragging]\n );\n\n const sankeyLinks = useMemo(\n () =>\n links.map((link, index) => (\n <Link\n highlightEnabled={!accentContributors}\n isColored={!accentContributors}\n link={link}\n path={path(link)}\n key={`SankeyLink-${index}`}\n />\n )),\n [accentContributors, links, path]\n );\n\n const extractPositionDelta = (event: React.MouseEvent) => {\n const left = event.pageX;\n const offsetX = left - previousPageX;\n setPreviousPageX(left);\n return offsetX;\n };\n\n const onDown = (event: React.MouseEvent) => {\n event.preventDefault();\n setMouseDown(true);\n extractPositionDelta(event);\n };\n const onMove = (event: React.MouseEvent) => {\n if (!isMouseDown) return;\n setDragging(true);\n const left = extractPositionDelta(event);\n setOffsetX(offsetX + left);\n };\n const onUp = () => {\n setMouseDown(false);\n setDragging(false);\n };\n\n const pointerEvents = isDragging ? 'none' : 'auto';\n const cursor = isDragging ? 'move' : 'auto';\n\n return (\n <svg\n width={width}\n height={height}\n cursor={cursor}\n onMouseDown={onDown}\n onMouseMove={onMove}\n onMouseUp={onUp}\n onMouseLeave={onUp}\n >\n <g transform={`translate(${offsetX},${height - 1}) rotate(-90)`} pointerEvents={pointerEvents}>\n <g>{sankeyLinks}</g>\n <g>{sankeyNodes}</g>\n </g>\n </svg>\n );\n};\n\nexport default SankeyChart;\n","import {chain, concat, curry, evolve, filter, map, pipe, uniq} from 'ramda';\nimport {CrosswalkBase, CrosswalkTree, eqCrosswalks} from '@reltio/mdm-sdk';\nimport {SankeyLink, SankeyNode} from '../../types/SankeyChartData';\n\nconst isCrosswalkDisplayed = curry(\n (displayedCrosswalks: CrosswalkBase[], crosswalk: CrosswalkBase) =>\n !displayedCrosswalks || displayedCrosswalks.some(eqCrosswalks(crosswalk))\n);\n\nconst filterDisplayedCrosswalks = curry((displayedCrosswalks: CrosswalkBase[], tree: CrosswalkTree) => {\n return evolve(\n {\n crosswalks: filter(isCrosswalkDisplayed(displayedCrosswalks)),\n merges: map(\n evolve({\n losers: map(filterDisplayedCrosswalks(displayedCrosswalks))\n })\n )\n },\n tree\n );\n});\n\nconst addCrosswalkUniqueId = (tree: CrosswalkTree) => {\n let count = 1;\n const addIdToSubtree = pipe(\n evolve({crosswalks: map((crosswalk) => ({...crosswalk, uuid: count++}))}),\n evolve({\n merges: map(\n evolve({\n losers: map((loser) => addIdToSubtree(loser))\n })\n )\n })\n );\n return addIdToSubtree(tree);\n};\n\nconst processTree = (tree: CrosswalkTree & {label?: string}) => {\n const nodes: SankeyNode[] = [];\n const links: SankeyLink[] = [];\n\n const processSubTree = (tree, parentIndex, time) => {\n const {crosswalks = [], merges = [], uri = '', label} = tree;\n\n nodes.push({entity: tree, name: uri, time, label});\n const index = nodes.length - 1;\n\n const mergesCrosswalks = pipe(\n chain(({losers, time}) => {\n return pipe(\n filter((loser) => loser.crosswalks?.length || loser.merges?.length),\n chain((loser) => processSubTree(loser, index, time))\n )(losers);\n }),\n concat(crosswalks)\n )(merges);\n\n if (parentIndex != -1)\n mergesCrosswalks.forEach((crosswalk) =>\n links.push({\n source: nodes[index],\n target: nodes[parentIndex],\n value: 10,\n crosswalk\n })\n );\n\n return mergesCrosswalks;\n };\n processSubTree(tree, -1, Date.now());\n\n const linkedNodes = pipe(\n chain(({source, target}) => [source, target]),\n uniq\n )(links);\n\n return {nodes: nodes.filter((node) => linkedNodes.includes(node)), links};\n};\n\nexport const getSankeyData = (\n crosswalkTree: CrosswalkTree,\n entityLabel = '',\n displayedCrosswalks?: CrosswalkBase[]\n) => {\n return pipe(\n filterDisplayedCrosswalks(displayedCrosswalks),\n addCrosswalkUniqueId,\n processTree\n )({uri: 'ROOT', label: entityLabel, crosswalks: [], merges: [{time: Date.now(), losers: [crosswalkTree]}]});\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n graph: {\n padding: '8px 0px',\n boxSizing: 'border-box',\n height: '100%',\n width: '100%'\n }\n}));\n","import React, {memo} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {noop} from '@reltio/components';\nimport SankeyChart from '../SankeyChart/SankeyChart';\nimport {getSankeyData} from './helpers';\nimport {CrosswalkBase, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n crosswalkTree: CrosswalkTree;\n entityLabel?: string;\n visibleCrosswalks?: CrosswalkBase[];\n accentContributors?: boolean;\n disableUnmerge?: boolean;\n onUnmerge?: (contributorUri: string) => void;\n};\n\nconst CrosswalkTreeView = ({\n crosswalkTree,\n entityLabel,\n visibleCrosswalks,\n accentContributors,\n disableUnmerge = false,\n onUnmerge = noop\n}: Props) => {\n const styles = useStyles();\n const sankeyData = getSankeyData(crosswalkTree, entityLabel, visibleCrosswalks);\n\n return (\n <div className={styles.graph} data-reltio-id=\"reltio-crosswalk-tree\">\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n {({width = 0, height = 200}: {width: number; height: number}) => (\n <SankeyChart\n width={width}\n height={height}\n data={sankeyData}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n />\n )}\n </ReactResizeDetector>\n </div>\n );\n};\n\nexport default memo(CrosswalkTreeView);\n","import {makeStyles} from '@mui/styles';\n\ntype StylesProps = {\n isFocused?: boolean;\n};\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n paddingRight: '8px',\n '& button + button': {\n marginLeft: '4px'\n }\n },\n focusedIcon: ({isFocused}: StylesProps) => ({\n width: 28,\n height: 28,\n color: isFocused ? '#000' : 'rgba(0, 0, 0, 0.54)',\n borderRadius: 0\n }),\n title: {\n color: theme.palette.text.secondary,\n paddingLeft: '6px',\n paddingRight: '2px'\n },\n uri: {\n lineHeight: '15px',\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Typography from '@mui/material/Typography';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport {SmallIconButtonWithTooltip, Spacer} from '@reltio/components';\nimport {getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype ContributorAction = React.ComponentPropsWithRef<typeof SmallIconButtonWithTooltip> & {\n show: boolean;\n};\n\ntype Props = {\n contributorUri: string;\n isFocused: boolean;\n focusable: boolean;\n onToggleFocus: () => void;\n contributorActions: ContributorAction[];\n};\n\nconst ContributorRow = ({contributorUri, focusable, contributorActions, onToggleFocus, isFocused}: Props) => {\n const styles = useStyles({isFocused});\n return (\n <div className={styles.root}>\n <SmallIconButtonWithTooltip\n size=\"XXS\"\n onClick={() => onToggleFocus()}\n className={styles.focusedIcon}\n icon={focusable && VisibilityIcon}\n disabled={!focusable}\n tooltipTitle={focusable && i18n.text('Focus')}\n />\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity ID:')}</span>\n {getLastUriPart(contributorUri)}\n </Typography>\n <Spacer />\n {contributorActions.map(({show, ...buttonProps}, i) => {\n return show && <SmallIconButtonWithTooltip key={i} size=\"XS\" showForDisabled {...buttonProps} />;\n })}\n </div>\n );\n};\n\nexport default ContributorRow;\n","import {makeStyles} from '@mui/styles';\n\ntype StylesProps = {\n contributorColor: string;\n};\n\nexport const useStyles = makeStyles(() => ({\n root: ({contributorColor}: StylesProps) => ({\n fontSize: '13px',\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n border: '1px solid rgba(0, 0, 0, 0.05)',\n paddingLeft: '8px',\n '&:before': {\n content: '\" \"',\n borderLeft: `8px solid ${contributorColor}`,\n position: 'absolute',\n top: -1,\n left: 0,\n bottom: -1\n },\n '& > div + div': {\n marginTop: '1px'\n }\n }),\n editor: {\n padding: '0px 30px 0px 25px'\n }\n}));\n","import React, {useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CrosswalkEditor,\n SourceCrosswalksRow,\n CrosswalksByTypes,\n CrosswalkType,\n useCrosswalkFocus,\n useHighlightedCrosswalks\n} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {\n Crosswalk,\n DataTenant,\n eqCrosswalks,\n getContributorColor,\n getDataTenantFromCrosswalks,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport {chain, find, flatten, head, pipe, pluck, propOr, props, values} from 'ramda';\nimport AddIcon from '@mui/icons-material/Add';\nimport UnmergeIcon from '../../../icons/notMatch.svg';\nimport UnsubscribeIcon from '@mui/icons-material/Delete';\nimport ContributorRow from './ContributorRow/ContributorRow';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n contributorUri: string;\n accentContributor?: boolean;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n canUnmerge: boolean;\n disableAddCrosswalk: boolean;\n disableEditCrosswalk: boolean;\n disableDeleteCrosswalk: boolean;\n disableUnmergeContributor: boolean;\n onAdd: (event: {contributorCrosswalk: Crosswalk; crosswalk: Omit<Crosswalk, 'uri'>}) => void;\n onDelete: (crosswalkId: string) => void;\n onEdit: (event: {crosswalkId: string; attributeName: string; value?: string}) => void;\n onUnmerge: () => void;\n expandedSources?: string[];\n onToggleSourceExpanded: (sourceUri: string) => void;\n onUnsubscribeContributor: (event: {contributorUri: string; dataTenant: DataTenant; crosswalk: Crosswalk}) => void;\n};\n\nconst LegendTableRow = ({\n className,\n contributorUri,\n accentContributor,\n crosswalksBySources,\n expandedSources,\n canUnmerge,\n disableAddCrosswalk,\n disableEditCrosswalk,\n disableDeleteCrosswalk,\n disableUnmergeContributor,\n onUnmerge,\n onEdit,\n onDelete,\n onAdd,\n onToggleSourceExpanded,\n onUnsubscribeContributor\n}: Props) => {\n const contributorColor = accentContributor ? getContributorColor(contributorUri) : 'rgba(0, 0, 0, 0.38)';\n const styles = useStyles({contributorColor});\n const dataTenants = useSelector(mdm.selectors.getDataTenants);\n\n const ref = useRef(null);\n const [scrollToCrosswalk] = useHighlightedCrosswalks();\n useEffect(() => {\n if (accentContributor && scrollToCrosswalk) {\n const crosswalks = pipe(\n find(({source}) => source === scrollToCrosswalk.type),\n propOr({}, 'crosswalksByTypes'),\n values,\n flatten\n )(crosswalksBySources);\n if (\n crosswalks.some(\n (crosswalk) => eqCrosswalks(scrollToCrosswalk, crosswalk) && crosswalk !== scrollToCrosswalk\n )\n ) {\n ref?.current?.scrollIntoView({behavior: 'smooth'});\n }\n }\n }, [scrollToCrosswalk]);\n\n const [showEditor, setShowEditor] = useState(false);\n\n const contributorCrosswalk: Crosswalk = pipe(\n pluck('crosswalksByTypes'),\n find((crosswalks) => crosswalks[CrosswalkType.Simple].length || crosswalks[CrosswalkType.Empty].length),\n props([CrosswalkType.Simple, CrosswalkType.Empty]),\n flatten,\n head\n )(crosswalksBySources);\n const {toggleCrosswalkFocus, isFocused} = useCrosswalkFocus(contributorCrosswalk);\n\n const allContributorCrosswalks: (Crosswalk | RelationCrosswalk)[] = pipe(\n pluck('crosswalksByTypes'),\n chain(values),\n flatten\n )(crosswalksBySources);\n\n const dataTenantForExternalCrosswalk = getDataTenantFromCrosswalks(allContributorCrosswalks, dataTenants);\n\n const unsubscribeContributor = () =>\n onUnsubscribeContributor({\n contributorUri,\n dataTenant: dataTenantForExternalCrosswalk,\n crosswalk: contributorCrosswalk\n });\n\n const contributorActions = [\n {\n icon: AddIcon,\n tooltipTitle: i18n.text('Add crosswalk'),\n onClick: () => setShowEditor(true),\n disabled: disableAddCrosswalk,\n show: !!contributorCrosswalk\n },\n {\n icon: UnmergeIcon,\n tooltipTitle: i18n.text('Unmerge'),\n onClick: () => onUnmerge(),\n disabled: disableUnmergeContributor,\n show: canUnmerge\n },\n {\n icon: UnsubscribeIcon,\n tooltipTitle: i18n.text('Unsubscribe'),\n onClick: () => unsubscribeContributor(),\n disabled: disableUnmergeContributor,\n show: canUnmerge && !!dataTenantForExternalCrosswalk\n }\n ];\n\n return (\n <div ref={ref} className={classnames(styles.root, className)}>\n <ContributorRow\n contributorUri={contributorUri}\n focusable={accentContributor && !!contributorCrosswalk}\n isFocused={accentContributor && isFocused}\n onToggleFocus={toggleCrosswalkFocus}\n contributorActions={contributorActions}\n />\n {crosswalksBySources.map(({source, crosswalksByTypes}) => (\n <SourceCrosswalksRow\n key={source}\n source={source}\n crosswalksByTypes={crosswalksByTypes}\n showCrosswalkColors={!accentContributor}\n crosswalksFocusEnabled={!accentContributor}\n expanded={expandedSources?.includes(source)}\n disableEditCrosswalk={disableEditCrosswalk}\n disableDeleteCrosswalk={disableDeleteCrosswalk}\n onEdit={onEdit}\n onDelete={onDelete}\n onToggleExpanded={() => onToggleSourceExpanded(source)}\n />\n ))}\n {showEditor && (\n <CrosswalkEditor\n className={styles.editor}\n onAdd={(crosswalk) => onAdd({contributorCrosswalk, crosswalk})}\n onClose={() => setShowEditor(false)}\n />\n )}\n </div>\n );\n};\n\nexport default LegendTableRow;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n table: {\n overflowY: 'auto',\n overflowX: 'hidden',\n paddingLeft: '16px',\n paddingRight: '6px'\n },\n tableRow: {\n '& + &': {\n marginTop: '10px'\n },\n margin: 'auto',\n maxWidth: '448px'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n AttributeType,\n checkCanCreateCrosswalk,\n checkCanDeleteCrosswalk,\n checkCanEditCrosswalk,\n Contributor,\n CrosswalkBase,\n Entity,\n TEntityType\n} from '@reltio/mdm-sdk';\nimport {AddCrosswalkEvent, DeleteCrosswalkEvent, EditCrosswalkEvent, noop} from '@reltio/components';\nimport {buildTableRowsData, collectVisibleCrosswalks} from './helpers';\nimport LegendTableRow from './LegendTableRow/LegendTableRow';\nimport {append, assoc, evolve, has, ifElse, includes, pipe, unless, without} from 'ramda';\nimport {UnsubscribeContributorEvent} from '../../types';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n entityType: TEntityType;\n contributors: Contributor[];\n accentContributors?: boolean;\n selectedAttributeTypes?: AttributeType[];\n onChangeVisibleCrosswalks: (visibleCrosswalks: CrosswalkBase[]) => void;\n readOnly?: boolean;\n canUnmerge: boolean;\n disableUnmerge: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (contributorUri: string) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent & {contributorUri: string}) => void;\n};\n\nconst LegendTable = ({\n accentContributors,\n entity,\n entityType,\n contributors,\n selectedAttributeTypes,\n onChangeVisibleCrosswalks,\n readOnly,\n canUnmerge,\n disableUnmerge,\n onAddCrosswalk = noop,\n onEditCrosswalk = noop,\n onDeleteCrosswalk = noop,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop\n}: Props) => {\n const styles = useStyles();\n\n const rowsData = useMemo(\n () => buildTableRowsData(entity, contributors, selectedAttributeTypes),\n [entity, contributors, selectedAttributeTypes]\n );\n const [expandedByContributor, setExpandedByContributor] = useState<{[contributorUri: string]: string[]}>({});\n const visibleCrosswalks = useMemo(\n () => collectVisibleCrosswalks(rowsData, expandedByContributor),\n [rowsData, expandedByContributor]\n );\n useEffect(() => {\n onChangeVisibleCrosswalks(visibleCrosswalks);\n }, [visibleCrosswalks]);\n\n const handleDelete = useCallback(\n (crosswalkId: string) => {\n onDeleteCrosswalk({entityUri: entity?.uri, crosswalkId});\n },\n [entity?.uri, onDeleteCrosswalk]\n );\n\n const handleEdit = useCallback(\n (params: Omit<EditCrosswalkEvent, 'entityUri'>) => {\n onEditCrosswalk({...params, entityUri: entity?.uri});\n },\n [entity?.uri, onEditCrosswalk]\n );\n\n return (\n <div className={styles.table}>\n {rowsData.map(({contributorUri, crosswalksBySources}) => {\n return (\n <LegendTableRow\n key={contributorUri}\n className={styles.tableRow}\n canUnmerge={canUnmerge}\n contributorUri={contributorUri}\n accentContributor={accentContributors}\n crosswalksBySources={crosswalksBySources}\n disableAddCrosswalk={readOnly || !checkCanCreateCrosswalk(entityType)}\n disableEditCrosswalk={readOnly || !checkCanEditCrosswalk(entityType)}\n disableDeleteCrosswalk={readOnly || !checkCanDeleteCrosswalk(entityType)}\n disableUnmergeContributor={disableUnmerge}\n onAdd={(params) => onAddCrosswalk({...params, entity})}\n onDelete={handleDelete}\n onEdit={handleEdit}\n onUnmerge={() => onUnmergeContributor(contributorUri)}\n onUnsubscribeContributor={onUnsubscribeContributor}\n expandedSources={expandedByContributor[contributorUri]}\n onToggleSourceExpanded={(sourceUri: string) => {\n setExpandedByContributor(\n pipe(\n unless(has(contributorUri), assoc(contributorUri, [])),\n evolve({\n [contributorUri]: ifElse(\n includes(sourceUri),\n without([sourceUri]),\n append(sourceUri)\n )\n })\n )\n );\n }}\n />\n );\n })}\n </div>\n );\n};\n\nexport default memo(LegendTable);\n","import {\n AttributeType,\n Contributor,\n Crosswalk,\n Entity,\n eqCrosswalks,\n getRelationCrosswalks,\n isEmptyValue,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport {chain, filter, map, pipe} from 'ramda';\nimport {CrosswalksByTypes, CrosswalkType, groupCrosswalksByTypesAndSources} from '@reltio/components';\n\ntype TableRow = {\n contributorUri: string;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n};\n\nexport const buildTableRowsData = (\n entity: Entity,\n contributors: Contributor[],\n selectedAttributeTypes: AttributeType[] = []\n): TableRow[] => {\n const entityCrosswalks: Crosswalk[] = entity.crosswalks || [];\n const relationCrosswalks: RelationCrosswalk[] = getRelationCrosswalks(entity);\n return contributors\n .filter((contributor) => !isEmptyValue(contributor.crosswalks))\n .map(({uri, crosswalks}) => {\n const crosswalksBySources = pipe(\n map((crosswalk) => {\n if (crosswalk.ownerType === 'relation') {\n const relationCrosswalk = relationCrosswalks.find(eqCrosswalks(crosswalk));\n return relationCrosswalk && {ownerType: 'relation', ...relationCrosswalk};\n } else {\n const entityCrosswalk = entityCrosswalks.find(eqCrosswalks(crosswalk));\n return entityCrosswalk && {ownerType: 'entity', ...entityCrosswalk};\n }\n }),\n filter((crosswalk) => !!crosswalk),\n groupCrosswalksByTypesAndSources(entity.type, selectedAttributeTypes)\n )(crosswalks);\n\n return {contributorUri: uri, crosswalksBySources};\n })\n .filter(({crosswalksBySources}) => crosswalksBySources.length > 0);\n};\n\nexport const collectVisibleCrosswalks = (\n rowsData: TableRow[],\n expandedByContributor: {[contributorUri: string]: string[]}\n) => {\n return rowsData.reduce((acc, {contributorUri, crosswalksBySources}) => {\n const visibleCrosswalks = chain(({source, crosswalksByTypes}) => {\n const isExpandedSource = expandedByContributor[contributorUri]?.includes(source);\n return crosswalksByTypes[CrosswalkType.Simple]\n .concat(crosswalksByTypes[CrosswalkType.Empty])\n .concat(isExpandedSource ? crosswalksByTypes[CrosswalkType.Dependent] : []);\n }, crosswalksBySources);\n return acc.concat(visibleCrosswalks);\n }, []);\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n '& + &': {\n marginLeft: '16px'\n }\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: '#666666',\n marginBottom: '7px'\n },\n hintIcon: {\n width: '16px',\n height: '16px',\n verticalAlign: 'middle'\n },\n graph: {\n width: '400px',\n height: '300px',\n borderRadius: '8px',\n background: 'rgba(0, 0, 0, 0.03)',\n border: '1px solid rgba(0, 0, 0, 0.03)',\n position: 'relative'\n },\n checkedIcon: {\n position: 'absolute',\n height: '20px',\n width: '20px',\n right: '10px',\n top: '10px',\n color: theme.palette.primary.main\n },\n selectedTree: {\n border: `1px solid ${theme.palette.primary.main}`,\n background: 'rgba(0, 114, 206, 0.05)'\n }\n}));\n","import React, {useCallback} from 'react';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport InfoIcon from '@mui/icons-material/Info';\nimport {CrosswalksDisplayProvider, noop} from '@reltio/components';\nimport {\n CrosswalkBase,\n CrosswalkTree,\n getCrosswalkColor as getUniqueCrosswalkColor,\n getCrosswalkId\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport {useStyles} from './styles';\n\ntype Props = {\n coloredCrosswalks: string[];\n crosswalkTree: CrosswalkTree;\n selected: boolean;\n title: string;\n onSelect?: () => void;\n};\n\nexport const SelectableTree = ({coloredCrosswalks, crosswalkTree, selected, title, onSelect = noop}: Props) => {\n const styles = useStyles();\n const getCrosswalkColor = useCallback(\n (crosswalk: CrosswalkBase) => {\n return coloredCrosswalks.includes(crosswalk.uri)\n ? getUniqueCrosswalkColor(getCrosswalkId(crosswalk))\n : '#CACCD1';\n },\n [coloredCrosswalks]\n );\n return (\n <CrosswalksDisplayProvider getCrosswalkColor={getCrosswalkColor}>\n <div className={styles.container} onClick={onSelect}>\n <span className={styles.title}>\n {title} <InfoIcon className={styles.hintIcon} />\n </span>\n <div className={classnames(styles.graph, {[`${styles.selectedTree}`]: selected})}>\n {selected && <CheckCircleIcon className={styles.checkedIcon} />}\n <CrosswalkTreeView crosswalkTree={crosswalkTree} disableUnmerge={true} />\n </div>\n </div>\n </CrosswalksDisplayProvider>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n dialogContainer: {\n maxWidth: 'unset'\n },\n dialogTitle: {\n padding: '13px 16px 0 16px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px'\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'column',\n padding: '13px 16px 0 16px'\n },\n trees: {\n display: 'flex'\n },\n uri: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.primary,\n marginBottom: '15px'\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary,\n paddingRight: '2px'\n }\n}));\n","import React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Typography from '@mui/material/Typography';\nimport {SelectableTree} from '../SelectableTree/SelectableTree';\nimport {\n collectCrosswalksFromContributor,\n Contributor,\n CrosswalkTree,\n getLastUriPart,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n contributor: Contributor;\n crosswalkTree: CrosswalkTree;\n canUnmerge?: boolean;\n onClose: () => void;\n onUnmergeContributor: (operationType: UnmergeOperation) => void;\n};\n\nexport const UnmergeDialog = ({canUnmerge, contributor, crosswalkTree, onClose, onUnmergeContributor}: Props) => {\n const styles = useStyles();\n\n const [unmergeOperation, setUnmergeOperation] = useState(UnmergeOperation.Unmerge);\n\n const getColoredCrosswalks = useCallback(\n (includeMerges: boolean) => collectCrosswalksFromContributor(contributor, includeMerges).map(({uri}) => uri),\n [contributor]\n );\n\n const unmergeContributor = () => {\n onUnmergeContributor(unmergeOperation);\n onClose();\n };\n\n return (\n <Dialog open={true} onClose={onClose} classes={{paper: styles.dialogContainer}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>{i18n.text('Unmerge')}</DialogTitle>\n <DialogContent classes={{root: styles.dialogContent}}>\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity URI:')}</span>\n {getLastUriPart(contributor.uri).toUpperCase()}\n </Typography>\n <div className={styles.trees}>\n <SelectableTree\n onSelect={() => setUnmergeOperation(UnmergeOperation.Unmerge)}\n selected={unmergeOperation === UnmergeOperation.Unmerge}\n title={i18n.text('Unmerge')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={getColoredCrosswalks(true)}\n />\n {contributor.merges && contributor.uri !== crosswalkTree.uri && (\n <SelectableTree\n onSelect={() => setUnmergeOperation(UnmergeOperation.TreeUnmerge)}\n selected={unmergeOperation === UnmergeOperation.TreeUnmerge}\n title={i18n.text('Tree unmerge')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={getColoredCrosswalks(false)}\n />\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button disabled={!canUnmerge} onClick={unmergeContributor} color=\"primary\">\n {i18n.text('Unmerge')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n dialogContainer: {\n maxWidth: 'unset'\n },\n dialogTitle: {\n padding: '13px 16px 0 16px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px'\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'column',\n padding: '13px 16px 0 16px'\n },\n uri: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.primary,\n marginBottom: '15px'\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary,\n paddingRight: '2px'\n }\n}));\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Typography from '@mui/material/Typography';\nimport {SelectableTree} from '../SelectableTree/SelectableTree';\nimport {collectCrosswalksFromContributor, Contributor, CrosswalkTree, getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n contributor: Contributor;\n crosswalkTree: CrosswalkTree;\n canUnsubscribe?: boolean;\n onClose: () => void;\n onUnsubscribeContributor: () => void;\n};\n\nexport const UnsubscribeDialog = ({\n canUnsubscribe,\n contributor,\n crosswalkTree,\n onClose,\n onUnsubscribeContributor\n}: Props) => {\n const styles = useStyles();\n\n const coloredCrosswalks = useMemo(\n () => collectCrosswalksFromContributor(contributor, true).map(({uri}) => uri),\n [contributor]\n );\n\n const unsubscribeContributor = () => {\n onUnsubscribeContributor();\n onClose();\n };\n\n return (\n <Dialog open={true} onClose={onClose} classes={{paper: styles.dialogContainer}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>{i18n.text('Unsubscribe')}</DialogTitle>\n <DialogContent classes={{root: styles.dialogContent}}>\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity URI:')}</span>\n {getLastUriPart(contributor.uri).toUpperCase()}\n </Typography>\n <SelectableTree\n selected\n title={i18n.text('Unsubscribe')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={coloredCrosswalks}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button disabled={!canUnsubscribe} onClick={unsubscribeContributor} color=\"primary\">\n {i18n.text('Unsubscribe')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n height: '100%'\n },\n modeSwitcher: {\n backgroundColor: theme.palette.background.paper,\n marginTop: '8px'\n },\n infoIcon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n hint: {\n color: theme.palette.text.secondary,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n margin: '5px 12px 10px 12px'\n },\n hintText: {\n fontSize: '12px',\n lineHeight: '16px'\n },\n crosswalksList: {\n height: '100%',\n width: 'calc(100% - 24px)',\n margin: '8px 12px',\n background: theme.palette.divider,\n opacity: 0.2\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n width: '100%'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport InfoIcon from '@mui/icons-material/Info';\nimport i18n from 'ui-i18n';\nimport {isEmpty} from 'ramda';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeType,\n calculateCrosswalkTreeDeep,\n checkMetadataPermission,\n Contributor,\n Crosswalk,\n CrosswalkBase,\n CrosswalkTree,\n DataTenant,\n Entity,\n getEntityType,\n getLabel,\n Metadata,\n MetadataPermissions,\n TEntityType,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\nimport {\n AddCrosswalkEvent,\n DeleteCrosswalkEvent,\n EditCrosswalkEvent,\n ModeSwitcher,\n noop,\n ResizablePanes\n} from '@reltio/components';\nimport {LegendMode, UnmergeContributorEvent, UnsubscribeContributorEvent} from '../../types';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport LegendTable from '../LegendTable/LegendTable';\nimport {UnmergeDialog} from '../UnmergeDialog/UnmergeDialog';\nimport {UnsubscribeDialog} from '../UnsubscribeDialog/UnsubscribeDialog';\n\nimport {useStyles} from './styles';\n\nexport const DEFAULT_LINK_HEIGHT = 60;\nexport const MIN_PANE1_SIZE = 170;\nexport const MIN_PANE2_SIZE = 170;\n\ntype Props = {\n activeMode: LegendMode;\n onChangeMode: (mode: LegendMode) => void;\n crosswalkTree: CrosswalkTree;\n entity: Entity;\n contributors: Contributor[];\n selectedAttributeTypes?: AttributeType[];\n readOnly?: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (event: UnmergeContributorEvent) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent) => void;\n};\n\nconst LegendView = ({\n activeMode,\n contributors,\n crosswalkTree,\n entity,\n onChangeMode,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop,\n ...tableProps\n}: Props) => {\n const styles = useStyles();\n\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityType: TEntityType = getEntityType(metadata, entity?.type);\n\n const viewRef = useRef<HTMLDivElement>();\n const [paneSize, setPaneSize] = useState(MIN_PANE1_SIZE);\n const handlePaneSizeChange = useCallback(({percentageSize}) => setPaneSize(percentageSize), []);\n\n const [contributorForUnmerge, setContributorForUnmerge] = useState<string>();\n const [unsubscribeInfo, setUnsubscribeInfo] = useState<{\n contributorUri: string;\n dataTenant: DataTenant;\n crosswalk: Crosswalk;\n }>();\n\n const crosswalkTreeDeep = useMemo(() => calculateCrosswalkTreeDeep(crosswalkTree), [crosswalkTree]);\n const canUnmerge = crosswalkTreeDeep > 1;\n\n useEffect(() => {\n const height = Math.max(MIN_PANE1_SIZE, crosswalkTreeDeep * DEFAULT_LINK_HEIGHT);\n const maxPaneHeight = viewRef.current?.clientHeight - MIN_PANE2_SIZE;\n setPaneSize(Math.min(maxPaneHeight, height));\n }, [crosswalkTreeDeep]);\n\n const modes = useMemo(\n () => [\n {\n id: LegendMode.Crosswalk,\n title: i18n.text('Crosswalk')\n },\n {\n id: LegendMode.Source,\n title: i18n.text('Source')\n },\n {\n id: LegendMode.Contributor,\n title: i18n.text('Contributor')\n }\n ],\n []\n );\n\n const [visibleCrosswalks, setVisibleCrosswalks] = useState<CrosswalkBase[]>();\n const accentContributors = activeMode === LegendMode.Contributor;\n const disableUnmerge = tableProps.readOnly || !checkMetadataPermission(MetadataPermissions.UNMERGE, entityType);\n\n return (\n <div className={styles.root} ref={viewRef}>\n {contributorForUnmerge && (\n <UnmergeDialog\n canUnmerge={canUnmerge}\n onClose={() => setContributorForUnmerge(null)}\n onUnmergeContributor={(operationType: UnmergeOperation) => {\n onUnmergeContributor({\n entityUri: entity.uri,\n contributorUri: contributorForUnmerge,\n operationType\n });\n }}\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === contributorForUnmerge)}\n />\n )}\n {unsubscribeInfo && (\n <UnsubscribeDialog\n canUnsubscribe={canUnmerge}\n onClose={() => setUnsubscribeInfo(null)}\n onUnsubscribeContributor={() =>\n onUnsubscribeContributor({\n dataTenant: unsubscribeInfo.dataTenant,\n crosswalk: unsubscribeInfo.crosswalk\n })\n }\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === unsubscribeInfo.contributorUri)}\n />\n )}\n <ModeSwitcher<LegendMode>\n modes={modes}\n modeId={activeMode}\n className={styles.modeSwitcher}\n onChange={onChangeMode}\n />\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n orientation=\"horizontal\"\n size={paneSize}\n minSize={MIN_PANE1_SIZE}\n maxSize={-MIN_PANE2_SIZE}\n allowResize\n onChange={handlePaneSizeChange}\n >\n <div className={styles.pane}>\n {crosswalkTree && !isEmpty(visibleCrosswalks) && (\n <CrosswalkTreeView\n entityLabel={getLabel(entity?.label)}\n crosswalkTree={crosswalkTree}\n visibleCrosswalks={visibleCrosswalks}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge || !canUnmerge}\n onUnmerge={setContributorForUnmerge}\n />\n )}\n </div>\n <div className={styles.pane}>\n <div className={styles.hint}>\n <InfoIcon className={styles.infoIcon} />\n <span className={styles.hintText}>\n {i18n.text('You can drag a crosswalk to add values to attributes swimlanes')}\n </span>\n </div>\n {entity && (\n <LegendTable\n onUnmergeContributor={setContributorForUnmerge}\n onUnsubscribeContributor={setUnsubscribeInfo}\n accentContributors={accentContributors}\n contributors={contributors}\n entity={entity}\n entityType={entityType}\n onChangeVisibleCrosswalks={setVisibleCrosswalks}\n canUnmerge={canUnmerge}\n disableUnmerge={disableUnmerge}\n {...tableProps}\n />\n )}\n </div>\n </ResizablePanes>\n </div>\n );\n};\n\nexport default memo(LegendView);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg4041339336a\",\n masktype: \"alpha\",\n maskUnits: \"userSpaceOnUse\",\n x: \"2\",\n y: \"3\",\n width: \"19\",\n height: \"17\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S4.83 6.5 4 6.5 2.5 5.83 2.5 5zM21 20H8v-2h13v2zM8 10h13V8H8v2zm0-4V4h13v2H8zm0 10h13v-2H8v2zm-2.5.5v-3h-3v3h3z\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg4041339336a)\"\n}, React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n d: \"M0 0h24v24H0z\"\n}))));","import {ErrorPopup} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport {getRequestErrorMessage} from '@reltio/mdm-sdk';\n\nexport const showErrorMessage = (error: unknown) => {\n console.error(error); // eslint-disable-line\n ErrorPopup.addError({\n title: i18n.text('Error'),\n message: getRequestErrorMessage(error, i18n.text('Something went wrong'))\n });\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"90\",\n height: \"90\",\n viewBox: \"0 0 90 90\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"45\",\n cy: \"45\",\n r: \"45\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg985456408a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"90\",\n height: \"90\"\n}, React.createElement(\"circle\", {\n cx: \"45\",\n cy: \"45\",\n r: \"45\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg985456408a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-5.625 3.164h90V90h-90V3.164z\",\n fill: \"url(#paint0_linear)\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M66.01 19.992l20.615 20.615v52.337H32.83L18.281 79.131V19.99H66.01z\",\n fill: \"url(#paint1_linear)\"\n}), React.createElement(\"path\", {\n opacity: \".06\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.523 20.39H87.54A2.46 2.46 0 0190 22.853v55.195a2.46 2.46 0 01-2.46 2.46H16.522a2.46 2.46 0 01-2.46-2.46V22.852a2.46 2.46 0 012.46-2.461z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.578 19.688h70.664c.971 0 1.758.787 1.758 1.757v55.196c0 .97-.787 1.757-1.758 1.757H17.578c-.97 0-1.758-.787-1.758-1.757V21.445c0-.97.787-1.758 1.758-1.758z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 25.536c0-.583.472-1.055 1.055-1.055h14.633a1.055 1.055 0 110 2.11H38.101a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 29.754c0-.582.472-1.054 1.055-1.054H60.54a1.055 1.055 0 110 2.11H37.969a1.055 1.055 0 01-1.055-1.056z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 57.305c0-.583.472-1.055 1.055-1.055h14.633a1.055 1.055 0 110 2.11H38.101a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 61.523c0-.582.472-1.054 1.055-1.054H60.54a1.055 1.055 0 110 2.11H37.969a1.055 1.055 0 01-1.055-1.056z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 67.852c0-.583.472-1.055 1.055-1.055h28.696a1.055 1.055 0 110 2.11H38.1a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 72.07c0-.582.472-1.054 1.055-1.054h26.087a1.055 1.055 0 110 2.109H37.97a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.648 36.21c0-.582.472-1.054 1.054-1.054h28.696a1.055 1.055 0 110 2.11H49.702a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.516 40.43c0-.583.472-1.055 1.054-1.055h22.572a1.055 1.055 0 110 2.11H49.57a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"27.773\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"27.773\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"42.188\",\n cy: \"37.266\",\n r: \"2.109\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"42.188\",\n cy: \"47.813\",\n r: \"2.109\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"59.414\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"69.961\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.648 46.758c0-.583.472-1.055 1.054-1.055h28.696a1.055 1.055 0 110 2.11H49.702a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.516 50.977c0-.583.472-1.055 1.054-1.055h26.088a1.055 1.055 0 110 2.11H49.57a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.524 37.969v-2.813h-.703v14.191h3.93v-.703h-3.227v-9.972h3.227v-.703h-3.227z\",\n fill: \"#2B98F0\"\n}), React.createElement(\"path\", {\n opacity: \".54\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M33.423 27.07l-1.242 1.243-1.243-1.243h2.485z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n opacity: \".6\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.578 7.734h65.39a2.11 2.11 0 012.11 2.11v6.328a2.11 2.11 0 01-2.11 2.11h-65.39a2.11 2.11 0 01-2.11-2.11V9.844a2.11 2.11 0 012.11-2.11z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M20.39 13.008a2.11 2.11 0 012.11-2.11h24.61a2.11 2.11 0 110 4.22H22.5a2.11 2.11 0 01-2.11-2.11zM52.031 13.008a2.11 2.11 0 012.11-2.11h3.515a2.11 2.11 0 110 4.22h-3.515a2.11 2.11 0 01-2.11-2.11z\",\n fill: \"#979797\"\n})), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: \"-5.625\",\n y1: \"3.164\",\n x2: \"-5.625\",\n y2: \"90\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear\",\n x1: \"93.557\",\n y1: \"63.672\",\n x2: \"54.451\",\n y2: \"27.31\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n height: '100%',\n overflow: 'hidden',\n background: theme.palette.background.default,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: '115px'\n },\n info: {\n color: theme.palette.text.secondary,\n fontSize: '16px',\n lineHeight: '24px',\n marginTop: '16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport EmptyIcon from './icons/EmptySources.svg';\n\nimport {useStyles} from './styles';\n\nconst EmptyState = () => {\n const styles = useStyles();\n\n return (\n <div className={styles.root}>\n <EmptyIcon />\n <span className={styles.info}>\n {i18n.text('Please persist your profile to be able to edit crosswalks')}\n </span>\n </div>\n );\n};\n\nexport default EmptyState;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n snackbarMessage: {\n display: 'flex',\n alignItems: 'center'\n },\n snackbarIcon: {\n paddingRight: 16\n }\n});\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, getLabel} from '@reltio/mdm-sdk';\nimport {UrlGeneratorsContext} from '@reltio/components';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport InfoIcon from '@mui/icons-material/Info';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n message: string;\n};\n\nconst TreeActionSnackbar = ({entity, message}: Props) => {\n const styles = useStyles();\n const uiPath = useSelector(mdmModule.selectors.getUIPath);\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n const entityLink = generateEntityUrl({uiPath, uri: entity.uri});\n\n return (\n <div className={styles.snackbarMessage}>\n <InfoIcon className={styles.snackbarIcon} />\n <Typography>\n {getLabel(entity.label)}{' '}\n <Link href={entityLink} target=\"_blank\" underline=\"hover\">\n {i18n.text('lookup profile')}\n </Link>{' '}\n {message}\n </Typography>\n </div>\n );\n};\n\nexport default TreeActionSnackbar;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n paddingTop: '14px',\n paddingBottom: '13px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.05)',\n whiteSpace: 'normal',\n '&:last-child': {\n borderBottom: 'none'\n }\n },\n label: {\n marginBottom: '2px',\n fontSize: '16px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n description: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary\n }\n}));\n","import React from 'react';\nimport {SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\n\ntype MenuItemProps = React.ComponentPropsWithoutRef<typeof MenuItem>;\n\ntype Props = {\n innerRef: React.Ref<HTMLLIElement>;\n innerProps: MenuItemProps;\n data: SurvivorshipGroupType;\n};\n\nexport const RulesetOption = ({innerRef, innerProps, data}: Props) => {\n const styles = useStyles();\n const {label, description} = data;\n\n return (\n <MenuItem className={styles.root} ref={innerRef} {...innerProps}>\n <Typography className={styles.label}>{label}</Typography>\n {description && <Typography className={styles.description}>{description}</Typography>}\n </MenuItem>\n );\n};\n","import React from 'react';\nimport {MenuListComponentProps} from 'react-select';\n\nexport const RulesetsMenuList = <OptionType, IsMulti extends boolean>(\n props: MenuListComponentProps<OptionType, IsMulti>\n) => {\n const {innerRef, getStyles, children} = props;\n const styles = {...getStyles('menuList', props), maxHeight: '500px', padding: 0};\n return (\n <div ref={innerRef} style={styles}>\n {children}\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n width: '280px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, propEq, prop} from 'ramda';\nimport {DropDownSelector} from '@reltio/components';\nimport {getLabel, SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport {RulesetOption} from './RulesetOption/RulesetOption';\nimport {RulesetsMenuList} from './RulesetsMenuList/RulesetsMenuList';\nimport {useStyles} from './styles';\n\ntype Props = {\n survivorshipGroups: SurvivorshipGroupType[];\n currentSurvivorshipGroupUri: string;\n onChange: (uri: string) => void;\n};\n\nexport const RulesetsSelector = ({survivorshipGroups, currentSurvivorshipGroupUri, onChange}: Props) => {\n const styles = useStyles();\n const options = survivorshipGroups.map((group) => ({...group, label: getLabel(group.label)}));\n const value = options.find(propEq('uri', currentSurvivorshipGroupUri));\n return (\n <DropDownSelector\n height={40}\n className={styles.root}\n components={{Option: RulesetOption, MenuList: RulesetsMenuList}}\n label={i18n.text('Rulesets')}\n options={options}\n value={value}\n onChange={pipe(prop('uri'), onChange)}\n />\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n sourcesView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n display: 'flex'\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%'\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n headerDivider: {\n marginLeft: '16px',\n marginRight: '8px',\n height: '32px',\n borderColor: 'rgba(0, 0, 0, 0.12)'\n },\n attributesTable: {\n backgroundColor: '#fff'\n }\n});\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {Dispatch} from 'redux';\nimport {connect} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {equals, pipe, pluck, propEq, reject} from 'ramda';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n ApiError,\n ApiErrorCode,\n AttributeType,\n collectContributorsFromTree,\n Entity,\n getEntityType,\n HistoryEvent,\n Metadata,\n SourcesPerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport {\n AttributesTable,\n CrosswalkDragLayer,\n CrosswalksDisplayProvider,\n ExpandedAttributesProvider,\n HistoryHeader,\n HistoryPanelEmptyState,\n HistoryView,\n ProfileResizablePanes,\n ScreenProfileBand,\n useDidUpdateEffect,\n useHistory,\n useHistoryEnabled,\n useHistorySlice,\n useModifiedEntity,\n useSavedState,\n useSnackbar\n} from '@reltio/components';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport HistoryIcon from '@mui/icons-material/History';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport LegendView from '../LegendView/LegendView';\nimport {LegendMode, SourcesSavedState} from '../../types';\nimport {useCrosswalkTree} from '../../hooks/useCrosswalkTree';\nimport LegendIcon from './icons/LegendIcon.svg';\nimport {showErrorMessage} from '../../services/errors';\nimport {useCrosswalkTreeActions} from '../../hooks/useCrosswalkTreeActions';\nimport {useCrosswalksDisplay} from '../../hooks/useCrosswalksDisplay';\nimport {useEntityWithSurvivorshipGroups} from '../../hooks/useEntityWithSurvivorshipGroups';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport {DndProvider} from 'react-dnd';\nimport EmptyState from '../EmptyState/EmptyState';\nimport TreeActionSnackbar from '../TreeActionSnackbar/TreeActionSnackbar';\nimport {RulesetsSelector} from '../RulesestsSelector/RulesestsSelector';\nimport {useStyles} from './styles';\n\nconst perspectiveId = 'source';\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n entity: Entity;\n metadata: Metadata;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: () => Promise<SourcesSavedState>;\n dispatch: Dispatch;\n historyEvent: HistoryEvent;\n};\n\nenum ActivePanel {\n Legend,\n History\n}\n\nconst SourcesView = ({\n config,\n entity: defaultEntity,\n metadata,\n getSavedState,\n saveState,\n dispatch,\n historyEvent\n}: Props) => {\n const styles = useStyles();\n const [activeMode, setActiveMode] = useState(LegendMode.Crosswalk);\n const [isCrosswalkTreeLoading, setIsCrosswalkTreeLoading] = useState(false);\n\n const {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isDefaultSurvivorshipGroupUri,\n isLoading: isEntityLoading\n } = useEntityWithSurvivorshipGroups(defaultEntity);\n\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({\n perspectiveId,\n entity,\n historyButtonId: ActivePanel.History\n });\n\n const persistedEntity = isProfilePersisted ? entity : null;\n\n const entityUri = persistedEntity?.uri;\n const entityType = getEntityType(metadata, entity?.type);\n\n const {historySlice} = useHistorySlice({entity: persistedEntity, historyEvent});\n\n const [selectedAttrTypes, setSelectedAttrTypes] = useState<AttributeType[]>();\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [historySlice]);\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [entityUri]);\n\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar({\n anchorOrigin: {vertical: 'top', horizontal: 'center'},\n showDismiss: true\n });\n const {isLoaded, savedState} = useSavedState<SourcesSavedState>(getSavedState);\n const [visibleColumns, setVisibleColumns] = useState<string[]>();\n useEffect(() => {\n if (isLoaded) {\n setVisibleColumns(savedState.visibleColumns);\n }\n }, [isLoaded]); // eslint-disable-line\n useEffect(() => {\n const hasVisibleColumnsChanged = !equals(visibleColumns, savedState.visibleColumns);\n if (isLoaded && hasVisibleColumnsChanged) {\n saveState({visibleColumns});\n }\n }, [visibleColumns]); // eslint-disable-line\n\n const onCrosswalkTreeLoaded = useCallback(() => {\n setIsCrosswalkTreeLoading(false);\n }, []);\n\n const {crosswalkTree, reload: reloadCrosswalkTree} = useCrosswalkTree({\n entityUri: historySlice?.aEntity.uri || entityUri,\n onSuccess: onCrosswalkTreeLoaded\n });\n const contributors = useMemo(() => collectContributorsFromTree(crosswalkTree), [crosswalkTree]);\n\n const refreshEntity = useCallback(() => {\n entityUri &&\n dispatch(\n profile.entity.actions.loadEntity({\n viewId: config.id,\n uri: entityUri\n })\n );\n }, [entityUri, config, dispatch]);\n\n const refreshData = useCallback(pipe(refreshEntity, reloadCrosswalkTree), [refreshEntity, reloadCrosswalkTree]);\n\n const {\n modifiedEntity,\n crosswalksMap,\n newlyCreatedAttributes,\n onDeleteAttribute,\n onPinAttribute,\n onIgnoreAttribute,\n onEditAttribute,\n onAddAttribute,\n emptyTempAttributeUris\n } = useModifiedEntity({\n entity: historySlice?.aEntity || persistedEntity,\n onModify: refreshData,\n onError: showErrorMessage\n });\n\n const displayProps = useCrosswalksDisplay({activeMode, contributors, entity});\n const onShowMessage = useCallback((message: string, entity?: Entity) => {\n showSnackbarMessage(entity ? <TreeActionSnackbar entity={entity} message={message} /> : message);\n }, []);\n\n const {addCrosswalk, deleteCrosswalk, editCrosswalk, unmergeContributor, unsubscribeContributor} =\n useCrosswalkTreeActions({\n onShowMessage,\n onSuccess: refreshData,\n onError: useCallback(\n (error: ApiError) => {\n showErrorMessage(error);\n if (error.errorCode === ApiErrorCode.CROSSWALK_NOT_FOUND) {\n refreshData();\n }\n },\n [refreshData]\n ),\n onLoad: useCallback(() => setIsCrosswalkTreeLoading(true), [])\n });\n\n const {\n historyFilter,\n onApplyFilter,\n isLoading: isHistoryLoading,\n historicUris,\n historyWithTotal,\n canLoadMore,\n onLoadMore\n } = useHistory({entity: persistedEntity, enabled: isHistoryEnabled});\n\n const tabs = [\n {\n buttonProps: {\n id: ActivePanel.Legend,\n icon: LegendIcon,\n tooltipTitle: i18n.text('Legend')\n },\n title: <Typography variant=\"h6\">{i18n.text('Legend')}</Typography>,\n content: (\n <LegendView\n activeMode={activeMode}\n onChangeMode={setActiveMode}\n entity={historySlice?.aEntity || persistedEntity}\n crosswalkTree={crosswalkTree}\n contributors={contributors}\n selectedAttributeTypes={selectedAttrTypes}\n readOnly={!!historySlice || isCrosswalkTreeLoading}\n onAddCrosswalk={addCrosswalk}\n onUnmergeContributor={unmergeContributor}\n onUnsubscribeContributor={unsubscribeContributor}\n onEditCrosswalk={editCrosswalk}\n onDeleteCrosswalk={deleteCrosswalk}\n />\n )\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n title: (\n <HistoryHeader\n total={(historicUris?.length || 0) + 1}\n entityType={entityType}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n ),\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isHistoryLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entityUri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n )\n }\n ];\n const additionalHeaderItems = (\n <>\n <RulesetsSelector\n survivorshipGroups={survivorshipGroups}\n currentSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n onChange={onChangeSurvivorshipGroup}\n />\n <Divider className={styles.headerDivider} orientation=\"vertical\" />\n </>\n );\n\n return (\n <div className={styles.sourcesView}>\n <CrosswalksDisplayProvider {...displayProps}>\n <DndProvider backend={HTML5Backend}>\n <CrosswalkDragLayer />\n <ProfileResizablePanes\n perspectiveId={perspectiveId}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n >\n <>\n <ScreenProfileBand entity={entity} historySlice={historySlice} />\n {isProfilePersisted ? (\n <ExpandedAttributesProvider attributeUris={newlyCreatedAttributes}>\n <AttributesTable\n className={styles.attributesTable}\n isLoading={isEntityLoading}\n visibleColumns={visibleColumns}\n onChangeVisibleColumns={setVisibleColumns}\n entity={modifiedEntity}\n crosswalksMap={crosswalksMap}\n selectedAttributeTypes={selectedAttrTypes}\n onSelectAttributeTypes={setSelectedAttrTypes}\n readOnly={!!historySlice || !isDefaultSurvivorshipGroupUri}\n onDelete={onDeleteAttribute}\n onPin={onPinAttribute}\n onIgnore={onIgnoreAttribute}\n onEdit={onEditAttribute}\n onAdd={onAddAttribute}\n emptyTempAttributeUris={emptyTempAttributeUris}\n additionalHeaderItems={additionalHeaderItems}\n activeSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n />\n </ExpandedAttributesProvider>\n ) : (\n <EmptyState />\n )}\n </>\n <RightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </DndProvider>\n </CrosswalksDisplayProvider>\n <SnackbarRenderer />\n </div>\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n entity: mdmModule.selectors.getEntity(state),\n metadata: mdmModule.selectors.getMetadata(state),\n historyEvent: mdmModule.selectors.getHistoryEvent(state)\n };\n};\n\nexport default connect(mapStateToProps)(SourcesView);\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pipe, propOr, find, propEq, prop} from 'ramda';\nimport {getEntityType, getEntityBySurvivorshipGroupUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useEntityWithSurvivorshipGroups = (defaultEntity: Entity) => {\n const entityTypeUri = defaultEntity?.type;\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const survivorshipGroups = pipe(getEntityType(metadata), propOr([], 'survivorshipGroups'))(entityTypeUri);\n const defaultSurvivorshipGroupUri = pipe(find(propEq('default', true)), prop('uri'))(survivorshipGroups);\n const [currentSurvivorshipGroupUri, setCurrentSurvivorshipGroupUri] = useState(null);\n const [entity, setEntity] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n\n useEffect(() => {\n if (defaultEntity) {\n setEntity(defaultEntity);\n setCurrentSurvivorshipGroupUri(defaultSurvivorshipGroupUri);\n }\n }, [defaultEntity, defaultSurvivorshipGroupUri]);\n\n const onChangeSurvivorshipGroup = useCallback(\n (survivorshipGroupUri: string) => {\n setCurrentSurvivorshipGroupUri(survivorshipGroupUri);\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === survivorshipGroupUri;\n if (!isDefaultSurvivorshipGroupUri) {\n setIsLoading(true);\n safePromise(getEntityBySurvivorshipGroupUri(entity.uri, survivorshipGroupUri))\n .then(setEntity)\n .finally(() => setIsLoading(false));\n } else {\n setEntity(defaultEntity);\n }\n },\n [defaultEntity, defaultSurvivorshipGroupUri, entity, safePromise]\n );\n\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === currentSurvivorshipGroupUri;\n\n return {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isLoading,\n isDefaultSurvivorshipGroupUri\n };\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {getCrosswalkTree, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {noop, useSafePromise} from '@reltio/components';\n\ntype Props = {\n entityUri?: string;\n onSuccess?: () => void;\n};\n\nexport const useCrosswalkTree = ({entityUri, onSuccess = noop}: Props) => {\n const [crosswalkTree, setCrosswalkTree] = useState<CrosswalkTree>(null);\n const safePromise = useSafePromise();\n\n const onError = (e) => {\n console.warn('Failed to load crosswalk tree', e);\n setCrosswalkTree(null);\n };\n\n const loadData = useCallback(() => {\n if (entityUri) {\n safePromise(getCrosswalkTree({entityUri}))\n .then((results) => {\n setCrosswalkTree(results);\n })\n .catch(onError)\n .finally(onSuccess);\n } else {\n setCrosswalkTree(null);\n onSuccess();\n }\n }, [entityUri, onSuccess]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return {crosswalkTree, reload: loadData};\n};\n","import {useCallback, useEffect, useMemo, useState, useRef} from 'react';\nimport {any, concat} from 'ramda';\nimport {LegendMode} from '../types';\nimport {\n Contributor,\n CrosswalkBase,\n debounce,\n Entity,\n eqCrosswalks,\n findContributorForCrosswalk,\n getContributorColor,\n getCrosswalkColor,\n getCrosswalkId,\n getSourceColor\n} from '@reltio/mdm-sdk';\n\ntype Props = {\n activeMode: LegendMode;\n contributors: Contributor[];\n entity: Entity;\n};\n\nexport const useCrosswalksDisplay = ({activeMode, contributors, entity}: Props) => {\n const getCrosswalkColorForActiveMode = useCallback(\n (crosswalk: CrosswalkBase) => {\n switch (activeMode) {\n case LegendMode.Source:\n return getSourceColor(crosswalk.type);\n case LegendMode.Contributor:\n return getContributorColor(findContributorForCrosswalk(contributors, crosswalk)?.uri || '');\n case LegendMode.Crosswalk:\n return getCrosswalkColor(getCrosswalkId(crosswalk));\n }\n },\n [activeMode, contributors]\n );\n const [highlightedCrosswalks, setHighlightedCrosswalks] = useState<CrosswalkBase[]>([]);\n const highlightedCrosswalksCache = useRef([]);\n const applyHighlightedCrosswalks = useCallback(\n debounce(() => {\n setHighlightedCrosswalks([...highlightedCrosswalksCache.current]);\n }, 50),\n []\n );\n const cacheHighlightedCrosswalks = useCallback(\n (arr) => {\n highlightedCrosswalksCache.current = arr;\n applyHighlightedCrosswalks(arr);\n },\n [applyHighlightedCrosswalks]\n );\n\n const setCrosswalkHighlighted = useCallback(\n (crosswalk: CrosswalkBase, highlighted: boolean) => {\n if (!crosswalk) return;\n if (highlighted) {\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n cacheHighlightedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])]);\n } else {\n cacheHighlightedCrosswalks([crosswalk]);\n }\n } else {\n cacheHighlightedCrosswalks([]);\n }\n },\n [activeMode, cacheHighlightedCrosswalks, contributors]\n );\n\n const [focusedCrosswalks, setFocusedCrosswalks] = useState<CrosswalkBase[]>([]);\n const calculateFocusedCrosswalks = useCallback(\n (prev: CrosswalkBase[], next: CrosswalkBase[]) =>\n concat(\n prev.filter((prevCrosswalk) => !any(eqCrosswalks(prevCrosswalk), next)),\n next.filter((nextCrosswalk) => !any(eqCrosswalks(nextCrosswalk), prev))\n ),\n []\n );\n const toggleCrosswalkFocus = useCallback(\n (crosswalk: CrosswalkBase) => {\n if (!crosswalk) return;\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n setFocusedCrosswalks((prevValue) =>\n calculateFocusedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])], prevValue)\n );\n } else {\n setFocusedCrosswalks((prevValue) => calculateFocusedCrosswalks([crosswalk], prevValue));\n }\n },\n [activeMode, calculateFocusedCrosswalks, contributors]\n );\n\n useEffect(() => {\n if (focusedCrosswalks.length) {\n setFocusedCrosswalks([]);\n }\n }, [activeMode, entity]);\n\n return {\n getCrosswalkColor: getCrosswalkColorForActiveMode,\n highlightedCrosswalks: useMemo(\n () => [...highlightedCrosswalks, ...focusedCrosswalks],\n [highlightedCrosswalks, focusedCrosswalks]\n ),\n focusedCrosswalks,\n toggleCrosswalkFocus,\n setCrosswalkHighlighted\n };\n};\n","import {useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport {andThen, pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {\n Entity,\n unmergeContributor as unmergeContributorRequest,\n unsubscribeEntityFromDataTenantEntity\n} from '@reltio/mdm-sdk';\nimport {useCrosswalkActions, noop} from '@reltio/components';\nimport {UnmergeContributorEvent, UnsubscribeContributorEvent} from '../types';\n\ntype Props = {\n onLoad?: () => void;\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n onShowMessage?: (message: string, entity?: Entity) => void;\n};\n\nexport const useCrosswalkTreeActions = ({\n onLoad = noop,\n onSuccess = noop,\n onError = noop,\n onShowMessage = noop\n}: Props) => {\n const {addCrosswalk, editCrosswalk, deleteCrosswalk} = useCrosswalkActions({onLoad, onSuccess, onError});\n const dtssPath = useSelector(mdm.selectors.getDtssPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n\n const handleAction = useCallback(\n (request: Promise<unknown>) => {\n onLoad();\n request\n .then(() => {\n onSuccess();\n })\n .catch(onError);\n },\n [onLoad, onError, onSuccess]\n );\n\n const unmergeContributor = useCallback(\n (event: UnmergeContributorEvent) =>\n pipe(\n unmergeContributorRequest,\n andThen((response) => {\n onShowMessage(i18n.text('has been unmerged'), response.b);\n return response;\n }),\n handleAction\n )(event),\n [handleAction, onShowMessage]\n );\n\n const unsubscribeContributor = useCallback(\n ({crosswalk, dataTenant}: UnsubscribeContributorEvent) =>\n pipe(\n unsubscribeEntityFromDataTenantEntity,\n andThen((response) => {\n if (!response.successful) throw new Error(i18n.text('Failed to unsubscribe contributor'));\n return response;\n }),\n handleAction\n )({\n dtssPath,\n value: crosswalk.value,\n type: crosswalk.type,\n sourceTable: crosswalk.sourceTable,\n dataTenant: dataTenant.id,\n customerTenant: tenant\n }),\n [handleAction, dtssPath, tenant]\n );\n\n return {\n addCrosswalk,\n editCrosswalk,\n deleteCrosswalk,\n unmergeContributor,\n unsubscribeContributor\n };\n};\n","import React, {useCallback} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\n\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {SourcesSavedState} from '../../types';\nimport SourcesView from './SourcesView';\nimport {promisifyCallback, SourcesPerspectiveConfig} from '@reltio/mdm-sdk';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'sourcesPerspective',\n disableGlobal: true,\n seed: 'srcs'\n});\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: (clb: (state: SourcesSavedState) => void) => void;\n};\n\nconst SourcesPerspective = ({config, store, onResize, saveState, getSavedState}: Props) => {\n const getSavedStatePromisified: () => Promise<SourcesSavedState> = useCallback(promisifyCallback(getSavedState), [\n getSavedState\n ]);\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize?.(Math.floor(width), Math.floor(height))}\n />\n {config && (\n <SourcesView\n config={config}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n )}\n <ErrorPopup />\n </LocalizationProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default SourcesPerspective;\n","import {SourcesView} from '@reltio/sources';\n\nexport default SourcesView;\n"],"names":["useStyles","makeStyles","resizablePanesWrapper","flexGrow","height","marginRight","pane","position","top","left","right","bottom","display","flexDirection","overflow","DEFAULT_R_PANE_SIZE","ProfileResizablePanes","perspectiveId","children","buttonsProps","disabled","defaultTab","styles","perspectiveSettings","updatePerspectiveSettings","usePerspectivesSettings","width","active","isSidePanelOpen","isNil","handleUpdateSettings","useCallback","newSetting","toggleActive","newId","resetActive","handlePaneSizeChange","size","ResizablePanes","className","primary","orientation","minSize","maxSize","allowResize","onChange","debounceInterval","cloneElement","onClose","SideButtonsPanel","onButtonClick","activeIndexId","displayName","theme","container","flexShrink","paddingTop","backgroundColor","palette","background","paper","boxShadow","alpha","main","color","content","borderRadius","buttonWrapper","alignItems","justifyContent","margin","text","secondary","classes","iconButtonClasses","classnames","map","id","buttonProps","SmallIconButton","key","onClick","PerspectivesSettingsContext","React","settings","useContext","useSavedState","getSavedState","isLoaded","setIsLoaded","useState","savedState","setSavedState","useEffect","then","_","catch","header","padding","borderBottom","closeButton","RightSidePanel","tabs","title","icon","CloseIcon","LegendMode","sumValues","links","pipe","prop","sum","data","useMemo","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","sankey","graph","forEach","node","sourceLinks","targetLinks","link","source","push","target","computeNodeLinks","value","Math","max","computeNodeValues","length","nextNodes","remainingNodes","x","dx","indexOf","w","computeNodeBreadths","nodesByBreadth","groupBy","toPairs","sort","a","b","nth","ky","reduce","min","Infinity","i","y","dy","initializeNodeDepth","y0","n","y1","last","computeNodeDepths","computeLinkDepths","concat","ty","correctNodesDepth","result","linksByUuid","l","crosswalk","uuid","sourceNodes","this","j","index","resultByUuid","newSources","filter","sizeForNewSources","sy","setNodeWidth","setNodePadding","setSmallestNodeMaxHeight","setSmallestNodeMinHeight","setSize","newSize","update","curvature","d","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","path","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","tooltipTitle","fontWeight","fontSize","lineHeight","letterSpacing","marginBottom","userSelect","tooltipRow","tooltipIcon","stroke","strokeWidth","strokeOpacity","rootNode","transform","popupContainer","boxSizing","user","time","i18n","CalendarToday","Person","LightArrowTooltip","placement","_extends","Object","assign","prototype","hasOwnProperty","call","apply","props","viewBox","version","xmlns","xmlnsXlink","fill","fillRule","xlinkHref","fillOpacity","mask","highlightEnabled","isColored","disableUnmerge","onUnmerge","isDragging","labelX","setLabelX","anchorEl","setAnchorEl","textRef","useRef","name","label","entity","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","closePopup","nodeHeight","textWidth","current","clientWidth","ref","opacity","onMouseEnter","onMouseLeave","noop","e","currentTarget","cursor","Popover","open","anchorOrigin","vertical","horizontal","UnmergeIcon","timeMap","sources","start","end","acc","head","renderMergeNodes","accentContributors","setDragging","isMouseDown","setMouseDown","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","event","pageX","onUp","pointerEvents","onMouseDown","preventDefault","onMouseMove","onMouseUp","isCrosswalkDisplayed","curry","displayedCrosswalks","some","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","count","addIdToSubtree","loser","processTree","processSubTree","parentIndex","uri","mergesCrosswalks","chain","Date","now","linkedNodes","uniq","includes","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","root","paddingRight","marginLeft","focusedIcon","isFocused","paddingLeft","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","Typography","variant","getLastUriPart","Spacer","show","showForDisabled","contributorColor","border","borderLeft","marginTop","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","useSelector","mdm","scrollToCrosswalk","useHighlightedCrosswalks","find","type","propOr","values","flatten","scrollIntoView","behavior","showEditor","setShowEditor","contributorCrosswalk","pluck","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnsubscribeIcon","dataTenant","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","maxWidth","entityType","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","readOnly","onAddCrosswalk","onEditCrosswalk","onDeleteCrosswalk","onUnmergeContributor","rowsData","entityCrosswalks","relationCrosswalks","getRelationCrosswalks","contributor","isEmptyValue","ownerType","relationCrosswalk","entityCrosswalk","groupCrosswalksByTypesAndSources","buildTableRowsData","expandedByContributor","setExpandedByContributor","isExpandedSource","collectVisibleCrosswalks","handleDelete","crosswalkId","entityUri","handleEdit","params","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","sourceUri","unless","has","assoc","ifElse","without","append","hintIcon","verticalAlign","checkedIcon","selectedTree","SelectableTree","coloredCrosswalks","selected","onSelect","getCrosswalkColor","getUniqueCrosswalkColor","getCrosswalkId","Info","CheckCircle","dialogContainer","dialogTitle","dialogContent","trees","UnmergeDialog","unmergeOperation","setUnmergeOperation","UnmergeOperation","getColoredCrosswalks","includeMerges","collectCrosswalksFromContributor","Dialog","DialogTitle","DialogContent","toUpperCase","DialogActions","Button","UnsubscribeDialog","canUnsubscribe","modeSwitcher","infoIcon","hint","alignSelf","hintText","crosswalksList","divider","activeMode","onChangeMode","tableProps","metadata","mdmModule","getEntityType","viewRef","paneSize","setPaneSize","percentageSize","contributorForUnmerge","setContributorForUnmerge","unsubscribeInfo","setUnsubscribeInfo","crosswalkTreeDeep","calculateCrosswalkTreeDeep","maxPaneHeight","clientHeight","modes","Crosswalk","Source","Contributor","setVisibleCrosswalks","checkMetadataPermission","MetadataPermissions","operationType","ModeSwitcher","modeId","isEmpty","getLabel","masktype","maskUnits","clipRule","showErrorMessage","error","console","ErrorPopup","message","getRequestErrorMessage","cx","cy","r","style","maskType","y2","gradientUnits","stopColor","stopOpacity","offset","default","info","snackbarMessage","snackbarIcon","uiPath","generateEntityUrl","UrlGeneratorsContext","entityLink","href","underline","paddingBottom","whiteSpace","description","RulesetOption","innerRef","innerProps","MenuItem","RulesetsMenuList","getStyles","maxHeight","RulesetsSelector","survivorshipGroups","currentSurvivorshipGroupUri","options","group","propEq","DropDownSelector","components","Option","MenuList","sourcesView","fontFamily","headerDivider","borderColor","attributesTable","ActivePanel","connect","state","historyEvent","config","defaultEntity","saveState","dispatch","setActiveMode","isCrosswalkTreeLoading","setIsCrosswalkTreeLoading","onChangeSurvivorshipGroup","isDefaultSurvivorshipGroupUri","isLoading","isEntityLoading","entityTypeUri","defaultSurvivorshipGroupUri","setCurrentSurvivorshipGroupUri","setEntity","setIsLoading","safePromise","useSafePromise","survivorshipGroupUri","getEntityBySurvivorshipGroupUri","finally","useEntityWithSurvivorshipGroups","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyButtonId","History","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","undefined","SnackbarRenderer","showSnackbarMessage","useSnackbar","showDismiss","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","onCrosswalkTreeLoaded","reload","reloadCrosswalkTree","onSuccess","setCrosswalkTree","onError","warn","loadData","getCrosswalkTree","results","useCrosswalkTree","aEntity","collectContributorsFromTree","refreshEntity","profile","viewId","refreshData","modifiedEntity","crosswalksMap","newlyCreatedAttributes","onDeleteAttribute","onPinAttribute","onIgnoreAttribute","onEditAttribute","onAddAttribute","emptyTempAttributeUris","useModifiedEntity","onModify","displayProps","getCrosswalkColorForActiveMode","getSourceColor","findContributorForCrosswalk","highlightedCrosswalks","setHighlightedCrosswalks","highlightedCrosswalksCache","applyHighlightedCrosswalks","debounce","cacheHighlightedCrosswalks","arr","setCrosswalkHighlighted","highlighted","focusedCrosswalks","setFocusedCrosswalks","calculateFocusedCrosswalks","prev","next","prevCrosswalk","any","nextCrosswalk","prevValue","useCrosswalksDisplay","onShowMessage","addCrosswalk","deleteCrosswalk","editCrosswalk","unmergeContributor","unsubscribeContributor","onLoad","useCrosswalkActions","dtssPath","tenant","handleAction","request","unmergeContributorRequest","andThen","response","unsubscribeEntityFromDataTenantEntity","successful","Error","sourceTable","customerTenant","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","isHistoryLoading","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabled","Legend","LegendIcon","HistoryIcon","HistoryHeader","total","HistoryView","contributorsUris","HistoryPanelEmptyState","additionalHeaderItems","Divider","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","reject","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","activeSurvivorshipGroupUri","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","store","onResize","getSavedStatePromisified","promisifyCallback","Provider","ViewIdContext","StylesProvider","LocalizationProvider","dateAdapter","AdapterMoment","floor"],"sourceRoot":""}
|