{"version":3,"file":"static/js/293.fb405b1c.chunk.js","mappings":"+YAcO,SAASA,IAAkD,IAA3CC,EAA0C,uDAA5B,GAC7BC,EAAMD,EAAIE,MAAM,OACtB,GAAID,EAAIE,OAAS,EACf,OAAOH,EAET,IAAMI,EAAUH,EAAII,SAAQ,SAACC,EAAGC,GAAJ,MAAU,EAAC,0BAAeD,GAAJC,IAAe,iBAAS,IAAMA,GAApD,IAE5B,OADAH,EAAQI,MACDJ,CACR,CAMM,IAAMK,EAAqC,SAAAC,GAChD,IAAkBC,EAAMD,EAAhBE,SACR,EAAwBC,EAAAA,UAAe,GAAvC,eAAOC,EAAP,KAAaC,EAAb,KACA,EAAgDF,EAAAA,UAAe,GAA/D,eAAOG,EAAP,KAAyBC,EAAzB,KAEMC,EAAqB,WACzBD,GAAqBD,EACtB,EAED,OACE,UAACG,EAAA,EAAD,CAAWC,UAAU,8BAA8BC,MAAOV,EAAEW,aAAcC,OAAQC,EAAAA,EAAAA,cAAlF,WACE,SAACC,EAAA,EAAD,CAAcC,QAASf,EAAEgB,YAAaC,OAAQZ,EAAkBa,YAAaX,EAAoBY,MAAOnB,EAAEoB,GAAIC,MAAOrB,EAAEqB,MAAOC,UAAWtB,EAAEsB,aAC3I,iBAAMC,SAAUC,EAAAA,EAAAA,aAA0BC,SAAUC,EAAAA,EAAAA,0BAAwC1B,EAAE2B,uBAC9F,iBAAYC,IAAKJ,EAAAA,EAAAA,aAA0BK,IAAKL,EAAAA,EAAAA,SAAhD,UACE,kBAAMd,MAAOV,EAAEW,aAAe,OAAQC,OAAQC,EAAAA,EAAAA,gBAA9C,WACE,iBAAMU,SAAUC,EAAAA,EAAAA,SAAsBC,SAAUC,EAAAA,EAAAA,wBAChD,UAACI,EAAA,EAAD,CAAKrB,UAAU,OAAf,WACE,UAACsB,EAAA,EAAD,CAAKC,GAAI,EAAGvB,UAAU,UAAtB,WACE,gBAAKA,UAAU,+DAA+Dc,SAAUC,EAAAA,EAAAA,WAAwBS,SAAUC,EAAAA,EAAAA,YAA1H,SACGlC,EAAEsB,YAEJa,EAAuBnC,EAAEoC,qBAAsBpC,EAAEqC,4BAChD,gBAAK5B,UAAU,2DAAf,UACE,SAAC6B,EAAA,EAAD,CACEC,MAAM,YACN9B,UAAW,aAAeT,EAAEwC,cAAgB,mBAAqB,IACjEjB,SAAUC,EAAAA,EAAAA,QACVC,SAAUzB,EAAEwC,cAAgBd,EAAAA,EAAAA,mBAAiCA,EAAAA,EAAAA,gBAJ/D,SAMG1B,EAAEwC,cAAgB,YAAc,kBAItCxC,EAAEyC,kBACD,SAACC,EAAA,EAAD,CAAQH,MAAM,UAAU9B,UAAU,0CAA0CkC,QAASpC,EAArF,yBAKJ,UAACwB,EAAA,EAAD,CACEtB,UAAU,+GACVC,MAAOV,EAAEW,aACTY,SAAUC,EAAAA,EAAAA,iBACVS,SAAUC,EAAAA,EAAAA,UAJZ,eAMyBU,IAAtB5C,EAAE6C,iBAAiC7C,EAAE6C,gBAAgBrD,OAAS,IAAK,oCAAIQ,EAAE6C,gBAAgBC,KAAK,MAA3B,QACnE9C,EAAEgB,mBAGP,SAACc,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,CAAKC,GAAI,GAAIvB,UAAU,UAAvB,UACE,iBAAYoB,IAAKL,EAAAA,EAAAA,SAAsBI,IAAKJ,EAAAA,EAAAA,aAA5C,UACE,iBAAMC,SAAUzB,EAAEW,aAAe,YAAaC,OAAQC,EAAAA,EAAAA,OAAtD,UACE,UAACkC,EAAA,EAAD,CAAMtC,UAAU,iBAAiBuC,GAAIhD,EAAEW,aAAcc,SAAUzB,EAAEW,aAAe,YAAaiB,IAAI,sBAAjG,WACE,iBAAML,SAAUC,EAAAA,EAAAA,OAAoBC,SAAUC,EAAAA,EAAAA,cAC9C,iBAAMH,SAAUC,EAAAA,EAAAA,UAAuBC,SAAUC,EAAAA,EAAAA,iBACjD,eAAIhB,MAAOV,EAAEW,aAAe,OAAQY,SAAUC,EAAAA,EAAAA,MAAmBS,SAAUC,EAAAA,EAAAA,YAA3E,SACG9C,EAAOY,EAAEqB,qBAOtB,UAACS,EAAA,EAAD,YACE,SAACC,EAAA,EAAD,CAAKC,GAAI,EAAGvB,UAAU,UAAtB,UACIT,EAAEiD,cAAgBjD,EAAEkD,0BACpB,iBAAKzC,UAAU,8CAAf,WAEI,iBAAMc,SAAUC,EAAAA,EAAAA,gBAA6BS,SAAUC,EAAAA,EAAAA,QAAvD,SACGlC,EAAEkD,yBAGNlD,EAAEiD,cAAgBjD,EAAEkD,yBAA0B,iBAAMzC,UAAU,oBAAhB,kBAE7C,iBAAMc,SAAUC,EAAAA,EAAAA,iBAA8BS,SAAUC,EAAAA,EAAAA,YAAxD,SACGlC,EAAEiD,qBAMb,SAAClB,EAAA,EAAD,CAAKC,GAAI,EAAGvB,UAAU,aAAtB,UACE,UAACsC,EAAA,EAAD,CACEC,GAAG,IACHL,QAAS,SAAAQ,GACPA,EAAEC,iBACFhD,GAASD,EACV,EALH,kCAOwB,KACtB,gBAAKM,UAAU,kBAAf,UACE,SAAC,EAAA4C,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,WAAqBC,SAAU,GAAI/C,UAAYN,EAAgC,aAAzB,oCAK1E,SAAC2B,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,CAAKtB,UAAU,UAAf,UACE,SAACgD,EAAA,EAAD,CAAatD,KAAMA,EAAMgB,MAAOnB,EAAEoB,gBAO/C,EACM,SAASe,EAAuBuB,EAA2BC,GAEhE,OACGD,IAAsBE,EAAAA,EAAAA,yBAA8CF,IAAsBE,EAAAA,EAAAA,yBAFnD,CAAC,GAAI,GAAI,IAGdC,SAASF,EAE/C,C,2FCrIYG,EAA+C,SAAC/D,GAC3D,IAAQgE,EAAchE,EAAdgE,UACR,OACE,8BACGA,EAAUC,SACT,SAAC,IAAD,CAAMhB,GAAIe,EAAUC,QAAS3C,MAAO0C,EAAU1C,MAAOO,IAAI,sBAAzD,SACGmC,EAAUzC,aAGb,0BAAOyC,EAAUzC,aAIxB,C,0OCFK2C,EAAgB,SAACC,GACrB,IAAIC,GAAS,EAWb,OAVAD,EAAOE,kBAAkBC,SAAQ,SAAAC,GAC3BA,EAAQC,WAAW/E,OAAS,IAC9B2E,GAAS,EAEZ,IACDD,EAAOM,gBAAgBH,SAAQ,SAAAC,GACzBA,EAAQC,WAAW/E,OAAS,IAC9B2E,GAAS,EAEZ,IACMA,CACR,EAsND,GAAeM,EAAAA,EAAAA,KACb,WAAiCC,GAAoD,IAAlFC,EAAiF,EAAjFA,iBACD,OAAO,kBACFD,GADL,IAEEC,iBAAkBA,EAAiBC,oBAAoBF,EAASvD,QAEnE,IACD,SAAA0D,GAAQ,OACNC,EAAAA,EAAAA,KAAmB,UAEZC,EAAAA,IAELF,EALI,GAPV,EApNiD,SAAA9E,GAC/C,IAAQoB,EAAuDpB,EAAvDoB,MAAO6D,EAAgDjF,EAAhDiF,oBAAqB7E,EAA2BJ,EAA3BI,KAAMwE,EAAqB5E,EAArB4E,iBAC1C,EAAgCzE,EAAAA,SAAe,CAAC,GAAhD,eAAO+E,EAAP,KAAiBC,EAAjB,KASA,OANAhF,EAAAA,WAAgB,WACVC,QAA6ByC,IAArB+B,GACVK,EAAoB7D,GAAO,EAE9B,GAAE,CAACA,EAAO6D,EAAqB7E,EAAMwE,KAGpC,iCACE,SAACQ,EAAA,EAAD,CAAUlE,OAAQlB,EAAMI,WAAmCyC,IAA3B7C,EAAM4E,iBAAtC,UACE,gBAAKlE,UAAU,oCAAf,UACE,SAAC2E,EAAA,EAAD,CAASC,UAAU,SAAS5E,UAAU,wBAI1C,SAAC0E,EAAA,EAAD,CAAUlE,OAAQlB,EAAMI,WAAmCyC,IAA3B7C,EAAM4E,iBAAtC,UACE,gBAAKlE,UAAU,wBAAf,UACE,UAACqB,EAAA,EAAD,WACG/B,EAAM4E,kBACL5E,EAAM4E,iBAAiBH,gBAAgBc,KAAI,SAACC,EAAOC,GACjD,OACED,EAAMhB,WAAW/E,OAAS,IACxB,UAACuC,EAAA,EAAD,CAAkBC,GAAI,EAAGyD,GAAI,GAAIhF,UAAU,OAA3C,WACE,gBAAKA,UAAU,OAAf,UACE,4BAAS8E,EAAMG,WAGhBH,EAAMhB,WAAWe,KAAI,SAACK,EAAQC,GAC7B,OACEA,EA9BW,IA+BT,0BACE,SAAC9B,EAAA,EAAD,CAAeC,UAAW4B,GAAaC,IAD/BA,EAKf,IAGAL,EAAMhB,WAAW/E,OAvCH,IAwCb,SAAC2F,EAAA,EAAD,CAAUlE,OAAQgE,EAASM,EAAMG,UAAW,EAA5C,SACGH,EAAMhB,WAAWe,KAAI,SAACK,EAAQC,GAC7B,OACEA,GA3CO,IA4CL,0BACE,SAAC9B,EAAA,EAAD,CAAeC,UAAW4B,GAAaC,IAD/BA,EAKf,MAKJL,EAAMhB,WAAW/E,OAtDH,IAuDb,UAACuD,EAAA,EAAD,CACEC,GAAG,IACHL,QAAS,SAAAQ,GACPA,EAAEC,iBACF8B,GAAY,kBAAKD,GAAN,cAAiBM,EAAMG,QAAUT,EAASM,EAAMG,UAC5D,EACDjF,UAAU,sBANZ,UAQGwE,EAASM,EAAMG,QAAU,aAAe,YACzC,gBAAKjF,UAAU,kBAAkBoF,MAAO,CAAEC,WAAY,IAAtD,UACE,SAAC,EAAAzC,KAAD,CAAMC,KAAM2B,EAASM,EAAMG,QAAUnC,EAAAA,SAAAA,QAAmBA,EAAAA,SAAAA,WAAqBC,SAAU,YA1CrFgC,EAiDf,IAEFzF,EAAM4E,kBACL5E,EAAM4E,iBAAiBP,kBAAkBkB,KAAI,SAACC,EAAOC,GACnD,OACED,EAAMhB,WAAW/E,OAAS,IACxB,UAACuC,EAAA,EAAD,CAAkBC,GAAI,EAAGyD,GAAI,GAAIhF,UAAU,OAA3C,WACE,gBAAKA,UAAU,OAAf,UACE,4BAAS8E,EAAMQ,OAASC,EAAAA,EAAAA,eAA2B,sCAAwC,wCAI5FT,EAAMhB,WAAWe,KAAI,SAACK,EAAQC,GAC7B,OACEA,EAtFW,IAuFT,4BACE,cAAGK,KAAMN,EAAOO,QAASC,OAAO,SAASvE,IAAI,sBAA7C,SACG+D,EAAO5B,aAEV,cAAGtD,UAAU,OAAO0F,OAAO,SAASvE,IAAI,sBAAsBP,MAAM,OAAO4E,KAAMN,EAAOS,QAAxF,sBAJQR,EAUf,IAGAL,EAAMhB,WAAW/E,OApGH,IAqGb,SAAC2F,EAAA,EAAD,CAAUlE,OAAQgE,EAAS,MAAQM,EAAMQ,QAAS,EAAlD,SACGR,EAAMhB,WAAWe,KAAI,SAACK,EAAQC,GAC7B,OACEA,GAxGO,IAyGL,4BACE,cAAGK,KAAMN,EAAOO,QAASC,OAAO,SAASvE,IAAI,sBAA7C,SACG+D,EAAO5B,aAEV,cAAGtD,UAAU,OAAO0F,OAAO,SAASvE,IAAI,sBAAsBP,MAAM,OAAO4E,KAAMN,EAAOS,QAAxF,sBAJQR,EAUf,MAKJL,EAAMhB,WAAW/E,OAxHH,IAyHb,UAACuD,EAAA,EAAD,CACEC,GAAG,IACHL,QAAS,SAAAQ,GACPA,EAAEC,iBACF8B,GAAY,kBAAKD,GAAN,cAAiB,MAAQM,EAAMQ,MAAQd,EAAS,MAAQM,EAAMQ,QAC1E,EACDtF,UAAU,sBANZ,UAQGwE,EAAS,MAAQM,EAAMQ,MAAQ,aAAe,YAC/C,gBAAKtF,UAAU,kBAAkBoF,MAAO,CAAEC,WAAY,IAAtD,UACE,SAAC,EAAAzC,KAAD,CAAMC,KAAM2B,EAAS,MAAQM,EAAMQ,MAAQxC,EAAAA,SAAAA,QAAmBA,EAAAA,SAAAA,WAAqBC,SAAU,YArD3FgC,EA4Df,IAEFzF,EAAM4E,kBACL5E,EAAM4E,iBAAiB0B,mBAAmBf,KAAI,SAACC,EAAOC,GACpD,OACED,EAAMhB,YACNgB,EAAMhB,WAAW/E,OAAS,IACxB,UAACuC,EAAA,EAAD,CAAkBC,GAAI,EAAGyD,GAAI,GAAIhF,UAAU,OAA3C,WACE,gBAAKA,UAAU,OAAf,UACE,4BAAS8E,EAAMG,WAIhBH,EAAMhB,WAAWe,KAAI,SAACK,EAAQC,GAC7B,OACEA,EAzJW,IA0JT,0BACE,SAAC9B,EAAA,EAAD,CAAeC,UAAW4B,GAAaC,IAD/BA,EAKf,IAGAL,EAAMhB,WAAW/E,OAlKH,IAmKb,SAAC2F,EAAA,EAAD,CAAUlE,OAAQgE,EAAS,QAAUM,EAAMQ,KAAOR,EAAMe,QAAS,EAAjE,SACGf,EAAMhB,WAAWe,KAAI,SAACK,EAAQC,GAC7B,OACEA,GAtKO,IAuKL,0BACE,SAAC9B,EAAA,EAAD,CAAeC,UAAW4B,GAAaC,IAD/BA,EAKf,MAKJL,EAAMhB,WAAW/E,OAjLH,IAkLb,UAACuD,EAAA,EAAD,CACEC,GAAG,IACHL,QAAS,SAAAQ,GACPA,EAAEC,iBACF8B,GAAY,kBAAKD,GAAN,cAAiB,QAAUM,EAAMQ,KAAOR,EAAMe,MAAQrB,EAAS,QAAUM,EAAMQ,KAAOR,EAAMe,QACxG,EACD7F,UAAU,sBANZ,UAQGwE,EAAS,QAAUM,EAAMQ,KAAOR,EAAMe,MAAQ,aAAe,YAC9D,gBAAK7F,UAAU,kBAAkBoF,MAAO,CAAEC,WAAY,IAAtD,UACE,SAAC,EAAAzC,KAAD,CAAMC,KAAM2B,EAAS,QAAUM,EAAMQ,KAAOR,EAAMe,MAAQ/C,EAAAA,SAAAA,QAAmBA,EAAAA,SAAAA,WAAqBC,SAAU,YA3C1GgC,EAkDf,IAEFzF,EAAM4E,mBAAqBV,EAAclE,EAAM4E,oBAC9C,SAAC5C,EAAA,EAAD,WACE,4FAQf,G,kFCpPYG,GAAb,wCAAaA,EACYqE,YAAc,eAD1BrE,EAEYsE,UAAY,aAFxBtE,EAGYuE,QAAU,U,kFCHtB5F,GAAb,wCAAaA,EACY6F,cAAgB,oBAD5B7F,EAEY8F,gBAAkB,sBAF9B9F,EAGY+F,OAAS,Y,iFCHrBpF,GAAb,wCAAaA,EACYqF,MAAQ,YADpBrF,EAEYsF,WAAa,kBAFzBtF,EAGYuF,iBAAmB,wBAH/BvF,EAIYwF,aAAe,oBAJ3BxF,EAKYyF,aAAe,qBAL3BzF,EAMY0F,SAAW,eANvB1F,EAOY2F,SAAW,eAPvB3F,EAQY4F,QAAU,eARtB5F,EASY6F,iBAAmB,wBAT/B7F,EAUY8F,SAAW,eAVvB9F,EAWY+F,aAAe,qBAX3B/F,EAYYgG,UAAY,gBAZxBhG,EAaYoF,OAAS,aAbrBpF,EAcYiG,UAAY,iBAdxBjG,EAeYkG,gBAAkB,sB,kFCf9BhG,GAAb,wCAAaA,EACYiG,0BAA4B,sEADxCjG,EAEYkG,qBAAuB,gEAFnClG,EAIYmG,gBAAkB,sBAJ9BnG,EAKYoG,mBAAqB,yBALjCpG,EAOYqG,WAAa,yCAPzBrG,EAQYsG,UAAY,+CARxBtG,EASYuG,aAAe,mDAT3BvG,EAUYwG,aAAe,mDAV3BxG,EAYYyG,cAAgB,wC,mLCyCzC,GAAe1D,EAAAA,EAAAA,KACb,WAAsBC,GAAsD,IAAzE0D,EAAwE,EAAxEA,MACD,OAAO,kBACF1D,GADL,IAEE2D,aAAcD,EAAMC,cAEvB,IACD,SAAAxD,GAAQ,OACNC,EAAAA,EAAAA,KAAmB,UAEZwD,EAAAA,GAELzD,EALI,GAPV,EAlC0D,SAAA9E,GACxD,IAAQmB,EAAyFnB,EAAzFmB,YAAaD,EAA4ElB,EAA5EkB,OAAQoH,EAAoEtI,EAApEsI,aAAcE,EAAsDxI,EAAtDwI,gBAAiBpH,EAAqCpB,EAArCoB,MAAOG,EAA8BvB,EAA9BuB,UAAWD,EAAmBtB,EAAnBsB,MAAON,EAAYhB,EAAZgB,QAQrF,OANAb,EAAAA,WAAgB,WACVe,GACFsH,EAAgBpH,EAEnB,GAAE,CAACA,EAAOoH,EAAiBtH,KAG1B,UAACuH,EAAA,EAAD,CAAOvH,OAAQA,EAAQR,UAAU,+BAAjC,WACE,UAACgI,EAAA,EAAD,CAAaC,IAAI,MAAjB,WACE,yBAAMpH,KACN,wBAAKD,KACL,gBAAKZ,UAAU,aAAf,SAA6BM,QAE/B,SAAC4H,EAAA,EAAD,CAAWlI,UAAU,uBAArB,SACG4H,GACCA,EAAa/C,KAAI,SAACsD,EAAMC,GAAP,OACf,iBAAiBpI,UAAU,eAA3B,WACE,gBAAKA,UAAU,OAAf,SAAuBmI,EAAKE,QAC5B,gBAAKC,wBAAyB,CAAEC,OAAQJ,EAAKA,KAAKK,QAAQ,SAAU,eAF5DJ,EADK,OAOrB,SAACK,EAAA,EAAD,WACE,SAACxG,EAAA,EAAD,CAAQH,MAAM,UAAUI,QAASzB,EAAjC,oBAMP,G,0ECzCIiI,E,gTCCQC,EAAmC,SAACrJ,GAC/C,MAAsCG,EAAAA,UAAe,GAArD,eAAOmJ,EAAP,KAAoBC,EAApB,KACQC,EAAwBxJ,EAAxBwJ,QAASC,EAAezJ,EAAfyJ,WACXC,GAAqBF,EAAQG,eAC7BC,EAAa,kBAAML,GAAe,EAArB,EACnB,OACE,iCACIG,IACA,+BACE,eAAGrI,GAAG,UAAU6E,KAAI,mBAAcuD,GAAc/I,UAAU,OAA1D,WACE,iBAAMA,UAAU,UAAhB,sBACA,SAAC,EAAA4C,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,QAAkB9C,UAAU,uBAK7CgJ,IACC,iCACE,iBAAMrI,GAAG,eAAeX,UAAU,OAAOkC,QAAS,kBAAM2G,GAAe,EAArB,EAAlD,UACE,SAAC,EAAAjG,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,QAAkB9C,UAAW,gCAE3C,UAAC+H,EAAA,EAAD,CAAOvH,OAAQoI,EAAaO,OAAQ,kBAAMD,GAAN,EAApC,WACE,SAAClB,EAAA,EAAD,CAAamB,OAAQ,kBAAMD,GAAN,EAArB,sCACA,SAAChB,EAAA,EAAD,UAAYY,EAAQG,eAAiB,KAAO,+FAC5C,SAACR,EAAA,EAAD,WACE,SAACxG,EAAA,EAAD,CAAQH,MAAM,UAAUI,QAAS,kBAAMgH,GAAN,EAAjC,0BASb,E,sBCrCYE,EAAmC,SAAC9J,GAC/C,OACE,eACEkG,KAAK,IACLxF,UAAWV,EAAMI,KAAO,2BAA6B,cACrDwC,QAAS,SAAAQ,GACPA,EAAEC,iBACFD,EAAE2G,cAAcC,OAChBC,OAAOC,SAAS,EAAG,EACpB,EAPH,WASE,SAAC,EAAA5G,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,WACZ,iBAAM9C,UAAU,UAAhB,6BAGL,E,oBCTYyJ,EAA6C,SAAC,GAAkF,IAAhFjK,EAA+E,EAA/EA,SAAUkK,EAAqE,EAArEA,kBAAmBlJ,EAAkD,EAAlDA,OAAQmJ,EAA0C,EAA1CA,aAAcC,EAA4B,EAA5BA,YAAaC,EAAe,EAAfA,SACrHC,GAAQC,EAAAA,EAAAA,QAAuB,MAkBrC,OAfAtK,EAAAA,WAAgB,WACViK,GAAqBI,EAAME,SAC7BC,YAAW,WACT,GAAIH,EAAME,QAAS,CACjB,IAAME,EAAWJ,EAAME,QAAQG,QAAQ,sBACvC,GAAID,EAAU,CACZ,IAAME,EAAaN,EAAME,QAAQK,wBAC3BC,EAAgBJ,EAASG,wBAC/BH,EAASK,WAAaH,EAAWI,KAAOF,EAAcE,MAAQN,EAASO,YAAcL,EAAWM,OAAS,CAC1G,CACF,CACF,GAAE,GAEN,GAAE,CAAChB,IAEAlJ,GAEA,iBACER,WACG0J,EAAoB,WAAa,KACjCC,EAAe,gBAAkB,KACjCC,EAAc,aAAe,KAC7BpJ,EAAS,WAAa,IACvB,qBAEFmK,IAAKb,EARP,WAWE,UAACxH,EAAA,EAAD,CAAMtC,UAAU,sBAAsBuC,GAAI/C,EAASgG,KAAMoF,UAAW,EAAGhK,MAAOpB,EAASoB,MAAvF,WACE,gBAAKZ,UAAU,0BAAf,SAA0CR,EAASqL,gBACnD,iBAAK7K,UAAU,0BAAf,iBAA8CR,EAASsL,sBAEzD,gBAAK9K,UAAU,0BAAf,UAA2C6J,EAAW,IAAMrJ,IAAWhB,EAASuL,oBAI7E,uBAEV,EChDYC,EAA6C,SAAC,GAAmC,IAAjCC,EAAgC,EAAhCA,KAAMpB,EAA0B,EAA1BA,SAAU7J,EAAgB,EAAhBA,UAC3E,OACE,eAAIA,UAAWA,EAAY,qBAAuBA,EAAY,qBAA9D,UACE,6BACE,iBAAMA,UAAU,UAAhB,qBACE6J,EAAW,IAAMoB,EAAO,IAAM,IAAMA,MAI7C,E,sBCDYC,EAAmD,SAAC,GAA+E,IAA7EC,EAA4E,EAA5EA,WAAYC,EAAgE,EAAhEA,UAAWC,EAAqD,EAArDA,gBAAiBC,EAAoC,EAApCA,OAAQC,EAA4B,EAA5BA,UAAWC,EAAiB,EAAjBA,WAC5H,EAA8B/L,EAAAA,SAA0B,IAAxD,eAAOgM,EAAP,KAAgBC,EAAhB,KACA,EAA8CjM,EAAAA,SAA4B,CAAEgL,YAAa,IAAKF,WAAY,EAAGoB,YAAa,MAA1H,eAAOC,EAAP,KAAwBC,EAAxB,KAEApM,EAAAA,WAAgB,WACd,IAQMqM,GAPJV,EAAUrM,OAAS,EACfqM,EAAUvG,KAAI,WAEZ,OADqBkH,KAAKC,MAAsB,GAAhBD,KAAKE,UACf,CACvB,IACDb,EAAUvG,KAAI,kBAAM,CAAN,KAEmBA,KAAI,SAACnC,EAAGvD,EAAG+M,GAAP,OAAcxJ,GAAKvD,EAAI,IAAM+M,EAAE/M,EAAI,IAAQuD,GAAW,IAANvD,CAAhD,IAC3CuM,EAAWI,EACZ,GAAE,CAACV,IAEJ3L,EAAAA,WAAgB,WACdoM,EAAmBV,EACpB,GAAE,CAACA,IAEJ,IAAMgB,EAAqB,SAACzJ,GAC1B,IAAM0J,EAA6B,CACjC7B,WAAY7H,EAAE,GACd+H,YAAa/H,EAAE,GAAKA,EAAE,GACtBiJ,YAAaR,EAAWQ,aAG1BN,EAAgBe,EACjB,EA6BD,OACE,iBAAKpM,UAAU,mBAAf,WACE,oBAAQY,MAAM,UAAUZ,UAAU,kBAAkBkC,QAAS,kBAAMoJ,GAAQ,GAAd,EAAmBe,UAAWd,EAA3F,WACE,SAAC,EAAA3I,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,SACZ,iBAAM9C,UAAU,UAAhB,yBAEF,iBAAKA,UAAU,iBAAf,UAjC2B,SAACoL,GAC9B,IAAMkB,EAAUP,KAAKQ,IAAInB,EAAUrM,OAAQ,IACrCyN,EAAW,IAAMF,EACjBG,EAAKD,EAAWF,EACtB,OAAKI,MAAMD,IAoBC,yBAlBR,gBAAKE,MAAM,6BAA6BC,QAAQ,eAAe5M,UAAU,QAAzE,UACE,eAAG6M,KAAK,eAAeC,OAAO,eAA9B,WACE,iBAAMC,GAAG,KAAKC,GAAG,KAAKP,GAAIA,EAAIQ,GAAG,QAChC,OAAIC,MAAMZ,IAAUzH,KAAI,SAACnC,EAAGvD,GAC3B,IAAMgO,EAAIhO,EAAIqN,EACd,OAAIf,EAAQtM,IAER,UAAC,WAAD,YACE,iBAAMI,EAAG,IAAM4N,EAAI,6BACnB,iBAAM5N,EAAG,IAAM4N,EAAI,2BAA4BC,QAAS,MACxD,iBAAM7N,EAAG,IAAM4N,EAAI,+BAAgCN,KAAK,YAHrC,KAAO1N,IAMpB,mBAAuBkO,GAAIF,EAAGG,GAAG,KAAKC,EAAG,GAA5B,KAAOpO,EACjC,QAKV,CASMqO,CAAuBpC,IACxB,gBAAKpL,UAAU,gBAAf,UACE,SAAC,IAAD,CACEqM,WAAYd,GAAaC,GACzBiC,gBAAgB,EAChBlB,IAAK,EACLmB,IAAK9B,EAAgBD,YACrBgC,OAAK,EACLC,YAAY,EACZC,SAAU,SAAAnL,GACR,IAAIoL,EAAWpL,EAAE,GAAKA,EAAE,GAClBqL,EAAI,CACRtD,YAAaqD,EACbvD,WAAY7H,EAAE,GACdiJ,YAAaC,EAAgBD,aAG/BE,EAAmBkC,GAGfD,IAAalC,EAAgBnB,aAAa0B,EAAmBzJ,EAClE,EACDsL,cAAe,SAAAtL,GACb,IAAIoL,EAAWpL,EAAE,GAAKA,EAAE,GACP,IAAboL,IAAgBA,EAAW,GAE3BA,IAAalC,EAAgBnB,aAAa0B,EAAmB,CAACzJ,EAAE,GAAIA,EAAE,GAAKoL,GAChF,EACDG,MAAO,CAACrC,EAAgBrB,WAAYqB,EAAgBrB,WAAaqB,EAAgBnB,qBAIvF,oBAAQ7J,MAAM,WAAWZ,UAAU,kBAAkBkC,QAAS,kBAAMoJ,EAAO,GAAb,EAAkBe,UAAWb,EAA3F,WACE,SAAC,EAAA5I,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,QACZ,iBAAM9C,UAAU,UAAhB,2BAIP,E,WCzGYkO,EAA6D,SAAC,GAA+D,IAA7D1N,EAA4D,EAA5DA,OAAQ2N,EAAoD,EAApDA,kBAAmBC,EAAiC,EAAjCA,cAAeC,EAAkB,EAAlBA,YACrH,EAA8D5O,EAAAA,WAA9D,eAAO6O,EAAP,KAAgCC,EAAhC,KACMC,EAAa/O,EAAAA,OAA4B,MAG/CA,EAAAA,WAAgB,WACd,IAAIuK,EAAUoE,EAAcK,QAAO,SAAAtB,GAAC,uBAAIA,EAAEuB,oBAAN,aAAI,EAAgBhF,iBAApB,KAChCM,EAAQjL,OAAS,IAGnBiL,EAAUqE,EAAYI,QAAO,SAAAtB,GAAC,uBAAIA,EAAEuB,oBAAN,aAAI,EAAgBhF,iBAApB,KAClB3K,OAAS,IAHrBwP,EAA2BvE,EAAQ,GAAG0E,aAKzC,GAAE,CAACN,EAAeC,IAGnBpE,YAAW,WACLuE,EAAWxE,SACbwE,EAAWxE,QAAQ2E,eAAe,CAAEC,MAAO,QAASC,SAAU,QAEjE,GAAE,IAEH,IAAMC,EAAqB,SAACC,EAAqB3G,GAAmB,IAAD,EAC3DwB,EAAoD,MAAtC,UAAAmF,EAAKL,oBAAL,eAAmBM,gBACjCC,OAAmC9M,IAAtB4M,EAAKL,aAClBQ,OAA6B/M,IAAnB4M,EAAKI,UACrB,OAAIF,EAEAF,GACAA,EAAKL,eACH,eACE1O,UACE,iBACC+O,EAAKL,aAAahF,kBAAoB,yBAA2B,KACjEqF,EAAKL,aAAa/E,aAAe,8BAAgC,IAGpEgB,IAAKoE,EAAKL,aAAahF,kBAAoB8E,EAAa,KAP1D,UASE,UAACnN,EAAA,EAAD,YACE,UAACC,EAAA,EAAD,CAAKC,GAAI,EAAGvB,UAAU,iDAAtB,WACE,gBAAKA,UAAU,qBAAf,SAAqC+O,EAAKL,aAAa7N,aAEvD,SAACgB,EAAA,EAAD,CAAO7B,UAAW,8BAAgC4J,EAAc,oCAAsC,mCAAtG,SACGmF,EAAKL,aAAa7D,gBAErB,SAAChJ,EAAA,EAAD,CAAO7B,UAAW+O,EAAKL,aAAaU,WAAa,iBAAmB,GAApE,SAAyEL,EAAKL,aAAaU,WAAa,YAAc,iBACtH,yBAAML,EAAKL,aAAapO,cAE1B,SAACgB,EAAA,EAAD,CAAK0D,GAAI,EAAGhF,UAAW,sBAAwB4J,EAAc,gCAAkC,OAC/F,UAACtI,EAAA,EAAD,CAAK0D,GAAI,GAAIzD,GAAI,EAAGvB,UAAU,iCAA9B,WACE,iBAAKA,UAAU,2CAAf,WACE,gBAAKA,UAAU,qBAAf,SAAqC+O,EAAKL,aAAa7N,aACvD,4BACE,SAACgB,EAAA,EAAD,CAAO7B,UAAW,+BAAiC4J,EAAc,oCAAsC,IAAvG,SACGmF,EAAKL,aAAa7D,gBAErB,SAAChJ,EAAA,EAAD,CAAO7B,UAAW,QAAU+O,EAAKL,aAAaU,WAAa,mBAAqB,IAAhF,SACGL,EAAKL,aAAaU,WAAa,YAAc,uBAIpD,gBAAKpP,UAAU,oBAAf,SAAoC+O,EAAKL,aAAapO,WACtD,SAACgC,EAAA,EAAD,CAAMC,GAAIwM,EAAKL,aAAalJ,KAA5B,UACE,yBAAMuJ,EAAKL,aAAa9N,iBA5BzB,iBAAmBmO,EAAKL,aAAazD,KAAO,IAAM8D,EAAKL,aAAa5D,eAAiB,IAAM1C,GAmCpG8G,EAEAH,GACAA,EAAKI,YACH,eAAInP,UAAW,oCAAf,UACE,UAACqB,EAAA,EAAD,YACE,SAACC,EAAA,EAAD,CAAK0D,GAAI,EAAGhF,UAAU,yCACtB,SAACsB,EAAA,EAAD,CAAK0D,GAAI,EAAGhF,UAAU,wBACtB,SAACsB,EAAA,EAAD,CAAKC,GAAI,EAAGyD,GAAI,GAAIhF,UAAU,gCAA9B,UACE,yBAAM+O,EAAKI,UAAUE,qBAL8B,uBAAyBjH,IAYjF,SAAC,WAAD,GAAqB,cAAgBA,EAC7C,EAED,OACE,UAACL,EAAA,EAAD,CAAOvH,OAAQA,EAAQR,UAAU,kCAAjC,WACE,UAACgI,EAAA,EAAD,CAAamB,OAAQgF,EAArB,+BAAoDG,QAApD,IAAoDA,OAApD,EAAoDA,EAAyBzN,UAA7E,QACA,SAACqH,EAAA,EAAD,CAAWlI,UAAU,iCAArB,UACE,gBAAIA,UAAU,wBAAd,WACE,gBAAIA,UAAU,wCAAd,WACE,SAACsB,EAAA,EAAD,CAAK0D,GAAI,EAAGhF,UAAU,iDAAtB,oBAGA,SAACsB,EAAA,EAAD,CAAK0D,GAAI,EAAGhF,UAAU,wBACtB,SAACsB,EAAA,EAAD,CAAK0D,GAAI,GAAIzD,GAAI,EAAGvB,UAAU,mBAA9B,UACE,gBAAKA,UAAU,2CAAf,uBANsD,uBASzDoO,EACEK,QAAO,SAAAtB,GAAC,YAAmBhL,IAAfgL,EAAEmC,QAAN,IACRC,QACAC,UACA3K,IAAIiK,GACNT,EACEI,QAAO,SAAAtB,GAAC,YAAmBhL,IAAfgL,EAAEmC,QAAN,IACRC,QACAC,UACA3K,IAAIiK,SAGX,SAACrG,EAAA,EAAD,WACE,SAACxG,EAAA,EAAD,CAAQH,MAAM,UAAUI,QAASiM,EAAjC,qBAMP,EC3FYsB,EAAqC,SAAC,GAA2E,IAAzErE,EAAwE,EAAxEA,UAAWsE,EAA6D,EAA7DA,2BAA4BC,EAAiC,EAAjCA,2BACpFC,EAAcnQ,EAAAA,OAA6B,MACjD,EAAsCA,EAAAA,SAAgC,IAAtE,eAAO4O,EAAP,KAAoBwB,EAApB,KACA,EAA0CpQ,EAAAA,SAAgC,IAA1E,eAAO2O,EAAP,KAAsB0B,EAAtB,KACA,EAAoCrQ,EAAAA,cAAmC0C,GAAvE,eAAO4N,EAAP,KAAmBC,EAAnB,KACA,EAAsCvQ,EAAAA,SAA6B,CAAEe,QAAQ,IAA7E,eAAOyP,EAAP,KAAoBC,EAApB,KACA,EAAkCzQ,EAAAA,SAAyB,IAA3D,eAAO0Q,EAAP,KAAkBC,EAAlB,KACA,EAA4C3Q,EAAAA,SAA8B,MAA1E,eAAO4Q,EAAP,KAAuBC,EAAvB,KACA,EAAoC7Q,EAAAA,SAA4B,CAAEgL,YAAa,EAAGF,WAAY,EAAGoB,YAAa,MAA9G,eAAOR,EAAP,KAAmBoF,EAAnB,KACA,EAAgD9Q,EAAAA,SAA4B,CAAEgL,YAAa,EAAGF,WAAY,EAAGoB,YAAa,MAA1H,eAAO6E,EAAP,KAAyBC,EAAzB,KACA,GAAgChR,EAAAA,SAAuB,IAAvD,iBAAOoK,GAAP,MAAiB6G,GAAjB,MAEA,GAAsCjR,EAAAA,SADX,IAC3B,iBAAOkR,GAAP,MAAoBC,GAApB,MAEMC,GAAc,GAIpBpR,EAAAA,WAAgB,WACd,IAAMqR,EAAyB,SAACtR,GAC9B,MAAO,CACLkP,aAAclP,EAEjB,EACKuR,EAAqB,SAAC9F,EAAc+F,GACxC,MAAO,CACL1B,SAAU,CAAErE,KAAMA,EAAMgG,gBAAiBD,GAE5C,EACKE,EAAsB,SAACC,GAC3B,MAAO,CACLhC,UAAW,CAAEE,aAAc8B,GAE9B,EAED,GAAI/F,GAAaA,EAAUrM,OAAS,EAAG,CACjCqM,EAAU,GAAGgG,UACfvB,EAAe,CAACkB,EAAmB3F,EAAU,GAAGH,MAAM,GAAQ6F,EAAuB1F,EAAU,MAG3FA,EAAU,GAAGiG,kBAAoBjG,EAAU,GAAGiG,iBAAiBtS,OAAS,EAC1E8Q,EAAe,CAACkB,EAAmB3F,EAAU,GAAGH,MAAM,GAAQiG,EAAoB9F,EAAU,GAAGiG,iBAAiB,MAC7GxB,EAAe,CAACkB,EAAmB3F,EAAU,GAAGH,MAAM,KAG7D,IAAMqG,EAAqB,UAAG,SAAxBA,EACJC,EACAvH,EACAwH,GAH4B,iFAKxBD,GAAavH,EAAQL,aALG,iBAOtB8H,GAAmB,EACdrJ,EAAQmJ,EAAStG,KAAO,EARP,YAQU7C,GAAS4B,EAAQiB,MAR3B,oBASpB7C,IAAUmJ,EAAStG,KAAO,GAAK7C,IAAU4B,EAAQiB,KAT7B,gBAUtB,OAVsB,SAUhB8F,EAAmB3I,GAAO,GAVV,iCAWZqJ,EAXY,iBAYtB,OAZsB,UAYhBV,EAAmB3I,GAAO,GAZV,QAatBqJ,GAAmB,EAbG,QAQiCrJ,IARjC,iCAkBxB4B,QAlBwB,IAkBxBA,IAAAA,EAASqH,iBAlBe,iBAoBjBjJ,EAAQoJ,EAAmB,EAAI,EApBd,aAoBiBpJ,EAAQ4B,EAAQqH,iBAAiBtS,QApBlD,iBAqBxB,OArBwB,UAqBlBmS,EAAoBlH,EAAQqH,iBAAiBjJ,IArB3B,QAoB0DA,IApB1D,wBAyB5B,OAzB4B,UAyBtB0I,EAAuB9G,GAzBD,kBA2BxBA,QA3BwB,IA2BxBA,IAAAA,EAAS0H,gBA3Be,iBA4BjBtJ,EAAQ,EA5BS,aA4BNA,EAAQ4B,EAAQ0H,gBAAgB3S,QA5B1B,iBA6BxB,OA7BwB,UA6BlBmS,EAAoBlH,EAAQ0H,gBAAgBtJ,IA7B1B,QA4BkCA,IA5BlC,qDAAxBkJ,EAAwB,IAkCxBK,EAAQvG,EAAUnM,SAAuB,SAACO,EAAU4I,GACxD,GAAc,IAAVA,IAAgB5I,EAAS4R,UAC3B,OAAOlE,MAAM0E,KAAKN,OAAsBnP,EAAW3C,GAAU,IACxD,GAAI4I,EAAQ,EAAG,CAGpB,IAFA,IACImJ,EADApS,EAAIiJ,EAEDjJ,KAAM,IACXoS,EAAWnG,EAAUjM,IACPwK,eAEhB,OAAOuD,MAAM0E,KAAKN,EAAsBC,EAAU/R,GAAU,GAC7D,CACD,MAAO,EACR,IAEDsQ,EAAiB6B,EAAME,OAAO,CAAEC,WAAW,IAC5C,MACChC,EAAiB,IACjBD,EAAe,IAEjBe,GAxFyB,GAyF1B,GAAE,CAACxF,EAAD,OAAYA,QAAZ,IAAYA,OAAZ,EAAYA,EAAWrM,SAG1BU,EAAAA,WAAgB,WACd,GAAImQ,EAAY5F,SAAWoE,EAAcrP,OAAS,EAAG,CAAC,IAAD,EAI/CgT,GAAc,UAAAnC,EAAY5F,eAAZ,eAAqBS,aAAc2D,EAAcrP,OAE/DgT,EAAcpB,GAAaoB,EAAcpB,GACpCoB,EAAcpB,IAAaC,GAAemB,GAE/CA,EAlGmB,KAkGeA,EAlGf,IAoGnBA,EAAclB,KAAakB,EAAclB,IAE7CH,GAAYqB,EACb,CACF,GAAE,CAAC3D,EAAeA,EAAcrP,OAAQ4R,KAGzClR,EAAAA,WAAgB,WACd,IAAMuS,EAAS3D,EACZI,QAAO,SAAAtB,GAAC,OAAIA,EAAEgC,SAAN,IACRtK,KAAI,SAAAsI,GAAC,mCAAIA,EAAEgC,iBAAN,aAAI,EAAaE,oBAAjB,QAAiC,EAAjC,IACLwC,OAAOzD,EAAcK,QAAO,SAAAtB,GAAC,OAAIA,EAAEgC,SAAN,IAAiBtK,KAAI,SAAAsI,GAAC,mCAAIA,EAAEgC,iBAAN,aAAI,EAAaE,oBAAjB,QAAiC,EAAjC,KACtDe,EAAa4B,EACd,GAAE,CAAC3D,EAAaD,IAEjB,IAAM6D,IAAgCC,EAAAA,EAAAA,cAAY,WAahD,GAAItC,EAAY5F,QAAS,CACvB,IAAMtH,EAAIkN,EAAY5F,QAEtByG,EAAoB,CAClBhG,YAAa/H,EAAE+H,YACfF,WAAY7H,EAAE6H,WACdoB,YAAajJ,EAAEiJ,aAElB,EACDwG,EAAAA,EAAAA,IArBqC,WACnC,GAAIvC,EAAY5F,QAAS,CACvB,IAAMtH,EAAIkN,EAAY5F,QAEtBuG,EAAc,CACZ9F,YAAa/H,EAAE+H,YACfF,WAAY7H,EAAE6H,WACdoB,YAAajJ,EAAEiJ,aAElB,CACF,GAWsC,GACxC,GAAE,IAGHlM,EAAAA,WAAgB,WACVmQ,EAAY5F,UACd4F,EAAY5F,QAAQoI,SAAWH,GAElC,GAAE,CAACA,KAGJxS,EAAAA,WAAgB,WACd,GAAImQ,EAAY5F,QAAS,CACvB,GAA+B,IAA3BmB,EAAWV,aAAqBU,EAAWV,cAAgBmF,EAAY5F,QAAQS,YAAa,CAC9F,IAAM4H,EAAkBlH,EAAWV,YAAcU,EAAWQ,YACtD2G,EAAiBlE,EAAcrP,OAASsT,EAC1CE,EAAY3C,EAAY5F,QAAQS,YAAc6H,EAElDhC,GAAmBnF,EAAWZ,WAAa,GAAMY,EAAWV,aAAeU,EAAWQ,aAElF4G,EAAY5B,KAAa4B,EAAY5B,IAErC4B,EAAY1B,KAAa0B,EAAY1B,IAEzCH,GAAY3E,KAAKyG,MAAMD,GACxB,CACG3C,EAAY5F,QAAQO,YAAcY,EAAWZ,aAC/CqF,EAAY5F,QAAQO,WAAaY,EAAWZ,WAE/C,CACF,GAAE,CAACY,EAAYiD,EAAcrP,OAAQ4R,KAGtClR,EAAAA,WAAgB,WACd,IAAMgT,EAAe1G,KAAKyG,MAAM3I,GAAWuE,EAAcrP,QACzDS,SAASkT,gBAAgBtN,MAAMuN,YAAY,2BAA4BF,EAAe,MACtFjT,SAASkT,gBAAgBtN,MAAMuN,YAAY,iBAAkB9I,GAAW,MAEpEwG,GAAkBT,EAAY5F,SAChC4F,EAAY5F,QAAQO,WAAaqF,EAAY5F,QAAQ2B,YAAc0E,EAAmD,GAAlCT,EAAY5F,QAAQS,YACxG6F,EAAkB,OACTV,EAAY5F,SAA8C,IAAnC4F,EAAY5F,QAAQO,YACpD0H,IAEH,GAAE,CAACpI,GAAUwG,EAAgBjC,EAAcrP,OAAQkT,KAgBpD,GAAI7G,EAAW,CAAC,IAAD,GACPG,GAAY1B,GAAW8G,IAAevC,EAAcrP,OAAS,EAC7DyM,GAAa3B,GAAWgH,IAAezC,EAAcrP,OAAS,EAC9D6T,GAAiBxE,EAAcK,QAAO,SAAAtB,GAAC,OAAIA,EAAEgC,SAAN,IAAiBpQ,OAAS,EACjE8T,GAAuBzE,EAAc0E,WAAU,SAAA3F,GAAC,uBAAIA,EAAEuB,oBAAN,aAAI,EAAgBhF,iBAApB,IAChDqJ,GAAU3E,EAAcK,QAAO,SAAAtB,GAAC,aAAuC,MAAnC,UAAAA,EAAEuB,oBAAF,eAAgBM,eAApB,IAChCgE,GAAUD,GAAQA,GAAQhU,OAAS,GACnCkU,GAAkBD,IAAW5E,EAAc8E,QAAQF,IAAWH,GAEpE,OACE,iCACE,iBAAK7S,UAAU,WAAf,WACE,eAAIA,UAAU,UAAd,yBAEA,iBAAKA,UAAU,6DAAf,WACE,4BACE,SAACiC,EAAA,EAAD,CAAQH,MAAM,YAAY9B,UAAU,uBAAuBkC,QAASyN,EAApE,0BAGCsD,KACC,SAAC3Q,EAAA,EAAD,CAAMC,GAAIyQ,GAAQtE,aAAclJ,KAAMxF,UAAU,oCAAhD,mCAID4S,KACC,SAAC,EAAAO,WAAD,CACEtQ,KAAMC,EAAAA,SAAAA,kBACNhB,MAAM,YACN9B,UAAU,kBACVoT,WAAW,EACXxS,MAAM,8FACNsB,QAAS,WACPgO,EAAe,CAAE1P,QAAQ,EAAMwR,OAAQ7B,GACxC,EARH,UAUE,iBAAMnQ,UAAU,UAAhB,+GAKN,SAAC,EAAD,CACEsL,OAvDG,SAAC+H,GACd,GAAIzD,EAAY5F,QAAS,CACvB,IAAMtH,EAAIkN,EAAY5F,QACtBsG,GAAmB5N,EAAE6H,WAAa,GAAM7H,EAAE+H,aAAe/H,EAAEiJ,YAC5D,CACD,IAAI2H,EAAezJ,GAAWwJ,EAC1BC,EAAe3C,KAAa2C,EAAe3C,IAE3C2C,EAAezC,KAAayC,EAAezC,IAC/CH,GAAY3E,KAAKyG,MAAMc,IAEvBrB,IACD,EA4CW7G,UAAWA,EACXD,WAAYqF,EACZjF,UAAWA,GACXC,WAAYA,GACZH,gBAAiBkF,QAIrB,iBAAKvQ,UAAU,mBAAf,WACE,gBAAKA,WAAYwQ,GAAoBA,EAAiBjG,WAAa,EAAI,YAAc,IAAM,iBAA3F,SACG8D,EAAYtP,OAAS,GAAKsP,EAAY,GAAGiB,WACxC,iCACE,SAACtE,EAAD,CACEC,KAAMoD,EAAY,GAAGiB,SAASrE,KAC9BpB,SAAUA,GACV7J,UAAWqO,EAAYtP,OAAS,GAAKsP,EAAY,GAAGc,UAAY,SAAW,KAE5Ed,EAAYtP,OAAS,GAAKsP,EAAY,GAAGK,eACxC,iBAAK1O,WAAYqO,EAAY,GAAGK,aAAahF,kBAAoB,WAAa,IAAM,gBAApF,WACE,SAACpH,EAAA,EAAD,CAAMtC,UAAU,eAAeuC,GAAI8L,EAAY,GAAGK,aAAalJ,KAAM5E,MAAOyN,EAAY,GAAGK,aAAa7N,UAAxG,UACE,gBAAKb,UAAU,UAAf,SAA0BqO,EAAY,GAAGK,aAAa7N,eAExD,SAAC,EAAD,CACErB,SAAU6O,EAAY,GAAGK,aACzB/E,cAAc,EACdD,kBAAmB2E,EAAY,GAAGK,aAAahF,kBAC/ClJ,QAAQ,EACRoJ,aAAa,EACbC,SAAUA,QAIfwE,EAAYtP,OAAS,GAAKsP,EAAY,GAAGc,YACxC,gBAAKnP,UAAU,sBAAf,UACE,cACEA,UAAU,eACVwF,KAAK,IACL5E,MAAOyN,EAAY,GAAGc,UAAUE,aAChCnN,QAAS,SAAAQ,GACPA,EAAEC,iBACFuN,EAAe,CAAE1P,QAAQ,EAAMwR,OAAQ,CAAC3D,EAAY,GAAGc,UAAWE,eACnE,EAPH,UASE,gBAAKrP,UAAU,UAAf,SAA0BqO,EAAY,GAAGc,UAAUE,yBAQ/D,gBAAKrP,UAAU,oBAAoB4K,UAAW,EAAGD,IAAKiF,EAAtD,UACE,eAAI5P,UAAW,mBAAf,SACGoO,EAAcvJ,KAAI,SAACkK,EAAM3G,GAAW,IAAD,IAC5BmL,EAAgB,UAAGnF,EAAchG,EAAQ,UAAzB,aAAG,EAA0BsG,aAC7C8E,EAAoB,UAAGpF,EAAchG,EAAQ,UAAzB,aAAG,EAA0BsG,aACvD,GAAIK,EAAKO,SACP,OAAKP,EAAKO,SAAS2B,iBAIf,eAAIjR,UAAU,6BAAd,UACE,2BACE,iBAAMA,UAAU,UAAhB,oBAF4C,8BAAgC+O,EAAKO,SAASrE,OAHzF,SAACD,EAAD,CAAcC,KAAM8D,EAAKO,SAASrE,KAAMpB,SAAUA,IAAe,sBAAwBkF,EAAKO,SAASrE,MAU3G,GAAI8D,EAAKI,UACd,OACE,eAAInP,UAAU,sBAAd,UACE,cACEA,UAAU,eACVwF,KAAK,IACL5E,MAAOmO,EAAKI,UAAUE,aACtBnN,QAAS,SAAAQ,GACPA,EAAEC,iBACFuN,EAAe,CAAE1P,QAAQ,EAAMwR,OAAQ,CAACjD,EAAKI,UAAWE,eACzD,EAPH,UASE,gBAAKrP,UAAU,UAAf,SAA0B+O,EAAKI,UAAUE,kBAVJ,uBAAyBjH,GAc/D,GAAI2G,EAAKL,aAAc,CAC5B,IAAM9E,EAAmD,KAArCmF,EAAKL,aAAaM,eACtC,OACE,gBACEhP,WACG4J,EAAc,aAAe,KAC7BmF,EAAKL,aAAahF,kBAAoB,WAAa,KACnDqF,EAAKL,aAAa/E,aAAe,gBAAkB,IACpD,gBALJ,WASE,SAACrH,EAAA,EAAD,CACEC,GAAIwM,EAAKL,aAAalJ,KACtBxF,UAAU,eACVY,MAAOmO,EAAKL,aAAa7N,UACzBqB,QAAS,SAAAQ,GACH+Q,EAAAA,KACF/Q,EAAEC,iBACFqN,EAAc5H,GAEjB,EACDsL,aAAc,WACZ1D,EAAc5H,EACf,EACDuL,QAAS,WACP3D,EAAc5H,EACf,EAfH,UAiBE,gBAAKpI,UAAU,UAAf,SAA0B+O,EAAKL,aAAa7N,eAE9C,SAAC,EAAD,CACErB,SAAUuP,EAAKL,aACfhF,kBAAmBqF,EAAKL,aAAahF,kBACrCC,aAAcoF,EAAKL,aAAa/E,aAChCC,YAAaA,EACbpJ,OACEqJ,IAAYgH,KACVd,GAAchB,EAAKL,aAAahF,mBAClCqG,IAAe3H,GACdyB,GAAW,IAC2B,KAArCkF,EAAKL,aAAaM,gBAClBe,IAAe3H,EAAQ,KACvB,OAACmL,QAAD,IAACA,GAAAA,EAAkB7J,oBACnBqG,IAAe3H,EAAQ,KACvB,OAACoL,QAAD,IAACA,GAAAA,EAAsB9J,sBAErB6J,GACoC,KAApCA,EAAiBvE,gBACjBwE,GACwC,KAAxCA,EAAqBxE,gBAG3BnF,SAAUA,OA3CP,iBAAmBkF,EAAKL,aAAazD,KAAO,IAAM8D,EAAKL,aAAa5D,eAAiB,IAAM1C,EA+CrG,CAAM,OAAI2G,EAAK+C,WAEZ,gBAAI9R,UAAU,sBAAd,WACE,gBAAKA,UAAU,kBACf,0BAAO6J,GAAW,IAAM,YAFc,wBAK9B,uBACf,eAMT,UAAC9B,EAAA,EAAD,CAAOvH,OAAQyP,EAAYzP,OAA3B,WACE,SAACwH,EAAA,EAAD,CAAamB,OAAQ,kBAAM+G,EAAe,CAAE1P,QAAQ,GAA/B,EAArB,4BACA,UAAC0H,EAAA,EAAD,CAAWlI,UAAU,uBAArB,UACGiQ,EAAY+B,SAAW7B,IACtB,8NAGE,mBACA,sBAGJ,mCACGF,EAAY+B,cADf,cACG,GAAoBnN,KAAI,SAAC3F,EAAGC,GAC3B,OAAO,wBAAiCD,GAAxB,kBAAoBC,EACrC,UAGL,SAACsJ,EAAA,EAAD,WACE,SAACxG,EAAA,EAAD,CACEH,MAAM,UACNI,QAAS,WACPgO,EAAe,CAAE1P,QAAQ,GAC1B,EAJH,uBAWJ,SAAC,EAAD,CACEA,OAAQkP,EACRvB,kBAAmBwB,EACnBvB,cAAeA,EACfC,YAAaA,MAIpB,CAAM,OAAO,uBACf,EC/cYuF,EAAmD,SAAC,GAM1D,IALLC,EAKI,EALJA,gBACAC,EAII,EAJJA,gBACAlM,EAGI,EAHJA,aACAmM,EAEI,EAFJA,kBACAC,EACI,EADJA,sBAGErT,EAcEkT,EAdFlT,GACAE,EAaEgT,EAbFhT,UACAD,EAYEiT,EAZFjT,MACAqT,EAWEJ,EAXFI,aACAC,EAUEL,EAVFK,eACAC,EASEN,EATFM,UACAC,EAQEP,EARFO,aACAtL,EAOE+K,EAPF/K,QACAuL,EAMER,EANFQ,SACA/T,EAKEuT,EALFvT,QACAkC,EAIEqR,EAJFrR,aACA8R,EAGET,EAHFS,oBACAC,EAEEV,EAFFU,iBACAvF,EACE6E,EADF7E,eAGF,EAA8CvP,EAAAA,UAAe,GAA7D,eAAO+U,EAAP,KAAwBC,EAAxB,KACA,EAAwChV,EAAAA,UAAe,GAAvD,eAAOiV,EAAP,KAAqBC,EAArB,KACA,EAAwClV,EAAAA,UAAe,GAAvD,eAAOmV,EAAP,KAAqBC,EAArB,KACA,EAAoEpV,EAAAA,UAAe,GAAnF,gBAAOiQ,GAAP,MAAmCoF,GAAnC,MACA,GAAwCrV,EAAAA,UAAe,GAAvD,iBAAOsV,GAAP,MAAqBC,GAArB,MACA,GAAoDvV,EAAAA,UAAe,GAAnE,iBAAOwV,GAAP,MAA2BC,GAA3B,MACA,GAAwDzV,EAAAA,UAAe,GAAvE,iBAAO0V,GAAP,MAA6BC,GAA7B,MACA,GAAsC3V,EAAAA,UAAe,GAArD,iBAAO4V,GAAP,MAAoBC,GAApB,MACA,GAA0C7V,EAAAA,cAAgD0C,GAA1F,iBAAOoT,GAAP,MAAsBC,GAAtB,MACMC,GAAwBhW,EAAAA,OAA6B,MACrDiW,GAA6BjW,EAAAA,OAA+B,MAC5DkW,GAAiBlW,EAAAA,OAA6B,MAEpDA,EAAAA,WAAgB,WACd,IAAMmW,EAAW,WACXH,GAAsBzL,SAAW2L,GAAe3L,UACrC2L,GAAe3L,QAAQK,wBAE3BwL,KAAO,IACdJ,GAAsBzL,QAAQ8L,UAAUC,IAAI,iCAC5CT,IAAe,KAEfG,GAAsBzL,QAAQ8L,UAAUE,OAAO,iCAC/CV,IAAe,IAGpB,EAKD,OAFA/L,OAAO0M,oBAAoB,SAAUL,GACrCrM,OAAO2M,iBAAiB,SAAUN,EAAU,CAAEO,SAAS,IAChD,kBAAM5M,OAAO0M,oBAAoB,SAAUL,EAA3C,CACR,GAAE,IAEH,IAAMQ,GAAsB,WACtBb,IAAiBA,GAAc5U,KAAO4U,GAAcrG,UAEjDuE,EAAAA,KAAUlK,OAAO8M,SAASC,KAAOf,GAAc5U,IAGhD+U,GAA2B1L,SAAS0L,GAA2B1L,QAAQV,OAE3E0K,EAAsBuB,GAAc5U,IAEvC,EAEK4V,GAAqB,WACzB9B,GAAoBD,EACrB,EAEKgC,GAAiB,WACrBxB,IAAiBD,GAClB,EAEK0B,GAA4B,WAChCvB,IAAuBD,GACxB,EAEKyB,GAA8B,WAClCtB,IAAyBD,GAC1B,EAiJKwB,GAAsB,CAAC,KAAM,KAAM,MAAMvT,SAAS4L,GAgBxD,OACE,iBAAKrE,IAAKgL,GAAgB3V,UAAU,8EAApC,WACE,gBAAK2K,IAAK8K,GAAuBzV,UAAU,4BAA3C,UACE,iBAAKA,UAAU,oDAAf,WACE,0BACE,gBAAKA,UAAU,6BAAf,SAA6Ca,MAE9C8V,KACC,gBAAK3W,UAAU,4CAAf,UACE,iBAAKA,UAAU,uCAAf,WACE,kBACE,aAAW,yBACXY,MAAK,UAAK2U,IAAiBA,GAAcrG,QAA/B,mBAAqDqG,GAAcqB,UAAnE,gBAA6F,IACvGtR,KAAK,OACLtF,UAAS,uBAAkBuV,IAAiBA,GAAcrG,QAAU,aAAeqG,GAAgB,WAAa,IAChHsB,YAAY,qBACZC,QAtCiB,SAACpU,GAClB,UAAVA,EAAEqU,KACJX,IAEH,EAmCevI,SAAU,SAAAnL,GAAC,OA/DO,SAACkU,GACjC,GAAKA,EAAL,CAKA,IAAIrB,EAAqC,CACvCrG,SAAS,EACTvO,QAAIwB,EACJyU,UAAWA,GAGPI,EAAcJ,EAAUpO,QAAQ,IAAIyO,OAAO,IAAK,KAAM,IACxDzX,SAAS0X,eAAe,IAAMF,GAChCzB,EAAc5U,GAAK,IAAMqW,EAChBxX,SAAS0X,eAAe,MAAQF,GACzCzB,EAAc5U,GAAK,MAAQqW,EAE3BzB,EAAcrG,SAAU,EAG1BsG,GAAiBD,EAjBhB,MAFCC,QAAiBrT,EAoBpB,CAyC8BgV,CAA0BzU,EAAEgD,OAAOuI,MAAvC,EACXmJ,UAAU,SACVzM,IAAK+K,GACL/B,QAxEiB,WAC3B+B,GAA2B1L,SAC7B0L,GAA2B1L,QAAQqN,QAEtC,KAsEa,SAAC,EAAAlE,WAAD,CACE,kDAAuCoC,GAAa,OAAGA,SAAH,IAAGA,QAAH,EAAGA,GAAeqB,UAAY,IAClF5W,UAAU,GACV6C,KAAMC,EAAAA,SAAAA,UACNZ,QAASkU,GACT/J,UAAWkJ,IAAiBA,GAAcrG,gBAKlD,iBAAKlP,UAAU,6BAAf,WACE,SAAC,EAAAsX,UAAD,CACEC,YAAY,mMACZvX,UAAU,eAEZ,SAAC,EAAD,CAAS8I,QAASA,EAASC,WAAYpI,KACvC,SAAC,EAAA6W,UAAD,CAAWxX,UAAU,kBAK3B,SAACK,EAAA,EAAD,CAAcC,QAASA,EAASE,OAAQgU,EAAiB/T,YAAa8V,GAAoB1V,UAAWA,EAAWD,MAAOA,EAAOF,MAAOC,KA5KvI,UAACoH,EAAA,EAAD,CAAOvH,OAAQyU,GAAoBjV,UAAU,+BAA7C,WACE,SAACgI,EAAA,EAAD,CAAaC,IAAI,MAAMkB,OAAQsN,GAA/B,UACE,gDAEF,SAACvO,EAAA,EAAD,CAAWlI,UAAU,uBAArB,SACGkU,EAAerP,KAAI,SAACsD,EAAcC,GAAf,OAClB,yBAAgBD,EAAhB,MAAQC,EADU,OAItB,SAACK,EAAA,EAAD,WACE,SAACxG,EAAA,EAAD,CAAQH,MAAM,UAAUI,QAASuU,GAAjC,sBAQJ,UAAC1O,EAAA,EAAD,CAAOvH,OAAQ2U,GAAsBnV,UAAU,+BAA/C,WACE,SAACgI,EAAA,EAAD,CAAaC,IAAI,MAAMkB,OAAQuN,GAA/B,UACE,4CAEF,SAACxO,EAAA,EAAD,CAAWlI,UAAU,uBAArB,SACGuU,EAAiB1P,KAAI,SAACsD,EAAcC,GAAf,OACpB,yBAAgBD,EAAhB,MAAQC,EADY,OAIxB,SAACK,EAAA,EAAD,WACE,SAACxG,EAAA,EAAD,CAAQH,MAAM,UAAUI,QAASwU,GAAjC,sBAmJF,iBAAK1W,UAAU,oCAAf,WACG0B,EAAAA,EAAAA,IAAuBmS,EAAgBlS,qBAAsBkS,EAAgBjS,4BAC5E,+BACE,SAACC,EAAA,EAAD,CAAOC,MAAM,OAAO9B,UAAW,QAAUoU,EAAe,mBAAqB,IAA7E,SACGA,EAAe,YAAc,kBAInCD,IACC,SAAClS,EAAA,EAAD,CAAQH,MAAM,UAAU9B,UAAU,qCAAqCkC,QAASqU,GAAhF,qBAIDrC,EAAenV,OAAS,IACvB,SAACkD,EAAA,EAAD,CAAQH,MAAM,UAAU9B,UAAU,qCAAqCkC,QAASuU,GAAhF,8BAIDlC,EAAiBxV,OAAS,IACzB,SAACkD,EAAA,EAAD,CAAQH,MAAM,UAAU9B,UAAU,qCAAqCkC,QAASwU,GAAhF,8BAOJ,UAAC3W,EAAA,EAAD,CAAWC,UAAU,yBAArB,WArKF,gCACGkU,EAAenV,OAAS,IACvB,SAACsC,EAAA,EAAD,CAAKrB,UAAU,0BAAf,UACE,UAACsB,EAAA,EAAD,CAAKtB,UAAU,OAAf,WACE,eAAIA,UAAU,QAAd,8BACCkU,EAAerP,KAAI,SAACsD,EAAcC,GAAf,OAClB,cAAGpI,UAAU,6BAAb,SACGmI,GAD4CC,EAD7B,SAQzBmM,EAAiBxV,OAAS,IACzB,SAACsC,EAAA,EAAD,CAAKrB,UAAU,0BAAf,UACE,UAACsB,EAAA,EAAD,CAAKtB,UAAU,OAAf,WACE,eAAIA,UAAU,QAAd,0BACCuU,EAAiB1P,KAAI,SAACsD,EAAcC,GAAf,OACpB,cAAGpI,UAAU,6BAAb,SACGmI,GAD4CC,EAD3B,SAQ3BR,GAAgBA,EAAa7I,OAAS,IACrC,SAACsC,EAAA,EAAD,CAAKrB,UAAU,0BAAf,UACE,UAACsB,EAAA,EAAD,CAAKtB,UAAU,OAAf,WACE,yCACC4H,EAAa/C,KAAI,SAACsD,EAAMC,GAAP,OAChB,eAAepI,UAAU,6BAAzB,WACE,gBAAKA,UAAU,OAAf,SAAuBmI,EAAKE,QAC5B,gBAAKC,wBAAyB,CAAEC,OAAQJ,EAAKA,KAAKK,QAAQ,SAAU,eAF9DJ,EADQ,aA2ItB,UAAC/G,EAAA,EAAD,YACE,SAACC,EAAA,EAAD,CAAK0D,GAAI,GAAIyS,GAAI,EAAjB,UACE,eAAIzX,UAAU,0BAAd,SAAyCa,OAE3C,SAACS,EAAA,EAAD,CAAK0D,GAAI,GAAIyS,GAAI,EAAGzX,UAAU,uCAA9B,SACGM,QAGL,SAACe,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,WACE,gBAAKtB,UAAU,oCAInB,UAACqB,EAAA,EAAD,YACE,SAACC,EAAA,EAAD,CAAKC,GAAI,EAAGyD,GAAI,GAAhB,UACE,gBAAKhF,UAAU,OAAf,SAAuBwC,OAEzB,SAAClB,EAAA,EAAD,CAAK0D,GAAI,EAAGhF,UAAU,oBAAtB,SACG+T,IACC,gBAAK/T,UAAU,yCAAyCkC,QAAS,kBAAM4S,IAA8B,EAApC,EAAjE,UACE,UAAC7S,EAAA,EAAD,CAAQjC,UAAU,2BAAlB,WACE,yCACA,SAAC,EAAA4C,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,WAAqBC,SAAU,GAAI/C,UAAU,iCAKjE,UAACsB,EAAA,EAAD,CAAKmW,GAAI,EAAGzS,GAAI,GAAIhF,UAAU,qCAA9B,UACG+T,IACC,gBAAK/T,UAAU,4DAA4DkC,QAvHhE,WACjBwS,IAAiBE,GACnBD,GAAgB,GAElBE,GAAiBD,EAClB,EAkHW,UACE,UAAC3S,EAAA,EAAD,CAAQjC,UAAU,4BAAlB,WACE,yCACA,SAAC,EAAA4C,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,WAAqBC,SAAU,GAAI/C,UAAY4U,EAAwC,aAAzB,+BAIhF,gBAAK5U,UAAU,mCAAmCkC,QAvHrC,WACjB0S,IAAiBF,GACnBG,GAAgB,GAElBF,GAAiBD,EAClB,EAkHS,UACE,UAACzS,EAAA,EAAD,CAAQjC,UAAU,mCAAlB,WACE,sDACA,SAAC,EAAA4C,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,WAAqBC,SAAU,GAAI/C,UAAY0U,EAAwC,aAAzB,qCAKlF,SAAChQ,EAAA,EAAD,CAAUlE,OAAQkU,EAAlB,UACE,SAACrT,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,WACE,SAACvB,EAAA,EAAD,CAAWC,UAAU,uBAArB,UACE,UAACqB,EAAA,EAAD,CAAKrB,UAAU,kBAAf,UACGqU,GACCA,EAASxP,KAAI,SAACgB,GACZ,OACE,UAACvE,EAAA,EAAD,CAAKC,GAAI,EAAGvB,UAAU,OAAtB,WACE,SAAC0X,EAAA,EAAD,CAAO1X,UAAU,kBAAjB,SAAoC6F,EAAK8R,eACzC,gBAAK3X,UAAU,uBAAuBsI,wBAAyB,CAAEC,OAAQ1C,EAAK+R,kBAF9C/R,EAAK8R,YAK1C,IAEF9D,EAAgBgE,aACf,UAACvW,EAAA,EAAD,CAAKC,GAAI,EAAGvB,UAAU,OAAtB,WACE,SAAC0X,EAAA,EAAD,CAAO1X,UAAU,kBAAjB,sBACA,0BACE,SAACiC,EAAA,EAAD,CAAQjC,UAAU,0BAA0BkC,QAAS,kBAAM8S,IAAiBD,GAAvB,EAArD,2BAzSpB,UAAChN,EAAA,EAAD,CAAOvH,OAAQuU,GAAc/U,UAAU,+BAAvC,WACE,SAACgI,EAAA,EAAD,CAAaC,IAAI,MAAMkB,OAAQqN,GAA/B,UACE,uCAEF,SAACtO,EAAA,EAAD,CAAWlI,UAAU,uBAArB,UACE,SAACD,EAAA,EAAD,UACGuU,EAAoBzP,KAAI,SAACiT,GACxB,OACE,SAACzW,EAAA,EAAD,WACE,UAACC,EAAA,EAAD,CAAKtB,UAAU,kBAAf,UACG8X,EAAYC,QAAQlT,KAAI,SAACmT,GACxB,MAAM,GAAN,OAAUA,EAAV,MACD,KACD,4BAASF,EAAY7P,UALf6P,EAAY7P,IASzB,SAGL,SAACQ,EAAA,EAAD,WACE,SAACxG,EAAA,EAAD,CAAQH,MAAM,UAAUI,QAASsU,GAAjC,oCAgSA,SAACnV,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,WACE,eAAItB,UAAU,aAIjB+T,IACC,SAACrP,EAAA,EAAD,CAAUlE,OAAQoU,EAAlB,UACE,SAACvT,EAAA,EAAD,CAAKrB,UAAU,yBAAf,UACE,SAACsB,EAAA,EAAD,WACE,SAAC,EAAD,CACE8J,UAAW2I,EACXrE,2BAA4BA,GAC5BC,2BAA4B,kBAAMmF,IAA+BpF,GAArC,WAMtC,SAACrO,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,WACE,gBACEX,GAAImT,EACJ9T,UAAS,2BACPoU,IAAgB1S,EAAAA,EAAAA,IAAuBmS,EAAgBlS,qBAAsBkS,EAAgBjS,0BAA4B,gBAAkB,IAE7I0G,wBAAyB,CAAEC,OAAQ0L,aAK3C,SAAC,EAAD,CAASvU,KAAM2V,OAGpB,ECjcY4C,EAAiE,SAAC,GAA0C,IAAxCpE,EAAuC,EAAvCA,gBAAiBC,EAAsB,EAAtBA,gBAC1FG,EAA+BJ,EAA/BI,aAAcG,EAAiBP,EAAjBO,aACduB,EAAiBlW,EAAAA,OAA6B,MAEpD,OACE,iBAAKkL,IAAKgL,EAAV,WACE,gBAAK3V,UAAU,kCACf,SAACD,EAAA,EAAD,CAAWC,UAAU,yBAArB,UACE,SAACqB,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,WACE,gBACEX,GAAImT,EACJ9T,UAAS,2BACPoU,IAAgB1S,EAAAA,EAAAA,IAAuBmS,EAAgBlS,qBAAsBkS,EAAgBjS,0BAA4B,gBAAkB,IAE7I0G,wBAAyB,CAAEC,OAAQ0L,aAOhD,E,sBCxBYiE,EAAyD,SAAC5Y,GACrE,OACE,UAAC6Y,EAAA,GAAD,WACG7Y,EAAM8Y,eAAgB,iBAAMjX,IAAI,YAAYqE,KAAMlG,EAAM8Y,eACxD9Y,EAAM+Y,aAAe/Y,EAAM+Y,YAAYxT,KAAI,SAACyT,EAAMlQ,GAAP,OAAiB,6CAAUkQ,GAAV,IAAgBvB,IAAK3O,IAAtC,IAC3C9I,EAAMiZ,oBAAqB,mBAAQjT,KAAK,sBAAb,SAAoChG,EAAMiZ,sBAG3E,E,+ECEYC,GAA8E,SAAAlZ,GACzF,IAAQ2F,EAAgC3F,EAAhC2F,OAAQwT,EAAwBnZ,EAAxBmZ,SAAUrN,EAAc9L,EAAd8L,UAC1B,EAA4B3L,EAAAA,UAAe,GAA3C,eAAOe,EAAP,KAAekY,EAAf,KAEMvP,EAAS,kBAAMuP,GAAWlY,EAAjB,EAETmY,EAA0B,CAAEhY,GAAIyK,EAAUvG,KAAI,SAAA+T,GAAG,OAAIA,EAAIjY,EAAR,KAEjDkY,EAAgB,mCAAG,WAAOF,GAAP,kFACjBG,EAAeC,GAAAA,UAAaJ,GAC5BK,EAFiB,WAECF,GAFD,UAIJG,EAAAA,GAAAA,IAAe,mBAAoB,CACpDN,OAAQI,GAAAA,MAASC,GACjBE,iBAAkB,SAACC,GAAD,OAAeJ,GAAAA,UAAaI,EAA5B,EAClBC,aAAc,SAPO,OAInBC,EAJmB,OASvBC,KAAAA,OAAiBD,EAAjB,UAA4BZ,EAA5B,SATuB,2CAAH,sDAYtB,OACE,iCACE,UAACnW,EAAA,EAAD,CAAMC,GAAG,IAAIvC,UAAU,iCAAiCkC,QAASiH,EAAjE,WACE,sDACA,SAAC,EAAAvG,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,YAEd,UAACiF,EAAA,EAAD,CAAOvH,OAAQA,EAAQR,UAAU,mCAAjC,WACE,UAACgI,EAAA,EAAD,CAAaC,IAAI,MAAMkB,OAAQA,EAA/B,WACE,wBAAKlE,KACL,gBAAKjF,UAAU,QAAf,UACE,SAACsC,EAAA,EAAD,CACEC,GAAG,IACHvC,UAAU,0CACVkC,QAAS,SAAAQ,GACPA,EAAEC,iBACFkW,EAAiBF,EAClB,EANH,2CAYJ,SAACzQ,EAAA,EAAD,CAAWlI,UAAU,OAArB,SACGoL,EAAUvG,KAAI,SAAC+T,GAAD,OACb,UAAC7Y,EAAA,EAAD,CAAWC,UAAU,+BAArB,WACE,UAACqB,EAAA,EAAD,CAAKrB,UAAU,OAAf,WACE,UAACsB,EAAA,EAAD,CAAKC,GAAI,EAAGvB,UAAU,UAAtB,WACE,gBAAKA,UAAU,+DAAf,SAA+E4Y,EAAI/X,aAClFa,EAAAA,EAAAA,IAAuBkX,EAAIjX,qBAAsBiX,EAAIhX,4BACpD,gBAAK5B,UAAU,2DAAf,UACE,SAAC6B,EAAA,EAAD,CAAOC,MAAM,YAAY9B,UAAW,aAAe4Y,EAAIxE,aAAe,mBAAqB,IAA3F,SACGwE,EAAIxE,aAAe,YAAc,sBAK1C,SAAC9S,EAAA,EAAD,CAAKtB,UAAU,+GAAf,SACG4Y,EAAItY,cAGT,SAACe,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,CAAKC,GAAI,GAAIvB,UAAU,UAAvB,UACE,SAACsC,EAAA,EAAD,CAAMtC,UAAU,iBAAiBuC,GAAIqW,EAAIrV,QAAUqV,EAAIrV,QAAU,IAAjE,UACE,eAAIvD,UAAU,OAAd,UAAsBrB,EAAAA,EAAAA,IAAOia,EAAIhY,gBAIvC,SAACS,EAAA,EAAD,WACE,SAACC,EAAA,EAAD,CAAKC,GAAI,EAAGvB,UAAU,UAAtB,UACI4Y,EAAIpW,cAAgBoW,EAAInW,0BACxB,iBAAKzC,UAAU,2CAAf,UACG4Y,EAAInW,uBACJmW,EAAIpW,cAAgBoW,EAAInW,yBAA0B,iBAAMzC,UAAU,oBAAhB,iBAClD4Y,EAAIpW,sBA7B0CoW,EAAIjY,GADhD,OAsCjB,SAAC8H,EAAA,EAAD,WACE,SAACxG,EAAA,EAAD,CAAQH,MAAM,UAAUI,QAASiH,EAAjC,wBAOT,GXlGIT,SAAAA,GAAAA,EAAAA,EAAAA,8BAAAA,GAAAA,gCAAAA,EAAAA,EAAAA,qBAAAA,GAAAA,sBAAAA,CAAAA,CAAAA,IAAAA,EAAAA,CAAAA,IAKE,IAAM6Q,GAAb,0IACE,WAAiB,IAAD,OAIVC,OAAkGrX,IAH5EsX,KAAKna,MAAMoa,wBAAwBjL,QAAO,SAAAtB,GAAC,MAAyB,UAArBA,EAAEwM,IAAIC,UAAV,IAAkC3a,SAAQ,SAAAkO,GAAC,OAAIA,EAAE0M,aAAN,IACpE5a,SAAQ,SAAAkO,GAAC,OAAIA,EAAE6B,cAAN,IAEE8K,MAAK,SAAA3M,GAAC,OAAIA,IAAM,EAAK7N,MAAM0P,cAArB,IAEzD+K,EAAerR,EAAMsR,qBACzB,OAAIP,KAAKna,MAAM2a,iBAAmB,EAAU,MACV,QAA9BR,KAAKna,MAAM0P,gBACNwK,GAAkCC,KAAKna,MAAM4a,wBADbH,EAAQrR,EAAMyR,8BAE9CX,IAAmCC,KAAKna,MAAM4a,wBAAyBH,EAAQrR,EAAMsR,qBACrFP,KAAKna,MAAM4a,wBAAyBH,EAAQrR,EAAMyR,8BAClDV,KAAKna,MAAM4a,0BAAyBH,EAAQrR,EAAMsR,uBAGzD,2BACGD,IAAUrR,EAAMyR,gCAAiC,eAAIna,UAAU,gBAAd,6DACjD+Z,IAAUrR,EAAMsR,uBACf,eAAIha,UAAU,gBAAd,yJAMP,KAzBH,GAA+DP,EAAAA,W,oCYc/D,SAAS2a,GAAmCC,GAA0D,IAA3CrC,EAA0C,uDAArBxY,SAC9E,OAAO0N,MAAM0E,KAAKoG,EAAOsC,iBAAiBD,GAC3C,CAqBD,IAAMvG,GAAkB,gBAElByG,GAAAA,SAAAA,IAAAA,EAAAA,EAAAA,GAAAA,EAAAA,GAAAA,IAAAA,GAAAA,EAAAA,EAAAA,GAAAA,GAAAA,SAAAA,IAAAA,IAAAA,GAAAA,EAAAA,EAAAA,GAAAA,KAAAA,GAAAA,IAAAA,IAAAA,EAAAA,UAAAA,OAAAA,EAAAA,IAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GAAAA,UAAAA,GAsGH,OAtGGA,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,MAAAA,OAAAA,KACJR,MAAoC,CAClCS,SAAS,EACTC,cAAe,CAAC,GAFkB,EAsC5BC,oBAAsB,WAC5B,IAAMC,EAAY,EAAKrb,MAAM+W,SAASC,KAAK9N,QAAQ,IAAK,IAExD,EAAKwL,sBAAsB2G,GAE3B1Q,WAAW,EAAK+J,sBAAuB,GAAI2G,GAE3C1Q,WAAW,EAAK+J,sBAAuB,IAAK2G,EAC7C,IAEOC,oBAAsB,SAAC7R,EAAoB0P,EAAkBoC,EAA0B9D,GAC7F,OACE,2BACE,SAAC9U,EAAA,EAAD,CACEjC,UAAU,uBACVkC,QAAS,WACF2Y,EAAK/W,YACR,EAAKxE,MAAMwb,sBAAsB/R,EAAY8R,EAAKvV,KAAMuV,EAAKhV,KAAMgV,EAAK5V,QAE1E,EAAK8V,SAAS,CACZN,eAAc,kBAAM,EAAKV,MAAMU,eAAlB,cAAkC,EAAKO,iBAAiBH,IAAS,EAAKd,MAAMU,cAAc,EAAKO,iBAAiBH,OAEhI,EATH,UAWE,iBAAK7a,UAAU,iCAAf,WACE,yBAAM6a,EAAK5V,UACX,gBAAKjF,UAAU,gDAAf,UACE,SAAC,EAAA4C,KAAD,CACEC,KAAMC,EAAAA,SAAAA,WACN9C,UAAW,cAAgB,EAAK+Z,MAAMU,cAAc,EAAKO,iBAAiBH,IAAS,GAAK,cACxF9X,SAAU,aAKlB,0BACE,SAAC2B,EAAA,EAAD,CAAUlE,OAAQ,EAAKuZ,MAAMU,cAAc,EAAKO,iBAAiBH,OAAYA,EAAK/W,WAAY9D,UAAU,GAAxG,UACE,0BACE,eAAIoF,MAAO,CAAE6V,YAAa,GAAIC,UAAW,IAAzC,SACGL,EAAK/W,YAAc+W,EAAK/W,WAAW/E,OAAS,GAC3C,iCACE,yBACE,SAACyZ,GAAD,CAAuBvT,OAAQ4V,EAAK5V,OAAQmG,UAAWyP,EAAK/W,WAAY2U,SAAUA,MAEnFoC,EAAK/W,WAAWe,KAAI,SAACK,EAA4BiW,GAA7B,OACnB,yBACE,SAAC9X,EAAA,EAAD,CAAeC,UAAW4B,KADnBiW,EADU,QAOvB,eAAInb,UAAU,gBAAd,+CAvCH+W,EA+CZ,IAEOiE,iBAAmB,SAACH,GAC1B,OAAOA,EAAKhV,KAAO,IAAMgV,EAAKvV,KAAKsU,UACpC,IAwQA,OAxQA,yCAhGD,YACyC,IAAnCH,KAAKna,MAAMuU,gBAAgBlT,KAC7B8Y,KAAK2B,yBAGD3B,KAAKna,MAAM+b,iBAAiBtS,aAAe0Q,KAAKna,MAAMuU,gBAAgBlT,IACxE8Y,KAAKna,MAAMgc,YAAY7B,KAAKna,MAAMuU,gBAAgBlT,GAAI8Y,KAAKna,MAAMuU,gBAAgB7E,eAAgByK,KAAKna,MAAMuU,gBAAgBlS,sBAE9H8X,KAAKna,MAAMiF,oBAAoBkV,KAAKna,MAAMuU,gBAAgBlT,IAAI,GAC9D8Y,KAAKna,MAAMwI,gBAAgB2R,KAAKna,MAAMuU,gBAAgBlT,KAEN,IAA9C8Y,KAAKna,MAAMoa,wBAAwB3a,QAAc0a,KAAKna,MAAMic,2BACjE,mCAED,SAAmBC,IACsB,IAAnC/B,KAAKna,MAAMuU,gBAAgBlT,IAAa6a,EAAK3H,kBAAoB4F,KAAKna,MAAMuU,iBAC9E4F,KAAK2B,0BAEgC,IAAnC3B,KAAKna,MAAMuU,gBAAgBlT,IAAa8Y,KAAKna,MAAMuU,gBAAgBlT,KAAO6a,EAAK3H,gBAAgBlT,KACjG8Y,KAAKna,MAAMgc,YAAY7B,KAAKna,MAAMuU,gBAAgBlT,GAAI8Y,KAAKna,MAAMuU,gBAAgB7E,eAAgByK,KAAKna,MAAMuU,gBAAgBlS,sBAE5H8X,KAAKna,MAAMiF,oBAAoBkV,KAAKna,MAAMuU,gBAAgBlT,IAAI,GAC9D8Y,KAAKna,MAAMwI,gBAAgB2R,KAAKna,MAAMuU,gBAAgBlT,KAGpD8Y,KAAKna,MAAM+W,SAASC,MAAQmD,KAAKna,MAAM+W,SAASC,MAAQkF,EAAKnF,SAASC,KACxEmD,KAAKiB,sBACIjB,KAAKna,MAAMuU,gBAAgBlT,KAAO6a,EAAK3H,gBAAgBlT,IAEhE4I,OAAOC,SAAS,EAAG,EAEtB,uBAmED,WAAiB,IAAD,OACd,EASIiQ,KAAKna,MARPuU,EADF,EACEA,gBACA4H,EAFF,EAEEA,YACAvX,EAHF,EAGEA,iBACA0D,EAJF,EAIEA,aACA8R,EALF,EAKEA,wBACA2B,EANF,EAMEA,iBACA9C,EAPF,EAOEA,kBACAmD,EARF,EAQEA,aAEMC,EAA8B9H,EAA9B8H,0BACFxa,EAAM+C,EAAkBC,oBAAoB0P,EAAgBlT,IAElE,OAC0B,IAAxBkT,EAAgBlT,KACd,iCACI8Y,KAAKna,MAAMsc,YAAa,SAAC1D,EAAD,CAAkBG,YAAaoD,EAAalD,kBAAmBA,EAAmBH,aAAcsD,KAC1H,UAACra,EAAA,EAAD,CAAKrB,UAAU,mBAAf,WACE,UAACsB,EAAA,EAAD,CAAKmW,GAAG,IAAIlW,GAAG,IAAIvB,UAAW,+CAAiDyZ,KAAKna,MAAMsc,UAAY,UAAY,IAAlH,WACE,SAAC,EAAAC,eAAD,CACErb,QAAQ,EACRR,UAAWyZ,KAAKM,MAAMS,QAAU,2BAA6B,oBAC7DsB,QAAQ,sBACRjZ,KAAMC,EAAAA,SAAAA,OAJR,UAME,gBAAKnC,GAAG,cAGTQ,GACCA,EAAI4C,iBACJ5C,EAAI4C,gBAAgBc,KAAI,SAACkX,EAA8B3T,GAA/B,OACtB,SAAC,EAAAyT,eAAD,CAAgBrb,OAAQub,EAAIjY,WAAW/E,OAAS,EAAe+c,QAASC,EAAI9W,OAAQpC,KAAMC,EAAAA,SAAAA,KAAe9C,UAAU,mBAAnH,SACG+b,EAAIjY,WAAW/E,OAAS,IACvB,gBAAIiB,UAAU,iBAAd,WACE,yBACE,SAACwY,GAAD,CAAuBvT,OAAQ8W,EAAI9W,OAAQmG,UAAW2Q,EAAIjY,WAAY2U,SAAU5E,EAAgBhT,cAEjGkb,EAAIjY,WAAWe,KAAI,SAACK,EAA4B8W,GAA7B,OAClB,yBACE,SAAC3Y,EAAA,EAAD,CAAeC,UAAW4B,KADnB8W,EADS,QAN8B5T,EADlC,IAgBzBjH,GACCA,EAAIwC,mBACJxC,EAAIwC,kBAAkBkB,KAAI,SAACoX,EAAwB7T,GAAzB,OACxB,SAAC,EAAAyT,eAAD,CACErb,OAAQyb,EAAInY,WAAW/E,OAAS,EAEhC+c,QAASG,EAAI3W,OAASC,EAAAA,EAAAA,eAA2B,sCAAwC,oCACzF1C,KAAMC,EAAAA,SAAAA,KACN9C,UAAU,mBALZ,SAOGic,EAAInY,WAAW/E,OAAS,IACvB,eAAIiB,UAAU,iBAAd,SACGic,EAAInY,WAAWe,KAAI,SAACK,EAAsB8W,GAAvB,OAClB,2BACE,cAAGxW,KAAMN,EAAOO,QAASC,OAAO,SAASvE,IAAI,sBAA7C,SACG+D,EAAO5B,aAEV,cAAGtD,UAAU,cAAc0F,OAAO,SAASvE,IAAI,sBAAsBP,MAAM,OAAO4E,KAAMN,EAAOS,QAA/F,sBAJOqW,EADS,OAPnB5T,EAHiB,IAwB3BuT,GACCA,EAA0B9W,KAAI,SAACqX,EAAiC9T,GAAlC,OAC5B,SAAC,EAAAyT,eAAD,CACErb,QAAQ,EAERsb,QAASI,EAAIJ,QACbK,WAAYD,EAAIE,iBAChBC,MAAOH,EAAII,WACXzZ,KAAMC,EAAAA,SAAAA,QACN9C,UAAU,mBAPZ,UASE,gBAAIA,UAAU,iBAAd,UACGkc,EAAIpY,WAAW/E,OAAS,GACvBmd,EAAIpY,WAAWe,KAAI,SAAC8F,EAA4B4R,GAA7B,OACjB,4BACK5R,EAAI5B,aAAe8K,EAAgBlT,KAAsB,KAAfgK,EAAI6R,SAC/C,SAACla,EAAA,EAAD,CAAMC,GAAIoI,EAAI6R,OAAQ5b,MAAO+J,EAAI/J,MAAjC,SACG+J,EAAI8R,kBADsC9R,EAAI5B,YAI7B,KAArB4B,EAAI+R,eACH,eAAGlX,KAAMmF,EAAI+R,aAAchX,OAAO,SAAS9E,MAAO+J,EAAI/J,MAA4BO,IAAI,sBAAtF,UACGwJ,EAAI8R,iBADP,KACyB,SAAC,EAAA7Z,KAAD,CAAMC,KAAMC,EAAAA,SAAAA,iBAD6B6H,EAAI5B,YAIvE4B,EAAI5B,aAAe8K,EAAgBlT,KAAM,cAAGC,MAAO+J,EAAI/J,MAAd,SAAsB+J,EAAI8R,qBAX7DrU,EAAQ,IAAMmU,EAAa,IAAM5R,EAAI5B,WAD7B,KAerB,SAACwQ,GAAD,CACEU,iBAAkBiC,EAAIpY,WAAW/E,OACjCiQ,eAAgB6E,EAAgB7E,eAChCkL,wBAAyBrG,EAAgBqG,wBACzCR,wBAAyBA,QA5BxBtR,EAHqB,IAoC/BjH,GAAOA,EAAIyE,oBAAsBzE,EAAIyE,mBAAmB7G,OAAS,IAChE,SAAC,EAAA8c,eAAD,CAAgBrb,QAAQ,EAAMsb,QAAQ,wBAAwBjZ,KAAMC,EAAAA,SAAAA,KAAe9C,UAAU,mBAA7F,UACE,eAAIA,UAAU,iBAAd,SACGmB,EAAIyE,mBAAmBf,KAAI,SAACgW,EAA0BmB,GACrD,OAAO,EAAKpB,oBAAoB/G,EAAgBlT,GAAIkT,EAAgBhT,UAAWga,EAAMmB,EACtF,YAKT,UAAC1a,EAAA,EAAD,CAAKmW,GAAG,IAAIlW,GAAG,IAAIvB,UAAU,2BAA7B,UACGyZ,KAAKna,MAAMsc,YAAa,SAAC3D,EAAD,CAAwBnE,gBAAiBA,GAAiBD,gBAAiBA,KAClG4F,KAAKna,MAAMsc,YACX,SAAC,EAAD,CACE5H,sBAAuByF,KAAKzF,sBAC5BF,gBAAiBA,GACjBD,gBAAiBA,EACjBjM,aAAY,OAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAcA,aAC5BmM,kBAAmBsH,EAAiBtH,wBAK1C,SAACzS,EAAA,EAAD,CAAKtB,UAAU,0BAAf,UACE,SAAC2c,EAAA,EAAD,WAMX,sCAED,SAA8BC,GAC5B,IAAIC,EAAMrd,SAAS0X,eAAe0F,GAClC,IAAKC,EAAK,CACR,IAAMC,EAAetd,SAASud,kBAAkBH,GAC5CE,GAAgBA,EAAa/d,OAAS,IAAG8d,EAAMC,EAAa,GACjE,CAED,GAAID,EAAK,CACP,IAEIG,EADkBH,EAAIxS,wBAAwBwL,IACXtM,OAAO0T,QAF3B,GAGnB1T,OAAOC,SAAS,CACdqM,IAAKmH,GAER,CACF,uCAED,WAAkC,IAAD,OACzBE,EAAgB1d,SAAS2d,cAAT,WAA2BrJ,KACjD,GAAqB,MAAjBoJ,EAAJ,CAIA,IAAME,EAAU5d,SAAS2d,cAAT,YAChB,GAAe,MAAXC,EAAJ,CAIA,IAAMC,EAAY7d,SAAS8a,iBAAT,iCACd+C,EAAUte,OAAS,GACrBse,EAAUzZ,SAAQ,SAAAqE,GAChB,IAAMqV,EAAkC,mBAAjBrV,EAAIsV,SACrBC,EAASvV,EAAIwV,OAAOC,WAAW,UAErC,GAAIJ,GAAkBE,EAAQ,CAC5B,IAAIG,EAAO1V,EAAIwV,OAAOG,OAAO,GAC7B3V,EAAIsV,SAAJ,oBAA4BI,GAC5B1V,EAAIwV,OAAJ,EACD,CACF,IAGH,IAAMI,EAAcre,SAAS8a,iBAAiB,kDAC1CuD,EAAY9e,QAAU,GACxB8e,EAAYja,SAAQ,SAAAqE,GAElB,GADiBA,EAAIsV,SAASG,WAAW,kBAC3B,CACZ,IAAIC,EAAO1V,EAAIsV,SAASK,OAAO,IAEzBE,EAAiBH,EAAKzK,QAAQ,KAChC4K,GAAkB,IACpBH,EAAOA,EAAKI,UAAU,EAAGD,IAG3B7V,EAAIsV,SAAJ,oBAA4BI,GAC5B1V,EAAIwV,OAAJ,EACD,CACF,IAGHL,EAAQY,UAAY,GAGhBvE,KAAKna,MAAM+W,SAASC,MACtBmD,KAAKiB,sBAGPN,GAA6B,eAAgB8C,GAAetZ,SAC1D,SAAAiZ,GAAG,OAAKA,EAAIrX,KAAJ,UAAc,EAAKlG,MAAM+W,SAASkH,UAAlC,OAA6C,EAAKje,MAAM+W,SAASoH,QAAjE,OAA0EZ,EAAIvG,KAAnF,IAIL8D,GAAU,YAAa8C,GAAetZ,SAAQ,SAAAiZ,GAC5CA,EAAImB,UAAYnB,EAAImB,UAAUxV,QAAQ,qBAAsB,IAC5D4R,GAAU,KAAMyC,GAAKjZ,SAAQ,SAAAqa,GAAQ,IAAD,MAC9BC,EAAO,UAAGD,EAAId,cAAc,eAArB,aAAG,EAA2Ba,UAAUG,OAC/Cvd,EAAK,UAAGqd,EAAId,cAAc,wBAArB,aAAG,EAAoCa,UAAUG,OAC1D,UAAAF,EAAId,cAAc,eAAlB,SAA2BiB,aAAa,aAAxC,UAAyDF,EAAzD,cAAsEtd,GACvE,IACDwc,EAAQiB,YAAYxB,EACrB,IAGDzC,GAAU,uBAAwB8C,GAAetZ,SAAQ,SAAAiZ,GACvDA,EAAImB,UAAYnB,EAAImB,UAAUxV,QAAQ,qBAAsB,IAC5D,IAAI8V,EAASzB,EAAIM,cAAc,KAC/B,GAAImB,EAAQ,CACV,IAAIC,EAAQ,UAAG1B,EAAI2B,aAAcL,OAAO3V,QAA5B,OAAoC8V,QAApC,IAAoCA,OAApC,EAAoCA,EAAQN,UAA5C,iBAA0DM,QAA1D,IAA0DA,OAA1D,EAA0DA,EAAQN,UAAlE,QACN,OAANM,QAAM,IAANA,GAAAA,EAAQF,aAAa,aAAcG,GACnCnB,EAAQiB,YAAYxB,EACrB,CACF,IAGDrd,SAAS8a,iBAAiB,2BAA2B1W,SAAQ,SAAAiZ,GAAQ,IAAD,MAC9DqB,EAAO,UAAGrB,EAAIM,cAAc,eAArB,aAAG,EAA2Ba,UAAUG,OAC/Cvd,EAAK,UAAGic,EAAIM,cAAc,wBAArB,aAAG,EAAoCa,UAChD,UAAAnB,EAAIM,cAAc,eAAlB,SAA2BiB,aAAa,aAAxC,UAAyDF,EAAzD,cAAsEtd,GACvE,IAEDwZ,GAAU,UAAW8C,GAClBzO,QAAO,SAAAgQ,GAAM,OAA2B,OAAvBA,EAAOD,aAAwBC,EAAOD,YAAYE,gBAAkB,iCAAiCA,aAAzG,IACb9a,SAAQ,SAAA6a,GAAM,OAA2B,OAAtBA,EAAOE,WAAsBF,EAAOE,WAAWC,YAAYH,GAAU,IAA1E,IAGjB,IAAMI,EAAqBrf,SAAS2d,cAAT,0BACD,MAAtB0B,IACFA,EAAmBb,UAAY,GAG/B5D,GAAU,UAAW8C,GAClBzO,QAAO,SAAAgQ,GAAM,OAA2B,OAAvBA,EAAOD,aAAwBC,EAAOD,YAAYE,gBAAkB,kBAAkBA,aAA1F,IACb9a,SAAQ,SAAA6a,GAAM,OAA2B,OAAtBA,EAAOE,WAAsBF,EAAOE,WAAWC,YAAYH,GAAU,IAA1E,KAGfrB,EAAQ0B,gBACVrF,KAAKsB,SAAS,CAAEP,SAAS,IAEzBf,KAAKsB,SAAS,CAAEP,SAAS,GA5F1B,CALA,CAmGF,OA9WGD,CAA6B9a,EAAAA,WAiXnC,IAAeuE,EAAAA,EAAAA,KACb,WAAmFC,GAAwE,IAAxJC,EAAuJ,EAAvJA,iBAAkByD,EAAqI,EAArIA,MAAO+R,EAA8H,EAA9HA,wBAAyB2B,EAAqG,EAArGA,iBACnD,OAAO,kBACFpX,GADL,IAEEC,iBAAkBA,EAClB0D,aAAcD,EACd+R,wBAAyBA,EAAwBA,wBACjD2B,iBAAkBA,GAErB,IACD,SAAAjX,GAAQ,OACNC,EAAAA,EAAAA,KAAmB,kCAEZC,EAAAA,IACAuD,GAAAA,GACAkX,GAAAA,GACAC,GAAAA,IAEL5a,EARI,GAVV,CAoBEmW,I,YC7ZI0E,GAAAA,SAAAA,IAAAA,EAAAA,EAAAA,GAAAA,EAAAA,GAAAA,IAAAA,GAAAA,EAAAA,EAAAA,GAAAA,GAAAA,SAAAA,IAAAA,IAAAA,GAAAA,EAAAA,EAAAA,GAAAA,KAAAA,GAAAA,IAAAA,IAAAA,EAAAA,UAAAA,OAAAA,EAAAA,IAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GAAAA,UAAAA,GAkG0B,OAlG1BA,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,MAAAA,OAAAA,KACJlF,MAAwC,CACtCmF,oBAAoB,EACpBC,cAAe,EACfC,gBAAgB,EAChBxD,WAAW,EACXyD,aAAa,GALyB,EAmEhCC,eAAiB,SAAC1G,GACxB,EAAKmC,SAAS,CAAEmE,oBAAqB,EAAKnF,MAAMmF,mBAAoBC,cAAevG,EAAKwG,gBAAgB,GACzG,IAEOG,wBAA0B,kBAChC,UAACxX,EAAA,EAAD,CAAOvH,OAAQ,EAAKuZ,MAAMmF,oBAAsE,IAAhD,EAAK5f,MAAMuU,gBAAgBzI,UAAUrM,OAAciB,UAAU,+BAA7G,WACE,UAACgI,EAAA,EAAD,CAAaC,IAAI,MAAjB,WACE,8CACA,cAAGjI,UAAU,OAAb,wGAEF,SAACkI,EAAA,EAAD,CAAWlI,UAAU,uBAArB,SACG,EAAKV,MAAMuU,gBAAgBzI,UAAUvG,KAAI,SAAC+T,EAAuBxQ,GAAxB,OACxC,UAAC/G,EAAA,EAAD,CAAKrB,UAAU,qCAAf,WACE,UAACsB,EAAA,EAAD,CAAKtB,UAAU,OAAf,WACE,0BACG4Y,EAAI/X,UADP,IACmB+X,EAAItY,YAEvB,uBAAIsY,EAAIhY,YAEV,SAACU,EAAA,EAAD,CAAKtB,UAAU,iBAAf,UACE,SAACiC,EAAA,EAAD,CAAQH,MAAM,iBAAiBI,QAAS,kBAAM,EAAKod,eAAelX,EAA1B,EAAxC,yBARqDA,EADjB,QAPd,IA0B1BoX,oBAAsB,kBAC5B,SAACC,GAAD,CACE5L,gBAAiB,EAAKvU,MAAMuU,gBAAgBzI,UAAU,EAAK2O,MAAMoF,eACjE1D,YAAa,EAAKnc,MAAMmc,YACxBlD,kBAAmB,EAAKjZ,MAAMiZ,kBAC9BmD,aAAc,EAAKpc,MAAMoc,aACzBrF,SAAU,EAAK/W,MAAM+W,SACrBuF,UAAW,EAAK7B,MAAM6B,WAPI,IAuB7B,OAvB6B,yCA1F9B,WAAqB,IAAD,OACdnC,KAAKna,MAAM+W,SAASkH,SAASmC,oBAAoBC,SAAS,YAC5DlG,KAAKsB,SAAS,CAAEa,WAAW,IAAQ,WACjC,EAAKgE,oBACN,IACInG,KAAKmG,qBAERnG,KAAKna,MAAMuU,gBAAgBzI,UAAUrM,OAAS,GAChD0a,KAAKsB,SAAS,CAAEmE,oBAAoB,GAEvC,sCAED,SAAsBW,GACpB,QACEA,EAAShM,gBAAgBzI,UAAUrM,OAAS,KACG,IAA9C8gB,EAAShM,gBAAgBzI,UAAU,GAAGzK,IAAakf,EAAShM,gBAAgBzI,UAAU,GAAGzK,KAAO8Y,KAAKna,MAAMuU,gBAAgBzI,UAAU,GAAGzK,KAEzI8Y,KAAKsB,SAAS,CAAEmE,oBAAoB,KAC7B,EAGV,mCAED,SAAmBY,GAA4C,IAAD,OACpDC,EAActG,KAAKna,MAAnBygB,WAEJC,EAAAA,EAAAA,IAAqBF,EAAUG,MAAMtH,OAAQc,KAAKna,MAAM2gB,MAAMtH,SAChEc,KAAKmG,qBAGP,IAAI/L,EAAkB4F,KAAKna,MAAMuU,gBAAgBzI,UAAUqO,KAAKM,MAAMoF,eAClEtL,IAA2C,IAAxBA,EAAgBlT,IACrC8Y,KAAKna,MAAM4gB,cAERzG,KAAKM,MAAMmF,oBAAsBrL,IAA2C,IAAxBA,EAAgBlT,GACnEkT,EAAgBrR,aAClBhD,SAASoB,MAAQiT,EAAgBrR,aAEjChD,SAASoB,MAAQiT,EAAgBjT,MAE1B6Y,KAAKM,MAAMmF,mBACpB1f,SAASoB,MAAQ,qCAEjBpB,SAASoB,MAAQ,uCAIfmf,IAAcD,EAAUC,WAC1B9V,YAAW,WACT,EAAK8Q,SAAS,CAAEsE,YAAaU,GAC9B,GAAE,IAEN,mCAED,WACE,MAA8DtG,KAAKna,MAA3D2gB,EAAR,EAAQA,MAAOE,EAAf,EAAeA,WAAYC,EAA3B,EAA2BA,+BAC3BD,IACAC,EAA+BH,EAAMtH,OAAQc,KAAKM,MAAM6B,UACzD,uBA2CD,WACE,MAAuCnC,KAAKna,MAApCygB,EAAR,EAAQA,UAAWlM,EAAnB,EAAmBA,gBACnB,EAAwC4F,KAAKM,MAArCqF,EAAR,EAAQA,eAAgBC,EAAxB,EAAwBA,YAExB,OACE,+BACE,UAAC,EAAA1a,QAAD,CAASob,UAAWA,GAAaV,EAAjC,UACG5F,KAAK8F,2BACJH,GAAuD,IAArCvL,EAAgBzI,UAAUrM,SAAiB0a,KAAK+F,0BAI3E,OAzHGP,CAAiCxf,EAAAA,WA4HvC,IAAeuE,EAAAA,EAAAA,KACb,WAAgCC,GAA8E,IAA3G4P,EAA0G,EAA1GA,gBACD,OAAO,kBACF5P,GADL,IAEE4P,gBAAiBA,EACjB4H,YAAa5H,EAAgB4H,YAC7BlD,kBAAmB1E,EAAgB0E,kBACnCmD,aAAc7H,EAAgB6H,aAC9BqE,UAAWlM,EAAgBkM,WAE9B,IACD,SAAA3b,GAAQ,OAAIC,EAAAA,EAAAA,KAAmB,kBAAKgc,EAAAA,GAA2BC,GAAAA,GAAwBlc,EAA/E,GAXV,CAYE6a,G,wBCtKK,IAAK1Z,E,gCAAZ,SAAYA,GAAAA,EAAAA,EAAAA,eAAAA,IAAAA,iBAAAA,EAAAA,EAAAA,UAAAA,IAAAA,WAAAA,CAAZ,CAAYA,IAAAA,EAAAA,CAAAA,G","sources":["components/document/Document.tsx","components/document/ReferenceLink.tsx","components/document/RelatedDocs.tsx","components/eli/data-type.ts","components/eli/eli-class.ts","components/eli/eli-property.ts","components/eli/eli-resource.ts","components/reprintNotes/ReprintNotes.tsx","containers/documentDetail/MissingDocumentReferencesDetailsContainer.tsx","components/pdf/PdfLink.tsx","components/GoToTop/GoToTop.tsx","containers/documentDetail/timeline/TimelineInfo.tsx","containers/documentDetail/timeline/TimelineYear.tsx","containers/documentDetail/timeline/TimelinePreview.tsx","containers/documentDetail/timeline/TimelineDetailsModal.tsx","containers/documentDetail/timeline/Timeline.tsx","containers/documentDetail/DocumentContent.tsx","containers/documentDetail/DocumentContentRawHtml.tsx","containers/documentDetail/DocumentMetadata.tsx","containers/documentDetail/ReferenceDetailsModal.tsx","containers/documentDetail/DocumentDetailsViewer.tsx","containers/documentDetail/DocumentDetailsContainer.tsx","models/CelexType.ts"],"sourcesContent":["import * as React from \"react\";\r\nimport { Row, Col, Badge, Container, Button } from \"reactstrap\";\r\nimport \"./Document.scss\";\r\nimport { ISearchDocument } from \"../../models/ISearchDocument\";\r\nimport { EliClass } from \"../../components/eli/eli-class\";\r\nimport { EliProperty } from \"../../components/eli/eli-property\";\r\nimport { DataType } from \"../../components/eli/data-type\";\r\nimport { EliResource } from \"../../components/eli/eli-resource\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Icon, IconType } from \"@lexdania/components\";\r\nimport RelatedDocs from \"./RelatedDocs\";\r\nimport { GeografiskDaekning } from \"../../models/GeografiskDaekningEnum\";\r\nimport ReprintNotes from \"../reprintNotes/ReprintNotes\";\r\n\r\nexport function nlToBr(str: string = \"\"): string | JSX.Element[] {\r\n  const arr = str.split(\"\\\\n\");\r\n  if (arr.length < 2) {\r\n    return str;\r\n  }\r\n  const elmsArr = arr.flatMap((s, i) => [<span key={i}>{s}</span>, <br key={\"b\" + i} />]);\r\n  elmsArr.pop();\r\n  return elmsArr;\r\n}\r\n\r\nexport interface IDocumentProps {\r\n  document: ISearchDocument;\r\n}\r\n\r\nexport const Document: React.FC<IDocumentProps> = props => {\r\n  const { document: d } = props;\r\n  const [show, setShow] = React.useState(false);\r\n  const [showReprintNotes, setShowReprintNotes] = React.useState(false);\r\n\r\n  const toggleReprintNotes = () => {\r\n    setShowReprintNotes(!showReprintNotes);\r\n  };\r\n\r\n  return (\r\n    <Container className=\"document-entry py-3 pl-sm-0\" about={d.retsinfoLink} typeof={EliClass.LegalResource}>\r\n      <ReprintNotes ressort={d.ressortName} isOpen={showReprintNotes} toggleModal={toggleReprintNotes} docId={d.id} title={d.title} shortName={d.shortName} />\r\n      <span property={EliProperty.TypeDocument} resource={EliResource.AuthorityTypeDocumentLink + d.documentTypeEliCode} />\r\n      <span {...{ rel: EliProperty.IsRealizedBy, rev: EliProperty.Realizes }}>\r\n        <span about={d.retsinfoLink + \"/dan\"} typeof={EliClass.LegalExpression}>\r\n          <span property={EliProperty.Language} resource={EliResource.AuthorityLanguageDAN} />\r\n          <Row className=\"my-2\">\r\n            <Col lg={7} className=\"px-xs-0\">\r\n              <div className=\"document-short-name d-block d-sm-inline pb-1 pb-sm-0 mr-sm-2\" property={EliProperty.ShortTitle} datatype={DataType.RDFsLiteral}>\r\n                {d.shortName}\r\n              </div>\r\n              {showDocumentStateBadge(d.geografiskDaekningId, d.retsinfoKlassifikationId) && (\r\n                <div className=\"badge-container d-block d-sm-inline py-1 py-md-0 mr-sm-2\">\r\n                  <Badge\r\n                    color=\"secondary\"\r\n                    className={\"py-2 px-3\" + (d.isHistoryFlag ? \" historic-badge \" : \"\")}\r\n                    property={EliProperty.InForce}\r\n                    resource={d.isHistoryFlag ? EliResource.OntologyNotInForce : EliResource.OntologyInForce}\r\n                  >\r\n                    {d.isHistoryFlag ? \"HISTORISK\" : \"GÆLDENDE\"}\r\n                  </Badge>\r\n                </div>\r\n              )}\r\n              {d.hasReprintNotes && (\r\n                <Button color=\"primary\" className=\"action-badge badge btn-badge py-2 px-3 \" onClick={toggleReprintNotes}>\r\n                  OMTRYKT\r\n                </Button>\r\n              )}\r\n            </Col>\r\n            <Col\r\n              className=\"document-ressort text-lg-right d-flex justify-content-end flex-row-reverse flex-lg-row py-1 py-md-0 px-xs-0 \"\r\n              about={d.retsinfoLink}\r\n              property={EliProperty.ResponsibilityOf}\r\n              datatype={DataType.XSDstring}\r\n            >\r\n              {d.fobRessortNames !== undefined && d.fobRessortNames.length > 0 && <>({d.fobRessortNames.join(\", \")}) </>}\r\n              {d.ressortName}\r\n            </Col>\r\n          </Row>\r\n          <Row>\r\n            <Col lg={12} className=\"px-xs-0\">\r\n              <span {...{ rev: EliProperty.Embodies, rel: EliProperty.IsEmbodiedBy }}>\r\n                <span resource={d.retsinfoLink + \"/dan/html\"} typeof={EliClass.Format}>\r\n                  <Link className=\"document-title\" to={d.retsinfoLink} resource={d.retsinfoLink + \"/dan/html\"} rel=\"noopener noreferrer\">\r\n                    <span property={EliProperty.Format} resource={EliResource.FormatHtml} />\r\n                    <span property={EliProperty.MediaType} resource={EliResource.MediaTypeHtml} />\r\n                    <h3 about={d.retsinfoLink + \"/dan\"} property={EliProperty.Title} datatype={DataType.RDFsLiteral}>\r\n                      {nlToBr(d.title)}\r\n                    </h3>\r\n                  </Link>\r\n                </span>\r\n              </span>\r\n            </Col>\r\n          </Row>\r\n          <Row>\r\n            <Col lg={6} className=\"px-xs-0\">\r\n              {(d.popularTitle || d.offentliggoerelsesDato) && (\r\n                <div className=\"document-popular-title my-2 my-md-0 px-xs-0\">\r\n                  {\r\n                    <span property={EliProperty.PublicationDate} datatype={DataType.XSDdate}>\r\n                      {d.offentliggoerelsesDato}\r\n                    </span>\r\n                  }\r\n                  {d.popularTitle && d.offentliggoerelsesDato && <span className=\"px-2 text-primary\"> | </span>}\r\n                  {\r\n                    <span property={EliProperty.TitleAlternative} datatype={DataType.RDFsLiteral}>\r\n                      {d.popularTitle}\r\n                    </span>\r\n                  }\r\n                </div>\r\n              )}\r\n            </Col>\r\n            <Col lg={6} className=\"text-right\">\r\n              <Link\r\n                to=\"#\"\r\n                onClick={e => {\r\n                  e.preventDefault();\r\n                  setShow(!show);\r\n                }}\r\n              >\r\n                Relaterede dokumenter{\" \"}\r\n                <div className=\"angle-container\">\r\n                  <Icon icon={IconType.AngleRight} iconSize={20} className={!show ? \"svg-rotate collapsed\" : \"svg-rotate\"} />\r\n                </div>\r\n              </Link>\r\n            </Col>\r\n          </Row>\r\n          <Row>\r\n            <Col className=\"px-xs-0\">\r\n              <RelatedDocs show={show} docId={d.id} />\r\n            </Col>\r\n          </Row>\r\n        </span>\r\n      </span>\r\n    </Container>\r\n  );\r\n};\r\nexport function showDocumentStateBadge(geografiskDakning: number, retsinfoKlassifikation: number) {\r\n  const folketingRetsinfoKlassifikationer = [50, 60, 70];\r\n  return (\r\n    (geografiskDakning === GeografiskDaekning.IkkeGronlandOgFaeroerne || geografiskDakning === GeografiskDaekning.HeleRigsfaellesskabet) &&\r\n    !folketingRetsinfoKlassifikationer.includes(retsinfoKlassifikation)\r\n  );\r\n}\r\n","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { IDocumentReference } from \"../../models/IDocumentReference\";\r\n\r\nexport interface IReferenceLinkProps {\r\n  reference: IDocumentReference;\r\n}\r\n\r\nexport const ReferenceLink: React.FC<IReferenceLinkProps> = (props: IReferenceLinkProps) => {\r\n  const { reference } = props;\r\n  return (\r\n    <>\r\n      {reference.eliPath ? (\r\n        <Link to={reference.eliPath} title={reference.title} rel=\"noopener noreferrer\">\r\n          {reference.shortName}\r\n        </Link>\r\n      ) : (\r\n        <span>{reference.shortName}</span>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { AppState } from \"../../store\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { IRelatedDocuments } from \"./../../models/IRelatedDocuments\";\r\nimport { RelatedDocumentsActions, IRelatedDocumentsActions } from \"../../store/relatedDocuments/relatedDocumentsReducer\";\r\nimport \"./RelatedDocs.scss\";\r\nimport { Row, Col, Collapse, Spinner } from \"reactstrap\";\r\nimport { CelexType } from \"../../models/CelexType\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Icon, IconType } from \"@lexdania/components\";\r\nimport { ReferenceLink } from \"./ReferenceLink\";\r\n\r\nexport interface IRelatedDocsProps extends IRelatedDocumentsActions, IRelatedDocuments {\r\n  docId: number;\r\n  show: boolean;\r\n  relatedDocuments?: IRelatedDocuments;\r\n}\r\n\r\nconst hasReferences = (relDoc: IRelatedDocuments): boolean => {\r\n  let retVal = false;\r\n  relDoc.euReferenceGroups.forEach(element => {\r\n    if (element.references.length > 0) {\r\n      retVal = true;\r\n    }\r\n  });\r\n  relDoc.referenceGroups.forEach(element => {\r\n    if (element.references.length > 0) {\r\n      retVal = true;\r\n    }\r\n  });\r\n  return retVal;\r\n};\r\n\r\nconst RelatedDocs: React.FC<IRelatedDocsProps> = props => {\r\n  const { docId, getRelatedDocuments, show, relatedDocuments } = props;\r\n  const [showMore, setShowMore] = React.useState({} as { [key: string]: boolean });\r\n  const numberOfDocsBeforeMoreLink = 5;\r\n\r\n  React.useEffect(() => {\r\n    if (show && relatedDocuments === undefined) {\r\n      getRelatedDocuments(docId, true);\r\n    }\r\n  }, [docId, getRelatedDocuments, show, relatedDocuments]);\r\n\r\n  return (\r\n    <>\r\n      <Collapse isOpen={props.show && props.relatedDocuments === undefined}>\r\n        <div className=\"related-docs p-2 mt-3 text-center\">\r\n          <Spinner animation=\"border\" className=\"text-secondary\" />\r\n        </div>\r\n      </Collapse>\r\n\r\n      <Collapse isOpen={props.show && props.relatedDocuments !== undefined}>\r\n        <div className=\"related-docs p-2 mt-3\">\r\n          <Row>\r\n            {props.relatedDocuments &&\r\n              props.relatedDocuments.referenceGroups.map((group, gIndex) => {\r\n                return (\r\n                  group.references.length > 0 && (\r\n                    <Col key={gIndex} lg={6} xs={12} className=\"my-2\">\r\n                      <div className=\"mb-2\">\r\n                        <strong>{group.header}</strong>\r\n                      </div>\r\n                      {/* first 5 doc ref*/}\r\n                      {group.references.map((docRef, rIndex) => {\r\n                        return (\r\n                          rIndex < numberOfDocsBeforeMoreLink && (\r\n                            <div key={rIndex}>\r\n                              <ReferenceLink reference={docRef} key={rIndex} />\r\n                            </div>\r\n                          )\r\n                        );\r\n                      })}\r\n\r\n                      {/* put the rest of the links in a controlled collapse */}\r\n                      {group.references.length > numberOfDocsBeforeMoreLink && (\r\n                        <Collapse isOpen={showMore[group.header] || false}>\r\n                          {group.references.map((docRef, rIndex) => {\r\n                            return (\r\n                              rIndex >= numberOfDocsBeforeMoreLink && (\r\n                                <div key={rIndex}>\r\n                                  <ReferenceLink reference={docRef} key={rIndex} />\r\n                                </div>\r\n                              )\r\n                            );\r\n                          })}\r\n                        </Collapse>\r\n                      )}\r\n\r\n                      {/* link to show more / controlled collapse toggler */}\r\n                      {group.references.length > numberOfDocsBeforeMoreLink && (\r\n                        <Link\r\n                          to=\"#\"\r\n                          onClick={e => {\r\n                            e.preventDefault();\r\n                            setShowMore({ ...showMore, [group.header]: !showMore[group.header] });\r\n                          }}\r\n                          className=\"d-inline-block py-2\"\r\n                        >\r\n                          {showMore[group.header] ? \"Vis mindre\" : \"Vis mere\"}\r\n                          <div className=\"angle-container\" style={{ marginLeft: 10 }}>\r\n                            <Icon icon={showMore[group.header] ? IconType.AngleUp : IconType.AngleRight} iconSize={20} />\r\n                          </div>\r\n                        </Link>\r\n                      )}\r\n                    </Col>\r\n                  )\r\n                );\r\n              })}\r\n\r\n            {props.relatedDocuments &&\r\n              props.relatedDocuments.euReferenceGroups.map((group, gIndex) => {\r\n                return (\r\n                  group.references.length > 0 && (\r\n                    <Col key={gIndex} lg={6} xs={12} className=\"my-2\">\r\n                      <div className=\"mb-2\">\r\n                        <strong>{group.type === CelexType.Implementation ? \"Links til EU direktiver, jf. note 1\" : \"Links til øvrige EU dokumenter\"}</strong>\r\n                      </div>\r\n\r\n                      {/* show first 5 */}\r\n                      {group.references.map((docRef, rIndex) => {\r\n                        return (\r\n                          rIndex < numberOfDocsBeforeMoreLink && (\r\n                            <div key={rIndex}>\r\n                              <a href={docRef.htmlUrl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n                                {docRef.reference}\r\n                              </a>\r\n                              <a className=\"ml-3\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Note\" href={docRef.noteUrl}>\r\n                                (Note)\r\n                              </a>\r\n                            </div>\r\n                          )\r\n                        );\r\n                      })}\r\n\r\n                      {/* put the rest of the links in a controlled collapse */}\r\n                      {group.references.length > numberOfDocsBeforeMoreLink && (\r\n                        <Collapse isOpen={showMore[\"eu_\" + group.type] || false}>\r\n                          {group.references.map((docRef, rIndex) => {\r\n                            return (\r\n                              rIndex >= numberOfDocsBeforeMoreLink && (\r\n                                <div key={rIndex}>\r\n                                  <a href={docRef.htmlUrl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n                                    {docRef.reference}\r\n                                  </a>\r\n                                  <a className=\"ml-3\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Note\" href={docRef.noteUrl}>\r\n                                    (Note)\r\n                                  </a>\r\n                                </div>\r\n                              )\r\n                            );\r\n                          })}\r\n                        </Collapse>\r\n                      )}\r\n\r\n                      {/* show the link to more */}\r\n                      {group.references.length > numberOfDocsBeforeMoreLink && (\r\n                        <Link\r\n                          to=\"#\"\r\n                          onClick={e => {\r\n                            e.preventDefault();\r\n                            setShowMore({ ...showMore, [\"eu_\" + group.type]: !showMore[\"eu_\" + group.type] });\r\n                          }}\r\n                          className=\"d-inline-block py-2\"\r\n                        >\r\n                          {showMore[\"eu_\" + group.type] ? \"Vis mindre\" : \"Vis mere\"}\r\n                          <div className=\"angle-container\" style={{ marginLeft: 10 }}>\r\n                            <Icon icon={showMore[\"eu_\" + group.type] ? IconType.AngleUp : IconType.AngleRight} iconSize={20} />\r\n                          </div>\r\n                        </Link>\r\n                      )}\r\n                    </Col>\r\n                  )\r\n                );\r\n              })}\r\n\r\n            {props.relatedDocuments &&\r\n              props.relatedDocuments.documentLinkGroups.map((group, gIndex) => {\r\n                return (\r\n                  group.references &&\r\n                  group.references.length > 0 && (\r\n                    <Col key={gIndex} lg={6} xs={12} className=\"my-2\">\r\n                      <div className=\"mb-2\">\r\n                        <strong>{group.header}</strong>\r\n                      </div>\r\n\r\n                      {/* show first 5 */}\r\n                      {group.references.map((docRef, rIndex) => {\r\n                        return (\r\n                          rIndex < numberOfDocsBeforeMoreLink && (\r\n                            <div key={rIndex}>\r\n                              <ReferenceLink reference={docRef} key={rIndex} />\r\n                            </div>\r\n                          )\r\n                        );\r\n                      })}\r\n\r\n                      {/* put the rest of the links in a controlled collapse */}\r\n                      {group.references.length > numberOfDocsBeforeMoreLink && (\r\n                        <Collapse isOpen={showMore[\"link_\" + group.type + group.data] || false}>\r\n                          {group.references.map((docRef, rIndex) => {\r\n                            return (\r\n                              rIndex >= numberOfDocsBeforeMoreLink && (\r\n                                <div key={rIndex}>\r\n                                  <ReferenceLink reference={docRef} key={rIndex} />\r\n                                </div>\r\n                              )\r\n                            );\r\n                          })}\r\n                        </Collapse>\r\n                      )}\r\n\r\n                      {/* show the link to more */}\r\n                      {group.references.length > numberOfDocsBeforeMoreLink && (\r\n                        <Link\r\n                          to=\"#\"\r\n                          onClick={e => {\r\n                            e.preventDefault();\r\n                            setShowMore({ ...showMore, [\"link_\" + group.type + group.data]: !showMore[\"link_\" + group.type + group.data] });\r\n                          }}\r\n                          className=\"d-inline-block py-2\"\r\n                        >\r\n                          {showMore[\"link_\" + group.type + group.data] ? \"Vis mindre\" : \"Vis mere\"}\r\n                          <div className=\"angle-container\" style={{ marginLeft: 10 }}>\r\n                            <Icon icon={showMore[\"link_\" + group.type + group.data] ? IconType.AngleUp : IconType.AngleRight} iconSize={20} />\r\n                          </div>\r\n                        </Link>\r\n                      )}\r\n                    </Col>\r\n                  )\r\n                );\r\n              })}\r\n\r\n            {props.relatedDocuments && !hasReferences(props.relatedDocuments) && (\r\n              <Col>\r\n                <span>Der er ingen dokumentreferencer til dette dokument</span>\r\n              </Col>\r\n            )}\r\n          </Row>\r\n        </div>\r\n      </Collapse>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default connect(\r\n  ({ relatedDocuments }: AppState, ownProps: IRelatedDocsProps): IRelatedDocsProps => {\r\n    return {\r\n      ...ownProps,\r\n      relatedDocuments: relatedDocuments.relatedDocumentsMap[ownProps.docId],\r\n    };\r\n  },\r\n  dispatch =>\r\n    bindActionCreators(\r\n      {\r\n        ...RelatedDocumentsActions,\r\n      },\r\n      dispatch\r\n    )\r\n)(RelatedDocs);\r\n","export class DataType {\r\n  public static readonly RDFsLiteral = \"rdfs:literal\";\r\n  public static readonly XSDstring = \"xsd:string\";\r\n  public static readonly XSDdate = \"xsd:date\";\r\n}\r\n","export class EliClass {\r\n  public static readonly LegalResource = \"eli:LegalResource\";\r\n  public static readonly LegalExpression = \"eli:LegalExpression\";\r\n  public static readonly Format = \"eli:Format\";\r\n}\r\n","export class EliProperty {\r\n  public static readonly Title = \"eli:title\";\r\n  public static readonly ShortTitle = \"eli:title_short\";\r\n  public static readonly ResponsibilityOf = \"eli:responsibility_of\";\r\n  public static readonly TypeDocument = \"eli:type_document\";\r\n  public static readonly IsRealizedBy = \"eli:is_realized_by\";\r\n  public static readonly Realizes = \"eli:realizes\";\r\n  public static readonly Language = \"eli:language\";\r\n  public static readonly InForce = \"eli:in_force\";\r\n  public static readonly TitleAlternative = \"eli:title_alternative\";\r\n  public static readonly Embodies = \"eli:embodies\";\r\n  public static readonly IsEmbodiedBy = \"eli:is_embodied_by\";\r\n  public static readonly Publisher = \"eli:publisher\";\r\n  public static readonly Format = \"eli:format\";\r\n  public static readonly MediaType = \"eli:media_type\";\r\n  public static readonly PublicationDate = \"eli:date_publication\";\r\n}\r\n","export class EliResource {\r\n  public static readonly AuthorityTypeDocumentLink = \"http://www.retsinformation.dk/eli/resource/authority/type_document#\";\r\n  public static readonly AuthorityLanguageDAN = \"http://publications.europa.eu/resource/authority/language/DAN\";\r\n\r\n  public static readonly OntologyInForce = \"eli:InForce-inForce\";\r\n  public static readonly OntologyNotInForce = \"eli:InForce-notInForce\";\r\n\r\n  public static readonly FormatHtml = \"iana:assignments/media-types/text/html\";\r\n  public static readonly FormatXml = \"iana:assignments/media-types/application/xml\";\r\n  public static readonly FormatJsonLd = \"iana:assignments/media-types/application/ld+json\";\r\n  public static readonly FormatRdfXml = \"iana:assignments/media-types/application/rdf+xml\";\r\n\r\n  public static readonly MediaTypeHtml = \"iana:assignments/media-types/text/html\";\r\n}\r\n","import * as React from \"react\";\r\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from \"reactstrap\";\r\nimport { IReprintNote } from \"../../models/IReprintNote\";\r\nimport { AppState } from \"../../store\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { connect } from \"react-redux\";\r\nimport { IReprintInformationActions, ReprintInformationActions } from \"../../store/notes/notesReducer\";\r\nimport \"./ReprintNotes.scss\";\r\n\r\nexport interface IReprintNotesProps extends IReprintInformationActions {\r\n  docId: number;\r\n  isOpen: boolean;\r\n  toggleModal: () => void;\r\n  reprintNotes?: IReprintNote[];\r\n  title: string;\r\n  shortName: string;\r\n  ressort: string;\r\n}\r\n\r\nexport const ReprintNotes: React.FC<IReprintNotesProps> = props => {\r\n  const { toggleModal, isOpen, reprintNotes, getReprintNotes, docId, shortName, title, ressort } = props;\r\n\r\n  React.useEffect(() => {\r\n    if (isOpen) {\r\n      getReprintNotes(docId);\r\n    }\r\n  }, [docId, getReprintNotes, isOpen]);\r\n\r\n  return (\r\n    <Modal isOpen={isOpen} className=\"modal-xl reprint-notes-modal\">\r\n      <ModalHeader tag=\"div\">\r\n        <div>{shortName}</div>\r\n        <h3>{title}</h3>\r\n        <div className=\"text-muted\">{ressort}</div>\r\n      </ModalHeader>\r\n      <ModalBody className=\"background-secondary\">\r\n        {reprintNotes &&\r\n          reprintNotes.map((note, index) => (\r\n            <div key={index} className=\"reprint-note\">\r\n              <div className=\"mb-2\">{note.date}</div>\r\n              <div dangerouslySetInnerHTML={{ __html: note.note.replace(\"\\\\r\\\\n\", \"<br />\") }} />\r\n            </div>\r\n          ))}\r\n      </ModalBody>\r\n      <ModalFooter>\r\n        <Button color=\"primary\" onClick={toggleModal}>\r\n          Ok\r\n        </Button>\r\n      </ModalFooter>\r\n    </Modal>\r\n  );\r\n};\r\n\r\nexport default connect(\r\n  ({ notes }: AppState, ownProps: IReprintNotesProps): IReprintNotesProps => {\r\n    return {\r\n      ...ownProps,\r\n      reprintNotes: notes.reprintNotes,\r\n    };\r\n  },\r\n  dispatch =>\r\n    bindActionCreators(\r\n      {\r\n        ...ReprintInformationActions,\r\n      },\r\n      dispatch\r\n    )\r\n)(ReprintNotes);\r\n","import * as React from \"react\";\r\nimport { IDocumentClassification } from \"../../models/IDocumentClassification\";\r\n\r\ninterface IDocumentReferencesDetailsProps {\r\n  referencesLength: number;\r\n  documentTypeId: string;\r\n  isSagsforlobPeriodValid: boolean;\r\n  documentClassifications: IDocumentClassification[];\r\n}\r\n\r\nenum State {\r\n  DocumentNotAttachedSagsforlob,\r\n  LawIsNotMarkedBefore,\r\n}\r\n\r\nexport class MissingDocumentReferencesDetailsContainer extends React.Component<IDocumentReferencesDetailsProps, any> {\r\n  public render() {\r\n    var listOfDocumentTypes = this.props.documentClassifications.filter(x => x.ids.toString() === \"50-60\").flatMap(x => x.documentTypes);\r\n    var listOfDocumentIds = listOfDocumentTypes.flatMap(x => x.documentTypeId);\r\n\r\n    var isDocTypePartOfClassifications = listOfDocumentIds.find(x => x === this.props.documentTypeId) !== undefined;\r\n\r\n    var state: State = State.LawIsNotMarkedBefore;\r\n    if (this.props.referencesLength > 0) return null;\r\n    if (this.props.documentTypeId === \"370\") state = State.DocumentNotAttachedSagsforlob;\r\n    else if (isDocTypePartOfClassifications && this.props.isSagsforlobPeriodValid) state = State.DocumentNotAttachedSagsforlob;\r\n    else if (isDocTypePartOfClassifications && !this.props.isSagsforlobPeriodValid) state = State.LawIsNotMarkedBefore;\r\n    else if (this.props.isSagsforlobPeriodValid) state = State.DocumentNotAttachedSagsforlob;\r\n    else if (this.props.isSagsforlobPeriodValid) state = State.LawIsNotMarkedBefore;\r\n\r\n    return (\r\n      <div>\r\n        {state === State.DocumentNotAttachedSagsforlob && <li className=\"no-references\">Dokumentet er ikke tilknyttet et sagsforløb.</li>}\r\n        {state === State.LawIsNotMarkedBefore && (\r\n          <li className=\"no-references\">\r\n            Love er først blevet opmærket med sagsforløb efter 08/10/1998. Derfor er der ikke tilknyttet noget sagsforløb til denne lov.\r\n          </li>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import React from \"react\";\r\nimport { IPdfLink } from \"../../models/IPdfLink\";\r\nimport { Modal, ModalHeader, ModalBody, Button, ModalFooter } from \"reactstrap\";\r\nimport { IconType, Icon } from \"@lexdania/components\";\r\nimport \"./PdfLink.scss\";\r\n\r\nexport interface IPdfLinkProps {\r\n  pdfLink: IPdfLink;\r\n  documentId: number;\r\n}\r\n\r\nexport const PdfLink: React.FC<IPdfLinkProps> = (props: IPdfLinkProps) => {\r\n  const [isModalOpen, setIsModalOpen] = React.useState(false);\r\n  const { pdfLink, documentId } = props;\r\n  const showAsDeactivated = !pdfLink.isPdfAvailable;\r\n  const closeModal = () => setIsModalOpen(false);\r\n  return (\r\n    <>\r\n      {!showAsDeactivated && (\r\n        <>\r\n          <a id=\"pdflink\" href={`/api/pdf/${documentId}`} className=\"mx-1\">\r\n            <span className=\"sr-only\">Vis PDF</span>\r\n            <Icon icon={IconType.FilePdf} className=\"pdf-link-icon\"></Icon>\r\n          </a>\r\n        </>\r\n      )}\r\n\r\n      {showAsDeactivated && (\r\n        <>\r\n          <span id=\"pdflinkmuted\" className=\"mx-1\" onClick={() => setIsModalOpen(true)}>\r\n            <Icon icon={IconType.FilePdf} className={\"pdf-link-icon text-muted\"}></Icon>\r\n          </span>\r\n          <Modal isOpen={isModalOpen} toggle={() => closeModal()}>\r\n            <ModalHeader toggle={() => closeModal()}>Pdf ikke tilgængelig</ModalHeader>\r\n            <ModalBody>{pdfLink.isPdfAvailable ? null : \"Dokumentet findes ikke i struktureret form. Det er derfor ikke muligt at generere en PDF.\"}</ModalBody>\r\n            <ModalFooter>\r\n              <Button color=\"primary\" onClick={() => closeModal()}>\r\n                Ok\r\n              </Button>\r\n            </ModalFooter>\r\n          </Modal>\r\n        </>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { IconType, Icon } from \"@lexdania/components\";\r\nimport \"./GoToTop.scss\";\r\n\r\nexport interface IGoToTopProps {\r\n  show: boolean;\r\n}\r\n\r\nexport const GoToTop: React.FC<IGoToTopProps> = (props: IGoToTopProps) => {\r\n  return (\r\n    <a\r\n      href=\"#\"\r\n      className={props.show ? \" scrollToTop button-show\" : \"scrollToTop\"}\r\n      onClick={e => {\r\n        e.preventDefault();\r\n        e.currentTarget.blur();\r\n        window.scrollTo(0, 0);\r\n      }}\r\n    >\r\n      <Icon icon={IconType.AngleUp}></Icon>\r\n      <span className=\"sr-only\">Gå til top</span>\r\n    </a>\r\n  );\r\n};\r\n","import React, { useRef } from \"react\";\r\nimport \"./TimelineInfo.scss\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ITimelineDocument } from \"../../../models/ITimelineDocument\";\r\n\r\nexport interface ITimelineInfoProps {\r\n  document: ITimelineDocument;\r\n  isCurrentDocument?: boolean;\r\n  isOpen: boolean;\r\n  isOutOfOrder: boolean;\r\n  isSecondary: boolean;\r\n  itemSize: number;\r\n}\r\n\r\nexport const TimelineInfo: React.FC<ITimelineInfoProps> = ({ document, isCurrentDocument, isOpen, isOutOfOrder, isSecondary, itemSize }) => {\r\n  const myRef = useRef<HTMLDivElement>(null);\r\n\r\n  // Effect to handle center/scroll on initial view\r\n  React.useEffect(() => {\r\n    if (isCurrentDocument && myRef.current) {\r\n      setTimeout(() => {\r\n        if (myRef.current) {\r\n          const scroller = myRef.current.closest(\".timeline-scroller\");\r\n          if (scroller) {\r\n            const targetRect = myRef.current.getBoundingClientRect();\r\n            const containerRect = scroller.getBoundingClientRect();\r\n            scroller.scrollLeft = targetRect.left - containerRect.left - (scroller.clientWidth - targetRect.width) / 2;\r\n          }\r\n        }\r\n      }, 50);\r\n    }\r\n  }, [isCurrentDocument]);\r\n\r\n  if (isOpen) {\r\n    return (\r\n      <div\r\n        className={\r\n          (isCurrentDocument ? \"current \" : \"\") +\r\n          (isOutOfOrder ? \"out-of-order \" : \"\") +\r\n          (isSecondary ? \"secondary \" : \"\") +\r\n          (isOpen ? \"is-open \" : \"\") +\r\n          \"timeline-item-info\"\r\n        }\r\n        ref={myRef}\r\n      >\r\n        {/* no tabindex - should never be focusable as dot is link */}\r\n        <Link className=\"timeline-item-label\" to={document.href} tabIndex={-1} title={document.title}>\r\n          <div className=\"timeline-item-info-type\">{document.documentType}</div>\r\n          <div className=\"timeline-item-info-text\">nr. {document.documentNumber}</div>\r\n        </Link>\r\n        <div className=\"timeline-item-info-date\">{(itemSize > 30 || isOpen) && document.signatureDate}</div>\r\n      </div>\r\n    );\r\n  } else {\r\n    return <></>;\r\n  }\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface ITimelineYearProps {\r\n  year: number;\r\n  itemSize: number;\r\n  className?: string;\r\n}\r\n\r\nexport const TimelineYear: React.FC<ITimelineYearProps> = ({ year, itemSize, className }) => {\r\n  return (\r\n    <li className={className ? \"timeline-year-item\" + className : \"timeline-year-item\"}>\r\n      <span>\r\n        <span className=\"sr-only\">År </span>\r\n        {(itemSize > 30 || year % 5 === 0) && year}\r\n      </span>\r\n    </li>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport \"./TimelinePreview.scss\";\r\nimport { ITimelineDocument } from \"../../../models/ITimelineDocument\";\r\nimport { IScrollInfo } from \"./Timeline\";\r\nimport { Icon, IconType } from \"@lexdania/components\";\r\nimport Slider from \"rc-slider\";\r\n\r\nexport interface ITimelinePreviewProps {\r\n  documents: ITimelineDocument[];\r\n  scrollInfo: IScrollInfo;\r\n  onZoom: (change: number) => void;\r\n  onSetScrollInfo: (scrollLeft: IScrollInfo) => void;\r\n  canZoomIn: boolean;\r\n  canZoomOut: boolean;\r\n}\r\n\r\nexport const TimelinePreview: React.FC<ITimelinePreviewProps> = ({ scrollInfo, documents, onSetScrollInfo, onZoom, canZoomIn, canZoomOut }) => {\r\n  const [randoms, setRandoms] = React.useState<boolean[]>([]); // Randoms is an array of bools. Used to generate watermark background\r\n  const [localScrollInfo, setLocalScrollInfo] = React.useState<IScrollInfo>({ clientWidth: 100, scrollLeft: 0, scrollWidth: 100 });\r\n\r\n  React.useEffect(() => {\r\n    const randoms =\r\n      documents.length > 5\r\n        ? documents.map(() => {\r\n            const randomNumber = Math.floor(Math.random() * 10);\r\n            return randomNumber > 5;\r\n          })\r\n        : documents.map(() => true);\r\n    // Make sure no randoms have siblings\r\n    const randomsWithoutSiblings = randoms.map((e, i, a) => (e && i > 0 && !a[i - 1]) || (e && i === 0));\r\n    setRandoms(randomsWithoutSiblings);\r\n  }, [documents]);\r\n\r\n  React.useEffect(() => {\r\n    setLocalScrollInfo(scrollInfo);\r\n  }, [scrollInfo]);\r\n\r\n  const handleScrollChange = (e: number | number[]) => {\r\n    const newScrollInfo: IScrollInfo = {\r\n      scrollLeft: e[0],\r\n      clientWidth: e[1] - e[0],\r\n      scrollWidth: scrollInfo.scrollWidth,\r\n    };\r\n\r\n    onSetScrollInfo(newScrollInfo);\r\n  };\r\n\r\n  const renderSliderBackground = (documents: ITimelineDocument[]) => {\r\n    const squares = Math.min(documents.length, 30);\r\n    const distance = 300 / squares;\r\n    const x2 = distance * squares;\r\n    if (!isNaN(x2))\r\n      return (\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-6 -2 310 27\" className=\"faded\">\r\n          <g fill=\"currentColor\" stroke=\"currentColor\">\r\n            <line x1=\"-5\" y1=\"17\" x2={x2} y2=\"18\" />\r\n            {[...Array(squares)].map((e, i) => {\r\n              const x = i * distance;\r\n              if (randoms[i])\r\n                return (\r\n                  <React.Fragment key={\"f_\" + i}>\r\n                    <path d={\"m\" + x + \",8 h-5 v-5 h10 v5 h-5 z\"}></path>\r\n                    <path d={\"m\" + x + \",20 h-5 v4 h10 v-4 h-5 z\"} opacity={0.6}></path>\r\n                    <path d={\"m\" + x + \",17 v-4 h-5 v-6 h10 v6 h-5 z\"} fill=\"white\"></path>\r\n                  </React.Fragment>\r\n                );\r\n              else return <circle key={\"c_\" + i} cx={x} cy=\"17\" r={2}></circle>;\r\n            })}\r\n          </g>\r\n        </svg>\r\n      );\r\n    else return <></>;\r\n  };\r\n\r\n  return (\r\n    <div className=\"timeline-preview\">\r\n      <button title=\"Zoom ud\" className=\"btn btn-primary\" onClick={() => onZoom(-19)} disabled={!canZoomIn}>\r\n        <Icon icon={IconType.Minus}></Icon>\r\n        <span className=\"sr-only\">Zoom ud</span>\r\n      </button>\r\n      <div className=\"slider-wrapper\">\r\n        {renderSliderBackground(documents)}\r\n        <div className=\"scroll-slider\">\r\n          <Slider\r\n            disabled={!(canZoomIn || canZoomOut)}\r\n            draggableTrack={true}\r\n            min={0}\r\n            max={localScrollInfo.scrollWidth}\r\n            range\r\n            allowCross={false}\r\n            onChange={e => {\r\n              var newWidth = e[1] - e[0];\r\n              const c = {\r\n                clientWidth: newWidth,\r\n                scrollLeft: e[0],\r\n                scrollWidth: localScrollInfo.scrollWidth,\r\n              };\r\n\r\n              setLocalScrollInfo(c);\r\n\r\n              // If only scrolling, notify timeline\r\n              if (newWidth === localScrollInfo.clientWidth) handleScrollChange(e);\r\n            }}\r\n            onAfterChange={e => {\r\n              var newWidth = e[1] - e[0];\r\n              if (newWidth === 0) newWidth = 1;\r\n              // In changing size, notify timeline after change. Trying to do this onChange corrupts sliderdrag\r\n              if (newWidth !== localScrollInfo.clientWidth) handleScrollChange([e[0], e[0] + newWidth]);\r\n            }}\r\n            value={[localScrollInfo.scrollLeft, localScrollInfo.scrollLeft + localScrollInfo.clientWidth]}\r\n          />\r\n        </div>\r\n      </div>\r\n      <button title=\"Zoom ind\" className=\"btn btn-primary\" onClick={() => onZoom(19)} disabled={!canZoomOut}>\r\n        <Icon icon={IconType.Plus}></Icon>\r\n        <span className=\"sr-only\">Zoom ind</span>\r\n      </button>\r\n    </div>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport \"./TimelineDetailsModal.scss\";\r\nimport { Badge, Button, Col, Modal, ModalBody, ModalFooter, ModalHeader, Row } from \"reactstrap\";\r\nimport { ITimelineDocument } from \"../../../models/ITimelineDocument\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ITimelineItem } from \"./Timeline\";\r\n\r\nexport interface ITimelineDetailsModalProps {\r\n  isOpen: boolean;\r\n  closeDetailsModal: () => void;\r\n  timelineItems: ITimelineItem[];\r\n  staticItems: ITimelineItem[];\r\n}\r\n\r\nexport const TimelineDetailsModal: React.FC<ITimelineDetailsModalProps> = ({ isOpen, closeDetailsModal, timelineItems, staticItems }) => {\r\n  const [currentTimelineDocument, setCurrentTimelineDocument] = React.useState<ITimelineDocument>();\r\n  const currentRef = React.useRef<HTMLLIElement>(null);\r\n\r\n  // Effect to locate current document\r\n  React.useEffect(() => {\r\n    var current = timelineItems.filter(x => x.documentItem?.isCurrentDocument);\r\n    if (current.length > 0) {\r\n      setCurrentTimelineDocument(current[0].documentItem);\r\n    } else {\r\n      current = staticItems.filter(x => x.documentItem?.isCurrentDocument);\r\n      if (current.length > 0) setCurrentTimelineDocument(current[0].documentItem);\r\n    }\r\n  }, [timelineItems, staticItems]);\r\n\r\n  // Scroll to current element - If it stops working, timeout could be increased\r\n  setTimeout(() => {\r\n    if (currentRef.current) {\r\n      currentRef.current.scrollIntoView({ block: \"start\", behavior: \"auto\" });\r\n    }\r\n  }, 50);\r\n\r\n  const renderTimelineItem = (item: ITimelineItem, index: number) => {\r\n    const isSecondary = item.documentItem?.documentTypeId !== 30;\r\n    const isDocument = item.documentItem !== undefined;\r\n    const isError = item.errorItem !== undefined;\r\n    if (isDocument)\r\n      return (\r\n        item &&\r\n        item.documentItem && (\r\n          <li\r\n            className={\r\n              \"timeline-item\" +\r\n              (item.documentItem.isCurrentDocument ? \" timeline-item-current\" : \"\") +\r\n              (item.documentItem.isOutOfOrder ? \" timeline-item-out-of-order\" : \"\")\r\n            }\r\n            key={\"timeline-item_\" + item.documentItem.year + \"_\" + item.documentItem.documentNumber + \"_\" + index}\r\n            ref={item.documentItem.isCurrentDocument ? currentRef : null}\r\n          >\r\n            <Row>\r\n              <Col lg={3} className=\"d-none d-lg-block timeline-metadata text-right\">\r\n                <div className=\"timeline-shortname\">{item.documentItem.shortName}</div>\r\n\r\n                <Badge className={\"timeline-documenttype mr-2\" + (isSecondary ? \" timeline-documenttype-secondary \" : \" timeline-documenttype-primary \")}>\r\n                  {item.documentItem.documentType}\r\n                </Badge>\r\n                <Badge className={item.documentItem.isHistoric ? \"historic-badge\" : \"\"}>{item.documentItem.isHistoric ? \"HISTORISK\" : \"GÆLDENDE\"}</Badge>\r\n                <div>{item.documentItem.ressort}</div>\r\n              </Col>\r\n              <Col xs={1} className={\"timeline-indicator\" + (isSecondary ? \" timeline-indicator-secondary\" : \"\")}></Col>\r\n              <Col xs={11} lg={8} className=\"timeline-content  pl-4 pl-lg-0\">\r\n                <div className=\"d-flex d-lg-none justify-content-between\">\r\n                  <div className=\"timeline-shortname\">{item.documentItem.shortName}</div>\r\n                  <div>\r\n                    <Badge className={\"timeline-documenttype  mr-2\" + (isSecondary ? \" timeline-documenttype-secondary \" : \"\")}>\r\n                      {item.documentItem.documentType}\r\n                    </Badge>\r\n                    <Badge className={\"mr-2\" + (item.documentItem.isHistoric ? \" historic-badge \" : \"\")}>\r\n                      {item.documentItem.isHistoric ? \"HISTORISK\" : \"GÆLDENDE\"}\r\n                    </Badge>\r\n                  </div>\r\n                </div>\r\n                <div className=\"d-block d-lg-none\">{item.documentItem.ressort}</div>\r\n                <Link to={item.documentItem.href}>\r\n                  <div>{item.documentItem.title}</div>\r\n                </Link>\r\n              </Col>\r\n            </Row>\r\n          </li>\r\n        )\r\n      );\r\n    if (isError) {\r\n      return (\r\n        item &&\r\n        item.errorItem && (\r\n          <li className={\"timeline-item timeline-item-error\"} key={\"timeline-item-error-\" + index}>\r\n            <Row>\r\n              <Col xs={3} className=\"d-none d-lg-block timeline-metadata\"></Col>\r\n              <Col xs={1} className=\"timeline-indicator\"></Col>\r\n              <Col lg={8} xs={11} className=\"timeline-content pl-4 pl-lg-0\">\r\n                <div>{item.errorItem.errorMessage}</div>\r\n              </Col>\r\n            </Row>\r\n          </li>\r\n        )\r\n      );\r\n    }\r\n    return <React.Fragment key={\"empty-item-\" + index}></React.Fragment>;\r\n  };\r\n\r\n  return (\r\n    <Modal isOpen={isOpen} className=\"timeline-details-modal modal-lg\">\r\n      <ModalHeader toggle={closeDetailsModal}>Tidslinje ({currentTimelineDocument?.shortName})</ModalHeader>\r\n      <ModalBody className=\"background-secondary px-0 pb-0\">\r\n        <ol className=\"timeline-details mb-0\">\r\n          <li className=\"timeline-item row timeline-item-today\" key=\"timeline-item-today\">\r\n            <Col xs={3} className=\"d-none d-lg-block timeline-metadata text-right\">\r\n              I dag\r\n            </Col>\r\n            <Col xs={1} className=\"timeline-indicator\"></Col>\r\n            <Col xs={11} lg={8} className=\"timeline-content\">\r\n              <div className=\"d-block d-lg-none timeline-metadata pl-2\">I dag</div>\r\n            </Col>\r\n          </li>\r\n          {timelineItems\r\n            .filter(x => x.yearItem === undefined)\r\n            .slice()\r\n            .reverse()\r\n            .map(renderTimelineItem)}\r\n          {staticItems\r\n            .filter(x => x.yearItem === undefined)\r\n            .slice()\r\n            .reverse()\r\n            .map(renderTimelineItem)}\r\n        </ol>\r\n      </ModalBody>\r\n      <ModalFooter>\r\n        <Button color=\"primary\" onClick={closeDetailsModal}>\r\n          Luk\r\n        </Button>\r\n      </ModalFooter>\r\n    </Modal>\r\n  );\r\n};\r\n","import React, { useCallback } from \"react\";\r\nimport \"./Timeline.scss\";\r\nimport { ITimelineDocument } from \"../../../models/ITimelineDocument\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from \"reactstrap\";\r\nimport { TimelineInfo } from \"./TimelineInfo\";\r\nimport { TimelineYear } from \"./TimelineYear\";\r\nimport { TimelinePreview } from \"./TimelinePreview\";\r\nimport { debounce } from \"ts-debounce\";\r\nimport { TimelineDetailsModal } from \"./TimelineDetailsModal\";\r\nimport { IconButton, IconType } from \"@lexdania/components\";\r\n\r\ninterface IYearItem {\r\n  year: number;\r\n  isSqueezeMarker: boolean;\r\n}\r\n\r\ninterface IError {\r\n  errorMessage: string;\r\n}\r\n\r\nexport interface ITimelineItem {\r\n  documentItem?: ITimelineDocument;\r\n  yearItem?: IYearItem;\r\n  errorItem?: IError;\r\n  todayItem?: boolean;\r\n}\r\n\r\ninterface IErrorDialog {\r\n  isOpen: boolean;\r\n  errors?: string[];\r\n}\r\n\r\nexport interface ITimelineProps {\r\n  documents: ITimelineDocument[] | null;\r\n  isTimelineDetailsModalOpen: boolean;\r\n  toggleTimelineDetailsModal: () => void;\r\n}\r\n\r\nexport interface IScrollInfo {\r\n  clientWidth: number;\r\n  scrollWidth: number;\r\n  scrollLeft: number;\r\n}\r\n\r\nexport const Timeline: React.FC<ITimelineProps> = ({ documents, isTimelineDetailsModalOpen, toggleTimelineDetailsModal }) => {\r\n  const scrollerRef = React.useRef<HTMLDivElement>(null);\r\n  const [staticItems, setStaticItems] = React.useState<ITimelineItem[]>([]); // The static items before the timeline\r\n  const [timelineItems, setTimelineItems] = React.useState<ITimelineItem[]>([]); // The items on the timeline itself (not the static ones to the left)\r\n  const [openedItem, setOpenedItem] = React.useState<number | undefined>(undefined); // The currently open item\r\n  const [errorDialog, setErrorDialog] = React.useState<IErrorDialog>({ isOpen: false }); // Toggle state for error dialog\r\n  const [allErrors, setAllErrors] = React.useState<string[]>([]); // All errors in the timeline\r\n  const [scrollPosition, setScrollPosition] = React.useState<number | null>(null); // Used to recreate current scroll position after zoom\r\n  const [scrollInfo, setScrollInfo] = React.useState<IScrollInfo>({ clientWidth: 0, scrollLeft: 0, scrollWidth: 100 }); // State used to persist scroll position for timeline (updated debounced to prevent lag)\r\n  const [directScrollInfo, setDirectScrollInfo] = React.useState<IScrollInfo>({ clientWidth: 0, scrollLeft: 0, scrollWidth: 100 }); // State used to communicate scroll position from timeline to preview (updated realtime)\r\n  const [itemSize, setItemSize] = React.useState<number>(30);\r\n  const defaultMinItemSize = 15;\r\n  const [minItemSize, setMinItemSize] = React.useState(defaultMinItemSize);\r\n\r\n  const maxItemSize = 70;\r\n  const minInitialItemSize = 33; // This differs from defaultMinItemSize as this is the item size that allows for further zoom out\r\n\r\n  // Effect to generate timeline items based on model returned from backend\r\n  React.useEffect(() => {\r\n    const createTimelineDocument = (document: ITimelineDocument): ITimelineItem => {\r\n      return {\r\n        documentItem: document,\r\n      };\r\n    };\r\n    const createTimelineYear = (year: number, squeeze: boolean): ITimelineItem => {\r\n      return {\r\n        yearItem: { year: year, isSqueezeMarker: squeeze },\r\n      };\r\n    };\r\n    const createTimelineError = (error: string): ITimelineItem => {\r\n      return {\r\n        errorItem: { errorMessage: error },\r\n      };\r\n    };\r\n\r\n    if (documents && documents.length > 0) {\r\n      if (documents[0].isMainLaw) {\r\n        setStaticItems([createTimelineYear(documents[0].year, false), createTimelineDocument(documents[0])]);\r\n      } else {\r\n        // If first document has errors before - then the first of those will be located on the static area\r\n        if (documents[0].errorsBeforeItem && documents[0].errorsBeforeItem.length > 0)\r\n          setStaticItems([createTimelineYear(documents[0].year, false), createTimelineError(documents[0].errorsBeforeItem[0])]);\r\n        else setStaticItems([createTimelineYear(documents[0].year, false)]);\r\n      }\r\n\r\n      const generateTimelineItems = function*(\r\n        previous: ITimelineDocument | undefined,\r\n        current: ITimelineDocument,\r\n        ignoreFirstError: boolean\r\n      ): Generator<ITimelineItem, void> {\r\n        if (previous && !current.isOutOfOrder) {\r\n          // Create year items for years with or without documents\r\n          let isSqueezingYears = false;\r\n          for (let index = previous.year + 1; index <= current.year; index++) {\r\n            if (index === previous.year + 1 || index === current.year) {\r\n              yield createTimelineYear(index, false);\r\n            } else if (!isSqueezingYears) {\r\n              yield createTimelineYear(index, true);\r\n              isSqueezingYears = true;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (current?.errorsBeforeItem) {\r\n          // If first document has errors before - then the first of those will be ignored because it is located on the static area\r\n          for (let index = ignoreFirstError ? 1 : 0; index < current.errorsBeforeItem.length; index++) {\r\n            yield createTimelineError(current.errorsBeforeItem[index]);\r\n          }\r\n        }\r\n\r\n        yield createTimelineDocument(current);\r\n\r\n        if (current?.errorsAfterItem) {\r\n          for (let index = 0; index < current.errorsAfterItem.length; index++) {\r\n            yield createTimelineError(current.errorsAfterItem[index]);\r\n          }\r\n        }\r\n      };\r\n\r\n      const items = documents.flatMap<ITimelineItem>((document, index) => {\r\n        if (index === 0 && !document.isMainLaw) {\r\n          return Array.from(generateTimelineItems(undefined, document, true));\r\n        } else if (index > 0) {\r\n          var i = index;\r\n          var previous: ITimelineDocument | undefined;\r\n          while (i-- > 0) {\r\n            previous = documents[i];\r\n            if (!previous.isOutOfOrder) break;\r\n          }\r\n          return Array.from(generateTimelineItems(previous, document, false));\r\n        }\r\n        return [];\r\n      });\r\n\r\n      setTimelineItems(items.concat({ todayItem: true }));\r\n    } else {\r\n      setTimelineItems([]);\r\n      setStaticItems([]);\r\n    }\r\n    setMinItemSize(defaultMinItemSize);\r\n  }, [documents, documents?.length]);\r\n\r\n  // Effect to handle initial zoom level and set dynamic min item size\r\n  React.useEffect(() => {\r\n    if (scrollerRef.current && timelineItems.length > 0) {\r\n      // It is intended that the zooming is only initial render - not recalculated on resize\r\n      // Number of items on the timeline (not the \"static ones\") on various zoom levels\r\n\r\n      var newItemSize = scrollerRef.current?.clientWidth / timelineItems.length;\r\n\r\n      if (newItemSize < minItemSize) newItemSize = minItemSize;\r\n      else if (newItemSize > minItemSize) setMinItemSize(newItemSize);\r\n\r\n      if (newItemSize < minInitialItemSize) newItemSize = minInitialItemSize;\r\n\r\n      if (newItemSize > maxItemSize) newItemSize = maxItemSize;\r\n\r\n      setItemSize(newItemSize);\r\n    }\r\n  }, [timelineItems, timelineItems.length, minItemSize]);\r\n\r\n  // Effect to handle errors state\r\n  React.useEffect(() => {\r\n    const errors = staticItems\r\n      .filter(x => x.errorItem)\r\n      .map(x => x.errorItem?.errorMessage ?? \"\")\r\n      .concat(timelineItems.filter(x => x.errorItem).map(x => x.errorItem?.errorMessage ?? \"\"));\r\n    setAllErrors(errors);\r\n  }, [staticItems, timelineItems]);\r\n\r\n  const setScrollInfosFromScrollerRef = useCallback(() => {\r\n    const setScrollInfoFromScrollerRef = () => {\r\n      if (scrollerRef.current) {\r\n        const e = scrollerRef.current;\r\n\r\n        setScrollInfo({\r\n          clientWidth: e.clientWidth,\r\n          scrollLeft: e.scrollLeft,\r\n          scrollWidth: e.scrollWidth,\r\n        });\r\n      }\r\n    };\r\n\r\n    if (scrollerRef.current) {\r\n      const e = scrollerRef.current;\r\n\r\n      setDirectScrollInfo({\r\n        clientWidth: e.clientWidth,\r\n        scrollLeft: e.scrollLeft,\r\n        scrollWidth: e.scrollWidth,\r\n      });\r\n    }\r\n    debounce(setScrollInfoFromScrollerRef, 50);\r\n  }, []);\r\n\r\n  // Attach to scroll event to capture scroll position and whether scroll is done\r\n  React.useEffect(() => {\r\n    if (scrollerRef.current) {\r\n      scrollerRef.current.onscroll = setScrollInfosFromScrollerRef;\r\n    }\r\n  }, [setScrollInfosFromScrollerRef]);\r\n\r\n  // Effect to scroll to correct position when timeline-preview has changed scroll/zoom\r\n  React.useEffect(() => {\r\n    if (scrollerRef.current) {\r\n      if (scrollInfo.clientWidth !== 0 && scrollInfo.clientWidth !== scrollerRef.current.clientWidth) {\r\n        const widthPercentage = scrollInfo.clientWidth / scrollInfo.scrollWidth;\r\n        const itemsToDisplay = timelineItems.length * widthPercentage;\r\n        var itemWidth = scrollerRef.current.clientWidth / itemsToDisplay;\r\n\r\n        setScrollPosition((scrollInfo.scrollLeft + 0.5 * scrollInfo.clientWidth) / scrollInfo.scrollWidth);\r\n\r\n        if (itemWidth < minItemSize) itemWidth = minItemSize;\r\n\r\n        if (itemWidth > maxItemSize) itemWidth = maxItemSize;\r\n\r\n        setItemSize(Math.round(itemWidth));\r\n      }\r\n      if (scrollerRef.current.scrollLeft != scrollInfo.scrollLeft) {\r\n        scrollerRef.current.scrollLeft = scrollInfo.scrollLeft;\r\n      }\r\n    }\r\n  }, [scrollInfo, timelineItems.length, minItemSize]);\r\n\r\n  // Effect to update css/style/widths when itemsize has changed due to zoom\r\n  React.useEffect(() => {\r\n    const contentWidth = Math.round(itemSize * timelineItems.length);\r\n    document.documentElement.style.setProperty(\"--timeline-content-width\", contentWidth + \"px\");\r\n    document.documentElement.style.setProperty(\"--timeline-gap\", itemSize + \"px\");\r\n\r\n    if (scrollPosition && scrollerRef.current) {\r\n      scrollerRef.current.scrollLeft = scrollerRef.current.scrollWidth * scrollPosition - scrollerRef.current.clientWidth * 0.5;\r\n      setScrollPosition(null);\r\n    } else if (scrollerRef.current && scrollerRef.current.scrollLeft === 0) {\r\n      setScrollInfosFromScrollerRef(); // Trigger preview to redraw if no scroll required initially\r\n    }\r\n  }, [itemSize, scrollPosition, timelineItems.length, setScrollInfosFromScrollerRef]);\r\n\r\n  const onZoom = (change: number) => {\r\n    if (scrollerRef.current) {\r\n      const e = scrollerRef.current;\r\n      setScrollPosition((e.scrollLeft + 0.5 * e.clientWidth) / e.scrollWidth);\r\n    }\r\n    var newItemWidth = itemSize + change;\r\n    if (newItemWidth < minItemSize) newItemWidth = minItemSize;\r\n\r\n    if (newItemWidth > maxItemSize) newItemWidth = maxItemSize;\r\n    setItemSize(Math.round(newItemWidth));\r\n\r\n    setScrollInfosFromScrollerRef();\r\n  };\r\n\r\n  if (documents) {\r\n    const canZoomIn = itemSize > minItemSize && timelineItems.length > 0;\r\n    const canZoomOut = itemSize < maxItemSize && timelineItems.length > 0;\r\n    const hasErrorButton = timelineItems.filter(x => x.errorItem).length > 0;\r\n    const currentDocumentIndex = timelineItems.findIndex(x => x.documentItem?.isCurrentDocument);\r\n    const allLbks = timelineItems.filter(x => x.documentItem?.documentTypeId === 30);\r\n    const lastLbk = allLbks[allLbks.length - 1];\r\n    const showGoToLastLbk = lastLbk && timelineItems.indexOf(lastLbk) > currentDocumentIndex;\r\n\r\n    return (\r\n      <>\r\n        <div className=\"timeline\">\r\n          <h3 className=\"sr-only\">Tidslinje </h3>\r\n\r\n          <div className=\"timeline-buttons d-flex justify-content-between w-100 mb-2\">\r\n            <div>\r\n              <Button color=\"secondary\" className=\"btn btn-details mr-2\" onClick={toggleTimelineDetailsModal}>\r\n                Vis detaljer\r\n              </Button>\r\n              {showGoToLastLbk && (\r\n                <Link to={lastLbk.documentItem!.href} className=\"btn btn-secondary btn-latest mr-2\">\r\n                  Gå til seneste LBK\r\n                </Link>\r\n              )}\r\n              {hasErrorButton && (\r\n                <IconButton\r\n                  icon={IconType.ExclamationCircle}\r\n                  color=\"secondary\"\r\n                  className=\"btn-exclamation\"\r\n                  solidIcon={true}\r\n                  title=\"Tidslinjen er muligvis ikke fuldt ud retvisende. Klik her for at se yderligere information.\"\r\n                  onClick={() => {\r\n                    setErrorDialog({ isOpen: true, errors: allErrors });\r\n                  }}\r\n                >\r\n                  <span className=\"sr-only\">Tidslinjen er muligvis ikke fuldt ud retvisende. Klik her for at se yderligere information.</span>\r\n                </IconButton>\r\n              )}\r\n            </div>\r\n\r\n            <TimelinePreview\r\n              onZoom={onZoom}\r\n              documents={documents}\r\n              scrollInfo={directScrollInfo}\r\n              canZoomIn={canZoomIn}\r\n              canZoomOut={canZoomOut}\r\n              onSetScrollInfo={setScrollInfo}\r\n            />\r\n          </div>\r\n\r\n          <div className=\"timeline-wrapper\">\r\n            <div className={(directScrollInfo && directScrollInfo.scrollLeft > 0 ? \"scrolled \" : \"\") + \"timeline-start\"}>\r\n              {staticItems.length > 0 && staticItems[0].yearItem && (\r\n                <>\r\n                  <TimelineYear\r\n                    year={staticItems[0].yearItem.year}\r\n                    itemSize={itemSize}\r\n                    className={staticItems.length > 1 && staticItems[1].errorItem ? \" error\" : \"\"}\r\n                  />\r\n                  {staticItems.length > 1 && staticItems[1].documentItem && (\r\n                    <div className={(staticItems[1].documentItem.isCurrentDocument ? \"current \" : \"\") + \"timeline-item\"}>\r\n                      <Link className=\"timeline-dot\" to={staticItems[1].documentItem.href} title={staticItems[1].documentItem.shortName}>\r\n                        <div className=\"sr-only\">{staticItems[1].documentItem.shortName}</div>\r\n                      </Link>\r\n                      <TimelineInfo\r\n                        document={staticItems[1].documentItem}\r\n                        isOutOfOrder={false}\r\n                        isCurrentDocument={staticItems[1].documentItem.isCurrentDocument}\r\n                        isOpen={true}\r\n                        isSecondary={false}\r\n                        itemSize={itemSize}\r\n                      />\r\n                    </div>\r\n                  )}\r\n                  {staticItems.length > 1 && staticItems[1].errorItem && (\r\n                    <div className=\"timeline-item error\">\r\n                      <a\r\n                        className=\"timeline-dot\"\r\n                        href=\"#\"\r\n                        title={staticItems[1].errorItem.errorMessage}\r\n                        onClick={e => {\r\n                          e.preventDefault();\r\n                          setErrorDialog({ isOpen: true, errors: [staticItems[1].errorItem!.errorMessage] });\r\n                        }}\r\n                      >\r\n                        <div className=\"sr-only\">{staticItems[1].errorItem.errorMessage}</div>\r\n                      </a>\r\n                    </div>\r\n                  )}\r\n                </>\r\n              )}\r\n            </div>\r\n            {/* tabindex -1 prvents focus to the whole scroller in firefox */}\r\n            <nav className=\"timeline-scroller\" tabIndex={-1} ref={scrollerRef}>\r\n              <ol className={\"timeline-content\"}>\r\n                {timelineItems.map((item, index) => {\r\n                  const nextDocumentItem = timelineItems[index + 1]?.documentItem;\r\n                  const previousDocumentItem = timelineItems[index - 1]?.documentItem;\r\n                  if (item.yearItem) {\r\n                    if (!item.yearItem.isSqueezeMarker) {\r\n                      return <TimelineYear year={item.yearItem.year} itemSize={itemSize} key={\"timeline-year-item_\" + item.yearItem.year} />;\r\n                    } else {\r\n                      return (\r\n                        <li className=\"timeline-year-squeeze-item\" key={\"timeline-year-squeeze-item_\" + item.yearItem.year}>\r\n                          <span>\r\n                            <span className=\"sr-only\">...</span>\r\n                          </span>\r\n                        </li>\r\n                      );\r\n                    }\r\n                  } else if (item.errorItem) {\r\n                    return (\r\n                      <li className=\"timeline-item error\" key={\"timeline-error-item_\" + index}>\r\n                        <a\r\n                          className=\"timeline-dot\"\r\n                          href=\"#\"\r\n                          title={item.errorItem.errorMessage}\r\n                          onClick={e => {\r\n                            e.preventDefault();\r\n                            setErrorDialog({ isOpen: true, errors: [item.errorItem!.errorMessage] });\r\n                          }}\r\n                        >\r\n                          <div className=\"sr-only\">{item.errorItem.errorMessage}</div>\r\n                        </a>\r\n                      </li>\r\n                    );\r\n                  } else if (item.documentItem) {\r\n                    const isSecondary = item.documentItem.documentTypeId !== 30;\r\n                    return (\r\n                      <li\r\n                        className={\r\n                          (isSecondary ? \"secondary \" : \"\") +\r\n                          (item.documentItem.isCurrentDocument ? \"current \" : \"\") +\r\n                          (item.documentItem.isOutOfOrder ? \"out-of-order \" : \"\") +\r\n                          \"timeline-item\"\r\n                        }\r\n                        key={\"timeline-item_\" + item.documentItem.year + \"_\" + item.documentItem.documentNumber + \"_\" + index}\r\n                      >\r\n                        <Link\r\n                          to={item.documentItem.href}\r\n                          className=\"timeline-dot\"\r\n                          title={item.documentItem.shortName}\r\n                          onClick={e => {\r\n                            if (isMobile) {\r\n                              e.preventDefault();\r\n                              setOpenedItem(index);\r\n                            }\r\n                          }}\r\n                          onMouseEnter={() => {\r\n                            setOpenedItem(index);\r\n                          }}\r\n                          onFocus={() => {\r\n                            setOpenedItem(index);\r\n                          }}\r\n                        >\r\n                          <div className=\"sr-only\">{item.documentItem.shortName}</div>\r\n                        </Link>\r\n                        <TimelineInfo\r\n                          document={item.documentItem}\r\n                          isCurrentDocument={item.documentItem.isCurrentDocument}\r\n                          isOutOfOrder={item.documentItem.isOutOfOrder}\r\n                          isSecondary={isSecondary}\r\n                          isOpen={\r\n                            itemSize >= maxItemSize || // Opens all documents on fully zoomed\r\n                            (!openedItem && item.documentItem.isCurrentDocument) || // Opens current document if no item has been opened\r\n                            openedItem === index || // Opens opened item\r\n                            (itemSize > 30 &&\r\n                              item.documentItem.documentTypeId === 30 &&\r\n                              openedItem !== index + 1 &&\r\n                              !nextDocumentItem?.isCurrentDocument &&\r\n                              openedItem !== index - 1 &&\r\n                              !previousDocumentItem?.isCurrentDocument &&\r\n                              !(\r\n                                nextDocumentItem &&\r\n                                nextDocumentItem.documentTypeId === 30 &&\r\n                                previousDocumentItem &&\r\n                                previousDocumentItem.documentTypeId === 30\r\n                              )) // Hides LBK's when in close proximity to other opened items or in between to other LBK's\r\n                          }\r\n                          itemSize={itemSize}\r\n                        />\r\n                      </li>\r\n                    );\r\n                  } else if (item.todayItem) {\r\n                    return (\r\n                      <li className=\"timeline-item today\" key=\"timeline-item-today\">\r\n                        <div className=\"timeline-dot\"></div>\r\n                        <span>{itemSize > 30 && \"I dag\"}</span>\r\n                      </li>\r\n                    );\r\n                  } else return <></>;\r\n                })}\r\n              </ol>\r\n            </nav>\r\n          </div>\r\n        </div>\r\n\r\n        <Modal isOpen={errorDialog.isOpen}>\r\n          <ModalHeader toggle={() => setErrorDialog({ isOpen: false })}>Tidslinjeinfo</ModalHeader>\r\n          <ModalBody className=\"background-secondary\">\r\n            {errorDialog.errors === allErrors && (\r\n              <>\r\n                Tidslinjen er muligvis ikke fuldt ud retvisende. Dette kan skyldes manglende eller forkerte referencer mellem dokumenter, eller at ældre\r\n                dokumenter ikke er indlagt op Retsinformation:\r\n                <br />\r\n                <br />\r\n              </>\r\n            )}\r\n            <ul>\r\n              {errorDialog.errors?.map((s, i) => {\r\n                return <li key={\"timeline_error_\" + i}>{s}</li>;\r\n              })}\r\n            </ul>\r\n          </ModalBody>\r\n          <ModalFooter>\r\n            <Button\r\n              color=\"primary\"\r\n              onClick={() => {\r\n                setErrorDialog({ isOpen: false });\r\n              }}\r\n            >\r\n              Luk\r\n            </Button>\r\n          </ModalFooter>\r\n        </Modal>\r\n\r\n        <TimelineDetailsModal\r\n          isOpen={isTimelineDetailsModalOpen}\r\n          closeDetailsModal={toggleTimelineDetailsModal}\r\n          timelineItems={timelineItems}\r\n          staticItems={staticItems}\r\n        ></TimelineDetailsModal>\r\n      </>\r\n    );\r\n  } else return <></>;\r\n};\r\n","import * as React from \"react\";\r\nimport \"./DocumentContent.scss\";\r\nimport { Badge, Button, Container, Row, Col, Collapse, Label, Modal, ModalHeader, ModalBody, ModalFooter } from \"reactstrap\";\r\nimport { IconType, Icon, IconButton, Permalink, Printlink } from \"@lexdania/components\";\r\nimport { IDocumentDisplayMetadata, IDocumentDetails } from \"../../models/IDocumentDetails\";\r\nimport ReprintNotes from \"../../components/reprintNotes/ReprintNotes\";\r\n\r\nimport { PdfLink } from \"../../components/pdf/PdfLink\";\r\nimport { IDocumentTag } from \"../../models/IDocumentTag\";\r\nimport { showDocumentStateBadge } from \"../../components/document/Document\";\r\nimport { IReprintNote } from \"../../models/IReprintNote\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport { GoToTop } from \"../../components/GoToTop/GoToTop\";\r\nimport { Timeline } from \"./timeline/Timeline\";\r\nimport { ITimelineDocument } from \"../../models/ITimelineDocument\";\r\n\r\nexport interface IDocumentContentProps {\r\n  restylingRootId: string;\r\n  documentDetails: IDocumentDetails;\r\n  reprintNotes?: IReprintNote[];\r\n  scrollElementIntoView: (elementId: string) => void;\r\n  timelineDocuments: ITimelineDocument[] | null;\r\n}\r\n\r\ninterface IGoToParagraphState {\r\n  isError: boolean;\r\n  paragraph: string;\r\n  id: string | undefined;\r\n}\r\n\r\nexport const DocumentContent: React.FC<IDocumentContentProps> = ({\r\n  documentDetails,\r\n  restylingRootId,\r\n  reprintNotes,\r\n  timelineDocuments,\r\n  scrollElementIntoView,\r\n}) => {\r\n  var {\r\n    id,\r\n    shortName,\r\n    title,\r\n    documentHtml,\r\n    editorialNotes,\r\n    isReprint,\r\n    isHistorical,\r\n    pdfLink,\r\n    metadata,\r\n    ressort,\r\n    popularTitle,\r\n    documentFobTagGroup,\r\n    alternativeMedia,\r\n    documentTypeId,\r\n  } = documentDetails;\r\n\r\n  const [showReprintNote, setShowReprintNote] = React.useState(false);\r\n  const [openMetadata, setOpenMetadata] = React.useState(false);\r\n  const [openTimeline, setOpenTimeline] = React.useState(true);\r\n  const [isTimelineDetailsModalOpen, setIsTimelineDetailsModalOpen] = React.useState(false);\r\n  const [showTagModal, setShowTagModal] = React.useState(false);\r\n  const [showEditotialNotes, setShowEditorialNotes] = React.useState(false);\r\n  const [showAlternativeMedia, setShowAlternativeMedia] = React.useState(false);\r\n  const [showGoToTop, setShowGoToTop] = React.useState(false);\r\n  const [goToParagraph, setGoToParagraph] = React.useState<IGoToParagraphState | undefined>(undefined);\r\n  const paragraphSearchTabRef = React.useRef<HTMLDivElement>(null);\r\n  const paragraphSearchTabInputRef = React.useRef<HTMLInputElement>(null);\r\n  const mainContentRef = React.useRef<HTMLDivElement>(null);\r\n\r\n  React.useEffect(() => {\r\n    const onScroll = () => {\r\n      if (paragraphSearchTabRef.current && mainContentRef.current) {\r\n        const rect = mainContentRef.current.getBoundingClientRect();\r\n\r\n        if (rect.top < -40) {\r\n          paragraphSearchTabRef.current.classList.add(\"paragraph-search-tab-extended\");\r\n          setShowGoToTop(true);\r\n        } else {\r\n          paragraphSearchTabRef.current.classList.remove(\"paragraph-search-tab-extended\");\r\n          setShowGoToTop(false);\r\n        }\r\n      }\r\n    };\r\n\r\n    // clean up code\r\n    window.removeEventListener(\"scroll\", onScroll);\r\n    window.addEventListener(\"scroll\", onScroll, { passive: true });\r\n    return () => window.removeEventListener(\"scroll\", onScroll);\r\n  }, []);\r\n\r\n  const handleGoToParagraph = () => {\r\n    if (goToParagraph && goToParagraph.id && !goToParagraph.isError) {\r\n      // iPhone - when changing # in url the go to paragraph functionality is unstable.\r\n      if (!isMobile) window.location.hash = goToParagraph.id;\r\n\r\n      // iPhone - this makes the keyboard disappear if the user uses the soft \"Go\" button on the keyboard\r\n      if (paragraphSearchTabInputRef.current) paragraphSearchTabInputRef.current.blur();\r\n\r\n      scrollElementIntoView(goToParagraph.id);\r\n    }\r\n  };\r\n\r\n  const toggleReprintModal = () => {\r\n    setShowReprintNote(!showReprintNote);\r\n  };\r\n\r\n  const toggleTagModal = () => {\r\n    setShowTagModal(!showTagModal);\r\n  };\r\n\r\n  const toggleEditorialNotesModal = () => {\r\n    setShowEditorialNotes(!showEditotialNotes);\r\n  };\r\n\r\n  const toggleAlternativeMediaModal = () => {\r\n    setShowAlternativeMedia(!showAlternativeMedia);\r\n  };\r\n\r\n  const renderTagModal = () => (\r\n    <Modal isOpen={showTagModal} className=\"modal-xl reprint-notes-modal\">\r\n      <ModalHeader tag=\"div\" toggle={toggleTagModal}>\r\n        <h3>Emneord</h3>\r\n      </ModalHeader>\r\n      <ModalBody className=\"background-secondary\">\r\n        <Container>\r\n          {documentFobTagGroup.map((documentTag: IDocumentTag) => {\r\n            return (\r\n              <Row key={documentTag.tag}>\r\n                <Col className=\"p-3 m-3 tag-box\">\r\n                  {documentTag.parents.map((parent: string) => {\r\n                    return `${parent} / `;\r\n                  })}\r\n                  <strong>{documentTag.tag}</strong>\r\n                </Col>\r\n              </Row>\r\n            );\r\n          })}\r\n        </Container>\r\n      </ModalBody>\r\n      <ModalFooter>\r\n        <Button color=\"primary\" onClick={toggleTagModal}>\r\n          Ok\r\n        </Button>\r\n      </ModalFooter>\r\n    </Modal>\r\n  );\r\n\r\n  const renderEditorialNotesModal = () => (\r\n    <Modal isOpen={showEditotialNotes} className=\"modal-xl reprint-notes-modal\">\r\n      <ModalHeader tag=\"div\" toggle={toggleEditorialNotesModal}>\r\n        <h3>Redaktionel note</h3>\r\n      </ModalHeader>\r\n      <ModalBody className=\"background-secondary\">\r\n        {editorialNotes.map((note: string, index: number) => (\r\n          <p key={index}>{note} </p>\r\n        ))}\r\n      </ModalBody>\r\n      <ModalFooter>\r\n        <Button color=\"primary\" onClick={toggleEditorialNotesModal}>\r\n          Ok\r\n        </Button>\r\n      </ModalFooter>\r\n    </Modal>\r\n  );\r\n\r\n  const renderAlternativeMediaModal = () => (\r\n    <Modal isOpen={showAlternativeMedia} className=\"modal-xl reprint-notes-modal\">\r\n      <ModalHeader tag=\"div\" toggle={toggleAlternativeMediaModal}>\r\n        <h3>Andre medier</h3>\r\n      </ModalHeader>\r\n      <ModalBody className=\"background-secondary\">\r\n        {alternativeMedia.map((note: string, index: number) => (\r\n          <p key={index}>{note} </p>\r\n        ))}\r\n      </ModalBody>\r\n      <ModalFooter>\r\n        <Button color=\"primary\" onClick={toggleAlternativeMediaModal}>\r\n          Ok\r\n        </Button>\r\n      </ModalFooter>\r\n    </Modal>\r\n  );\r\n\r\n  const renderPrintableNotes = () => (\r\n    <>\r\n      {editorialNotes.length > 0 && (\r\n        <Row className=\"print-notes my-2 d-none\">\r\n          <Col className=\"mt-4\">\r\n            <h3 className=\"w-100\">Redaktionel note</h3>\r\n            {editorialNotes.map((note: string, index: number) => (\r\n              <p className=\"w-100 py-3 note-entry mb-0\" key={index}>\r\n                {note}\r\n              </p>\r\n            ))}\r\n          </Col>\r\n        </Row>\r\n      )}\r\n      {alternativeMedia.length > 0 && (\r\n        <Row className=\"print-notes my-2 d-none\">\r\n          <Col className=\"mt-4\">\r\n            <h3 className=\"w-100\">Andre medier</h3>\r\n            {alternativeMedia.map((note: string, index: number) => (\r\n              <p className=\"w-100 py-3 note-entry mb-0\" key={index}>\r\n                {note}\r\n              </p>\r\n            ))}\r\n          </Col>\r\n        </Row>\r\n      )}\r\n      {reprintNotes && reprintNotes.length > 0 && (\r\n        <Row className=\"print-notes my-2 d-none\">\r\n          <Col className=\"mt-4\">\r\n            <h3>Omktryksnote</h3>\r\n            {reprintNotes.map((note, index) => (\r\n              <p key={index} className=\"w-100 py-3 note-entry mb-0\">\r\n                <div className=\"mb-2\">{note.date}</div>\r\n                <div dangerouslySetInnerHTML={{ __html: note.note.replace(\"\\\\r\\\\n\", \"<br />\") }} />\r\n              </p>\r\n            ))}\r\n          </Col>\r\n        </Row>\r\n      )}\r\n    </>\r\n  );\r\n\r\n  const handleGoToParagraphFocus = () => {\r\n    if (paragraphSearchTabInputRef.current) {\r\n      paragraphSearchTabInputRef.current.select();\r\n    }\r\n  };\r\n\r\n  const handleGoToParagraphChange = (paragraph: string) => {\r\n    if (!paragraph) {\r\n      setGoToParagraph(undefined);\r\n      return;\r\n    }\r\n\r\n    var goToParagraph: IGoToParagraphState = {\r\n      isError: false,\r\n      id: undefined,\r\n      paragraph: paragraph,\r\n    };\r\n\r\n    const paragraphId = paragraph.replace(new RegExp(\" \", \"g\"), \"\");\r\n    if (document.getElementById(\"P\" + paragraphId)) {\r\n      goToParagraph.id = \"P\" + paragraphId;\r\n    } else if (document.getElementById(\"PAR\" + paragraphId)) {\r\n      goToParagraph.id = \"PAR\" + paragraphId;\r\n    } else {\r\n      goToParagraph.isError = true;\r\n    }\r\n\r\n    setGoToParagraph(goToParagraph);\r\n  };\r\n\r\n  const handleGoToParagraphKeyUp = (e: React.KeyboardEvent) => {\r\n    if (e.key === \"Enter\") {\r\n      handleGoToParagraph();\r\n    }\r\n  };\r\n\r\n  const showParagraphSearch = [\"10\", \"30\", \"60\"].includes(documentTypeId); // Lov, Lovbekendtgørelse, Bekendtgørelse\r\n\r\n  const toggleTimeline = () => {\r\n    if (openMetadata && !openTimeline) {\r\n      setOpenMetadata(false);\r\n    }\r\n    setOpenTimeline(!openTimeline);\r\n  };\r\n\r\n  const toggleMetadata = () => {\r\n    if (openTimeline && !openMetadata) {\r\n      setOpenTimeline(false);\r\n    }\r\n    setOpenMetadata(!openMetadata);\r\n  };\r\n\r\n  return (\r\n    <div ref={mainContentRef} className=\"h-100 d-md-flex justify-content-between flex-wrap flex-row-reverse ml-md-3 \">\r\n      <div ref={paragraphSearchTabRef} className=\"mt-2 paragraph-search-tab\">\r\n        <div className=\"d-flex align-items-center justify-content-between\">\r\n          <div>\r\n            <div className=\"paragraph-search-shortname\">{shortName}</div>\r\n          </div>\r\n          {showParagraphSearch && (\r\n            <div className=\"flex-grow-1 d-lg-flex justify-content-end\">\r\n              <div className=\"paragraph-search-field mr-2 v-h v-md\">\r\n                <input\r\n                  aria-label=\"Indtast paragrafnummer\"\r\n                  title={`${goToParagraph && goToParagraph.isError ? `Paragraf ${goToParagraph.paragraph} findes ikke` : \"\"}`}\r\n                  type=\"text\"\r\n                  className={`form-control ${goToParagraph && goToParagraph.isError ? \"is-invalid\" : goToParagraph ? \"is-valid\" : \"\"}`}\r\n                  placeholder=\"Gå til paragraf\"\r\n                  onKeyUp={handleGoToParagraphKeyUp}\r\n                  onChange={e => handleGoToParagraphChange(e.target.value)}\r\n                  inputMode=\"search\"\r\n                  ref={paragraphSearchTabInputRef}\r\n                  onFocus={handleGoToParagraphFocus}\r\n                ></input>\r\n                <IconButton\r\n                  aria-label={`Gå direkte til paragraf ${goToParagraph ? goToParagraph?.paragraph : \"\"}`}\r\n                  className=\"\"\r\n                  icon={IconType.LevelDown}\r\n                  onClick={handleGoToParagraph}\r\n                  disabled={!goToParagraph || goToParagraph.isError}\r\n                ></IconButton>\r\n              </div>\r\n            </div>\r\n          )}\r\n          <div className=\"paragraph-search-functions\">\r\n            <Permalink\r\n              description=\"Dette permanente link kan benyttes til at fremfinde dokumentet i hele dets levetid. Kopier istedet URL'en, hvis du vil linke direkte til en bestemt placering, eksempelvis en specifik paragraf.\"\r\n              className=\"mr-2 mx-1\"\r\n            ></Permalink>\r\n            <PdfLink pdfLink={pdfLink} documentId={id} />\r\n            <Printlink className=\"ml-2\" />\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <ReprintNotes ressort={ressort} isOpen={showReprintNote} toggleModal={toggleReprintModal} shortName={shortName} title={title} docId={id} />\r\n      {renderEditorialNotesModal()}\r\n      {renderAlternativeMediaModal()}\r\n      <div className=\"my-3 d-flex flex-wrap flex-grow-1\">\r\n        {showDocumentStateBadge(documentDetails.geografiskDaekningId, documentDetails.retsinfoKlassifikationId) && (\r\n          <>\r\n            <Badge color=\"info\" className={\"mr-2\" + (isHistorical ? \" historic-badge \" : \"\")}>\r\n              {isHistorical ? \"HISTORISK\" : \"GÆLDENDE\"}\r\n            </Badge>\r\n          </>\r\n        )}\r\n        {isReprint && (\r\n          <Button color=\"primary\" className=\" action-badge badge btn-badge mr-2\" onClick={toggleReprintModal}>\r\n            OMTRYKT\r\n          </Button>\r\n        )}\r\n        {editorialNotes.length > 0 && (\r\n          <Button color=\"primary\" className=\" action-badge badge btn-badge mr-2\" onClick={toggleEditorialNotesModal}>\r\n            REDAKTIONEL NOTE\r\n          </Button>\r\n        )}\r\n        {alternativeMedia.length > 0 && (\r\n          <Button color=\"primary\" className=\" action-badge badge btn-badge mr-2\" onClick={toggleAlternativeMediaModal}>\r\n            ANDRE MEDIER\r\n          </Button>\r\n        )}\r\n        {/* </div> */}\r\n      </div>\r\n\r\n      <Container className=\"px-0 h-100 w-100 mt-1 \">\r\n        {renderPrintableNotes()}\r\n\r\n        <Row>\r\n          <Col xs={12} md={6}>\r\n            <h5 className=\"d-sm-inline m-0 mr-sm-2\">{shortName}</h5>\r\n          </Col>\r\n          <Col xs={12} md={6} className=\"text-left text-md-right mt-2 mt-md-0\">\r\n            {ressort}\r\n          </Col>\r\n        </Row>\r\n        <Row>\r\n          <Col>\r\n            <div className=\"before-meta-data-boks my-3\"></div>\r\n          </Col>\r\n        </Row>\r\n\r\n        <Row>\r\n          <Col lg={6} xs={12}>\r\n            <div className=\"my-2\">{popularTitle}</div>\r\n          </Col>\r\n          <Col xs={6} className=\"d-block d-lg-none\">\r\n            {timelineDocuments && (\r\n              <div className=\"metadata-box-header py-2 timeline-link\" onClick={() => setIsTimelineDetailsModalOpen(true)}>\r\n                <Button className=\"btn-as-a-div text-center\">\r\n                  <span>Tidslinje</span>\r\n                  <Icon icon={IconType.AngleRight} iconSize={24} className=\"svg-rotate collapsed\" />\r\n                </Button>\r\n              </div>\r\n            )}\r\n          </Col>\r\n          <Col md={6} xs={12} className=\"text-left text-md-right d-md-block\">\r\n            {timelineDocuments && (\r\n              <div className=\"metadata-box-header py-2 d-none d-lg-inline timeline-link\" onClick={toggleTimeline}>\r\n                <Button className=\"btn-as-a-div text-center \">\r\n                  <span>Tidslinje</span>\r\n                  <Icon icon={IconType.AngleRight} iconSize={24} className={!openTimeline ? \"svg-rotate collapsed\" : \"svg-rotate\"} />\r\n                </Button>\r\n              </div>\r\n            )}\r\n            <div className=\"metadata-box-header py-2 ml-lg-2\" onClick={toggleMetadata}>\r\n              <Button className=\"btn-as-a-div text-center ml-lg-2\">\r\n                <span>Yderligere oplysninger</span>\r\n                <Icon icon={IconType.AngleRight} iconSize={24} className={!openMetadata ? \"svg-rotate collapsed\" : \"svg-rotate\"} />\r\n              </Button>\r\n            </div>\r\n          </Col>\r\n        </Row>\r\n        <Collapse isOpen={openMetadata}>\r\n          <Row>\r\n            <Col>\r\n              <Container className=\"metadata-box-content\">\r\n                <Row className=\"py-xs-0 py-md-1\">\r\n                  {metadata &&\r\n                    metadata.map((data: IDocumentDisplayMetadata) => {\r\n                      return (\r\n                        <Col lg={4} className=\"py-2\" key={data.displayName}>\r\n                          <Label className=\"mb-1 label-head\">{data.displayName}</Label>\r\n                          <div className=\"secondary-text-muted\" dangerouslySetInnerHTML={{ __html: data.displayValue }} />\r\n                        </Col>\r\n                      );\r\n                    })}\r\n\r\n                  {documentDetails.hasFobTags && (\r\n                    <Col lg={4} className=\"py-2\">\r\n                      <Label className=\"mb-1 label-head\">Emneord</Label>\r\n                      <div>\r\n                        <Button className=\"btn-as-a-div label-link\" onClick={() => setShowTagModal(!showTagModal)}>\r\n                          Se emneord\r\n                        </Button>\r\n                      </div>\r\n                      {renderTagModal()}\r\n                    </Col>\r\n                  )}\r\n                </Row>\r\n              </Container>\r\n            </Col>\r\n          </Row>\r\n        </Collapse>\r\n        <Row>\r\n          <Col>\r\n            <hr className=\"mt-0\" />\r\n          </Col>\r\n        </Row>\r\n\r\n        {timelineDocuments && (\r\n          <Collapse isOpen={openTimeline}>\r\n            <Row className=\"d-none d-lg-block mb-3\">\r\n              <Col>\r\n                <Timeline\r\n                  documents={timelineDocuments}\r\n                  isTimelineDetailsModalOpen={isTimelineDetailsModalOpen}\r\n                  toggleTimelineDetailsModal={() => setIsTimelineDetailsModalOpen(!isTimelineDetailsModalOpen)}\r\n                ></Timeline>\r\n              </Col>\r\n            </Row>\r\n          </Collapse>\r\n        )}\r\n        <Row>\r\n          <Col>\r\n            <div\r\n              id={restylingRootId}\r\n              className={`document-content ${\r\n                isHistorical && showDocumentStateBadge(documentDetails.geografiskDaekningId, documentDetails.retsinfoKlassifikationId) ? \"is-historical\" : \"\"\r\n              }`}\r\n              dangerouslySetInnerHTML={{ __html: documentHtml }}\r\n            />\r\n          </Col>\r\n        </Row>\r\n      </Container>\r\n      <GoToTop show={showGoToTop} />\r\n    </div>\r\n  );\r\n};\r\n","import * as React from \"react\";\r\nimport \"./DocumentContent.scss\";\r\nimport { Container, Row, Col } from \"reactstrap\";\r\nimport { IDocumentDetails } from \"../../models/IDocumentDetails\";\r\nimport { showDocumentStateBadge } from \"../../components/document/Document\";\r\n\r\nexport interface IDocumentContentRawHtmlProps {\r\n  restylingRootId: string;\r\n  documentDetails: IDocumentDetails;\r\n}\r\n\r\nexport const DocumentContentRawHtml: React.FC<IDocumentContentRawHtmlProps> = ({ documentDetails, restylingRootId }) => {\r\n  var { documentHtml, isHistorical } = documentDetails;\r\n  const mainContentRef = React.useRef<HTMLDivElement>(null);\r\n\r\n  return (\r\n    <div ref={mainContentRef}>\r\n      <div className=\"before-meta-data-boks d-none\"></div>\r\n      <Container className=\"px-0 h-100 w-100 mt-1 \">\r\n        <Row>\r\n          <Col>\r\n            <div\r\n              id={restylingRootId}\r\n              className={`document-content ${\r\n                isHistorical && showDocumentStateBadge(documentDetails.geografiskDaekningId, documentDetails.retsinfoKlassifikationId) ? \"is-historical\" : \"\"\r\n              }`}\r\n              dangerouslySetInnerHTML={{ __html: documentHtml }}\r\n            />\r\n          </Col>\r\n        </Row>\r\n      </Container>\r\n    </div>\r\n  );\r\n};\r\n","import * as React from \"react\";\r\nimport Helmet from \"react-helmet\";\r\n\r\ninterface IEliDocumentMeatadataProps {\r\n  canonicalUrl: string;\r\n  eliMetadata: object[];\r\n  schemaOrgMetadata: string;\r\n}\r\n\r\nexport const DocumentMetadata: React.FC<IEliDocumentMeatadataProps> = (props: IEliDocumentMeatadataProps) => {\r\n  return (\r\n    <Helmet>\r\n      {props.canonicalUrl && <link rel=\"canonical\" href={props.canonicalUrl} />}\r\n      {props.eliMetadata && props.eliMetadata.map((meta, index) => <meta {...meta} key={index} />)}\r\n      {props.schemaOrgMetadata && <script type=\"application/ld+json\">{props.schemaOrgMetadata}</script>}\r\n    </Helmet>\r\n  );\r\n};\r\n","import * as React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { IconType, Icon } from \"@lexdania/components\";\r\nimport { Modal, ModalHeader, ModalBody, Row, Col, Button, ModalFooter, Container, Badge } from \"reactstrap\";\r\nimport { IDocumentReference } from \"../../models/IDocumentReference\";\r\nimport { nlToBr, showDocumentStateBadge } from \"../../components/document/Document\";\r\nimport { apiGET } from \"../../store/api\";\r\nimport FileSaver from \"file-saver\";\r\nimport * as qs from \"query-string\";\r\n\r\ninterface IReferenceDetailsModalProps {\r\n  header: string;\r\n  kortNavn: string;\r\n  documents: IDocumentReference[];\r\n}\r\ntype referenceSearch = {\r\n  id: string[];\r\n};\r\n\r\nexport const ReferenceDetailsModal: React.FunctionComponent<IReferenceDetailsModalProps> = props => {\r\n  const { header, kortNavn, documents } = props;\r\n  const [isOpen, setIsOpen] = React.useState(false);\r\n\r\n  const toggle = () => setIsOpen(!isOpen);\r\n\r\n  const params: referenceSearch = { id: documents.map(doc => doc.id) };\r\n\r\n  const exportReferences = async (params: referenceSearch) => {\r\n    const paramsString = qs.stringify(params);\r\n    const paramsQuery = `?${paramsString}`;\r\n\r\n    var result = await apiGET<string>(\"api/document/csv\", {\r\n      params: qs.parse(paramsQuery),\r\n      paramsSerializer: (p: object) => qs.stringify(p),\r\n      responseType: \"blob\",\r\n    });\r\n    FileSaver.saveAs(result, `${kortNavn}.csv`);\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <Link to=\"#\" className=\"d-flex justify-content-between\" onClick={toggle}>\r\n        <span>Se detaljeret overblik</span>\r\n        <Icon icon={IconType.Clone} />\r\n      </Link>\r\n      <Modal isOpen={isOpen} className=\"modal-xl reference-details-modal\">\r\n        <ModalHeader tag=\"div\" toggle={toggle}>\r\n          <h3>{header}</h3>\r\n          <div className=\"ml-n3\">\r\n            <Link\r\n              to=\"#\"\r\n              className=\"font-weight-bold ml-3 pt-1 mr-2 mr-sm-0\"\r\n              onClick={e => {\r\n                e.preventDefault();\r\n                exportReferences(params);\r\n              }}\r\n            >\r\n              Eksportér referencer\r\n            </Link>\r\n          </div>\r\n        </ModalHeader>\r\n        <ModalBody className=\"py-0\">\r\n          {documents.map((doc: IDocumentReference) => (\r\n            <Container className=\" document-entry py-2 pl-sm-0\" key={doc.id}>\r\n              <Row className=\"my-2\">\r\n                <Col lg={7} className=\"px-xs-0\">\r\n                  <div className=\"document-short-name d-block d-sm-inline pb-1 pb-sm-0 mr-sm-2\">{doc.shortName}</div>\r\n                  {showDocumentStateBadge(doc.geografiskDaekningId, doc.retsinfoKlassifikationId) && (\r\n                    <div className=\"badge-container d-block d-sm-inline py-1 py-md-0 mr-sm-2\">\r\n                      <Badge color=\"secondary\" className={\"py-2 px-3\" + (doc.isHistorical ? \" historic-badge \" : \"\")}>\r\n                        {doc.isHistorical ? \"HISTORISK\" : \"GÆLDENDE\"}\r\n                      </Badge>\r\n                    </div>\r\n                  )}\r\n                </Col>\r\n                <Col className=\"document-ressort text-lg-right d-flex justify-content-end flex-row-reverse flex-lg-row py-1 py-md-0 px-xs-0 \">\r\n                  {doc.ressort}\r\n                </Col>\r\n              </Row>\r\n              <Row>\r\n                <Col lg={12} className=\"px-xs-0\">\r\n                  <Link className=\"document-title\" to={doc.eliPath ? doc.eliPath : \"#\"}>\r\n                    <h4 className=\"mb-0\">{nlToBr(doc.title)}</h4>\r\n                  </Link>\r\n                </Col>\r\n              </Row>\r\n              <Row>\r\n                <Col lg={6} className=\"px-xs-0\">\r\n                  {(doc.popularTitle || doc.offentliggoerelsesDato) && (\r\n                    <div className=\"document-popular-title mb-0 mt-2 px-xs-0\">\r\n                      {doc.offentliggoerelsesDato}\r\n                      {doc.popularTitle && doc.offentliggoerelsesDato && <span className=\"px-2 text-primary\"> | </span>}\r\n                      {doc.popularTitle}\r\n                    </div>\r\n                  )}\r\n                </Col>\r\n              </Row>\r\n            </Container>\r\n          ))}\r\n        </ModalBody>\r\n        <ModalFooter>\r\n          <Button color=\"primary\" onClick={toggle}>\r\n            Luk\r\n          </Button>\r\n        </ModalFooter>\r\n      </Modal>\r\n    </>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport FooterContainer from \"../FooterContainer\";\r\nimport { Row, Col, Collapse, Button } from \"reactstrap\";\r\nimport { IDocumentDetails } from \"../../models/IDocumentDetails\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { AppState } from \"../../store\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { DocumentContent } from \"./DocumentContent\";\r\nimport { DocumentContentRawHtml } from \"./DocumentContentRawHtml\";\r\nimport { IconType, Icon, CollapsibleBox } from \"@lexdania/components\";\r\nimport \"./TableOfContents.scss\";\r\nimport \"./Sidebar.scss\";\r\nimport { IDocumentReferenceGroup, IDocumentReference } from \"../../models/IDocumentReference\";\r\nimport \"./DocumentDetailsContainer.scss\";\r\nimport { IEuReferenceGroup, IEuReference } from \"./../../models/IEuReferenceGroup\";\r\nimport { CelexType } from \"../../models/CelexType\";\r\nimport { DocumentMetadata } from \"./DocumentMetadata\";\r\nimport { ICaseHistoryReferenceGroup, ICaseHistoryReference } from \"../../models/ICaseHistoryGroup\";\r\nimport { IDocumentLinkGroup } from \"../../models/IDocumentLinkGroup\";\r\nimport { RelatedDocumentsActions, IRelatedDocumentsActions, IRelatedDocumentsState } from \"../../store/relatedDocuments/relatedDocumentsReducer\";\r\nimport { Location } from \"history\";\r\nimport { ReferenceLink } from \"../../components/document/ReferenceLink\";\r\nimport { ReferenceDetailsModal } from \"./ReferenceDetailsModal\";\r\nimport { MissingDocumentReferencesDetailsContainer } from \"./MissingDocumentReferencesDetailsContainer\";\r\nimport { IReprintInformationActions, IReprintState, ReprintInformationActions } from \"../../store/notes/notesReducer\";\r\nimport { DocumentClassificationActions, IDocumentClassificationActions } from \"../../store/documentClassification/documentClassificationReducer\";\r\nimport { IDocumentClassification } from \"../../models/IDocumentClassification\";\r\nimport { DocumentTimelineActions, IDocumentTimelineActions, IDocumentTimelineState } from \"../../store/documentTimeline/documentTimelineReducer\";\r\nfunction selectAll<ElmType extends Element>(query: string, parent: ParentNode = document): ElmType[] {\r\n  return Array.from(parent.querySelectorAll(query));\r\n}\r\n\r\ninterface IDocumentDetailsViewerProps extends IRelatedDocumentsActions, IReprintInformationActions, IDocumentClassificationActions, IDocumentTimelineActions {\r\n  documentDetails: IDocumentDetails;\r\n  location: Location<any>;\r\n  eliMetaData: object[];\r\n  schemaOrgMetadata: string;\r\n  canonicalUri: string;\r\n  relatedDocuments?: IRelatedDocumentsState;\r\n  reprintNotes?: IReprintState;\r\n  documentClassifications: IDocumentClassification[];\r\n  getTimeline: (documentId: number, documentTypeId: string, geografiskDaekningId: number) => void;\r\n  documentTimeline: IDocumentTimelineState;\r\n  isRawHtml: boolean;\r\n}\r\n\r\ninterface IDocumentDetailViewerState {\r\n  hideToc: boolean;\r\n  otherRefGroup: { [k: string]: boolean };\r\n}\r\n\r\nconst restylingRootId = \"restylingRoot\";\r\n\r\nclass DocumentDetailViewer extends React.Component<IDocumentDetailsViewerProps, IDocumentDetailViewerState> {\r\n  state: IDocumentDetailViewerState = {\r\n    hideToc: true,\r\n    otherRefGroup: {},\r\n  };\r\n\r\n  componentDidMount() {\r\n    if (this.props.documentDetails.id !== -1) {\r\n      this.manipulateDocumentHtml();\r\n\r\n      // Do not reload timeline when remounting component\r\n      if (this.props.documentTimeline.documentId !== this.props.documentDetails.id)\r\n        this.props.getTimeline(this.props.documentDetails.id, this.props.documentDetails.documentTypeId, this.props.documentDetails.geografiskDaekningId);\r\n\r\n      this.props.getRelatedDocuments(this.props.documentDetails.id, false);\r\n      this.props.getReprintNotes(this.props.documentDetails.id);\r\n    }\r\n    if (this.props.documentClassifications.length === 0) this.props.getDocumentClassification();\r\n  }\r\n\r\n  componentDidUpdate(prev: IDocumentDetailsViewerProps) {\r\n    if (this.props.documentDetails.id !== -1 && prev.documentDetails !== this.props.documentDetails) {\r\n      this.manipulateDocumentHtml();\r\n    }\r\n    if (this.props.documentDetails.id !== -1 && this.props.documentDetails.id !== prev.documentDetails.id) {\r\n      this.props.getTimeline(this.props.documentDetails.id, this.props.documentDetails.documentTypeId, this.props.documentDetails.geografiskDaekningId);\r\n\r\n      this.props.getRelatedDocuments(this.props.documentDetails.id, false);\r\n      this.props.getReprintNotes(this.props.documentDetails.id);\r\n    }\r\n    // url # element changes - scroll to correct element with offset\r\n    if (this.props.location.hash && this.props.location.hash != prev.location.hash) {\r\n      this.locationHashChanged();\r\n    } else if (this.props.documentDetails.id !== prev.documentDetails.id) {\r\n      // If not hash url (#), and document id has changed (also initially) - scroll to top\r\n      window.scrollTo(0, 0);\r\n    }\r\n  }\r\n\r\n  private locationHashChanged = () => {\r\n    const elementId = this.props.location.hash.replace(\"#\", \"\");\r\n    // The following is done to ensure correct functionality in browsers, iphones, android etc. Please to not change without verifying all types of devices\r\n    this.scrollElementIntoView(elementId);\r\n    // This scrolling might make the go to paragraph bar appear, scroll again after paragraph search bar appeared to make sure its correctly placed\r\n    setTimeout(this.scrollElementIntoView, 10, elementId);\r\n    // Make sure it's done AFTER search paragraph bar animation ended (sync time with css)\r\n    setTimeout(this.scrollElementIntoView, 400, elementId);\r\n  };\r\n\r\n  private buildReferenceGroup = (documentId: number, kortNavn: string, refs: IDocumentLinkGroup, key: number) => {\r\n    return (\r\n      <li key={key}>\r\n        <Button\r\n          className=\"btn-no-btn p-0 w-100\"\r\n          onClick={() => {\r\n            if (!refs.references) {\r\n              this.props.getLinkGroupDocuments(documentId, refs.type, refs.data, refs.header);\r\n            }\r\n            this.setState({\r\n              otherRefGroup: { ...this.state.otherRefGroup, [this.buildRefGroupKey(refs)]: !this.state.otherRefGroup[this.buildRefGroupKey(refs)] },\r\n            });\r\n          }}\r\n        >\r\n          <div className=\"d-flex justify-content-between\">\r\n            <div>{refs.header}</div>\r\n            <div className=\"ml-1 justify-content-center align-self-center\">\r\n              <Icon\r\n                icon={IconType.AngleRight}\r\n                className={\"svg-rotate\" + (this.state.otherRefGroup[this.buildRefGroupKey(refs)] ? \"\" : \" collapsed\")}\r\n                iconSize={24}\r\n              />\r\n            </div>\r\n          </div>\r\n        </Button>\r\n        <div>\r\n          <Collapse isOpen={this.state.otherRefGroup[this.buildRefGroupKey(refs)] && !!refs.references} className=\"\">\r\n            <div>\r\n              <ul style={{ paddingLeft: 10, marginTop: 10 }}>\r\n                {refs.references && refs.references.length > 0 ? (\r\n                  <>\r\n                    <li>\r\n                      <ReferenceDetailsModal header={refs.header} documents={refs.references} kortNavn={kortNavn} />\r\n                    </li>\r\n                    {refs.references.map((docRef: IDocumentReference, indexDocRef: number) => (\r\n                      <li key={indexDocRef}>\r\n                        <ReferenceLink reference={docRef} />\r\n                      </li>\r\n                    ))}\r\n                  </>\r\n                ) : (\r\n                  <li className=\"no-references\">Der er ingen referencer</li>\r\n                )}\r\n              </ul>\r\n            </div>\r\n          </Collapse>\r\n        </div>\r\n      </li>\r\n    );\r\n  };\r\n\r\n  private buildRefGroupKey = (refs: IDocumentLinkGroup): string => {\r\n    return refs.data + \"-\" + refs.type.toString();\r\n  };\r\n\r\n  public render() {\r\n    const {\r\n      documentDetails,\r\n      eliMetaData,\r\n      relatedDocuments,\r\n      reprintNotes,\r\n      documentClassifications,\r\n      documentTimeline,\r\n      schemaOrgMetadata,\r\n      canonicalUri,\r\n    } = this.props;\r\n    const { caseHistoryReferenceGroup } = documentDetails;\r\n    const rel = relatedDocuments!.relatedDocumentsMap[documentDetails.id]!;\r\n\r\n    return (\r\n      documentDetails.id !== -1 && (\r\n        <>\r\n          {!this.props.isRawHtml && <DocumentMetadata eliMetadata={eliMetaData} schemaOrgMetadata={schemaOrgMetadata} canonicalUrl={canonicalUri} />}\r\n          <Row className=\"document-details\">\r\n            <Col md=\"4\" lg=\"3\" className={\"document-details-sidebar filterbox pr-md-0 \" + (this.props.isRawHtml ? \" d-none\" : \"\")}>\r\n              <CollapsibleBox\r\n                isOpen={false}\r\n                className={this.state.hideToc ? \"table-of-contents d-none\" : \"table-of-contents\"}\r\n                heading=\"Indholdsfortegnelse\"\r\n                icon={IconType.ListOl}\r\n              >\r\n                <div id=\"tocRoot\"></div>\r\n              </CollapsibleBox>\r\n\r\n              {rel &&\r\n                rel.referenceGroups &&\r\n                rel.referenceGroups.map((drg: IDocumentReferenceGroup, index: number) => (\r\n                  <CollapsibleBox isOpen={drg.references.length > 0} key={index} heading={drg.header} icon={IconType.Copy} className=\"references-group\">\r\n                    {drg.references.length > 0 && (\r\n                      <ul className=\"mb-0 py-0 pr-0\">\r\n                        <li>\r\n                          <ReferenceDetailsModal header={drg.header} documents={drg.references} kortNavn={documentDetails.shortName} />\r\n                        </li>\r\n                        {drg.references.map((docRef: IDocumentReference, index2: number) => (\r\n                          <li key={index2}>\r\n                            <ReferenceLink reference={docRef} />\r\n                          </li>\r\n                        ))}\r\n                      </ul>\r\n                    )}\r\n                  </CollapsibleBox>\r\n                ))}\r\n              {rel &&\r\n                rel.euReferenceGroups &&\r\n                rel.euReferenceGroups.map((eug: IEuReferenceGroup, index: number) => (\r\n                  <CollapsibleBox\r\n                    isOpen={eug.references.length > 0}\r\n                    key={index}\r\n                    heading={eug.type === CelexType.Implementation ? \"Links til EU direktiver, jf. note 1\" : \"Links til øvrige EU dokumenter\"}\r\n                    icon={IconType.Copy}\r\n                    className=\"references-group\"\r\n                  >\r\n                    {eug.references.length > 0 && (\r\n                      <ul className=\"mb-0 py-0 pr-0\">\r\n                        {eug.references.map((docRef: IEuReference, index2: number) => (\r\n                          <li key={index2}>\r\n                            <a href={docRef.htmlUrl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n                              {docRef.reference}\r\n                            </a>\r\n                            <a className=\"float-right\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Note\" href={docRef.noteUrl}>\r\n                              (Note)\r\n                            </a>\r\n                          </li>\r\n                        ))}\r\n                      </ul>\r\n                    )}\r\n                  </CollapsibleBox>\r\n                ))}\r\n              {caseHistoryReferenceGroup &&\r\n                caseHistoryReferenceGroup.map((chg: ICaseHistoryReferenceGroup, index: number) => (\r\n                  <CollapsibleBox\r\n                    isOpen={true}\r\n                    key={index}\r\n                    heading={chg.heading}\r\n                    subHeading={chg.caseHistoryLabel}\r\n                    badge={chg.stateLabel}\r\n                    icon={IconType.History}\r\n                    className=\"references-group\"\r\n                  >\r\n                    <ul className=\"mb-0 py-0 pr-0\">\r\n                      {chg.references.length > 0 &&\r\n                        chg.references.map((ref: ICaseHistoryReference, innerIndex: number) => (\r\n                          <li key={index + \"_\" + innerIndex + \"_\" + ref.documentId}>\r\n                            {!(ref.documentId === documentDetails.id) && ref.eliUri !== \"\" && (\r\n                              <Link to={ref.eliUri} title={ref.title} key={ref.documentId}>\r\n                                {ref.presentationName}\r\n                              </Link>\r\n                            )}\r\n                            {ref.externalLink !== \"\" && (\r\n                              <a href={ref.externalLink} target=\"_blank\" title={ref.title} key={ref.documentId} rel=\"noopener noreferrer\">\r\n                                {ref.presentationName} <Icon icon={IconType.ExternalLink}></Icon>\r\n                              </a>\r\n                            )}\r\n                            {ref.documentId === documentDetails.id && <i title={ref.title}>{ref.presentationName}</i>}\r\n                          </li>\r\n                        ))}\r\n                      <MissingDocumentReferencesDetailsContainer\r\n                        referencesLength={chg.references.length}\r\n                        documentTypeId={documentDetails.documentTypeId}\r\n                        isSagsforlobPeriodValid={documentDetails.isSagsforlobPeriodValid}\r\n                        documentClassifications={documentClassifications}\r\n                      ></MissingDocumentReferencesDetailsContainer>\r\n                    </ul>\r\n                  </CollapsibleBox>\r\n                ))}\r\n              {rel && rel.documentLinkGroups && rel.documentLinkGroups.length > 0 && (\r\n                <CollapsibleBox isOpen={true} heading=\"Yderligere dokumenter\" icon={IconType.Copy} className=\"references-group\">\r\n                  <ul className=\"mb-0 py-0 pr-0\">\r\n                    {rel.documentLinkGroups.map((refs: IDocumentLinkGroup, index2: number) => {\r\n                      return this.buildReferenceGroup(documentDetails.id, documentDetails.shortName, refs, index2);\r\n                    })}\r\n                  </ul>\r\n                </CollapsibleBox>\r\n              )}\r\n            </Col>\r\n            <Col md=\"8\" lg=\"9\" className=\"document-details-content\">\r\n              {this.props.isRawHtml && <DocumentContentRawHtml restylingRootId={restylingRootId} documentDetails={documentDetails} />}\r\n              {!this.props.isRawHtml && (\r\n                <DocumentContent\r\n                  scrollElementIntoView={this.scrollElementIntoView}\r\n                  restylingRootId={restylingRootId}\r\n                  documentDetails={documentDetails}\r\n                  reprintNotes={reprintNotes?.reprintNotes}\r\n                  timelineDocuments={documentTimeline.timelineDocuments}\r\n                />\r\n              )}\r\n            </Col>\r\n            {/* The footer  needs to be placed under class document-details row to be shown correctly when printing */}\r\n            <Col className=\"document-details-footer\">\r\n              <FooterContainer />\r\n            </Col>\r\n          </Row>\r\n        </>\r\n      )\r\n    );\r\n  }\r\n\r\n  private scrollElementIntoView(elementIdOrName: string) {\r\n    var elm = document.getElementById(elementIdOrName);\r\n    if (!elm) {\r\n      const nameElements = document.getElementsByName(elementIdOrName);\r\n      if (nameElements && nameElements.length > 0) elm = nameElements[0];\r\n    }\r\n\r\n    if (elm) {\r\n      var headerOffset = 45;\r\n      var elementPosition = elm.getBoundingClientRect().top;\r\n      var offsetPosition = elementPosition + window.scrollY - headerOffset;\r\n      window.scrollTo({\r\n        top: offsetPosition,\r\n      });\r\n    }\r\n  }\r\n\r\n  private manipulateDocumentHtml() {\r\n    const restylingRoot = document.querySelector(`#${restylingRootId}`);\r\n    if (restylingRoot == null) {\r\n      return;\r\n    }\r\n\r\n    const tocRoot = document.querySelector(`#tocRoot`);\r\n    if (tocRoot == null) {\r\n      return;\r\n    }\r\n\r\n    const accnlinks = document.querySelectorAll(`a[href^=\"document.aspx?accn\"]`) as NodeListOf<HTMLAnchorElement>;\r\n    if (accnlinks.length > 0) {\r\n      accnlinks.forEach(tag => {\r\n        const isDocumentPath = tag.pathname === \"/document.aspx\";\r\n        const isAccn = tag.search.startsWith(\"?accn=\");\r\n\r\n        if (isDocumentPath && isAccn) {\r\n          var accn = tag.search.substr(6);\r\n          tag.pathname = `/eli/accn/${accn}`;\r\n          tag.search = ``;\r\n        }\r\n      });\r\n    }\r\n\r\n    const GETDOCLinks = document.querySelectorAll('a[href^=\"http://www.retsinfo.dk/_GETDOC_ACCN\"]') as NodeListOf<HTMLAnchorElement>;\r\n    if (GETDOCLinks.length > -1) {\r\n      GETDOCLinks.forEach(tag => {\r\n        const isGETDOC = tag.pathname.startsWith(\"/_GETDOC_ACCN/\");\r\n        if (isGETDOC) {\r\n          var accn = tag.pathname.substr(14);\r\n\r\n          const hasLineAtIndex = accn.indexOf(\"-\");\r\n          if (hasLineAtIndex > -1) {\r\n            accn = accn.substring(0, hasLineAtIndex);\r\n          }\r\n\r\n          tag.pathname = `/eli/accn/${accn}`;\r\n          tag.search = ``;\r\n        }\r\n      });\r\n    }\r\n\r\n    tocRoot.innerHTML = \"\";\r\n\r\n    //Handle deep links with hash (otherwise they won't work on initial request or page reload when content is AJAX-loaded)\r\n    if (this.props.location.hash) {\r\n      this.locationHashChanged();\r\n    }\r\n\r\n    selectAll<HTMLAnchorElement>(\"a[href^='#']\", restylingRoot).forEach(\r\n      elm => (elm.href = `${this.props.location.pathname}${this.props.location.search}${elm.hash}`)\r\n    );\r\n\r\n    // 1. type of TOC\r\n    selectAll(\"#OVERSIGT\", restylingRoot).forEach(elm => {\r\n      elm.innerHTML = elm.innerHTML.replace(\"&nbsp;&nbsp;&nbsp;\", \"\");\r\n      selectAll(\"tr\", elm).forEach(row => {\r\n        var kapitel = row.querySelector(\"td a\")?.innerHTML.trim();\r\n        var title = row.querySelector(\"td:last-child\")?.innerHTML.trim();\r\n        row.querySelector(\"td a\")?.setAttribute(\"aria-label\", `${kapitel} - ${title}`);\r\n      });\r\n      tocRoot.appendChild(elm);\r\n    });\r\n\r\n    // 2. type of TOC\r\n    selectAll(\".Indholdsfortegnelse\", restylingRoot).forEach(elm => {\r\n      elm.innerHTML = elm.innerHTML.replace(\"&nbsp;&nbsp;&nbsp;\", \"\");\r\n      var anchor = elm.querySelector(\"a\");\r\n      if (anchor) {\r\n        var label = `${elm.textContent}`.trim().replace(anchor?.innerHTML, `${anchor?.innerHTML} - `);\r\n        anchor?.setAttribute(\"aria-label\", label);\r\n        tocRoot.appendChild(elm);\r\n      }\r\n    });\r\n\r\n    // 3. type of TOC\r\n    document.querySelectorAll(\".Indholdsfortegnelse tr\").forEach(elm => {\r\n      var kapitel = elm.querySelector(\"td a\")?.innerHTML.trim();\r\n      var title = elm.querySelector(\"td:last-child\")?.innerHTML;\r\n      elm.querySelector(\"td a\")?.setAttribute(\"aria-label\", `${kapitel} - ${title}`);\r\n    });\r\n\r\n    selectAll(\".bjelke\", restylingRoot)\r\n      .filter(bjelke => bjelke.textContent !== null && bjelke.textContent.toLowerCase() === \"Oversigt (indholdsfortegnelse)\".toLowerCase())\r\n      .forEach(bjelke => (bjelke.parentNode !== null ? bjelke.parentNode.removeChild(bjelke) : null)); // IE hack, can't use remove()\r\n\r\n    // move bjælke og overskrift op over metadata boksen\r\n    const beforeMetaDataRoot = document.querySelector(`.before-meta-data-boks`);\r\n    if (beforeMetaDataRoot != null) {\r\n      beforeMetaDataRoot.innerHTML = \"\";\r\n\r\n      // remove bjelke \"Den fulde tekst\"\r\n      selectAll(\".bjelke\", restylingRoot)\r\n        .filter(bjelke => bjelke.textContent !== null && bjelke.textContent.toLowerCase() === \"Den fulde tekst\".toLowerCase())\r\n        .forEach(bjelke => (bjelke.parentNode !== null ? bjelke.parentNode.removeChild(bjelke) : null)); // IE hack, can't use remove()\r\n    }\r\n\r\n    if (tocRoot.hasChildNodes()) {\r\n      this.setState({ hideToc: false });\r\n    } else {\r\n      this.setState({ hideToc: true });\r\n    }\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  ({ relatedDocuments, notes, documentClassifications, documentTimeline }: AppState, ownProps: IDocumentDetailsViewerProps): IDocumentDetailsViewerProps => {\r\n    return {\r\n      ...ownProps,\r\n      relatedDocuments: relatedDocuments,\r\n      reprintNotes: notes,\r\n      documentClassifications: documentClassifications.documentClassifications,\r\n      documentTimeline: documentTimeline,\r\n    };\r\n  },\r\n  dispatch =>\r\n    bindActionCreators(\r\n      {\r\n        ...RelatedDocumentsActions,\r\n        ...ReprintInformationActions,\r\n        ...DocumentClassificationActions,\r\n        ...DocumentTimelineActions,\r\n      },\r\n      dispatch\r\n    )\r\n)(DocumentDetailViewer);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { IDocumentDetailsActions, DocumentDetailsActions } from \"../../store/documentDetails/documentDetailsReducer\";\r\nimport { IDocumentDetailsState, IDocumentDetails } from \"../../models/IDocumentDetails\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport { EliRequest, hasEliRequestChanged } from \"../../eli-routing\";\r\nimport { AppState } from \"../../store\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport DocumentDetailsViewer from \"./DocumentDetailsViewer\";\r\nimport { Modal, ModalHeader, ModalBody, Button, Row, Col } from \"reactstrap\";\r\nimport \"./DocumentDetailsContainer.scss\";\r\nimport { FooterReducerActions, IFooterReducerActions } from \"../../store/footer/footerReducer\";\r\nimport { Spinner } from \"@lexdania/components\";\r\n\r\ninterface IDocumentDetailsContainerProps extends IDocumentDetailsActions, IFooterReducerActions, RouteComponentProps<EliRequest> {\r\n  documentDetails: IDocumentDetailsState;\r\n  eliMetaData: object[];\r\n  schemaOrgMetadata: string;\r\n  canonicalUri: string;\r\n  isLoading: boolean;\r\n}\r\n\r\ninterface IDocumentDetailsContainerState {\r\n  documentShown: number;\r\n  dublicateModalOpen: boolean;\r\n  documentChosen: boolean;\r\n  isRawHtml: boolean;\r\n  showSpinner: boolean;\r\n}\r\n\r\nclass DocumentDetailsContainer extends React.Component<IDocumentDetailsContainerProps, IDocumentDetailsContainerState> {\r\n  state: IDocumentDetailsContainerState = {\r\n    dublicateModalOpen: false,\r\n    documentShown: 0,\r\n    documentChosen: false,\r\n    isRawHtml: false,\r\n    showSpinner: false,\r\n  };\r\n  componentDidMount() {\r\n    if (this.props.location.pathname.toLocaleLowerCase().endsWith(\"/rawhtml\")) {\r\n      this.setState({ isRawHtml: true }, () => {\r\n        this.getDocumentDetails();\r\n      });\r\n    } else this.getDocumentDetails();\r\n\r\n    if (this.props.documentDetails.documents.length > 1) {\r\n      this.setState({ dublicateModalOpen: true });\r\n    }\r\n  }\r\n\r\n  shouldComponentUpdate(nextProp: IDocumentDetailsContainerProps) {\r\n    if (\r\n      nextProp.documentDetails.documents.length > 1 &&\r\n      (nextProp.documentDetails.documents[0].id === -1 || nextProp.documentDetails.documents[0].id !== this.props.documentDetails.documents[0].id)\r\n    ) {\r\n      this.setState({ dublicateModalOpen: true });\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  componentDidUpdate(prevProps: IDocumentDetailsContainerProps) {\r\n    const { isLoading } = this.props;\r\n\r\n    if (hasEliRequestChanged(prevProps.match.params, this.props.match.params)) {\r\n      this.getDocumentDetails();\r\n    }\r\n\r\n    var documentDetails = this.props.documentDetails.documents[this.state.documentShown];\r\n    if (documentDetails && documentDetails.id !== -1) {\r\n      this.props.showFooter(); // Show footer when Document has been loaded to prevent CLS (layout shift)\r\n    }\r\n    if (!this.state.dublicateModalOpen && documentDetails && documentDetails.id !== -1) {\r\n      if (documentDetails.popularTitle) {\r\n        document.title = documentDetails.popularTitle;\r\n      } else {\r\n        document.title = documentDetails.title;\r\n      }\r\n    } else if (this.state.dublicateModalOpen) {\r\n      document.title = \"Retsinformation | Vælg dokument\";\r\n    } else {\r\n      document.title = \"Retsinformation | Henter dokument...\";\r\n    }\r\n\r\n    // Show loading spinner after 1000ms\r\n    if (isLoading !== prevProps.isLoading) {\r\n      setTimeout(() => {\r\n        this.setState({ showSpinner: isLoading });\r\n      }, 1000);\r\n    }\r\n  }\r\n\r\n  private getDocumentDetails() {\r\n    const { match, hideFooter, getDocumentDetailsByEliRequest } = this.props;\r\n    hideFooter(); // Hide footer while loading document to prevent CLS (layout shift)\r\n    getDocumentDetailsByEliRequest(match.params, this.state.isRawHtml);\r\n  }\r\n\r\n  private chooseDocument = (doc: number) => {\r\n    this.setState({ dublicateModalOpen: !this.state.dublicateModalOpen, documentShown: doc, documentChosen: true });\r\n  };\r\n\r\n  private renderELiDublicateModal = () => (\r\n    <Modal isOpen={this.state.dublicateModalOpen && this.props.documentDetails.documents.length !== 1} className=\"modal-xl eli-dublicate-modal\">\r\n      <ModalHeader tag=\"div\">\r\n        <h3>Vælg dokument</h3>\r\n        <p className=\"mb-0\">Denne ELI URL relaterer sig til flere dokumenter. Vælg det dokument du leder efter.</p>\r\n      </ModalHeader>\r\n      <ModalBody className=\"background-secondary\">\r\n        {this.props.documentDetails.documents.map((doc: IDocumentDetails, index: number) => (\r\n          <Row className=\"justify-content-end dublicate-item\" key={index}>\r\n            <Col className=\"pr-0\">\r\n              <h4>\r\n                {doc.shortName} {doc.ressort}\r\n              </h4>\r\n              <p>{doc.title}</p>\r\n            </Col>\r\n            <Col className=\"pl-0  col-auto\">\r\n              <Button color=\"secondary px-4\" onClick={() => this.chooseDocument(index)}>\r\n                Vælg\r\n              </Button>\r\n            </Col>\r\n          </Row>\r\n        ))}\r\n      </ModalBody>\r\n    </Modal>\r\n  );\r\n\r\n  private renderDetailsViewer = () => (\r\n    <DocumentDetailsViewer\r\n      documentDetails={this.props.documentDetails.documents[this.state.documentShown]}\r\n      eliMetaData={this.props.eliMetaData}\r\n      schemaOrgMetadata={this.props.schemaOrgMetadata}\r\n      canonicalUri={this.props.canonicalUri}\r\n      location={this.props.location}\r\n      isRawHtml={this.state.isRawHtml}\r\n    ></DocumentDetailsViewer>\r\n  );\r\n\r\n  public render() {\r\n    const { isLoading, documentDetails } = this.props;\r\n    const { documentChosen, showSpinner } = this.state;\r\n\r\n    return (\r\n      <>\r\n        <Spinner isLoading={isLoading && showSpinner}>\r\n          {this.renderELiDublicateModal()}\r\n          {(documentChosen || documentDetails.documents.length === 1) && this.renderDetailsViewer()}\r\n        </Spinner>\r\n      </>\r\n    );\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  ({ documentDetails }: AppState, ownProps: IDocumentDetailsContainerProps): IDocumentDetailsContainerProps => {\r\n    return {\r\n      ...ownProps,\r\n      documentDetails: documentDetails,\r\n      eliMetaData: documentDetails.eliMetaData,\r\n      schemaOrgMetadata: documentDetails.schemaOrgMetadata,\r\n      canonicalUri: documentDetails.canonicalUri,\r\n      isLoading: documentDetails.isLoading,\r\n    };\r\n  },\r\n  dispatch => bindActionCreators({ ...DocumentDetailsActions, ...FooterReducerActions }, dispatch)\r\n)(DocumentDetailsContainer);\r\n","export enum CelexType {\r\n  Implementation = 10,\r\n  Reference = 20,\r\n}\r\n"],"names":["nlToBr","str","arr","split","length","elmsArr","flatMap","s","i","pop","Document","props","d","document","React","show","setShow","showReprintNotes","setShowReprintNotes","toggleReprintNotes","Container","className","about","retsinfoLink","typeof","EliClass","ReprintNotes","ressort","ressortName","isOpen","toggleModal","docId","id","title","shortName","property","EliProperty","resource","EliResource","documentTypeEliCode","rel","rev","Row","Col","lg","datatype","DataType","showDocumentStateBadge","geografiskDaekningId","retsinfoKlassifikationId","Badge","color","isHistoryFlag","hasReprintNotes","Button","onClick","undefined","fobRessortNames","join","Link","to","popularTitle","offentliggoerelsesDato","e","preventDefault","Icon","icon","IconType","iconSize","RelatedDocs","geografiskDakning","retsinfoKlassifikation","GeografiskDaekning","includes","ReferenceLink","reference","eliPath","hasReferences","relDoc","retVal","euReferenceGroups","forEach","element","references","referenceGroups","connect","ownProps","relatedDocuments","relatedDocumentsMap","dispatch","bindActionCreators","RelatedDocumentsActions","getRelatedDocuments","showMore","setShowMore","Collapse","Spinner","animation","map","group","gIndex","xs","header","docRef","rIndex","style","marginLeft","type","CelexType","href","htmlUrl","target","noteUrl","documentLinkGroups","data","RDFsLiteral","XSDstring","XSDdate","LegalResource","LegalExpression","Format","Title","ShortTitle","ResponsibilityOf","TypeDocument","IsRealizedBy","Realizes","Language","InForce","TitleAlternative","Embodies","IsEmbodiedBy","Publisher","MediaType","PublicationDate","AuthorityTypeDocumentLink","AuthorityLanguageDAN","OntologyInForce","OntologyNotInForce","FormatHtml","FormatXml","FormatJsonLd","FormatRdfXml","MediaTypeHtml","notes","reprintNotes","ReprintInformationActions","getReprintNotes","Modal","ModalHeader","tag","ModalBody","note","index","date","dangerouslySetInnerHTML","__html","replace","ModalFooter","State","PdfLink","isModalOpen","setIsModalOpen","pdfLink","documentId","showAsDeactivated","isPdfAvailable","closeModal","toggle","GoToTop","currentTarget","blur","window","scrollTo","TimelineInfo","isCurrentDocument","isOutOfOrder","isSecondary","itemSize","myRef","useRef","current","setTimeout","scroller","closest","targetRect","getBoundingClientRect","containerRect","scrollLeft","left","clientWidth","width","ref","tabIndex","documentType","documentNumber","signatureDate","TimelineYear","year","TimelinePreview","scrollInfo","documents","onSetScrollInfo","onZoom","canZoomIn","canZoomOut","randoms","setRandoms","scrollWidth","localScrollInfo","setLocalScrollInfo","randomsWithoutSiblings","Math","floor","random","a","handleScrollChange","newScrollInfo","disabled","squares","min","distance","x2","isNaN","xmlns","viewBox","fill","stroke","x1","y1","y2","Array","x","opacity","cx","cy","r","renderSliderBackground","draggableTrack","max","range","allowCross","onChange","newWidth","c","onAfterChange","value","TimelineDetailsModal","closeDetailsModal","timelineItems","staticItems","currentTimelineDocument","setCurrentTimelineDocument","currentRef","filter","documentItem","scrollIntoView","block","behavior","renderTimelineItem","item","documentTypeId","isDocument","isError","errorItem","isHistoric","errorMessage","yearItem","slice","reverse","Timeline","isTimelineDetailsModalOpen","toggleTimelineDetailsModal","scrollerRef","setStaticItems","setTimelineItems","openedItem","setOpenedItem","errorDialog","setErrorDialog","allErrors","setAllErrors","scrollPosition","setScrollPosition","setScrollInfo","directScrollInfo","setDirectScrollInfo","setItemSize","minItemSize","setMinItemSize","maxItemSize","createTimelineDocument","createTimelineYear","squeeze","isSqueezeMarker","createTimelineError","error","isMainLaw","errorsBeforeItem","generateTimelineItems","previous","ignoreFirstError","isSqueezingYears","errorsAfterItem","items","from","concat","todayItem","newItemSize","errors","setScrollInfosFromScrollerRef","useCallback","debounce","onscroll","widthPercentage","itemsToDisplay","itemWidth","round","contentWidth","documentElement","setProperty","hasErrorButton","currentDocumentIndex","findIndex","allLbks","lastLbk","showGoToLastLbk","indexOf","IconButton","solidIcon","change","newItemWidth","nextDocumentItem","previousDocumentItem","isMobile","onMouseEnter","onFocus","DocumentContent","documentDetails","restylingRootId","timelineDocuments","scrollElementIntoView","documentHtml","editorialNotes","isReprint","isHistorical","metadata","documentFobTagGroup","alternativeMedia","showReprintNote","setShowReprintNote","openMetadata","setOpenMetadata","openTimeline","setOpenTimeline","setIsTimelineDetailsModalOpen","showTagModal","setShowTagModal","showEditotialNotes","setShowEditorialNotes","showAlternativeMedia","setShowAlternativeMedia","showGoToTop","setShowGoToTop","goToParagraph","setGoToParagraph","paragraphSearchTabRef","paragraphSearchTabInputRef","mainContentRef","onScroll","top","classList","add","remove","removeEventListener","addEventListener","passive","handleGoToParagraph","location","hash","toggleReprintModal","toggleTagModal","toggleEditorialNotesModal","toggleAlternativeMediaModal","showParagraphSearch","paragraph","placeholder","onKeyUp","key","paragraphId","RegExp","getElementById","handleGoToParagraphChange","inputMode","select","Permalink","description","Printlink","md","Label","displayName","displayValue","hasFobTags","documentTag","parents","parent","DocumentContentRawHtml","DocumentMetadata","Helmet","canonicalUrl","eliMetadata","meta","schemaOrgMetadata","ReferenceDetailsModal","kortNavn","setIsOpen","params","doc","exportReferences","paramsString","qs","paramsQuery","apiGET","paramsSerializer","p","responseType","result","FileSaver","MissingDocumentReferencesDetailsContainer","isDocTypePartOfClassifications","this","documentClassifications","ids","toString","documentTypes","find","state","LawIsNotMarkedBefore","referencesLength","isSagsforlobPeriodValid","DocumentNotAttachedSagsforlob","selectAll","query","querySelectorAll","DocumentDetailViewer","hideToc","otherRefGroup","locationHashChanged","elementId","buildReferenceGroup","refs","getLinkGroupDocuments","setState","buildRefGroupKey","paddingLeft","marginTop","indexDocRef","manipulateDocumentHtml","documentTimeline","getTimeline","getDocumentClassification","prev","eliMetaData","canonicalUri","caseHistoryReferenceGroup","isRawHtml","CollapsibleBox","heading","drg","index2","eug","chg","subHeading","caseHistoryLabel","badge","stateLabel","innerIndex","eliUri","presentationName","externalLink","FooterContainer","elementIdOrName","elm","nameElements","getElementsByName","offsetPosition","scrollY","restylingRoot","querySelector","tocRoot","accnlinks","isDocumentPath","pathname","isAccn","search","startsWith","accn","substr","GETDOCLinks","hasLineAtIndex","substring","innerHTML","row","kapitel","trim","setAttribute","appendChild","anchor","label","textContent","bjelke","toLowerCase","parentNode","removeChild","beforeMetaDataRoot","hasChildNodes","DocumentClassificationActions","DocumentTimelineActions","DocumentDetailsContainer","dublicateModalOpen","documentShown","documentChosen","showSpinner","chooseDocument","renderELiDublicateModal","renderDetailsViewer","DocumentDetailsViewer","toLocaleLowerCase","endsWith","getDocumentDetails","nextProp","prevProps","isLoading","hasEliRequestChanged","match","showFooter","hideFooter","getDocumentDetailsByEliRequest","DocumentDetailsActions","FooterReducerActions"],"sourceRoot":""}