{"version":3,"file":"js/ShowPost-ShowPost-page.0862659de9806404944a.js","mappings":"mOAkBO,MAAMA,EAAeC,IAC1B,MAAMC,GAAQC,EAAAA,EAAAA,MACRC,GAAOC,EAAAA,EAAAA,QAA8B,OACpCC,EAAWC,IAAgBC,EAAAA,EAAAA,WAAS,IACpCC,EAAYC,IAAiBF,EAAAA,EAAAA,UAAiBP,EAAMU,QAAQC,UAC5DC,EAA+BC,IAAoCN,EAAAA,EAAAA,WAAS,IAC5EO,EAAaC,IAAkBR,EAAAA,EAAAA,UAAwB,KACvDS,EAAqBC,IAA0BV,EAAAA,EAAAA,UAASP,EAAMU,QAAQQ,gBACvEC,GAAmBf,EAAAA,EAAAA,QAAuB,OAEzCgB,EAAOC,IAAYd,EAAAA,EAAAA,YAEpBe,EAAeC,IACC,MAAhBpB,EAAKqB,SAAoBrB,EAAKqB,QAAQC,SAASF,EAAEG,UACnDC,EAAAA,EAAAA,KACF,GAGFC,EAAAA,EAAAA,YAAU,KACR,GAAI5B,EAAM6B,YAER,OADAC,SAASC,iBAAiB,YAAaT,GAChC,KACLQ,SAASE,oBAAoB,YAAaV,EAAY,CAE1D,GACC,CAACtB,EAAM6B,cAEV,MAOMI,EAAaA,IAAMZ,OAASa,GAiB5BC,EAAaC,UACjBvB,GAAiC,EAAM,EAqCnCwB,EAAoBC,GAAmB,KAC5B,aAAXA,GACFC,OAAOC,SAASC,KAAO,YAAYzC,EAAMU,QAAQgC,MACjDC,EAAAA,EAAAA,IAAgBJ,OAAOC,SAASI,MAAMC,MACpC,IAAMC,EAAAA,GAAAA,QAAcC,EAAAA,GAAAC,EAAG,CAAEN,GAAI,yCAC7B,IAAMI,EAAAA,GAAAA,MAAYC,EAAAA,GAAAC,EAAG,CAAEN,GAAI,wCAET,SAAXJ,GACThC,GAAa,GACb2B,KACoB,WAAXK,GACTzB,GAAiC,EACnC,EA6BIH,EAAUV,EAAMU,QAEhBuC,IAAmBvC,EAAQwC,YAAcxC,EAAQyC,UACrDC,EAAAA,cAAA,QAAM,eAAc,mCAAmC1C,EAAQyC,SAASE,YAAWC,EAAAA,EAAAA,IAAWrD,EAAMsD,cAAe7C,EAAQwC,aAAa,YAGpIM,GAAYC,EAAAA,EAAAA,IAAS,CACzB,4BAA4B,EAC5B,eAAgBzD,EAAM6B,YACtB,cAAe7B,EAAM6B,cAGvB,OACEuB,EAAAA,cAAA,OAAKV,GAAI,WAAWhC,EAAQgC,MAC1BU,EAAAA,cAACM,EAAAA,GAAM,CAACC,QAAS,EAAGC,UAAU,iCAtC9BR,EAAAA,cAACS,EAAAA,GAAMC,OAAM,CAACC,OAAQnD,EAA+BoD,QAAS7B,EAAY8B,QAAQ,EAAOC,KAAK,SAC5Fd,EAAAA,cAACS,EAAAA,GAAMM,OAAM,KACXf,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,gCAEZU,EAAAA,cAACS,EAAAA,GAAMQ,QAAO,KACZjB,EAAAA,cAAA,SACEA,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,2BAA0B4B,WAAA,CAAAC,EACJnB,EAAAA,cAAA,oBAKpCA,EAAAA,cAACS,EAAAA,GAAMW,OAAM,KACXpB,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,SAASC,QAhEXvC,iBACGwC,EAAAA,GAAAA,cAAsB5E,EAAM6E,KAAKC,OAAQ9E,EAAMU,QAAQgC,KACjEqC,IACXvC,SAASwC,QACX,GA6DQ5B,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,mBAEZU,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,WAAWC,QAASxC,GAClCiB,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,qBAuBdU,EAAAA,cAAA,OAAKQ,UAAU,QACbR,EAAAA,cAAC6B,EAAAA,GAAM,CAACC,KAAMxE,EAAQwE,QAExB9B,EAAAA,cAAA,OAAK+B,IAAKhF,EAAMyD,UAAWJ,GACzBJ,EAAAA,cAAA,OAAKQ,UAAU,QACbR,EAAAA,cAACM,EAAAA,GAAM,CAAC0B,QAAQ,WACdhC,EAAAA,cAACM,EAAAA,GAAM,KACLN,EAAAA,cAACiC,EAAAA,GAAQ,CAACH,KAAMxE,EAAQwE,OAAS,IACjC9B,EAAAA,cAAA,OAAKQ,UAAU,WAAU,KACrBR,EAAAA,cAACkC,EAAAA,GAAM,CAACC,OAAQtF,EAAMsD,cAAeiC,KAAM9E,EAAQ+E,YAAa,IAAExC,KAGtE5C,GACA+C,EAAAA,cAACsC,EAAAA,GAAQ,CAACC,SAAS,OAAOC,aAAcxC,EAAAA,cAACyC,EAAAA,GAAI,CAACC,OAAQC,EAAAA,EAAoBC,MAAM,KAAKC,OAAO,QAC1F7C,EAAAA,cAACsC,EAAAA,GAASQ,SAAQ,CAACvB,QAAStC,EAAiB,aAC3Ce,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,uBArItBzC,EAAMkG,QAAQC,kBACTnG,EAAMkG,QAAQjB,KAAKmB,gBAAkBrG,EAAMU,QAAQwE,KAAKxC,KAAOzC,EAAMkG,QAAQjB,KAAKxC,KAuI3EU,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACsC,EAAAA,GAASY,QAAO,MACjBlD,EAAAA,cAACsC,EAAAA,GAASQ,SAAQ,CAACvB,QAAStC,EAAiB,SAC3Ce,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,iBAEZU,EAAAA,cAACsC,EAAAA,GAASQ,SAAQ,CAACvB,QAAStC,EAAiB,UAAWuB,UAAU,gBAChER,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,uBAQxBU,EAAAA,cAAA,WACG/C,EACC+C,EAAAA,cAACmD,EAAAA,GAAI,CAACnF,MAAOA,GACXgC,EAAAA,cAACoD,EAAAA,EAAa,CAACC,UAAWxG,EAAMkG,QAAQC,gBAAiBM,aAAclG,EAAYmG,SAAUlG,EAAemG,YAAalG,EAAQC,UACjIyC,EAAAA,cAACyD,EAAAA,GAAkB,CAACC,MAAM,cAAcC,MAAOrG,EAAQI,YAAakG,WAAY,EAAGL,SAAU5F,IAC7FqC,EAAAA,cAACqB,EAAAA,GAAM,CAACP,KAAK,QAAQS,QA7IlBvC,UACf,MAAM6E,QAAiBrC,EAAAA,GAAAA,cAAsB5E,EAAM6E,KAAKC,OAAQ9E,EAAMU,QAAQgC,GAAIlC,EAAYM,GAC1FmG,EAASlC,GACXvC,SAASwC,SAET3D,EAAS4F,EAAS7F,MACpB,EAuIoDsD,QAAQ,WAC9CtB,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,iBAEZU,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,WAAWR,KAAK,QAAQS,QAtJnCvC,UACjB9B,GAAa,GACbG,EAAcT,EAAMU,QAAQC,SAC5BsB,GAAY,GAoJEmB,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,oBAIdU,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAC8D,EAAAA,GAAQ,CAACC,KAAMzG,EAAQC,QAASyG,MAAM,SACtC1G,EAAQI,aAAeJ,EAAQI,YAAYuG,KAAKC,GAAMlE,EAAAA,cAACmE,EAAAA,EAAW,CAACC,IAAKF,EAAGG,KAAMH,MAClFlE,EAAAA,cAACsE,EAAAA,GAAS,CAACC,UAAW3G,EAAqBG,iBAAkBA,EAAkByG,eApItExF,UACrB,MAAM6E,QAAiBrC,EAAAA,GAAAA,sBAA8B5E,EAAM6E,KAAKC,OAAQpE,EAAQgC,GAAImF,GACpF,GAAIZ,EAASlC,GAAI,CACf,MAAM+C,EAAQb,EAASc,KAAKD,MAE5B7G,GAAwB+G,IACtB,MAAMC,EAAY,IAAKD,GAAc,IAC/BE,EAAgBD,EAAUE,WAAWC,GAAMA,EAAEP,QAAUA,IAC7D,IAAuB,IAAnBK,EAAsB,CACxB,MAAMG,EAAWP,EAAQG,EAAUC,GAAeI,MAAQ,EAAIL,EAAUC,GAAeI,MAAQ,EAC9E,IAAbD,EACFJ,EAAUM,OAAOL,EAAe,GAEhCD,EAAUC,GAAiB,IACtBD,EAAUC,GACbI,MAAOD,EACPG,WAAYV,EAGlB,MAAWA,GACTG,EAAUQ,KAAK,CAAEZ,QAAOS,MAAO,EAAGE,YAAY,IAEhD,OAAOP,CAAS,GAEpB,SAkHM,ECpMGS,EAAgB1I,IAC3B,MAAM2I,EAAcA,IAAM,wBAAqB3I,EAAM6E,KAAKnC,KAEpDkG,EAAsBA,IACnBC,EAAAA,GAAM1C,QAAQ2C,IAAIH,KAGrB1I,GAAQC,EAAAA,EAAAA,OAGP6I,EAAmBC,IAAwBzI,EAAAA,EAAAA,WAAS,IACpDO,EAAaC,IAAkBR,EAAAA,EAAAA,UAAwB,KACvDa,EAAOC,IAAYd,EAAAA,EAAAA,eAA8B2B,IACjD+G,EAAUC,IAAe3I,EAAAA,EAAAA,WAAS,IAGzCqB,EAAAA,EAAAA,YAAU,KACRsH,GAAY,EAAK,GAChB,IAEH,MA0BMC,GAAiBC,EAAAA,EAAAA,cAAaC,IAClCR,EAAAA,GAAM1C,QAAQmD,IAAIX,IAAeU,EAAM,GACtC,IAEH,OACEjG,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACmG,EAAAA,GAAW,CAACxF,OAAQgF,EAAmB/E,QAhC1BwF,IAAMR,GAAqB,KAiCzC5F,EAAAA,cAACM,EAAAA,GAAM,CAACC,QAAS,EAAGC,UAAU,kBAAkB6F,MAAM,SACnDC,EAAAA,GAAMvD,QAAQC,iBAAmBhD,EAAAA,cAAC6B,EAAAA,GAAM,CAACC,KAAMwE,EAAAA,GAAMvD,QAAQjB,OAC9D9B,EAAAA,cAAA,OAAKQ,UAAU,wCACbR,EAAAA,cAACmD,EAAAA,GAAI,CAACnF,MAAOA,GACVsI,EAAAA,GAAMvD,QAAQC,iBACbhD,EAAAA,cAAA,OAAKQ,UAAU,QACbR,EAAAA,cAACiC,EAAAA,GAAQ,CAACH,KAAMwE,EAAAA,GAAMvD,QAAQjB,QAKjC+D,EACC7F,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACoD,EAAAA,EAAa,CACZC,UAAWiD,EAAAA,GAAMvD,QAAQC,gBACzBO,SAAUwC,EACVQ,QA/BMC,KACf3J,EAAMkG,QAAQC,iBACjB4C,GAAqB,EACvB,EA6BctC,aAAckC,IACdhC,YAAaiD,EAAAA,GAAK7G,EAAE,oCAAqC,CAAE8G,QAAS,sBAIpE1G,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACyD,EAAAA,GAAkB,CAACC,MAAM,cAAcE,WAAY,EAAGL,SAAU5F,IACjEqC,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,UAAUC,QAtD7BvC,UAFUf,OAASa,GAMhC,MAAMvB,EAAUiI,IAEVmB,QAAenF,EAAAA,GAAAA,cAAsB5E,EAAM6E,KAAKC,OAAQnE,GAAW,GAAIG,GACzEiJ,EAAOhF,IACT8D,EAAAA,GAAM1C,QAAQ6D,OAAOrB,KACrBnG,SAASwC,UAET3D,EAAS0I,EAAO3I,MAClB,GA2CkBgC,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,qBAOlBU,EAAAA,cAAA,OAAKQ,UAAU,iCAAiCiG,EAAAA,GAAK7G,EAAE,oCAAqC,CAAE8G,QAAS,wBAK9G,EClGMG,EAAmBjK,GAE5BoD,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,EAAGC,UAAU,uBAC5BR,EAAAA,cAAA,QAAMQ,UAAU,iBACdR,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,sBAEZU,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,EAAGC,UAAU,kBAC3B5D,EAAMmK,SAAS9C,KAAK+C,GACnBhH,EAAAA,cAACrD,EAAW,CAACyH,IAAK4C,EAAE1H,GAAImC,KAAM7E,EAAM6E,KAAMnE,QAAS0J,EAAGvI,YAAa7B,EAAMqK,qBAAuBD,EAAE1H,OAEpGU,EAAAA,cAACsF,EAAY,CAAC7D,KAAM7E,EAAM6E,U,8DCvBhCyF,EAAS,IAAI,IAAJ,CAAiB,CAC5B,GAAM,kBACN,IAAO,wBACP,QAAW,YACX,QAAW,+NAEA,QAAWA,GACxB,UCGaC,EAAevK,GAMxBoD,EAAAA,cAACM,EAAAA,GAAM,CAACE,UAAU,2CAA2Ce,QAL/CA,KACd3E,EAAM2E,QAAQ3E,EAAMwK,IAAI,GAKtBpH,EAAAA,cAACyC,EAAAA,GAAI,CAACC,OAAQ2E,EAAW7G,UAAW,uBAAuB5D,EAAM0K,UAAY,gBAC7EtH,EAAAA,cAACuH,EAAAA,GAAO,CAACH,IAAKxK,EAAMwK,OCLbI,EAAa5K,IACxB,MAAMC,GAAQC,EAAAA,EAAAA,MACR2K,EAAU5K,EAAMkG,QAAQC,iBAAmBnG,EAAMkG,QAAQjB,KAAKmB,gBAAkBrG,EAAM8K,KAAKC,OAAS,GAEnG1K,EAAWC,IAAgBC,EAAAA,EAAAA,WAAS,IACpCyK,EAAcC,IAAmB1K,EAAAA,EAAAA,UAASP,EAAM8K,KAAKI,QAAQC,GAAMnL,EAAM6E,KAAKiG,KAAKM,QAAQD,EAAEE,OAAS,KAEvGC,EAAsBlJ,UAC1B,MAAMmJ,EAAMP,EAAaI,QAAQZ,GACjC,IAAIgB,EAA0B,GAE1BD,GAAO,SACc3G,EAAAA,GAAAA,YAAoB4F,EAAIa,KAAMrL,EAAM6E,KAAKC,SACnDC,KACXyG,EAAmB,IAAIR,GACvBQ,EAAiBjD,OAAOgD,EAAK,WAGR3G,EAAAA,GAAAA,UAAkB4F,EAAIa,KAAMrL,EAAM6E,KAAKC,SACjDC,KACXyG,EAAmB,IAAIR,EAAcR,IAIzCS,EAAgBO,EAAiB,EAG7BC,EAAkBA,KAClBZ,GACFvK,GAAcD,EAChB,EAGF,IAAKwK,GAAmC,IAAxBG,EAAaD,OAC3B,OAAO,KAGT,MAAMW,EACJtI,EAAAA,cAACM,EAAAA,GAAM,CAACC,QAAS,EAAG8F,MAAM,UACvBuB,EAAaD,OAAS,GAAKC,EAAa3D,KAAKmD,GAAQpH,EAAAA,cAACuH,EAAAA,GAAO,CAACnD,IAAKgD,EAAI9H,GAAI8H,IAAKA,EAAKmB,MAAI,MAC1FvI,EAAAA,cAACM,EAAAA,GAAM,CAACC,QAAS,EAAG8F,MAAM,SAAS7F,UAAU,YAAYe,QAAS8G,GAChErI,EAAAA,cAAA,YACEA,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,sBAMZkJ,EAAe5L,EAAM8K,KAAKC,OAAS,GACvC3H,EAAAA,cAAC8G,EAAAA,GAAM,CAAC9E,QAAQ,UAAUxB,UAAU,oBACjC5D,EAAM8K,KAAKzD,KAAKmD,GACfpH,EAAAA,cAACmH,EAAW,CAAC/C,IAAKgD,EAAI9H,GAAI8H,IAAKA,EAAKE,SAAUM,EAAaI,QAAQZ,IAAQ,EAAG7F,QAAS2G,MAEzFlI,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,YAAYR,KAAK,QAAQS,QAAS8G,GAChDrI,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,mBAKhB,OAAIzC,EAAM4L,WAENzI,EAAAA,cAAC8G,EAAAA,GAAM,KACL9G,EAAAA,cAACM,EAAAA,GAAM,CAACC,QAAS,EAAGC,UAAU,iBAC5BR,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,gBAEXgJ,GAMLtI,EAAAA,cAAC8G,EAAAA,GAAM,KACL9G,EAAAA,cAACM,EAAAA,GAAM,CAACC,QAAS,EAAG8F,MAAM,SAAS7F,UAAU,8BACzCvD,GAAaqL,EACdrL,GAAauL,GAET,ECzFb,IAAI,EAAS,IAAI,IAAJ,CAAiB,CAC5B,GAAM,iBACN,IAAO,uBACP,QAAW,YACX,QAAW,uPAEA,QAAW,GACxB,UCMaE,EAAgB9L,IAC3B,MAAMC,GAAQC,EAAAA,EAAAA,OACP6L,EAAYC,IAAiBzL,EAAAA,EAAAA,UAASP,EAAM+L,YAE7CE,EAAyB7J,UAC7B,MAAME,EAASyJ,EAAanH,EAAAA,GAAAA,YAAsBA,EAAAA,GAAAA,iBAE3BtC,EAAOtC,EAAM6E,KAAKC,SAC5BC,IACXiH,GAAeD,EACjB,EAGF,IAAK9L,EAAMkG,QAAQC,gBACjB,OAAO,KAGT,MAAM8F,EAASH,EACb3I,EAAAA,cAACqB,EAAAA,GAAM,CAACb,UAAU,gEAAgEe,QAASsH,EAAwBxF,SAAUxG,EAAM4L,YACjIzI,EAAAA,cAACyC,EAAAA,GAAI,CAACC,OAAQ2E,IAAc,IAC5BrH,EAAAA,cAAA,YACEA,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,sBAIdU,EAAAA,cAACqB,EAAAA,GAAM,CAACb,UAAU,gEAAgEe,QAASsH,EAAwBxF,SAAUxG,EAAM4L,YACjIzI,EAAAA,cAACyC,EAAAA,GAAI,CAACC,OAAQqG,IACd/I,EAAAA,cAAA,YACEA,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,mBAKhB,OAAOU,EAAAA,cAAC8G,EAAAA,GAAM,KAAEgC,EAAgB,ECjCrBE,EAAepM,IAC1B,MAAMC,GAAQC,EAAAA,EAAAA,OACPmM,EAAOC,IAAY/L,EAAAA,EAAAA,UAASP,EAAMqM,QAClCE,EAAUC,IAAejM,EAAAA,EAAAA,UAASP,EAAM6E,KAAK0H,WAC7CxD,EAAmBC,IAAwBzI,EAAAA,EAAAA,WAAS,GAkBrDkM,EADSC,EAAAA,GAAWC,IAAI3M,EAAM6E,KAAK+H,QACfC,QAAU5M,EAAM4L,WAEpCiB,EAAaP,EAAWnJ,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,iBAAgCU,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,gBAC5EqK,EAAOR,EAAW9B,EAAYuC,EAAAA,EAEpC,OACE5J,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,GACfP,EAAAA,cAACmG,EAAAA,GAAW,CAACxF,OAAQgF,EAAmB/E,QAV1BwF,IAAMR,GAAqB,KAWzC5F,EAAAA,cAAA,OAAKQ,UAAU,oBACbR,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,UAAUC,QAzBbvC,UACjB,IAAKnC,EAAMkG,QAAQC,gBAEjB,YADA4C,GAAqB,GAIvB,MAAM/B,QAAiBrC,EAAAA,GAAAA,WAAmB5E,EAAM6E,KAAKC,QACjDmC,EAASlC,KACXuH,EAASrF,EAASc,KAAKkF,MAAQZ,EAAQ,EAAIA,EAAQ,GACnDG,EAAYvF,EAASc,KAAKkF,OAC5B,EAemDxG,SAAUgG,EAAYrF,MAAO,CAAE8F,SAAU,UACtF9J,EAAAA,cAACM,EAAAA,GAAM,CAACC,QAAS,EAAGyB,QAAQ,SAASxB,UAAU,UAC7CR,EAAAA,cAACyC,EAAAA,GAAI,CAACC,OAAQiH,IAAQ,IAAC3J,EAAAA,cAAA,YAAO0J,MAIpC1J,EAAAA,cAACM,EAAAA,GAAM,CAAC+F,MAAM,UACZrG,EAAAA,cAAA,QAAMQ,UAAU,yBAAyBwD,MAAO,CAAE+F,SAAU,OAAQC,UAAW,SAC5Ef,GAEHjJ,EAAAA,cAAA,QAAMQ,UAAU,yBAAmC,IAAVyI,EAAc,OAAS,UAE3D,EC5CAgB,EAAmBrN,IAC9B,MAAMC,GAAQC,EAAAA,EAAAA,OACPiH,EAAMmG,IAAW/M,EAAAA,EAAAA,UAAS,KAC1Ba,EAAOC,IAAYd,EAAAA,EAAAA,YAYpBqM,EAASF,EAAAA,GAAWC,IAAI3M,EAAM6E,KAAK+H,QACzC,OAAK3M,EAAMkG,QAAQC,iBAAoBnG,EAAMkG,QAAQjB,KAAKqI,kBAAmBX,EAAOC,OAKlFzJ,EAAAA,cAACS,EAAAA,GAAMC,OAAM,CAACC,OAAQ/D,EAAMwN,UAAWxJ,QAAShE,EAAMyN,aAAcxJ,QAAQ,EAAOC,KAAK,SACtFd,EAAAA,cAACS,EAAAA,GAAMQ,QAAO,KACZjB,EAAAA,cAACmD,EAAAA,GAAI,CAACnF,MAAOA,GACXgC,EAAAA,cAACsK,EAAAA,GAAQ,CACP5G,MAAM,OACNH,SAAU2G,EACVjE,MAAOlC,EACPP,YAAaiD,EAAAA,GAAK7G,EAAE,4CAA6C,CAAE8G,QAAS,gDAE5E1G,EAAAA,cAAA,QAAMQ,UAAU,cACdR,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,qCAAoC4B,WAAA,CAAAC,EAC7BnB,EAAAA,cAAA,sBAOzBA,EAAAA,cAACS,EAAAA,GAAMW,OAAM,KACXpB,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,SAASC,QAnCVvC,UACnB,MAAM6E,QAAiBrC,EAAAA,GAAAA,WAAmB5E,EAAM6E,KAAKC,OAAQqC,GACzDF,EAASlC,IACX/E,EAAMyN,eACNE,EAAAA,GAAUC,UACD3G,EAAS7F,OAClBC,EAAS4F,EAAS7F,MACpB,GA6BMgC,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,mBAEZU,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,WAAWC,QAAS3E,EAAMyN,cACxCrK,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,qBA3BT,IAiCG,E,cClDP,MAAMmL,EAAc7N,IACzB,MAAO8N,EAAOC,IAAYxN,EAAAA,EAAAA,UAAS,KAC5ByN,EAAOC,IAAY1N,EAAAA,EAAAA,UAAiB,KACpC2N,EAAcC,IAAmB5N,EAAAA,EAAAA,YA2BxC,OAzBAqB,EAAAA,EAAAA,YAAU,KACR,IAAKkM,EACH,OAGF,MAAMM,EAAQC,YAAW,KACvBzJ,EAAAA,GAAAA,YAAoB,CAAEkJ,QAAOQ,MAAO,IAAKzL,MAAM0L,IAC7C,GAAIA,EAAIxJ,GAAI,CACV,MAAMyJ,EACJxO,EAAMyO,SAAWzO,EAAMyO,QAAQ1D,OAAS,EAAIwD,EAAIxG,KAAKmD,QAAQwD,GAAM1O,EAAMyO,UAAgD,IAArCzO,EAAMyO,QAAQrD,QAAQsD,EAAE5J,UAAkByJ,EAAIxG,KACpIkG,EAASO,EACX,IACA,GACD,KAEH,MAAO,KACLG,aAAaP,EAAM,CACpB,GACA,CAACN,IAQF1K,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACwL,EAAAA,GAAK,CACJ9H,MAAM,QACNiG,KAAM8B,EAAAA,EACNjI,YAAaiD,EAAAA,GAAK7G,EAAE,wCAAyC,CAAE8G,QAAS,4BACxET,MAAOyE,EACPnH,SAAUoH,IAEZ3K,EAAAA,cAAA,OAAKQ,UAAU,yCACZoK,EAAM3G,KAAKyH,IACV1L,SAAAA,cAAC8G,EAAAA,GAAM,CAACvF,SAhBIE,EAgBgBiK,EAhBD,KACjC9O,EAAM+O,UAAUlK,EAAKC,QACrBqJ,EAAgBtJ,EAAK,GAciBjB,UAAW,8CAA6CsK,IAAiBY,EAAI,sBAAwB,IAAMtH,IAAKsH,EAAEpM,IAChJU,EAAAA,cAACM,EAAAA,GAAM,CAACE,UAAU,YAChBR,EAAAA,cAAA,YAAM,IAAE0L,EAAEhK,QAAc,IAAC1B,EAAAA,cAAA,YAAM,KAAe,IAACA,EAAAA,cAAC4L,EAAAA,GAAc,CAACpC,OAAQF,EAAAA,GAAWC,IAAImC,EAAElC,UAAW,IAACxJ,EAAAA,cAAA,YAAM,KAAgB,IAC1HA,EAAAA,cAAA,YACEA,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,iCAAgCuM,OAAA,CAAA1K,EAAEuK,EAAEI,gBAGlD9L,EAAAA,cAAA,YAAO0L,EAAEK,QAvBCtK,KAyBb,KAEF,E,yZC3CA,MAAMuK,UAAsBhM,EAAAA,UACjCiM,WAAAA,CAAYrP,GACVsP,MAAMtP,GAAMuP,EAAA,eASGnN,UACf,MAAM2H,QAAenF,EAAAA,GAAAA,QAAgB4K,KAAKxP,MAAM6E,KAAKC,OAAQ0K,KAAKC,OAC9D1F,EAAOhF,GACTvC,SAASwC,SAETwK,KAAKE,SAAS,CACZtO,MAAO2I,EAAO3I,OAElB,IACDmO,EAAA,kBAEoBI,IACfA,GACFH,KAAKE,SAAS,CAAE9C,OAAQ+C,EAAItG,OAC9B,IACDkG,EAAA,0BAE4BK,IAC3BJ,KAAKE,SAAS,CAAEE,kBAAiB,IAClCL,EAAA,gBAEkBpI,IACjBqI,KAAKE,SAAS,CAAEvI,QAAO,IA7BvBqI,KAAKC,MAAQ,CACX7C,OAAQ4C,KAAKxP,MAAM6E,KAAK+H,OACxBgD,eAAgB,EAChBzI,KAAMqI,KAAKxP,MAAM6E,KAAKoC,SAAWuI,KAAKxP,MAAM6E,KAAKoC,SAASE,KAAO,GAErE,CA2BO0I,MAAAA,GACL,MAAMC,EAAUpD,EAAAA,GAAWqD,IAAI1I,KAAK2I,IAClC,MAAMtN,EAAK,mBAAmBsN,EAAE3G,MAAM4G,aACtC,MAAO,CACL5G,MAAO2G,EAAE3G,MAAM4G,WACfC,MAAOrG,EAAAA,GAAK7G,EAAEN,EAAI,CAAEoH,QAASkG,EAAEb,QAChC,IA2CH,OAvCE/L,EAAAA,cAACS,EAAAA,GAAMC,OAAM,CAACC,OAAQyL,KAAKxP,MAAMwN,UAAWxJ,QAASwL,KAAKxP,MAAMmQ,aAAclM,QAAQ,EAAOC,KAAK,SAChGd,EAAAA,cAACS,EAAAA,GAAMQ,QAAO,KACZjB,EAAAA,cAACmD,EAAAA,GAAI,CAACnF,MAAOoO,KAAKC,MAAMrO,MAAOwC,UAAU,mBACvCR,EAAAA,cAACgN,EAAAA,GAAM,CAACtJ,MAAM,SAASoJ,MAAM,SAASG,aAAcb,KAAKC,MAAM7C,OAAQkD,QAASA,EAASnJ,SAAU6I,KAAKc,YACvGd,KAAKC,MAAM7C,SAAWF,EAAAA,GAAW6D,UAAUlH,MAC1CjG,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACoN,EAAAA,GAAK,KACJpN,EAAAA,cAACyK,EAAU,CAACY,QAAS,CAACe,KAAKxP,MAAM6E,KAAKC,QAASiK,UAAWS,KAAKiB,qBAEjErN,EAAAA,cAACsN,EAAAA,GAAY,CAACC,OAAQ,CAAC,kBAAmBvP,MAAOoO,KAAKC,MAAMrO,QAC5DgC,EAAAA,cAAA,QAAMQ,UAAU,cACdR,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,gDAIdU,EAAAA,cAACsK,EAAAA,GAAQ,CACP5G,MAAM,OACNH,SAAU6I,KAAKlC,QACfjE,MAAOmG,KAAKC,MAAMtI,KAClByJ,QAAS,EACThK,YAAaiD,EAAAA,GAAK7G,EAAE,yCAA0C,CAC5D8G,QAAS,mFAOnB1G,EAAAA,cAACS,EAAAA,GAAMW,OAAM,KACXpB,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,UAAUC,QAAS6K,KAAKqB,QACtCzN,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,mBAEZU,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,WAAWC,QAAS6K,KAAKxP,MAAMmQ,cAC7C/M,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,oBAOpB,EC5FK,MAAMoO,EAAyC9Q,IACpD,MAAO+Q,EAAWC,IAAgBzQ,EAAAA,EAAAA,WAAS,IACpCuN,EAAOC,IAAYxN,EAAAA,EAAAA,UAAS,KAC5B0Q,EAAUC,IAAe3Q,EAAAA,EAAAA,UAAiB,KAC1C4Q,EAAeC,IAAoB7Q,EAAAA,EAAAA,UAAiB,IAErDN,GAAQC,EAAAA,EAAAA,OAEd0B,EAAAA,EAAAA,YAAU,KACJ5B,EAAM+D,QACRa,EAAAA,GAAAA,UAAkB5E,EAAM6E,KAAKC,QAAQjC,MAAMoE,IACrCA,EAASlC,KACXmM,EAAYjK,EAASc,MACrBqJ,EAAiBnK,EAASc,MAC1BiJ,GAAa,GACf,GAEJ,GACC,CAAChR,EAAM+D,SAEV,MAAM5B,EAAaC,UACbpC,EAAMgE,SACRhE,EAAMgE,SACR,EAOIqN,EAA6BvD,IACjC,MAAMzB,EAAQ4E,EAAS/F,QAAQ5D,GAAMA,EAAEpC,KAAK7B,KAAKiO,cAAclG,QAAQ0C,EAAMwD,gBAAkB,IAC/FvD,EAASD,GACTsD,EAAiB/E,EAAM,EAGzB,OACEjJ,EAAAA,cAACS,EAAAA,GAAMC,OAAM,CAACC,OAAQ/D,EAAM+D,OAAQE,QAAQ,EAAOD,QAAS7B,GAC1DiB,EAAAA,cAACS,EAAAA,GAAMQ,QAAO,KACX0M,GAAa3N,EAAAA,cAACmO,EAAAA,GAAM,OACnBR,GACA3N,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACwL,EAAAA,GAAK,CACJ9H,MAAM,QACNiG,KAAMe,EAAQ0D,EAAAA,EAAQ3C,EAAAA,EACtB4C,YAAa3D,EAnBL4D,KAClBL,EAA0B,GAAG,OAkBgBnP,EACnC0E,YAAaiD,EAAAA,GAAK7G,EAAE,oCAAqC,CAAE8G,QAAS,gCACpET,MAAOyE,EACPnH,SAAU0K,IAEZjO,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,EAAGC,UAAU,2BAC3BuN,EAAc9J,KAAKC,GAClBlE,EAAAA,cAACM,EAAAA,GAAM,CAAC8D,IAAKF,EAAEpC,KAAKxC,GAAI0C,QAAQ,WAC9BhC,EAAAA,cAACM,EAAAA,GAAM,KACLN,EAAAA,cAAC6B,EAAAA,GAAM,CAACC,KAAMoC,EAAEpC,OAChB9B,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,GACfP,EAAAA,cAACiC,EAAAA,GAAQ,CAACH,KAAMoC,EAAEpC,OAClB9B,EAAAA,cAAA,QAAMQ,UAAU,cAAc0D,EAAEpC,KAAKyM,SAGzCvO,EAAAA,cAAA,QAAMQ,UAAU,cACdR,EAAAA,cAACkC,EAAAA,GAAM,CAACC,OAAQtF,EAAMsD,cAAeiC,KAAM8B,EAAE7B,gBAIzB,IAAzB0L,EAAcpG,QACb3H,EAAAA,cAAA,KAAGQ,UAAU,cACXR,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,sCAAqCuM,OAAA,CAAAnB,MACZA,GAAKxJ,WAAA,CAAAC,EAAdnB,EAAAA,cAAA,sBAStCA,EAAAA,cAACS,EAAAA,GAAMW,OAAM,KACXpB,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,WAAWC,QAASxC,GAClCiB,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,mBAGD,ECpFNkP,EAAc5R,IACzB,MAAMC,GAAQC,EAAAA,EAAAA,OACP2R,EAAkBC,IAAuBvR,EAAAA,EAAAA,WAAS,GACnDwR,EAAa9R,EAAMkG,QAAQC,iBAAmBsD,EAAAA,GAAMvD,QAAQjB,KAAKmB,eAEjE2L,EAAYA,KACZD,GACFD,GAAoB,EACtB,EAKIG,EAAkBjS,EAAM6E,KAAKqK,WAAalP,EAAMqM,MAAMtB,OAE5D,OACE3H,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,GACfP,EAAAA,cAAC0N,EAAU,CAACjM,KAAM7E,EAAM6E,KAAMd,OAAQ8N,EAAkB7N,QANzC7B,IAAM2P,GAAoB,MAOvC9R,EAAMkS,WACN9O,EAAAA,cAAA,QAAMQ,UAAU,iBACdR,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,kBAGb1C,EAAMqM,MAAMtB,OAAS,GACpB3H,EAAAA,cAACM,EAAAA,GAAM,CAACC,QAAS,EAAGC,UAAU,SAC5BR,EAAAA,cAAC+O,EAAAA,GAAW,CAACC,MAAOpS,EAAMqM,MAAMhF,KAAKC,GAAMA,EAAEpC,OAAOmN,SAAS,KAGhEJ,EAAkB,GACjB7O,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,WAAW+B,UAAWsL,EAAY7N,KAAK,QAAQS,QAASqN,GACtE5O,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,2BAA0BuM,OAAA,CAAAgD,gBAAGA,MAG1CjS,EAAMqM,MAAMtB,OAAS,GAAyB,IAApBkH,GAAyBF,GAClD3O,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,WAAWR,KAAK,QAAQuC,UAAWsL,EAAYpN,QAASqN,GACtE5O,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,oCAGU,IAAvB1C,EAAMqM,MAAMtB,QACX3H,EAAAA,cAAA,QAAMQ,UAAU,cACdR,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,gBAGP,E,yZCSE,MAAM4P,UAAqBlP,EAAAA,UACxCiM,WAAAA,CAAYrP,GACVsP,MAAMtP,GAAMuP,EAAA,oBAqBQnN,UACpB,MAAM2H,QAAenF,EAAAA,GAAAA,WAAmB4K,KAAKxP,MAAM6E,KAAKC,OAAQ0K,KAAKC,MAAM8C,SAAU/C,KAAKC,MAAM+C,eAAgBhD,KAAKC,MAAM3O,aACvHiJ,EAAOhF,GACTvC,SAASwC,SAETwK,KAAKE,SAAS,CACZtO,MAAO2I,EAAO3I,OAElB,IACDmO,EAAA,sBAEuB,KACtB,MAAM3C,EAASF,EAAAA,GAAWC,IAAI6C,KAAKxP,MAAM6E,KAAK+H,QAC9C,SAAKlD,EAAAA,GAAMvD,QAAQC,kBAAoBsD,EAAAA,GAAMvD,QAAQjB,KAAKqI,iBAAmBX,EAAOC,OAGzE,IACZ0C,EAAA,oBAEsBgD,IACrB/C,KAAKE,SAAS,CAAE6C,YAAW,IAC5BhD,EAAA,0BAE4BiD,IAC3BhD,KAAKE,SAAS,CAAE8C,kBAAiB,IAClCjD,EAAA,uBAEyBzO,IACxB0O,KAAKE,SAAS,CAAE5O,eAAc,IAC/ByO,EAAA,2BAE6BkD,IAC5BjD,KAAKE,SAAS,CAAE+C,mBAAkB,IACnClD,EAAA,6BAE+BmD,IAC9BlD,KAAKE,SAAS,CAAEgD,qBAAoB,IACrCnD,EAAA,mBAEoBnN,UACnBoN,KAAKE,SAAS,CAAEtO,WAAOc,EAAWyQ,UAAU,GAAQ,IACrDpD,EAAA,kBAEmBnN,UAClBoN,KAAKE,SAAS,CAAEiD,UAAU,GAAO,IAClCpD,EAAA,yBAE2BhO,IAC1B,MAAMkB,EAAOF,OAAOC,SAASC,KACvBsH,EAAS,oBAAoB6I,KAAKnQ,GAExC,IAAI4H,EACJ,GAAe,OAAXN,EAEFM,OAAqBnI,MAChB,CAEL,MAAMQ,EAAKmQ,SAAS9I,EAAO,IACvByF,KAAKxP,MAAMmK,SAAS9C,KAAK3G,GAAYA,EAAQgC,KAAIoQ,SAASpQ,GAC5D2H,EAAqB3H,GAGjBnB,GAAGwR,WACLxR,EAAEyR,kBAEFrR,EAAAA,EAAAA,KAAa,GAEfmB,EAAAA,GAAAA,MAAaM,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,sCAAqCuM,OAAA,CAAAvM,GAAsBA,MAClF2H,OAAqBnI,EAEzB,CACAsN,KAAKE,SAAS,CAAErF,sBAAqB,IACtCkF,EAAA,yBAE0BjN,GAAkD,KAC5D,SAAXA,GACFqL,UAAUsF,UAAUC,UAAU3Q,OAAOC,SAASI,MAC9CE,EAAAA,GAAAA,QAAeM,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,gCACL,WAAXJ,EACTkN,KAAK2D,oBAAmB,GACJ,WAAX7Q,EACTkN,KAAK4D,sBAAqB,GACN,SAAX9Q,GACTkN,KAAK6D,WACP,IAvGA7D,KAAKC,MAAQ,CACXkD,UAAU,EACVF,iBAAiB,EACjBC,mBAAmB,EACnBH,SAAU/C,KAAKxP,MAAM6E,KAAKsK,MAC1BqD,eAAgBhD,KAAKxP,MAAM6E,KAAKyO,YAChCxS,YAAa,GAEjB,CAEOyS,iBAAAA,GACL/D,KAAKgE,mBACLjR,OAAOR,iBAAiB,aAAcyN,KAAKgE,iBAC7C,CAEOC,oBAAAA,GACLlR,OAAOP,oBAAoB,aAAcwN,KAAKgE,iBAChD,CAyFO3D,MAAAA,GACL,OACEzM,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACe,EAAAA,GAAM,MACPf,EAAAA,cAAA,OAAKV,GAAG,cAAckB,UAAU,kBAC9BR,EAAAA,cAAA,OAAKQ,UAAU,eACbR,EAAAA,cAAA,OAAKQ,UAAU,yBACbR,EAAAA,cAAA,OAAKQ,UAAU,2BACbR,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,GACfP,EAAAA,cAACM,EAAAA,GAAM,CAAC0B,QAAQ,WACdhC,EAAAA,cAAC8G,EAAAA,GAAM,CAACT,MAAM,UACV+F,KAAKC,MAAMkD,UACXvP,EAAAA,cAACM,EAAAA,GAAM,KACLN,EAAAA,cAAC6B,EAAAA,GAAM,CAACC,KAAMsK,KAAKxP,MAAM6E,KAAKK,OAC9B9B,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,GACfP,EAAAA,cAACiC,EAAAA,GAAQ,CAACH,KAAMsK,KAAKxP,MAAM6E,KAAKK,OAChC9B,EAAAA,cAACkC,EAAAA,GAAM,CAAC1B,UAAU,aAAa2B,OAAQmE,EAAAA,GAAMnG,cAAeiC,KAAMgK,KAAKxP,MAAM6E,KAAKY,gBAMxF+J,KAAKC,MAAMkD,UACXvP,EAAAA,cAACsC,EAAAA,GAAQ,CAACC,SAAS,OAAOC,aAAcxC,EAAAA,cAACyC,EAAAA,GAAI,CAACC,OAAQC,EAAAA,EAAoBC,MAAM,KAAKC,OAAO,QAC1F7C,EAAAA,cAACsC,EAAAA,GAASQ,SAAQ,CAACvB,QAAS6K,KAAKnN,iBAAiB,SAChDe,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,qBAEXgH,EAAAA,GAAMvD,QAAQC,kBAjJlBlB,EAiJiDwE,EAAAA,GAAMvD,QAAQjB,KAjJ5CL,EAiJkD2K,KAAKxP,MAAM6E,OAhJ/FK,EAAKmB,gBAIFnB,EAAKxC,KAAOmC,EAAKK,KAAKxC,KAAMgR,EAAAA,EAAAA,IAAQ7O,EAAKY,YANlC,OAmJUrC,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACsC,EAAAA,GAASQ,SAAQ,CAACvB,QAAS6K,KAAKnN,iBAAiB,SAChDe,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,iBAEXgH,EAAAA,GAAMvD,QAAQjB,KAAKmB,gBAClBjD,EAAAA,cAACsC,EAAAA,GAASQ,SAAQ,CAACvB,QAAS6K,KAAKnN,iBAAiB,WAChDe,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,qBAKjB8M,KAAKmE,iBACJvQ,EAAAA,cAACsC,EAAAA,GAASQ,SAAQ,CAACvB,QAAS6K,KAAKnN,iBAAiB,UAAWuB,UAAU,gBACrER,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,qBAOpBU,EAAAA,cAAA,OAAKQ,UAAU,aACZ4L,KAAKC,MAAMkD,SACVvP,EAAAA,cAACmD,EAAAA,GAAI,CAACnF,MAAOoO,KAAKC,MAAMrO,OACtBgC,EAAAA,cAACwL,EAAAA,GAAK,CAAC9H,MAAM,QAAQ8M,UAAW,IAAKvK,MAAOmG,KAAKC,MAAM8C,SAAU5L,SAAU6I,KAAKqE,eAGlFzQ,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,MAAIQ,UAAU,cAAc4L,KAAKxP,MAAM6E,KAAKsK,SAKlD/L,EAAAA,cAACiK,EAAe,CAACI,aAAcA,IAAM+B,KAAK2D,oBAAmB,GAAQ3F,UAAWgC,KAAKC,MAAMgD,gBAAiB5N,KAAM2K,KAAKxP,MAAM6E,OAC5H6E,EAAAA,GAAMvD,QAAQC,iBAAmBsD,EAAAA,GAAMvD,QAAQjB,KAAKmB,gBACnDjD,EAAAA,cAACgM,EAAa,CAACe,aAAcA,IAAMX,KAAK4D,sBAAqB,GAAQ5F,UAAWgC,KAAKC,MAAMiD,kBAAmB7N,KAAM2K,KAAKxP,MAAM6E,OAEjIzB,EAAAA,cAAC8G,EAAAA,GAAM,KACJsF,KAAKC,MAAMkD,SACVvP,EAAAA,cAACmD,EAAAA,GAAI,CAACnF,MAAOoO,KAAKC,MAAMrO,OACtBgC,EAAAA,cAACsK,EAAAA,GAAQ,CAAC5G,MAAM,cAAcuC,MAAOmG,KAAKC,MAAM+C,eAAgB7L,SAAU6I,KAAKsE,oBAC/E1Q,EAAAA,cAACyD,EAAAA,GAAkB,CAACC,MAAM,cAAcC,MAAOyI,KAAKxP,MAAMc,YAAakG,WAAY,EAAGL,SAAU6I,KAAKzO,kBAGvGqC,EAAAA,cAAAA,EAAAA,SAAA,KACGoM,KAAKxP,MAAM6E,KAAKyO,aAAelQ,EAAAA,cAAC8D,EAAAA,GAAQ,CAACtD,UAAU,cAAcuD,KAAMqI,KAAKxP,MAAM6E,KAAKyO,YAAalM,MAAM,UACzGoI,KAAKxP,MAAM6E,KAAKyO,aAChBlQ,EAAAA,cAAA,MAAIQ,UAAU,cACZR,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,oCAGb8M,KAAKxP,MAAMc,YAAYuG,KAAKC,GAC3BlE,EAAAA,cAACmE,EAAAA,EAAW,CAACC,IAAKF,EAAGG,KAAMH,QAKnClE,EAAAA,cAAA,OAAKQ,UAAU,QACbR,EAAAA,cAACwH,EAAS,CAAC/F,KAAM2K,KAAKxP,MAAM6E,KAAMiG,KAAM0E,KAAKxP,MAAM8K,QAGrD1H,EAAAA,cAAC8G,EAAAA,GAAM,CAACvG,QAAS,GACb6L,KAAKC,MAAMkD,SAMXvP,EAAAA,cAACM,EAAAA,GAAM,KACLN,EAAAA,cAACqB,EAAAA,GAAM,CAACC,QAAQ,UAAUC,QAAS6K,KAAKuE,YAAatN,SAAUiD,EAAAA,GAAMmC,YACnEzI,EAAAA,cAACyC,EAAAA,GAAI,CAACC,OAAQkH,EAAAA,IAAiB,IAC/B5J,EAAAA,cAAA,YACEA,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,kBAGdU,EAAAA,cAACqB,EAAAA,GAAM,CAACE,QAAS6K,KAAKwE,WAAYvN,SAAUiD,EAAAA,GAAMmC,YAChDzI,EAAAA,cAACyC,EAAAA,GAAI,CAACC,OAAQ0L,EAAAA,IACdpO,EAAAA,cAAA,YACEA,EAAAA,cAAAgB,EAAAA,GAAA,CAAU1B,GAAA,qBAfhBU,EAAAA,cAACM,EAAAA,GAAM,CAAC0B,QAAQ,UAAUqE,MAAM,SAC9BrG,EAAAA,cAACgJ,EAAW,CAACvH,KAAM2K,KAAKxP,MAAM6E,KAAMwH,MAAOmD,KAAKxP,MAAM6E,KAAKqK,aAC3D9L,EAAAA,cAAC0I,EAAY,CAACjH,KAAM2K,KAAKxP,MAAM6E,KAAMkH,WAAYyD,KAAKxP,MAAM+L,cAkBhE3I,EAAAA,cAAA,OAAKQ,UAAU,8BAGjBR,EAAAA,cAAC6Q,EAAAA,GAAe,CAACrH,OAAQ4C,KAAKxP,MAAM6E,KAAK+H,OAAQ3F,SAAUuI,KAAKxP,MAAM6E,KAAKoC,aAI/E7D,EAAAA,cAAA,OAAKQ,UAAU,+BACbR,EAAAA,cAAC6G,EAAe,CAACpF,KAAM2K,KAAKxP,MAAM6E,KAAMsF,SAAUqF,KAAKxP,MAAMmK,SAAUE,mBAAoBmF,KAAKC,MAAMpF,uBAG1GjH,EAAAA,cAAA,OAAKQ,UAAU,2BACbR,EAAAA,cAACwO,EAAU,CAAC/M,KAAM2K,KAAKxP,MAAM6E,KAAMwH,MAAOmD,KAAKxP,MAAMqM,QACrDjJ,EAAAA,cAAC8Q,EAAAA,GAAc,CAACC,KAAK,YAAYvQ,UAAU,aAjPrCwQ,IAAClP,EAAmBL,CAuPtC,E,4EChTEyF,EAAS,IAAI,IAAJ,CAAiB,CAC5B,GAAM,4BACN,IAAO,kCACP,QAAW,YACX,QAAW,4VAEA,QAAWA,GACxB,S,4ECPIA,EAAS,IAAI,IAAJ,CAAiB,CAC5B,GAAM,mBACN,IAAO,yBACP,QAAW,YACX,QAAW,+PAEA,QAAWA,GACxB,S","sources":["webpack://fider/./public/pages/ShowPost/components/ShowComment.tsx","webpack://fider/./public/pages/ShowPost/components/CommentInput.tsx","webpack://fider/./public/pages/ShowPost/components/DiscussionPanel.tsx","webpack://fider/./public/assets/images/heroicons-check.svg","webpack://fider/./public/pages/ShowPost/components/TagListItem.tsx","webpack://fider/./public/pages/ShowPost/components/TagsPanel.tsx","webpack://fider/./public/assets/images/heroicons-plus.svg","webpack://fider/./public/pages/ShowPost/components/FollowButton.tsx","webpack://fider/./public/pages/ShowPost/components/VoteSection.tsx","webpack://fider/./public/pages/ShowPost/components/DeletePostModal.tsx","webpack://fider/./public/pages/ShowPost/components/PostSearch.tsx","webpack://fider/./public/pages/ShowPost/components/ResponseModal.tsx","webpack://fider/./public/pages/ShowPost/components/VotesModal.tsx","webpack://fider/./public/pages/ShowPost/components/VotesPanel.tsx","webpack://fider/./public/pages/ShowPost/ShowPost.page.tsx","webpack://fider/./public/assets/images/heroicons-dots-horizontal.svg","webpack://fider/./public/assets/images/heroicons-search.svg"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\"\nimport { Comment, Post, ImageUpload } from \"@fider/models\"\nimport { Reactions, Avatar, UserName, Moment, Form, Button, Markdown, Modal, ImageViewer, MultiImageUploader, Dropdown, Icon } from \"@fider/components\"\nimport { HStack } from \"@fider/components/layout\"\nimport { formatDate, Failure, actions, notify, copyToClipboard, classSet, clearUrlHash } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport IconDotsHorizontal from \"@fider/assets/images/heroicons-dots-horizontal.svg\"\nimport { t } from \"@lingui/core/macro\"\nimport { Trans } from \"@lingui/react/macro\"\nimport CommentEditor from \"@fider/components/common/form/CommentEditor\"\n\ninterface ShowCommentProps {\n post: Post\n comment: Comment\n highlighted?: boolean\n onToggleReaction?: () => void\n}\n\nexport const ShowComment = (props: ShowCommentProps) => {\n const fider = useFider()\n const node = useRef<HTMLDivElement | null>(null)\n const [isEditing, setIsEditing] = useState(false)\n const [newContent, setNewContent] = useState<string>(props.comment.content)\n const [isDeleteConfirmationModalOpen, setIsDeleteConfirmationModalOpen] = useState(false)\n const [attachments, setAttachments] = useState<ImageUpload[]>([])\n const [localReactionCounts, setLocalReactionCounts] = useState(props.comment.reactionCounts)\n const emojiSelectorRef = useRef<HTMLDivElement>(null)\n\n const [error, setError] = useState<Failure>()\n\n const handleClick = (e: MouseEvent) => {\n if (node.current == null || !node.current.contains(e.target as Node)) {\n clearUrlHash()\n }\n }\n\n useEffect(() => {\n if (props.highlighted) {\n document.addEventListener(\"mousedown\", handleClick)\n return () => {\n document.removeEventListener(\"mousedown\", handleClick)\n }\n }\n }, [props.highlighted])\n\n const canEditComment = (): boolean => {\n if (fider.session.isAuthenticated) {\n return fider.session.user.isCollaborator || props.comment.user.id === fider.session.user.id\n }\n return false\n }\n\n const clearError = () => setError(undefined)\n\n const cancelEdit = async () => {\n setIsEditing(false)\n setNewContent(props.comment.content)\n clearError()\n }\n\n const saveEdit = async () => {\n const response = await actions.updateComment(props.post.number, props.comment.id, newContent, attachments)\n if (response.ok) {\n location.reload()\n } else {\n setError(response.error)\n }\n }\n\n const closeModal = async () => {\n setIsDeleteConfirmationModalOpen(false)\n }\n\n const deleteComment = async () => {\n const response = await actions.deleteComment(props.post.number, props.comment.id)\n if (response.ok) {\n location.reload()\n }\n }\n\n const toggleReaction = async (emoji: string) => {\n const response = await actions.toggleCommentReaction(props.post.number, comment.id, emoji)\n if (response.ok) {\n const added = response.data.added\n\n setLocalReactionCounts((prevCounts) => {\n const newCounts = [...(prevCounts ?? [])]\n const reactionIndex = newCounts.findIndex((r) => r.emoji === emoji)\n if (reactionIndex !== -1) {\n const newCount = added ? newCounts[reactionIndex].count + 1 : newCounts[reactionIndex].count - 1\n if (newCount === 0) {\n newCounts.splice(reactionIndex, 1)\n } else {\n newCounts[reactionIndex] = {\n ...newCounts[reactionIndex],\n count: newCount,\n includesMe: added,\n }\n }\n } else if (added) {\n newCounts.push({ emoji, count: 1, includesMe: true })\n }\n return newCounts\n })\n }\n }\n\n const onActionSelected = (action: string) => () => {\n if (action === \"copylink\") {\n window.location.hash = `#comment-${props.comment.id}`\n copyToClipboard(window.location.href).then(\n () => notify.success(t({ id: \"showpost.comment.copylink.success\", message: \"Successfully copied comment link to clipboard\" })),\n () => notify.error(t({ id: \"showpost.comment.copylink.error\", message: \"Could not copy comment link, please copy page URL\" }))\n )\n } else if (action === \"edit\") {\n setIsEditing(true)\n clearError()\n } else if (action === \"delete\") {\n setIsDeleteConfirmationModalOpen(true)\n }\n }\n\n const modal = () => {\n return (\n <Modal.Window isOpen={isDeleteConfirmationModalOpen} onClose={closeModal} center={false} size=\"small\">\n <Modal.Header>\n <Trans id=\"modal.deletecomment.header\">Delete Comment</Trans>\n </Modal.Header>\n <Modal.Content>\n <p>\n <Trans id=\"modal.deletecomment.text\">\n This process is irreversible. <strong>Are you sure?</strong>\n </Trans>\n </p>\n </Modal.Content>\n\n <Modal.Footer>\n <Button variant=\"danger\" onClick={deleteComment}>\n <Trans id=\"action.delete\">Delete</Trans>\n </Button>\n <Button variant=\"tertiary\" onClick={closeModal}>\n <Trans id=\"action.cancel\">Cancel</Trans>\n </Button>\n </Modal.Footer>\n </Modal.Window>\n )\n }\n\n const comment = props.comment\n\n const editedMetadata = !!comment.editedAt && !!comment.editedBy && (\n <span data-tooltip={`This comment has been edited by ${comment.editedBy.name} on ${formatDate(fider.currentLocale, comment.editedAt)}`}>· edited</span>\n )\n\n const classList = classSet({\n \"flex-grow rounded-md p-2\": true,\n \"bg-gray-100\": !props.highlighted,\n \"bg-gray-200\": props.highlighted,\n })\n\n return (\n <div id={`comment-${comment.id}`}>\n <HStack spacing={2} className=\"c-comment flex-items-baseline\">\n {modal()}\n <div className=\"pt-4\">\n <Avatar user={comment.user} />\n </div>\n <div ref={node} className={classList}>\n <div className=\"mb-1\">\n <HStack justify=\"between\">\n <HStack>\n <UserName user={comment.user} />{\" \"}\n <div className=\"text-xs\">\n · <Moment locale={fider.currentLocale} date={comment.createdAt} /> {editedMetadata}\n </div>\n </HStack>\n {!isEditing && (\n <Dropdown position=\"left\" renderHandle={<Icon sprite={IconDotsHorizontal} width=\"16\" height=\"16\" />}>\n <Dropdown.ListItem onClick={onActionSelected(\"copylink\")}>\n <Trans id=\"action.copylink\">Copy link</Trans>\n </Dropdown.ListItem>\n {canEditComment() && (\n <>\n <Dropdown.Divider />\n <Dropdown.ListItem onClick={onActionSelected(\"edit\")}>\n <Trans id=\"action.edit\">Edit</Trans>\n </Dropdown.ListItem>\n <Dropdown.ListItem onClick={onActionSelected(\"delete\")} className=\"text-red-700\">\n <Trans id=\"action.delete\">Delete</Trans>\n </Dropdown.ListItem>\n </>\n )}\n </Dropdown>\n )}\n </HStack>\n </div>\n <div>\n {isEditing ? (\n <Form error={error}>\n <CommentEditor disabled={!fider.session.isAuthenticated} initialValue={newContent} onChange={setNewContent} placeholder={comment.content} />\n <MultiImageUploader field=\"attachments\" bkeys={comment.attachments} maxUploads={2} onChange={setAttachments} />\n <Button size=\"small\" onClick={saveEdit} variant=\"primary\">\n <Trans id=\"action.save\">Save</Trans>\n </Button>\n <Button variant=\"tertiary\" size=\"small\" onClick={cancelEdit}>\n <Trans id=\"action.cancel\">Cancel</Trans>\n </Button>\n </Form>\n ) : (\n <>\n <Markdown text={comment.content} style=\"full\" />\n {comment.attachments && comment.attachments.map((x) => <ImageViewer key={x} bkey={x} />)}\n <Reactions reactions={localReactionCounts} emojiSelectorRef={emojiSelectorRef} toggleReaction={toggleReaction} />\n </>\n )}\n </div>\n </div>\n </HStack>\n </div>\n )\n}\n","import React, { useCallback, useState, useEffect } from \"react\"\n\nimport { Post, ImageUpload } from \"@fider/models\"\nimport { Avatar, UserName, Button, Form, MultiImageUploader } from \"@fider/components\"\nimport { SignInModal } from \"@fider/components\"\n\nimport { cache, actions, Failure, Fider } from \"@fider/services\"\nimport { HStack } from \"@fider/components/layout\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\n// import { CommentEditor } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\n// import Tiptap from \"@fider/components/common/form/CommentEditor2\"\nimport CommentEditor from \"@fider/components/common/form/CommentEditor\"\n\ninterface CommentInputProps {\n post: Post\n}\n\nconst CACHE_TITLE_KEY = \"CommentInput-Comment-\"\n\nexport const CommentInput = (props: CommentInputProps) => {\n const getCacheKey = () => `${CACHE_TITLE_KEY}${props.post.id}`\n\n const getContentFromCache = () => {\n return cache.session.get(getCacheKey())\n }\n\n const fider = useFider()\n // const inputRef = useRef<HTMLTextAreaElement>()\n // const [content, setContent] = useState<string>((fider.session.isAuthenticated && getContentFromCache()) || \"\")\n const [isSignInModalOpen, setIsSignInModalOpen] = useState(false)\n const [attachments, setAttachments] = useState<ImageUpload[]>([])\n const [error, setError] = useState<Failure | undefined>(undefined)\n const [isClient, setIsClient] = useState(false)\n\n // Check if we're running on the client after component mounts\n useEffect(() => {\n setIsClient(true)\n }, [])\n\n const hideModal = () => setIsSignInModalOpen(false)\n const clearError = () => setError(undefined)\n\n const submit = async () => {\n clearError()\n\n // Since the comment is being cached, we can save the content that's in the cache\n const content = getContentFromCache()\n\n const result = await actions.createComment(props.post.number, content || \"\", attachments)\n if (result.ok) {\n cache.session.remove(getCacheKey())\n location.reload()\n } else {\n setError(result.error)\n }\n }\n\n const editorFocused = () => {\n if (!fider.session.isAuthenticated) {\n setIsSignInModalOpen(true)\n }\n }\n\n const hasContent = true\n\n const commentChanged = useCallback((value: string): void => {\n cache.session.set(getCacheKey(), value)\n }, [])\n\n return (\n <>\n <SignInModal isOpen={isSignInModalOpen} onClose={hideModal} />\n <HStack spacing={2} className=\"c-comment-input\" align=\"start\">\n {Fider.session.isAuthenticated && <Avatar user={Fider.session.user} />}\n <div className=\"flex-grow bg-gray-100 rounded-md p-2\">\n <Form error={error}>\n {Fider.session.isAuthenticated && (\n <div className=\"mb-1\">\n <UserName user={Fider.session.user} />\n </div>\n )}\n\n {/* Only render interactive components on the client side */}\n {isClient ? (\n <>\n <CommentEditor\n disabled={!Fider.session.isAuthenticated}\n onChange={commentChanged}\n onFocus={editorFocused}\n initialValue={getContentFromCache()}\n placeholder={i18n._(\"showpost.commentinput.placeholder\", { message: \"Leave a comment\" })}\n />\n\n {hasContent && (\n <>\n <MultiImageUploader field=\"attachments\" maxUploads={2} onChange={setAttachments} />\n <Button variant=\"primary\" onClick={submit}>\n <Trans id=\"action.submit\">Submit</Trans>\n </Button>\n </>\n )}\n </>\n ) : (\n // Simple placeholder for SSR\n <div className=\"comment-input-placeholder p-2\">{i18n._(\"showpost.commentinput.placeholder\", { message: \"Leave a comment\" })}</div>\n )}\n </Form>\n </div>\n </HStack>\n </>\n )\n}\n","import React from \"react\"\nimport { CurrentUser, Comment, Post } from \"@fider/models\"\nimport { ShowComment } from \"./ShowComment\"\nimport { CommentInput } from \"./CommentInput\"\nimport { VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface DiscussionPanelProps {\n user?: CurrentUser\n post: Post\n comments: Comment[]\n highlightedComment?: number\n}\n\nexport const DiscussionPanel = (props: DiscussionPanelProps) => {\n return (\n <>\n <VStack spacing={2} className=\"c-comment-list mt-8\">\n <span className=\"text-category\">\n <Trans id=\"label.discussion\">Discussion</Trans>\n </span>\n <VStack spacing={4} className=\"c-comment-list\">\n {props.comments.map((c) => (\n <ShowComment key={c.id} post={props.post} comment={c} highlighted={props.highlightedComment === c.id} />\n ))}\n <CommentInput post={props.post} />\n </VStack>\n </VStack>\n </>\n )\n}\n","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"heroicons-check\",\n \"use\": \"heroicons-check-usage\",\n \"viewBox\": \"0 0 24 24\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke=\\\"currentColor\\\" id=\\\"heroicons-check\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m5 13 4 4L19 7\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React from \"react\"\nimport { Tag } from \"@fider/models\"\nimport { Icon, ShowTag } from \"@fider/components\"\nimport IconCheck from \"@fider/assets/images/heroicons-check.svg\"\nimport { HStack } from \"@fider/components/layout\"\n\ninterface TagListItemProps {\n tag: Tag\n assigned: boolean\n onClick: (tag: Tag) => void\n}\n\nexport const TagListItem = (props: TagListItemProps) => {\n const onClick = () => {\n props.onClick(props.tag)\n }\n\n return (\n <HStack className=\"clickable hover:bg-gray-100 rounded py-1\" onClick={onClick}>\n <Icon sprite={IconCheck} className={`h-4 text-green-600 ${!props.assigned && \"invisible\"}`} />\n <ShowTag tag={props.tag} />\n </HStack>\n )\n}\n","import React, { useState } from \"react\"\nimport { Post, Tag } from \"@fider/models\"\nimport { actions } from \"@fider/services\"\nimport { ShowTag, Button } from \"@fider/components\"\nimport { TagListItem } from \"./TagListItem\"\nimport { useFider } from \"@fider/hooks\"\n\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/react/macro\"\n\nexport interface TagsPanelProps {\n post: Post\n tags: Tag[]\n}\n\nexport const TagsPanel = (props: TagsPanelProps) => {\n const fider = useFider()\n const canEdit = fider.session.isAuthenticated && fider.session.user.isCollaborator && props.tags.length > 0\n\n const [isEditing, setIsEditing] = useState(false)\n const [assignedTags, setAssignedTags] = useState(props.tags.filter((t) => props.post.tags.indexOf(t.slug) >= 0))\n\n const assignOrUnassignTag = async (tag: Tag) => {\n const idx = assignedTags.indexOf(tag)\n let nextAssignedTags: Tag[] = []\n\n if (idx >= 0) {\n const response = await actions.unassignTag(tag.slug, props.post.number)\n if (response.ok) {\n nextAssignedTags = [...assignedTags]\n nextAssignedTags.splice(idx, 1)\n }\n } else {\n const response = await actions.assignTag(tag.slug, props.post.number)\n if (response.ok) {\n nextAssignedTags = [...assignedTags, tag]\n }\n }\n\n setAssignedTags(nextAssignedTags)\n }\n\n const onSubtitleClick = () => {\n if (canEdit) {\n setIsEditing(!isEditing)\n }\n }\n\n if (!canEdit && assignedTags.length === 0) {\n return null\n }\n\n const tagsList = (\n <HStack spacing={2} align=\"center\">\n {assignedTags.length > 0 && assignedTags.map((tag) => <ShowTag key={tag.id} tag={tag} link />)}\n <HStack spacing={1} align=\"center\" className=\"clickable\" onClick={onSubtitleClick}>\n <span>\n <Trans id=\"label.edittags\">Edit tags</Trans>\n </span>\n </HStack>\n </HStack>\n )\n\n const editTagsList = props.tags.length > 0 && (\n <VStack justify=\"between\" className=\"flex-items-start\">\n {props.tags.map((tag) => (\n <TagListItem key={tag.id} tag={tag} assigned={assignedTags.indexOf(tag) >= 0} onClick={assignOrUnassignTag} />\n ))}\n <Button variant=\"secondary\" size=\"small\" onClick={onSubtitleClick}>\n <Trans id=\"action.close\">Close</Trans>\n </Button>\n </VStack>\n )\n\n if (fider.isReadOnly) {\n return (\n <VStack>\n <HStack spacing={2} className=\"text-category\">\n <Trans id=\"label.tags\">Tags</Trans>\n </HStack>\n {tagsList}\n </VStack>\n )\n }\n\n return (\n <VStack>\n <HStack spacing={2} align=\"center\" className=\"text-primary-base text-xs\">\n {!isEditing && tagsList}\n {isEditing && editTagsList}\n </HStack>\n </VStack>\n )\n}\n","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"heroicons-plus\",\n \"use\": \"heroicons-plus-usage\",\n \"viewBox\": \"0 0 24 24\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke-width=\\\"1.5\\\" stroke=\\\"currentColor\\\" class=\\\"size-6\\\" id=\\\"heroicons-plus\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" d=\\\"M12 4.5v15m7.5-7.5h-15\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React, { useState } from \"react\"\nimport { Button, Icon } from \"@fider/components\"\nimport { actions } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport IconPlus from \"@fider/assets/images/heroicons-plus.svg\"\nimport IconCheck from \"@fider/assets/images/heroicons-check.svg\"\nimport { VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/macro\"\nimport { Post } from \"@fider/models\"\n\nexport interface NotificationsPanelProps {\n post: Post\n subscribed: boolean\n}\n\nexport const FollowButton = (props: NotificationsPanelProps) => {\n const fider = useFider()\n const [subscribed, setSubscribed] = useState(props.subscribed)\n\n const subscribeOrUnsubscribe = async () => {\n const action = subscribed ? actions.unsubscribe : actions.subscribe\n\n const response = await action(props.post.number)\n if (response.ok) {\n setSubscribed(!subscribed)\n }\n }\n\n if (!fider.session.isAuthenticated) {\n return null\n }\n\n const button = subscribed ? (\n <Button className=\"w-full text-gray-800 bg-white border border-gray-800 no-focus\" onClick={subscribeOrUnsubscribe} disabled={fider.isReadOnly}>\n <Icon sprite={IconCheck} />{\" \"}\n <span>\n <Trans id=\"label.following\">Following</Trans>\n </span>\n </Button>\n ) : (\n <Button className=\"w-full text-blue-500 bg-white border border-blue-500 no-focus\" onClick={subscribeOrUnsubscribe} disabled={fider.isReadOnly}>\n <Icon sprite={IconPlus} />\n <span>\n <Trans id=\"label.follow\">Follow</Trans>\n </span>\n </Button>\n )\n\n return <VStack>{button}</VStack>\n}\n","import React, { useState } from \"react\"\nimport { Post, PostStatus } from \"@fider/models\"\nimport { actions } from \"@fider/services\"\nimport { Button, Icon, SignInModal } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\nimport IconThumbsUp from \"@fider/assets/images/heroicons-thumbsup.svg\"\nimport IconCheck from \"@fider/assets/images/heroicons-check.svg\"\nimport { Trans } from \"@lingui/macro\"\nimport { HStack, VStack } from \"@fider/components/layout\"\n\ninterface VoteSectionProps {\n post: Post\n votes: number\n}\n\nexport const VoteSection = (props: VoteSectionProps) => {\n const fider = useFider()\n const [votes, setVotes] = useState(props.votes)\n const [hasVoted, setHasVoted] = useState(props.post.hasVoted)\n const [isSignInModalOpen, setIsSignInModalOpen] = useState(false)\n\n const voteOrUndo = async () => {\n if (!fider.session.isAuthenticated) {\n setIsSignInModalOpen(true)\n return\n }\n\n const response = await actions.toggleVote(props.post.number)\n if (response.ok) {\n setVotes(response.data.voted ? votes + 1 : votes - 1)\n setHasVoted(response.data.voted)\n }\n }\n\n const hideModal = () => setIsSignInModalOpen(false)\n\n const status = PostStatus.Get(props.post.status)\n const isDisabled = status.closed || fider.isReadOnly\n\n const buttonText = hasVoted ? <Trans id=\"action.voted\">Voted!</Trans> : <Trans id=\"action.vote\">Vote for this idea</Trans>\n const icon = hasVoted ? IconCheck : IconThumbsUp\n\n return (\n <VStack spacing={4}>\n <SignInModal isOpen={isSignInModalOpen} onClose={hideModal} />\n <div className=\"align-self-start\">\n <Button variant=\"primary\" onClick={voteOrUndo} disabled={isDisabled} style={{ minWidth: \"180px\" }}>\n <HStack spacing={2} justify=\"center\" className=\"w-full\">\n <Icon sprite={icon} /> <span>{buttonText}</span>\n </HStack>\n </Button>\n </div>\n <HStack align=\"center\">\n <span className=\"text-semibold text-2xl\" style={{ fontSize: \"32px\", minHeight: \"48px\" }}>\n {votes}\n </span>\n <span className=\"text-semibold text-lg\">{votes === 1 ? \"Vote\" : \"Votes\"}</span>\n </HStack>\n </VStack>\n )\n}\n","import React, { useState } from \"react\"\nimport { PostStatus, Post } from \"@fider/models\"\nimport { actions, navigator, Failure } from \"@fider/services\"\nimport { Form, Modal, Button, TextArea } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface DeletePostModalProps {\n post: Post\n showModal: boolean\n onModalClose: () => void\n}\n\nexport const DeletePostModal = (props: DeletePostModalProps) => {\n const fider = useFider()\n const [text, setText] = useState(\"\")\n const [error, setError] = useState<Failure>()\n\n const handleDelete = async () => {\n const response = await actions.deletePost(props.post.number, text)\n if (response.ok) {\n props.onModalClose()\n navigator.goHome()\n } else if (response.error) {\n setError(response.error)\n }\n }\n\n const status = PostStatus.Get(props.post.status)\n if (!fider.session.isAuthenticated || !fider.session.user.isAdministrator || status.closed) {\n return null\n }\n\n const modal = (\n <Modal.Window isOpen={props.showModal} onClose={props.onModalClose} center={false} size=\"large\">\n <Modal.Content>\n <Form error={error}>\n <TextArea\n field=\"text\"\n onChange={setText}\n value={text}\n placeholder={i18n._(\"showpost.moderationpanel.text.placeholder\", { message: \"Why are you deleting this post? (optional)\" })}\n >\n <span className=\"text-muted\">\n <Trans id=\"showpost.moderationpanel.text.help\">\n This operation <strong>cannot</strong> be undone.\n </Trans>\n </span>\n </TextArea>\n </Form>\n </Modal.Content>\n\n <Modal.Footer>\n <Button variant=\"danger\" onClick={handleDelete}>\n <Trans id=\"action.delete\">Delete</Trans>\n </Button>\n <Button variant=\"tertiary\" onClick={props.onModalClose}>\n <Trans id=\"action.cancel\">Cancel</Trans>\n </Button>\n </Modal.Footer>\n </Modal.Window>\n )\n\n return modal\n}\n","import React, { useEffect, useState } from \"react\"\nimport IconSearch from \"@fider/assets/images/heroicons-search.svg\"\nimport { Input, ShowPostStatus } from \"@fider/components\"\nimport { actions } from \"@fider/services\"\nimport { Post, PostStatus } from \"@fider/models\"\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface PostSearchProps {\n exclude?: number[]\n onChanged(postNumber: number): void\n}\n\nexport const PostSearch = (props: PostSearchProps) => {\n const [query, setQuery] = useState(\"\")\n const [posts, setPosts] = useState<Post[]>([])\n const [selectedPost, setSelectedPost] = useState<Post>()\n\n useEffect(() => {\n if (!query) {\n return\n }\n\n const timer = setTimeout(() => {\n actions.searchPosts({ query, limit: 6 }).then((res) => {\n if (res.ok) {\n const filteredPosts =\n props.exclude && props.exclude.length > 0 ? res.data.filter((i) => props.exclude && props.exclude.indexOf(i.number) === -1) : res.data\n setPosts(filteredPosts)\n }\n })\n }, 500)\n\n return () => {\n clearTimeout(timer)\n }\n }, [query])\n\n const selectPost = (post: Post) => () => {\n props.onChanged(post.number)\n setSelectedPost(post)\n }\n\n return (\n <>\n <Input\n field=\"query\"\n icon={IconSearch}\n placeholder={i18n._(\"showpost.postsearch.query.placeholder\", { message: \"Search original post...\" })}\n value={query}\n onChange={setQuery}\n />\n <div className=\"grid gap-2 grid-cols-1 lg:grid-cols-3\">\n {posts.map((p) => (\n <VStack onClick={selectPost(p)} className={`bg-gray-50 p-4 clickable border-2 rounded ${selectedPost === p ? \"border-primary-base\" : \"\"}`} key={p.id}>\n <HStack className=\"text-2xs\">\n <span>#{p.number}</span> <span>·</span> <ShowPostStatus status={PostStatus.Get(p.status)} /> <span>·</span>{\" \"}\n <span>\n <Trans id=\"showpost.postsearch.numofvotes\">{p.votesCount} votes</Trans>\n </span>\n </HStack>\n <span>{p.title}</span>\n </VStack>\n ))}\n </div>\n </>\n )\n}\n","import React from \"react\"\n\nimport { Modal, Button, DisplayError, Select, Form, TextArea, Field, SelectOption } from \"@fider/components\"\nimport { Post, PostStatus } from \"@fider/models\"\n\nimport { actions, Failure } from \"@fider/services\"\nimport { PostSearch } from \"./PostSearch\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface ResponseModalProps {\n post: Post\n showModal: boolean\n onCloseModal: () => void\n}\n\ninterface ResponseModalState {\n status: string\n text: string\n originalNumber: number\n error?: Failure\n}\n\nexport class ResponseModal extends React.Component<ResponseModalProps, ResponseModalState> {\n constructor(props: ResponseModalProps) {\n super(props)\n\n this.state = {\n status: this.props.post.status,\n originalNumber: 0,\n text: this.props.post.response ? this.props.post.response.text : \"\",\n }\n }\n\n private submit = async () => {\n const result = await actions.respond(this.props.post.number, this.state)\n if (result.ok) {\n location.reload()\n } else {\n this.setState({\n error: result.error,\n })\n }\n }\n\n private setStatus = (opt?: SelectOption) => {\n if (opt) {\n this.setState({ status: opt.value })\n }\n }\n\n private setOriginalNumber = (originalNumber: number) => {\n this.setState({ originalNumber })\n }\n\n private setText = (text: string) => {\n this.setState({ text })\n }\n\n public render() {\n const options = PostStatus.All.map((s) => {\n const id = `enum.poststatus.${s.value.toString()}`\n return {\n value: s.value.toString(),\n label: i18n._(id, { message: s.title }),\n }\n })\n\n const modal = (\n <Modal.Window isOpen={this.props.showModal} onClose={this.props.onCloseModal} center={false} size=\"large\">\n <Modal.Content>\n <Form error={this.state.error} className=\"c-response-form\">\n <Select field=\"status\" label=\"Status\" defaultValue={this.state.status} options={options} onChange={this.setStatus} />\n {this.state.status === PostStatus.Duplicate.value ? (\n <>\n <Field>\n <PostSearch exclude={[this.props.post.number]} onChanged={this.setOriginalNumber} />\n </Field>\n <DisplayError fields={[\"originalNumber\"]} error={this.state.error} />\n <span className=\"text-muted\">\n <Trans id=\"showpost.responseform.message.mergedvotes\">Votes from this post will be merged into original post.</Trans>\n </span>\n </>\n ) : (\n <TextArea\n field=\"text\"\n onChange={this.setText}\n value={this.state.text}\n minRows={5}\n placeholder={i18n._(\"showpost.responseform.text.placeholder\", {\n message: \"What's going on with this post? Let your users know what are your plans...\",\n })}\n />\n )}\n </Form>\n </Modal.Content>\n\n <Modal.Footer>\n <Button variant=\"primary\" onClick={this.submit}>\n <Trans id=\"action.submit\">Submit</Trans>\n </Button>\n <Button variant=\"tertiary\" onClick={this.props.onCloseModal}>\n <Trans id=\"action.cancel\">Cancel</Trans>\n </Button>\n </Modal.Footer>\n </Modal.Window>\n )\n\n return modal\n }\n}\n","import React, { useEffect, useState } from \"react\"\nimport { Post, Vote } from \"@fider/models\"\nimport { Modal, Button, Loader, Avatar, UserName, Moment, Input } from \"@fider/components\"\nimport { actions } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport IconSearch from \"@fider/assets/images/heroicons-search.svg\"\nimport IconX from \"@fider/assets/images/heroicons-x.svg\"\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface VotesModalProps {\n isOpen: boolean\n post: Post\n onClose?: () => void\n}\n\nexport const VotesModal: React.FC<VotesModalProps> = (props) => {\n const [isLoading, setIsLoading] = useState(false)\n const [query, setQuery] = useState(\"\")\n const [allVotes, setAllVotes] = useState<Vote[]>([])\n const [filteredVotes, setFilteredVotes] = useState<Vote[]>([])\n\n const fider = useFider()\n\n useEffect(() => {\n if (props.isOpen) {\n actions.listVotes(props.post.number).then((response) => {\n if (response.ok) {\n setAllVotes(response.data)\n setFilteredVotes(response.data)\n setIsLoading(false)\n }\n })\n }\n }, [props.isOpen])\n\n const closeModal = async () => {\n if (props.onClose) {\n props.onClose()\n }\n }\n\n const clearSearch = () => {\n handleSearchFilterChanged(\"\")\n }\n\n const handleSearchFilterChanged = (query: string) => {\n const votes = allVotes.filter((x) => x.user.name.toLowerCase().indexOf(query.toLowerCase()) >= 0)\n setQuery(query)\n setFilteredVotes(votes)\n }\n\n return (\n <Modal.Window isOpen={props.isOpen} center={false} onClose={closeModal}>\n <Modal.Content>\n {isLoading && <Loader />}\n {!isLoading && (\n <>\n <Input\n field=\"query\"\n icon={query ? IconX : IconSearch}\n onIconClick={query ? clearSearch : undefined}\n placeholder={i18n._(\"modal.showvotes.query.placeholder\", { message: \"Search for users by name...\" })}\n value={query}\n onChange={handleSearchFilterChanged}\n />\n <VStack spacing={2} className=\"h-max-5xl overflow-auto\">\n {filteredVotes.map((x) => (\n <HStack key={x.user.id} justify=\"between\">\n <HStack>\n <Avatar user={x.user} />\n <VStack spacing={0}>\n <UserName user={x.user} />\n <span className=\"text-muted\">{x.user.email}</span>\n </VStack>\n </HStack>\n <span className=\"text-muted\">\n <Moment locale={fider.currentLocale} date={x.createdAt} />\n </span>\n </HStack>\n ))}\n {filteredVotes.length === 0 && (\n <p className=\"text-muted\">\n <Trans id=\"modal.showvotes.message.zeromatches\">\n No users found matching <strong>{query}</strong>.\n </Trans>\n </p>\n )}\n </VStack>\n </>\n )}\n </Modal.Content>\n\n <Modal.Footer>\n <Button variant=\"tertiary\" onClick={closeModal}>\n <Trans id=\"action.close\">Close</Trans>\n </Button>\n </Modal.Footer>\n </Modal.Window>\n )\n}\n","import React, { useState } from \"react\"\nimport { Post, Vote } from \"@fider/models\"\nimport { AvatarStack, Button } from \"@fider/components\"\nimport { Fider } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport { VotesModal } from \"./VotesModal\"\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface VotesPanelProps {\n post: Post\n hideTitle?: boolean\n votes: Vote[]\n}\n\nexport const VotesPanel = (props: VotesPanelProps) => {\n const fider = useFider()\n const [isVotesModalOpen, setIsVotesModalOpen] = useState(false)\n const canShowAll = fider.session.isAuthenticated && Fider.session.user.isCollaborator\n\n const openModal = () => {\n if (canShowAll) {\n setIsVotesModalOpen(true)\n }\n }\n\n const closeModal = () => setIsVotesModalOpen(false)\n\n const extraVotesCount = props.post.votesCount - props.votes.length\n\n return (\n <VStack spacing={4}>\n <VotesModal post={props.post} isOpen={isVotesModalOpen} onClose={closeModal} />\n {!props.hideTitle && (\n <span className=\"text-category\">\n <Trans id=\"label.voters\">Voters</Trans>\n </span>\n )}\n {props.votes.length > 0 && (\n <HStack spacing={0} className=\"gap-2\">\n <AvatarStack users={props.votes.map((x) => x.user)} overlap={false} />\n </HStack>\n )}\n {extraVotesCount > 0 && (\n <Button variant=\"tertiary\" disabled={!canShowAll} size=\"small\" onClick={openModal}>\n <Trans id=\"showpost.votespanel.more\">+{extraVotesCount} more</Trans>\n </Button>\n )}\n {props.votes.length > 0 && extraVotesCount === 0 && canShowAll && (\n <Button variant=\"tertiary\" size=\"small\" disabled={!canShowAll} onClick={openModal}>\n <Trans id=\"showpost.votespanel.seedetails\">see details</Trans>\n </Button>\n )}\n {props.votes.length === 0 && (\n <span className=\"text-muted\">\n <Trans id=\"label.none\">None</Trans>\n </span>\n )}\n </VStack>\n )\n}\n","import \"./ShowPost.page.scss\"\n\nimport React from \"react\"\n\nimport { Comment, Post, Tag, Vote, ImageUpload, CurrentUser, PostStatus } from \"@fider/models\"\nimport { actions, clearUrlHash, Failure, Fider, notify, timeAgo } from \"@fider/services\"\nimport IconDotsHorizontal from \"@fider/assets/images/heroicons-dots-horizontal.svg\"\n\nimport {\n ResponseDetails,\n Button,\n UserName,\n Moment,\n Markdown,\n Input,\n Form,\n TextArea,\n MultiImageUploader,\n ImageViewer,\n Icon,\n Header,\n PoweredByFider,\n Avatar,\n Dropdown,\n} from \"@fider/components\"\nimport { DiscussionPanel } from \"./components/DiscussionPanel\"\n\nimport IconX from \"@fider/assets/images/heroicons-x.svg\"\nimport IconThumbsUp from \"@fider/assets/images/heroicons-thumbsup.svg\"\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { TagsPanel } from \"./components/TagsPanel\"\nimport { FollowButton } from \"./components/FollowButton\"\nimport { VoteSection } from \"./components/VoteSection\"\nimport { DeletePostModal } from \"./components/DeletePostModal\"\nimport { ResponseModal } from \"./components/ResponseModal\"\nimport { VotesPanel } from \"./components/VotesPanel\"\n\ninterface ShowPostPageProps {\n post: Post\n subscribed: boolean\n comments: Comment[]\n tags: Tag[]\n votes: Vote[]\n attachments: string[]\n}\n\ninterface ShowPostPageState {\n editMode: boolean\n newTitle: string\n showDeleteModal: boolean\n showResponseModal: boolean\n attachments: ImageUpload[]\n newDescription: string\n highlightedComment?: number\n error?: Failure\n}\n\nconst oneHour = 3600\nconst canEditPost = (user: CurrentUser, post: Post) => {\n if (user.isCollaborator) {\n return true\n }\n\n return user.id === post.user.id && timeAgo(post.createdAt) <= oneHour\n}\n\nexport default class ShowPostPage extends React.Component<ShowPostPageProps, ShowPostPageState> {\n constructor(props: ShowPostPageProps) {\n super(props)\n\n this.state = {\n editMode: false,\n showDeleteModal: false,\n showResponseModal: false,\n newTitle: this.props.post.title,\n newDescription: this.props.post.description,\n attachments: [],\n }\n }\n\n public componentDidMount() {\n this.handleHashChange()\n window.addEventListener(\"hashchange\", this.handleHashChange)\n }\n\n public componentWillUnmount() {\n window.removeEventListener(\"hashchange\", this.handleHashChange)\n }\n\n private saveChanges = async () => {\n const result = await actions.updatePost(this.props.post.number, this.state.newTitle, this.state.newDescription, this.state.attachments)\n if (result.ok) {\n location.reload()\n } else {\n this.setState({\n error: result.error,\n })\n }\n }\n\n private canDeletePost = () => {\n const status = PostStatus.Get(this.props.post.status)\n if (!Fider.session.isAuthenticated || !Fider.session.user.isAdministrator || status.closed) {\n return false\n }\n return true\n }\n\n private setNewTitle = (newTitle: string) => {\n this.setState({ newTitle })\n }\n\n private setNewDescription = (newDescription: string) => {\n this.setState({ newDescription })\n }\n\n private setAttachments = (attachments: ImageUpload[]) => {\n this.setState({ attachments })\n }\n\n private setShowDeleteModal = (showDeleteModal: boolean) => {\n this.setState({ showDeleteModal })\n }\n\n private setShowResponseModal = (showResponseModal: boolean) => {\n this.setState({ showResponseModal })\n }\n\n private cancelEdit = async () => {\n this.setState({ error: undefined, editMode: false })\n }\n\n private startEdit = async () => {\n this.setState({ editMode: true })\n }\n\n private handleHashChange = (e?: Event) => {\n const hash = window.location.hash\n const result = /#comment-([0-9]+)/.exec(hash)\n\n let highlightedComment\n if (result === null) {\n // No match\n highlightedComment = undefined\n } else {\n // Match, extract numeric ID\n const id = parseInt(result[1])\n if (this.props.comments.map((comment) => comment.id).includes(id)) {\n highlightedComment = id\n } else {\n // Unknown comment\n if (e?.cancelable) {\n e.preventDefault()\n } else {\n clearUrlHash(true)\n }\n notify.error(<Trans id=\"showpost.comment.unknownhighlighted\">Unknown comment ID #{id}</Trans>)\n highlightedComment = undefined\n }\n }\n this.setState({ highlightedComment })\n }\n\n public onActionSelected = (action: \"copy\" | \"delete\" | \"status\" | \"edit\") => () => {\n if (action === \"copy\") {\n navigator.clipboard.writeText(window.location.href)\n notify.success(<Trans id=\"showpost.copylink.success\">Link copied to clipboard</Trans>)\n } else if (action === \"delete\") {\n this.setShowDeleteModal(true)\n } else if (action === \"status\") {\n this.setShowResponseModal(true)\n } else if (action === \"edit\") {\n this.startEdit()\n }\n }\n\n public render() {\n return (\n <>\n <Header />\n <div id=\"p-show-post\" className=\"page container\">\n <div className=\"p-show-post\">\n <div className=\"p-show-post__main-col\">\n <div className=\"p-show-post__header-col\">\n <VStack spacing={8}>\n <HStack justify=\"between\">\n <VStack align=\"start\">\n {!this.state.editMode && (\n <HStack>\n <Avatar user={this.props.post.user} />\n <VStack spacing={1}>\n <UserName user={this.props.post.user} />\n <Moment className=\"text-muted\" locale={Fider.currentLocale} date={this.props.post.createdAt} />\n </VStack>\n </HStack>\n )}\n </VStack>\n\n {!this.state.editMode && (\n <Dropdown position=\"left\" renderHandle={<Icon sprite={IconDotsHorizontal} width=\"24\" height=\"24\" />}>\n <Dropdown.ListItem onClick={this.onActionSelected(\"copy\")}>\n <Trans id=\"action.copylink\">Copy link</Trans>\n </Dropdown.ListItem>\n {Fider.session.isAuthenticated && canEditPost(Fider.session.user, this.props.post) && (\n <>\n <Dropdown.ListItem onClick={this.onActionSelected(\"edit\")}>\n <Trans id=\"action.edit\">Edit</Trans>\n </Dropdown.ListItem>\n {Fider.session.user.isCollaborator && (\n <Dropdown.ListItem onClick={this.onActionSelected(\"status\")}>\n <Trans id=\"action.respond\">Respond</Trans>\n </Dropdown.ListItem>\n )}\n </>\n )}\n {this.canDeletePost() && (\n <Dropdown.ListItem onClick={this.onActionSelected(\"delete\")} className=\"text-red-700\">\n <Trans id=\"action.delete\">Delete</Trans>\n </Dropdown.ListItem>\n )}\n </Dropdown>\n )}\n </HStack>\n\n <div className=\"flex-grow\">\n {this.state.editMode ? (\n <Form error={this.state.error}>\n <Input field=\"title\" maxLength={100} value={this.state.newTitle} onChange={this.setNewTitle} />\n </Form>\n ) : (\n <>\n <h1 className=\"text-large\">{this.props.post.title}</h1>\n </>\n )}\n </div>\n\n <DeletePostModal onModalClose={() => this.setShowDeleteModal(false)} showModal={this.state.showDeleteModal} post={this.props.post} />\n {Fider.session.isAuthenticated && Fider.session.user.isCollaborator && (\n <ResponseModal onCloseModal={() => this.setShowResponseModal(false)} showModal={this.state.showResponseModal} post={this.props.post} />\n )}\n <VStack>\n {this.state.editMode ? (\n <Form error={this.state.error}>\n <TextArea field=\"description\" value={this.state.newDescription} onChange={this.setNewDescription} />\n <MultiImageUploader field=\"attachments\" bkeys={this.props.attachments} maxUploads={3} onChange={this.setAttachments} />\n </Form>\n ) : (\n <>\n {this.props.post.description && <Markdown className=\"description\" text={this.props.post.description} style=\"full\" />}\n {!this.props.post.description && (\n <em className=\"text-muted\">\n <Trans id=\"showpost.message.nodescription\">No description provided.</Trans>\n </em>\n )}\n {this.props.attachments.map((x) => (\n <ImageViewer key={x} bkey={x} />\n ))}\n </>\n )}\n </VStack>\n <div className=\"mt-2\">\n <TagsPanel post={this.props.post} tags={this.props.tags} />\n </div>\n\n <VStack spacing={4}>\n {!this.state.editMode ? (\n <HStack justify=\"between\" align=\"start\">\n <VoteSection post={this.props.post} votes={this.props.post.votesCount} />\n <FollowButton post={this.props.post} subscribed={this.props.subscribed} />\n </HStack>\n ) : (\n <HStack>\n <Button variant=\"primary\" onClick={this.saveChanges} disabled={Fider.isReadOnly}>\n <Icon sprite={IconThumbsUp} />{\" \"}\n <span>\n <Trans id=\"action.save\">Save</Trans>\n </span>\n </Button>\n <Button onClick={this.cancelEdit} disabled={Fider.isReadOnly}>\n <Icon sprite={IconX} />\n <span>\n <Trans id=\"action.cancel\">Cancel</Trans>\n </span>\n </Button>\n </HStack>\n )}\n <div className=\"border-4 border-blue-500\" />\n </VStack>\n\n <ResponseDetails status={this.props.post.status} response={this.props.post.response} />\n </VStack>\n </div>\n\n <div className=\"p-show-post__discussion_col\">\n <DiscussionPanel post={this.props.post} comments={this.props.comments} highlightedComment={this.state.highlightedComment} />\n </div>\n </div>\n <div className=\"p-show-post__action-col\">\n <VotesPanel post={this.props.post} votes={this.props.votes} />\n <PoweredByFider slot=\"show-post\" className=\"mt-3\" />\n </div>\n </div>\n </div>\n </>\n )\n }\n}\n","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"heroicons-dots-horizontal\",\n \"use\": \"heroicons-dots-horizontal-usage\",\n \"viewBox\": \"0 0 24 24\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke=\\\"currentColor\\\" id=\\\"heroicons-dots-horizontal\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm7 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm7 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"heroicons-search\",\n \"use\": \"heroicons-search-usage\",\n \"viewBox\": \"0 0 24 24\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke=\\\"currentColor\\\" id=\\\"heroicons-search\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m21 21-6-6m2-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol"],"names":["ShowComment","props","fider","useFider","node","useRef","isEditing","setIsEditing","useState","newContent","setNewContent","comment","content","isDeleteConfirmationModalOpen","setIsDeleteConfirmationModalOpen","attachments","setAttachments","localReactionCounts","setLocalReactionCounts","reactionCounts","emojiSelectorRef","error","setError","handleClick","e","current","contains","target","clearUrlHash","useEffect","highlighted","document","addEventListener","removeEventListener","clearError","undefined","closeModal","async","onActionSelected","action","window","location","hash","id","copyToClipboard","href","then","notify","_i18n","_","editedMetadata","editedAt","editedBy","React","name","formatDate","currentLocale","classList","classSet","HStack","spacing","className","Modal","Window","isOpen","onClose","center","size","Header","_Trans","Content","components","0","Footer","Button","variant","onClick","actions","post","number","ok","reload","Avatar","user","ref","justify","UserName","Moment","locale","date","createdAt","Dropdown","position","renderHandle","Icon","sprite","IconDotsHorizontal","width","height","ListItem","session","isAuthenticated","isCollaborator","Divider","Form","CommentEditor","disabled","initialValue","onChange","placeholder","MultiImageUploader","field","bkeys","maxUploads","response","Markdown","text","style","map","x","ImageViewer","key","bkey","Reactions","reactions","toggleReaction","emoji","added","data","prevCounts","newCounts","reactionIndex","findIndex","r","newCount","count","splice","includesMe","push","CommentInput","getCacheKey","getContentFromCache","cache","get","isSignInModalOpen","setIsSignInModalOpen","isClient","setIsClient","commentChanged","useCallback","value","set","SignInModal","hideModal","align","Fider","onFocus","editorFocused","i18n","message","result","remove","DiscussionPanel","VStack","comments","c","highlightedComment","symbol","TagListItem","tag","IconCheck","assigned","ShowTag","TagsPanel","canEdit","tags","length","assignedTags","setAssignedTags","filter","t","indexOf","slug","assignOrUnassignTag","idx","nextAssignedTags","onSubtitleClick","tagsList","link","editTagsList","isReadOnly","FollowButton","subscribed","setSubscribed","subscribeOrUnsubscribe","button","IconPlus","VoteSection","votes","setVotes","hasVoted","setHasVoted","isDisabled","PostStatus","Get","status","closed","buttonText","icon","IconThumbsUp","voted","minWidth","fontSize","minHeight","DeletePostModal","setText","isAdministrator","showModal","onModalClose","TextArea","navigator","goHome","PostSearch","query","setQuery","posts","setPosts","selectedPost","setSelectedPost","timer","setTimeout","limit","res","filteredPosts","exclude","i","clearTimeout","Input","IconSearch","p","onChanged","ShowPostStatus","values","votesCount","title","ResponseModal","constructor","super","_defineProperty","this","state","setState","opt","originalNumber","render","options","All","s","toString","label","onCloseModal","Select","defaultValue","setStatus","Duplicate","Field","setOriginalNumber","DisplayError","fields","minRows","submit","VotesModal","isLoading","setIsLoading","allVotes","setAllVotes","filteredVotes","setFilteredVotes","handleSearchFilterChanged","toLowerCase","Loader","IconX","onIconClick","clearSearch","email","VotesPanel","isVotesModalOpen","setIsVotesModalOpen","canShowAll","openModal","extraVotesCount","hideTitle","AvatarStack","users","overlap","ShowPostPage","newTitle","newDescription","showDeleteModal","showResponseModal","editMode","exec","parseInt","includes","cancelable","preventDefault","clipboard","writeText","setShowDeleteModal","setShowResponseModal","startEdit","description","componentDidMount","handleHashChange","componentWillUnmount","timeAgo","canDeletePost","maxLength","setNewTitle","setNewDescription","saveChanges","cancelEdit","ResponseDetails","PoweredByFider","slot","canEditPost"],"sourceRoot":""}