{"version":3,"file":"js/7546-f8fac43525bdfcafcd15.js","mappings":"y6BAOA,IAAMA,EAAe,CACnB,OACA,SACA,OACA,YACA,SACA,OACA,MACA,QACA,QACA,QACA,OACA,aACA,SACA,UAGa,SAASC,EAAkBC,GACxC,IAAMC,EAAUC,EAAEF,GAAWG,KAAK,WAC5BC,EAAWF,EAAEF,GAAWG,KAAK,YAG/BE,EAAe,CACjB,CAAC,OAAQ,SAAU,aACnB,CAAC,CAAEC,KAAM,WAAa,CAAEA,KAAM,WAC9B,CAAC,OAAQ,SACT,CAAC,OAAQ,cACT,CAAC,CAAE,OAAU,OAAQ,CAAE,OAAU,UACjC,CAAC,CAAEC,OAAQ,MAAQ,CAAEA,OAAQ,QAG3BC,GAAW,EACXC,GAAW,EAOC,YAAZR,EACFI,EAAY,CAAI,CAAC,CAAEK,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,GAAG,MAASC,OAAAC,EAAKP,IACpC,SAAZJ,IACTO,GAAW,EACXC,GAAW,EACXJ,EAAY,CACV,CAAC,CAAEK,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,GAAG,MAASC,OAAAC,EACjCP,GAAY,CACf,CAAC,SACD,CAAC,YAIL,IAAIQ,EAAU,CACZZ,QAAS,CACPD,UAAWK,EACXS,SAAU,CACRC,UAAWC,EAAAA,KAIXC,EAASf,EAAEF,GAAWkB,SAAS,wBACrClB,EAAUmB,UAAYF,EAAOG,OAAS,GACtC,IAAMC,EAAQnB,EAAE,2BAA2BoB,KAAK,WAMhD,GAJIb,GACFX,EAAayB,KAAK,SAGhBf,EAAU,CAGZV,EAAayB,KAAK,SAElBV,EAAQW,YAAc,CACpBX,QAAS,CAAC,SAAU,gBAEtBA,EAAQY,YAAc,CACpBC,IAAKxB,EAAEF,GAAWG,KAAK,oBACvBwB,OAAQ,OACRC,KAAM,QACNC,iBAAiB,EACjBC,QAAS,CAAE,eAAgBT,GAC3BU,WAAY,SAACC,EAAgBC,GAC3B/B,EAAE,kBAAkBgC,OAAOC,YAAY,kBACvCF,EAAKD,EAAeN,IACtB,EACAU,WAAY,SAACC,GACXnC,EAAE,kBAAkBgC,OAAOC,YAAY,kBACvCG,QAAQC,IAAI,uBAAD5B,OAAwB0B,EAAYG,SACjD,EACAC,gBAAiB,SAACC,EAAMT,GACtB/B,EAAE,kBAAkBgC,OAAOS,SAAS,kBACpCV,EAAKS,EACP,GAGF,IAAME,EAAO1C,EAAEF,GAAWG,KAAK,uBAC/BD,EAAEF,GAAW6C,MAAM,oDAADlC,OACoCiC,EAAI,QAE5D,CACA,IAAME,EAAQ,IAAIC,MAAM/C,EAAW,CACjCa,QAASA,EACTmC,QAASlD,EACTmD,MAAO,SAuCT,OApCiB,IAAbzC,GAEFsC,EAAMI,KAAKC,iBAAiB,QAAQ,SAACC,GAAE,OAAKA,EAAGC,gBAAgB,IAG7DjD,GACF0C,EAAMQ,UAGRR,EAAMS,GAAG,eAAe,WACtB,IAAMX,EAAOE,EAAMU,UAIfC,EAAQ,IAAIC,YAAY,iBAAkB,CAC5CC,OAAQb,EAAMc,iBAIhB,GAFA5D,EAAU6D,cAAcJ,GAGZ,OAATb,GAA0B,SAATA,GACkD,IAApEE,EAAMI,KAAKY,iBA3GqB,UA2GyBC,OAGpD,CACL,IAAMC,EAAiB,cACjBC,EAAYnB,EAAMI,KAAK/B,UAAU+C,QACrC,IAAIC,OAAO,IAADxD,OAAKqD,EAAc,KAAArD,OAAIqD,EAAc,KAAK,KACpD,IAEF/C,EAAOG,IAAI6C,EACb,MAREhD,EAAOG,IAAI,GASf,IAEA0B,EAAMsB,QAAQC,KAAK,gBAEZvB,CACT,C,48CCvJqBwB,EAAa,WAChC,SAAAA,K,4FAAcC,CAAA,KAAAD,GACZE,KAAKC,OAAS,CAAC,CACjB,C,UAYC,O,EAZAH,E,EAAA,EAAAI,IAAA,MAAAC,MAED,SAAID,GAAoB,IAAfC,EAAKC,UAAAb,OAAA,QAAAc,IAAAD,UAAA,GAAAA,UAAA,GAAG,KACI,WAAfE,EAAOJ,GACTF,KAAKC,OAAMM,EAAAA,EAAA,GAAQP,KAAKC,QAAWC,GAEnCF,KAAKC,OAAOC,GAAOC,CAEvB,GAAC,CAAAD,IAAA,MAAAC,MAED,SAAID,GACF,OAAOF,KAAKC,OAAOC,EACrB,I,iFAACJ,CAAA,CAf+B,E,6vBCSlC,IAAIU,EAAgB,KAEdC,EAAa,WACjB,SAAAA,EAAYC,I,4FAAeX,CAAA,KAAAU,GACzBT,KAAKW,OAASjF,EAAE8E,GAChBR,KAAKY,QAAUF,EACfV,KAAKa,SAAWnF,EAAE,yBAA0BsE,KAAKW,QACjDX,KAAKc,eAAiBpF,EAAE,oBAAqBsE,KAAKW,QAClDX,KAAKe,cAAgBrF,EAAE,wBAAyBsE,KAAKW,QAGrD,IAAMK,EAAO,uBAAA7E,OAA0B8E,KAAKC,SAASC,SAAS,IAAIC,UAAU,IAE5EpB,KAAKW,OAAOU,WAAW,MACvB3F,EAAE,uBAAwBsE,KAAKW,QAAQ7D,KAAK,KAAMkE,GAClDhB,KAAKW,OAAO7D,KAAK,kBAAmBkE,GAEpCtF,EAAE,QAAQ4F,OAAOtB,KAAKW,QACtBX,KAAKW,OAAOY,YACd,C,UA4BC,O,EA5BAd,G,EAAA,EAAAP,IAAA,UAAAC,MAED,SAAQnC,GAAU,IAADwD,EAAA,KAMf,OALAxB,KAAKa,SAASY,KAAKzD,GAEnBgC,KAAKc,eAAeY,IAAI,SACxB1B,KAAKe,cAAcW,IAAI,SAEhB,IAAIC,SAAQ,SAACC,GAClBJ,EAAKV,eAAe/B,GAAG,SAAS,SAACH,GAC/BA,EAAGC,iBAEH2C,EAAKb,OAAOY,WAAW,SACvBK,GAAQ,GACRJ,EAAKZ,QAAQiB,OACf,IACAL,EAAKT,cAAchC,GAAG,SAAS,SAACH,GAC9BA,EAAGC,iBAEH2C,EAAKb,OAAOY,WAAW,SACvBK,GAAQ,GACRJ,EAAKZ,QAAQiB,OACf,IAEAL,EAAKb,OAAOY,WAAW,QAAQxC,GAAG,oBAAoB,WACpDyC,EAAKb,OAAOmB,QACd,GACF,GACF,M,8EAACrB,CAAA,CA7CgB,GA4GbsB,EAAgB,SAACnD,EAAIoD,IAnDP,SAACpD,EAAIoD,GACvB,IAAMhE,EAAUtC,EAAEsG,GAASrG,KAAK,WAChC,OAAKqC,KAIAiE,IAAAA,KAAWD,EAAS,aAIH,OAAlBxB,IACFA,EAAgB9E,EAAE,kBAAkB,GAAGwG,UACvCxG,EAAE,kBAAkBoG,UAGP,IAAIrB,EACjB/E,EAAEsG,IAEGG,QAAQnE,GAASoE,MAAK,SAACC,GAC5B,IAAMC,EAAYL,IAAAA,KAAWD,EAAS,mBAAoB,CAACK,IAC3D,GAAIA,GAAUC,EASZ,GALA5G,EAAEsG,GAASrG,KAAK,UAAW,MAC3BD,EAAEsG,GAASX,WAAW,gBAIN,UAAZzC,EAAG2D,OAEH7G,EAAEsG,GAASQ,GAAG,0BACd9G,EAAEsG,GAASQ,GAAG,yBAGhB9G,EAAEsG,GAASS,QAAQ,QAAQC,aACtB,CACL,IAAIC,EAAS/D,EAAGgE,eAAiBhE,EAC7BiE,EAAQF,EACS,oBAAVG,QAGTD,EAAQ,IAAIF,EAAOI,YAAYJ,EAAOJ,KAAMI,IAE9C/D,EAAGoE,OAAO3D,cAAcwD,EAC1B,CAEJ,KAEO,EACT,EAEOI,CAAYrE,EAAIoD,IACnBC,IAAAA,eAAqBrD,EAEzB,EACMsE,EAAyB,SAACtE,EAAIuE,GAElC,IADA,IAAIH,EAASpE,EAAGoE,OACLA,aAAkBI,UAAYnB,IAAAA,QAAce,EAAQG,IAC7DH,EAASA,EAAOK,WAGlB,OAAIL,aAAkBI,QACbJ,EAGF,IACT,EACMM,EAAsB,SAAC1E,EAAI2E,GAC/B,OAAOA,EAAeC,MAAK,SAACC,GAC1B,IAAIT,EAASE,EAAuBtE,EAAI6E,GACxC,OAAe,OAAXT,IAIJjB,EAAcnD,EAAIoE,IACX,EACT,GACF,EAEAU,SAAS/E,iBAAiB,SAAS,SAACC,GAClC,OAAO0E,EAAoB1E,EAAI,CAC7BqD,IAAAA,kBACAA,IAAAA,oBACAA,IAAAA,wBAEJ,IACAyB,SAAS/E,iBAAiB,UAAU,SAACC,GACnC,OAAO0E,EAAoB1E,EAAI,CAACqD,IAAAA,qBAClC,IACAyB,SAAS/E,iBAAiB,UAAU,SAACC,GACnC,OAAO0E,EAAoB1E,EAAI,CAACqD,IAAAA,oBAClC,IAMAyB,SAAS/E,iBAAiB,oBAAoB,WAC5CjD,EAAEuG,IAAAA,wBAA8BlD,GAAG,iBAAiB,SAACH,GACnDmD,EAAcnD,EAAIsE,EAAuBtE,EAAIqD,IAAAA,wBAC/C,GACF,G,oxDCxKO,IAAM0B,EAAQ,WACnB,SAAAA,EAAYC,EAAOC,EAAYC,I,4FAAS/D,CAAA,KAAA4D,GACtC3D,KAAK4D,MAAQA,EACb5D,KAAK6D,WAAaA,EAClB7D,KAAK+D,YAAcF,EAAWG,cAAc,iBAC5ChE,KAAKiE,gBAAiB,EACtBjE,KAAKkE,YAAa,EACdN,EAAME,QAAQK,aAAeL,EAAQ5F,KAAKkG,KAAOR,EAAME,QAAQK,aACjEnE,KAAKkE,YAAa,EAClBlE,KAAKqE,UAAU,CAACT,EAAMU,QAAQC,uBAE9BvE,KAAKwE,OAAS,IAAIC,EAAAA,aAAaX,EAAQ5F,KAAM4F,EAAQ5G,IAAK8C,KAE9D,C,UA2EC,O,EA3EA2D,G,EAAA,EAAAzD,IAAA,YAAAC,MAED,SAAUuE,GACR1E,KAAK+D,YAAYY,UAAUC,IAAI,UAC/B5E,KAAK+D,YAAYpH,UAAYqD,KAAK4D,MAAMU,QAAQO,iBAChD7E,KAAK6D,WAAWiB,QAAQC,MAAQ,QAChC,IAAMC,EAAYhF,KAAK6D,WAAWG,cAAc,kBAChDU,EAAOO,SAAQ,SAACC,GACd,IAAMC,EAAYzB,SAAS0B,cAAc,MACzCD,EAAUR,UAAUC,IAAI,aAAc,cACtCO,EAAUxI,UAAYuI,EACtBF,EAAUK,YAAYF,EACxB,GACF,GAAC,CAAAjF,IAAA,WAAAC,MAED,SAASmF,GAAS,IAAD9D,EAAA,KAiBf,IAAKxB,KAAKiE,eAAgB,CACxB,IAAIsB,EAAWvF,KAAK4D,MAAME,QAAQ0B,aAC9BxF,KAAK4D,MAAME,QAAQ2B,SACrBF,EAAW,QAGb,IAAIrI,EAAM8C,KAAK4D,MAAM8B,MAAMZ,QAAQa,qBAE7BC,EAAS,IAAIC,gBAAgB,CACjCC,cAAe9F,KAAK4D,MAAME,QAAQgC,cAClCP,SAAUA,EACVQ,KAAMT,EACNU,UAAWhG,KAAK4D,MAAME,QAAQmC,kBAGhCC,MAAM,GAAD/J,OAAIe,EAAG,KAAAf,OAAIyJ,GAAU,CACxBzI,OAAQ,OACRG,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,EAAE,yBAAyBoB,KAAK,cAEjDsF,MAAK,SAAC+D,GAAQ,OAAKA,EAASC,MAAM,IAAEhE,MAAK,SAACzG,IArC9B,SAACA,GAEhB,IADA,IAAI+I,EAAS,GACb2B,EAAA,EAAAC,EAAwBC,OAAOC,QAAQ7K,GAAK0K,EAAAC,EAAA/G,OAAA8G,IAAE,CAAzC,IAASlG,EAATsG,EAAAH,EAAAD,GAAA,GAAc,GACjB3B,EAASA,EAAOvI,OAAOgE,EACzB,CAEAqB,EAAKuC,YAAY2C,MAAMC,eAAiB,SAClB,IAAlBjC,EAAOnF,QACTiC,EAAKuC,YAAYpH,UAAY6E,EAAKoC,MAAMU,QAAQsC,SAChDpF,EAAKqC,WAAWiB,QAAQC,MAAQ,aAEhCvD,EAAK6C,UAAUK,GAEjBlD,EAAKuC,YAAYY,UAAUC,IAAI,SACjC,CAwBIiC,CAASlL,EACX,IACAqE,KAAKiE,gBAAiB,CACxB,CACF,GAAC,CAAA/D,IAAA,mCAAAC,MAED,SAAiC2G,GAAU,IAADC,EAAA,KACxCD,EAAQtC,OAAO7F,iBAAiB,YAAY,SAACM,GAC3C,IAAM+H,EAAW/F,KAAKgG,MAAMhI,EAAMiI,OAASjI,EAAMkI,MAAQ,KACrDC,EAAQ,MACRJ,EAAW,KACbI,EAAK,GAAAjL,OAAM6K,EAAQ,MAErBD,EAAKhD,YAAY2C,MAAMU,MAAQA,EAM/BL,EAAKhD,YAAYpH,UAJA,MAAbqK,EAIsB,GAAA7K,OAAM6K,EAAQ,KAHTD,EAAKnD,MAAMU,QAAQ+C,UAIpD,GACF,M,8EAAC1D,CAAA,CAxFkB,GCmBR2D,EAAmB,SAACC,GAA8B,IAApBC,EAASpH,UAAAb,OAAA,QAAAc,IAAAD,UAAA,GAAAA,UAAA,GAAG,GACrD,GAAImH,EAAShI,QAAUiI,EACrB,OAAOD,EAGT,IAAME,EAAsBxG,KAAKgG,MAAMO,EAAY,GAAK,EAClDE,EAAoBF,EAAYC,EAAsB,EAC5D,MAAM,GAANtL,OAAUoL,EAASI,MAAM,EAAGF,GAAoB,OAAAtL,OAAMoL,EAASI,OAAOD,GACxE,EAEaE,EAAoB,SAACC,EAAWC,EAAQC,GACnD,IAAMC,EAAKtE,SAAS0B,cAAc,SAelC,OAdA4C,EAAGzF,KAAO,SACNsF,IAEAG,EAAGC,UADsB,kBAAfJ,EACKA,EAEAA,EAAUK,KAAK,MAG9BJ,IACFE,EAAG5K,KAAO0K,GAERC,IACFC,EAAG7H,MAAQ4H,GAENC,CACT,EChDaG,EAAa,SAAC/J,GACzB,IAAKA,EACH,MAAO,GAGT,IAAM4J,EAAKtE,SAAS0B,cAAc,OAElC,OADA4C,EAAG3C,YAAY3B,SAAS0E,eAAehK,IAChC4J,EAAGrL,SACZ,E,6sBCHA,IACqB0L,EAAW,WAC9B,SAAAA,EAAYC,GAAuB,IAAfxE,EAAO1D,UAAAb,OAAA,QAAAc,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,G,4FAACL,CAAA,KAAAsI,GAE9BrI,KAAKsI,OAASA,EAId,IAAIC,EAAkB,CAAC,EACvB,IASEA,EAAkBC,KAAKC,MAAMH,EAAOxD,QAAQN,OAC9C,CAAE,MAAOkE,GACP,CAGF1I,KAAK8D,QAAUyC,OAAOoC,OAAOJ,EAAiBzE,GAE9C9D,KAAK5C,KAAO4C,KAAKsI,OAAOlL,KACxB4C,KAAK4D,MAAQF,SAASM,cAAc,IAAD7H,OAAKmM,EAAOxD,QAAQ8D,OACvD5I,KAAK6I,WAAa7I,KAAK4D,MAAMI,cAAc,mBAAD7H,OAAoB6D,KAAK5C,OACnE4C,KAAK8I,kBAAoB,EACzB9I,KAAK+I,iBAAkB,EACvB/I,KAAKgJ,WAAahJ,KAAK4D,MAAMI,cAAc,kBAC3ChE,KAAKiJ,YAAcjJ,KAAK4D,MAAMI,cAAc,iBAC5ChE,KAAKsE,QAAUkE,KAAKC,MAAMzI,KAAKiJ,YAAYnE,QAAQR,SACnDtE,KAAKkJ,SAAWlJ,KAAK4D,MAAMI,cAAc,aACzChE,KAAK0F,MAAQ1F,KAAKkJ,SAASlF,cAAc,SACzChE,KAAKmJ,gBAAkBzF,SAASM,cAAc,yBAAD7H,OAA0B6D,KAAK5C,OAC5E4C,KAAKoJ,kBAAoBpJ,KAAKmJ,gBAAgBnF,cAAc,mBAC5DhE,KAAKqJ,SAAWrJ,KAAKsJ,gBACvB,C,UA4NC,O,EA5NAjB,G,EAAA,EAAAnI,IAAA,aAAAC,MAED,SAAWjC,GAAO,IAADsD,EAAA,KACf,GAAKxB,KAAK+I,gBAAV,CAIA,IAAMQ,EAAQrL,EAAKd,KAAKoM,MAAM,KAAK,GAAG7B,MAAM,EAAG,IACzC9D,EAAa7D,KAAKyJ,iBAAiBvL,EAAKd,KAAMmM,EAAO,QACrDG,EAAW,IAAI/F,EAAS3D,KAAM6D,EAAY,CAC9C3F,KAAMA,EACNhB,IAAK8C,KAAK0F,MAAMZ,QAAQ6E,gBACxBC,eAAgB1L,EAAKd,OAEnBsM,EAASxF,aAIbwF,EAASlF,OAAOqF,QAAO,SAAC3E,EAAOa,GAC7B,GAAIb,EAAO,CACTrB,EAAWiB,QAAQC,MAAQ,QAC3B,IAAMhB,EAAcF,EAAWG,cAAc,iBAC7CD,EAAYY,UAAUC,IAAI,UAC1Bb,EAAYpH,UAAY6E,EAAK8C,QAAQY,MACrCpH,QAAQoH,MAAMA,EAChB,KAAO,CACL,IAAM4E,EAAgBtI,EAAKuI,mBAErBC,EAAoBtG,SAAS0B,cAAc,OACjD4E,EAAkBrF,UAAUC,IAAI,sBAChCoF,EAAkBlF,QAAQmF,OAASpG,EAAWiB,QAAQmF,OACtDD,EAAkBlF,QAAQyC,SAAWrJ,EAAKd,KAC1C,IAAM8M,EAAuBxG,SAAS0B,cAAc,QACpD8E,EAAqBxD,MAAMyD,QAAU,OACrCH,EAAkB3E,YAAY6E,GAE9B,IAAME,EAAkBxC,EAAkB,KAAM,KAAM7B,EAAKsE,WAO3D,GANI7I,EAAKsC,QAAQ2B,OACf2E,EAAgBhN,KAAI,GAAAjB,OAAMqF,EAAKsC,QAAQwG,aAAY,KAAAnO,OAAIqF,EAAKsC,QAAQ0B,aAAY,MAAArJ,OAAK2N,EAAa,WAElGM,EAAgBhN,KAAI,GAAAjB,OAAMqF,EAAKsC,QAAQwG,aAAY,KAAAnO,OAAIqF,EAAKsC,QAAQ0B,aAAY,KAG9EhE,EAAKsC,QAAQ2B,OAAQ,CACvB,IAAM8E,EAAmB3C,EAAkB,eAAe,GAADzL,OAAKqF,EAAKsC,QAAQwG,aAAY,KAAAnO,OAAIqF,EAAKsC,QAAQ0B,aAAY,MAAArJ,OAAK2N,EAAa,YAAYP,GAClJW,EAAqBvN,UAAYwL,EAAW,GAADhM,OAAIoN,EAAK,MAAApN,OAAK+B,EAAKd,KAAI,MAClE4M,EAAkB3E,YAAYkF,EAChC,MACEL,EAAqBvN,UAAYwL,EAAWjK,EAAKd,MAG9CoE,EAAKsC,QAAQ0G,UAChBhJ,EAAKiJ,gBAGPT,EAAkB3E,YAAY+E,GAC9BvG,EAAWwB,YAAY2E,GACvBN,EAASgB,SAAS3E,EAAKsE,UACzB,CACF,IACArK,KAAK2K,iBAvDL,CAwDF,GAAC,CAAAzK,IAAA,mBAAAC,MAED,WACE,IAAMyK,EAAoB5K,KAAK8I,kBAE/B,OADA9I,KAAK8I,mBAAqB,EACnB8B,CACT,GAAC,CAAA1K,IAAA,iBAAAC,MAED,WACMH,KAAK8D,QAAQ0G,WAIbxK,KAAKiJ,YAAY4B,SAAStL,OAAS,GACrCS,KAAKkJ,SAASvE,UAAUC,IAAI,YAC5B5E,KAAK+I,iBAAkB,EACvB/I,KAAK0F,MAAM9J,UAAW,IAEtBoE,KAAKkJ,SAASvE,UAAU7C,OAAO,YAC/B9B,KAAK+I,iBAAkB,EACvB/I,KAAK0F,MAAM9J,UAAW,GAE1B,GAAC,CAAAsE,IAAA,mBAAAC,MAED,SAAiB2K,EAAUvB,EAAOxE,GAAQ,IAADgG,EAAAhE,EAAA,KACjCiE,EAAUtH,SAAS0B,cAAc,OACvC4F,EAAQrG,UAAUC,IAAI,eACtBoG,EAAQC,aAAa,cAAehK,KAAKC,SAASC,SAAS,IAAIC,UAAU,IACzE4J,EAAQC,aAAa,gBAAiBH,GAEtC,IAAMI,EAAWxH,SAAS0B,cAAc,OAClC+F,EAAYzH,SAAS0B,cAAc,OACnCgG,EAAW1H,SAAS0B,cAAc,OACxC8F,EAASvG,UAAUC,IAAI,MAAO,yBAC9BuG,EAAUxG,UAAUC,IAAI,MAAO,0BAC/BwG,EAASzG,UAAUC,IAAI,MAAO,yBAE9B,IAAMyG,EAAe3H,SAAS0B,cAAc,QACxCkG,EAAsB,CAAC,UAAW,kBAClCtL,KAAK8D,QAAQ2B,OACf6F,EAAoBvO,KAAK,UAAW,YAEpCuO,EAAoBvO,KAAK,aAE3BgO,EAAAM,EAAa1G,WAAUC,IAAG2G,MAAAR,EAAIO,GAC9BD,EAAa1O,UAAYwL,EAAWb,EAAiBwD,IAErD,IAAM/G,EAAcL,SAAS0B,cAAc,OAC3CrB,EAAYY,UAAUC,IAAI,gBACtBG,IACY,cAAVA,EACFhB,EAAYpH,UAAYqD,KAAKsE,QAAQsC,UAErC7C,EAAYpH,UAAY,KACxBoH,EAAY2C,MAAMU,MAAQ,OAE5B4D,EAAQlG,QAAQC,MAAQA,GAG1B,IAAMyG,EAAoB9H,SAAS0B,cAAc,OACjDoG,EAAkB7G,UAAUC,IAAI,uBAChC4G,EAAkBnG,YAAYtB,GAE9B,IAAM0H,EAAqB/H,SAAS0B,cAAc,OAClDqG,EAAmB9G,UAAUC,IAAI,UAAW,wBAC5C6G,EAAmBpG,YAAYmG,GAC3BxL,KAAK8D,QAAQ2B,OACfgG,EAAmB9G,UAAUC,IAAI,UAAW,YAE5C6G,EAAmB9G,UAAUC,IAAI,YAGnC,IAAMI,EAAYtB,SAAS0B,cAAc,MACzCJ,EAAUL,UAAUC,IAAI,iBAExB,IAAM8G,EAAehI,SAAS0B,cAAc,UAC5CsG,EAAa/G,UAAUC,IAAI,UAAW,UAAW,WAAY,sBAC7D8G,EAAa/O,UAAS,WAAAR,OAAc6D,KAAKsE,QAAQxC,QACjD4J,EAAa/M,iBAAkB,SAAU,SAACM,GACxCA,EAAMJ,iBACNkI,EAAKsC,SAAS/H,OAAO0J,GACrBjE,EAAK4D,gBACP,IAEA,IAAMT,EAAuBxG,SAAS0B,cAAc,QACpD8E,EAAqBvF,UAAUC,IAAI,UAAW,UAAW,2BACzDsF,EAAqBvN,UAAYwL,EAAW,GAADhM,OAAIoN,EAAK,MAAApN,OAAKmL,EAAiBwD,GAAS,MAEnFI,EAAS7F,YAAYgG,GACrBF,EAAU9F,YAAYoG,GACtBL,EAAS/F,YAAYL,GAErB,IAAI2G,EAAsB,KAC1B,GAAI3L,KAAK8D,QAAQ2B,OAAQ,CACvB,IAAMmG,EAAalI,SAAS0B,cAAc,SAC1CwG,EAAWjH,UAAUC,IAAI,oBACzBgH,EAAWrJ,KAAO,OAClBqJ,EAAWzL,MAAQoJ,EACnBqC,EAAWjN,iBAAiB,SAAS,SAACM,GF1MjB,IAAC4M,EAAehD,EACrCiD,EE0ME7M,EAAMJ,iBF3McgN,EE4MR9E,EAAKkC,YF5MkBJ,EE4ML9B,EAAK8B,WF3MrCiD,GAAoB,EAExBC,MAAMC,KAAKH,EAAchB,UAAU5F,SAAQ,SAACgH,GAC1C,IAAM1C,EAAQ0C,EAAKjI,cAAc,sBAAsB7D,MACjD+L,EAAmBD,EAAKjI,cAAc,mBACvCuF,GAA0B,IAAjBA,EAAMhK,OAMlB2M,EAAiBvH,UAAU7C,OAAO,eALlCgK,GAAoB,EACpBjD,EAAWjN,UAAW,EACtBsQ,EAAiBvH,UAAUC,IAAI,cAC/BqH,EAAK5G,YAAY6G,GAIrB,IAEIJ,IACFjD,EAAWjN,UAAW,EE4LpB,KACA+P,EAAsBjI,SAAS0B,cAAc,QACzBT,UAAUC,IAAI,UAAW,UAAW,yBACxD+G,EAAoBtG,YAAYuG,GAEhC,IAAMM,EAAmBxI,SAAS0B,cAAc,QAChD8G,EAAiBvH,UAAUC,IAAI,aAAc,kBAC7CsH,EAAiBC,KAAO,QACxBD,EAAiBvP,UAAYqD,KAAKsE,QAAQ8H,eAC1CT,EAAoBtG,YAAY6G,GAEhC,IAAMG,EAAiB3I,SAAS0B,cAAc,QAC9CiH,EAAe1H,UAAUC,IAAI,oBAC7ByH,EAAe1P,UAAYqD,KAAKsE,QAAQiF,MAExC,IAAM+C,EAAiB5I,SAAS0B,cAAc,OAC9CkH,EAAe3H,UAAUC,IAAI,UAAW,UAAW,WAAY,mBAC/D0H,EAAejH,YAAYgH,GAC3BnB,EAAS7F,YAAYiH,GACrBnB,EAAU9F,YAAYsG,EACxB,CAUA,OARAR,EAAU9F,YAAYqG,GAEtBV,EAAQ3F,YAAY6F,GACpBF,EAAQ3F,YAAY8F,GACpBH,EAAQ3F,YAAY+F,GAEpBpL,KAAKiJ,YAAY5D,YAAY2F,GAEtBA,CACT,GAAC,CAAA9K,IAAA,6BAAAC,MAED,WACiD,IAA3CH,KAAKoJ,kBAAkByB,SAAStL,OAClCS,KAAKsI,OAAO3L,UAAYqD,KAAKgJ,WAAWlE,QAAQyH,SAEhDvM,KAAKsI,OAAO3L,UAAYqD,KAAKgJ,WAAWlE,QAAQ0H,SAEpD,GAAC,CAAAtM,IAAA,iBAAAC,MAED,WACE,IAAMkJ,EAAY3F,SAAS0B,cAAc,OAIzC,OAHAiE,EAAS1E,UAAUC,IAAI,aACvByE,EAAS3C,MAAMyD,QAAU,OACzBnK,KAAKiJ,YAAY4C,cAAcxG,YAAYgE,GACpCA,CACT,GAAC,CAAAnJ,IAAA,gBAAAC,MAED,WAAiB,IAADsM,EAAA,KACdV,MAAMC,KAAKhM,KAAKqJ,SAASwB,UAAU5F,SAAQ,SAACgH,GAC1C,IAAMS,EAAST,EAAKnH,QAAQmF,OACtB0C,EAAmBF,EAAKrD,kBAAkBpF,cAAc,oBAAD7H,OAAqBuQ,EAAM,OACpFC,GACFA,EAAiB7K,SAEnBmK,EAAKnK,QACP,GACF,M,8EAACuG,CAAA,CAjQ6B,GCqGhC3E,SAAS/E,iBAAiB,oBAAoB,WAClB+E,SAASpE,iBAAiB,mBAElC2F,SAAQ,SAAC2H,GACzB,IAAMhJ,EAAQ,IAAIyE,EAAYuE,IA3GV,SAAChJ,GACvBmI,MAAMC,KAAKpI,EAAMwF,kBAAkByB,UAAU5F,SAAQ,SAAC4H,GACpD,IAAMhJ,EAAaD,EAAM6F,iBAAiBoD,EAAM/H,QAAQyC,SAAUsF,EAAM/H,QAAQyE,MAAO,aACvFsD,EAAM/H,QAAQmF,OAASpG,EAAWiB,QAAQmF,MAC5C,GACF,CAuGI6C,CAAgBlJ,GArGU,SAACA,GAC7BA,EAAM8B,MAAM/G,iBAAiB,UAAU,SAACM,GACtCA,EAAMJ,iBACN,IAAMkO,EAAQ9N,EAAM+D,OAAO+J,MAC3BhB,MAAMC,KAAKe,GAAO9H,SAAQ,SAAC/G,GAAI,OAAK0F,EAAMoJ,WAAW9O,EAAK,GAC5D,GACF,CAgGI+O,CAAsBrJ,GA9FK,SAACA,GAC9BA,EAAM0E,OAAO3J,iBAAiB,SAAS,SAACM,GACtCA,EAAMJ,iBACNkN,MAAMC,KAAKpI,EAAMyF,SAASwB,UAAU5F,SAAQ,SAACgH,GAC3CrI,EAAMqF,YAAY3H,OAAO2K,EAC3B,IAC0C,IAAtCrI,EAAMqF,YAAY4B,SAAStL,OAC7BqE,EAAMoF,WAAWrM,UAAYiH,EAAMoF,WAAWlE,QAAQyH,SAEtD3I,EAAMoF,WAAWrM,UAAYiH,EAAMoF,WAAWlE,QAAQ0H,UAExD5I,EAAM+G,gBACR,GACF,CAkFIuC,CAAuBtJ,GAhFO,SAACA,GACjCA,EAAMsF,SAASvK,iBAAiB,aAAa,SAACM,GAC5CA,EAAMJ,gBACR,IAEA+E,EAAMsF,SAASvK,iBAAiB,YAAY,SAACM,GAC3CA,EAAMJ,iBACN+E,EAAMsF,SAASvE,UAAUC,IAAI,cAC/B,IAEAhB,EAAMsF,SAASvK,iBAAiB,aAAa,WAC3CiF,EAAMsF,SAASvE,UAAU7C,OAAO,cAClC,IAEA8B,EAAMsF,SAASvK,iBAAiB,QAAQ,SAACM,GACvCA,EAAMJ,iBACN,IAAMkO,EAAQ9N,EAAMkO,aAAaJ,MACjChB,MAAMC,KAAKe,GAAO9H,SAAQ,SAAC/G,GAAI,OAAK0F,EAAMoJ,WAAW9O,EAAK,GAC5D,GACF,CA8DIkP,CAA0BxJ,GA5DK,SAACA,GAClCA,EAAMiF,WAAWlK,iBAAiB,SAAS,SAACM,GAC1CA,EAAMJ,iBACN,IAAMwO,EAAiBzJ,EAAMqF,YAAY3J,iBAAiB,wCACpDgO,EAAsBD,EAAe9N,OAmC3C,GAlCA8N,EAAepI,SAAQ,SAACgH,GACtB,IAAIsB,EAAUtB,EAAKjI,cAAc,uBAC7BuJ,EACF3J,EAAMwF,kBAAkB/D,YAAYkI,GAEpCA,EAAU3J,EAAMwF,kBAAkBpF,cAAc,oCAAD7H,OAAqC8P,EAAKnH,QAAQmF,OAAM,MAEzG,IAAMuD,EAAOD,EAAQvJ,cAAc,QAEnC,GADAwJ,EAAK7I,UAAUC,IAAI,YACfhB,EAAME,QAAQ2B,OAAQ,CACxB,IAAM8D,EAAQ0C,EAAKjI,cAAc,sBAAsB7D,MACvDoN,EAAQzI,QAAQyE,MAAQA,EACxB,IAAIkE,EAAcF,EAAQvJ,cAAc,iBACxC,GAAIyJ,EACFA,EAAYtN,MAAQoJ,MACf,CACL,IAAMmE,EAAeH,EAAQvJ,cAAc,UAAD7H,OAAWyH,EAAME,QAAQwG,aAAY,KAAAnO,OAAIyH,EAAMxG,KAAI,SAAQ+C,MAC/F2J,EAAgBlG,EAAMmG,mBACtBQ,EAAmB3C,EAAkB,eAAe,GAADzL,OAAKyH,EAAME,QAAQwG,aAAY,KAAAnO,OAAIyH,EAAME,QAAQ0B,aAAY,MAAArJ,OAAK2N,EAAa,YAAYP,GAC9IoE,EAAgB/F,EAAkB,YAAY,GAADzL,OAAKyH,EAAME,QAAQwG,aAAY,KAAAnO,OAAIyH,EAAME,QAAQ0B,aAAY,MAAArJ,OAAK2N,EAAa,SAAS4D,GAC3IH,EAAQlI,YAAYkF,GACpBgD,EAAQlI,YAAYsI,EACtB,CACAH,EAAK7Q,UAAS,GAAAR,OAAMgM,EAAWoB,GAAM,MAAApN,OAAKgM,EAAWb,EAAiB2E,EAAKnH,QAAQyC,WAAU,IAC/F,MACEiG,EAAK7Q,UAAYwL,EAAWb,EAAiB2E,EAAKnH,QAAQyC,SAAU,KAEtEiG,EAAK9G,MAAMyD,QAAU,OACvB,KAEKvG,EAAME,QAAQ2B,QAAU7B,EAAMyF,SAASwB,SAAStL,OAAS,IAC5DqE,EAAMwF,kBAAkBzM,UAAS,gBAAAR,OAAmByH,EAAME,QAAQwG,aAAY,YAAAnO,OAAWyH,EAAMxG,KAAI,oCAGjGkQ,EAAsB,EAAG,CAE3B,IAAMM,EAAMlS,EAAEkI,EAAMuF,gBAAgBnF,cAAc,2BAC9C4J,IACFA,EAAIC,KAAK,WAAW,GACpBD,EAAIE,QAAQ,UAEhB,CACAlK,EAAM6G,gBACN7G,EAAMmK,4BACR,GACF,CAWIC,CAA2BpK,EAC7B,GACF,G,iCCpHAlI,GAAE,WACsBA,EAAE,sBAGVuS,UAAU,CACtBC,SAAU,aACVC,WAAW,GAGf,G","sources":["webpack://app/./app/packs/src/decidim/editor.js","webpack://app/../../../usr/local/bundle/gems/decidim-core-0.27.8/app/packs/src/decidim/configuration.js","webpack://app/../../../usr/local/bundle/gems/decidim-core-0.27.8/app/packs/src/decidim/confirm.js","webpack://app/../../../usr/local/bundle/gems/decidim-core-0.27.8/app/packs/src/decidim/direct_uploads/uploader.js","webpack://app/../../../usr/local/bundle/gems/decidim-core-0.27.8/app/packs/src/decidim/direct_uploads/upload_utility.js","webpack://app/../../../usr/local/bundle/gems/decidim-core-0.27.8/app/packs/src/decidim/utilities/text.js","webpack://app/../../../usr/local/bundle/gems/decidim-core-0.27.8/app/packs/src/decidim/direct_uploads/upload_modal.js","webpack://app/../../../usr/local/bundle/gems/decidim-core-0.27.8/app/packs/src/decidim/direct_uploads/upload_field.js","webpack://app/../../../usr/local/bundle/gems/decidim-core-0.27.8/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 \"script\"\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\"],\n [{ list: \"ordered\" }, { list: \"bullet\" }],\n [\"link\", \"clean\"],\n [\"code\", \"blockquote\"],\n [{ \"script\": \"sub\"}, { \"script\": \"super\" }],\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 toolbar: {\n container: quillToolbar,\n handlers: {\n linebreak: lineBreakButtonHandler\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 `

${text}

`\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 const text = quill.getText();\n\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\n ) {\n $input.val(\"\");\n } else {\n const emptyParagraph = \"


\";\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\n let url = this.modal.input.dataset.uploadValidationsUrl;\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(`${url}?${params}`, {\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","export const escapeHtml = (text) => {\n if (!text) {\n return \"\";\n }\n\n const el = document.createElement(\"div\");\n el.appendChild(document.createTextNode(text));\n return el.innerHTML;\n}\n\nexport const escapeQuotes = (text) => {\n if (!text) {\n return \"\";\n }\n\n return text.replace(/\"/g, \""\");\n}\n","import { Uploader } from \"src/decidim/direct_uploads/uploader\";\nimport { truncateFilename, checkTitles, createHiddenInput } from \"src/decidim/direct_uploads/upload_utility\";\nimport { escapeHtml } from \"src/decidim/utilities/text\";\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.\nexport 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.fileid = uploadItem.dataset.fileid;\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 = escapeHtml(`${title} (${file.name})`);\n attachmentDetails.appendChild(hiddenTitleField);\n } else {\n titleAndFileNameSpan.innerHTML = escapeHtml(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-fileid\", Math.random().toString(36).substring(7));\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 = escapeHtml(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 = `× ${this.locales.remove}`;\n removeButton.addEventListener((\"click\"), (event) => {\n event.preventDefault();\n this.trashCan.append(wrapper);\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 = escapeHtml(`${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 fileId = item.dataset.fileid;\n const activeAttachment = this.activeAttachments.querySelector(`div[data-fileid='${fileId}']`);\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\";\nimport { escapeHtml } from \"src/decidim/utilities/text\";\n\nconst loadAttachments = (modal) => {\n Array.from(modal.activeAttachments.children).forEach((child) => {\n const uploadItem = modal.createUploadItem(child.dataset.filename, child.dataset.title, \"validated\");\n child.dataset.fileid = uploadItem.dataset.fileid;\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-fileid='${item.dataset.fileid}'`);\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 = `${escapeHtml(title)} (${escapeHtml(truncateFilename(item.dataset.filename))})`;\n } else {\n span.innerHTML = escapeHtml(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 = ``;\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","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","concat","_toConsumableArray","modules","handlers","linebreak","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","emptyParagraph","cleanHTML","replace","RegExp","emitter","emit","Configuration","_classCallCheck","this","config","key","value","arguments","undefined","_typeof","_objectSpread","TEMPLATE_HTML","ConfirmDialog","sourceElement","$modal","$source","$content","$buttonConfirm","$buttonCancel","titleId","Math","random","toString","substring","removeAttr","append","foundation","_this","html","off","Promise","resolve","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","errors","classList","add","validation_error","dataset","state","errorList","forEach","error","errorItem","createElement","appendChild","blobId","property","addAttribute","titled","input","uploadValidationsUrl","params","URLSearchParams","resourceClass","blob","formClass","formObjectClass","fetch","response","json","_i","_Object$entries","Object","entries","_slicedToArray","style","justifyContent","uploaded","callback","request","_this2","progress","floor","loaded","total","width","validating","truncateFilename","filename","maxLength","charactersFromBegin","charactersFromEnd","slice","createHiddenInput","elClasses","elName","elValue","el","className","join","escapeHtml","createTextNode","UploadModal","button","providedOptions","JSON","parse","_e","assign","open","saveButton","attachmentCounter","dropZoneEnabled","modalTitle","uploadItems","dropZone","uploadContainer","activeAttachments","trashCan","createTrashCan","title","split","createUploadItem","uploader","directUploadUrl","attachmentName","create","ordinalNumber","getOrdinalNumber","attachmentDetails","fileid","titleAndFileNameSpan","display","hiddenBlobField","signed_id","resourceName","hiddenTitleField","multiple","cleanTrashCan","validate","updateDropZone","nextOrdinalNumber","children","fileName","_fileNameSpan$classLi","wrapper","setAttribute","firstRow","secondRow","thirdRow","fileNameSpan","fileNameSpanClasses","apply","progressBarBorder","progressBarWrapper","removeButton","titleInputContainer","titleInput","parentElement","everyItemHasTitle","Array","from","item","noTitleErrorSpan","role","title_required","titleLabelSpan","titleContainer","addlabel","editlabel","_this3","fileId","activeAttachment","attachmentButton","child","loadAttachments","files","uploadFile","addInputEventListener","addButtonEventListener","dataTransfer","addDropZoneEventListeners","validatedItems","validatedItemsCount","details","span","hiddenTitle","attachmentId","hiddenIdField","$el","prop","trigger","updateAddAttachmentsButton","addSaveButtonEventListener","tagsinput","tagClass","trimValue"],"sourceRoot":""}