VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /proc/self/root/opt/mattermost/client/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/self/root/opt/mattermost/client/678.a828e56e1990474faea2.js.map
{"version":3,"file":"678.a828e56e1990474faea2.js","mappings":"4gBAiBA,MAAMA,EAAY,CAACC,GAAI,EAAGC,EAAG,IAEhBC,EAAaA,KACtB,MAAM,cAACC,IAAiBC,EAAAA,EAAAA,WACxB,OAAQC,IAAAA,cAACC,EAAAA,EAAW,CAACC,QAASC,EAAAA,EAAmBC,aAEzCN,EAAc,CACVO,GAAI,2BACJC,eAAgB,OAGd,EAGLC,EAAeA,KACxB,MAAM,cAACT,IAAiBC,EAAAA,EAAAA,WACxB,OAAQC,IAAAA,cAACC,EAAAA,EAAW,CAACC,QAASC,EAAAA,EAAmBC,aAEzCN,EAAc,CACVO,GAAI,6BACJC,eAAgB,SAGd,EAqDlB,EAlD2BE,KACvB,MAAM,cAACV,IAAiBC,EAAAA,EAAAA,WAClBU,GAAeC,EAAAA,EAAAA,cAAaC,IAC9BC,EAAAA,EAAAA,IAAgBD,KAEdE,EACFb,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,8BACHC,eAAgB,iBAIlBS,EACFf,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,SACKF,EAAc,CACXO,GAAI,uCACJC,eAAgB,8JAGxBN,IAAAA,cAAA,SAEKF,EAAc,CACXO,GAAI,uCACJC,eAAgB,wDAEpB,CACIU,MAAOhB,IAAAA,cAACH,EAAU,MAClBoB,QAASjB,IAAAA,cAACO,EAAY,UAOhCW,EAAcT,EAAe,CAAC,+BAAgC,kCAAoC,CAAC,0BACnGU,GAAkBC,EAAAA,EAAAA,IAAoBF,EAAa,IAEzD,OACIlB,IAAAA,cAACqB,EAAAA,EAAU,CACPR,MAAOA,EACPE,OAAQA,EACRI,gBAAiBA,EACjBG,UAAU,cACVC,sBAAsB,cACtBC,sBAAuB9B,GACzB,EC3CV,EAnC6B+B,KACzB,MAAM,cAAC3B,IAAiBC,EAAAA,EAAAA,WAClBc,EACFb,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,gCACHC,eAAgB,mBAIlBS,EACFf,IAAAA,cAAA,SACKF,EACG,CACIO,GAAI,sCACJC,eAAgB,0EAEpB,CACIoB,EAAIC,GAAkB3B,IAAAA,cAAA,SAAI2B,MAKpCR,GAAkBC,EAAAA,EAAAA,IAAoB,CAAC,8BAA+B,IAE5E,OACIpB,IAAAA,cAACqB,EAAAA,EAAU,CACPR,MAAOA,EACPE,OAAQA,EACRI,gBAAiBA,EACjBG,UAAU,eACVC,sBAAsB,UACxB,E,sHChCV,MAAMK,EAAgBC,IAAA,IAAC,MAACC,EAAK,OAAEC,GAAiBF,EAAA,OAC5C7B,IAAAA,cAAA,OACI8B,OAAOA,aAAK,EAALA,EAAOE,aAAc,KAC5BD,QAAQA,aAAM,EAANA,EAAQC,aAAc,KAC9BC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENnC,IAAAA,cAAA,KAAGoC,SAAS,yBACRpC,IAAAA,cAAA,QACIqC,EAAE,+uBACFH,KAAK,0BAETlC,IAAAA,cAAA,QACIqC,EAAE,kXACFH,KAAK,YAETlC,IAAAA,cAAA,QACIqC,EAAE,4kBACFH,KAAK,6BAETlC,IAAAA,cAAA,QACIqC,EAAE,2kBACFH,KAAK,6BAETlC,IAAAA,cAAA,QACIqC,EAAE,skBACFH,KAAK,6BAETlC,IAAAA,cAAA,QACIqC,EAAE,+hBACFH,KAAK,YAETlC,IAAAA,cAAA,QACIsC,QAAQ,MACRD,EAAE,gZACFH,KAAK,6BAETlC,IAAAA,cAAA,QACIqC,EAAE,2eACFH,KAAK,QACLK,YAAY,QAEhBvC,IAAAA,cAAA,QACIqC,EAAE,m1BACFH,KAAK,YAETlC,IAAAA,cAAA,QACIqC,EAAE,+aACFH,KAAK,0BAETlC,IAAAA,cAAA,QACIqC,EAAE,oFACFH,KAAK,aAGblC,IAAAA,cAAA,YACIA,IAAAA,cAAA,YAAUK,GAAG,mBACTL,IAAAA,cAAA,QACI8B,MAAM,KACNC,OAAO,KACPG,KAAK,+BAIf,EAERN,EAAAY,UAAA,CAvEEV,MAAKW,IAAAA,OACLV,OAAMU,IAAAA,QAwEV,U,kMCjEA,MAAMC,G,OAAQC,GAAAA,KAAWC,WAAA,CAAAC,YAAA,SAAXF,CAAW,qKAWAG,GACVA,EAAMC,WAAaC,GAAAA,EAAaC,OAAS,oCAAsC,oCAI/E,SAASC,GAAarB,GAA+B,IAA9B,SAACkB,EAAQ,UAAEI,GAAiBtB,EAC9D,OAAIkB,IAAaC,GAAAA,EAAaC,QAAUF,IAAaC,GAAAA,EAAaI,UACvD,KAIPpD,IAAAA,cAAC0C,GAAK,CACFS,UAAWA,EACXJ,SAAUA,GAETA,IAAaC,GAAAA,EAAaC,OACvBjD,IAAAA,cAACqD,EAAAA,iBAAgB,CAACC,KAAM,KAExBtD,IAAAA,cAACuD,EAAAA,uBAAsB,CAACD,KAAM,KAI9C,CAACJ,GAAAV,UAAA,CApCGW,UAASV,IAAAA,Q,wFCMb,SAASe,GAAc3B,GAMb,IANc,SACpB4B,EAAQ,MACR5C,EAAK,KACL6C,EACAC,YAAaC,EAAU,QACvBC,GACIhC,EACJ,OACI7B,IAAAA,cAAA,WACIA,IAAAA,cAAA,OAAKmD,UAAU,yBAAuB,GAAAW,OAC9BF,EAAU,MAAAE,OAAKjD,IAEvBb,IAAAA,cAAA,OAAKmD,UAAU,0BACVY,EAAAA,GAAAA,IAAcL,GAAQG,GAAWJ,GAAY,KAI9D,CAACD,GAAAhB,UAAA,CAxBGiB,SAAQhB,IAAAA,OACRoB,QAAOpB,IAAAA,OACP5B,MAAK4B,IAAAA,OACLiB,KAAIjB,IAAAA,OACJkB,YAAWlB,IAAAA,QAsBf,Y,wCCNA,SAASuB,GAAInC,GAOC,IAPA,GACVxB,EACA4D,kBAAmBC,EACnBC,aAAcC,EACdC,UAAWC,EAAQ,UACnBC,EAAS,WACTC,GACQ3C,EACR,MAAM4C,GAASC,EAAAA,EAAAA,UAAQ,KACnB,GAAKR,EAGL,OAAIE,EACO,QAAPN,OAAeQ,EAAQ,YAAAR,OAAWM,IAE/BO,EAAAA,GAAAA,IAAoBtE,EAAG,GAC/B,CAACA,EAAI+D,EAAaE,EAAUJ,IAEzBU,GAAWC,EAAAA,GAAAA,IAAYN,GAE7B,OAAQK,GACR,KAAKE,EAAAA,GAAUC,IACX,OAAIP,EAEIxE,IAAAA,cAAA,OACIgF,IAAI,eACJ7B,UAAU,oCACV8B,KAAKC,EAAAA,GAAAA,IAAW7E,KAKxBL,IAAAA,cAAA,OACImD,UAAWgC,IACP,OACA,WACAC,EAAAA,GAAAA,IAAwBR,GACxB,2BAIhB,KAAKE,EAAAA,GAAUO,MACX,OACIrF,IAAAA,cAAA,OACIgF,IAAI,eACJ7B,UAAU,oCACV8B,IAAKR,IAGjB,QACI,OACIzE,IAAAA,cAAA,KACImD,UAAWgC,IACP,OACA,WACAC,EAAAA,GAAAA,IAAwBR,GACxB,2BAKpB,CAEA,SAASU,GAAIC,GAAqC,IAApC,SAACC,EAAQ,MAAE3E,EAAK,KAAEyC,GAAgBiC,EAC5C,OACIvF,IAAAA,cAAA,OACImD,UAAU,YACVtC,MAAOA,GAEN2E,EACDxF,IAAAA,cAAA,OAAKmD,UAAU,mBACVtC,GAEI,MAARyC,GACGtD,IAAAA,cAAA,OAAKmD,UAAU,oBACVsC,EAAAA,GAAAA,IAAiBnC,IAKtC,CAEA,SAASoC,GAAQC,GAA4B,IAA3B,KAACC,EAAI,WAAEpB,GAAkBmB,EACvC,OAAKC,EAKD5F,IAAAA,cAACsF,GAAI,CACDzE,MAAO+E,EAAKC,KACZvC,KAAMsC,EAAKtC,MAEXtD,IAAAA,cAACgE,GAAI8B,OAAAC,OAAA,CACDvB,WAAYA,GACRoB,KAVL,IAcf,CArCC5B,GAAAxB,UAAA,CAtEGgC,WAAU/B,IAAAA,KAAAuD,YAyFbV,GAAA9C,UAAA,CArFGgD,SAAQ/C,IAAAA,QACR5B,MAAK4B,IAAAA,OAAAuD,WACL1C,KAAIb,IAAAA,QAqGPiD,GAAAlD,UAAA,CA/GGgC,WAAU/B,IAAAA,KAAAuD,YAiHd,UAAeC,EAAAA,EAAAA,MAAKP,ICtGpB,IAAeQ,EAAAA,EAAAA,UAVf,SAAyBvF,EAAoBwF,GAIzC,MAAO,CACHP,MAJSQ,EAAAA,GAAAA,IAAQzF,EAAOwF,EAAS9F,IAKjCmE,WAAkC,UAJvB6B,EAAAA,GAAAA,IAAU1F,GAIF2F,WAE3B,GAEA,CAAwCZ,ICDxC,GAZA,SAAmB7D,GAAgB,IAAA0E,EAAA,IAAf,KAACC,GAAY3E,EAC7B,OAAiB,QAAjB0E,EAAIC,EAAKC,gBAAQ,IAAAF,GAAbA,EAAeG,OACR1G,IAAAA,cAAC0F,GAAQ,CAACrF,GAAImG,EAAKC,SAAS,MAGnCE,EAAAA,GAAAA,GAAyBH,EAAK1D,MAAM8D,cAAgBJ,EAAK1D,MAAM8D,YAAYF,OACpE1G,IAAAA,cAACwD,GAAmBgD,EAAK1D,MAAM8D,YAAY,IAG/C,IACX,E,2ECcA,SAASC,GAAUhF,GAMT,IANU,SAChBiF,EAAQ,YACRC,GAAc,EAAK,gBACnBC,EAAe,WACfC,EAAU,SACVzB,GACI3D,EACJ,MAAM,cAAC/B,IAAiBC,EAAAA,EAAAA,WAClBmH,GAAWC,EAAAA,EAAAA,gBAEbC,QAAQ,KACJC,GACH,cACDC,EAAa,cACbC,EAAa,cACbC,IACAC,EAAAA,GAAAA,KAEEC,GAAUhH,EAAAA,EAAAA,cAAaC,IAAuBgH,EAAAA,EAAAA,IAAchH,EAAOmG,KAEnEc,GAAmBC,EAAAA,EAAAA,cAAY,KACjC,MAAMC,EAAeb,EAAac,KAAKC,MAAQhB,EAE/CE,GAASe,EAAAA,EAAAA,IAA2BnB,EAAUgB,IAE1CZ,EADAD,GACSiB,EAAAA,EAAAA,IAAiBX,EAAeD,EAAeR,EAAUiB,KAAKC,QAE9DG,EAAAA,EAAAA,IAA6BZ,EAAeD,EAAeR,GACxE,GACD,CACCS,EACAD,EACAR,EACAG,EACAiB,EAAAA,GACAlB,IAGJ,OACIhH,IAAAA,cAACoI,GAAAA,EAAW,CACRC,yBAAyB,GAExB7C,EACDxF,IAAAA,cAACsI,GAAAA,EAAI,CACDC,UAAW,GACXC,UAAU,GAEVxI,IAAAA,cAACsI,GAAAA,EAAKG,WAAU3C,OAAAC,OAAA,GACRgB,EAAc,CACdrD,KAAM5D,EAAc,CAChBO,GAAI,gCACJC,eAAgB,oBAEpBoI,UAAW5I,EAAc,CACrBO,GAAI,qCACJC,eAAgB,yCAEpB,CACAoD,KAAM5D,EAAc,CAChBO,GAAI,8BACJC,eAAgB,kBAEpBoI,UAAW5I,EAAc,CACrBO,GAAI,mCACJC,eAAgB,wCAEvB,CACDqI,SAASd,EAAAA,EAAAA,cAAY,KACjBX,GAAS0B,EAAAA,EAAAA,IAAgBrB,EAAeD,EAAeR,GAAWC,GAAa,GAChF,CAACQ,EAAeD,EAAeR,EAAUC,EAAa6B,EAAAA,QAE7D5I,IAAAA,cAACsI,GAAAA,EAAKG,WAAU,CACZ/E,KAAM5D,EAAc,CAChBO,GAAI,qCACJC,eAAgB,oBAEpBqI,SAASd,EAAAA,EAAAA,cAAY,KACjBL,EAAcV,EAAS,GACxB,CAACA,MAER9G,IAAAA,cAACsI,GAAAA,EAAKG,WAAU,CACZ/E,KAAmB5D,EAAbmH,EAA2B,CAC7B5G,GAAI,gCACJC,eAAgB,gBACD,CACfD,GAAI,kCACJC,eAAgB,mBAEpBqI,QAASf,IAGb5H,IAAAA,cAACsI,GAAAA,EAAKG,WAAU,CACZ/E,KAAgB5D,EAAV4H,EAAwB,CAC1BrH,GAAI,8BACJC,eAAgB,UACD,CACfD,GAAI,4BACJC,eAAgB,SAEpBqI,SAASd,EAAAA,EAAAA,cAAY,KACjBX,EAASQ,GAAUmB,EAAAA,GAAAA,IAAW/B,IAAYgC,EAAAA,GAAAA,IAAShC,GAAU,GAC9D,CAACA,EAAUY,MAElB1H,IAAAA,cAACsI,GAAAA,EAAKG,WAAU,CACZ/E,KAAM5D,EAAc,CAChBO,GAAI,4BACJC,eAAgB,cAEpBqI,SAASd,EAAAA,EAAAA,cAAY,MACjBkB,EAAAA,GAAAA,IAAgB,GAADjF,QAAIkF,EAAAA,GAAAA,MAAY,KAAAlF,OAAIuD,EAAI,QAAAvD,OAAOgD,GAAW,GAC1D,CAACO,EAAMP,OAK9B,CAEA,SAASmC,GAASC,EAAkBC,GAChC,OACID,EAAUpC,WAAaqC,EAAUrC,UACjCoC,EAAUnC,cAAgBoC,EAAUpC,aACpCmC,EAAUlC,kBAAoBmC,EAAUnC,iBACxCkC,EAAUjC,aAAekC,EAAUlC,UAE3C,CAEA,UAAehB,EAAAA,EAAAA,MAAKY,GAAYoC,ICpG1BG,GAAyB,CAC3BC,YAAY,EACZC,kBAAkB,EAClBC,YAAY,GAGhB,SAASC,GAAU3H,GAY2B,IAAA4H,EAAAC,EAAA,IAZ1B,QAChBC,EAAO,uBACPC,EAAsB,YACtB/G,EAAW,WACXgH,EAAU,KACVrD,EAAI,cACJsD,EAAa,MACbC,EAAK,OACLC,EAAM,SACNlD,EAAQ,oBACRmD,EAAmB,sBACnBC,GACerI,EACf,MAAMqF,GAAWC,EAAAA,EAAAA,gBACX,OAACgD,EAAM,cAAE3C,EAAa,cAAEF,IAAiBG,EAAAA,GAAAA,MACzC,cAAC3H,IAAiBC,EAAAA,EAAAA,WAClBU,GAAeC,EAAAA,EAAAA,aAAYE,EAAAA,IAC3B2G,GAAgB7G,EAAAA,EAAAA,aAAY0J,GAAAA,IAE5BC,GADU3J,EAAAA,EAAAA,cAAaC,IAAuB2J,EAAAA,EAAAA,IAAO3J,EAAO4J,EAAAA,GAAYC,kBAAmBjD,OACzDkD,EAAAA,GAAiBC,aACnDC,EAAa7K,EAAc,CAACO,GAAI,oBAAqBC,eAAgB,sBACrEsK,GAAaC,EAAAA,GAAAA,IAAuB,QAAXpB,EAACjD,EAAK1D,aAAK,IAAA2G,OAAA,EAAVA,EAAYqB,oBAAsBjI,GAElEkI,EAAAA,EAAAA,YAAU,KACFpB,SAAAA,EAASqB,aACT9D,GAAS+D,EAAAA,GAAAA,IAAwB,CAACtB,EAAQqB,cAC9C,GACD,CAACrB,aAAO,EAAPA,EAASqB,eAEbD,EAAAA,EAAAA,YAAU,MACDpB,GAAD,MAAYK,GAAAA,EAAQxD,KAAK0E,YACzBhE,GAASiE,EAAAA,GAAAA,GAAanB,EAAOxD,KAAK0E,YACtC,GACD,CAACvB,EAASK,aAAM,EAANA,EAAQxD,KAAK0E,aAE1B,MAAME,GAAiB1G,EAAAA,EAAAA,UAAQ,KAC3B,MAAM2G,IAAOrB,aAAM,EAANA,EAAQsB,eAAgB,IAAIC,SAAQhG,IAAU,IAAT,GAAClF,GAAGkF,EAClD,OAAIlF,IAAOmG,EAAKgF,QACL,GAEJnL,CAAE,IACVoL,UACH,MAAO,CAACjF,EAAKgF,WAAYH,EAAI,GAC9B,CAACrB,aAAM,EAANA,EAAQsB,eAEZ,IAAItE,EAAkBR,EAAKkF,SAAWlF,EAAKmF,UAE3C,MAAMC,GAAgB/D,EAAAA,EAAAA,cAAagE,IAC/B,GAAIA,EAAEC,OAAQ,CACV,MAAM7E,IAAa+C,GAAS+B,QAAQ/B,EAAOgC,gBACrClE,EAAeb,EAAac,KAAKC,MAAQhB,EAE/CE,GAASe,EAAAA,EAAAA,IAA2BnB,EAAUgB,IAE1CZ,EADAD,GACSiB,EAAAA,EAAAA,IAAiBX,EAAeD,EAAeR,EAAUiB,KAAKC,QAE9DG,EAAAA,EAAAA,IAA6BZ,EAAeD,EAAeR,GAE5E,MACIqD,EAAOrD,EACX,GACD,CACCS,EACAD,EACAR,EACAkD,EACA9B,EAAAA,GACAlB,IAGEiF,GAAavH,EAAAA,EAAAA,UAAQ,KAAM,CAC7BwH,qBAAsBA,OACtBC,cAAeA,UACf,IAEEC,GAAuBvE,EAAAA,EAAAA,cAAagE,IACtCA,EAAEQ,kBACF7E,EAAcV,EAAS,GACxB,CAACA,IAEEwF,GAA2BzE,EAAAA,EAAAA,cAAagE,IAC1CU,GAAAA,GAA+BV,EAAGjC,EAAuB,GAC1D,CAACA,IAEJ,IAAKI,IAAWxD,EACZ,OAAO,KAGX,MACIwF,eAAgBQ,EAChBC,gBAAiBC,EACjBC,cAAeC,EACfC,YAAaC,EACbC,aAAchG,GACdiD,EAIJ,GAAIF,EAAcpD,OAAS,EAAG,CAC1B,MAAMsG,EAAIlD,EAAc,GACxB9C,EAAkBgG,EAAEtB,SAAWsB,EAAErB,SACrC,CAEA,OACI3L,IAAAA,cAAA,WACI+J,MAAOA,EACP5G,UAAW8J,IAAW,aAAc,CAChC,cAAeT,EACf,cAAe3C,IAEnBqD,SAAU,EACV7M,GAAI4J,EAAsB,+BAAiC,GAC3DtB,QAASiD,GAET5L,IAAAA,cAAA,cACK+L,QAAQW,GAAeF,IACpBxM,IAAAA,cAAA,OAAKmD,UAAU,aACVuJ,EACG1M,IAAAA,cAAA,OAAKmD,UAAW8J,IAAW,eAAgB,CAACE,KAAMT,EAAc,MAC3DU,KAAKC,IAAIX,EAAa,IACtBA,EAAc,IAAM,KAGzB1M,IAAAA,cAAA,OAAKmD,UAAU,iBAI3BnD,IAAAA,cAAA,OAAKmD,UAAU,sBAAsByH,GACrC5K,IAAAA,cAAA,OAAKmD,UAAU,oBACVwG,GAAWiB,KAAejB,aAAO,EAAPA,EAAS2D,eAChCtN,IAAAA,cAACuN,GAAAA,EAAG,CACA5E,QAASyD,EACT1I,KAAMiG,aAAO,EAAPA,EAAS2D,eAGtBpD,GACGF,EAAOwD,WACHxN,IAAAA,cAACyN,GAAa,CACVtK,UAAWyH,KAAejB,aAAO,EAAPA,EAAS2D,cAAe,OAAS,GAC3DvK,SAAUC,GAAAA,EAAaC,UAKvCjD,IAAAA,cAAC0N,GAAAA,GAAS5H,OAAAC,OAAA,GACF4H,GAAAA,EAAc,CAClBxK,UAAU,aACVxB,MAAOiL,MAGf5M,IAAAA,cAAA,OAAKmD,UAAU,2BACXnD,IAAAA,cAAC6G,GAAU,CACPC,SAAUA,EACVC,YAAaA,SAAAA,EACbE,WAAY8E,QAAQS,GACpBxF,gBAAiBA,GAEjBhH,IAAAA,cAAC4N,EAAAA,EAAW,CACR/M,MACIb,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,4BACHC,eAAe,aAIvBN,IAAAA,cAAC6N,GAAAA,EAAM,CACHC,WAAW,EACX3K,UAAU,iBAEVnD,IAAAA,cAAC+N,EAAAA,iBAAgB,CAACzK,KAAM,SAKxCtD,IAAAA,cAAA,OACI,gBAAc,OACdmD,UAAU,UACV6K,IAAI,OACJd,SAAU,EACVvE,QAAS2D,GAER9F,EAAKyH,QACFjO,IAAAA,cAACkO,GAAAA,EAAQ,CACLD,QAASzH,EAAK7F,QAAUwN,GAAAA,GAAMC,aAAezD,EAAanE,EAAKyH,QAC/DI,QAASjF,GACTkF,gBAAgB9H,aAAI,EAAJA,EAAM+H,YAAY/H,SAAc,QAAVkD,EAAJlD,EAAM+H,gBAAQ,IAAA7E,OAAV,EAAJA,EAAgB8E,QAClDvC,WAAYA,IAGhBjM,IAAAA,cAACyO,GAAU,CAACjI,KAAMA,KAG1BxG,IAAAA,cAAA,OAAKmD,UAAU,YACViI,SAAAA,EAAgB1E,OACb1G,IAAAA,cAAC0O,GAAAA,EAAO,CACJC,QAASvD,EACT9H,KAAK,OAET,KACHyI,QAAQe,IACL9M,IAAAA,cAAAA,IAAAA,SAAA,KACKwM,EACGxM,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,0BACHC,eAAe,+DACfsO,OAAQ,CAACpC,gBAGbxM,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,uBACHC,eAAe,oEACfsO,OAAQ,CAAC9B,oBAM5BzC,GAAuBJ,GAAuBxJ,GAAiBT,IAAAA,cAACQ,EAAkB,MAG/F,CAEA,UAAeyF,EAAAA,EAAAA,MAAKuD,ICzPpB,IAAeqF,EAAAA,GAAAA,UACX3I,EAAAA,EAAAA,UA3BJ,WACI,MAAM4I,GAAoBC,EAAAA,EAAAA,MACpBC,GAAaC,EAAAA,GAAAA,MACbC,GAAiBC,EAAAA,GAAAA,MAEvB,MAAO,CAACxO,EAAoBwF,KACxB,MAAM,SAACW,GAAYX,EAEbK,GAAO4I,EAAAA,EAAAA,IAAQzO,EAAOmG,GAE5B,OAAKN,EAIE,CACHA,OACAmD,QAASqF,EAAWrO,EAAO6F,EAAK0E,YAChCtB,wBAAwByF,EAAAA,GAAAA,IAA0B1O,GAClDkC,YAAaqM,EAAevO,EAAO6F,EAAKgF,SAAS,GACjD1B,cAAegF,EAAkBnO,EAAO6F,EAAKnG,IAC7C2J,QAAQsF,EAAAA,EAAAA,IAAU3O,EAAOmG,GACzBoD,uBAAuBA,EAAAA,EAAAA,IAAsBvJ,IAVtC,CAAC,CAWX,CAET,IAIIsF,EAAAA,KAFJ,CAGEuD,I,89BClBF,SAAS+F,GAAG1N,GAA8B,IAA7B,MAAC2N,EAAK,MAAEzF,EAAK,KAAE0F,GAAY5N,EACpC,MAAM6N,EAASD,EAAKpE,IAAImE,GAClB3F,EAAa4F,EAAKE,mBAAqBD,EAE7C,OAAIA,IAAWE,EAAAA,GAAUC,kCAEjB7P,IAAAA,cAAC8P,EAAAA,EAAa,CACV7B,QAASjO,IAAAA,cAAAA,IAAAA,SAAA,MACT+J,MAAOA,IAKf2F,IAAWE,EAAAA,GAAUG,2BAEjB/P,IAAAA,cAACgQ,EAAAA,EAAkB,CACfjG,MAAKkG,GAAAA,GAAA,GAAMlG,GAAK,IAAEmG,QAAS,sBAAuBC,WAAY,gDAC9DC,YAAapQ,IAAAA,cAAC4B,EAAa,MAC3Bf,MACIb,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,qCACHC,eAAe,+BAGvB+P,SACIrQ,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,wCACHC,eAAe,iFACfsO,OAAQ,CACJ0B,eACItQ,IAAAA,cAACuQ,EAAAA,EAAc,CACXpN,UAAU,sCACVjD,QAASC,EAAAA,EAAmBC,iBAMhDoQ,eAAe,0BACfC,kBAAkB,6BAClBC,OAAQC,EAAAA,EAAgBC,aAMhC5Q,IAAAA,cAACwJ,GAAU,CACPK,WAAYA,EACZgH,IAAKnB,EACL3F,MAAOA,EACPjD,SAAU4I,EACVzF,oBAA+B,IAAVuF,GAGjC,CAACD,GAAA/M,UAAA,CA9DGiN,KAAIhN,IAAAA,MAAA,IAAAuD,WAIJwJ,MAAK/M,IAAAA,OAAAuD,WACL+D,MAAKtH,IAAAA,IAAAuD,YA2DT,UAAeC,EAAAA,EAAAA,MAAKsJ,GAAKtG,EAAAA,IC5DnBc,GAAQ,CACV+G,WAAY,QAGhB,SAASC,GAAqBlP,GAOpB,IAPqB,IAC3BwJ,EAAG,iBACHsE,EAAgB,cAChBqB,EAAa,MACbC,EAAK,UACLC,EAAS,qBACTC,GACItP,EACJ,MAAMuP,EAAoBpR,IAAAA,SACpBqR,EAAgBrR,IAAAA,OAAqB,GACrCsR,EAAetR,IAAAA,OAAqB,IAE1C+K,EAAAA,EAAAA,YAAU,KACN,GAAIM,EAAI3E,OAAS,GAAKiJ,EAAkB,CACpC,MAAMH,EAAQnE,EAAIkG,QAAQ5B,GAC0C,IAAA6B,GAAhEH,EAAcI,SAAWjC,GAASA,EAAQ8B,EAAaG,WAE9B,QAAzBD,EAAAJ,EAAkBK,eAAO,IAAAD,GAAzBA,EAA2BE,SAASC,aAAanC,GAEzD,IAOD,CAACG,IAEJ,MAAMF,GAAO/K,EAAAA,EAAAA,UACT,KAAM,CAEE2G,IAAK8F,GAAwB9F,EAAI3E,SAAWuK,EAAQ,IAAI5F,EAAKuE,EAAAA,GAAUG,4BAA+BmB,GAAa7F,EAAI3E,SAAWuK,GAAS,IAAI5F,EAAKuE,EAAAA,GAAUC,oCAAuCxE,EACrMsE,sBAGR,CAACtE,EAAKsE,EAAkBuB,EAAWC,EAAsBF,IAGvDW,GAAU/J,EAAAA,EAAAA,cAAY,CAAC2H,EAAOC,IAASA,EAAKpE,IAAImE,IAAQ,IAExDqC,GAAehK,EAAAA,EAAAA,cAAa2H,GACvBnE,EAAI3E,SAAWuK,GAASzB,EAAQnE,EAAI3E,QAC5C,CAAC2E,EAAK4F,IAET,OACIjR,IAAAA,cAAC8R,EAAAA,EAAS,MACLvM,IAAA,IAAC,OAACxD,EAAM,MAAED,GAAMyD,EAAA,OACbvF,IAAAA,cAAC+R,EAAAA,EAAc,CACXC,IAAKZ,EACLa,UAAWhB,EACXD,cAAeA,EACfa,aAAcA,EACdK,iBAAkBC,EAAAA,EAAiBC,oBAElCzM,IAA4B,IAA1B0M,gBAAAA,EAAe,IAAEL,GAAIrM,EACpB,OACI3F,IAAAA,cAACsS,EAAAA,GAAa,CACVD,gBAAiBE,IAKX,IALY,mBACdC,EAAkB,kBAClBC,EAAiB,kBACjBC,EAAiB,iBACjBC,GACHJ,EACGF,EAAgB,CACZG,qBACAC,oBACAC,oBACAC,qBAEJtB,EAAcI,QAAUiB,EACxBpB,EAAaG,QAAUkB,CAAgB,EAE3CX,IAAKA,EACLjQ,OAAQA,EACRkQ,UAAWxC,EAAKpE,IAAI3E,OACpBkM,SAAUnD,EACVmC,QAASA,EACTiB,SAAU,IACV9I,MAAOA,GACPjI,MAAOA,EACPqB,UAAU,2BAEToM,GACW,GAIX,GAIjC,CAEA,SAAStG,GAASC,EAAkBC,GAChC,OACID,EAAUyG,mBAAqBxG,EAAUwG,kBACzCzG,EAAUmC,IAAIyH,SAAW3J,EAAUkC,IAAIyH,QACvC5J,EAAUgI,YAAc/H,EAAU+H,WAClChI,EAAUiI,uBAAyBhI,EAAUgI,oBAErD,CATCJ,GAAAvO,UAAA,CAtGGwO,cAAavO,IAAAA,KAAAuD,WAEbiL,MAAKxO,IAAAA,OAAAuD,WACLkL,UAASzO,IAAAA,KACT0O,qBAAoB1O,IAAAA,MA6GxB,UAAewD,EAAAA,EAAAA,MAAK8K,GAAuB9H,ICpH3C,SAAS8J,GAAyBlR,GAGC,IAHA,UAC/BmR,EAAS,SACTC,GAC6BpR,EAC7B,MAAM,cAAC/B,IAAiBC,EAAAA,EAAAA,WAExB,OACIC,IAAAA,cAACkT,EAAAA,GAAY,CACT/P,UAAU,2BACV9C,GAAG,iCACH8S,eAAe,EACfC,gBAAiBtT,EAAc,CAC3BO,GAAI,uCACJC,eAAgB,mCAEpB+S,kBAAmBvT,EAAc,CAC7BO,GAAI,yCACJC,eAAgB,qBAEpBgT,iBAAkBxT,EAAc,CAC5BO,GAAI,wCACJC,eAAgB,WAEpBiT,SAAUN,EACVO,aAAcP,EACdQ,cAAeT,GAEfhT,IAAAA,cAAA,OAAKmD,UAAU,wCACXnD,IAAAA,cAAA,YACKF,EAAc,CACXO,GAAI,6CACJC,eAAgB,6FAMxC,CAACyS,GAAAvQ,UAAA,CAzCGwQ,UAASvQ,IAAAA,KAAAuD,WACTiN,SAAQxQ,IAAAA,KAAAuD,YA0CZ,YCdO,IAAK0N,GAAY,SAAZA,GAAY,OAAZA,EAAY,QAAZA,EAAY,gBAAZA,CAAY,MAKjB,MAWDC,GAAa9R,IAOa,IAAA+R,EAAA,IAPZ,cAChBC,EAAgBH,GAAaI,KAAI,WACjCC,EAAU,UACVC,EAAS,iBACTrE,EAAgB,UAChBsE,EAAS,IACT5I,GACuBxJ,EACvB,MAAMpB,GAAeC,EAAAA,EAAAA,aAAYE,EAAAA,IAC3BsT,EAASR,GAAaQ,SAAWL,EACjCpE,EAAOyE,EAASD,EAAY5I,EAC5B2G,EAAMhS,IAAAA,OAA6B,OACnC,cAACsH,EAAa,cAAEC,EAAa,MAAE4M,EAAK,OAAEhK,IAAU1C,EAAAA,GAAAA,KAChD2M,GAAU1T,EAAAA,EAAAA,cAAaC,IAAuB2J,EAAAA,EAAAA,IAAO3J,EAAO4J,EAAAA,GAAYC,kBAAmBjD,KAC3F8C,EAAsB+J,IAAY3J,EAAAA,GAAiBC,aACnD2J,EAAwBD,IAAY3J,EAAAA,GAAiB6J,gBACrD,cAACxU,IAAiBC,EAAAA,EAAAA,WAClBmH,GAAWC,EAAAA,EAAAA,gBAEX,MAAC8J,EAAQ,EAAGsD,qBAAsBC,GAAwD,QAA5CZ,GAAGlT,EAAAA,EAAAA,aAAY+T,EAAAA,WAA6B,IAAAb,EAAAA,EAAI,CAAC,GAE9F1C,EAAWwD,GAAc1U,IAAAA,UAAwB,IACjD2U,EAAWC,GAAgB5U,IAAAA,UAAwB,GAEpD6U,GAAgBhN,EAAAA,EAAAA,cAAagE,IAAqB,IAAAiJ,EAAAC,EAEpD,MAAMC,EAASnJ,EAAEmJ,OACXC,EAAUD,SAAe,QAATF,EAANE,EAAQC,eAAO,IAAAH,OAAT,EAANA,EAAiBI,cACjC,GAAgB,UAAZD,GAAmC,aAAZA,GAAsC,WAAZA,EACjD,OAGJ,GADwBpJ,EAAEC,QAAUD,EAAEsJ,SAAWtJ,EAAEuJ,UAAYvJ,EAAEwJ,UACxCC,EAAAA,EAAsBzJ,EAAG+D,EAAAA,GAAU2F,SAASC,QAAUF,EAAAA,EAAsBzJ,EAAG+D,EAAAA,GAAU2F,SAASE,IACvH,OAIJ,MAAMC,EAAmF,IAAjEC,SAASC,uBAAuBC,EAAAA,GAAeC,OAAOpP,OACxEqP,EAA4F,IAAjEJ,SAASC,uBAAuBC,EAAAA,GAAeG,OAAOtP,OACvF,IAAKgP,IAAoBK,EACrB,OAGJ,IAAIE,EAAmB,EACvB,GAAItG,EAAkB,CAClB,MAAMuG,EAAsBzG,EAAK8B,QAAQ5B,GACzC,GAAI2F,EAAAA,EAAsBzJ,EAAG+D,EAAAA,GAAU2F,SAASC,QACxCU,EAAsBzG,EAAK/I,OAAS,IACpCuP,EAAmBC,EAAsB,GAGzCA,IAAwBzG,EAAK/I,OAAS,GACtC,OAIR,GAAI4O,EAAAA,EAAsBzJ,EAAG+D,EAAAA,GAAU2F,SAASE,IAAK,CACjD,KAAIS,EAAsB,GAGtB,OAFAD,EAAmBC,EAAsB,CAIjD,CACJ,CACA/L,EAAOsF,EAAKwG,IAGD,QAAXlB,EAAA/C,EAAIP,eAAO,IAAAsD,GAAXA,EAAaoB,OAAO,GACrB,CAACxG,EAAkBF,KAEtB1E,EAAAA,EAAAA,YAAU,KACN4K,SAASS,iBAAiB,UAAWvB,GAC9B,KACHc,SAASU,oBAAoB,UAAWxB,EAAc,IAE3D,CAACA,IAEJ,MAAMyB,GAAazO,EAAAA,EAAAA,cAAY,KAC3BmM,EAAUN,GAAaI,KAAK,GAC7B,CAACE,IAEEuC,GAAe1O,EAAAA,EAAAA,cAAY,MAC7B2O,EAAAA,EAAAA,IAAW,MAAO,4BAClBxC,EAAUN,GAAaQ,OAAO,GAC/B,CAACF,IAEEyC,GAAsB5O,EAAAA,EAAAA,cAAY6O,UACpChC,GAAW,GACX,IAAIiC,EAASlH,EAAKmH,EAAa,GAW/B,OATID,IAAWhH,IACXgH,EAASlH,EAAKmH,EAAa,UAGzB1P,GAAS2P,EAAAA,EAAAA,IAAyB,CAAC3C,SAAQyC,YAEjDjC,GAAW,GACXE,GAAa,GAEN,CAACnF,MAAM,EAAK,GACpB,CAACnI,EAAemI,EAAMyE,EAAQvE,IAE3BmH,GAAsBjP,EAAAA,EAAAA,cAAY,MACpC2O,EAAAA,EAAAA,IAAW,MAAO,yBAClBtP,GAAS6P,EAAAA,EAAAA,IAAyBxP,EAAeD,IAC7CuM,IAAkBH,GAAaQ,QAC/BC,GACJ,GACD,CAAC7M,EAAeC,EAAesM,IAE5BmD,GAA+BnP,EAAAA,EAAAA,cAAY,KAC7C,MAAMoP,EAAgCA,KAClC/P,GAASgQ,EAAAA,EAAAA,GAAWC,EAAAA,GAAiBC,0BAA0B,EAQ7DC,EAA4C,CAC9CrE,UANkBS,KAClBqD,IACAG,GAA+B,EAK/BhE,SAAUgE,GAGd/P,GAASoQ,EAAAA,EAAAA,GAAU,CACfC,QAASJ,EAAAA,GAAiBC,yBAC1BI,WAAYzE,GACZ0E,YAAaJ,IACd,GACJ,CAACP,IAEJ,OACI9W,IAAAA,cAAA,OACIkN,SAAU,EACV8E,IAAKA,EACL7O,UAAW,aACX9C,GAAI,0BAEJL,IAAAA,cAAC0X,EAAAA,EAAM,CACHrX,GAAI,iCACJsX,QACI3X,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,OAAKmD,UAAW,sBACZnD,IAAAA,cAAC6N,GAAAA,EAAM,CACH1K,UAAW,0BACXyU,SAAU/D,IAAkBH,GAAaI,KACzCnL,QAAS2N,GAETtW,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,wBACHC,eAAe,uBAI3BN,IAAAA,cAAA,OACIK,GAAI,6BACJ8C,UAAW,sBAEXnD,IAAAA,cAAC6N,GAAAA,EAAM,CACH1K,UAAW,0BACXyU,SAAU/D,IAAkBH,GAAaQ,OACzC2D,OAAQ9D,EACRpL,QAAS4N,GAETvW,IAAAA,cAACc,EAAAA,iBAAgB,CACbT,GAAG,4BACHC,eAAe,aAGtB+T,GAAyBrU,IAAAA,cAACyB,EAAoB,QAI3DqW,MACI9X,IAAAA,cAAA,OAAKmD,UAAU,gBACXnD,IAAAA,cAAC4N,EAAAA,EAAW,CACR/M,MAAOf,EAAc,CACjBO,GAAI,gCACJC,eAAgB,sBAGpBN,IAAAA,cAAC6N,GAAAA,EAAM,CACHxN,GAAI,iCACJ8C,UAAW,+BACXwF,QAASqO,EACTlJ,WAAW,GAEX9N,IAAAA,cAAA,QAAMmD,UAAU,QACZnD,IAAAA,cAAC+X,EAAAA,kBAAiB,CAACzU,KAAM,WAOjDtD,IAAAA,cAAA,OACImD,UAAU,UACV,cAAa,gBAEbnD,IAAAA,cAAC+Q,GAAqB,CAClBF,IAAG,gBAAA/M,OAAkB+P,GACrB7C,cAAeyF,EACfpL,IAAKoE,EACLE,iBAAkBA,EAClBsB,MAAOiD,EAASM,EAAcvD,EAC9BC,UAAWA,EACXC,qBAAsBwD,IAAcT,IAEvC7J,IAAwB5J,GAAgBT,IAAAA,cAACQ,EAAkB,MAC3D0T,IAAWH,GAAciE,IAAQ/D,GAC9BjU,IAAAA,cAACgQ,EAAAA,EAAkB,CACfiI,UAAU,EACVpX,MAAOf,EAAc,CACjBO,GAAI,2CACJC,eAAgB,sBAEpB+P,SAAUvQ,EAAc,CACpBO,GAAI,oDACJC,eAAgB,2BAGxB,MAEN,EAGd,IAAe2F,EAAAA,EAAAA,MAAK0N,I,gBChQpB,MAAM3E,IAAaC,EAAAA,GAAAA,MACbH,IAAoBC,EAAAA,EAAAA,MAOpBmJ,GAAarW,IAGN,IAHO,OAChBmI,EAAM,SACNxE,GACI3D,EACJ,MAAM,cAAC/B,IAAiBC,EAAAA,EAAAA,WAClBmH,GAAWC,EAAAA,EAAAA,gBACX,cACFG,EAAa,cACbC,EAAa,cACbC,EAAa,OACb2C,IACA1C,EAAAA,GAAAA,MAGApH,GAAIyG,EACJiG,aAAchG,EACdP,MACI0E,WAAYiN,IAEhBnO,EAEEL,GAAUjJ,EAAAA,EAAAA,cAAaC,GAAuBqO,GAAWrO,EAAOwX,KAChE3R,GAAO9F,EAAAA,EAAAA,cAAaC,IAAuByO,EAAAA,EAAAA,IAAQzO,EAAOqJ,EAAO3J,MACjEyJ,GAAgBpJ,EAAAA,EAAAA,cAAaC,GAAuBmO,GAAkBnO,EAAO6F,EAAKnG,MAClFuL,GAAgB/D,EAAAA,EAAAA,cAAY,IAAMsC,KAAU,IAClD,IAAInD,EAAkBR,EAAKkF,SAAWlF,EAAKmF,UAI3C,GAAI7B,EAAcpD,OAAS,EAAG,CAC1B,MAAMsG,EAAIlD,EAAc,GACxB9C,EAAkBgG,EAAEtB,SAAWsB,EAAErB,SACrC,CACA,MAAMS,GAAuBvE,EAAAA,EAAAA,cAAY,KACrCL,EAAcV,EAAS,GACxB,CAACU,EAAeV,IAEbsR,GAAgBvQ,EAAAA,EAAAA,cAAY,KAC9BX,GAAS0B,EAAAA,EAAAA,IAAgBrB,EAAeD,EAAeR,GAAWC,GAAa,GAChF,CAACG,EAAUK,EAAeD,EAAeR,EAAUC,IAEtD,OACI/G,IAAAA,cAAA,OACIK,GAAI,wBACJ8C,UAAU,cAEVnD,IAAAA,cAAC0X,EAAAA,EAAM,CACHvU,UAAU,sBACVwU,QACI3X,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC6N,GAAAA,EAAM,CACH1K,UAAU,oCACVwF,QAASiD,GAET5L,IAAAA,cAAA,KAAGmD,UAAU,8BAEjBnD,IAAAA,cAAA,UACIA,IAAAA,cAAA,QAAMmD,UAAU,aACXrD,EAAc,CACXO,GAAI,2BACJC,eAAgB,YAGxBN,IAAAA,cAAC6N,GAAAA,EAAM,CACH1K,UAAU,YACVkV,mBAAmB,EACnB1P,QAASyD,GAERzC,aAAO,EAAPA,EAAS2D,gBAK1BwK,MACI9X,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAACsY,GAAAA,EAAY,CACTvR,YAAaA,EACbwR,SAAyB,MAAfxR,EACV4B,QAASyP,IAEbpY,IAAAA,cAAC6G,GAAU,CACPC,SAAUA,EACVC,YAAaA,EACbE,WAAY8E,QAAQ/B,EAAOgC,gBAAkBhC,EAAOyC,iBACpDzF,gBAAiBA,GAEjBhH,IAAAA,cAAC4N,EAAAA,EAAW,CACR/M,MAAOf,EAAc,CACjBO,GAAI,8BACJC,eAAgB,kBAGpBN,IAAAA,cAAC6N,GAAAA,EAAM,CAAC1K,UAAU,gCACdnD,IAAAA,cAAC+N,EAAAA,iBAAgB,CAACzK,KAAM,WAO/CkC,EACC,EAId,IAAeS,EAAAA,EAAAA,MAAKiS,IC2BpB,GAjKIlY,IAAAA,cAAA,OACI8B,MAAM,MACNC,OAAO,KACPE,QAAQ,aACRC,KAAK,OACLC,MAAM,8BAENnC,IAAAA,cAAA,KAAGoC,SAAS,0BACRpC,IAAAA,cAAA,QACIsC,QAAQ,OACR3C,EAAE,aACFmC,MAAM,KACNC,OAAO,KACPyW,GAAG,IACHtW,KAAK,qBAETlC,IAAAA,cAAA,QACIsC,QAAQ,OACR3C,EAAE,UACFC,EAAE,KACFkC,MAAM,KACNC,OAAO,KACPyW,GAAG,IACHtW,KAAK,qBAETlC,IAAAA,cAAA,UACIyY,GAAG,UACHC,GAAG,OACHC,EAAE,MACFzW,KAAK,8BACLK,YAAY,SAEhBvC,IAAAA,cAAA,UACIyY,GAAG,UACHC,GAAG,OACHC,EAAE,MACFzW,KAAK,8BACLK,YAAY,SAEhBvC,IAAAA,cAAA,UACIyY,GAAG,UACHC,GAAG,OACHC,EAAE,MACFzW,KAAK,8BACLK,YAAY,SAEhBvC,IAAAA,cAAA,QACIqC,EAAE,qOACFH,KAAK,YAETlC,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,UACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,UACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,UACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,UACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sOACFH,KAAK,6BAETlC,IAAAA,cAAA,QACIqC,EAAE,gPACFuW,OAAO,8BACPC,cAAc,QAElB7Y,IAAAA,cAAA,UACIyY,GAAG,UACHC,GAAG,KACHC,EAAE,IACFzW,KAAK,8BACLK,YAAY,SAEhBvC,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,8BACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,8BACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,8BACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,8BACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,8BACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,sBACFuW,OAAO,8BACPC,cAAc,OACdC,cAAc,UAElB9Y,IAAAA,cAAA,QACIqC,EAAE,oCACFuW,OAAO,8BACPC,cAAc,MACdC,cAAc,QACdC,eAAe,UAEnB/Y,IAAAA,cAAA,QACIqC,EAAE,6BACFuW,OAAO,8BACPC,cAAc,MACdC,cAAc,QACdC,eAAe,UAEnB/Y,IAAAA,cAAA,QACIqC,EAAE,6BACFuW,OAAO,8BACPC,cAAc,MACdC,cAAc,QACdC,eAAe,WAGvB/Y,IAAAA,cAAA,YACIA,IAAAA,cAAA,YAAUK,GAAG,oBACTL,IAAAA,cAAA,QACI8B,MAAM,MACNC,OAAO,KACPG,KAAK,QACL8W,UAAU,6B,eCjH9B,MAAMC,GAAgBA,KAClB,MAAM,cAACnZ,IAAiBC,EAAAA,EAAAA,WAClBmH,GAAWC,EAAAA,EAAAA,gBAEX,IAAC+R,EAAK9R,QAAQ,iBAAC+R,KAAqBC,EAAAA,EAAAA,kBACnCC,EAAQrF,IAAasF,EAAAA,EAAAA,GAAe5F,GAAaI,KHP1B,yBGQxB,cAACxM,EAAa,cAAEC,EAAa,MAAE4M,IAAS1M,EAAAA,GAAAA,KAExC8R,GAAS7Y,EAAAA,EAAAA,aAAY+T,EAAAA,IACrB+E,GAAiB9Y,EAAAA,EAAAA,cAAaC,IAAuB2O,EAAAA,EAAAA,IAAU3O,EAAOwY,KACtExJ,GAAmBjP,EAAAA,EAAAA,aAAY+Y,EAAAA,IAC/BC,GAAehZ,EAAAA,EAAAA,cAAaC,IAAuByO,EAAAA,EAAAA,IAAQzO,EAAOwY,KAClEQ,GAAYjZ,EAAAA,EAAAA,cAAaC,IAAuBiZ,EAAAA,EAAAA,IAA4BjZ,EAAO6Y,aAAc,EAAdA,EAAgBnZ,KAAKwZ,EAAAA,cACxGC,GAAkBpZ,EAAAA,EAAAA,cAAaC,IAAuBoZ,EAAAA,EAAAA,IAAkCpZ,EAAO6Y,aAAc,EAAdA,EAAgBnZ,KAAKwZ,EAAAA,cACpHG,GAAYT,aAAM,EAANA,EAAQhF,uBAAwB,GAElDxJ,EAAAA,EAAAA,YAAU,KACN7D,EAAS+S,EAAAA,IACT/S,GAASgT,EAAAA,EAAAA,IAAcC,EAAAA,EAAYC,KAAMC,EAAAA,EAAQC,UACjDpT,EAASqT,EAAAA,KACTC,EAAAA,EAAAA,MAEA,MAAMC,EAAkBC,EAAAA,EAAkBC,sBAAsBpT,EAAeD,GAQ/E,OANImT,IAAoBG,EAAAA,GAAoBC,UACxCH,EAAAA,EAAkBI,yBAAyBvT,EAAeD,EAAemT,GACzEC,EAAAA,EAAkBK,sBAAsBxT,EAAeD,EAAesT,EAAAA,GAAoBC,UAIvF,KACH3T,EAAS8T,EAAAA,GAAc,CAC1B,GACF,KAEHjQ,EAAAA,EAAAA,YAAU,KACN7D,GAAS+T,EAAAA,EAAAA,IAAgB1T,EAAeD,GAAe,GACxD,CAACA,EAAeC,KAEnBwD,EAAAA,EAAAA,YAAU,KACD4E,GAAoBA,IAAqBwJ,GAC1CjS,GAASgU,EAAAA,EAAAA,IAAoB5T,EAAekS,aAAc,EAAdA,EAAgBnZ,IAChE,GACD,CAACiH,EAAeqI,EAAkBwJ,IAErC,MAAMgC,EAAcnD,IAAQ2B,IAAc3B,IAAQ8B,IAE3C5I,EAAWwD,IAAc0G,EAAAA,EAAAA,UAASD,GAEnCE,EAA8BC,GACzB3L,GAAoC,IAAhB2L,EAAK5U,QAAgB4U,EAAK,KAAO3L,EAG1D4L,EAAoBvD,IAAQ2B,IAAc0B,EAA2B1B,GACrE6B,EAA0BxD,IAAQ8B,IAAoBuB,EAA2BvB,IAEvF/O,EAAAA,EAAAA,YAAU,KACN,MAAM0Q,EAAW,GAGbF,GACAE,EAASC,KAAKxU,GAAS2P,EAAAA,EAAAA,IAAyB,CAAC3C,QAAQ,MAGzDmF,IAAW3F,GAAaQ,QAAUsH,GAClCC,EAASC,KAAKxU,GAAS2P,EAAAA,EAAAA,IAAyB,CAAC3C,QAAQ,MAG7DyH,QAAQC,IAAIH,GAAUI,MAAK,KACvBnH,GAAW,EAAM,GACnB,GACH,CAAC2E,EAAQM,EAAWG,KAEvB/O,EAAAA,EAAAA,YAAU,KACDmG,KACD4K,EAAAA,EAAAA,IAAiB,CACbjW,KAAMkW,EAAAA,GAAQC,kBACdC,UAAWC,EAAAA,GAAKC,yBAChBC,SAAS,IAEbC,YAAYC,WAAWJ,EAAAA,GAAKC,0BAChC,GACD,CAACjL,KAEJnG,EAAAA,EAAAA,YAAU,KACDyO,GAAmBE,GAAiBxI,GACrCiD,GACJ,GACD,CAAC7M,EAAekS,EAAgBE,EAAcxI,EAAWqI,EAAQF,KAGpEtO,EAAAA,EAAAA,YAAU,IACC,KACH7D,GAASgU,EAAAA,EAAAA,IAAoB5T,EAAe,IAAI,GAErD,IAEH,MAAMiV,GAAqB1U,EAAAA,EAAAA,cAAY,KACnCmM,EAAUN,GAAaQ,OAAO,GAC/B,IAEH,OACIlU,IAAAA,cAAA,OACIK,GAAG,cACH8C,UAAW8J,IAAW,6BAA8B,CAAC,kBAAmBlB,QAAQyN,MAE/EtI,GAAaiK,EACVnb,IAAAA,cAAA,OAAKmD,UAAU,sBACV+N,EACGlR,IAAAA,cAAC8P,EAAAA,EAAa,MAEd9P,IAAAA,cAACgQ,EAAAA,EAAkB,CACfiI,UAAU,EACV7H,YAAaoM,GACb3b,MAAOf,EAAc,CACjBO,GAAI,gCACJC,eAAgB,4BAEpB+P,SAAUvQ,EAAc,CACpBO,GAAI,mCACJC,eAAgB,yHAMhCN,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC2T,GAAU,CACPE,cAAewF,EACfrF,UAAWA,EACXD,WAAYhI,QAAQiO,GACpBrK,iBAAkBwJ,EAClB9N,IAAKsO,EACL1F,UAAW6F,IAEdN,GAAkBE,EACf1Z,IAAAA,cAACkY,GAAU,CACPlO,OAAQwP,GAERxZ,IAAAA,cAACyc,GAAAA,EAAY,CACTC,WAAYlD,EAAenZ,GAC3Bsc,sBAAsB,EACtBC,cAAc,KAItB5c,IAAAA,cAACgQ,EAAAA,EAAkB,CACfiI,UAAU,EACV7H,YAAaoM,GACb3b,MAAOf,EAAc,CACjBO,GAAI,2CACJC,eAAgB,8FACjB,CAAC0Z,cACJ3J,SAAUvQ,EAAyB,CAC/BO,GAAI,6CACJC,eAAgB,8LACjB,CACC0Z,YACA6C,KAAOC,GACH9c,IAAAA,cAAC+c,EAAAA,KAAI,CACDlM,IAAI,SACJmM,GAAE,GAAAlZ,OAAKoV,EAAG,KAAApV,OAAIgW,EAAgB,IAC9BnR,QAAS4T,GAERO,QAQ3B,EAId,IAAe7W,EAAAA,EAAAA,MAAKgT,G,6GC/Mb,SAASxR,IACZ,MAAMwV,GAAcC,EAAAA,EAAAA,aACd9V,GAAS1C,EAAAA,EAAAA,UAAQ,IAAMuY,GAAa,CAACA,EAAY9D,iBAAkB8D,EAAY5V,OAC/E8V,GAAUC,EAAAA,EAAAA,cAEV9V,GAAgB5G,EAAAA,EAAAA,aAAY2c,EAAAA,GAAkBxD,EAAAA,cAC9CtS,GAAgB7G,EAAAA,EAAAA,aAAY0J,EAAAA,GAAkByP,EAAAA,cAE9C1P,GAAStC,EAAAA,EAAAA,cAAaf,GACjBqW,EAAQzB,KAAK,IAAD5X,OAAKsD,EAAOC,KAAI,YAAAvD,OAAWgD,EAAW,IAAMA,EAAW,MAC3E,CAACM,EAAOC,OAEL8M,GAAQtM,EAAAA,EAAAA,cAAY,IAAMsV,EAAQG,QAAQ,IAADxZ,OAAKsD,EAAOC,KAAI,cAAa,CAACD,EAAOC,OAE9EG,GAAgBK,EAAAA,EAAAA,cAAY,SAACf,GAAsE,IAAzCyW,EAAsBC,UAAA9W,OAAA,QAAA+W,IAAAD,UAAA,GAAAA,UAAA,GAAGpW,EAAOC,KAC5F,OAAO8V,EAAQzB,KAAK,IAAD5X,OAAKyZ,EAAQ,QAAAzZ,OAAOgD,QAAAA,EAAYM,EAAO+R,kBAC9D,GAAG,CAAC/R,EAAO+R,iBAAkB/R,EAAOC,OAEpC,MAAO,CACHD,SACA+V,UACA7V,gBACAC,gBACA4M,QACAhK,SACA3C,gBAER,C,+ECnCA,MASA,EAToB1E,GAEZ9C,IAAAA,cAAC0d,EAAAA,GAAe5X,OAAAC,OAAA,GACRjD,EAAK,CACT6a,aAAcC,EAAAA,GAAiBpT,oB,yJCMrCqT,EAAgD,CAACC,EAAAA,SAAU,KAAM,KAAM,KAAM,KAAM,KAAM,MAyB/F,EAvBejc,IAM4B,IAN3B,MACZkc,EAAQ,EAAC,QACTpG,EAAO,SACPtH,EAAQ,MACRyH,GAEkCjW,EAD/Bmc,E,qWAAKC,CAAApc,EAAAqc,GAER,MAAMC,EAAIN,EAASE,GACnB,OACI/d,IAAAA,cAAA,SAAA8F,OAAAC,OAAA,GACQiY,EAAK,CACT7a,UAAW8J,IAAW,SAAU+Q,EAAM7a,aAEtCnD,IAAAA,cAAA,OAAKmD,UAAU,QACXnD,IAAAA,cAACme,EAAC,KAAExG,GACHtH,EAAWrQ,IAAAA,cAAA,SAAIqQ,GAAgB,MAEpCrQ,IAAAA,cAAA,OAAKmD,UAAU,WACd2U,EACI,C","sources":["webpack://mattermost-webapp/./src/components/tours/crt_tour/crt_list_tutorial_tip.tsx","webpack://mattermost-webapp/./src/components/tours/crt_tour/crt_unread_tutorial_tip.tsx","webpack://mattermost-webapp/./src/components/common/svg_images_components/search_hint_svg.tsx","webpack://mattermost-webapp/./src/components/post_priority/post_priority_badge.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_item/attachments/attachment_card/index.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_item/attachments/file_card/file_card.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_item/attachments/file_card/index.ts","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_item/attachments/index.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_menu/thread_menu.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_item/thread_item.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_item/index.ts","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_list/virtualized_thread_list_row.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_list/virtualized_thread_list.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/mark_all_threads_as_read_modal/mark_all_threads_as_read_modal.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_list/thread_list.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/thread_pane/thread_pane.tsx","webpack://mattermost-webapp/./src/components/threading/common/chat_illustration.tsx","webpack://mattermost-webapp/./src/components/threading/global_threads/global_threads.tsx","webpack://mattermost-webapp/./src/components/threading/hooks.ts","webpack://mattermost-webapp/./src/components/tours/crt_tour/crt_tour_tip.tsx","webpack://mattermost-webapp/./src/components/widgets/header/header.tsx"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport {useSelector} from 'react-redux';\n\nimport {useMeasurePunchouts} from '@mattermost/components';\n\nimport {getIsMobileView} from 'selectors/views/browser';\n\nimport {ShortcutKey, ShortcutKeyVariant} from 'components/shortcut_key';\n\nimport type {GlobalState} from 'types/store';\n\nimport CRTTourTip from './crt_tour_tip';\n\nconst translate = {x: -6, y: 62};\n\nexport const UpShortcut = () => {\n    const {formatMessage} = useIntl();\n    return (<ShortcutKey variant={ShortcutKeyVariant.TutorialTip}>\n        {\n            formatMessage({\n                id: 'tutorial_threads.list.Up',\n                defaultMessage: 'UP',\n            })\n        }\n    </ShortcutKey>);\n};\n\nexport const DownShortcut = () => {\n    const {formatMessage} = useIntl();\n    return (<ShortcutKey variant={ShortcutKeyVariant.TutorialTip}>\n        {\n            formatMessage({\n                id: 'tutorial_threads.list.Down',\n                defaultMessage: 'Down',\n            })\n        }\n    </ShortcutKey>);\n};\n\nconst CRTListTutorialTip = () => {\n    const {formatMessage} = useIntl();\n    const isMobileView = useSelector((state: GlobalState) =>\n        getIsMobileView(state),\n    );\n    const title = (\n        <FormattedMessage\n            id='tutorial_threads.list.title'\n            defaultMessage={'Threads List'}\n        />\n    );\n\n    const screen = (\n        <>\n            <p>\n                {formatMessage({\n                    id: 'tutorial_threads.list.description-p1',\n                    defaultMessage: 'Here you’ll see a preview of all threads you’re following or participating in. Clicking on a thread in this list will open the full thread on the right.',\n                })}\n            </p>\n            <p>\n\n                {formatMessage({\n                    id: 'tutorial_threads.list.description-p2',\n                    defaultMessage: 'Use {upKey} / {downKey} to navigate the thread list.',\n                },\n                {\n                    upKey: <UpShortcut/>,\n                    downKey: <DownShortcut/>,\n                })\n                }\n            </p>\n        </>\n    );\n\n    const punchOutIds = isMobileView ? ['tutorial-threads-mobile-list', 'tutorial-threads-mobile-header'] : ['threads-list-container'];\n    const overlayPunchOut = useMeasurePunchouts(punchOutIds, []);\n\n    return (\n        <CRTTourTip\n            title={title}\n            screen={screen}\n            overlayPunchOut={overlayPunchOut}\n            placement='right-start'\n            pulsatingDotPlacement='right-start'\n            pulsatingDotTranslate={translate}\n        />\n    );\n};\n\nexport default CRTListTutorialTip;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport type {ReactNode} from 'react';\nimport {FormattedMessage, useIntl} from 'react-intl';\n\nimport {useMeasurePunchouts} from '@mattermost/components';\n\nimport CRTTourTip from './crt_tour_tip';\n\nconst CRTUnreadTutorialTip = () => {\n    const {formatMessage} = useIntl();\n    const title = (\n        <FormattedMessage\n            id='tutorial_threads.unread.title'\n            defaultMessage={'Unread threads'}\n        />\n    );\n\n    const screen = (\n        <p>\n            {formatMessage<ReactNode>(\n                {\n                    id: 'tutorial_threads.unread.description',\n                    defaultMessage: 'You can switch to <b>Unreads</b> to show only threads that are unread.',\n                },\n                {\n                    b: (value: string) => <b>{value}</b>,\n                })\n            }\n        </p>\n    );\n    const overlayPunchOut = useMeasurePunchouts(['threads-list-unread-button'], []);\n\n    return (\n        <CRTTourTip\n            title={title}\n            screen={screen}\n            overlayPunchOut={overlayPunchOut}\n            placement='bottom-start'\n            pulsatingDotPlacement='bottom'\n        />\n    );\n};\n\nexport default CRTUnreadTutorialTip;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\ntype SvgProps = {\n    width?: number;\n    height?: number;\n}\n\nconst SearchHintSVG = ({width, height}: SvgProps) => (\n    <svg\n        width={width?.toString() || '72'}\n        height={height?.toString() || '48'}\n        viewBox='0 0 72 48'\n        fill='none'\n        xmlns='http://www.w3.org/2000/svg'\n    >\n        <g clipPath='url(#clip0_410_25534)'>\n            <path\n                d='M35.1353 12.5745H4.8754C4.32086 12.5726 3.77137 12.6798 3.25832 12.8898C2.74526 13.0998 2.27869 13.4087 1.88524 13.7986C1.49178 14.1886 1.17916 14.6521 0.965209 15.1627C0.751261 15.6732 0.640179 16.2208 0.638306 16.7742V35.9654C0.640179 36.5188 0.751261 37.0664 0.965209 37.577C1.17916 38.0875 1.49178 38.551 1.88524 38.941C2.27869 39.331 2.74526 39.6398 3.25832 39.8498C3.77137 40.0599 4.32086 40.167 4.8754 40.1651H9.34115V47.3489L16.0398 40.1651H35.1246C35.6791 40.167 36.2286 40.0599 36.7417 39.8498C37.2547 39.6398 37.7213 39.331 38.1147 38.941C38.5082 38.551 38.8208 38.0875 39.0348 37.577C39.2487 37.0664 39.3598 36.5188 39.3617 35.9654V16.7742C39.3579 15.6585 38.9108 14.5897 38.1185 13.8024C37.3262 13.0151 36.2534 12.5735 35.1353 12.5745Z'\n                fill='var(--away-indicator)'\n            />\n            <path\n                d='M16.0398 40.1651H35.1246C35.6791 40.167 36.2286 40.0598 36.7417 39.8498C37.2547 39.6397 37.7213 39.3309 38.1148 38.9409C38.5082 38.5509 38.8208 38.0874 39.0348 37.5769C39.2487 37.0663 39.3598 36.5187 39.3617 35.9653V24.3145C39.3617 24.3145 38.0291 35.0883 37.7897 36.0367C37.5504 36.985 37.0752 38.4039 34.8245 38.6392C32.5738 38.8745 16.0398 40.1651 16.0398 40.1651Z'\n                fill='#CC8F00'\n            />\n            <path\n                d='M9.66973 23.6263C10.2089 23.6263 10.7359 23.7859 11.1842 24.0848C11.6324 24.3837 11.9818 24.8085 12.1881 25.3056C12.3944 25.8026 12.4484 26.3496 12.3432 26.8772C12.2381 27.4049 11.9785 27.8896 11.5972 28.27C11.216 28.6504 10.7303 28.9095 10.2015 29.0145C9.67275 29.1194 9.12467 29.0656 8.62657 28.8597C8.12848 28.6538 7.70276 28.3051 7.40323 27.8578C7.10371 27.4105 6.94383 26.8845 6.94383 26.3465C6.94336 25.9892 7.01355 25.6353 7.15038 25.305C7.2872 24.9748 7.48797 24.6747 7.74118 24.422C7.9944 24.1693 8.29509 23.969 8.62602 23.8324C8.95695 23.6959 9.31163 23.6259 9.66973 23.6263Z'\n                fill='var(--center-channel-bg)'\n            />\n            <path\n                d='M20.0056 23.6263C20.5447 23.6263 21.0717 23.7859 21.52 24.0848C21.9683 24.3837 22.3177 24.8085 22.524 25.3056C22.7303 25.8026 22.7843 26.3496 22.6791 26.8772C22.5739 27.4049 22.3143 27.8896 21.9331 28.27C21.5518 28.6504 21.0661 28.9095 20.5374 29.0145C20.0086 29.1194 19.4605 29.0656 18.9624 28.8597C18.4643 28.6538 18.0386 28.3051 17.7391 27.8578C17.4396 27.4105 17.2797 26.8845 17.2797 26.3465C17.2792 25.9892 17.3494 25.6353 17.4862 25.305C17.6231 24.9748 17.8238 24.6747 18.077 24.422C18.3303 24.1693 18.6309 23.969 18.9619 23.8324C19.2928 23.6959 19.6475 23.6259 20.0056 23.6263Z'\n                fill='var(--center-channel-bg)'\n            />\n            <path\n                d='M30.33 23.6263C30.8693 23.6256 31.3967 23.7846 31.8454 24.083C32.2942 24.3815 32.6441 24.8061 32.851 25.3031C33.0579 25.8001 33.1123 26.3471 33.0076 26.875C32.9028 27.4029 32.6435 27.888 32.2624 28.2688C31.8813 28.6495 31.3956 28.909 30.8667 29.0142C30.3379 29.1195 29.7896 29.0658 29.2913 28.86C28.793 28.6542 28.3671 28.3056 28.0674 27.8582C27.7677 27.4108 27.6077 26.8847 27.6077 26.3465C27.6073 25.9895 27.6773 25.6358 27.8139 25.3058C27.9505 24.9758 28.151 24.6759 28.4038 24.4233C28.6566 24.1706 28.9569 23.9702 29.2874 23.8335C29.618 23.6967 29.9722 23.6263 30.33 23.6263Z'\n                fill='var(--center-channel-bg)'\n            />\n            <path\n                d='M3.7787 20.6104C4.08616 19.5244 4.60589 18.5098 5.30794 17.625C6.00999 16.7403 6.88049 16.0028 7.86932 15.4552C7.92789 15.4257 7.97498 15.3776 8.00322 15.3184C8.03145 15.2593 8.03923 15.1925 8.02534 15.1285C8.01145 15.0645 7.97668 15.0069 7.92646 14.9647C7.87625 14.9225 7.81343 14.8982 7.74785 14.8955C5.84009 14.7814 1.98883 15.1878 3.19637 20.5819C3.20911 20.6477 3.24362 20.7074 3.29437 20.7513C3.34513 20.7953 3.4092 20.821 3.47632 20.8242C3.54343 20.8275 3.60972 20.8082 3.66454 20.7695C3.71937 20.7307 3.75956 20.6747 3.7787 20.6104Z'\n                fill='#FFD470'\n            />\n            <path\n                opacity='0.4'\n                d='M32.3334 7.28991C34.7785 4.81371 37.8644 3.53829 41.5849 3.46985C45.237 3.53829 48.3042 4.80749 50.7866 7.28991C53.2628 9.77233 54.5383 12.8396 54.6067 16.4917C54.5383 20.2122 53.269 23.2919 50.7866 25.7432C48.3042 28.1883 45.237 29.4824 41.5849 29.6068C37.8644 29.4761 34.7847 28.1883 32.3334 25.7432C29.8883 23.2919 28.6004 20.206 28.4698 16.4854C28.6004 12.8334 29.8883 9.76611 32.3334 7.28991Z'\n                fill='var(--center-channel-bg)'\n            />\n            <path\n                d='M53.5706 14.1678C52.464 10.5721 50.3691 7.88057 47.2828 6.09868C44.1964 4.31679 40.8181 3.84832 37.1508 4.68784C35.1455 5.20001 33.3983 6.08537 31.8951 7.34293C33.576 5.5084 35.7082 4.23809 38.2863 3.52882C41.9535 2.68929 45.3485 3.16738 48.4626 4.9653C51.5767 6.76321 53.6882 9.46433 54.7948 13.06C55.4751 15.6505 55.4412 18.1323 54.6873 20.502C53.939 22.875 52.5957 24.8683 50.6551 26.4733C52.1121 24.8855 53.1147 23.0208 53.6603 20.8706C54.2005 18.7172 54.1703 16.4876 53.5706 14.1678Z'\n                fill='black'\n                fillOpacity='0.4'\n            />\n            <path\n                d='M57.6194 15.4776C57.3584 11.6178 55.7919 8.22807 52.9264 5.30846C49.663 2.19708 45.8961 0.638306 41.6257 0.638306C37.3554 0.638306 33.5947 2.19708 30.3313 5.30846C27.2047 8.55591 25.6383 12.2982 25.6383 16.5477C25.6383 20.7973 27.2047 24.5458 30.3313 27.787C33.3274 30.6448 36.7524 32.185 40.6001 32.4077C44.4478 32.6366 47.9971 31.5788 51.2605 29.2468L53.7034 31.6778L56.83 28.5664L54.3871 26.1355C56.7989 22.8942 57.8743 19.3375 57.6194 15.4776ZM50.8689 25.6963C48.3887 28.1272 45.3242 29.4139 41.6755 29.5376C37.9583 29.4077 34.8814 28.1272 32.4323 25.6963C29.9895 23.2653 28.7028 20.1973 28.5722 16.4983C28.7028 12.8673 29.9895 9.81778 32.4323 7.34971C34.8752 4.88783 37.9583 3.61978 41.6755 3.55174C45.3242 3.61978 48.3887 4.88165 50.8689 7.34971C53.3428 9.81778 54.6171 12.8673 54.6855 16.4983C54.6171 20.1973 53.3491 23.2653 50.8689 25.6963Z'\n                fill='#BABEC9'\n            />\n            <path\n                d='M67.6182 46.4679C66.8121 46.6983 66.2153 46.6174 65.8276 46.225L53.1453 32.3065C52.7577 31.9142 52.5977 31.4098 52.6592 30.787C52.7207 30.1643 53.1084 29.4668 53.8222 28.6821C54.5975 27.9659 55.2867 27.5549 55.9021 27.4553C56.5174 27.3556 57.0159 27.5362 57.4035 27.9971L71.2488 40.832C71.6364 41.2243 71.698 41.8097 71.4395 42.5944C71.1811 43.3791 70.695 44.1637 69.9873 44.9484C69.2181 45.7331 68.4243 46.2375 67.6182 46.4679Z'\n                fill='var(--away-indicator)'\n            />\n            <path\n                d='M68.5465 38.3191L63.3621 43.5465L57.1116 36.6856L61.6961 32.0027L68.5465 38.3191Z'\n                fill='#7A5600'\n            />\n        </g>\n        <defs>\n            <clipPath id='clip0_410_25534'>\n                <rect\n                    width='72'\n                    height='48'\n                    fill='var(--center-channel-bg)'\n                />\n            </clipPath>\n        </defs>\n    </svg>\n\n);\n\nexport default SearchHintSVG;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport {AlertOutlineIcon, AlertCircleOutlineIcon} from '@mattermost/compass-icons/components';\nimport {PostPriority} from '@mattermost/types/posts';\n\ntype Props = {\n    priority?: PostPriority;\n    className?: string;\n}\n\nconst Badge = styled.span`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 20px;\n    width: 20px;\n    margin-left: 8px;\n    min-width: 20px;\n    border-radius: 10px;\n    color: #fff;\n\n    background-color: ${(props: {priority: PostPriority}) => {\n        return props.priority === PostPriority.URGENT ? 'rgb(var(--semantic-color-danger))' : 'rgb(var(--semantic-color-info))';\n    }}\n`;\n\nexport default function PriorityLabel({priority, className}: Props) {\n    if (priority !== PostPriority.URGENT && priority !== PostPriority.IMPORTANT) {\n        return null;\n    }\n\n    return (\n        <Badge\n            className={className}\n            priority={priority}\n        >\n            {priority === PostPriority.URGENT ? (\n                <AlertOutlineIcon size={14}/>\n            ) : (\n                <AlertCircleOutlineIcon size={14}/>\n            )}\n        </Badge>\n    );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport {stripMarkdown} from 'utils/markdown';\n\nimport './attachment_card.scss';\n\ntype Props = {\n    fallback?: string;\n    pretext?: string;\n    title?: string;\n    text?: string;\n    author_name?: string;\n}\n\nfunction AttachmentCard({\n    fallback,\n    title,\n    text,\n    author_name: authorName,\n    pretext,\n}: Props) {\n    return (\n        <div>\n            <div className='attachment__truncated'>\n                {`${authorName}: ${title}`}\n            </div>\n            <div className='attachment__truncated'>\n                {stripMarkdown(text || pretext || fallback || '')}\n            </div>\n        </div>\n    );\n}\n\nexport default AttachmentCard;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport cn from 'classnames';\nimport React, {useMemo, memo} from 'react';\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nimport {getFileThumbnailUrl, getFileUrl} from 'mattermost-redux/utils/file_utils';\n\nimport {FileTypes} from 'utils/constants';\nimport {fileSizeToString, getCompassIconClassName, getFileType} from 'utils/utils';\n\nimport './file_card.scss';\n\ntype Props = {\n    file?: FileInfo;\n    enableSVGs: boolean;\n}\n\ntype FileProps = FileInfo & {\n    enableSVGs: boolean;\n}\n\ntype CardProps = {\n    children?: React.ReactElement<typeof Image>;\n    title: string;\n    size?: number;\n}\n\nfunction File({\n    id,\n    has_preview_image: hasPreviewImage,\n    mini_preview: miniPreview,\n    mime_type: mimeType,\n    extension,\n    enableSVGs,\n}: FileProps) {\n    const imgSrc = useMemo(() => {\n        if (!hasPreviewImage) {\n            return undefined;\n        }\n        if (miniPreview) {\n            return `data:${mimeType};base64,${miniPreview}`;\n        }\n        return getFileThumbnailUrl(id);\n    }, [id, miniPreview, mimeType, hasPreviewImage]);\n\n    const fileType = getFileType(extension);\n\n    switch (fileType) {\n    case FileTypes.SVG:\n        if (enableSVGs) {\n            return (\n                <img\n                    alt='file preview'\n                    className='file_card__image post-image small'\n                    src={getFileUrl(id)}\n                />\n            );\n        }\n        return (\n            <div\n                className={cn(\n                    'icon',\n                    'icon-20',\n                    getCompassIconClassName(fileType),\n                    'file_card__attachment',\n                )}\n            />\n        );\n    case FileTypes.IMAGE:\n        return (\n            <img\n                alt='file preview'\n                className='file_card__image post-image small'\n                src={imgSrc}\n            />\n        );\n    default:\n        return (\n            <i\n                className={cn(\n                    'icon',\n                    'icon-20',\n                    getCompassIconClassName(fileType),\n                    'file_card__attachment',\n                )}\n            />\n        );\n    }\n}\n\nfunction Card({children, title, size}: CardProps) {\n    return (\n        <div\n            className='file_card'\n            title={title}\n        >\n            {children}\n            <div className='file_card__name'>\n                {title}\n            </div>\n            {size != null && (\n                <div className='file_card__size'>\n                    {fileSizeToString(size)}\n                </div>\n            )}\n        </div>\n    );\n}\n\nfunction FileCard({file, enableSVGs}: Props) {\n    if (!file) {\n        return null;\n    }\n\n    return (\n        <Card\n            title={file.name}\n            size={file.size}\n        >\n            <File\n                enableSVGs={enableSVGs}\n                {...file}\n            />\n        </Card>\n    );\n}\n\nexport default memo(FileCard);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nimport {getFile} from 'mattermost-redux/selectors/entities/files';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\n\nimport type {GlobalState} from 'types/store';\n\nimport FileCard from './file_card';\n\ntype OwnProps = {\n    id: FileInfo['id'];\n}\n\nfunction mapStateToProps(state: GlobalState, ownProps: OwnProps) {\n    const file = getFile(state, ownProps.id);\n    const config = getConfig(state);\n\n    return {\n        file,\n        enableSVGs: config.EnableSVGs === 'true',\n    };\n}\n\nexport default connect(mapStateToProps)(FileCard);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport {isMessageAttachmentArray} from '@mattermost/types/message_attachments';\nimport type {Post} from '@mattermost/types/posts';\n\nimport AttachmentCard from './attachment_card';\nimport FileCard from './file_card';\n\ntype Props = {\n    post: Post;\n}\n\nfunction Attachment({post}: Props) {\n    if (post.file_ids?.length) {\n        return <FileCard id={post.file_ids[0]}/>;\n    }\n\n    if (isMessageAttachmentArray(post.props.attachments) && post.props.attachments.length) {\n        return <AttachmentCard {...post.props.attachments[0]}/>;\n    }\n\n    return null;\n}\n\nexport default Attachment;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo, useCallback} from 'react';\nimport type {ReactNode} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport type {UserThread} from '@mattermost/types/threads';\n\nimport {setThreadFollow, updateThreadRead, markLastPostInThreadAsUnread} from 'mattermost-redux/actions/threads';\nimport {isPostFlagged} from 'mattermost-redux/selectors/entities/posts';\n\nimport {\n    flagPost as savePost,\n    unflagPost as unsavePost,\n} from 'actions/post_actions';\nimport {manuallyMarkThreadAsUnread} from 'actions/views/threads';\n\nimport Menu from 'components/widgets/menu/menu';\nimport MenuWrapper from 'components/widgets/menu/menu_wrapper';\n\nimport {getSiteURL} from 'utils/url';\nimport {copyToClipboard} from 'utils/utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport {useThreadRouting} from '../../hooks';\n\nimport './thread_menu.scss';\n\ntype Props = {\n    threadId: UserThread['id'];\n    isFollowing?: boolean;\n    hasUnreads: boolean;\n    children: ReactNode;\n    unreadTimestamp: number;\n};\n\nfunction ThreadMenu({\n    threadId,\n    isFollowing = false,\n    unreadTimestamp,\n    hasUnreads,\n    children,\n}: Props) {\n    const {formatMessage} = useIntl();\n    const dispatch = useDispatch();\n    const {\n        params: {\n            team,\n        },\n        currentTeamId,\n        currentUserId,\n        goToInChannel,\n    } = useThreadRouting();\n\n    const isSaved = useSelector((state: GlobalState) => isPostFlagged(state, threadId));\n\n    const handleReadUnread = useCallback(() => {\n        const lastViewedAt = hasUnreads ? Date.now() : unreadTimestamp;\n\n        dispatch(manuallyMarkThreadAsUnread(threadId, lastViewedAt));\n        if (hasUnreads) {\n            dispatch(updateThreadRead(currentUserId, currentTeamId, threadId, Date.now()));\n        } else {\n            dispatch(markLastPostInThreadAsUnread(currentUserId, currentTeamId, threadId));\n        }\n    }, [\n        currentUserId,\n        currentTeamId,\n        threadId,\n        hasUnreads,\n        updateThreadRead,\n        unreadTimestamp,\n    ]);\n\n    return (\n        <MenuWrapper\n            stopPropagationOnToggle={true}\n        >\n            {children}\n            <Menu\n                ariaLabel={''}\n                openLeft={true}\n            >\n                <Menu.ItemAction\n                    {...isFollowing ? {\n                        text: formatMessage({\n                            id: 'threading.threadMenu.unfollow',\n                            defaultMessage: 'Unfollow thread',\n                        }),\n                        extraText: formatMessage({\n                            id: 'threading.threadMenu.unfollowExtra',\n                            defaultMessage: 'You won’t be notified about replies',\n                        }),\n                    } : {\n                        text: formatMessage({\n                            id: 'threading.threadMenu.follow',\n                            defaultMessage: 'Follow thread',\n                        }),\n                        extraText: formatMessage({\n                            id: 'threading.threadMenu.followExtra',\n                            defaultMessage: 'You will be notified about replies',\n                        }),\n                    }}\n                    onClick={useCallback(() => {\n                        dispatch(setThreadFollow(currentUserId, currentTeamId, threadId, !isFollowing));\n                    }, [currentUserId, currentTeamId, threadId, isFollowing, setThreadFollow])}\n                />\n                <Menu.ItemAction\n                    text={formatMessage({\n                        id: 'threading.threadMenu.openInChannel',\n                        defaultMessage: 'Open in channel',\n                    })}\n                    onClick={useCallback(() => {\n                        goToInChannel(threadId);\n                    }, [threadId])}\n                />\n                <Menu.ItemAction\n                    text={hasUnreads ? formatMessage({\n                        id: 'threading.threadMenu.markRead',\n                        defaultMessage: 'Mark as read',\n                    }) : formatMessage({\n                        id: 'threading.threadMenu.markUnread',\n                        defaultMessage: 'Mark as unread',\n                    })}\n                    onClick={handleReadUnread}\n                />\n\n                <Menu.ItemAction\n                    text={isSaved ? formatMessage({\n                        id: 'threading.threadMenu.unsave',\n                        defaultMessage: 'Unsave',\n                    }) : formatMessage({\n                        id: 'threading.threadMenu.save',\n                        defaultMessage: 'Save',\n                    })}\n                    onClick={useCallback(() => {\n                        dispatch(isSaved ? unsavePost(threadId) : savePost(threadId));\n                    }, [threadId, isSaved])}\n                />\n                <Menu.ItemAction\n                    text={formatMessage({\n                        id: 'threading.threadMenu.copy',\n                        defaultMessage: 'Copy link',\n                    })}\n                    onClick={useCallback(() => {\n                        copyToClipboard(`${getSiteURL()}/${team}/pl/${threadId}`);\n                    }, [team, threadId])}\n                />\n            </Menu>\n        </MenuWrapper>\n    );\n}\n\nfunction areEqual(prevProps: Props, nextProps: Props) {\n    return (\n        prevProps.threadId === nextProps.threadId &&\n        prevProps.isFollowing === nextProps.isFollowing &&\n        prevProps.unreadTimestamp === nextProps.unreadTimestamp &&\n        prevProps.hasUnreads === nextProps.hasUnreads\n    );\n}\n\nexport default memo(ThreadMenu, areEqual);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React, {memo, useCallback, useEffect, useMemo} from 'react';\nimport type {MouseEvent} from 'react';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {DotsVerticalIcon} from '@mattermost/compass-icons/components';\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Post} from '@mattermost/types/posts';\nimport {PostPriority} from '@mattermost/types/posts';\nimport type {UserThread} from '@mattermost/types/threads';\n\nimport {getChannel as fetchChannel} from 'mattermost-redux/actions/channels';\nimport {markLastPostInThreadAsUnread, updateThreadRead} from 'mattermost-redux/actions/threads';\nimport {getMissingProfilesByIds} from 'mattermost-redux/actions/users';\nimport {Posts} from 'mattermost-redux/constants';\nimport {getInt} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport {ensureString} from 'mattermost-redux/utils/post_utils';\n\nimport {manuallyMarkThreadAsUnread} from 'actions/views/threads';\nimport {getIsMobileView} from 'selectors/views/browser';\n\nimport Markdown from 'components/markdown';\nimport PriorityBadge from 'components/post_priority/post_priority_badge';\nimport Button from 'components/threading/common/button';\nimport Timestamp from 'components/timestamp';\nimport CRTListTutorialTip from 'components/tours/crt_tour/crt_list_tutorial_tip';\nimport Tag from 'components/widgets/tag/tag';\nimport Avatars from 'components/widgets/users/avatars';\nimport WithTooltip from 'components/with_tooltip';\n\nimport {CrtTutorialSteps, Preferences} from 'utils/constants';\nimport * as Utils from 'utils/utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport Attachment from './attachments';\n\nimport {THREADING_TIME} from '../../common/options';\nimport {useThreadRouting} from '../../hooks';\nimport ThreadMenu from '../thread_menu';\n\nimport './thread_item.scss';\n\nexport type OwnProps = {\n    isSelected: boolean;\n    threadId: UserThread['id'];\n    style?: any;\n    isFirstThreadInList: boolean;\n};\n\ntype Props = {\n    channel: Channel;\n    currentRelativeTeamUrl: string;\n    displayName: string;\n    post: Post;\n    postsInThread: Post[];\n    thread: UserThread;\n    isPostPriorityEnabled: boolean;\n};\n\nconst markdownPreviewOptions = {\n    singleline: true,\n    mentionHighlight: false,\n    atMentions: false,\n};\n\nfunction ThreadItem({\n    channel,\n    currentRelativeTeamUrl,\n    displayName,\n    isSelected,\n    post,\n    postsInThread,\n    style,\n    thread,\n    threadId,\n    isFirstThreadInList,\n    isPostPriorityEnabled,\n}: Props & OwnProps): React.ReactElement|null {\n    const dispatch = useDispatch();\n    const {select, goToInChannel, currentTeamId} = useThreadRouting();\n    const {formatMessage} = useIntl();\n    const isMobileView = useSelector(getIsMobileView);\n    const currentUserId = useSelector(getCurrentUserId);\n    const tipStep = useSelector((state: GlobalState) => getInt(state, Preferences.CRT_TUTORIAL_STEP, currentUserId));\n    const showListTutorialTip = tipStep === CrtTutorialSteps.LIST_POPOVER;\n    const msgDeleted = formatMessage({id: 'post_body.deleted', defaultMessage: '(message deleted)'});\n    const postAuthor = ensureString(post.props?.override_username) || displayName;\n\n    useEffect(() => {\n        if (channel?.teammate_id) {\n            dispatch(getMissingProfilesByIds([channel.teammate_id]));\n        }\n    }, [channel?.teammate_id]);\n\n    useEffect(() => {\n        if (!channel && thread?.post.channel_id) {\n            dispatch(fetchChannel(thread.post.channel_id));\n        }\n    }, [channel, thread?.post.channel_id]);\n\n    const participantIds = useMemo(() => {\n        const ids = (thread?.participants || []).flatMap(({id}) => {\n            if (id === post.user_id) {\n                return [];\n            }\n            return id;\n        }).reverse();\n        return [post.user_id, ...ids];\n    }, [thread?.participants]);\n\n    let unreadTimestamp = post.edit_at || post.create_at;\n\n    const selectHandler = useCallback((e: MouseEvent<HTMLDivElement>) => {\n        if (e.altKey) {\n            const hasUnreads = thread ? Boolean(thread.unread_replies) : false;\n            const lastViewedAt = hasUnreads ? Date.now() : unreadTimestamp;\n\n            dispatch(manuallyMarkThreadAsUnread(threadId, lastViewedAt));\n            if (hasUnreads) {\n                dispatch(updateThreadRead(currentUserId, currentTeamId, threadId, Date.now()));\n            } else {\n                dispatch(markLastPostInThreadAsUnread(currentUserId, currentTeamId, threadId));\n            }\n        } else {\n            select(threadId);\n        }\n    }, [\n        currentUserId,\n        currentTeamId,\n        threadId,\n        thread,\n        updateThreadRead,\n        unreadTimestamp,\n    ]);\n\n    const imageProps = useMemo(() => ({\n        onImageHeightChanged: () => {},\n        onImageLoaded: () => {},\n    }), []);\n\n    const goToInChannelHandler = useCallback((e: MouseEvent) => {\n        e.stopPropagation();\n        goToInChannel(threadId);\n    }, [threadId]);\n\n    const handleFormattedTextClick = useCallback((e) => {\n        Utils.handleFormattedTextClick(e, currentRelativeTeamUrl);\n    }, [currentRelativeTeamUrl]);\n\n    if (!thread || !post) {\n        return null;\n    }\n\n    const {\n        unread_replies: newReplies,\n        unread_mentions: newMentions,\n        last_reply_at: lastReplyAt,\n        reply_count: totalReplies,\n        is_following: isFollowing,\n    } = thread;\n\n    // if we have the whole thread, get the posts in it, sorted from newest to oldest.\n    // First post is latest reply. Use that timestamp\n    if (postsInThread.length > 1) {\n        const p = postsInThread[0];\n        unreadTimestamp = p.edit_at || p.create_at;\n    }\n\n    return (\n        <article\n            style={style}\n            className={classNames('ThreadItem', {\n                'has-unreads': newReplies,\n                'is-selected': isSelected,\n            })}\n            tabIndex={0}\n            id={isFirstThreadInList ? 'tutorial-threads-mobile-list' : ''}\n            onClick={selectHandler}\n        >\n            <header>\n                {Boolean(newMentions || newReplies) && (\n                    <div className='indicator'>\n                        {newMentions ? (\n                            <div className={classNames('dot-mentions', {over: newMentions > 99})}>\n                                {Math.min(newMentions, 99)}\n                                {newMentions > 99 && '+'}\n                            </div>\n                        ) : (\n                            <div className='dot-unreads'/>\n                        )}\n                    </div>\n                )}\n                <div className='ThreadItem__author'>{postAuthor}</div>\n                <div className='ThreadItem__tags'>\n                    {channel && postAuthor !== channel?.display_name && (\n                        <Tag\n                            onClick={goToInChannelHandler}\n                            text={channel?.display_name}\n                        />\n                    )}\n                    {isPostPriorityEnabled && (\n                        thread.is_urgent && (\n                            <PriorityBadge\n                                className={postAuthor === channel?.display_name ? 'ml-2' : ''}\n                                priority={PostPriority.URGENT}\n                            />\n                        )\n                    )}\n                </div>\n                <Timestamp\n                    {...THREADING_TIME}\n                    className='alt-hidden'\n                    value={lastReplyAt}\n                />\n            </header>\n            <div className='menu-anchor alt-visible'>\n                <ThreadMenu\n                    threadId={threadId}\n                    isFollowing={isFollowing ?? false}\n                    hasUnreads={Boolean(newReplies)}\n                    unreadTimestamp={unreadTimestamp}\n                >\n                    <WithTooltip\n                        title={(\n                            <FormattedMessage\n                                id='threading.threadItem.menu'\n                                defaultMessage='Actions'\n                            />\n                        )}\n                    >\n                        <Button\n                            marginTop={true}\n                            className='Button___icon'\n                        >\n                            <DotsVerticalIcon size={18}/>\n                        </Button>\n                    </WithTooltip>\n                </ThreadMenu>\n            </div>\n            <div\n                aria-readonly='true'\n                className='preview'\n                dir='auto'\n                tabIndex={0}\n                onClick={handleFormattedTextClick}\n            >\n                {post.message ? (\n                    <Markdown\n                        message={post.state === Posts.POST_DELETED ? msgDeleted : post.message}\n                        options={markdownPreviewOptions}\n                        imagesMetadata={post?.metadata && post?.metadata?.images}\n                        imageProps={imageProps}\n                    />\n                ) : (\n                    <Attachment post={post}/>\n                )}\n            </div>\n            <div className='activity'>\n                {participantIds?.length ? (\n                    <Avatars\n                        userIds={participantIds}\n                        size='xs'\n                    />\n                ) : null}\n                {Boolean(totalReplies) && (\n                    <>\n                        {newReplies ? (\n                            <FormattedMessage\n                                id='threading.numNewReplies'\n                                defaultMessage='{newReplies, plural, =1 {# new reply} other {# new replies}}'\n                                values={{newReplies}}\n                            />\n                        ) : (\n                            <FormattedMessage\n                                id='threading.numReplies'\n                                defaultMessage='{totalReplies, plural, =0 {Reply} =1 {# reply} other {# replies}}'\n                                values={{totalReplies}}\n                            />\n                        )}\n                    </>\n                )}\n            </div>\n            {showListTutorialTip && isFirstThreadInList && isMobileView && (<CRTListTutorialTip/>)}\n        </article>\n    );\n}\n\nexport default memo(ThreadItem);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {memo} from 'react';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\n\nimport {makeGetChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getPost, isPostPriorityEnabled, makeGetPostsForThread} from 'mattermost-redux/selectors/entities/posts';\nimport {getCurrentRelativeTeamUrl} from 'mattermost-redux/selectors/entities/teams';\nimport {getThread} from 'mattermost-redux/selectors/entities/threads';\nimport {makeGetDisplayName} from 'mattermost-redux/selectors/entities/users';\n\nimport type {GlobalState} from 'types/store';\n\nimport ThreadItem from './thread_item';\nimport type {OwnProps} from './thread_item';\n\nfunction makeMapStateToProps() {\n    const getPostsForThread = makeGetPostsForThread();\n    const getChannel = makeGetChannel();\n    const getDisplayName = makeGetDisplayName();\n\n    return (state: GlobalState, ownProps: OwnProps) => {\n        const {threadId} = ownProps;\n\n        const post = getPost(state, threadId);\n\n        if (!post) {\n            return {};\n        }\n\n        return {\n            post,\n            channel: getChannel(state, post.channel_id),\n            currentRelativeTeamUrl: getCurrentRelativeTeamUrl(state),\n            displayName: getDisplayName(state, post.user_id, true),\n            postsInThread: getPostsForThread(state, post.id),\n            thread: getThread(state, threadId),\n            isPostPriorityEnabled: isPostPriorityEnabled(state),\n        };\n    };\n}\n\nexport default compose(\n    connect(makeMapStateToProps),\n    memo,\n)(ThreadItem) as React.FunctionComponent<OwnProps>;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo} from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport {areEqual} from 'react-window';\n\nimport type {UserThread} from '@mattermost/types/threads';\n\nimport SearchHintSVG from 'components/common/svg_images_components/search_hint_svg';\nimport LoadingScreen from 'components/loading_screen';\nimport NoResultsIndicator from 'components/no_results_indicator';\nimport {NoResultsLayout} from 'components/no_results_indicator/types';\nimport {SearchShortcut} from 'components/search_shortcut/search_shortcut';\nimport {ShortcutKeyVariant} from 'components/shortcut_key';\n\nimport {Constants} from 'utils/constants';\n\nimport ThreadItem from '../thread_item';\n\ntype Props = {\n    data: {\n        ids: Array<UserThread['id']>;\n        selectedThreadId?: UserThread['id'];\n    };\n    index: number;\n    style: any;\n};\n\nfunction Row({index, style, data}: Props) {\n    const itemId = data.ids[index];\n    const isSelected = data.selectedThreadId === itemId;\n\n    if (itemId === Constants.THREADS_LOADING_INDICATOR_ITEM_ID) {\n        return (\n            <LoadingScreen\n                message={<></>}\n                style={style}\n            />\n        );\n    }\n\n    if (itemId === Constants.THREADS_NO_RESULTS_ITEM_ID) {\n        return (\n            <NoResultsIndicator\n                style={{...style, padding: '16px 16px 16px 24px', background: 'rgba(var(--center-channel-color-rgb), 0.04)'}}\n                iconGraphic={<SearchHintSVG/>}\n                title={\n                    <FormattedMessage\n                        id='globalThreads.searchGuidance.title'\n                        defaultMessage='That’s the end of the list'\n                    />\n                }\n                subtitle={\n                    <FormattedMessage\n                        id='globalThreads.searchGuidance.subtitle'\n                        defaultMessage='If you’re looking for older conversations, try searching with {searchShortcut}'\n                        values={{\n                            searchShortcut: (\n                                <SearchShortcut\n                                    className='thread-no-results-subtitle-shortcut'\n                                    variant={ShortcutKeyVariant.TutorialTip}\n                                />\n                            ),\n                        }}\n                    />\n                }\n                titleClassName='thread-no-results-title'\n                subtitleClassName='thread-no-results-subtitle'\n                layout={NoResultsLayout.Horizontal}\n            />\n        );\n    }\n\n    return (\n        <ThreadItem\n            isSelected={isSelected}\n            key={itemId}\n            style={style}\n            threadId={itemId}\n            isFirstThreadInList={index === 0}\n        />\n    );\n}\n\nexport default memo(Row, areEqual);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo, useCallback, useEffect, useMemo} from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport {FixedSizeList} from 'react-window';\nimport InfiniteLoader from 'react-window-infinite-loader';\n\nimport type {UserThread} from '@mattermost/types/threads';\n\nimport ThreadsConstants from 'mattermost-redux/constants/threads';\n\nimport {Constants} from 'utils/constants';\n\nimport Row from './virtualized_thread_list_row';\n\ntype Props = {\n    ids: Array<UserThread['id']>;\n    loadMoreItems: (startIndex: number, stopIndex: number) => Promise<any>;\n    selectedThreadId?: UserThread['id'];\n    total: number;\n    isLoading?: boolean;\n    addNoMoreResultsItem?: boolean;\n};\n\nconst style = {\n    willChange: 'auto',\n};\n\nfunction VirtualizedThreadList({\n    ids,\n    selectedThreadId,\n    loadMoreItems,\n    total,\n    isLoading,\n    addNoMoreResultsItem,\n}: Props) {\n    const infiniteLoaderRef = React.useRef<any>();\n    const startIndexRef = React.useRef<number>(0);\n    const stopIndexRef = React.useRef<number>(0);\n\n    useEffect(() => {\n        if (ids.length > 0 && selectedThreadId) {\n            const index = ids.indexOf(selectedThreadId);\n            if (startIndexRef.current >= index || index > stopIndexRef.current) {\n                // eslint-disable-next-line no-underscore-dangle\n                infiniteLoaderRef.current?._listRef.scrollToItem(index);\n            }\n        }\n\n        // ids should not be on the dependency list as\n        // it will auto scroll to selected item upon\n        // infinite loading\n        // when the selectedThreadId changes it will get\n        // the new ids so no issue there\n    }, [selectedThreadId]);\n\n    const data = useMemo(\n        () => (\n            {\n                ids: addNoMoreResultsItem && ids.length === total ? [...ids, Constants.THREADS_NO_RESULTS_ITEM_ID] : (isLoading && ids.length !== total && [...ids, Constants.THREADS_LOADING_INDICATOR_ITEM_ID]) || ids,\n                selectedThreadId,\n            }\n        ),\n        [ids, selectedThreadId, isLoading, addNoMoreResultsItem, total],\n    );\n\n    const itemKey = useCallback((index, data) => data.ids[index], []);\n\n    const isItemLoaded = useCallback((index) => {\n        return ids.length === total || index < ids.length;\n    }, [ids, total]);\n\n    return (\n        <AutoSizer>\n            {({height, width}) => (\n                <InfiniteLoader\n                    ref={infiniteLoaderRef}\n                    itemCount={total}\n                    loadMoreItems={loadMoreItems}\n                    isItemLoaded={isItemLoaded}\n                    minimumBatchSize={ThreadsConstants.THREADS_PAGE_SIZE}\n                >\n                    {({onItemsRendered, ref}) => {\n                        return (\n                            <FixedSizeList\n                                onItemsRendered={({\n                                    overscanStartIndex,\n                                    overscanStopIndex,\n                                    visibleStartIndex,\n                                    visibleStopIndex,\n                                }) => {\n                                    onItemsRendered({\n                                        overscanStartIndex,\n                                        overscanStopIndex,\n                                        visibleStartIndex,\n                                        visibleStopIndex,\n                                    });\n                                    startIndexRef.current = visibleStartIndex;\n                                    stopIndexRef.current = visibleStopIndex;\n                                }}\n                                ref={ref}\n                                height={height}\n                                itemCount={data.ids.length}\n                                itemData={data}\n                                itemKey={itemKey}\n                                itemSize={133}\n                                style={style}\n                                width={width}\n                                className='virtualized-thread-list'\n                            >\n                                {Row}\n                            </FixedSizeList>\n                        );\n                    }\n                    }\n                </InfiniteLoader>\n            )}\n        </AutoSizer>\n    );\n}\n\nfunction areEqual(prevProps: Props, nextProps: Props) {\n    return (\n        prevProps.selectedThreadId === nextProps.selectedThreadId &&\n        prevProps.ids.join() === nextProps.ids.join() &&\n        prevProps.isLoading === nextProps.isLoading &&\n        prevProps.addNoMoreResultsItem === nextProps.addNoMoreResultsItem\n    );\n}\n\nexport default memo(VirtualizedThreadList, areEqual);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nimport {GenericModal} from '@mattermost/components';\n\nimport './mark_all_threads_as_read_modal.scss';\n\nexport type MarkAllThreadsAsReadModalProps = {\n    onConfirm: () => void;\n    onCancel: () => void;\n}\n\nfunction MarkAllThreadsAsReadModal({\n    onConfirm,\n    onCancel,\n}: MarkAllThreadsAsReadModalProps) {\n    const {formatMessage} = useIntl();\n\n    return (\n        <GenericModal\n            className='mark-all-threads-as-read'\n            id='mark-all-threads-as-read-modal'\n            compassDesign={true}\n            modalHeaderText={formatMessage({\n                id: 'mark_all_threads_as_read_modal.title',\n                defaultMessage: 'Mark all your threads as read?',\n            })}\n            confirmButtonText={formatMessage({\n                id: 'mark_all_threads_as_read_modal.confirm',\n                defaultMessage: 'Mark all as read',\n            })}\n            cancelButtonText={formatMessage({\n                id: 'mark_all_threads_as_read_modal.cancel',\n                defaultMessage: 'Cancel',\n            })}\n            onExited={onCancel}\n            handleCancel={onCancel}\n            handleConfirm={onConfirm}\n        >\n            <div className='mark_all_threads_as_read_modal__body'>\n                <span>\n                    {formatMessage({\n                        id: 'mark_all_threads_as_read_modal.description',\n                        defaultMessage: 'This will clear the unread state and mention badges on all your threads. Are you sure?',\n                    })}\n                </span>\n            </div>\n        </GenericModal>\n    );\n}\n\nexport default MarkAllThreadsAsReadModal;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport isEmpty from 'lodash/isEmpty';\nimport React, {memo, useCallback, useEffect} from 'react';\nimport type {PropsWithChildren} from 'react';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {PlaylistCheckIcon} from '@mattermost/compass-icons/components';\nimport type {UserThread} from '@mattermost/types/threads';\n\nimport {getThreadsForCurrentTeam, markAllThreadsInTeamRead} from 'mattermost-redux/actions/threads';\nimport {getInt} from 'mattermost-redux/selectors/entities/preferences';\nimport {getThreadCountsInCurrentTeam} from 'mattermost-redux/selectors/entities/threads';\n\nimport {trackEvent} from 'actions/telemetry_actions';\nimport {closeModal, openModal} from 'actions/views/modals';\nimport {getIsMobileView} from 'selectors/views/browser';\n\nimport NoResultsIndicator from 'components/no_results_indicator';\nimport CRTListTutorialTip from 'components/tours/crt_tour/crt_list_tutorial_tip';\nimport CRTUnreadTutorialTip from 'components/tours/crt_tour/crt_unread_tutorial_tip';\nimport Header from 'components/widgets/header';\nimport WithTooltip from 'components/with_tooltip';\n\nimport {A11yClassNames, Constants, CrtTutorialSteps, ModalIdentifiers, Preferences} from 'utils/constants';\nimport * as Keyboard from 'utils/keyboard';\n\nimport type {GlobalState} from 'types/store';\n\nimport VirtualizedThreadList from './virtualized_thread_list';\n\nimport Button from '../../common/button';\nimport {useThreadRouting} from '../../hooks';\nimport MarkAllThreadsAsReadModal from '../mark_all_threads_as_read_modal';\nimport type {MarkAllThreadsAsReadModalProps} from '../mark_all_threads_as_read_modal';\n\nimport './thread_list.scss';\n\nexport enum ThreadFilter {\n    none = '',\n    unread = 'unread'\n}\n\nexport const FILTER_STORAGE_KEY = 'globalThreads_filter';\n\ntype Props = {\n    currentFilter: ThreadFilter;\n    someUnread: boolean;\n    setFilter: (filter: ThreadFilter) => void;\n    selectedThreadId?: UserThread['id'];\n    ids: Array<UserThread['id']>;\n    unreadIds: Array<UserThread['id']>;\n};\n\nconst ThreadList = ({\n    currentFilter = ThreadFilter.none,\n    someUnread,\n    setFilter,\n    selectedThreadId,\n    unreadIds,\n    ids,\n}: PropsWithChildren<Props>) => {\n    const isMobileView = useSelector(getIsMobileView);\n    const unread = ThreadFilter.unread === currentFilter;\n    const data = unread ? unreadIds : ids;\n    const ref = React.useRef<HTMLDivElement>(null);\n    const {currentTeamId, currentUserId, clear, select} = useThreadRouting();\n    const tipStep = useSelector((state: GlobalState) => getInt(state, Preferences.CRT_TUTORIAL_STEP, currentUserId));\n    const showListTutorialTip = tipStep === CrtTutorialSteps.LIST_POPOVER;\n    const showUnreadTutorialTip = tipStep === CrtTutorialSteps.UNREAD_POPOVER;\n    const {formatMessage} = useIntl();\n    const dispatch = useDispatch();\n\n    const {total = 0, total_unread_threads: totalUnread} = useSelector(getThreadCountsInCurrentTeam) ?? {};\n\n    const [isLoading, setLoading] = React.useState<boolean>(false);\n    const [hasLoaded, setHasLoaded] = React.useState<boolean>(false);\n\n    const handleKeyDown = useCallback((e: KeyboardEvent) => {\n        // Ensure that arrow keys navigation is not triggered if the textbox is focused\n        const target = e.target as HTMLElement;\n        const tagName = target?.tagName?.toLowerCase();\n        if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\n            return;\n        }\n        const comboKeyPressed = e.altKey || e.metaKey || e.shiftKey || e.ctrlKey;\n        if (comboKeyPressed || (!Keyboard.isKeyPressed(e, Constants.KeyCodes.DOWN) && !Keyboard.isKeyPressed(e, Constants.KeyCodes.UP))) {\n            return;\n        }\n\n        // Don't switch threads if a modal or popup is open, since the focus is inside the modal/popup.\n        const noModalsAreOpen = document.getElementsByClassName(A11yClassNames.MODAL).length === 0;\n        const noPopupsDropdownsAreOpen = document.getElementsByClassName(A11yClassNames.POPUP).length === 0;\n        if (!noModalsAreOpen || !noPopupsDropdownsAreOpen) {\n            return;\n        }\n\n        let threadIdToSelect = 0;\n        if (selectedThreadId) {\n            const selectedThreadIndex = data.indexOf(selectedThreadId);\n            if (Keyboard.isKeyPressed(e, Constants.KeyCodes.DOWN)) {\n                if (selectedThreadIndex < data.length - 1) {\n                    threadIdToSelect = selectedThreadIndex + 1;\n                }\n\n                if (selectedThreadIndex === data.length - 1) {\n                    return;\n                }\n            }\n\n            if (Keyboard.isKeyPressed(e, Constants.KeyCodes.UP)) {\n                if (selectedThreadIndex > 0) {\n                    threadIdToSelect = selectedThreadIndex - 1;\n                } else {\n                    return;\n                }\n            }\n        }\n        select(data[threadIdToSelect]);\n\n        // hacky way to ensure the thread item loses focus.\n        ref.current?.focus();\n    }, [selectedThreadId, data]);\n\n    useEffect(() => {\n        document.addEventListener('keydown', handleKeyDown);\n        return () => {\n            document.removeEventListener('keydown', handleKeyDown);\n        };\n    }, [handleKeyDown]);\n\n    const handleRead = useCallback(() => {\n        setFilter(ThreadFilter.none);\n    }, [setFilter]);\n\n    const handleUnread = useCallback(() => {\n        trackEvent('crt', 'filter_threads_by_unread');\n        setFilter(ThreadFilter.unread);\n    }, [setFilter]);\n\n    const handleLoadMoreItems = useCallback(async (startIndex) => {\n        setLoading(true);\n        let before = data[startIndex - 1];\n\n        if (before === selectedThreadId) {\n            before = data[startIndex - 2];\n        }\n\n        await dispatch(getThreadsForCurrentTeam({unread, before}));\n\n        setLoading(false);\n        setHasLoaded(true);\n\n        return {data: true};\n    }, [currentTeamId, data, unread, selectedThreadId]);\n\n    const handleAllMarkedRead = useCallback(() => {\n        trackEvent('crt', 'mark_all_threads_read');\n        dispatch(markAllThreadsInTeamRead(currentUserId, currentTeamId));\n        if (currentFilter === ThreadFilter.unread) {\n            clear();\n        }\n    }, [currentTeamId, currentUserId, currentFilter]);\n\n    const handleOpenMarkAllAsReadModal = useCallback(() => {\n        const handleCloseMarkAllAsReadModal = () => {\n            dispatch(closeModal(ModalIdentifiers.MARK_ALL_THREADS_AS_READ));\n        };\n\n        const handleConfirm = () => {\n            handleAllMarkedRead();\n            handleCloseMarkAllAsReadModal();\n        };\n\n        const modalProp: MarkAllThreadsAsReadModalProps = {\n            onConfirm: handleConfirm,\n            onCancel: handleCloseMarkAllAsReadModal,\n        };\n\n        dispatch(openModal({\n            modalId: ModalIdentifiers.MARK_ALL_THREADS_AS_READ,\n            dialogType: MarkAllThreadsAsReadModal,\n            dialogProps: modalProp,\n        }));\n    }, [handleAllMarkedRead]);\n\n    return (\n        <div\n            tabIndex={0}\n            ref={ref}\n            className={'ThreadList'}\n            id={'threads-list-container'}\n        >\n            <Header\n                id={'tutorial-threads-mobile-header'}\n                heading={(\n                    <>\n                        <div className={'tab-button-wrapper'}>\n                            <Button\n                                className={'Button___large Margined'}\n                                isActive={currentFilter === ThreadFilter.none}\n                                onClick={handleRead}\n                            >\n                                <FormattedMessage\n                                    id='globalThreads.heading'\n                                    defaultMessage='Followed threads'\n                                />\n                            </Button>\n                        </div>\n                        <div\n                            id={'threads-list-unread-button'}\n                            className={'tab-button-wrapper'}\n                        >\n                            <Button\n                                className={'Button___large Margined'}\n                                isActive={currentFilter === ThreadFilter.unread}\n                                hasDot={someUnread}\n                                onClick={handleUnread}\n                            >\n                                <FormattedMessage\n                                    id='threading.filters.unreads'\n                                    defaultMessage='Unreads'\n                                />\n                            </Button>\n                            {showUnreadTutorialTip && <CRTUnreadTutorialTip/>}\n                        </div>\n                    </>\n                )}\n                right={(\n                    <div className='right-anchor'>\n                        <WithTooltip\n                            title={formatMessage({\n                                id: 'threading.threadList.markRead',\n                                defaultMessage: 'Mark all as read',\n                            })}\n                        >\n                            <Button\n                                id={'threads-list__mark-all-as-read'}\n                                className={'Button___large Button___icon'}\n                                onClick={handleOpenMarkAllAsReadModal}\n                                marginTop={true}\n                            >\n                                <span className='icon'>\n                                    <PlaylistCheckIcon size={18}/>\n                                </span>\n                            </Button>\n                        </WithTooltip>\n                    </div>\n                )}\n            />\n            <div\n                className='threads'\n                data-testid={'threads_list'}\n            >\n                <VirtualizedThreadList\n                    key={`threads_list_${currentFilter}`}\n                    loadMoreItems={handleLoadMoreItems}\n                    ids={data}\n                    selectedThreadId={selectedThreadId}\n                    total={unread ? totalUnread : total}\n                    isLoading={isLoading}\n                    addNoMoreResultsItem={hasLoaded && !unread}\n                />\n                {showListTutorialTip && !isMobileView && <CRTListTutorialTip/>}\n                {unread && !someUnread && isEmpty(unreadIds) ? (\n                    <NoResultsIndicator\n                        expanded={true}\n                        title={formatMessage({\n                            id: 'globalThreads.threadList.noUnreadThreads',\n                            defaultMessage: 'No unread threads',\n                        })}\n                        subtitle={formatMessage({\n                            id: 'globalThreads.threadList.noUnreadThreads.subtitle',\n                            defaultMessage: 'You\\'re all caught up',\n                        })}\n                    />\n                ) : null}\n            </div>\n        </div>\n    );\n};\nexport default memo(ThreadList);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo, useCallback} from 'react';\nimport type {ReactNode} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useSelector, useDispatch} from 'react-redux';\n\nimport {DotsVerticalIcon} from '@mattermost/compass-icons/components';\nimport type {UserThread} from '@mattermost/types/threads';\n\nimport {setThreadFollow} from 'mattermost-redux/actions/threads';\nimport {makeGetChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getPost, makeGetPostsForThread} from 'mattermost-redux/selectors/entities/posts';\n\nimport Header from 'components/widgets/header';\nimport WithTooltip from 'components/with_tooltip';\n\nimport type {GlobalState} from 'types/store';\n\nimport Button from '../../common/button';\nimport FollowButton from '../../common/follow_button';\nimport {useThreadRouting} from '../../hooks';\nimport ThreadMenu from '../thread_menu';\n\nimport './thread_pane.scss';\n\nconst getChannel = makeGetChannel();\nconst getPostsForThread = makeGetPostsForThread();\n\ntype Props = {\n    thread: UserThread;\n    children?: ReactNode;\n};\n\nconst ThreadPane = ({\n    thread,\n    children,\n}: Props) => {\n    const {formatMessage} = useIntl();\n    const dispatch = useDispatch();\n    const {\n        currentTeamId,\n        currentUserId,\n        goToInChannel,\n        select,\n    } = useThreadRouting();\n\n    const {\n        id: threadId,\n        is_following: isFollowing,\n        post: {\n            channel_id: channelId,\n        },\n    } = thread;\n\n    const channel = useSelector((state: GlobalState) => getChannel(state, channelId));\n    const post = useSelector((state: GlobalState) => getPost(state, thread.id));\n    const postsInThread = useSelector((state: GlobalState) => getPostsForThread(state, post.id));\n    const selectHandler = useCallback(() => select(), []);\n    let unreadTimestamp = post.edit_at || post.create_at;\n\n    // if we have the whole thread, get the posts in it, sorted from newest to oldest.\n    // First post is latest reply. Use that timestamp\n    if (postsInThread.length > 1) {\n        const p = postsInThread[0];\n        unreadTimestamp = p.edit_at || p.create_at;\n    }\n    const goToInChannelHandler = useCallback(() => {\n        goToInChannel(threadId);\n    }, [goToInChannel, threadId]);\n\n    const followHandler = useCallback(() => {\n        dispatch(setThreadFollow(currentUserId, currentTeamId, threadId, !isFollowing));\n    }, [dispatch, currentUserId, currentTeamId, threadId, isFollowing]);\n\n    return (\n        <div\n            id={'thread-pane-container'}\n            className='ThreadPane'\n        >\n            <Header\n                className='ThreadPane___header'\n                heading={(\n                    <>\n                        <Button\n                            className='Button___icon Button___large back'\n                            onClick={selectHandler}\n                        >\n                            <i className='icon icon-arrow-back-ios'/>\n                        </Button>\n                        <h3>\n                            <span className='separated'>\n                                {formatMessage({\n                                    id: 'threading.header.heading',\n                                    defaultMessage: 'Thread',\n                                })}\n                            </span>\n                            <Button\n                                className='separated'\n                                allowTextOverflow={true}\n                                onClick={goToInChannelHandler}\n                            >\n                                {channel?.display_name}\n                            </Button>\n                        </h3>\n                    </>\n                )}\n                right={(\n                    <>\n                        <FollowButton\n                            isFollowing={isFollowing}\n                            disabled={isFollowing == null}\n                            onClick={followHandler}\n                        />\n                        <ThreadMenu\n                            threadId={threadId}\n                            isFollowing={isFollowing}\n                            hasUnreads={Boolean(thread.unread_replies || thread.unread_mentions)}\n                            unreadTimestamp={unreadTimestamp}\n                        >\n                            <WithTooltip\n                                title={formatMessage({\n                                    id: 'threading.threadHeader.menu',\n                                    defaultMessage: 'More Actions',\n                                })}\n                            >\n                                <Button className='Button___icon Button___large'>\n                                    <DotsVerticalIcon size={18}/>\n                                </Button>\n                            </WithTooltip>\n                        </ThreadMenu>\n                    </>\n                )}\n            />\n            {children}\n        </div>\n    );\n};\n\nexport default memo(ThreadPane);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nconst ChatIllustration = (\n    <svg\n        width='125'\n        height='97'\n        viewBox='0 0 125 97'\n        fill='none'\n        xmlns='http://www.w3.org/2000/svg'\n    >\n        <g clipPath='url(#clip0_4210_74752)'>\n            <rect\n                opacity='0.08'\n                x='0.00390625'\n                width='50'\n                height='50'\n                rx='2'\n                fill='var(--button-bg)'\n            />\n            <rect\n                opacity='0.12'\n                x='30.0039'\n                y='50'\n                width='95'\n                height='28'\n                rx='2'\n                fill='var(--button-bg)'\n            />\n            <circle\n                cx='95.5039'\n                cy='32.5'\n                r='2.5'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.48'\n            />\n            <circle\n                cx='109.004'\n                cy='32.5'\n                r='2.5'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.48'\n            />\n            <circle\n                cx='122.504'\n                cy='32.5'\n                r='2.5'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.48'\n            />\n            <path\n                d='M95.0482 87.1199L105.004 97V46C105.004 44.8954 104.108 44 103.004 44H55.0039C53.8993 44 53.0039 44.8954 53.0039 46V84.5395C53.0039 85.644 53.8993 86.5395 55.0039 86.5395H93.6394C94.1672 86.5395 94.6736 86.7481 95.0482 87.1199Z'\n                fill='#28427B'\n            />\n            <path\n                d='M67.0039 65H97.0039'\n                stroke='#FFFFFF'\n                strokeOpacity='0.56'\n                strokeLinecap='round'\n            />\n            <path\n                d='M67.0039 72H86.0039'\n                stroke='#FFFFFF'\n                strokeOpacity='0.56'\n                strokeLinecap='round'\n            />\n            <path\n                d='M67.0039 59H77.0039'\n                stroke='#FFFFFF'\n                strokeOpacity='0.56'\n                strokeLinecap='round'\n            />\n            <path\n                d='M80.0039 59H93.0039'\n                stroke='#FFFFFF'\n                strokeOpacity='0.56'\n                strokeLinecap='round'\n            />\n            <path\n                d='M27.6089 69.5638L14.0039 83V14C14.0039 12.8954 14.8993 12 16.0039 12H82.0039C83.1085 12 84.0039 12.8954 84.0039 14V66.9868C84.0039 68.0914 83.1085 68.9868 82.0039 68.9868H29.0142C28.4881 68.9868 27.9832 69.1941 27.6089 69.5638Z'\n                fill='var(--center-channel-bg)'\n            />\n            <path\n                d='M27.2575 69.2081L14.5039 81.8035V14C14.5039 13.1716 15.1755 12.5 16.0039 12.5H82.0039C82.8323 12.5 83.5039 13.1716 83.5039 14V66.9868C83.5039 67.8153 82.8323 68.4868 82.0039 68.4868H29.0142C28.3566 68.4868 27.7254 68.746 27.2575 69.2081Z'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.8'\n            />\n            <circle\n                cx='32.0039'\n                cy='31'\n                r='9'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.32'\n            />\n            <path\n                d='M47.0039 27H63.0039'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.48'\n                strokeLinecap='round'\n            />\n            <path\n                d='M24.0039 51H74.0039'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.48'\n                strokeLinecap='round'\n            />\n            <path\n                d='M24.0039 58H46.0039'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.48'\n                strokeLinecap='round'\n            />\n            <path\n                d='M47.0039 33H72.0039'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.48'\n                strokeLinecap='round'\n            />\n            <path\n                d='M24.0039 45H41.0039'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.48'\n                strokeLinecap='round'\n            />\n            <path\n                d='M45.0039 45H63.0039'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.48'\n                strokeLinecap='round'\n            />\n            <path\n                d='M9.0039 39.5L9.0039 58L19.5039 58'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.8'\n                strokeLinecap='round'\n                strokeLinejoin='round'\n            />\n            <path\n                d='M9.00391 36.5L9.00391 30.5'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.8'\n                strokeLinecap='round'\n                strokeLinejoin='round'\n            />\n            <path\n                d='M9.00391 27.5L9.00391 25.5'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.8'\n                strokeLinecap='round'\n                strokeLinejoin='round'\n            />\n        </g>\n        <defs>\n            <clipPath id='clip0_4210_74752'>\n                <rect\n                    width='125'\n                    height='97'\n                    fill='white'\n                    transform='translate(0.00390625)'\n                />\n            </clipPath>\n        </defs>\n    </svg>\n);\n\nexport default ChatIllustration;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport React, {memo, useCallback, useEffect, useState} from 'react';\nimport type {ReactNode} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useSelector, useDispatch, shallowEqual} from 'react-redux';\nimport {Link, useRouteMatch} from 'react-router-dom';\n\nimport {getThreadCounts, getThreadsForCurrentTeam} from 'mattermost-redux/actions/threads';\nimport {getPost} from 'mattermost-redux/selectors/entities/posts';\nimport {\n    getThreadOrderInCurrentTeam,\n    getUnreadThreadOrderInCurrentTeam,\n    getThreadCountsInCurrentTeam,\n    getThread,\n} from 'mattermost-redux/selectors/entities/threads';\n\nimport {clearLastUnreadChannel} from 'actions/global_actions';\nimport {loadProfilesForSidebar} from 'actions/user_actions';\nimport {selectLhsItem} from 'actions/views/lhs';\nimport {suppressRHS, unsuppressRHS} from 'actions/views/rhs';\nimport {setSelectedThreadId} from 'actions/views/threads';\nimport {getSelectedThreadIdInCurrentTeam} from 'selectors/views/threads';\nimport {useGlobalState} from 'stores/hooks';\nimport LocalStorageStore from 'stores/local_storage_store';\n\nimport LoadingScreen from 'components/loading_screen';\nimport NoResultsIndicator from 'components/no_results_indicator';\n\nimport {PreviousViewedTypes} from 'utils/constants';\nimport {Mark, Measure, measureAndReport} from 'utils/performance_telemetry';\n\nimport type {GlobalState} from 'types/store/index';\nimport {LhsItemType, LhsPage} from 'types/store/lhs';\n\nimport ThreadList, {ThreadFilter, FILTER_STORAGE_KEY} from './thread_list';\nimport ThreadPane from './thread_pane';\n\nimport ChatIllustration from '../common/chat_illustration';\nimport {useThreadRouting} from '../hooks';\nimport ThreadViewer from '../thread_viewer';\n\nimport './global_threads.scss';\n\nconst GlobalThreads = () => {\n    const {formatMessage} = useIntl();\n    const dispatch = useDispatch();\n\n    const {url, params: {threadIdentifier}} = useRouteMatch<{threadIdentifier?: string}>();\n    const [filter, setFilter] = useGlobalState(ThreadFilter.none, FILTER_STORAGE_KEY);\n    const {currentTeamId, currentUserId, clear} = useThreadRouting();\n\n    const counts = useSelector(getThreadCountsInCurrentTeam);\n    const selectedThread = useSelector((state: GlobalState) => getThread(state, threadIdentifier));\n    const selectedThreadId = useSelector(getSelectedThreadIdInCurrentTeam);\n    const selectedPost = useSelector((state: GlobalState) => getPost(state, threadIdentifier!));\n    const threadIds = useSelector((state: GlobalState) => getThreadOrderInCurrentTeam(state, selectedThread?.id), shallowEqual);\n    const unreadThreadIds = useSelector((state: GlobalState) => getUnreadThreadOrderInCurrentTeam(state, selectedThread?.id), shallowEqual);\n    const numUnread = counts?.total_unread_threads || 0;\n\n    useEffect(() => {\n        dispatch(suppressRHS);\n        dispatch(selectLhsItem(LhsItemType.Page, LhsPage.Threads));\n        dispatch(clearLastUnreadChannel);\n        loadProfilesForSidebar();\n\n        const penultimateType = LocalStorageStore.getPreviousViewedType(currentUserId, currentTeamId);\n\n        if (penultimateType !== PreviousViewedTypes.THREADS) {\n            LocalStorageStore.setPenultimateViewedType(currentUserId, currentTeamId, penultimateType);\n            LocalStorageStore.setPreviousViewedType(currentUserId, currentTeamId, PreviousViewedTypes.THREADS);\n        }\n\n        // unsuppresses RHS on navigating away (unmount)\n        return () => {\n            dispatch(unsuppressRHS);\n        };\n    }, []);\n\n    useEffect(() => {\n        dispatch(getThreadCounts(currentUserId, currentTeamId));\n    }, [currentTeamId, currentUserId]);\n\n    useEffect(() => {\n        if (!selectedThreadId || selectedThreadId !== threadIdentifier) {\n            dispatch(setSelectedThreadId(currentTeamId, selectedThread?.id));\n        }\n    }, [currentTeamId, selectedThreadId, threadIdentifier]);\n\n    const isEmptyList = isEmpty(threadIds) && isEmpty(unreadThreadIds);\n\n    const [isLoading, setLoading] = useState(isEmptyList);\n\n    const isOnlySelectedThreadInList = (list: string[]) => {\n        return selectedThreadId && list.length === 1 && list[0] === selectedThreadId;\n    };\n\n    const shouldLoadThreads = isEmpty(threadIds) || isOnlySelectedThreadInList(threadIds);\n    const shouldLoadUnreadThreads = isEmpty(unreadThreadIds) || isOnlySelectedThreadInList(unreadThreadIds);\n\n    useEffect(() => {\n        const promises = [];\n\n        // this is needed to jump start threads fetching\n        if (shouldLoadThreads) {\n            promises.push(dispatch(getThreadsForCurrentTeam({unread: false})));\n        }\n\n        if (filter === ThreadFilter.unread && shouldLoadUnreadThreads) {\n            promises.push(dispatch(getThreadsForCurrentTeam({unread: true})));\n        }\n\n        Promise.all(promises).then(() => {\n            setLoading(false);\n        });\n    }, [filter, threadIds, unreadThreadIds]);\n\n    useEffect(() => {\n        if (!isLoading) {\n            measureAndReport({\n                name: Measure.GlobalThreadsLoad,\n                startMark: Mark.GlobalThreadsLinkClicked,\n                canFail: true,\n            });\n            performance.clearMarks(Mark.GlobalThreadsLinkClicked);\n        }\n    }, [isLoading]);\n\n    useEffect(() => {\n        if (!selectedThread && !selectedPost && !isLoading) {\n            clear();\n        }\n    }, [currentTeamId, selectedThread, selectedPost, isLoading, counts, filter]);\n\n    // cleanup on unmount\n    useEffect(() => {\n        return () => {\n            dispatch(setSelectedThreadId(currentTeamId, ''));\n        };\n    }, []);\n\n    const handleSelectUnread = useCallback(() => {\n        setFilter(ThreadFilter.unread);\n    }, []);\n\n    return (\n        <div\n            id='app-content'\n            className={classNames('GlobalThreads app__content', {'thread-selected': Boolean(selectedThread)})}\n        >\n            {isLoading || isEmptyList ? (\n                <div className='no-results__holder'>\n                    {isLoading ? (\n                        <LoadingScreen/>\n                    ) : (\n                        <NoResultsIndicator\n                            expanded={true}\n                            iconGraphic={ChatIllustration}\n                            title={formatMessage({\n                                id: 'globalThreads.noThreads.title',\n                                defaultMessage: 'No followed threads yet',\n                            })}\n                            subtitle={formatMessage({\n                                id: 'globalThreads.noThreads.subtitle',\n                                defaultMessage: 'Any threads you are mentioned in or have participated in will show here along with any threads you have followed.',\n                            })}\n                        />\n                    )}\n                </div>\n            ) : (\n                <>\n                    <ThreadList\n                        currentFilter={filter}\n                        setFilter={setFilter}\n                        someUnread={Boolean(numUnread)}\n                        selectedThreadId={threadIdentifier}\n                        ids={threadIds}\n                        unreadIds={unreadThreadIds}\n                    />\n                    {selectedThread && selectedPost ? (\n                        <ThreadPane\n                            thread={selectedThread}\n                        >\n                            <ThreadViewer\n                                rootPostId={selectedThread.id}\n                                useRelativeTimestamp={true}\n                                isThreadView={true}\n                            />\n                        </ThreadPane>\n                    ) : (\n                        <NoResultsIndicator\n                            expanded={true}\n                            iconGraphic={ChatIllustration}\n                            title={formatMessage({\n                                id: 'globalThreads.threadPane.unselectedTitle',\n                                defaultMessage: '{numUnread, plural, =0 {Looks like you’re all caught up} other {Catch up on your threads}}',\n                            }, {numUnread})}\n                            subtitle={formatMessage<ReactNode>({\n                                id: 'globalThreads.threadPane.unreadMessageLink',\n                                defaultMessage: 'You have {numUnread, plural, =0 {no unread threads} =1 {<link>{numUnread} thread</link>} other {<link>{numUnread} threads</link>}} {numUnread, plural, =0 {} other {with unread messages}}',\n                            }, {\n                                numUnread,\n                                link: (chunks) => (\n                                    <Link\n                                        key='single'\n                                        to={`${url}/${unreadThreadIds[0]}`}\n                                        onClick={handleSelectUnread}\n                                    >\n                                        {chunks}\n                                    </Link>\n                                ),\n                            })}\n                        />\n                    )}\n                </>\n            )}\n        </div>\n    );\n};\n\nexport default memo(GlobalThreads);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {useMemo, useCallback} from 'react';\nimport {useSelector, shallowEqual} from 'react-redux';\nimport {useParams, useHistory} from 'react-router-dom';\n\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserThread} from '@mattermost/types/threads';\n\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\n/**\n * GlobalThreads-specific hook for nav/routing, selection, and common data needed for actions.\n */\nexport function useThreadRouting() {\n    const matchParams = useParams<{team: string; threadIdentifier?: UserThread['id']}>();\n    const params = useMemo(() => matchParams, [matchParams.threadIdentifier, matchParams.team]);\n    const history = useHistory();\n\n    const currentTeamId = useSelector(getCurrentTeamId, shallowEqual);\n    const currentUserId = useSelector(getCurrentUserId, shallowEqual);\n\n    const select = useCallback((threadId?: UserThread['id']) => {\n        return history.push(`/${params.team}/threads${threadId ? '/' + threadId : ''}`);\n    }, [params.team]);\n\n    const clear = useCallback(() => history.replace(`/${params.team}/threads`), [params.team]);\n\n    const goToInChannel = useCallback((threadId?: UserThread['id'], teamName: Team['name'] = params.team) => {\n        return history.push(`/${teamName}/pl/${threadId ?? params.threadIdentifier}`);\n    }, [params.threadIdentifier, params.team]);\n\n    return {\n        params,\n        history,\n        currentTeamId,\n        currentUserId,\n        clear,\n        select,\n        goToInChannel,\n    };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport {ChannelsTourTip, TutorialTourName} from 'components/tours';\nimport type {ChannelsTourTipProps} from 'components/tours';\n\nconst CRTTourTip = (props: Omit<ChannelsTourTipProps, 'tourCategory'>) => {\n    return (\n        <ChannelsTourTip\n            {...props}\n            tourCategory={TutorialTourName.CRT_TUTORIAL_STEP}\n        />\n    );\n};\n\nexport default CRTTourTip;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React, {Fragment} from 'react';\nimport type {ReactNode, HTMLAttributes} from 'react';\n\nimport './header.scss';\n\ntype Props = {\n    heading: ReactNode;\n    level?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n    subtitle?: ReactNode;\n    right?: ReactNode;\n};\n\ntype HeadingTag = keyof Pick<JSX.IntrinsicElements, 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'>;\n\nconst Headings: Array<typeof Fragment | HeadingTag> = [Fragment, 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n\nconst Header = ({\n    level = 0,\n    heading,\n    subtitle,\n    right,\n    ...attrs\n}: Props & HTMLAttributes<HTMLElement>) => {\n    const H = Headings[level];\n    return (\n        <header\n            {...attrs}\n            className={classNames('Header', attrs.className)}\n        >\n            <div className='left'>\n                <H>{heading}</H>\n                {subtitle ? <p>{subtitle}</p> : null}\n            </div>\n            <div className='spacer'/>\n            {right}\n        </header>\n    );\n};\n\nexport default Header;\n"],"names":["translate","x","y","UpShortcut","formatMessage","useIntl","React","ShortcutKey","variant","ShortcutKeyVariant","TutorialTip","id","defaultMessage","DownShortcut","CRTListTutorialTip","isMobileView","useSelector","state","getIsMobileView","title","FormattedMessage","screen","upKey","downKey","punchOutIds","overlayPunchOut","useMeasurePunchouts","CRTTourTip","placement","pulsatingDotPlacement","pulsatingDotTranslate","CRTUnreadTutorialTip","b","value","SearchHintSVG","_ref","width","height","toString","viewBox","fill","xmlns","clipPath","d","opacity","fillOpacity","propTypes","_pt","Badge","styled","withConfig","displayName","props","priority","PostPriority","URGENT","PriorityLabel","className","IMPORTANT","AlertOutlineIcon","size","AlertCircleOutlineIcon","AttachmentCard","fallback","text","author_name","authorName","pretext","concat","stripMarkdown","File","has_preview_image","hasPreviewImage","mini_preview","miniPreview","mime_type","mimeType","extension","enableSVGs","imgSrc","useMemo","getFileThumbnailUrl","fileType","getFileType","FileTypes","SVG","alt","src","getFileUrl","cn","getCompassIconClassName","IMAGE","Card","_ref2","children","fileSizeToString","FileCard","_ref3","file","name","Object","assign","isRequired","memo","connect","ownProps","getFile","getConfig","EnableSVGs","_post$file_ids","post","file_ids","length","isMessageAttachmentArray","attachments","ThreadMenu","threadId","isFollowing","unreadTimestamp","hasUnreads","dispatch","useDispatch","params","team","currentTeamId","currentUserId","goToInChannel","useThreadRouting","isSaved","isPostFlagged","handleReadUnread","useCallback","lastViewedAt","Date","now","manuallyMarkThreadAsUnread","updateThreadRead","markLastPostInThreadAsUnread","MenuWrapper","stopPropagationOnToggle","Menu","ariaLabel","openLeft","ItemAction","extraText","onClick","setThreadFollow","unsavePost","savePost","copyToClipboard","getSiteURL","areEqual","prevProps","nextProps","markdownPreviewOptions","singleline","mentionHighlight","atMentions","ThreadItem","_post$props","_post$metadata","channel","currentRelativeTeamUrl","isSelected","postsInThread","style","thread","isFirstThreadInList","isPostPriorityEnabled","select","getCurrentUserId","showListTutorialTip","getInt","Preferences","CRT_TUTORIAL_STEP","CrtTutorialSteps","LIST_POPOVER","msgDeleted","postAuthor","ensureString","override_username","useEffect","teammate_id","getMissingProfilesByIds","channel_id","fetchChannel","participantIds","ids","participants","flatMap","user_id","reverse","edit_at","create_at","selectHandler","e","altKey","Boolean","unread_replies","imageProps","onImageHeightChanged","onImageLoaded","goToInChannelHandler","stopPropagation","handleFormattedTextClick","Utils","newReplies","unread_mentions","newMentions","last_reply_at","lastReplyAt","reply_count","totalReplies","is_following","p","classNames","tabIndex","over","Math","min","display_name","Tag","is_urgent","PriorityBadge","Timestamp","THREADING_TIME","WithTooltip","Button","marginTop","DotsVerticalIcon","dir","message","Markdown","Posts","POST_DELETED","options","imagesMetadata","metadata","images","Attachment","Avatars","userIds","values","compose","getPostsForThread","makeGetPostsForThread","getChannel","makeGetChannel","getDisplayName","makeGetDisplayName","getPost","getCurrentRelativeTeamUrl","getThread","Row","index","data","itemId","selectedThreadId","Constants","THREADS_LOADING_INDICATOR_ITEM_ID","LoadingScreen","THREADS_NO_RESULTS_ITEM_ID","NoResultsIndicator","_objectSpread","padding","background","iconGraphic","subtitle","searchShortcut","SearchShortcut","titleClassName","subtitleClassName","layout","NoResultsLayout","Horizontal","key","willChange","VirtualizedThreadList","loadMoreItems","total","isLoading","addNoMoreResultsItem","infiniteLoaderRef","startIndexRef","stopIndexRef","indexOf","_infiniteLoaderRef$cu","current","_listRef","scrollToItem","itemKey","isItemLoaded","AutoSizer","InfiniteLoader","ref","itemCount","minimumBatchSize","ThreadsConstants","THREADS_PAGE_SIZE","onItemsRendered","FixedSizeList","_ref4","overscanStartIndex","overscanStopIndex","visibleStartIndex","visibleStopIndex","itemData","itemSize","join","MarkAllThreadsAsReadModal","onConfirm","onCancel","GenericModal","compassDesign","modalHeaderText","confirmButtonText","cancelButtonText","onExited","handleCancel","handleConfirm","ThreadFilter","ThreadList","_useSelector","currentFilter","none","someUnread","setFilter","unreadIds","unread","clear","tipStep","showUnreadTutorialTip","UNREAD_POPOVER","total_unread_threads","totalUnread","getThreadCountsInCurrentTeam","setLoading","hasLoaded","setHasLoaded","handleKeyDown","_target$tagName","_ref$current","target","tagName","toLowerCase","metaKey","shiftKey","ctrlKey","Keyboard","KeyCodes","DOWN","UP","noModalsAreOpen","document","getElementsByClassName","A11yClassNames","MODAL","noPopupsDropdownsAreOpen","POPUP","threadIdToSelect","selectedThreadIndex","focus","addEventListener","removeEventListener","handleRead","handleUnread","trackEvent","handleLoadMoreItems","async","before","startIndex","getThreadsForCurrentTeam","handleAllMarkedRead","markAllThreadsInTeamRead","handleOpenMarkAllAsReadModal","handleCloseMarkAllAsReadModal","closeModal","ModalIdentifiers","MARK_ALL_THREADS_AS_READ","modalProp","openModal","modalId","dialogType","dialogProps","Header","heading","isActive","hasDot","right","PlaylistCheckIcon","isEmpty","expanded","ThreadPane","channelId","followHandler","allowTextOverflow","FollowButton","disabled","rx","cx","cy","r","stroke","strokeOpacity","strokeLinecap","strokeLinejoin","transform","GlobalThreads","url","threadIdentifier","useRouteMatch","filter","useGlobalState","counts","selectedThread","getSelectedThreadIdInCurrentTeam","selectedPost","threadIds","getThreadOrderInCurrentTeam","shallowEqual","unreadThreadIds","getUnreadThreadOrderInCurrentTeam","numUnread","suppressRHS","selectLhsItem","LhsItemType","Page","LhsPage","Threads","clearLastUnreadChannel","loadProfilesForSidebar","penultimateType","LocalStorageStore","getPreviousViewedType","PreviousViewedTypes","THREADS","setPenultimateViewedType","setPreviousViewedType","unsuppressRHS","getThreadCounts","setSelectedThreadId","isEmptyList","useState","isOnlySelectedThreadInList","list","shouldLoadThreads","shouldLoadUnreadThreads","promises","push","Promise","all","then","measureAndReport","Measure","GlobalThreadsLoad","startMark","Mark","GlobalThreadsLinkClicked","canFail","performance","clearMarks","handleSelectUnread","ChatIllustration","ThreadViewer","rootPostId","useRelativeTimestamp","isThreadView","link","chunks","Link","to","matchParams","useParams","history","useHistory","getCurrentTeamId","replace","teamName","arguments","undefined","ChannelsTourTip","tourCategory","TutorialTourName","Headings","Fragment","level","attrs","_objectWithoutProperties","_excluded","H"],"sourceRoot":""}

VaKeR 2022