{"version":3,"file":"js/9728-7a23b98db0536264c755.js","mappings":"w6BAOA,IAAMA,EAAe,CACjB,OACA,SACA,OACA,YACA,SACA,OACA,MACA,QACA,QACA,QACA,OACA,aACA,UAGW,SAASC,EAAkBC,GACtC,IAAMC,EAAUC,EAAEF,GAAWG,KAAK,WAC5BC,EAAWF,EAAEF,GAAWG,KAAK,YAG/BE,EAAe,CACf,CAAC,OAAQ,SAAU,YAAa,aAChC,CAAC,CAAEC,KAAM,WAAa,CAAEA,KAAM,WAC9B,CAAC,OAAQ,SACT,CAAC,OAAQ,cACT,CAAC,CAAEC,OAAQ,MAAQ,CAAEA,OAAQ,QAG7BC,GAAW,EACXC,GAAW,EAOC,YAAZR,EACAI,EAAY,CAAI,CAAC,CAAEK,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,GAAG,MAA/B,SAA6CL,IACtC,SAAZJ,IACPO,GAAW,EACXC,GAAW,EACXJ,EAAY,CACR,CAAC,CAAEK,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,GAAG,MADnB,SAELL,GAFK,CAGR,CAAC,SACD,CAAC,YAIT,IAAIM,EAAU,CACVC,UAAW,CAAC,EACZX,QAAS,CACLD,UAAWK,EACXQ,SAAU,CACND,UAAWE,EAAAA,KAKjBC,EAASb,EAAEF,GAAWgB,SAAS,wBACrChB,EAAUiB,UAAYF,EAAOG,OAAS,GACtC,IAAMC,EAAQjB,EAAE,2BAA2BkB,KAAK,WAMhD,GAJIX,GACAX,EAAauB,KAAK,SAGlBb,EAAU,CAGVV,EAAauB,KAAK,SAElBV,EAAQW,YAAc,CAClBX,QAAS,CAAC,SAAU,gBAExBA,EAAQY,YAAc,CAClBC,IAAKtB,EAAEF,GAAWG,KAAK,oBACvBsB,OAAQ,OACRC,KAAM,QACNC,iBAAiB,EACjBC,QAAS,CAAE,eAAgBT,GAC3BU,WAAY,SAACC,EAAgBC,GACzB7B,EAAE,kBAAkB8B,OAAOC,YAAY,kBACvCF,EAAKD,EAAeN,IARN,EAUlBU,WAAY,SAACC,GACTjC,EAAE,kBAAkB8B,OAAOC,YAAY,kBACvCG,QAAQC,IAARD,uBAAAA,OAAmCD,EAAYG,SAZjC,EAclBC,gBAAiB,SAACC,EAAMT,GACpB7B,EAAE,kBAAkB8B,OAAOS,SAAS,kBACpCV,EAAKS,EACR,GAGL,IAAME,EAAOxC,EAAEF,GAAWG,KAAK,uBAC/BD,EAAEF,GAAW2C,MAAbzC,oDAAAA,OACwDwC,EADxD,QAGH,CACD,IAAME,EAAQ,IAAIC,MAAM7C,EAAW,CAC/BW,QAASA,EACTmC,QAAShD,EACTiD,MAAO,SAuCX,OApCiB,IAAbvC,GAEAoC,EAAMI,KAAKC,iBAAiB,QAAQ,SAACC,GAAD,OAAQA,EAAGC,gBAA/C,IAGA/C,GACAwC,EAAMQ,UAGVR,EAAMS,GAAG,eAAe,WAEpB,IAAMX,EAAOE,EAAMU,UAGfC,EAAQ,IAAIC,YAAY,iBAAkB,CAC1CC,OAAQb,EAAMc,iBAIlB,GAFA1D,EAAU2D,cAAcJ,GAGV,OAATb,GAA0B,SAATA,GACkD,IAApEE,EAAMI,KAAKY,iBA5GiB,UA4G6BC,QAAiB9C,EAAOG,MAAM4C,MAAM,OAG1F,CACH,IAAMC,EAAiB,cACjBC,EAAYpB,EAAMI,KAAK/B,UAAUgD,QACnC,IAAIC,OAAJ,WAAeH,EAAf,YAAiCA,EAAjC,KAAoD,KACpD,IAEJhD,EAAOG,IAAI8C,EACd,MARGjD,EAAOG,IAAI,GAdnB,IAyBA0B,EAAMuB,QAAQC,KAAK,gBAEZxB,CACV,C,+nCCvJoByB,EAAAA,WACnB,c,4FAAe,CAAD,QACZC,KAAKC,OAAS,CAAC,CAChB,C,UAYA,O,EAZA,E,EAAA,kBAED,SAAIC,GAAoB,IAAfC,EAAc,uDAAN,KACI,WAAfC,EAAOF,GACTF,KAAKC,OAAL,OAAmBD,KAAKC,QAAWC,GAEnCF,KAAKC,OAAOC,GAAOC,CAEtB,oBAED,SAAID,GACF,OAAOF,KAAKC,OAAOC,EACpB,I,iFAAA,EAfkBH,E,qNCSrB,IAAIM,EAAgB,KAEdC,EAAAA,WACJ,WAAYC,I,4FAAgB,CAAD,QACzBP,KAAKQ,OAAS5E,EAAEyE,GAChBL,KAAKS,QAAUF,EACfP,KAAKU,SAAW9E,EAAE,yBAA0BoE,KAAKQ,QACjDR,KAAKW,eAAiB/E,EAAE,oBAAqBoE,KAAKQ,QAClDR,KAAKY,cAAgBhF,EAAE,wBAAyBoE,KAAKQ,QAGrD,IAAMK,EAAO,8BAA0BC,KAAKC,SAASC,SAAS,IAAIC,UAAU,IAE5EjB,KAAKQ,OAAOU,WAAW,MACvBtF,EAAE,uBAAwBoE,KAAKQ,QAAQ1D,KAAK,KAAM+D,GAClDb,KAAKQ,OAAO1D,KAAK,kBAAmB+D,GAEpCjF,EAAE,QAAQuF,OAAOnB,KAAKQ,QACtBR,KAAKQ,OAAOY,YACb,C,UA4BA,O,EA5BA,G,EAAA,sBAED,SAAQpD,GAAU,IAAD,OAMf,OALAgC,KAAKU,SAASW,KAAKrD,GAEnBgC,KAAKW,eAAeW,IAAI,SACxBtB,KAAKY,cAAcU,IAAI,SAEhB,IAAIC,SAAQ,SAACC,GAClBC,EAAKd,eAAe5B,GAAG,SAAS,SAACH,GAC/BA,EAAGC,iBAEH4C,EAAKjB,OAAOY,WAAW,SACvBI,GAAQ,GACRC,EAAKhB,QAAQiB,OALf,IAOAD,EAAKb,cAAc7B,GAAG,SAAS,SAACH,GAC9BA,EAAGC,iBAEH4C,EAAKjB,OAAOY,WAAW,SACvBI,GAAQ,GACRC,EAAKhB,QAAQiB,OALf,IAQAD,EAAKjB,OAAOY,WAAW,QAAQrC,GAAG,oBAAoB,WACpD0C,EAAKjB,OAAOmB,QADd,GAhBK,GAoBR,M,8EAAA,EA7CGrB,GA4GAsB,EAAgB,SAAChD,EAAIiD,IAnDP,SAACjD,EAAIiD,GACvB,IAAM7D,EAAUpC,EAAEiG,GAAShG,KAAK,WAChC,OAAKmC,KAIA8D,IAAAA,KAAWD,EAAS,aAIH,OAAlBxB,IACFA,EAAgBzE,EAAE,kBAAkB,GAAGmG,UACvCnG,EAAE,kBAAkB+F,UAGP,IAAIrB,EACjB1E,EAAEiG,IAEGG,QAAQhE,GAASiE,MAAK,SAACC,GAC5B,IAAMC,EAAYL,IAAAA,KAAWD,EAAS,mBAAoB,CAACK,IAC3D,GAAIA,GAAUC,EASZ,GALAvG,EAAEiG,GAAShG,KAAK,UAAW,MAC3BD,EAAEiG,GAASX,WAAW,gBAIN,UAAZtC,EAAGwD,OAEHxG,EAAEiG,GAASQ,GAAG,0BACdzG,EAAEiG,GAASQ,GAAG,yBAGhBzG,EAAEiG,GAASS,QAAQ,QAAQC,aACtB,CACL,IAAIC,EAAS5D,EAAG6D,eAAiB7D,EAC7B8D,EAAQF,EACS,oBAAVG,QAGTD,EAAQ,IAAIF,EAAOI,YAAYJ,EAAOJ,KAAMI,IAE9C5D,EAAGiE,OAAOxD,cAAcqD,EACzB,CA3BL,KA+BO,EAjDT,EAoDOI,CAAYlE,EAAIiD,IACnBC,IAAAA,eAAqBlD,EAFzB,EAKMmE,EAAyB,SAACnE,EAAIoE,GAElC,IADA,IAAIH,EAASjE,EAAGiE,OACLA,aAAkBI,UAAYnB,IAAAA,QAAce,EAAQG,IAC7DH,EAASA,EAAOK,WAGlB,OAAIL,aAAkBI,QACbJ,EAGF,IAVT,EAYMM,EAAsB,SAACvE,EAAIwE,GAC/B,OAAOA,EAAeC,MAAK,SAACC,GAC1B,IAAIT,EAASE,EAAuBnE,EAAI0E,GACxC,OAAe,OAAXT,IAIJjB,EAAchD,EAAIiE,IACX,EAPF,GADT,EAYAU,SAAS5E,iBAAiB,SAAS,SAACC,GAClC,OAAOuE,EAAoBvE,EAAI,CAC7BkD,IAAAA,kBACAA,IAAAA,oBACAA,IAAAA,wBAJJ,IAOAyB,SAAS5E,iBAAiB,UAAU,SAACC,GACnC,OAAOuE,EAAoBvE,EAAI,CAACkD,IAAAA,qBADlC,IAGAyB,SAAS5E,iBAAiB,UAAU,SAACC,GACnC,OAAOuE,EAAoBvE,EAAI,CAACkD,IAAAA,oBADlC,IAQAyB,SAAS5E,iBAAiB,oBAAoB,WAC5C/C,EAAEkG,IAAAA,wBAA8B/C,GAAG,iBAAiB,SAACH,GACnDgD,EAAchD,EAAImE,EAAuBnE,EAAIkD,IAAAA,wBAD/C,GADF,G,+pCCpKO,IAAM0B,EAAb,WACE,WAAYC,EAAOC,EAAYC,I,4FAAU,CAAD,QACtC3D,KAAKyD,MAAQA,EACbzD,KAAK0D,WAAaA,EAClB1D,KAAK4D,YAAcF,EAAWG,cAAc,iBAC5C7D,KAAK8D,gBAAiB,EACtB9D,KAAK+D,YAAa,EACdN,EAAME,QAAQK,aAAeL,EAAQzF,KAAK+F,KAAOR,EAAME,QAAQK,aACjEhE,KAAK+D,YAAa,EAClB/D,KAAKkE,UAAU,CAACT,EAAMU,QAAQC,uBAE9BpE,KAAKqE,OAAS,IAAIC,EAAAA,aAAaX,EAAQzF,KAAMyF,EAAQzG,IAAK8C,KAE7D,C,UAbH,O,EAAAuE,G,EAAAA,CAAAA,CAAAA,IAAAA,YAAAA,MAeE,SAAUC,GACRxE,KAAK4D,YAAYa,UAAUC,IAAI,UAC/B1E,KAAK4D,YAAYjH,UAAYqD,KAAKyD,MAAMU,QAAQQ,iBAChD3E,KAAK0D,WAAWkB,QAAQC,MAAQ,QAChC,IAAMC,EAAY9E,KAAK0D,WAAWG,cAAc,kBAChDW,EAAOO,SAAQ,SAACC,GACd,IAAMC,EAAY1B,SAAS2B,cAAc,MACzCD,EAAUR,UAAUC,IAAI,aAAc,cACtCO,EAAUtI,UAAYqI,EACtBF,EAAUK,YAAYF,EAJxB,GAMD,GA1BH,sBA4BE,SAASG,GAAS,IAAD,OAiBf,IAAKpF,KAAK8D,eAAgB,CACxB,IAAIuB,EAAWrF,KAAKyD,MAAME,QAAQ2B,aAC9BtF,KAAKyD,MAAME,QAAQ4B,SACrBF,EAAW,QAEb,IAAMG,EAAS,IAAIC,gBAAgB,CACjCC,cAAe1F,KAAKyD,MAAME,QAAQ+B,cAClCL,SAAUA,EACVM,KAAMP,EACNQ,UAAW5F,KAAKyD,MAAME,QAAQkC,kBAGhCC,MAAM,uBAAD,OAAwBN,EAAOxE,YAAc,CAChD7D,OAAQ,OACRG,QAAS,CACP,eAAgB,mBAChB,eAAgB1B,EAAE,yBAAyBkB,KAAK,cAEjDmF,MAAK,SAAC8D,GAAD,OAAcA,EAASC,MAN/B,IAMuC/D,MAAK,SAACpG,IAlC9B,SAACA,GAEhB,IADA,IAAI2I,EAAS,GACb,MAAwByB,OAAOC,QAAQrK,GAAvC,eAA8C,CAAzC,IAASsE,EAAT,aACHqE,EAASA,EAAO2B,OAAOhG,EACxB,CAEDsB,EAAKmC,YAAYwC,MAAMC,eAAiB,SAClB,IAAlB7B,EAAOjF,QACTkC,EAAKmC,YAAYjH,UAAY8E,EAAKgC,MAAMU,QAAQmC,SAChD7E,EAAKiC,WAAWkB,QAAQC,MAAQ,aAEhCpD,EAAKyC,UAAUM,GAEjB/C,EAAKmC,YAAYa,UAAUC,IAAI,SAbjC,CAmCI6B,CAAS1K,EAPX,IASAmE,KAAK8D,gBAAiB,CACvB,CACF,GApEH,8CAsEE,SAAiC0C,GAAU,IAAD,OACxCA,EAAQnC,OAAO1F,iBAAiB,YAAY,SAACM,GAC3C,IAAMwH,EAAW3F,KAAK4F,MAAMzH,EAAM0H,OAAS1H,EAAM2H,MAAQ,KACrDC,EAAQ,MACRJ,EAAW,KACbI,EAAK,UAAMJ,EAAN,MAEPK,EAAKlD,YAAYwC,MAAMS,MAAQA,EAM/BC,EAAKlD,YAAYjH,UAJA,MAAb8J,EAIJ,UAAgCA,EAAhC,KAH+BK,EAAKrD,MAAMU,QAAQ4C,UATpD,GAcD,M,8EArFH,KCmBaC,EAAmB,SAACC,GAA8B,IAApBC,EAAmB,uDAAP,GACrD,GAAID,EAAS1H,QAAU2H,EACrB,OAAOD,EAGT,IAAME,EAAsBrG,KAAK4F,MAAMQ,EAAY,GAAK,EAClDE,EAAoBF,EAAYC,EAAsB,EAC5D,MAAM,GAAN,OAAUF,EAASI,MAAM,EAAGF,GAA5B,cAAsDF,EAASI,OAAOD,GAPjE,EAUME,EAAoB,SAACC,EAAWC,EAAQC,GACnD,IAAMC,EAAKnE,SAAS2B,cAAc,SAelC,OAdAwC,EAAGtF,KAAO,SACNmF,IAEAG,EAAGC,UADsB,kBAAfJ,EACKA,EAEAA,EAAUK,KAAK,MAG9BJ,IACFE,EAAGtK,KAAOoK,GAERC,IACFC,EAAGvH,MAAQsH,GAENC,CAhBF,E,0KC1BgBG,EAAAA,WACnB,WAAYC,GAAuB,IAAfnE,EAAc,uDAAJ,CAAC,G,4FAAG,SAEhC3D,KAAK8H,OAASA,EAId,IAAIC,EAAkB,CAAC,EACvB,IASEA,EAAkBC,KAAKC,MAAMH,EAAOlD,QAAQP,OAT9C,CAUE,MAAO6D,GAER,CAEDlI,KAAK2D,QAAUsC,OAAOkC,OAAOJ,EAAiBpE,GAE9C3D,KAAK5C,KAAO4C,KAAK8H,OAAO1K,KACxB4C,KAAKyD,MAAQF,SAASM,cAATN,IAAAA,OAA2BuE,EAAOlD,QAAQwD,OACvDpI,KAAKqI,WAAarI,KAAKyD,MAAMI,cAAX,0BAA4C7D,KAAK5C,OACnE4C,KAAKsI,kBAAoB,EACzBtI,KAAKuI,iBAAkB,EACvBvI,KAAKwI,WAAaxI,KAAKyD,MAAMI,cAAc,kBAC3C7D,KAAKyI,YAAczI,KAAKyD,MAAMI,cAAc,iBAC5C7D,KAAKmE,QAAU6D,KAAKC,MAAMjI,KAAKyI,YAAY7D,QAAQT,SACnDnE,KAAK0I,SAAW1I,KAAKyD,MAAMI,cAAc,aACzC7D,KAAK2I,MAAQ3I,KAAK0I,SAAS7E,cAAc,SACzC7D,KAAK4I,gBAAkBrF,SAASM,cAATN,yBAAAA,OAAgDvD,KAAK5C,OAC5E4C,KAAK6I,kBAAoB7I,KAAK4I,gBAAgB/E,cAAc,mBAC5D7D,KAAK8I,SAAW9I,KAAK+I,gBACtB,C,UA2NA,O,EA3NA,G,EAAA,yBAED,SAAW7K,GAAO,IAAD,OACf,GAAK8B,KAAKuI,gBAAV,CAIA,IAAMS,EAAQ9K,EAAKd,KAAK6L,MAAM,KAAK,GAAG5B,MAAM,EAAG,IACzC3D,EAAa1D,KAAKkJ,iBAAiBhL,EAAKd,KAAM4L,EAAO,QACrDG,EAAW,IAAI3F,EAASxD,KAAM0D,EAAY,CAC9CxF,KAAMA,EACNhB,IAAK8C,KAAK2I,MAAM/D,QAAQwE,gBACxBC,eAAgBnL,EAAKd,OAEnB+L,EAASpF,aAIboF,EAAS9E,OAAOiF,QAAO,SAACtE,EAAOW,GAC7B,GAAIX,EAAO,CACTtB,EAAWkB,QAAQC,MAAQ,QAC3B,IAAMjB,EAAcF,EAAWG,cAAc,iBAC7CD,EAAYa,UAAUC,IAAI,UAC1Bd,EAAYjH,UAAY8E,EAAK0C,QAAQa,MACrClH,QAAQkH,MAAMA,EALhB,KAMO,CACL,IAAMuE,EAAgB9H,EAAK+H,mBAErBC,EAAoBlG,SAAS2B,cAAc,OACjDuE,EAAkBhF,UAAUC,IAAI,sBAChC+E,EAAkB7E,QAAQqC,SAAW/I,EAAKd,KAC1C,IAAMsM,EAAuBnG,SAAS2B,cAAc,QACpDwE,EAAqBtD,MAAMuD,QAAU,OACrCF,EAAkBtE,YAAYuE,GAE9B,IAAME,EAAkBtC,EAAkB,KAAM,KAAM3B,EAAKkE,WAO3D,GANIpI,EAAKkC,QAAQ4B,OACfqE,EAAgBxM,KAAhBwM,GAAAA,OAA0BnI,EAAKkC,QAAQmG,aAAvC,YAAuDrI,EAAKkC,QAAQ2B,aAApE,aAAqFiE,EAArF,WAEAK,EAAgBxM,KAAhBwM,GAAAA,OAA0BnI,EAAKkC,QAAQmG,aAAvC,YAAuDrI,EAAKkC,QAAQ2B,aAApE,KAGE7D,EAAKkC,QAAQ4B,OAAQ,CACvB,IAAMwE,EAAmBzC,EAAkB,eAAD,UAAoB7F,EAAKkC,QAAQmG,aAAjC,YAAiDrI,EAAKkC,QAAQ2B,aAA9D,aAA+EiE,EAA/E,YAAwGP,GAClJU,EAAqB/M,UAArB+M,GAAAA,OAAoCV,EAApC,aAA8C9K,EAAKd,KAAnD,KACAqM,EAAkBtE,YAAY4E,EAHhC,MAKEL,EAAqB/M,UAAYuB,EAAKd,KAGnCqE,EAAKkC,QAAQqG,UAChBvI,EAAKwI,gBAGPR,EAAkBtE,YAAYyE,GAC9BlG,EAAWyB,YAAYsE,GACvBN,EAASe,SAASvE,EAAKkE,UACxB,CAvCH,IAyCA7J,KAAKmK,iBAtDJ,CAuDF,iCAED,WACE,IAAMC,EAAoBpK,KAAKsI,kBAE/B,OADAtI,KAAKsI,mBAAqB,EACnB8B,CACR,+BAED,WACMpK,KAAK2D,QAAQqG,WAIbhK,KAAKyI,YAAY4B,SAAS9K,OAAS,GACrCS,KAAK0I,SAASjE,UAAUC,IAAI,YAC5B1E,KAAKuI,iBAAkB,EACvBvI,KAAK2I,MAAM7M,UAAW,IAEtBkE,KAAK0I,SAASjE,UAAU9C,OAAO,YAC/B3B,KAAKuI,iBAAkB,EACvBvI,KAAK2I,MAAM7M,UAAW,GAEzB,iCAED,SAAiBwO,EAAUtB,EAAOnE,GAAQ,IAAD,SACjC0F,EAAUhH,SAAS2B,cAAc,OACvCqF,EAAQ9F,UAAUC,IAAI,eACtB6F,EAAQC,aAAa,gBAAiBF,GAEtC,IAAMG,EAAWlH,SAAS2B,cAAc,OAClCwF,EAAYnH,SAAS2B,cAAc,OACnCyF,EAAWpH,SAAS2B,cAAc,OACxCuF,EAAShG,UAAUC,IAAI,MAAO,yBAC9BgG,EAAUjG,UAAUC,IAAI,MAAO,0BAC/BiG,EAASlG,UAAUC,IAAI,MAAO,yBAE9B,IAAMkG,EAAerH,SAAS2B,cAAc,QACxC2F,EAAsB,CAAC,UAAW,kBAClC7K,KAAK2D,QAAQ4B,OACfsF,EAAoB9N,KAAK,UAAW,YAEpC8N,EAAoB9N,KAAK,aAE3B,EAAA6N,EAAanG,WAAUC,IAAvB,QAA8BmG,GAC9BD,EAAajO,UAAYqK,EAAiBsD,GAE1C,IAAM1G,EAAcL,SAAS2B,cAAc,OAC3CtB,EAAYa,UAAUC,IAAI,gBACtBG,IACY,cAAVA,EACFjB,EAAYjH,UAAYqD,KAAKmE,QAAQmC,UAErC1C,EAAYjH,UAAY,KACxBiH,EAAYwC,MAAMS,MAAQ,OAE5B0D,EAAQ3F,QAAQC,MAAQA,GAG1B,IAAMiG,EAAoBvH,SAAS2B,cAAc,OACjD4F,EAAkBrG,UAAUC,IAAI,uBAChCoG,EAAkB3F,YAAYvB,GAE9B,IAAMmH,EAAqBxH,SAAS2B,cAAc,OAClD6F,EAAmBtG,UAAUC,IAAI,UAAW,wBAC5CqG,EAAmB5F,YAAY2F,GAC3B9K,KAAK2D,QAAQ4B,OACfwF,EAAmBtG,UAAUC,IAAI,UAAW,YAE5CqG,EAAmBtG,UAAUC,IAAI,YAGnC,IAAMI,EAAYvB,SAAS2B,cAAc,MACzCJ,EAAUL,UAAUC,IAAI,iBAExB,IAAMsG,EAAezH,SAAS2B,cAAc,UAC5C8F,EAAavG,UAAUC,IAAI,UAAW,UAAW,WAAY,sBAC7DsG,EAAarO,UAAbqO,WAAAA,OAAoChL,KAAKmE,QAAQxC,QACjDqJ,EAAarM,iBAAkB,SAAU,SAACM,GACxCA,EAAMJ,iBACN,IAAMoM,EAAOnE,EAAK2B,YAAY5E,cAAjB,0BAAkDyG,EAAlD,OACbxD,EAAKgC,SAAS3H,OAAO8J,GACrBnE,EAAKqD,gBAJP,IAOA,IAAMT,EAAuBnG,SAAS2B,cAAc,QACpDwE,EAAqBjF,UAAUC,IAAI,UAAW,UAAW,2BACzDgF,EAAqB/M,UAArB+M,GAAAA,OAAoCV,EAApC,aAA8ChC,EAAiBsD,GAA/D,KAEAG,EAAStF,YAAYyF,GACrBF,EAAUvF,YAAY4F,GACtBJ,EAASxF,YAAYL,GAErB,IAAIoG,EAAsB,KAC1B,GAAIlL,KAAK2D,QAAQ4B,OAAQ,CACvB,IAAM4F,EAAa5H,SAAS2B,cAAc,SAC1CiG,EAAW1G,UAAUC,IAAI,oBACzByG,EAAW/I,KAAO,OAClB+I,EAAWhL,MAAQ6I,EACnBmC,EAAWxM,iBAAiB,SAAS,SAACM,GDxMnB,IAACmM,EAAe/C,EACrCgD,ECwMIpM,EAAMJ,iBDzMYuM,EC0MNtE,EAAK2B,YD1MgBJ,EC0MHvB,EAAKuB,WDzMvCgD,GAAoB,EAExBC,MAAMC,KAAKH,EAAcf,UAAUtF,SAAQ,SAACkG,GAC1C,IAAMjC,EAAQiC,EAAKpH,cAAc,sBAAsB1D,MACjDqL,EAAmBP,EAAKpH,cAAc,mBACvCmF,GAA0B,IAAjBA,EAAMzJ,OAMlBiM,EAAiB/G,UAAU9C,OAAO,eALlC0J,GAAoB,EACpBhD,EAAWvM,UAAW,EACtB0P,EAAiB/G,UAAUC,IAAI,cAC/BuG,EAAK9F,YAAYqG,GAPrB,IAaIH,IACFhD,EAAWvM,UAAW,ECuLlB,KAIAoP,EAAsB3H,SAAS2B,cAAc,QACzBT,UAAUC,IAAI,UAAW,UAAW,yBACxDwG,EAAoB/F,YAAYgG,GAEhC,IAAMK,EAAmBjI,SAAS2B,cAAc,QAChDsG,EAAiB/G,UAAUC,IAAI,aAAc,kBAC7C8G,EAAiBC,KAAO,QACxBD,EAAiB7O,UAAYqD,KAAKmE,QAAQuH,eAC1CR,EAAoB/F,YAAYqG,GAEhC,IAAMG,EAAiBpI,SAAS2B,cAAc,QAC9CyG,EAAelH,UAAUC,IAAI,oBAC7BiH,EAAehP,UAAYqD,KAAKmE,QAAQ6E,MAExC,IAAM4C,EAAiBrI,SAAS2B,cAAc,OAC9C0G,EAAenH,UAAUC,IAAI,UAAW,UAAW,WAAY,mBAC/DkH,EAAezG,YAAYwG,GAC3BlB,EAAStF,YAAYyG,GACrBlB,EAAUvF,YAAY+F,EACvB,CAUD,OARAR,EAAUvF,YAAY6F,GAEtBT,EAAQpF,YAAYsF,GACpBF,EAAQpF,YAAYuF,GACpBH,EAAQpF,YAAYwF,GAEpB3K,KAAKyI,YAAYtD,YAAYoF,GAEtBA,CACR,2CAED,WACiD,IAA3CvK,KAAK6I,kBAAkBwB,SAAS9K,OAClCS,KAAK8H,OAAOnL,UAAYqD,KAAKwI,WAAW5D,QAAQiH,SAEhD7L,KAAK8H,OAAOnL,UAAYqD,KAAKwI,WAAW5D,QAAQkH,SAEnD,+BAED,WACE,IAAMhD,EAAYvF,SAAS2B,cAAc,OAIzC,OAHA4D,EAASrE,UAAUC,IAAI,aACvBoE,EAAS1C,MAAMuD,QAAU,OACzB3J,KAAKyI,YAAY2C,cAAcjG,YAAY2D,GACpCA,CACR,8BAED,WAAiB,IAAD,OACdwC,MAAMC,KAAKvL,KAAK8I,SAASuB,UAAUtF,SAAQ,SAACkG,GAC1C,IAAMX,EAAWW,EAAKrG,QAAQqC,SACxB8E,EAAmBC,EAAKnD,kBAAkBhF,cAAvB,6BAA2DyG,EAA3D,OACrByB,GACFA,EAAiBpK,SAEnBsJ,EAAKtJ,QANP,GAQD,M,8EAAA,EAhQkBkG,GCoGvBtE,SAAS5E,iBAAiB,oBAAoB,WAClB4E,SAASjE,iBAAiB,mBAElCyF,SAAQ,SAACkH,GACzB,IAAMxI,EAAQ,IAAIoE,EAAYoE,IA1GV,SAACxI,GACvB6H,MAAMC,KAAK9H,EAAMoF,kBAAkBwB,UAAUtF,SAAQ,SAACmH,GACpDzI,EAAMyF,iBAAiBgD,EAAMtH,QAAQqC,SAAUiF,EAAMtH,QAAQoE,MAAO,YADtE,GADF,CA2GImD,CAAgB1I,GArGU,SAACA,GAC7BA,EAAMkF,MAAMhK,iBAAiB,UAAU,SAACM,GACtCA,EAAMJ,iBACN,IAAMuN,EAAQnN,EAAM4D,OAAOuJ,MAC3Bd,MAAMC,KAAKa,GAAOrH,SAAQ,SAAC7G,GAAD,OAAUuF,EAAM4I,WAAWnO,EAArD,GAHF,GADF,CAsGIoO,CAAsB7I,GA9FK,SAACA,GAC9BA,EAAMqE,OAAOnJ,iBAAiB,SAAS,SAACM,GACtCA,EAAMJ,iBACNyM,MAAMC,KAAK9H,EAAMqF,SAASuB,UAAUtF,SAAQ,SAACkG,GAC3CxH,EAAMgF,YAAYtH,OAAO8J,EAD3B,IAG0C,IAAtCxH,EAAMgF,YAAY4B,SAAS9K,OAC7BkE,EAAM+E,WAAW7L,UAAY8G,EAAM+E,WAAW5D,QAAQiH,SAEtDpI,EAAM+E,WAAW7L,UAAY8G,EAAM+E,WAAW5D,QAAQkH,UAExDrI,EAAM0G,gBAVR,GADF,CA+FIoC,CAAuB9I,GAhFO,SAACA,GACjCA,EAAMiF,SAAS/J,iBAAiB,aAAa,SAACM,GAC5CA,EAAMJ,gBADR,IAIA4E,EAAMiF,SAAS/J,iBAAiB,YAAY,SAACM,GAC3CA,EAAMJ,iBACN4E,EAAMiF,SAASjE,UAAUC,IAAI,cAF/B,IAKAjB,EAAMiF,SAAS/J,iBAAiB,aAAa,WAC3C8E,EAAMiF,SAASjE,UAAU9C,OAAO,cADlC,IAIA8B,EAAMiF,SAAS/J,iBAAiB,QAAQ,SAACM,GACvCA,EAAMJ,iBACN,IAAMuN,EAAQnN,EAAMuN,aAAaJ,MACjCd,MAAMC,KAAKa,GAAOrH,SAAQ,SAAC7G,GAAD,OAAUuF,EAAM4I,WAAWnO,EAArD,GAHF,GAdF,CAiFIuO,CAA0BhJ,GA5DK,SAACA,GAClCA,EAAM4E,WAAW1J,iBAAiB,SAAS,SAACM,GAC1CA,EAAMJ,iBACN,IAAM6N,EAAiBjJ,EAAMgF,YAAYnJ,iBAAiB,wCACpDqN,EAAsBD,EAAenN,OAmC3C,GAlCAmN,EAAe3H,SAAQ,SAACkG,GACtB,IAAI2B,EAAU3B,EAAKpH,cAAc,uBAC7B+I,EACFnJ,EAAMoF,kBAAkB1D,YAAYyH,GAEpCA,EAAUnJ,EAAMoF,kBAAkBhF,cAAxBJ,sCAAAA,OAA4EwH,EAAKrG,QAAQqC,SAAzF,MAEZ,IAAM4F,EAAOD,EAAQ/I,cAAc,QAEnC,GADAgJ,EAAKpI,UAAUC,IAAI,YACfjB,EAAME,QAAQ4B,OAAQ,CACxB,IAAMyD,EAAQiC,EAAKpH,cAAc,sBAAsB1D,MACvDyM,EAAQhI,QAAQoE,MAAQA,EACxB,IAAI8D,EAAcF,EAAQ/I,cAAc,iBACxC,GAAIiJ,EACFA,EAAY3M,MAAQ6I,MACf,CACL,IAAM+D,EAAeH,EAAQ/I,cAAR+I,UAAAA,OAAgCnJ,EAAME,QAAQmG,aAA9C,YAA8DrG,EAAMrG,KAApE,SAAgF+C,MAC/FoJ,EAAgB9F,EAAM+F,mBACtBO,EAAmBzC,EAAkB,eAAD,UAAoB7D,EAAME,QAAQmG,aAAlC,YAAkDrG,EAAME,QAAQ2B,aAAhE,aAAiFiE,EAAjF,YAA0GP,GAC9IgE,EAAgB1F,EAAkB,YAAD,UAAiB7D,EAAME,QAAQmG,aAA/B,YAA+CrG,EAAME,QAAQ2B,aAA7D,aAA8EiE,EAA9E,SAAoGwD,GAC3IH,EAAQzH,YAAY4E,GACpB6C,EAAQzH,YAAY6H,EACrB,CACDH,EAAKlQ,UAALkQ,GAAAA,OAAoB7D,EAApB,aAA8BhC,EAAiBiE,EAAKrG,QAAQqC,UAA5D,IAdF,MAgBE4F,EAAKlQ,UAAYqK,EAAiBiE,EAAKrG,QAAQqC,SAAU,IAE3D4F,EAAKzG,MAAMuD,QAAU,OA3BvB,KA8BKlG,EAAME,QAAQ4B,QAAU9B,EAAMqF,SAASuB,SAAS9K,OAAS,IAC5DkE,EAAMoF,kBAAkBlM,UAAxB8G,gBAAAA,OAAoDA,EAAME,QAAQmG,aAAlE,mBAAyFrG,EAAMrG,KAA/F,oCAGEuP,EAAsB,EAAG,CAE3B,IAAMM,EAAMrR,EAAE6H,EAAMmF,gBAAgB/E,cAAc,2BAC9CoJ,IACFA,EAAIC,KAAK,WAAW,GACpBD,EAAIE,QAAQ,UAEf,CACD1J,EAAMwG,gBACNxG,EAAM2J,4BA/CR,GADF,CA6DIC,CAA2B5J,EAN7B,GAHF,G,uqFCjGAlF,MAAM+O,MAAM,SAGZ,IAAMC,EAAQhP,MAAK,OAAQ,SACrBiP,EAAQjP,MAAK,OAAQ,eACrBkP,EAAQlP,MAAK,OAAQ,eACrBmP,EAASnP,MAAK,OAAQ,gBACtBoP,EAAYpP,MAAK,OAAQ,aAC/BA,MAAMqP,SAAS,CAAC,kBAAmBC,EAAAA,IAAkB,GACzCtP,MAAK,OAAQ,YACnBjC,UAAY,SAAlBwR,IAEMC,EAAAA,SAAAA,GAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,GAAAA,SAAAA,IAAAA,OAAAA,EAAAA,KAAAA,GAAAA,EAAAA,MAAAA,KAAAA,UAAAA,CAYH,OAZGA,EAAAA,EAAAA,CAAAA,CAAAA,IAAAA,SAAAA,MACJ,WACE,OAAO,CACR,sBAED,WACE,MAAO,IACR,2BAED,SAAWC,EAAQC,GAEjBC,QAAQC,MAAMV,EAAMW,UAAUC,WAAYrO,KAAM,CAACgO,EAAQC,GAC1D,OAZGF,CAAmBP,GAczBjP,MAAMqP,SAASG,G,IAGTO,EAAAA,SAAAA,GAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,GAAAA,SAAAA,IAAAA,OAAAA,EAAAA,KAAAA,GAAAA,EAAAA,MAAAA,KAAAA,UAAAA,CAyFH,OAzFGA,EAAAA,EAAAA,CAAAA,CAAAA,IAAAA,WAAAA,MACJ,WAAwC,IAA/BC,EAA8B,uDAAlB,GAAIC,EAAc,uDAAJ,CAAC,GACf,IAAfxO,KAAKyO,QAITzO,KAAK0O,kBAAkBH,EAAWC,GAE9BD,EAAUhP,OAAS,GAErBS,KAAKH,QAAQC,KAAK,kBAAmByO,EAAWC,GACjD,G,+BAIH,WAAiD,IAAD,OAA9BD,EAA8B,uDAAlB,GAAIC,EAAc,uDAAJ,CAAC,EAE3CN,QAAQC,MAAMR,EAAUgB,UAAUP,UAAUQ,SAAU5O,KAAM,CAACwO,IAO7D,IAHA,IAAIK,EAAO,EAAO7O,KAAK8O,SAASC,eAGzBF,EAAQtP,OAAS,GACtBgP,EAAUxR,KAAK8R,EAAQG,OA4BzB,IA1BA,IAAIC,EAAO,SAAPA,EAAQC,EAAMC,GACXD,GAAQA,IAASzN,GAGjByN,EAAKE,QAAQlM,aAGdgM,EAAKE,QAAQC,QAA4C,OAAlCH,EAAKE,QAAQC,OAAOd,YAC7CW,EAAKE,QAAQC,OAAOd,UAAY,IAE9BY,GACFF,EAAKC,EAAKlB,QAXd,EAcIY,EAAW,SAAXA,EAAYM,GAETA,EAAKE,QAAQC,SAIdH,aAAgBvB,EAAUgB,WAC5BO,EAAK7E,SAAStF,QAAQ6J,GAExBM,EAAKN,SAASJ,GAThB,EAWIc,EAAYf,EACPgB,EAAM,EAAGD,EAAU/P,OAAS,EAAGgQ,GAAO,EAAG,CAEhD,GAAIA,GAAO,IACT,MAAM,IAAIC,MAAM,mDA6BlB,IA3BAF,EAAUvK,SAAQ,SAAC0K,GACjB,IAAIP,EAAOvB,EAAU+B,KAAKD,EAAS5M,QAAQ,GACtCqM,IAGDA,EAAKE,UAAYK,EAAS5M,SACN,cAAlB4M,EAASrN,MACX6M,EAAKtB,EAAU+B,KAAKD,EAASE,iBAAiB,IAE9CF,EAASG,WAAW7K,SAAQ,SAAC8K,GAC3B,IAAI3D,EAAQyB,EAAU+B,KAAKG,GAAM,GACjCZ,EAAK/C,GAAO,GACRA,aAAiByB,EAAUgB,WAC7BzC,EAAM7B,SAAStF,SAAQ,SAAS+K,GAC9Bb,EAAKa,GAAY,EADnB,GAJJ,KAS2B,eAAlBL,EAASrN,MAClB6M,EAAKC,EAAKa,OAGdd,EAAKC,GAtBP,IAwBAlP,KAAKqK,SAAStF,QAAQ6J,GAEtBC,GADAS,EAAS,EAAOtP,KAAK8O,SAASC,gBACV1H,QACbwH,EAAQtP,OAAS,GACtBgP,EAAUxR,KAAK8R,EAAQG,MAE1B,CACF,OAzFGV,CAAwBZ,GA8Ff,SAASlR,EAAuB8B,GAC7C,IAAI0R,EAAQ1R,EAAM2R,UAAUC,WAAW,GACnCC,EAAc7R,EAAM8R,QAAQJ,EAAMK,OAAO,GACzCC,EAAWhS,EAAM8R,QAAQJ,EAAMK,MAAQ,GAAG,GACxCE,EAAejS,EAAMU,QAAQgR,EAAMK,MAAQ,EAAG,GAIpD,GAAiB,OAAbC,GAAsBH,EAAYnC,SAAWsC,EAAStC,OACxD1P,EAAMkS,YAAYR,EAAMK,MAAO,SAAS,EAAM,QAC9C/R,EAAMkS,YAAYR,EAAMK,MAAO,SAAS,EAAM,aACzC,GAAqB,OAAjBE,EAAuB,CAChC,IAAME,GAAQ,IAAIlD,GAAQmD,OAAOV,EAAMK,OAAOM,OAAO,MACrDrS,EAAMsS,eAAeH,EAAOlS,MAAMsS,QAAQC,KAFrC,MAILxS,EAAMkS,YAAYR,EAAMK,MAAO,SAAS,EAAM,QAIhD/R,EAAMyS,aAAaf,EAAMK,MAAQ,EAAG9R,MAAMsS,QAAQG,OACnD,CAvBDzS,MAAMqP,SAAS,eAAgBU,GAAiB,GAChDX,EAAUC,SAASU,GAwBnB/P,MAAMqP,SAAS,qBAAqB,SAACtP,GACnCA,EAAM2S,UAAU,WAAWC,WAAW,aAAa,WACjD1U,EAAuB8B,EADzB,IAIAA,EAAMuB,QAAQd,GAAG,gBAAgB,WAC/B,IAAMQ,EAASjB,EAAM6S,YAIR,SAHA7S,EAAMU,QAAQO,EAAS,EAAG,IAIrCjB,EAAM8S,WAAW9S,EAAM6S,YAAc,EAAG,EAN5C,KAUAE,EAAAA,EAAAA,GAAiB/S,IACjBgT,EAAAA,EAAAA,GAA0BhT,IAC1BiT,EAAAA,EAAAA,GAAkBjT,EAjBpB,G,iCCvJA1C,GAAE,WACsBA,EAAE,sBAGV4V,UAAU,CACtBC,SAAU,aACVC,WAAW,GANd,G","sources":["webpack://app/./app/packs/src/decidim/editor.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.4/app/packs/src/decidim/configuration.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.4/app/packs/src/decidim/confirm.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.4/app/packs/src/decidim/direct_uploads/uploader.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.4/app/packs/src/decidim/direct_uploads/upload_utility.js","webpack://app/./app/packs/src/decidim/direct_uploads/upload_modal.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.4/app/packs/src/decidim/direct_uploads/upload_field.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.4/app/packs/src/decidim/editor/linebreak_module.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.4/app/packs/src/decidim/input_tags.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n\nimport lineBreakButtonHandler from \"src/decidim/editor/linebreak_module\";\nimport \"src/decidim/editor/clipboard_override\";\nimport \"src/decidim/vendor/image-resize.min\";\nimport \"src/decidim/vendor/image-upload.min\";\n\nconst quillFormats = [\n    \"bold\",\n    \"italic\",\n    \"link\",\n    \"underline\",\n    \"header\",\n    \"list\",\n    \"alt\",\n    \"break\",\n    \"width\",\n    \"style\",\n    \"code\",\n    \"blockquote\",\n    \"indent\"\n];\n\nexport default function createQuillEditor(container) {\n    const toolbar = $(container).data(\"toolbar\");\n    const disabled = $(container).data(\"disabled\");\n\n    const allowedEmptyContentSelector = \"iframe\";\n    let quillToolbar = [\n        [\"bold\", \"italic\", \"underline\", \"linebreak\"],\n        [{ list: \"ordered\" }, { list: \"bullet\" }],\n        [\"link\", \"clean\"],\n        [\"code\", \"blockquote\"],\n        [{ indent: \"-1\" }, { indent: \"+1\" }]\n    ];\n\n    let addImage = false;\n    let addVideo = false;\n\n    /**\n     * - basic = only basic controls without titles\n     * - content = basic + headings\n     * - full = basic + headings + image + video\n     */\n    if (toolbar === \"content\") {\n        quillToolbar = [[{ header: [2, 3, 4, 5, 6, false] }], ...quillToolbar];\n    } else if (toolbar === \"full\") {\n        addImage = true;\n        addVideo = true;\n        quillToolbar = [\n            [{ header: [2, 3, 4, 5, 6, false] }],\n            ...quillToolbar,\n            [\"video\"],\n            [\"image\"]\n        ];\n    }\n\n    let modules = {\n        linebreak: {},\n        toolbar: {\n            container: quillToolbar,\n            handlers: {\n                linebreak: lineBreakButtonHandler\n            }\n        }\n    };\n\n    const $input = $(container).siblings('input[type=\"hidden\"]');\n    container.innerHTML = $input.val() || \"\";\n    const token = $('meta[name=\"csrf-token\"]').attr(\"content\");\n\n    if (addVideo) {\n        quillFormats.push(\"video\");\n    }\n\n    if (addImage) {\n        // Attempt to allow images only if the image support is enabled at editor support.\n        // see: https://github.com/quilljs/quill/issues/1108\n        quillFormats.push(\"image\");\n\n        modules.imageResize = {\n            modules: [\"Resize\", \"DisplaySize\"]\n        };\n        modules.imageUpload = {\n            url: $(container).data(\"uploadImagesPath\"),\n            method: \"POST\",\n            name: \"image\",\n            withCredentials: false,\n            headers: { \"X-CSRF-Token\": token },\n            callbackOK: (serverResponse, next) => {\n                $(\"div.ql-toolbar\").last().removeClass(\"editor-loading\");\n                next(serverResponse.url);\n            },\n            callbackKO: (serverError) => {\n                $(\"div.ql-toolbar\").last().removeClass(\"editor-loading\");\n                console.log(`Image upload error: ${serverError.message}`);\n            },\n            checkBeforeSend: (file, next) => {\n                $(\"div.ql-toolbar\").last().addClass(\"editor-loading\");\n                next(file);\n            }\n        };\n\n        const text = $(container).data(\"dragAndDropHelpText\");\n        $(container).after(\n            `<p class=\"help-text\" style=\"margin-top:-1.5rem;\">${text}</p>`\n        );\n    }\n    const quill = new Quill(container, {\n        modules: modules,\n        formats: quillFormats,\n        theme: \"snow\"\n    });\n\n    if (addImage === false) {\n        // Firefox natively implements image drop in contenteditable which is why we need to disable that\n        quill.root.addEventListener(\"drop\", (ev) => ev.preventDefault());\n    }\n\n    if (disabled) {\n        quill.disable();\n    }\n\n    quill.on(\"text-change\", () => {\n\n        const text = quill.getText();\n        // Triggers CustomEvent with the cursor position\n        // It is required in input_mentions.js\n        let event = new CustomEvent(\"quill-position\", {\n            detail: quill.getSelection()\n        });\n        container.dispatchEvent(event);\n\n        if (\n            (text === \"\\n\" || text === \"\\n\\n\") &&\n            quill.root.querySelectorAll(allowedEmptyContentSelector).length === 0 && !$input.val().match(/img/)\n        ) {\n            $input.val(\"\");\n        } else {\n            const emptyParagraph = \"<p><br></p>\";\n            const cleanHTML = quill.root.innerHTML.replace(\n                new RegExp(`^${emptyParagraph}|${emptyParagraph}$`, \"g\"),\n                \"\"\n            );\n            $input.val(cleanHTML);\n        }\n    });\n    // After editor is ready, linebreak_module deletes two extraneous new lines\n    quill.emitter.emit(\"editor-ready\");\n\n    return quill;\n}\n","export default class Configuration {\n  constructor() {\n    this.config = {};\n  }\n\n  set(key, value = null) {\n    if (typeof key === \"object\") {\n      this.config = { ...this.config, ...key };\n    } else {\n      this.config[key] = value;\n    }\n  }\n\n  get(key) {\n    return this.config[key];\n  }\n}\n","/**\n * A custom confirm dialog for Decidim based on Foundation reveals.\n *\n * Note that this needs to be loaded before the application JS in order for\n * it to gain control over the confirm events BEFORE rails-ujs is loaded.\n */\n\nimport Rails from \"@rails/ujs\"\n\nlet TEMPLATE_HTML = null;\n\nclass ConfirmDialog {\n  constructor(sourceElement) {\n    this.$modal = $(TEMPLATE_HTML);\n    this.$source = sourceElement;\n    this.$content = $(\".confirm-modal-content\", this.$modal);\n    this.$buttonConfirm = $(\"[data-confirm-ok]\", this.$modal);\n    this.$buttonCancel = $(\"[data-confirm-cancel]\", this.$modal);\n\n    // Avoid duplicate IDs and append the new modal to the body\n    const titleId = `confirm-modal-title-${Math.random().toString(36).substring(7)}`;\n\n    this.$modal.removeAttr(\"id\");\n    $(\"#confirm-modal-title\", this.$modal).attr(\"id\", titleId);\n    this.$modal.attr(\"aria-labelledby\", titleId);\n\n    $(\"body\").append(this.$modal);\n    this.$modal.foundation();\n  }\n\n  confirm(message) {\n    this.$content.html(message);\n\n    this.$buttonConfirm.off(\"click\");\n    this.$buttonCancel.off(\"click\");\n\n    return new Promise((resolve) => {\n      this.$buttonConfirm.on(\"click\", (ev) => {\n        ev.preventDefault();\n\n        this.$modal.foundation(\"close\");\n        resolve(true);\n        this.$source.focus();\n      });\n      this.$buttonCancel.on(\"click\", (ev) => {\n        ev.preventDefault();\n\n        this.$modal.foundation(\"close\");\n        resolve(false);\n        this.$source.focus();\n      });\n\n      this.$modal.foundation(\"open\").on(\"closed.zf.reveal\", () => {\n        this.$modal.remove();\n      });\n    });\n  }\n}\n\n// Override the default confirm dialog by Rails\n// See:\n// https://github.com/rails/rails/blob/fba1064153d8e2f4654df7762a7d3664b93e9fc8/actionview/app/assets/javascripts/rails-ujs/features/confirm.coffee\n//\n// There is apparently a better way coming in Rails 6:\n// https://github.com/rails/rails/commit/e9aa7ecdee0aa7bb4dcfa5046881bde2f1fe21cc#diff-e1aaa45200e9adcbcb8baf1c5375b5d1\n//\n// The old approach is broken according to https://github.com/rails/rails/issues/36686#issuecomment-514213323\n// so for the moment this needs to be executed **before** Rails.start()\nconst allowAction = (ev, element) => {\n  const message = $(element).data(\"confirm\");\n  if (!message) {\n    return true;\n  }\n\n  if (!Rails.fire(element, \"confirm\")) {\n    return false;\n  }\n\n  if (TEMPLATE_HTML === null) {\n    TEMPLATE_HTML = $(\"#confirm-modal\")[0].outerHTML;\n    $(\"#confirm-modal\").remove();\n  }\n\n  const dialog = new ConfirmDialog(\n    $(element)\n  );\n  dialog.confirm(message).then((answer) => {\n    const completed = Rails.fire(element, \"confirm:complete\", [answer]);\n    if (answer && completed) {\n      // Allow the event to propagate normally and re-dispatch it without\n      // the confirm data attribute which the Rails internal method is\n      // checking.\n      $(element).data(\"confirm\", null);\n      $(element).removeAttr(\"data-confirm\");\n\n      // The submit button click events won't do anything if they are\n      // dispatched as is. In these cases, just submit the underlying form.\n      if (ev.type === \"click\" &&\n        (\n          $(element).is('button[type=\"submit\"]') ||\n          $(element).is('input[type=\"submit\"]')\n        )\n      ) {\n        $(element).parents(\"form\").submit();\n      } else {\n        let origEv = ev.originalEvent || ev;\n        let newEv = origEv;\n        if (typeof Event === \"function\") {\n          // Clone the event because otherwise some click events may not\n          // work properly when re-dispatched.\n          newEv = new origEv.constructor(origEv.type, origEv);\n        }\n        ev.target.dispatchEvent(newEv);\n      }\n    }\n  });\n\n  return false;\n};\nconst handleConfirm = (ev, element) => {\n  if (!allowAction(ev, element)) {\n    Rails.stopEverything(ev);\n  }\n};\nconst getMatchingEventTarget = (ev, selector) => {\n  let target = ev.target;\n  while (!(!(target instanceof Element) || Rails.matches(target, selector))) {\n    target = target.parentNode;\n  }\n\n  if (target instanceof Element) {\n    return target;\n  }\n\n  return null;\n};\nconst handleDocumentEvent = (ev, matchSelectors) => {\n  return matchSelectors.some((currentSelector) => {\n    let target = getMatchingEventTarget(ev, currentSelector);\n    if (target === null) {\n      return false;\n    }\n\n    handleConfirm(ev, target);\n    return true;\n  });\n};\n\ndocument.addEventListener(\"click\", (ev) => {\n  return handleDocumentEvent(ev, [\n    Rails.linkClickSelector,\n    Rails.buttonClickSelector,\n    Rails.formInputClickSelector\n  ]);\n});\ndocument.addEventListener(\"change\", (ev) => {\n  return handleDocumentEvent(ev, [Rails.inputChangeSelector]);\n});\ndocument.addEventListener(\"submit\", (ev) => {\n  return handleDocumentEvent(ev, [Rails.formSubmitSelector]);\n});\n\n// This is needed for the confirm dialog to work with Foundation Abide.\n// Abide registers its own submit click listeners since Foundation 5.6.x\n// which will be handled before the document listeners above. This would\n// break the custom confirm functionality when used with Foundation Abide.\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n  $(Rails.formInputClickSelector).on(\"click.confirm\", (ev) => {\n    handleConfirm(ev, getMatchingEventTarget(ev, Rails.formInputClickSelector));\n  });\n});\n","import { DirectUpload } from \"@rails/activestorage\";\n\nexport class Uploader {\n  constructor(modal, uploadItem, options) {\n    this.modal = modal;\n    this.uploadItem = uploadItem;\n    this.progressBar = uploadItem.querySelector(\".progress-bar\");\n    this.validationSent = false;\n    this.fileTooBig = false;\n    if (modal.options.maxFileSize && options.file.size > modal.options.maxFileSize) {\n      this.fileTooBig = true;\n      this.showError([modal.locales.file_size_too_large]);\n    } else {\n      this.upload = new DirectUpload(options.file, options.url, this);\n    }\n  }\n\n  showError(errors) {\n    this.progressBar.classList.add(\"filled\");\n    this.progressBar.innerHTML = this.modal.locales.validation_error;\n    this.uploadItem.dataset.state = \"error\";\n    const errorList = this.uploadItem.querySelector(\".upload-errors\");\n    errors.forEach((error) => {\n      const errorItem = document.createElement(\"li\");\n      errorItem.classList.add(\"form-error\", \"is-visible\");\n      errorItem.innerHTML = error;\n      errorList.appendChild(errorItem);\n    })\n  }\n\n  validate(blobId) {\n    const callback = (data) => {\n      let errors = []\n      for (const [, value] of Object.entries(data)) {\n        errors = errors.concat(value);\n      }\n\n      this.progressBar.style.justifyContent = \"center\";\n      if (errors.length === 0) {\n        this.progressBar.innerHTML = this.modal.locales.uploaded;\n        this.uploadItem.dataset.state = \"validated\";\n      } else {\n        this.showError(errors);\n      }\n      this.progressBar.classList.add(\"filled\");\n    }\n\n    if (!this.validationSent) {\n      let property = this.modal.options.addAttribute;\n      if (this.modal.options.titled) {\n        property = \"file\"\n      }\n      const params = new URLSearchParams({\n        resourceClass: this.modal.options.resourceClass,\n        property: property,\n        blob: blobId,\n        formClass: this.modal.options.formObjectClass\n      });\n\n      fetch(`/upload_validations?${params.toString()}`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"X-CSRF-Token\": $(\"meta[name=csrf-token]\").attr(\"content\")\n        }\n      }).then((response) => response.json()).then((data) => {\n        callback(data);\n      });\n      this.validationSent = true;\n    }\n  }\n\n  directUploadWillStoreFileWithXHR(request) {\n    request.upload.addEventListener(\"progress\", (event) => {\n      const progress = Math.floor(event.loaded / event.total * 100);\n      let width = \"15%\";\n      if (progress > 15) {\n        width = `${progress}%`;\n      }\n      this.progressBar.style.width = width;\n\n      if (progress === 100) {\n        this.progressBar.innerHTML = this.modal.locales.validating;\n        return;\n      }\n      this.progressBar.innerHTML = `${progress}%`;\n    });\n  }\n}\n","export const checkTitles = (parentElement, saveButton) => {\n  let everyItemHasTitle = true;\n\n  Array.from(parentElement.children).forEach((item) => {\n    const title = item.querySelector(\"input[type='text']\").value;\n    const noTitleErrorSpan = item.querySelector(\".no-title-error\");\n    if (!title || title.length === 0) {\n      everyItemHasTitle = false;\n      saveButton.disabled = true;\n      noTitleErrorSpan.classList.add(\"is-visible\");\n      item.appendChild(noTitleErrorSpan);\n    } else {\n      noTitleErrorSpan.classList.remove(\"is-visible\");\n    }\n  });\n\n  if (everyItemHasTitle) {\n    saveButton.disabled = false;\n  }\n}\n\nexport const truncateFilename = (filename, maxLength = 31) => {\n  if (filename.length <= maxLength) {\n    return filename;\n  }\n\n  const charactersFromBegin = Math.floor(maxLength / 2) - 3;\n  const charactersFromEnd = maxLength - charactersFromBegin - 3;\n  return `${filename.slice(0, charactersFromBegin)}...${filename.slice(-charactersFromEnd)}`;\n}\n\nexport const createHiddenInput = (elClasses, elName, elValue) => {\n  const el = document.createElement(\"input\");\n  el.type = \"hidden\";\n  if (elClasses) {\n    if (typeof (elClasses) === \"string\") {\n      el.className = elClasses;\n    } else {\n      el.className = elClasses.join(\" \")\n    }\n  }\n  if (elName) {\n    el.name = elName;\n  }\n  if (elValue) {\n    el.value = elValue;\n  }\n  return el;\n}\n","  import { Uploader } from \"src/decidim/direct_uploads/uploader\";\n  import { truncateFilename, checkTitles, createHiddenInput } from \"src/decidim/direct_uploads/upload_utility\";\n\n  // This class handles logic inside upload modal, but since modal is not inside the form\n  // logic here moves \"upload items\" / hidden inputs to form.\n  export default class UploadModal {\n    constructor(button, options = {}) {\n      // Button that opens the modal.\n      this.button = button;\n\n      // The provided options contains the options passed from the view in the\n      // `data-upload` attribute as a JSON.\n      let providedOptions = {};\n      try {\n        // The providedOptions can contain the following keys:\n        // - addAttribute - Field name / attribute of resource (e.g. avatar)\n        // - resourceName - The resource to which the attribute belongs (e.g. user)\n        // - resourceClass - Ruby class of the resource (e.g. Decidim::User)\n        // - multiple - Defines if multiple files can be uploaded\n        // - titled - Defines if file(s) can have titles\n        // - maxFileSize - Defines maximum file size in bytes\n        // - formObjectClass - Class of the current form object (e.g. Decidim::AccountForm)\n        providedOptions = JSON.parse(button.dataset.upload);\n      } catch (_e) {\n        // Don't care about the parse errors, just skip the provided options.\n      }\n\n      this.options = Object.assign(providedOptions, options)\n\n      this.name = this.button.name;\n      this.modal = document.querySelector(`#${button.dataset.open}`);\n      this.saveButton = this.modal.querySelector(`button.add-file-${this.name}`);\n      this.attachmentCounter = 0;\n      this.dropZoneEnabled = true;\n      this.modalTitle = this.modal.querySelector(\".reveal__title\");\n      this.uploadItems = this.modal.querySelector(\".upload-items\");\n      this.locales = JSON.parse(this.uploadItems.dataset.locales);\n      this.dropZone = this.modal.querySelector(\".dropzone\");\n      this.input = this.dropZone.querySelector(\"input\");\n      this.uploadContainer = document.querySelector(`.upload-container-for-${this.name}`);\n      this.activeAttachments = this.uploadContainer.querySelector(\".active-uploads\");\n      this.trashCan = this.createTrashCan();\n    }\n\n    uploadFile(file) {\n      if (!this.dropZoneEnabled) {\n        return;\n      }\n\n      const title = file.name.split(\".\")[0].slice(0, 31);\n      const uploadItem = this.createUploadItem(file.name, title, \"init\");\n      const uploader = new Uploader(this, uploadItem, {\n        file: file,\n        url: this.input.dataset.directUploadUrl,\n        attachmentName: file.name\n      });\n      if (uploader.fileTooBig) {\n        return;\n      }\n\n      uploader.upload.create((error, blob) => {\n        if (error) {\n          uploadItem.dataset.state = \"error\";\n          const progressBar = uploadItem.querySelector(\".progress-bar\");\n          progressBar.classList.add(\"filled\");\n          progressBar.innerHTML = this.locales.error;\n          console.error(error);\n        } else {\n          const ordinalNumber = this.getOrdinalNumber();\n\n          const attachmentDetails = document.createElement(\"div\");\n          attachmentDetails.classList.add(\"attachment-details\");\n          attachmentDetails.dataset.filename = file.name;\n          const titleAndFileNameSpan = document.createElement(\"span\");\n          titleAndFileNameSpan.style.display = \"none\";\n          attachmentDetails.appendChild(titleAndFileNameSpan);\n\n          const hiddenBlobField = createHiddenInput(null, null, blob.signed_id);\n          if (this.options.titled) {\n            hiddenBlobField.name = `${this.options.resourceName}[${this.options.addAttribute}][${ordinalNumber}][file]`;\n          } else {\n            hiddenBlobField.name = `${this.options.resourceName}[${this.options.addAttribute}]`;\n          }\n\n          if (this.options.titled) {\n            const hiddenTitleField = createHiddenInput(\"hidden-title\", `${this.options.resourceName}[${this.options.addAttribute}][${ordinalNumber}][title]`, title);\n            titleAndFileNameSpan.innerHTML = `${title} (${file.name})`;\n            attachmentDetails.appendChild(hiddenTitleField);\n          } else {\n            titleAndFileNameSpan.innerHTML = file.name;\n          }\n\n          if (!this.options.multiple) {\n            this.cleanTrashCan();\n          }\n\n          attachmentDetails.appendChild(hiddenBlobField);\n          uploadItem.appendChild(attachmentDetails);\n          uploader.validate(blob.signed_id);\n        }\n      });\n      this.updateDropZone();\n    }\n\n    getOrdinalNumber() {\n      const nextOrdinalNumber = this.attachmentCounter;\n      this.attachmentCounter += 1;\n      return nextOrdinalNumber;\n    }\n\n    updateDropZone() {\n      if (this.options.multiple) {\n        return;\n      }\n\n      if (this.uploadItems.children.length > 0) {\n        this.dropZone.classList.add(\"disabled\");\n        this.dropZoneEnabled = false;\n        this.input.disabled = true;\n      } else {\n        this.dropZone.classList.remove(\"disabled\");\n        this.dropZoneEnabled = true;\n        this.input.disabled = false;\n      }\n    }\n\n    createUploadItem(fileName, title, state) {\n      const wrapper = document.createElement(\"div\");\n      wrapper.classList.add(\"upload-item\");\n      wrapper.setAttribute(\"data-filename\", fileName);\n\n      const firstRow = document.createElement(\"div\");\n      const secondRow = document.createElement(\"div\");\n      const thirdRow = document.createElement(\"div\");\n      firstRow.classList.add(\"row\", \"upload-item-first-row\");\n      secondRow.classList.add(\"row\", \"upload-item-second-row\");\n      thirdRow.classList.add(\"row\", \"upload-item-third-row\");\n\n      const fileNameSpan = document.createElement(\"span\");\n      let fileNameSpanClasses = [\"columns\", \"file-name-span\"];\n      if (this.options.titled) {\n        fileNameSpanClasses.push(\"small-4\", \"medium-5\");\n      } else {\n        fileNameSpanClasses.push(\"small-12\");\n      }\n      fileNameSpan.classList.add(...fileNameSpanClasses);\n      fileNameSpan.innerHTML = truncateFilename(fileName);\n\n      const progressBar = document.createElement(\"div\");\n      progressBar.classList.add(\"progress-bar\");\n      if (state) {\n        if (state === \"validated\") {\n          progressBar.innerHTML = this.locales.uploaded;\n        } else {\n          progressBar.innerHTML = \"0%\";\n          progressBar.style.width = \"15%\";\n        }\n        wrapper.dataset.state = state;\n      }\n\n      const progressBarBorder = document.createElement(\"div\");\n      progressBarBorder.classList.add(\"progress-bar-border\");\n      progressBarBorder.appendChild(progressBar);\n\n      const progressBarWrapper = document.createElement(\"div\");\n      progressBarWrapper.classList.add(\"columns\", \"progress-bar-wrapper\");\n      progressBarWrapper.appendChild(progressBarBorder);\n      if (this.options.titled) {\n        progressBarWrapper.classList.add(\"small-4\", \"medium-5\");\n      } else {\n        progressBarWrapper.classList.add(\"small-10\");\n      }\n\n      const errorList = document.createElement(\"ul\");\n      errorList.classList.add(\"upload-errors\");\n\n      const removeButton = document.createElement(\"button\");\n      removeButton.classList.add(\"columns\", \"small-3\", \"medium-2\", \"remove-upload-item\");\n      removeButton.innerHTML = `&times; ${this.locales.remove}`;\n      removeButton.addEventListener((\"click\"), (event) => {\n        event.preventDefault();\n        const item = this.uploadItems.querySelector(`[data-filename=\"${fileName}\"]`);\n        this.trashCan.append(item);\n        this.updateDropZone();\n      })\n\n      const titleAndFileNameSpan = document.createElement(\"span\");\n      titleAndFileNameSpan.classList.add(\"columns\", \"small-5\", \"title-and-filename-span\");\n      titleAndFileNameSpan.innerHTML = `${title} (${truncateFilename(fileName)})`;\n\n      firstRow.appendChild(fileNameSpan);\n      secondRow.appendChild(progressBarWrapper);\n      thirdRow.appendChild(errorList);\n\n      let titleInputContainer = null;\n      if (this.options.titled) {\n        const titleInput = document.createElement(\"input\");\n        titleInput.classList.add(\"attachment-title\");\n        titleInput.type = \"text\";\n        titleInput.value = title;\n        titleInput.addEventListener(\"input\", (event) => {\n          event.preventDefault();\n          checkTitles(this.uploadItems, this.saveButton);\n        })\n        titleInputContainer = document.createElement(\"div\");\n        titleInputContainer.classList.add(\"columns\", \"small-5\", \"title-input-container\");\n        titleInputContainer.appendChild(titleInput);\n\n        const noTitleErrorSpan = document.createElement(\"span\");\n        noTitleErrorSpan.classList.add(\"form-error\", \"no-title-error\");\n        noTitleErrorSpan.role = \"alert\";\n        noTitleErrorSpan.innerHTML = this.locales.title_required;\n        titleInputContainer.appendChild(noTitleErrorSpan);\n\n        const titleLabelSpan = document.createElement(\"span\");\n        titleLabelSpan.classList.add(\"title-label-span\");\n        titleLabelSpan.innerHTML = this.locales.title;\n\n        const titleContainer = document.createElement(\"div\");\n        titleContainer.classList.add(\"columns\", \"small-8\", \"medium-7\", \"title-container\");\n        titleContainer.appendChild(titleLabelSpan);\n        firstRow.appendChild(titleContainer);\n        secondRow.appendChild(titleInputContainer);\n      }\n\n      secondRow.appendChild(removeButton);\n\n      wrapper.appendChild(firstRow);\n      wrapper.appendChild(secondRow);\n      wrapper.appendChild(thirdRow);\n\n      this.uploadItems.appendChild(wrapper);\n\n      return wrapper;\n    }\n\n    updateAddAttachmentsButton() {\n      if (this.activeAttachments.children.length === 0) {\n        this.button.innerHTML = this.modalTitle.dataset.addlabel;\n      } else {\n        this.button.innerHTML = this.modalTitle.dataset.editlabel;\n      }\n    }\n\n    createTrashCan() {\n      const trashCan =  document.createElement(\"div\");\n      trashCan.classList.add(\"trash-can\");\n      trashCan.style.display = \"none\";\n      this.uploadItems.parentElement.appendChild(trashCan);\n      return trashCan;\n    }\n\n    cleanTrashCan() {\n      Array.from(this.trashCan.children).forEach((item) => {\n        const fileName = item.dataset.filename;\n        const activeAttachment = this.activeAttachments.querySelector(`div[data-filename=\"${fileName}\"]`);\n        if (activeAttachment) {\n          activeAttachment.remove();\n        }\n        item.remove();\n      })\n    }\n  }\n","import UploadModal from \"src/decidim/direct_uploads/upload_modal\";\nimport { truncateFilename, createHiddenInput } from \"src/decidim/direct_uploads/upload_utility\";\n\nconst loadAttachments = (modal) => {\n  Array.from(modal.activeAttachments.children).forEach((child) => {\n    modal.createUploadItem(child.dataset.filename, child.dataset.title, \"validated\");\n  })\n}\n\nconst addInputEventListener = (modal) => {\n  modal.input.addEventListener(\"change\", (event) => {\n    event.preventDefault();\n    const files = event.target.files;\n    Array.from(files).forEach((file) => modal.uploadFile(file));\n  })\n}\n\nconst addButtonEventListener = (modal) => {\n  modal.button.addEventListener(\"click\", (event) => {\n    event.preventDefault();\n    Array.from(modal.trashCan.children).forEach((item) => {\n      modal.uploadItems.append(item);\n    })\n    if (modal.uploadItems.children.length === 0) {\n      modal.modalTitle.innerHTML = modal.modalTitle.dataset.addlabel;\n    } else {\n      modal.modalTitle.innerHTML = modal.modalTitle.dataset.editlabel;\n    }\n    modal.updateDropZone();\n  })\n}\n\nconst addDropZoneEventListeners = (modal) => {\n  modal.dropZone.addEventListener(\"dragenter\", (event) => {\n    event.preventDefault();\n  })\n\n  modal.dropZone.addEventListener(\"dragover\", (event) => {\n    event.preventDefault();\n    modal.dropZone.classList.add(\"is-dragover\");\n  })\n\n  modal.dropZone.addEventListener(\"dragleave\", () => {\n    modal.dropZone.classList.remove(\"is-dragover\");\n  })\n\n  modal.dropZone.addEventListener(\"drop\", (event) => {\n    event.preventDefault();\n    const files = event.dataTransfer.files;\n    Array.from(files).forEach((file) => modal.uploadFile(file));\n  })\n}\n\nconst addSaveButtonEventListener = (modal) => {\n  modal.saveButton.addEventListener(\"click\", (event) => {\n    event.preventDefault();\n    const validatedItems = modal.uploadItems.querySelectorAll(\".upload-item[data-state='validated']\")\n    const validatedItemsCount = validatedItems.length;\n    validatedItems.forEach((item) => {\n      let details = item.querySelector(\".attachment-details\");\n      if (details) {\n        modal.activeAttachments.appendChild(details);\n      } else {\n        details = modal.activeAttachments.querySelector(`.attachment-details[data-filename='${item.dataset.filename}'`);\n      }\n      const span = details.querySelector(\"span\");\n      span.classList.add(\"filename\");\n      if (modal.options.titled) {\n        const title = item.querySelector(\"input[type='text']\").value;\n        details.dataset.title = title;\n        let hiddenTitle = details.querySelector(\".hidden-title\")\n        if (hiddenTitle) {\n          hiddenTitle.value = title;\n        } else {\n          const attachmentId = details.querySelector(`[name='${modal.options.resourceName}[${modal.name}][]'`).value\n          const ordinalNumber = modal.getOrdinalNumber()\n          const hiddenTitleField = createHiddenInput(\"hidden-title\", `${modal.options.resourceName}[${modal.options.addAttribute}][${ordinalNumber}][title]`, title)\n          const hiddenIdField = createHiddenInput(\"hidden-id\", `${modal.options.resourceName}[${modal.options.addAttribute}][${ordinalNumber}][id]`, attachmentId)\n          details.appendChild(hiddenTitleField);\n          details.appendChild(hiddenIdField);\n        }\n        span.innerHTML = `${title} (${truncateFilename(item.dataset.filename)})`;\n      } else {\n        span.innerHTML = truncateFilename(item.dataset.filename, 19);\n      }\n      span.style.display = \"block\";\n    });\n\n    if (!modal.options.titled && modal.trashCan.children.length > 0) {\n      modal.activeAttachments.innerHTML = `<input name='${modal.options.resourceName}[remove_${modal.name}]' type=\"hidden\" value=\"true\">`;\n    }\n\n    if (validatedItemsCount > 0) {\n      // Foundation helper does some magic with error fields, so these must be triggered using jQuery.\n      const $el = $(modal.uploadContainer.querySelector(\"input[type='checkbox']\"));\n      if ($el) {\n        $el.prop(\"checked\", true);\n        $el.trigger(\"change\");\n      }\n    }\n    modal.cleanTrashCan();\n    modal.updateAddAttachmentsButton();\n  });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const attachmentButtons = document.querySelectorAll(\"button.add-file\");\n\n  attachmentButtons.forEach((attachmentButton) => {\n    const modal = new UploadModal(attachmentButton);\n    loadAttachments(modal);\n    addInputEventListener(modal);\n    addButtonEventListener(modal);\n    addDropZoneEventListeners(modal);\n    addSaveButtonEventListener(modal);\n  })\n})\n","/* eslint-disable require-jsdoc */\n\nimport addEnterBindings from \"src/decidim/editor/modified_enter\"\nimport backspaceBindingsRangeAny from \"src/decidim/editor/modified_backspace_offset_any\"\nimport backspaceBindings from \"src/decidim/editor/modified_backspace_offset1\"\nimport HistoryOverride from \"src/decidim/editor/history_override\"\n\n// Disable warning messages from overwritting modules\nQuill.debug(\"error\");\n\n// It all started with these snippets of code: https://github.com/quilljs/quill/issues/252\nconst Delta = Quill.import(\"delta\");\nconst Break = Quill.import(\"blots/break\");\nconst Embed = Quill.import(\"blots/embed\");\nconst Scroll = Quill.import(\"blots/scroll\");\nconst Parchment = Quill.import(\"parchment\");\nQuill.register({\"modules/history\": HistoryOverride}, true);\nlet icons = Quill.import(\"ui/icons\");\nicons.linebreak = \"⏎\";\n\nclass SmartBreak extends Break {\n  length() {\n    return 1;\n  }\n\n  value() {\n    return \"\\n\";\n  }\n\n  insertInto(parent, ref) {\n    // Embed.prototype.insertInto.call(this, parent, ref);\n    Reflect.apply(Embed.prototype.insertInto, this, [parent, ref]);\n  }\n}\nQuill.register(SmartBreak);\n\n// Override quill/blots/scroll.js\nclass ScrollOvderride extends Scroll {\n  optimize(mutations = [], context = {}) {\n    if (this.batch === true) {\n      return;\n    }\n\n    this.parchmentOptimize(mutations, context);\n\n    if (mutations.length > 0) {\n      // quill/core/emitter.js, Emitter.events.SCROLL_OPTIMIZE = \"scroll-optimize\"\n      this.emitter.emit(\"scroll-optimize\", mutations, context);\n    }\n  }\n\n  // Override parchment/src/blot/scroll.ts\n  parchmentOptimize(mutations = [], context = {}) {\n    // super.optimize(context);\n    Reflect.apply(Parchment.Container.prototype.optimize, this, [context]);\n\n    // We must modify mutations directly, cannot make copy and then modify\n    // let records = [].slice.call(this.observer.takeRecords());\n    let records = [...this.observer.takeRecords()];\n    // Array.push currently seems to be implemented by a non-tail recursive function\n    // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n    while (records.length > 0) {\n      mutations.push(records.pop());\n    }\n    let mark = (blot, markParent) => {\n      if (!blot || blot === this) {\n        return;\n      }\n      if (!blot.domNode.parentNode) {\n        return;\n      }\n      if (blot.domNode.__blot && blot.domNode.__blot.mutations === null) {\n        blot.domNode.__blot.mutations = [];\n      }\n      if (markParent) {\n        mark(blot.parent);\n      }\n    };\n    let optimize = (blot) => {\n      // Post-order traversal\n      if (!blot.domNode.__blot) {\n        return;\n      }\n\n      if (blot instanceof Parchment.Container) {\n        blot.children.forEach(optimize);\n      }\n      blot.optimize(context);\n    };\n    let remaining = mutations;\n    for (let ind = 0; remaining.length > 0; ind += 1) {\n      // MAX_OPTIMIZE_ITERATIONS = 100\n      if (ind >= 100) {\n        throw new Error(\"[Parchment] Maximum optimize iterations reached\");\n      }\n      remaining.forEach((mutation) => {\n        let blot = Parchment.find(mutation.target, true);\n        if (!blot) {\n          return;\n        }\n        if (blot.domNode === mutation.target) {\n          if (mutation.type === \"childList\") {\n            mark(Parchment.find(mutation.previousSibling, false));\n\n            mutation.addedNodes.forEach((node) => {\n              let child = Parchment.find(node, false);\n              mark(child, false);\n              if (child instanceof Parchment.Container) {\n                child.children.forEach(function(grandChild) {\n                  mark(grandChild, false);\n                });\n              }\n            });\n          } else if (mutation.type === \"attributes\") {\n            mark(blot.prev);\n          }\n        }\n        mark(blot);\n      });\n      this.children.forEach(optimize);\n      remaining = [...this.observer.takeRecords()];\n      records = remaining.slice();\n      while (records.length > 0) {\n        mutations.push(records.pop());\n      }\n    }\n  }\n};\nQuill.register(\"blots/scroll\", ScrollOvderride, true);\nParchment.register(ScrollOvderride);\n\nexport default function lineBreakButtonHandler(quill) {\n  let range = quill.selection.getRange()[0];\n  let currentLeaf = quill.getLeaf(range.index)[0];\n  let nextLeaf = quill.getLeaf(range.index + 1)[0];\n  const previousChar = quill.getText(range.index - 1, 1);\n\n  // Insert a second break if:\n  // At the end of the editor, OR next leaf has a different parent (<p>)\n  if (nextLeaf === null || (currentLeaf.parent !== nextLeaf.parent)) {\n    quill.insertEmbed(range.index, \"break\", true, \"user\");\n    quill.insertEmbed(range.index, \"break\", true, \"user\");\n  } else if (previousChar === \"\\n\") {\n    const delta = new Delta().retain(range.index).insert(\"\\n\");\n    quill.updateContents(delta, Quill.sources.USER);\n  } else {\n    quill.insertEmbed(range.index, \"break\", true, \"user\");\n  }\n\n  // Now that we've inserted a line break, move the cursor forward\n  quill.setSelection(range.index + 1, Quill.sources.SILENT);\n}\n\nQuill.register(\"modules/linebreak\", (quill) => {\n  quill.getModule(\"toolbar\").addHandler(\"linebreak\", () => {\n    lineBreakButtonHandler(quill);\n  });\n\n  quill.emitter.on(\"editor-ready\", () => {\n    const length = quill.getLength();\n    const text = quill.getText(length - 2, 2);\n\n    // Remove extraneous new lines\n    if (text === \"\\n\\n\") {\n      quill.deleteText(quill.getLength() - 2, 2);\n    }\n  });\n\n  addEnterBindings(quill);\n  backspaceBindingsRangeAny(quill);\n  backspaceBindings(quill);\n\n  return;\n});\n\n","import \"bootstrap-tagsinput\"\n\n$(() => {\n  const $tagContainer = $(\".js-tags-container\");\n\n  // Initialize\n  $tagContainer.tagsinput({\n    tagClass: \"input__tag\",\n    trimValue: true\n  });\n\n});\n"],"names":["quillFormats","createQuillEditor","container","toolbar","$","data","disabled","quillToolbar","list","indent","addImage","addVideo","header","modules","linebreak","handlers","lineBreakButtonHandler","$input","siblings","innerHTML","val","token","attr","push","imageResize","imageUpload","url","method","name","withCredentials","headers","callbackOK","serverResponse","next","last","removeClass","callbackKO","serverError","console","log","message","checkBeforeSend","file","addClass","text","after","quill","Quill","formats","theme","root","addEventListener","ev","preventDefault","disable","on","getText","event","CustomEvent","detail","getSelection","dispatchEvent","querySelectorAll","length","match","emptyParagraph","cleanHTML","replace","RegExp","emitter","emit","Configuration","this","config","key","value","_typeof","TEMPLATE_HTML","ConfirmDialog","sourceElement","$modal","$source","$content","$buttonConfirm","$buttonCancel","titleId","Math","random","toString","substring","removeAttr","append","foundation","html","off","Promise","resolve","_this","focus","remove","handleConfirm","element","Rails","outerHTML","confirm","then","answer","completed","type","is","parents","submit","origEv","originalEvent","newEv","Event","constructor","target","allowAction","getMatchingEventTarget","selector","Element","parentNode","handleDocumentEvent","matchSelectors","some","currentSelector","document","Uploader","modal","uploadItem","options","progressBar","querySelector","validationSent","fileTooBig","maxFileSize","size","showError","locales","file_size_too_large","upload","DirectUpload","_createClass","errors","classList","add","validation_error","dataset","state","errorList","forEach","error","errorItem","createElement","appendChild","blobId","property","addAttribute","titled","params","URLSearchParams","resourceClass","blob","formClass","formObjectClass","fetch","response","json","Object","entries","concat","style","justifyContent","uploaded","callback","request","progress","floor","loaded","total","width","_this2","validating","truncateFilename","filename","maxLength","charactersFromBegin","charactersFromEnd","slice","createHiddenInput","elClasses","elName","elValue","el","className","join","UploadModal","button","providedOptions","JSON","parse","_e","assign","open","saveButton","attachmentCounter","dropZoneEnabled","modalTitle","uploadItems","dropZone","input","uploadContainer","activeAttachments","trashCan","createTrashCan","title","split","createUploadItem","uploader","directUploadUrl","attachmentName","create","ordinalNumber","getOrdinalNumber","attachmentDetails","titleAndFileNameSpan","display","hiddenBlobField","signed_id","resourceName","hiddenTitleField","multiple","cleanTrashCan","validate","updateDropZone","nextOrdinalNumber","children","fileName","wrapper","setAttribute","firstRow","secondRow","thirdRow","fileNameSpan","fileNameSpanClasses","progressBarBorder","progressBarWrapper","removeButton","item","titleInputContainer","titleInput","parentElement","everyItemHasTitle","Array","from","noTitleErrorSpan","role","title_required","titleLabelSpan","titleContainer","addlabel","editlabel","activeAttachment","_this3","attachmentButton","child","loadAttachments","files","uploadFile","addInputEventListener","addButtonEventListener","dataTransfer","addDropZoneEventListeners","validatedItems","validatedItemsCount","details","span","hiddenTitle","attachmentId","hiddenIdField","$el","prop","trigger","updateAddAttachmentsButton","addSaveButtonEventListener","debug","Delta","Break","Embed","Scroll","Parchment","register","HistoryOverride","icons","SmartBreak","parent","ref","Reflect","apply","prototype","insertInto","ScrollOvderride","mutations","context","batch","parchmentOptimize","Container","optimize","records","observer","takeRecords","pop","mark","blot","markParent","domNode","__blot","remaining","ind","Error","mutation","find","previousSibling","addedNodes","node","grandChild","prev","range","selection","getRange","currentLeaf","getLeaf","index","nextLeaf","previousChar","insertEmbed","delta","retain","insert","updateContents","sources","USER","setSelection","SILENT","getModule","addHandler","getLength","deleteText","addEnterBindings","backspaceBindingsRangeAny","backspaceBindings","tagsinput","tagClass","trimValue"],"sourceRoot":""}