{"version":3,"file":"static/chunks/2201-dfafd05e591f6a95.js","mappings":"wKAMO,IAAMA,EAAuB,OAAC,CACjCC,MAAAA,EAAQ,GAAG,CACXC,OAAAA,EAAS,GAAG,CACZC,gBAAAA,EAAkBC,EAAAA,KAAKA,CAACC,MAAM,CAACC,KAAK,CACpCC,YAAAA,EAAcH,EAAAA,KAAKA,CAACC,MAAM,CAACC,KAAK,CACnB,CAAAE,EACb,MACI,GAAAC,EAAAC,IAAA,EAACC,MAAAA,CACGC,QAAQ,cACRC,QAAQ,MACRC,KAAMX,EACNY,MAAOR,EACPN,MAAOA,EACPC,OAAQA,EACRc,MAAM,uCAEN,GAAAP,EAAAQ,GAAA,EAACC,OAAAA,CACGC,EAAE,6/BACFC,GAAG,iBAEP,GAAAX,EAAAQ,GAAA,EAACC,OAAAA,CACGC,EAAE,0ZACFC,GAAG,qBAInB,iBCtBO,IAAMC,EAAsB,OAAC,CAAEC,eAAAA,CAAc,CAA2B,CAAAd,EAC3E,MACI,GAAAC,EAAAQ,GAAA,EAACM,EAAAA,CAAwBD,eAAgBA,WACrC,GAAAb,EAAAC,IAAA,EAAAD,EAAAe,QAAA,YACKC,CAAAA,EAAAA,EAAAA,EAAAA,EAAU,qBACX,GAAAhB,EAAAQ,GAAA,EAACjB,EAAoBA,CACjBC,MAAO,IACPC,OAAQ,IACRC,gBAAiBC,EAAAA,KAAKA,CAACC,MAAM,CAACC,KAAK,CACnCC,YAAaH,EAAAA,KAAKA,CAACC,MAAM,CAACC,KAAK,OAKnD,EAKMiB,EAA0BG,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,kMAUpC,OAAC,CAAEN,eAAAA,CAAc,CAAElB,MAAAA,CAAK,CAAE,CAAAI,SACxBc,EACM,GAGJlB,MAAAA,CAHOA,EAAMyB,YAAY,CAACC,KAAK,CAAC,yDAGNC,MAAA,CAA1B3B,EAAMyB,YAAY,CAACG,MAAM,CAAC,+CAGtB,2JChCP,IAAMC,EAAwB,OAAC,CAAEC,cAAAA,CAAa,CAAEC,kBAAAA,CAAiB,CAAEC,0BAAAA,CAAyB,CAA8B,CAAA5B,EACvH,CAAC6B,EAAcC,EAAkB,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAMnD,MACI,GAAA9B,EAAAQ,GAAA,EAACuB,EAAAA,CAAsBJ,0BAA2BA,WAC7CF,GAAiB,CAACG,EACf,GAAA5B,EAAAQ,GAAA,EAACwB,IAAKA,CACFC,IAAKR,EACLS,IAAKR,GAAqBV,CAAAA,EAAAA,EAAAA,EAAAA,EAAU,2BACpCmB,QAVS,KACrBN,EAAkB,GACtB,EASgBO,SAAU,GACV/B,KAAI,GACJgC,MAAO,CAAEC,UAAW,SAAU,EAC9BC,MAAM,UAGV,GAAAvC,EAAAQ,GAAA,EAACI,EAAAA,CAAmBA,CAAAA,CAAAA,IAIpC,EAKMmB,EAAwBd,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,mMAIlC,OAAC,CAAExB,MAAAA,CAAK,CAAE,CAAAI,SAAKJ,EAAMyB,YAAY,CAACC,KAAK,EAIvC,OAAC,CAAE1B,MAAAA,CAAK,CAAE,CAAAI,SAAKJ,EAAMyB,YAAY,CAACG,MAAM,EAIxC,OAAC,CAAE5B,MAAAA,CAAK,CAAE,CAAAI,SAAKJ,EAAMyB,YAAY,CAACoB,MAAM,EAItB,OAAC,CAAE7C,MAAAA,CAAK,CAAE,CAAAI,SAAKJ,EAAMC,MAAM,CAACC,KAAK,EACnD,OAAC,CAAE8B,0BAAAA,CAAyB,CAAE,CAAA5B,SAAM4B,EAA4B,uBAAyB,iHCtDxF,IAAMc,EAAa,eAACC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAqBC,EAAAA,QAAQA,CAC9CC,EAAWC,CAAAA,EAAAA,EAAAA,CAAAA,IAEX,CAAEC,OAAAA,CAAM,CAAEC,cAAAA,CAAa,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,EAAeC,EAAAA,EAAeA,EAC1D,CAAEC,YAAAA,CAAW,CAAE,CAAGF,CAAAA,EAAAA,EAAAA,CAAAA,EAAeG,EAAAA,CAAiBA,EAElD,CAAEC,OAAAA,CAAM,CAAEC,OAAAA,CAAM,CAAEC,eAAAA,CAAc,CAAE,CAAGR,GAAU,CAAC,EAChD,CAAES,SAAUC,CAAa,CAAEC,MAAOC,CAAK,CAAE,CAAGR,GAAe,CAAC,EAE5DS,EAAqBC,CAAAA,EAAAA,EAAAA,MAAAA,EAAuB,EAAE,EAE9CC,EAAmBC,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,UACjC,GAAI,CAAEH,CAAAA,EAAmBI,OAAO,CAACC,MAAM,CAAG,IAAM,CAACV,GAAkB,CAACF,GAAU,CAACC,GAAUK,EACrF,OAGJ,IAAMO,EAAkB,IAAIN,EAAmBI,OAAO,CAAC,CACvDJ,EAAmBI,OAAO,CAAG,EAAE,CAE/B,IAAMG,EAAWD,EAAgBE,GAAG,CAAC,GACjCvB,EACIF,EAAmB,CACf0B,QAASd,EACTF,OAAAA,EACAC,OAAAA,EACAgB,UAAWC,EAAIC,IAAI,CACnBC,OAAQ,CAAEC,SAAUjB,GAAiB,EAAG,EACxCkB,KAAMJ,EAAIK,OAAO,CACjB5B,cAAeA,CACnB,IACF6B,MAAM,GAGZ,OAAMC,QAAQC,GAAG,CAACZ,EACtB,EAAG,CAACZ,EAAgBF,EAAQC,EAAQK,EAAOd,EAAUF,EAAoBc,EAAeT,EAAc,EAEhGgC,EAAWjB,CAAAA,EAAAA,EAAAA,WAAAA,EACb,IACIH,EAAmBI,OAAO,CAACiB,IAAI,CAACC,GAChCpB,GACJ,EACA,CAACA,EAAiB,EAOtB,MAJAqB,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACNrB,GACJ,EAAG,CAACA,EAAiB,EAEd,CAAEkB,SAAAA,CAAS,CACtB,ECjCMI,EAEY,oBAAOC,UAA4BA,UAAYC,KAAAA,EAG3DC,EACFH,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAcG,UAAU,GAAIH,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAcI,aAAa,GAAIJ,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAcK,gBAAgB,EAEhFC,EAAoB,IACtBH,MAAAA,EAAAA,KAAAA,EAAAA,EAAYI,aAAa,gBGPpC,IAAMC,EAAsB,sBAOtBC,EAAQ,WACRC,EAAS,QAETC,EAAoCC,EAAAA,EAAQA,CAACC,GAAG,GAAGC,IAAI,CAAC,CAAEC,KAAM,KAAM,GAAGC,QAAQ,GA4C1EC,EAAc,OAAC,CACxBC,SAAAA,CAAQ,CACRC,aAAAA,CAAY,CACZC,MAAAA,CAAK,CACLC,YAAAA,CAAW,CACXC,SAAAA,CAAQ,CACRC,eAAAA,CAAc,CACdjH,OAAAA,CAAM,CACND,MAAAA,CAAK,CACLmH,qBAAAA,CAAoB,CACpBC,eAAAA,CAAc,CACdC,QAAAA,CAAO,CACPC,OAAAA,CAAM,CACNC,iBAAAA,CAAgB,CAChBC,cAAAA,CAAa,CACbC,SAAAA,CAAQ,CACRC,cAAAA,CAAa,CACE,CAAAnH,EAET6C,EAAWC,CAAAA,EAAAA,EAAAA,CAAAA,IACX,CAAEK,YAAAA,CAAW,CAAE,CAAGF,CAAAA,EAAAA,EAAAA,CAAAA,EAAeG,EAAAA,CAAiBA,EAClD,CAAEgE,eAAAA,CAAc,CAAEC,MAAOC,CAAO,CAAE,CAAGnE,GAAe,CAAC,EACrD,CAAEoE,SAAUC,CAAQ,CAAEC,QAASC,CAAO,CAAE,CAAGN,GAAkB,CAAC,EAC9D,CACFO,SAAUC,CAAI,CACdC,iBAAkBC,CAAO,CACzBC,IAAKC,CAAM,CACXC,SAAUC,CAAQ,CAClBC,UAAWC,CAAS,CACpBC,WAAYC,CAAG,CACfC,cAAeC,CAAK,CACvB,CAAGhB,GAAY,CAAC,EACX,CAAEiB,WAAYC,CAAU,CAAEC,UAAWC,CAAS,CAAE,CAAGlB,GAAW,CAAC,EAC/DmB,EAAQvB,EAAUwB,EAAAA,eAAe,CAACxB,EAAQ,CAAGwB,EAAAA,eAAe,CAAC,EAAE,CAC/D,CAAE/F,OAAAA,CAAM,CAAEgG,cAAAA,CAAa,CAAE/F,cAAAA,CAAa,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,EAAeC,EAAAA,EAAeA,EACzE,CACF8F,mBAAAA,CAAkB,CAClB3F,OAAAA,CAAM,CACNC,OAAAA,CAAM,CACN2F,aAAAA,EAAY,CACZC,qBAAAA,EAAoB,CACpBC,6BAAAA,EAA4B,CAC5BC,uBAAAA,EAAsB,CACtBC,mBAAAA,EAAkB,CAClBC,0BAAAA,EAAyB,CAC5B,CAAGvG,GAAU,CAAC,EAET,CAAEwG,UAAAA,EAAS,CAAE,CAAGR,GAAiB,CAAC,EAClC,CAAES,UAAAA,EAAS,CAAEC,SAAAA,EAAQ,CAAE,CAAGF,IAAa,CAAC,EAExC,CAAEG,GAAIC,EAAqB,CAAE,CAAGC,CADL3G,EAAAA,EAAAA,CAAAA,EAAe,GAAWuF,EAAMmB,qBAAqB,CAACE,mBAAmB,GACxC,CAAC,EAC7D,CAAEC,uBAAAA,EAAsB,CAAE,CAAG7G,CAAAA,EAAAA,EAAAA,CAAAA,EAAe8G,EAAAA,CAAWA,EAGvD,CAACC,GAAkBC,GAAoB,CAAGlI,CAAAA,EAAAA,EAAAA,QAAAA,EAAkB,IAG5DmI,GAAcrG,CAAAA,EAAAA,EAAAA,MAAAA,IACdsG,GAAmBtG,CAAAA,EAAAA,EAAAA,MAAAA,EAAuBqD,GAC1CkD,GAAmBvG,CAAAA,EAAAA,EAAAA,MAAAA,EAA2B6C,GAC9C2D,GAAyBxG,CAAAA,EAAAA,EAAAA,MAAAA,EAA2B8C,GACpD2D,GAAmBzG,CAAAA,EAAAA,EAAAA,MAAAA,EAAeyC,GAClCiE,GAAuB1G,CAAAA,EAAAA,EAAAA,MAAAA,EAAe0C,GACtCiE,GAAS3G,CAAAA,EAAAA,EAAAA,MAAAA,EAAuB,MAChC4G,GAAgB5G,CAAAA,EAAAA,EAAAA,MAAAA,EAAe,GAC/B6G,GAAsB7G,CAAAA,EAAAA,EAAAA,MAAAA,EAAe,GACrC8G,GAAe9G,CAAAA,EAAAA,EAAAA,MAAAA,IACf+G,GAAuB/G,CAAAA,EAAAA,EAAAA,MAAAA,IACvBgH,GAAiBhH,CAAAA,EAAAA,EAAAA,MAAAA,EAAgB,IACjCiH,GAAkBjH,CAAAA,EAAAA,EAAAA,MAAAA,EAAgB,IAElC,CAAEmB,SAAAA,EAAQ,CAAE,CAAGtC,IACfqI,GAAiBC,WFnJvB,GAAM,CAACD,EAAgBE,EAAkB,CAAGlJ,CAAAA,EAAAA,EAAAA,QAAAA,IAS5C,MAPAoD,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACN,IAAM+F,EAAoBxF,IACtBwF,GACAD,EAAkBC,EAE1B,EAAG,EAAE,EAEEH,CACX,IE4IUI,GAAqB,CACvBC,MAAOjE,GAAiB,GACxBkE,OAAQ,EACZ,EAGAlG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACF2E,KACKwB,CAAAA,EAAAA,EAAAA,SAAAA,EAAU1F,IACX2F,CAAAA,EAAAA,EAAAA,SAAAA,EAAU3F,EAAqBuF,GAAoB,CAC/CK,QAASzF,CACb,GAGJ0F,KAER,GAGAtG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IACC,KACC+E,GAAYlG,OAAO,EACnBkG,GAAYlG,OAAO,CAAC0H,MAAM,EAElC,EACD,EAAE,EAEL,IAAMC,GAA4B5H,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,KACtC4G,GAAa3G,OAAO,GACpB0G,GAAoB1G,OAAO,CAAG,EAC9B8G,GAAgB9G,OAAO,CAAG,GAC1ByG,GAAczG,OAAO,CAAG,EAEhC,EAAG,EAAE,EAEC4H,GAA0B7H,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,UACxC,IAAM8H,EAAmB,MAAMC,KAE/B,GAAID,GAAoB3B,GAAYlG,OAAO,CAAE,CACzC,IAAM+H,EAAUF,EAAiBG,OAAO,CAClCC,EAAQJ,EAAiBI,KAAK,CAC9BC,EAAiBL,EAAiBM,OAAO,CAACjC,GAAYlG,OAAO,CAACoI,iBAAiB,GAAG,CAExF,MAAO,CACHxL,GAAImL,EACJE,MAAOA,EACPI,SAAUnC,GAAYlG,OAAO,CAACsI,WAAW,GACzCC,WAAYL,EAAeM,KAAK,CAChCC,gBAAiBvC,GAAYlG,OAAO,CAAC0I,WAAW,GAChDC,yBAA0BlC,GAAczG,OAAO,CAEvD,CAEA,MAAO,CAAC,CACZ,EAAG,CAACyG,GAAc,EAEZmC,GAAS7I,CAAAA,EAAAA,EAAAA,WAAAA,EACX,MAAO8I,IACHpC,GAAczG,OAAO,CAAGyG,GAAczG,OAAO,CAAG6I,EAAmBnC,GAAoB1G,OAAO,CAC9F0G,GAAoB1G,OAAO,CAAG6I,EAE1B,CAAC/B,GAAgB9G,OAAO,EAAIyG,GAAczG,OAAO,EA/LnC,IAgMViD,GACAA,EAAc,MAAM2E,MAExBd,GAAgB9G,OAAO,CAAG,GAElC,EACA,CAACyG,GAAemB,GAAyB3E,EAAe6D,GAAgB,EAGtEgC,GAAmB,SAGjBC,EAFJ,IAAMC,EAAgBC,CAAAA,EAAAA,EAAAA,SAAAA,EAAUrH,GAShC,OALIoH,GAEAD,CAAAA,EAAwBG,KAAKC,KAAK,CADDC,mBAAmBJ,GACjBK,EAGhCN,CACX,EAEMO,GAAavJ,CAAAA,EAAAA,EAAAA,WAAAA,EACf,IACI,IAAMgJ,EAAwBD,KACxBS,EAAY,CACdnC,MAAOoC,EACPnC,OAAQ0B,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAuB1B,MAAM,GAAIF,GAAmBE,MAAM,EAGtEE,CAAAA,EAAAA,EAAAA,SAAAA,EAAU3F,EAAqB2H,EAAW,CACtC/B,QAASzF,CACb,EACJ,EACA,CAACoF,GAAmBE,MAAM,CAAC,EAGzBoC,GAAe1J,CAAAA,EAAAA,EAAAA,WAAAA,EACjB,IACI,IAAMgJ,EAAwBD,KACxBS,EAAY,CACdnC,MAAO2B,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAuB3B,KAAK,GAAID,GAAmBC,KAAK,CAC/DC,OAAQqC,CACZ,EAEAnC,CAAAA,EAAAA,EAAAA,SAAAA,EAAU3F,EAAqB2H,EAAW,CACtC/B,QAASzF,CACb,EACJ,EACA,CAACoF,GAAmBC,KAAK,CAAC,EAGxBuC,GAAmB5J,CAAAA,EAAAA,EAAAA,WAAAA,EACrB,CACI2C,EACAC,EACAH,EACAsD,EACAb,EACAC,EACAG,EACAD,EACAE,EACAH,EACAjC,SAGI0G,EAEJ,GAAIpH,GAAS,CAACsD,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAwB+D,UAAU,EAAE,KAGnCC,EAFX,IAAMA,EAAOC,SD5RWC,CAAY,MAAEC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAcC,OAAOC,QAAQ,CAACC,IAAI,CAEpF,OAAOC,IADYC,IAAIL,GACTM,YAAY,CAACC,GAAG,CAACR,EACnC,ECyRqD,KAAMxH,GAM3CoH,EAAoB,CAChBa,aANiBX,EACf,KAAsDvM,MAAA,QAAjDuM,CAAAA,EAAAA,EAAKY,QAAQ,CAAC,EAAG,OAAjBZ,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAuBa,SAAS,CAAC,EAAGb,EAAK7J,MAAM,GA9P9C,WAoQR2K,OAAQ1F,GAAwB,OAChC2F,MAAO,CACHC,UAAWC,CANK9F,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAc+F,IAAI,CAAC,GAAoBC,EAAEH,SAAS,IAAM,CAAC,GAM9CA,SAAS,CACpCI,QAAS,CACb,EACAC,SAAU,CACNC,IAAK,CACDC,OAAQhG,EACRiG,WAAYlG,EACZmG,IAAK/I,EACLgJ,cAAelG,EACfmG,iBAAkBtG,CACtB,CACJ,CACJ,CACJ,CAGA,IAAM6D,EAAgBF,KAEhB4C,EAAc,CAChBC,KAAMjJ,EACNkJ,MAAOjJ,EACPkJ,UANmB,WAOnBC,KAAM,CAAC,CAAC9C,EAAc5B,KAAK,CAC3B2E,YAAanC,EAEb1G,SAAAA,EACAmE,OAAQ2B,EAAc3B,MAAM,CAGhCnB,CAAAA,GAAYlG,OAAO,CAAG0L,GAAeM,SAAS,WAAWC,KAAK,CAACP,GAC/D7E,GAAe7G,OAAO,CAAG,GAErBkG,GAAYlG,OAAO,GACnBkG,GAAYlG,OAAO,CAACkM,EAAE,CAAC,OAAQ,IAC3B5C,GAAWwC,EAAKA,IAAI,CACxB,GAEA5F,GAAYlG,OAAO,CAACkM,EAAE,CAAC,SAAU,IAC7BzC,GAAapC,EAAOA,MAAM,CAC9B,GAMIzE,GAAwBsD,GAAYlG,OAAO,EAC3CkG,GAAYlG,OAAO,CAACkM,EAAE,CAAC,eAAgB,OAAC,CAAEC,MAAAA,CAAK,CAAEC,KAAAA,CAAI,CAAE,CAAApQ,EAEnD4G,EAAqBuJ,EAAOC,EAChC,GAGJlG,GAAYlG,OAAO,CAACkM,EAAE,CAAC,OAAQ,UAC3B,GAAIlG,GACAC,GAAoB,QACjB,CACH,IAAMoG,EAAY,MAAMvE,IACpBnB,CAAAA,GAAa3G,OAAO,GAAKqM,IACrBvJ,GAAW8D,GAAqB5G,OAAO,EACvC8C,EAAQ8D,GAAqB5G,OAAO,EAGxC2H,KACAhB,GAAa3G,OAAO,CAAGqM,EACvBzF,GAAqB5G,OAAO,CAAG,MAAM4H,KACjC/E,GAAkB+D,GAAqB5G,OAAO,EAC9C6C,EAAe+D,GAAqB5G,OAAO,EAGvD,CACJ,GAEI8C,GACAoD,GAAYlG,OAAO,CAACkM,EAAE,CAAC,QAAS,KACxBtF,GAAqB5G,OAAO,EAC5B8C,EAAQ8D,GAAqB5G,OAAO,CAE5C,GAGA+C,GAAU6D,GAAqB5G,OAAO,GACtCkG,GAAYlG,OAAO,CAACkM,EAAE,CAAC,OAAQ,KAC3BnJ,EAAO6D,GAAqB5G,OAAO,CACvC,GACAkG,GAAYlG,OAAO,CAACkM,EAAE,CAAC,SAAU,KAC7BnJ,EAAO6D,GAAqB5G,OAAO,CACvC,IAGJkG,GAAYlG,OAAO,CAACkM,EAAE,CAAC,OAAQ,KACvBhG,GAAYlG,OAAO,EACnB4I,GAAO1C,GAAYlG,OAAO,CAACsM,cAAc,GAEjD,GAEApG,GAAYlG,OAAO,CAACkM,EAAE,CAAC,OAAQ,IAC3BK,GAAOrL,EAAMmK,MAAM,CACvB,GAEAnF,GAAYlG,OAAO,CAACkM,EAAE,CAAC,YAAa,KAUhClL,GAAS,CAAER,KAAM,mBAAoBI,QATjB,CAChB4E,UAAAA,GACAC,SAAAA,GACAhD,YAAAA,EACAZ,MAAAA,EACA2K,YAAazF,GACbjF,OAAAA,CACJ,CAE0D,EAC9D,GAEAoE,GAAYlG,OAAO,CAACkM,EAAE,CAAC,eAA8C,KASjElL,GAAS,CAAER,KAAM,mBAAoBI,QARjB,CAChB4E,UAAAA,GACAC,SAAAA,GACAhD,YAAAA,EACAZ,MAAAA,EACA2K,YAAazF,EACjB,CAE0D,EAC9D,GAEAb,GAAYlG,OAAO,CAACkM,EAAE,CAAC,eAAgB,KAUnClL,GAAS,CAAER,KAAM,oBAAqBI,QATlB,CAChB4E,UAAAA,GACAC,SAAAA,GACAhD,YAAaA,EACbZ,MAAAA,EACA2K,YAAazF,GACbjF,OAAAA,CACJ,CAE2D,EAC/D,GAMAoE,GAAYlG,OAAO,CAACkM,EAAE,CAAC,UAAW,IAgB9BlL,GAAS,CAAER,KAAM,eAAgBI,QAXb,CAChB4E,UAAAA,GACAC,SAAAA,GACAhD,YAAAA,EACAZ,MAAAA,EACA2K,YAAazF,GACbjF,OAAQA,EACR2K,UAVcC,EAAYC,WAAW,CAWrCC,UAVcF,EAAYE,SAAS,CAae,EAC1D,GAEI5J,GACAkD,GAAYlG,OAAO,CAACkM,EAAE,CAAC,WAAY,KAC3BpF,IAAmBF,GAAqB5G,OAAO,EAC/CgD,EAAiB4D,GAAqB5G,OAAO,EAGjD2H,KACAhB,GAAa3G,OAAO,CAAGsB,KAAAA,CAC3B,GAGZ,EACA,CACIsB,EACAE,EACAC,EACAC,EACAsG,GACAG,GACAzD,GACA2B,GACAC,GACA/E,EACA+F,GACApD,GACAC,GACAhD,EACAsE,GACA/F,GACH,EAGCyG,GAAsB1H,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,cAsBhC8M,EArBJ,GAAI,CAAClH,GAAuB,CACpBnD,GAASwC,GAAsB3F,GAAUC,GAAUN,GAAiBkF,GAAYE,GAChF,MAAMvF,EACFiO,CAAAA,EAAAA,EAAAA,wBAAAA,EAAyB,CACrBzM,QAAS2E,EACT3F,OAAAA,EACAC,OAAAA,EACAyN,QAAS,GACT/N,cAAeA,EACfkF,SAAAA,EACAE,UAAAA,EACAQ,UAAWA,GAAa,GACxBF,WAAYA,GAAc,GAC1BsI,SAvdP,WAwdOnI,MAAAA,CACJ,IAGR,MACJ,CAIIrC,GAGAqK,CAAAA,EAAqBI,SD5fsBC,CAAW,CAAEC,CAA0D,EAC1H,IAAMC,EAAU,IAAI9C,IAAI4C,GAExB,OADAG,OAAOC,OAAO,CAACH,GAAQI,OAAO,CAAC,OAAC,CAACC,EAAGC,EAAE,CAAAzR,EAAOoR,EAAQ7C,YAAY,CAACmD,MAAM,CAACF,EAAGC,EAAc,GACnFL,EAAQO,QAAQ,EAC3B,ECwfwEnL,EAFzC,CAAE,GAAGmD,EAAqB,CAAEzB,SAAAA,EAAUE,UAAAA,EAAWJ,OAAAA,EAAQJ,KAAAA,EAAMY,MAAAA,EAAOV,QAAAA,EAASQ,IAAAA,CAAI,EAEnCsJ,EAInElL,GACAC,GACAkK,GAEA/G,IACAb,IACAC,IACAG,IACAD,IACAE,IACAH,IAEAwE,GACIjH,EACAC,EACAkK,EAEA/G,GACAb,GACAC,GACAG,GACAD,GACAE,GACAH,GAGZ,EAAG,CACCH,EACAW,GACAnD,EACAnD,EACAuE,EACAkC,GACAhC,EACAjF,EACAqF,EACAE,EACAzB,EACA+B,EACAV,EACA1E,EACAqK,GACAnF,EACAI,EACA5F,EACA6F,EACAI,GACAC,GACAC,GACAE,GACAD,GACAE,GACA5C,EACA4B,EACH,EAGDnD,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,SAS0BgF,EAR3BmB,CAAAA,EAAAA,EAAAA,SAAAA,EAAU1F,IACX2F,CAAAA,EAAAA,EAAAA,SAAAA,EAAU3F,EAAqBuF,GAAoB,CAC/CK,QAASzF,CACb,GAGA,CAAC8E,GAAe7G,OAAO,EAAI8F,GAC3B2B,KACOvE,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAUjD,MAAM,YAAKkG,CAAAA,EAAAA,GAAiBnG,OAAO,GAAxBmG,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAA0BlG,MAAM,GAC5DkG,GAAiBnG,OAAO,CAAGkD,EAC3BuE,MAEAZ,GAAe7G,OAAO,EACrB,EAACkG,IACExD,IAAa0D,GAAiBpG,OAAO,EACrC2C,IAAmB0D,GAAuBrG,OAAO,EACjDsC,IAAagE,GAAiBtG,OAAO,EACrCuC,IAAiBgE,GAAqBvG,OAAO,IAEjDoG,GAAiBpG,OAAO,CAAG0C,EAC3B2D,GAAuBrG,OAAO,CAAG2C,EACjC2D,GAAiBtG,OAAO,CAAGsC,EAC3BiE,GAAqBvG,OAAO,CAAGuC,EAE/BkF,KAER,EAAG,CACCnF,EACAwD,GACAe,GACAM,GACAhE,EACAZ,EACAW,EACAP,EACA8E,GACA/E,EACH,EAED,IAAM6J,GAAS,IACX7F,GAAoB1G,OAAO,CAAG6N,EAC9B5H,GAAoB,GACxB,EAEM6B,GAAkB,UACpB,GAAI5B,GAAYlG,OAAO,CACnB,OAAOkG,GAAYlG,OAAO,CAAC8N,eAAe,CAAC5H,GAAYlG,OAAO,CAAC+N,gBAAgB,GAIvF,EAEA,MACI,GAAA9R,EAAAQ,GAAA,EAACU,MAAAA,CAAImB,MAAO,CAAE,GAAG0P,EAAOC,SAAS,CAAEvS,OAAQA,EAAQD,MAAOA,CAAM,WAC5D,GAAAQ,EAAAQ,GAAA,EAACU,MAAAA,CAAIP,GAAG,UAAUsR,IAAK1H,MAGnC,EAEMwH,EAAS,CACXC,UAAW,CACPE,QAAS,MACb,CACJ,EC5mBaC,EAAwB,OAAC,CAElC1L,SAAAA,CAAQ,CACR2L,YAAAA,CAAW,CACXC,YAAAA,CAAW,CACc,CAAAtS,EACnB,CAAE+C,OAAAA,CAAM,CAAEgG,cAAAA,CAAa,CAAE,CAAG9F,CAAAA,EAAAA,EAAAA,CAAAA,EAAeC,EAAAA,EAAeA,EAC1D,CAAEqP,+BAAAA,CAA8B,CAAEC,iBAAAA,CAAgB,CAAE,CAAGzP,GAAU,CAAC,EAClE,CAAE0P,OAAAA,CAAM,CAAE,CAAG1J,GAAiB,CAAC,EAE/BxC,EAAemM,CADNC,EAAAA,EAAAA,SAAAA,IACaC,KAAK,CAACC,EAAAA,EAAwBA,CAAC,CACrDC,EAAeN,MAAAA,EAAAA,KAAAA,EAAAA,EAAkBO,OAAO,CAE9C,MACI,GAAA9S,EAAAQ,GAAA,EAACuS,EAAAA,UACG,GAAA/S,EAAAQ,GAAA,EAAC4F,EAAWA,CAERK,SAAUA,EACVC,eAAgB0L,EAChB3S,OAAQ4S,GAAe,OACvBhM,SAAUmM,EACVlM,aAAcA,EACdC,MAAOsM,EACPrT,MAAM,OACNgH,YAAa8L,KAI7B,EAEMS,EAAY9R,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,0LAMtB,OAAC,CAAExB,MAAAA,CAAK,CAAE,CAAAI,SAAKJ,EAAMyB,YAAY,CAACC,KAAK,EAGvC,OAAC,CAAE1B,MAAAA,CAAK,CAAE,CAAAI,SAAKJ,EAAMyB,YAAY,CAACG,MAAM,EAGxC,OAAC,CAAE5B,MAAAA,CAAK,CAAE,CAAAI,SAAKJ,EAAMyB,YAAY,CAACoB,MAAM,GCnDjCwQ,EAAyB,OAAC,CACnCvR,cAAAA,CAAa,CACbwR,UAAAA,CAAS,CACTvR,kBAAAA,CAAiB,CACjBC,0BAAAA,CAAyB,CACC,CAAA5B,SAC1B,EACW,GAAAC,EAAAQ,GAAA,EAAC2R,EAAqBA,CAAC1L,SAAUwM,EAAWb,YAAa3Q,EAAe4Q,YAAY,SACpF5Q,GAAiB,CAACwR,EAErB,GAAAjT,EAAAQ,GAAA,EAACgB,EAAqBA,CAClBC,cAAeA,EACfC,kBAAmBA,EACnBC,0BAA2BA,IAI5B,IAEf","sources":["webpack://_N_E/./components/elements/icons/newsStoriesError/newsStoriesErrorIcon.tsx","webpack://_N_E/./components/modules/press/pressDetail/storyImageLoadError/storyImageLoadError.tsx","webpack://_N_E/./components/modules/press/pressDetail/storyContentViewImage/storyContentViewImage.tsx","webpack://_N_E/./hooks/common/useLogging/useLogging.ts","webpack://_N_E/./hooks/network/util.ts","webpack://_N_E/./hooks/network/useNetworkState.ts","webpack://_N_E/./components/utilities/queryParameters/queryParameters.ts","webpack://_N_E/./components/modules/video/videoPlayer.tsx","webpack://_N_E/./components/modules/press/pressDetail/storyContentViewVideo/storyContentViewVideo.tsx","webpack://_N_E/./components/modules/press/pressDetail/storyImageVideoDisplay/storyImageVideoDisplay.tsx"],"sourcesContent":["/* eslint-disable react/display-name */\n/* eslint-disable prettier/prettier */\n\nimport { theme } from '../../../../pages/_app';\nimport { ArrowIconProps } from '../iconInterfaces';\n\nexport const NewsStoriesErrorIcon = ({ \n width = 150, \n height = 150, \n symbolFillColor = theme.colors.black, \n strokeColor = theme.colors.black \n}: ArrowIconProps) => {\n return (\n \n \n \n \n );\n};\n","/* eslint-disable react/display-name */\nimport styled from 'styled-components';\nimport { theme } from '../../../../../pages/_app';\nimport { NewsStoriesErrorIcon } from '../../../../elements/icons/newsStoriesError/newsStoriesErrorIcon';\nimport { translate } from '../../../../utilities/translate';\n\nexport interface StoryImageLoadErrorProp {\n isNavThumbnail?: boolean;\n}\n\nexport const StoryImageLoadError = ({ isNavThumbnail }: StoryImageLoadErrorProp) => {\n return (\n \n <>\n {translate('imageFailedToLoad')}\n \n \n \n );\n};\n\ninterface ImageLoadErrorContainerProp {\n isNavThumbnail?: boolean;\n}\nconst ImageLoadErrorContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n font-size: 23px;\n color: #000000;\n background-color: #ffffff;\n width: 100%;\n height: 100%;\n ${({ isNavThumbnail, theme }) =>\n isNavThumbnail\n ? `${theme.mediaQueries.large} {\n font-size: 18px;\n }\n ${theme.mediaQueries.tablet} {\n font-size: 14px;\n }`\n : 'font-size: 23px;'}\n`;\n","/* eslint-disable no-extra-parens */\n/* eslint-disable react/display-name */\n/* eslint-disable prettier/prettier */\nimport Image from 'next/image';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { translate } from '../../../../utilities/translate';\nimport { StoryImageLoadError } from '../storyImageLoadError/storyImageLoadError';\n\nexport interface StoryContentViewImageProps {\n storyImageUrl: string;\n storyImageCaption?: string | null;\n isStoryWithMapsOrIndexTag: boolean;\n}\n\nexport const StoryContentViewImage = ({ storyImageUrl, storyImageCaption, isStoryWithMapsOrIndexTag }: StoryContentViewImageProps) => {\n const [imgLoadError, setImageLoadError] = useState(false);\n\n const handleImageError = () => {\n setImageLoadError(true);\n };\n\n return (\n \n {storyImageUrl && !imgLoadError ? (\n \n ) : (\n \n )}\n \n );\n};\n\ninterface ThumbnailImgProp {\n isStoryWithMapsOrIndexTag: boolean;\n}\nconst ThumbnailImgContainer = styled.div`\n width: 100%;\n position: relative;\n\n ${({ theme }) => theme.mediaQueries.large} {\n min-height: 300px;\n height: 370px;\n }\n ${({ theme }) => theme.mediaQueries.tablet} {\n min-height: 368px;\n height: 368px;\n }\n ${({ theme }) => theme.mediaQueries.mobile} {\n min-height: 176px;\n height: 180px;\n }\n background-color: ${({ theme }) => theme.colors.black};\n ${({ isStoryWithMapsOrIndexTag }) => (isStoryWithMapsOrIndexTag ? 'object-fit: contain;' : 'object-fit: cover;')}\n`;\n","import { logEvent as LogEvent } from '@weatherbug/common-v2';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { selectAppConfig } from '../../../store/redux/common/dataLayer/appConfig/slices/appConfigSlice';\nimport { selectUserProfile } from '../../../store/redux/common/dataLayer/user/slices/userSlice';\nimport { useAppDispatch, useAppSelector } from '../../../store/redux/storeHooks/hooks';\nimport type { LogEventType } from './types';\n\nexport const useLogging = (LogEventDependency = LogEvent) => {\n const dispatch = useAppDispatch();\n\n const { config, stdParameters } = useAppSelector(selectAppConfig);\n const { userProfile } = useAppSelector(selectUserProfile);\n\n const { authId, secret, loggingBaseUrl } = config || {};\n const { DeviceId: appInstanceId, IsBot: isBot } = userProfile || {};\n\n const cachedEventLogsRef = useRef([]);\n\n const logEventsInCache = useCallback(async () => {\n if (!(cachedEventLogsRef.current.length > 0) || !loggingBaseUrl || !authId || !secret || isBot) {\n return;\n }\n\n const cachedEventLogs = [...cachedEventLogsRef.current];\n cachedEventLogsRef.current = [];\n\n const promises = cachedEventLogs.map((log) =>\n dispatch(\n LogEventDependency({\n baseUrl: loggingBaseUrl,\n authId,\n secret,\n eventType: log.type,\n params: { deviceid: appInstanceId || '' },\n data: log.payload,\n stdParameters: stdParameters as unknown as Record\n })\n ).unwrap()\n );\n\n await Promise.all(promises);\n }, [loggingBaseUrl, authId, secret, isBot, dispatch, LogEventDependency, appInstanceId, stdParameters]);\n\n const logEvent = useCallback(\n (event: LogEventType) => {\n cachedEventLogsRef.current.push(event);\n logEventsInCache();\n },\n [logEventsInCache]\n );\n\n useEffect(() => {\n logEventsInCache();\n }, [logEventsInCache]);\n\n return { logEvent };\n};\n","/* eslint-disable operator-linebreak */\n/*\n There are a number of problems here:\n 1. According to the current MDN docs for Navigator, there are no properties 'mozConnection' or 'webkitConnection'\n - It seems that these properties used to exist, and this exact code was used in Web V1: \n - https://www.educative.io/answers/what-is-the-network-information-api-in-javascript\n - (see Web V1 code: connectionHelper.ts, line 2).\n 2. The original Web V1 code seems to have been only testing for connection.effectiveType (see connectionHelper.ts, line 3), which is only cell connections types.\n There is no reason to assume there was any logging being done that recorded the connection.type (WiFi, etc.).\n 3. Navigator.connection is still considered \"experimental\" technology, 6 years after it was used in Web V1. \n - https://caniuse.com/netinfo\n - https://whatwebcando.today/network-type-speed.html\n - https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API\n - https://developer.mozilla.org/en-US/docs/Web/API/Navigator/connection\n - https://developer.mozilla.org/en-US/docs/Web/API/Navigator\n - https://wicg.github.io/netinfo/#effective-connection-types\n*/\n\nexport interface NetworkInfo extends EventTarget {\n readonly type: 'wifi' | 'cellular' | 'ethernet' | 'bluetooth' | 'none' | 'other' | 'unknown';\n readonly effectiveType: 'slow-2g' | '2g' | '3g' | '4g';\n}\n\nconst webNavigator:\n | (Navigator & Partial>)\n | undefined = typeof navigator !== 'undefined' ? navigator : undefined;\n\n// eslint-disable-next-line operator-linebreak\nconst connection: NetworkInfo | undefined =\n webNavigator?.connection || webNavigator?.mozConnection || webNavigator?.webkitConnection;\n\nexport const getConnectionType = () => {\n return connection?.effectiveType;\n};\n","import { useEffect, useState } from 'react';\nimport { NetworkInfo, getConnectionType } from './util';\n\nexport function useNetworkState() {\n const [connectionType, setConnectionType] = useState();\n\n useEffect(() => {\n const newConnectionType = getConnectionType();\n if (newConnectionType) {\n setConnectionType(newConnectionType);\n }\n }, []);\n\n return connectionType;\n}\n","/* eslint-disable no-useless-escape */\n/* eslint-disable prettier/prettier */\nexport function getQueryParameterByName(name: string, url: string = window.location.href): string | null {\n const newUrl = new URL(url);\n return newUrl.searchParams.get(name);\n}\n\nexport function serializeObjectToQueryStringParameters(uri: string, object: Record) {\n const baseURL = new URL(uri);\n Object.entries(object).forEach(([k, v]) => { baseURL.searchParams.append(k, v as string); });\n return baseURL.toString();\n}\n","/* eslint-disable operator-linebreak */\n/* eslint-disable @typescript-eslint/member-delimiter-style */\n/* eslint-disable no-extra-parens */\n/* eslint-disable require-atomic-updates */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable prettier/prettier */\nimport { getAdTargetingParameters, unitSystemsEnum } from '@weatherbug/common-v2';\nimport { getCookie, hasCookie, setCookie } from 'cookies-next';\nimport { DateTime } from 'luxon';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useLogging } from '../../../hooks/common/useLogging/useLogging';\nimport { useNetworkState } from '../../../hooks/network/useNetworkState';\nimport type { VideoAdRule } from '../../../lib/services/envConfigService/environmentConfigsProvider/types/environmentConfig';\nimport { selectAppConfig } from '../../../store/redux/common/dataLayer/appConfig/slices/appConfigSlice';\nimport type { PlatformKeys } from '../../../store/redux/common/dataLayer/appConfig/slices/types';\nimport { selectLegal } from '../../../store/redux/common/dataLayer/legal/slices/legalSlice';\nimport type { ComplianceRequirementV3ResponseType } from '../../../store/redux/common/dataLayer/legal/slices/providers/types';\nimport { selectUserProfile } from '../../../store/redux/common/dataLayer/user/slices/userSlice';\nimport { useAppDispatch, useAppSelector } from '../../../store/redux/storeHooks/hooks';\nimport {\n getQueryParameterByName,\n serializeObjectToQueryStringParameters\n} from '../../utilities/queryParameters/queryParameters';\n\nconst minimumViewingSeconds = 3;\nconst videoSettingsCookie = 'videoSettingsCookie';\n\n/* \ncommented vallues will be used in a future PR \nhttps://xadinc.atlassian.net/browse/WBUG-9772\n*/\nconst adServer = 'appNexus';\nconst adSDK = 'JWPlayer';\nconst adType = 'video';\nconst defaultAdScheduleId = 'wb123456';\nconst videoSettingsCookieExpirationDate = DateTime.utc().plus({ days: 10950 }).toJSDate();\n\nexport interface VideoMetadata {\n id: string | undefined;\n title: string;\n duration: number;\n resolution: string;\n currentPosition: number;\n cumulativeSecondsWatched: number;\n}\n\n/*\nNOTE 1: The latest version of \"@types/jwplayer\": \"8.28.4\" is NOT up to date with the latest version of JWPlayer, which we are using;\n - The ad configs that we are passing to setup are NOT a match for \"@types/jwplayer\": \"8.28.4\", so we are casting them.\n - The setup configs are also not a direct match with any current documentation, so we are casting them as well.\n - There are, therefore, a number of possible issues might pop up as we go forward, and there is no one source\n that serves up definitive answers:\n - https://docs.jwplayer.com/players/docs/jw8-player-events-reference\n - https://docs.jwplayer.com/players/reference/advertising-events#onadbreakstart\n - https://docs.jwplayer.com/players/docs/jw8-ad-errors-and-warnings-reference\n - https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/jwplayer/index.d.ts\nNOTE 2: This component will be called from three different places, but currently only from StoryContentViewVideo:\n NationalOutlookScreenVideoView and MainVideoView have not yet been implemented.\nNOTE 3: Do not pass in videoPrerollAdClient from MainVideoView, it is already available in config.\n*/\nexport interface VideoPlayerProps {\n adPageId: string;\n platformCode: PlatformKeys;\n adUrl: string;\n placementId: number;\n videoUrl?: string;\n posterImageUrl?: string | undefined;\n height: string;\n width?: string;\n playlistNextCallback?: (index: number, item: jwplayer.PlaylistItem) => void;\n onVideoStarted?: (videoMetadata: VideoMetadata) => void;\n onPause?: (videoMetadata: VideoMetadata) => void;\n onStop?: (videoMetadata: VideoMetadata) => void;\n onVideoCompleted?: (videoMetadata: VideoMetadata) => void;\n onVideoViewed?: (videoMetadata: VideoMetadata) => void;\n playlist?: [];\n muteByDefault?: boolean;\n}\n\nexport const VideoPlayer = ({\n adPageId,\n platformCode,\n adUrl,\n placementId,\n videoUrl,\n posterImageUrl,\n height,\n width,\n playlistNextCallback,\n onVideoStarted,\n onPause,\n onStop,\n onVideoCompleted,\n onVideoViewed,\n playlist,\n muteByDefault\n}: VideoPlayerProps) => {\n /* Redux, appState, etc. */\n const dispatch = useAppDispatch();\n const { userProfile } = useAppSelector(selectUserProfile);\n const { ActiveLocation, Units: unitKey } = userProfile || {};\n const { Locality: locality, Station: station } = ActiveLocation || {};\n const {\n CityName: city,\n CountryShortName: country,\n Dma: region,\n Latitude: latitude,\n Longitude: longitude,\n PostalCode: zip,\n TerritoryAbbr: state\n } = locality || {};\n const { ProviderId: providerId, StationId: stationId } = station || {};\n const units = unitKey ? unitSystemsEnum[unitKey] : unitSystemsEnum[1];\n const { config, pageRouteInfo, stdParameters } = useAppSelector(selectAppConfig);\n const {\n adTargetingBaseUrl,\n authId,\n secret,\n videoAdRules,\n videoPrerollAdClient,\n videoPrerollAutoplayAdsMuted,\n videoPrerollSkipOffset,\n videoPrerollOffset,\n videoPrerollVPaidControls\n } = config || {};\n\n const { analytics } = pageRouteInfo || {};\n const { busDomain, pageName } = analytics || {};\n const targetingParametersState = useAppSelector((state) => state.adTargetingParameters.targetingParameters);\n const { tp: adTargetingParameters } = targetingParametersState || {};\n const { complianceRequirements } = useAppSelector(selectLegal);\n\n /* useState */\n const [seekJustOccurred, setSeekJustOccurred] = useState(false);\n\n /* useRef */\n const videoPlayer = useRef();\n const previousPlaylist = useRef<[] | undefined>(playlist);\n const previousVideoUrl = useRef(videoUrl);\n const previousPosterImageUrl = useRef(posterImageUrl);\n const previousAdPageId = useRef(adPageId);\n const previousPlatformCode = useRef(platformCode);\n const divRef = useRef(null);\n const amountWatched = useRef(0);\n const lastVideoTimeLogged = useRef(0);\n const currentVideo = useRef();\n const currentVideoMetadata = useRef();\n const componentReady = useRef(false);\n const videoViewLogged = useRef(false);\n\n const { logEvent } = useLogging();\n const connectionType = useNetworkState();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const defaultCookieValue = {\n muted: muteByDefault || false,\n volume: 90\n };\n\n /* was: componentDidMount */\n useEffect(() => {\n if (complianceRequirements) {\n if (!hasCookie(videoSettingsCookie)) {\n setCookie(videoSettingsCookie, defaultCookieValue, {\n expires: videoSettingsCookieExpirationDate\n });\n }\n\n trySetupVideoPlayer();\n }\n });\n\n /* was: componentWillUnmount */\n useEffect(() => {\n return () => {\n if (videoPlayer.current) {\n videoPlayer.current.remove();\n }\n };\n }, []);\n\n const completeVideoAndClearData = useCallback(() => {\n if (currentVideo.current) {\n lastVideoTimeLogged.current = 0;\n videoViewLogged.current = false;\n amountWatched.current = 0;\n }\n }, []);\n\n const getCurrentVideoMetadata = useCallback(async (): Promise => {\n const tempCurrentVideo = await getCurrentVideo();\n\n if (tempCurrentVideo && videoPlayer.current) {\n const mediaId = tempCurrentVideo.mediaid;\n const title = tempCurrentVideo.title;\n const currentQuality = tempCurrentVideo.sources[videoPlayer.current.getCurrentQuality()];\n\n return {\n id: mediaId,\n title: title,\n duration: videoPlayer.current.getDuration(),\n resolution: currentQuality.label,\n currentPosition: videoPlayer.current.getPosition(),\n cumulativeSecondsWatched: amountWatched.current\n };\n }\n\n return {} as VideoMetadata;\n }, [amountWatched]);\n\n const onTime = useCallback(\n async (currentVideoTime: number) => {\n amountWatched.current = amountWatched.current + currentVideoTime - lastVideoTimeLogged.current;\n lastVideoTimeLogged.current = currentVideoTime;\n\n if (!videoViewLogged.current && amountWatched.current >= minimumViewingSeconds) {\n if (onVideoViewed) {\n onVideoViewed(await getCurrentVideoMetadata());\n }\n videoViewLogged.current = true;\n }\n },\n [amountWatched, getCurrentVideoMetadata, onVideoViewed, videoViewLogged]\n );\n\n const getCurrentCookie = () => {\n const currentCookie = getCookie(videoSettingsCookie);\n let decodedVideoPlayerCookieString;\n let videoPlayerCookieJson;\n\n if (currentCookie) {\n decodedVideoPlayerCookieString = decodeURIComponent(currentCookie);\n videoPlayerCookieJson = JSON.parse(decodedVideoPlayerCookieString);\n }\n\n return videoPlayerCookieJson;\n };\n\n const changeMute = useCallback(\n (newMuted: boolean) => {\n const videoPlayerCookieJson = getCurrentCookie();\n const newCookie = {\n muted: newMuted,\n volume: videoPlayerCookieJson?.volume || defaultCookieValue.volume\n };\n\n setCookie(videoSettingsCookie, newCookie, {\n expires: videoSettingsCookieExpirationDate\n });\n },\n [defaultCookieValue.volume]\n );\n\n const changeVolume = useCallback(\n (newVolume: number) => {\n const videoPlayerCookieJson = getCurrentCookie();\n const newCookie = {\n muted: videoPlayerCookieJson?.muted || defaultCookieValue.muted,\n volume: newVolume\n };\n\n setCookie(videoSettingsCookie, newCookie, {\n expires: videoSettingsCookieExpirationDate\n });\n },\n [defaultCookieValue.muted]\n );\n\n const setupVideoPlayer = useCallback(\n (\n videoUrl: string,\n posterImageUrl: string,\n adUrl: string,\n complianceRequirements: ComplianceRequirementV3ResponseType,\n videoAdRules: VideoAdRule[],\n videoPrerollAdClient: string,\n videoPrerollOffset: string,\n videoPrerollSkipOffset: number,\n videoPrerollVPaidControls: boolean,\n videoPrerollAutoplayAdsMuted: boolean,\n playlist?: []\n // videoSources?: PlatformKeys /* Only appears in videoPlayer.angular.js in Web V1, might not need */\n ) => {\n let advertisingConfig;\n\n if (adUrl && !complianceRequirements?.disableAds) {\n const adId = getQueryParameterByName('id', adUrl);\n const adscheduleid = adId\n ? `wb${adId.padStart(8, '0')?.substring(2, adId.length)}`\n : defaultAdScheduleId;\n const frequencyAdRule = videoAdRules?.find((x: VideoAdRule) => x.frequency) || ({} as VideoAdRule);\n\n advertisingConfig = {\n adscheduleid,\n client: videoPrerollAdClient || 'vast',\n rules: {\n frequency: frequencyAdRule.frequency,\n startOn: 0\n },\n schedule: {\n pre: {\n offset: videoPrerollOffset,\n skipoffset: videoPrerollSkipOffset,\n tag: adUrl,\n vpaidcontrols: videoPrerollVPaidControls,\n autoplayadsmuted: videoPrerollAutoplayAdsMuted\n }\n }\n } as unknown as jwplayer.AdvertisingConfig;\n }\n\n const autostartValue = 'viewable' as const;\n const currentCookie = getCurrentCookie();\n\n const setupConfig = {\n file: videoUrl,\n image: posterImageUrl,\n autostart: autostartValue,\n mute: !!currentCookie.muted || false,\n advertising: advertisingConfig,\n // sources: videoSources, /* Only appears in videoPlayer.angular.js in Web V1, might not need */\n playlist,\n volume: currentCookie.volume\n } as jwplayer.SetupConfig;\n\n videoPlayer.current = setupConfig && jwplayer('wbVideo').setup(setupConfig);\n componentReady.current = true;\n\n if (videoPlayer.current) {\n videoPlayer.current.on('mute', (mute: { mute: boolean }) => {\n changeMute(mute.mute);\n });\n\n videoPlayer.current.on('volume', (volume: { volume: number }) => {\n changeVolume(volume.volume);\n });\n\n /* \n This is passed down from featuredVideosPage and used in setCurrentVideoInfo.\n But publishDate is not a property on jwplayer.PlaylistItem. This will be an issue. \n */\n if (playlistNextCallback && videoPlayer.current) {\n videoPlayer.current.on('playlistItem', ({ index, item }) => {\n // item is type jwplayer.PlaylistItem\n playlistNextCallback(index, item);\n });\n }\n\n videoPlayer.current.on('play', async () => {\n if (seekJustOccurred) {\n setSeekJustOccurred(false);\n } else {\n const tempVideo = await getCurrentVideo();\n if (currentVideo.current !== tempVideo) {\n if (onPause && currentVideoMetadata.current) {\n onPause(currentVideoMetadata.current);\n }\n\n completeVideoAndClearData();\n currentVideo.current = tempVideo;\n currentVideoMetadata.current = await getCurrentVideoMetadata();\n if (onVideoStarted && currentVideoMetadata.current) {\n onVideoStarted(currentVideoMetadata.current);\n }\n }\n }\n });\n\n if (onPause) {\n videoPlayer.current.on('pause', () => {\n if (currentVideoMetadata.current) {\n onPause(currentVideoMetadata.current);\n }\n });\n }\n\n if (onStop && currentVideoMetadata.current) {\n videoPlayer.current.on('idle', () => {\n onStop(currentVideoMetadata.current!);\n });\n videoPlayer.current.on('remove', () => {\n onStop(currentVideoMetadata.current!);\n });\n }\n\n videoPlayer.current.on('time', () => {\n if (videoPlayer.current) {\n onTime(videoPlayer.current.getCurrentTime());\n }\n });\n\n videoPlayer.current.on('seek', (event: { offset: number }) => {\n onSeek(event.offset);\n });\n\n videoPlayer.current.on('adRequest', () => {\n const loggingData = {\n busDomain,\n pageName,\n placementId,\n adSDK,\n networkType: connectionType,\n adType\n };\n\n logEvent({ type: 'app.ad.requested', payload: loggingData });\n });\n\n videoPlayer.current.on('adBreakStart' as keyof jwplayer.EventParams, () => {\n const loggingData = {\n busDomain,\n pageName,\n placementId,\n adSDK,\n networkType: connectionType\n };\n\n logEvent({ type: 'app.ad.retrieved', payload: loggingData });\n });\n\n videoPlayer.current.on('adImpression', () => {\n const loggingData = {\n busDomain,\n pageName,\n placementId: placementId,\n adSDK,\n networkType: connectionType,\n adType\n };\n\n logEvent({ type: 'app.ad.impression', payload: loggingData });\n });\n\n interface CustomAdErrorParam extends jwplayer.AdErrorParam {\n adErrorCode: number;\n errorType: string;\n }\n videoPlayer.current.on('adError', (event) => {\n const customEvent = event as CustomAdErrorParam;\n const errorCode = customEvent.adErrorCode as unknown as CustomAdErrorParam;\n const errorType = customEvent.errorType as unknown as CustomAdErrorParam;\n\n const loggingData = {\n busDomain,\n pageName,\n placementId,\n adSDK,\n networkType: connectionType,\n adType: adType,\n errorCode,\n errorType\n };\n\n logEvent({ type: 'app.ad.error', payload: loggingData });\n });\n\n if (onVideoCompleted) {\n videoPlayer.current.on('complete', () => {\n if (videoViewLogged && currentVideoMetadata.current) {\n onVideoCompleted(currentVideoMetadata.current);\n }\n\n completeVideoAndClearData();\n currentVideo.current = undefined;\n });\n }\n }\n },\n [\n playlistNextCallback,\n onPause,\n onStop,\n onVideoCompleted,\n changeMute,\n changeVolume,\n seekJustOccurred,\n completeVideoAndClearData,\n getCurrentVideoMetadata,\n onVideoStarted,\n onTime,\n busDomain,\n pageName,\n placementId,\n connectionType,\n logEvent\n ]\n );\n\n const trySetupVideoPlayer = useCallback(async () => {\n if (!adTargetingParameters) {\n if (adUrl && adTargetingBaseUrl && authId && secret && stdParameters && latitude && longitude) {\n await dispatch(\n getAdTargetingParameters({\n baseUrl: adTargetingBaseUrl,\n authId,\n secret,\n verbose: false,\n stdParameters: stdParameters as unknown as Record,\n latitude,\n longitude,\n stationId: stationId || '',\n providerId: providerId || '',\n adServer,\n units\n })\n );\n }\n return;\n }\n\n let adUrlWithTargeting;\n\n if (adUrl) {\n const adKeywords = { ...adTargetingParameters, latitude, longitude, region, city, state, country, zip };\n\n adUrlWithTargeting = serializeObjectToQueryStringParameters(adUrl, adKeywords);\n }\n\n if (\n videoUrl &&\n posterImageUrl &&\n adUrlWithTargeting &&\n // && playlist\n complianceRequirements &&\n videoAdRules &&\n videoPrerollAdClient &&\n videoPrerollOffset &&\n videoPrerollSkipOffset &&\n videoPrerollVPaidControls &&\n videoPrerollAutoplayAdsMuted\n ) {\n setupVideoPlayer(\n videoUrl,\n posterImageUrl,\n adUrlWithTargeting,\n // playlist,\n complianceRequirements,\n videoAdRules,\n videoPrerollAdClient,\n videoPrerollOffset,\n videoPrerollSkipOffset,\n videoPrerollVPaidControls,\n videoPrerollAutoplayAdsMuted\n );\n }\n }, [\n adTargetingBaseUrl,\n adTargetingParameters,\n adUrl,\n authId,\n city,\n complianceRequirements,\n country,\n dispatch,\n latitude,\n longitude,\n posterImageUrl,\n providerId,\n region,\n secret,\n setupVideoPlayer,\n state,\n stationId,\n stdParameters,\n units,\n videoAdRules,\n videoPrerollAdClient,\n videoPrerollAutoplayAdsMuted,\n videoPrerollOffset,\n videoPrerollSkipOffset,\n videoPrerollVPaidControls,\n videoUrl,\n zip\n ]);\n\n /* was: componentDidUpdate */\n useEffect(() => {\n if (!hasCookie(videoSettingsCookie)) {\n setCookie(videoSettingsCookie, defaultCookieValue, {\n expires: videoSettingsCookieExpirationDate\n });\n }\n\n if (!componentReady.current && complianceRequirements) {\n trySetupVideoPlayer();\n } else if (playlist?.length !== previousPlaylist.current?.length) {\n previousPlaylist.current = playlist;\n trySetupVideoPlayer();\n } else if (\n componentReady.current &&\n (!videoPlayer ||\n videoUrl !== previousVideoUrl.current ||\n posterImageUrl !== previousPosterImageUrl.current ||\n adPageId !== previousAdPageId.current ||\n platformCode !== previousPlatformCode.current)\n ) {\n previousVideoUrl.current = videoUrl;\n previousPosterImageUrl.current = posterImageUrl;\n previousAdPageId.current = adPageId;\n previousPlatformCode.current = platformCode;\n\n trySetupVideoPlayer();\n }\n }, [\n adPageId,\n complianceRequirements,\n componentReady,\n defaultCookieValue,\n muteByDefault,\n platformCode,\n playlist,\n posterImageUrl,\n trySetupVideoPlayer,\n videoUrl\n ]);\n\n const onSeek = (newCurrentTime: number) => {\n lastVideoTimeLogged.current = newCurrentTime;\n setSeekJustOccurred(true);\n };\n\n const getCurrentVideo = async (): Promise => {\n if (videoPlayer.current) {\n return videoPlayer.current.getPlaylistItem(videoPlayer.current.getPlaylistIndex());\n }\n\n return undefined;\n };\n\n return (\n
\n
\n
\n );\n};\n\nconst styles = {\n container: {\n display: 'flex'\n }\n};\n","/* eslint-disable react/display-name */\nimport { useRouter } from 'next/router';\nimport styled from 'styled-components';\nimport { PLATFORM_QUERY_PARAM_KEY } from '../../../../../hooks/appState/constants';\nimport { selectAppConfig } from '../../../../../store/redux/common/dataLayer/appConfig/slices/appConfigSlice';\nimport type { PlatformKeys } from '../../../../../store/redux/common/dataLayer/appConfig/slices/types';\nimport { useAppSelector } from '../../../../../store/redux/storeHooks/hooks';\nimport { VideoPlayer } from '../../../video/videoPlayer';\n\nexport interface StoryContentViewVideoProps {\n videoUrl?: string;\n videoPoster?: string | undefined;\n videoHeight: string;\n}\n\n/*\n1. stories prop needs to be passed in by NationalOutlookScreenVideoView and MainVideoView when implemented.\n (See Press Detail page for how to do this with an SSR index parent page.)\n2. placementId will be uncommented in this ticket: https://xadinc.atlassian.net/browse/WBUG-9772\n*/\nexport const StoryContentViewVideo = ({\n // stories,\n videoUrl,\n videoPoster,\n videoHeight\n}: StoryContentViewVideoProps) => {\n const { config, pageRouteInfo } = useAppSelector(selectAppConfig);\n const { storiesVideoPrerollPlacementId, videoPreRollUrls } = config || {};\n const { pageId } = pageRouteInfo || {};\n const router = useRouter();\n const platformCode = router.query[PLATFORM_QUERY_PARAM_KEY] as PlatformKeys;\n const prerollAdUrl = videoPreRollUrls?.stories;\n\n return (\n \n \n \n );\n};\n\nconst Container = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n min-height: 660px;\n ${({ theme }) => theme.mediaQueries.large} {\n height: 100%;\n }\n ${({ theme }) => theme.mediaQueries.tablet} {\n min-height: 438.75px;\n }\n ${({ theme }) => theme.mediaQueries.mobile} {\n min-height: 202.5px;\n }\n`;\n","/* eslint-disable react/display-name */\nimport { StoryContentViewImage } from '../storyContentViewImage/storyContentViewImage';\nimport { StoryContentViewVideo } from '../storyContentViewVideo/storyContentViewVideo';\n\nexport interface StoryImageVideoDisplayProps {\n storyImageUrl: string | undefined;\n videoLink?: string | null;\n storyImageCaption?: string | null;\n isStoryWithMapsOrIndexTag: boolean;\n}\n\nexport const StoryImageVideoDisplay = ({\n storyImageUrl,\n videoLink,\n storyImageCaption,\n isStoryWithMapsOrIndexTag\n}: StoryImageVideoDisplayProps) => {\n if (videoLink) {\n return ;\n } else if (storyImageUrl && !videoLink) {\n return (\n \n );\n } else {\n return null;\n }\n};\n"],"names":["NewsStoriesErrorIcon","width","height","symbolFillColor","theme","colors","black","strokeColor","param","jsx_runtime","jsxs","svg","viewBox","version","fill","color","xmlns","jsx","path","d","id","StoryImageLoadError","isNavThumbnail","ImageLoadErrorContainer","Fragment","translate","styled","div","withConfig","mediaQueries","large","concat","tablet","StoryContentViewImage","storyImageUrl","storyImageCaption","isStoryWithMapsOrIndexTag","imgLoadError","setImageLoadError","useState","ThumbnailImgContainer","Image","src","alt","onError","priority","style","objectFit","sizes","mobile","useLogging","LogEventDependency","LogEvent","dispatch","useAppDispatch","config","stdParameters","useAppSelector","selectAppConfig","userProfile","selectUserProfile","authId","secret","loggingBaseUrl","DeviceId","appInstanceId","IsBot","isBot","cachedEventLogsRef","useRef","logEventsInCache","useCallback","current","length","cachedEventLogs","promises","map","baseUrl","eventType","log","type","params","deviceid","data","payload","unwrap","Promise","all","logEvent","push","event","useEffect","webNavigator","navigator","undefined","connection","mozConnection","webkitConnection","getConnectionType","effectiveType","videoSettingsCookie","adSDK","adType","videoSettingsCookieExpirationDate","DateTime","utc","plus","days","toJSDate","VideoPlayer","adPageId","platformCode","adUrl","placementId","videoUrl","posterImageUrl","playlistNextCallback","onVideoStarted","onPause","onStop","onVideoCompleted","onVideoViewed","playlist","muteByDefault","ActiveLocation","Units","unitKey","Locality","locality","Station","station","CityName","city","CountryShortName","country","Dma","region","Latitude","latitude","Longitude","longitude","PostalCode","zip","TerritoryAbbr","state","ProviderId","providerId","StationId","stationId","units","unitSystemsEnum","pageRouteInfo","adTargetingBaseUrl","videoAdRules","videoPrerollAdClient","videoPrerollAutoplayAdsMuted","videoPrerollSkipOffset","videoPrerollOffset","videoPrerollVPaidControls","analytics","busDomain","pageName","tp","adTargetingParameters","targetingParametersState","targetingParameters","complianceRequirements","selectLegal","seekJustOccurred","setSeekJustOccurred","videoPlayer","previousPlaylist","previousVideoUrl","previousPosterImageUrl","previousAdPageId","previousPlatformCode","divRef","amountWatched","lastVideoTimeLogged","currentVideo","currentVideoMetadata","componentReady","videoViewLogged","connectionType","useNetworkState","setConnectionType","newConnectionType","defaultCookieValue","muted","volume","hasCookie","setCookie","expires","trySetupVideoPlayer","remove","completeVideoAndClearData","getCurrentVideoMetadata","tempCurrentVideo","getCurrentVideo","mediaId","mediaid","title","currentQuality","sources","getCurrentQuality","duration","getDuration","resolution","label","currentPosition","getPosition","cumulativeSecondsWatched","onTime","currentVideoTime","getCurrentCookie","videoPlayerCookieJson","currentCookie","getCookie","JSON","parse","decodeURIComponent","decodedVideoPlayerCookieString","changeMute","newCookie","newMuted","changeVolume","newVolume","setupVideoPlayer","advertisingConfig","disableAds","adId","getQueryParameterByName","name","url","window","location","href","newUrl","URL","searchParams","get","adscheduleid","padStart","substring","client","rules","frequency","frequencyAdRule","find","x","startOn","schedule","pre","offset","skipoffset","tag","vpaidcontrols","autoplayadsmuted","setupConfig","file","image","autostart","mute","advertising","jwplayer","setup","on","index","item","tempVideo","getCurrentTime","onSeek","networkType","errorCode","customEvent","adErrorCode","errorType","adUrlWithTargeting","getAdTargetingParameters","verbose","adServer","serializeObjectToQueryStringParameters","uri","object","baseURL","Object","entries","forEach","k","v","append","toString","adKeywords","newCurrentTime","getPlaylistItem","getPlaylistIndex","styles","container","ref","display","StoryContentViewVideo","videoPoster","videoHeight","storiesVideoPrerollPlacementId","videoPreRollUrls","pageId","router","useRouter","query","PLATFORM_QUERY_PARAM_KEY","prerollAdUrl","stories","Container","StoryImageVideoDisplay","videoLink"],"sourceRoot":""}