{"version":3,"file":"article-video-loop-bundle-v2-baaf5933a60b38c90370.esm.js","mappings":"0BAAAA,EAAOC,QAAU,EAAjB,I,UCQAD,EAAOC,QAAQC,cALf,SAAuBC,EAAMC,GAE3B,OAAOD,GADkBC,EAAU,KAAKA,EAAQC,MAAM,KAAK,KAAO,GAEpE,C,gBCMA,IAAIC,EAAc,EAAQ,KACtBC,EAAM,EAAQ,KACdC,EAAiB,EAAQ,KAEzBC,EAAI,EACNC,EAAY,EACZC,EAAO,GACPC,EAAiBC,KAAKC,IAAIH,EAAMD,GAElC,SAASK,IACP,OAAOR,GAAKC,IACVI,GAAkB,GACjBI,SAASL,GAAOD,EACrB,CAEA,SAASO,IAGP,OAFAR,EAAIA,EAAIG,EAAiBH,EAAI,IAC7BA,EACW,CACb,CAEA,SAASS,IAqBP,MAlBa,KAKE,IAAIC,MAAOC,UAAWJ,SAASL,GAGlCJ,EAAIU,IAAcD,SAASL,GAAOD,GAKpCJ,KAGCS,IAAgBA,IAG7B,CAEAG,EAAKG,KAAO,WACV,IAAIC,GAAO,IAAIH,MAAOC,UAAUJ,SAAS,IACvCO,EAAUN,IAAcD,SAAS,IAAIQ,OAAO,GAC5CC,EAAQnB,IAAckB,MAAM,EAAG,GAC7BlB,IAAckB,OAAO,GACvBE,EAASX,IAAcS,OAAO,GAEhC,OAAOF,EAAKE,OAAO,GACjBD,EAAUE,EAAQC,CACtB,EAEAR,EAAKS,OAAS,SAAiBC,GAC7B,MAA6B,iBAAlBA,KACPA,EAAcC,WAAW,IAE/B,EAEAX,EAAKY,OAAS,SAAiBF,GAC7B,GAA6B,iBAAlBA,EAA4B,OAAO,EAC9C,IAAIG,EAAeH,EAAcI,OACjC,OAAID,GAAgB,GAAKA,GAAgB,EAE3C,EAEAb,EAAKZ,YAAcA,EAEnBN,EAAOC,QAAUiB,C,gBCnFjB,IAAIX,EAAM,EAAQ,KAEd0B,EAAwB,iBAAXC,OAAsBA,OAASC,KAC5CC,EAAcC,OAAOC,KAAKL,GAAKD,OAE/BO,EAAWhC,IADOiC,UAAUC,UAAYD,UAAUC,UAAUT,OAAS,GAEvEQ,UAAUE,UAAUV,QAAQhB,SAAS,IACrCoB,EAAYpB,SAAS,IAAK,GAE5BhB,EAAOC,QAAU,WACf,OAAOsC,CACT,C,UCVA,IAAI/B,EAEAmC,EAA2B,oBAAXT,SACjBA,OAAOS,QAAUT,OAAOU,WACT,oBAATT,MACPA,KAAKQ,OAEP,GAAIA,EAAQ,CACR,IAAIE,EAAMhC,KAAKC,IAAI,EAAG,IAAM,EAC5BN,EAAiB,WACb,OAAOK,KAAKiC,IAAIH,EAAOI,gBAAgB,IAAIC,YAAY,IAAI,GAAKH,EACpE,CACJ,MACIrC,EAAiBK,KAAKa,OAG1B1B,EAAOC,QAAUO,C,UCjBjBR,EAAOC,QAAU,SAAcgD,EAAKC,GAClC,IAAIC,EAAI,YAAcF,EACtB,OAAOE,EAAEC,OAAOD,EAAEnB,OAASkB,EAC7B,C,GCFIG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAavD,QAGrB,IAAID,EAASqD,EAAyBE,GAAY,CAGjDtD,QAAS,CAAC,GAOX,OAHAyD,EAAoBH,GAAUvD,EAAQA,EAAOC,QAASqD,GAG/CtD,EAAOC,OACf,C,+BCtBe,SAAS0D,EAAQC,GAG9B,OAAOD,EAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBC,QAAUD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,gBAAkBJ,CAC1H,EAAGD,EAAQC,EACb,CCNe,SAASK,EAAeC,GACrC,IAAIC,ECFS,SAAsBC,EAAOC,GAC1C,GAAuB,WAAnBV,EAAQS,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIE,EAAOF,EAAMP,OAAOU,aACxB,QAAad,IAATa,EAAoB,CACtB,IAAIE,EAAMF,EAAKG,KAAKL,EAAOC,GAAQ,WACnC,GAAqB,WAAjBV,EAAQa,GAAmB,OAAOA,EACtC,MAAM,IAAIE,UAAU,+CACtB,CACA,OAAiB,WAATL,EAAoBM,OAASC,QAAQR,EAC/C,CDPY,CAAYF,EAAK,UAC3B,MAAwB,WAAjBP,EAAQQ,GAAoBA,EAAMQ,OAAOR,EAClD,CEJe,SAAS,EAAgBP,EAAKO,EAAKU,GAYhD,OAXAV,EAAM,EAAcA,MACTP,EACTvB,OAAOyC,eAAelB,EAAKO,EAAK,CAC9BU,MAAOA,EACPE,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZrB,EAAIO,GAAOU,EAENjB,CACT,CCaA,SAASsB,EAAQC,EAAQC,GAAkB,IAAI9C,EAAOD,OAAOC,KAAK6C,GAAS,GAAI9C,OAAOgD,sBAAuB,CAAE,IAAIC,EAAUjD,OAAOgD,sBAAsBF,GAASC,IAAmBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOnD,OAAOoD,yBAAyBN,EAAQK,GAAKT,UAAY,KAAKzC,EAAKoD,KAAKC,MAAMrD,EAAMgD,EAAU,CAAE,OAAOhD,CAAM,CAEpV,SAASsD,EAAcC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU/D,OAAQ8D,IAAK,CAAE,IAAIE,EAAS,MAAQD,UAAUD,GAAKC,UAAUD,GAAK,CAAC,EAAGA,EAAI,EAAIZ,EAAQ7C,OAAO2D,IAAS,GAAIC,SAAQ,SAAU9B,GAAO,EAAgB0B,EAAQ1B,EAAK6B,EAAO7B,GAAO,IAAK9B,OAAO6D,0BAA4B7D,OAAO8D,iBAAiBN,EAAQxD,OAAO6D,0BAA0BF,IAAWd,EAAQ7C,OAAO2D,IAASC,SAAQ,SAAU9B,GAAO9B,OAAOyC,eAAee,EAAQ1B,EAAK9B,OAAOoD,yBAAyBO,EAAQ7B,GAAO,GAAI,CAAE,OAAO0B,CAAQ,CACzf,IAAIO,EAAgB,CAClBC,WAAY,kBACZC,UAAW,CAAC,EAAG,GAAK,GACpBC,KAlBO,MAoBT,MAAMC,EACJzC,YAAY0C,EAAUC,EAAUC,GAC9B,EAAgBC,KAAM,qBAAiB,GAEvC,EAAgBA,KAAM,gBAAY,GAElCA,KAAKH,SAAWA,EAASjF,MAAM,GAC/BoF,KAAKC,cAAgBJ,EAASK,KAAIjB,IAAU,CAC1CA,SACAkB,gBAAgB,EAChBC,MAAO,SAETJ,KAAKK,qBAAuB,IAAIC,sBAAqBC,IACnD,IAAIN,EAAgBD,KAAKC,cAAcrF,MAAM,GAC7C2F,EAAQlB,SAAQmB,IACd,IAAIC,EAAMZ,EAASa,QAAQF,EAAMvB,QACjCgB,EAAcU,OAAOF,EAAK,EAAG,CAC3BxB,OAAQuB,EAAMvB,OACdkB,eAAgBK,EAAML,eACtBC,MAAOI,EAAMI,mBACb,IAEJZ,KAAKC,cAAgBA,EACrBH,EAASE,KAAKC,cAAc,GAC3BjB,EAAcA,EAAc,CAAC,EAAGQ,GAAgBO,IACnDF,EAASR,SAAQwB,GAAOb,KAAKK,qBAAqBS,QAAQD,IAC5D,CAEAE,aAEEf,KAAKH,SAASR,SAAQwB,GAAOb,KAAKK,qBAAqBW,UAAUH,KAEjEb,KAAKK,qBAAqBU,YAC5B,EAkCF,IACME,EACAC,EADAD,EAA0B,oBAAX3F,OAAyB,CAAC,EAAIA,OAAO6F,QAAQ/D,UAC5D8D,EAAQD,EAAMG,SAAWH,EAAMI,mBAAqBJ,EAAMK,sBAE1DL,EAAMM,QAoBZ,SAASC,EAAcC,EAASlI,GAC9B,IAEImI,EAFAC,EAASxC,UAAU/D,OAAS,QAAsByB,IAAjBsC,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9EyC,EAAS,+CAA+CC,OAAOtI,GAEnE,GAAIkI,EAAQG,GAAS,OAAO,EACvBH,EAAQG,IAAU,EAEW,mBAAvBtG,OAAOwG,YAChBJ,EAAQ,IAAIpG,OAAOwG,YAAYvI,EAAM,CACnCwI,SAAS,EACTC,YAAY,EACZL,YAGFD,EAAQO,SAASC,YAAY,gBACvBC,gBAAgB5I,GAAM,GAAM,EAAMoI,GAK1C,IAAIS,EAASX,EAAQD,cAAcE,GAGnC,OAFAD,EAAQG,GAAU,KAEXQ,CACT,CCnJA,IAAIC,EAAa,aACbC,EAAyB,yBACzBC,EAAiC,4BACjCC,EAAY,YACZC,EAAmB,mBACnBC,EAKgB,EAIhBC,EAAYC,KAAWA,EAAMC,aAEjC,MAAMC,UAA0BC,YAC9B5F,cACE6F,SAAS7D,WAET,EAAgBa,KAAM,kBAAkB,GAExC,EAAgBA,KAAM,4BAAwB,GAE9C,EAAgBA,KAAM,qBAAqBiD,IAC1B,SAAXA,EAAEC,MACJ1B,EAAcxB,KAAM,+BAGlBiD,EAAEhE,SAAWe,KAAKmD,uBACpBnD,KAAKoD,SAAWpD,KAAKmD,qBAAqBE,OAC5C,IAGF,EAAgBrD,KAAM,oBAAoB,KACnCA,KAAKmD,uBAINnD,KAAKsD,cACPtD,KAAKuD,aAELvD,KAAKwD,cACP,IAGF,EAAgBxD,KAAM,iBAAiB,KACrCA,KAAKyD,4BAA4B,GAErC,CAEWC,gCACT,MAAO,CAACrB,EAAYE,EAAgCD,EACtD,CAEAqB,oBACE3D,KAAK4D,sBAEL5D,KAAK6D,qBAEL7D,KAAKyD,4BACP,CAEAK,uBACE9D,KAAK+D,gBAAiB,EAEtB/D,KAAKgE,uBACP,CAEAC,yBAAyB1K,EAAM2K,EAAWC,GAGpC5K,IAAS8I,GAAc9I,IAAS+I,GAFjB4B,IAAcC,IAI7BnE,KAAKyD,6BAELzD,KAAKoE,mBAED7K,IAAS+I,GAAuC,gBAAb6B,GACrCnE,KAAKqE,WAIb,CAEAR,qBACEvI,OAAOgJ,iBAAiB,SAAUtE,KAAKuE,eACvCvE,KAAKwE,cAAcnF,SAAQoF,IACzBA,EAAGH,iBAAiB,QAAStE,KAAK0E,mBAClCD,EAAGH,iBAAiB,OAAQtE,KAAK0E,mBACjCD,EAAGH,iBAAiB,iBAAkBtE,KAAKoE,iBAAiB,GAEhE,CAEAJ,wBACE1I,OAAOqJ,oBAAoB,SAAU3E,KAAKuE,eAC1CvE,KAAKwE,cAAcnF,SAAQoF,IACzBA,EAAGE,oBAAoB,QAAS3E,KAAK0E,mBACrCD,EAAGE,oBAAoB,OAAQ3E,KAAK0E,mBACpCD,EAAGE,oBAAoB,iBAAkB3E,KAAKoE,iBAAiB,GAEnE,CAEAX,6BACEmB,uBAAsB,KACpB,IAAIC,EAAmB7E,KAAKwE,cAAcM,KAAKnC,GAE3CkC,IAAqB7E,KAAKmD,uBAE5BnD,KAAKwD,cAELxD,KAAKmD,qBAAuB0B,EAExB7E,KAAK+E,kBACP/E,KAAKqE,WAGPrE,KAAKoE,mBACP,GAEJ,CAEAR,sBACO5D,KAAKgF,yBACRhF,KAAKwE,cAAcnF,SAAQoF,IACzBA,EAAGQ,aAAa,cAAe,IAC/BR,EAAGQ,aAAa,OAAQ,IACxBR,EAAGQ,aAAa,wBAAyB,IACzCR,EAAGQ,aAAa,mBAAoB,OAAO,GAGjD,CAEA3B,cACE,IAAI4B,EAMJ,OAAgE,QAAvDA,EAAwBlF,KAAKmD,4BAA4D,IAA1B+B,OAAmC,EAASA,EAAsBC,aAAezC,GAA+C,WAAf1C,KAAKoF,OAAgD,gBAA1BpF,KAAKqF,gBAC3N,CAEAN,iBACE,MAAiC,gBAA1B/E,KAAKqF,gBACd,CAEAhB,WACE,IAAIiB,EAGEC,GADwD,QAAxDD,EAAyBtF,KAAKmD,4BAA6D,IAA3BmC,OAAoC,EAASA,EAAuBH,YAAczC,IAG7F,QAAxD6C,EAAyBvF,KAAKmD,4BAA6D,IAA3BoC,GAA6CA,EAAuBC,OAEzI,CAEAjC,aACE/B,EAAcxB,KAAM,+BACpB,IAAIyF,EDgFgB,oBAAXnK,UACAA,OAAOoK,YAAcpK,OAAOoK,WAAW,4BAA4BtE,QChFxEuE,EAAe3F,KAAKmD,sBAEpBwC,EAAatC,QAAWoC,GAAkBzF,KAAK4F,kBAC/BD,EAAaE,QAAUC,QAAQC,WACrCC,OAAM/C,IAChBgD,QAAQC,MAAMjD,GACdjD,KAAK4F,iBAAkB,CAAI,GAGjC,CAEApC,cACE,IAAImC,EAAe3F,KAAKmD,qBAEpBwC,IAAiBA,EAAatC,QAChCsC,EAAaQ,OAEjB,CAEI3B,oBACF,OD5Da4B,EC4DEpG,KAAKqG,iBAAiB,SD3DhC,GAAGzL,MAAMiD,KAAKuI,GADvB,IAAiBA,CC6Df,CAEIpB,8BACF,OAAOhF,KAAKsG,aAAa/D,EAC3B,CAEI6C,YACF,OAAOpF,KAAKuG,aAAalE,EAC3B,CAEI+C,UAAMoB,GACRxG,KAAKiF,aAAa5C,EAAYmE,EAChC,CAEIpD,eACF,OAAOpD,KAAKuG,aAAa/D,EAC3B,CAEIY,aAASoD,GACPA,EACFxG,KAAKiF,aAAazC,EAAW,IAE7BxC,KAAKyG,gBAAgBjE,EAEzB,CAEIoD,sBACF,OAAO5F,KAAKsG,aAAa7D,KAAqB,CAChD,CAEImD,oBAAgBY,GD9ItB,IAAyB/B,EAAIlL,EAAMmN,EAANnN,EC+IHkJ,ED/ISiE,EC+ISF,GD/InB/B,EC+ILzE,cDxIO,IAAd0G,EACKA,EAEFjC,EAAG6B,aAAa/M,IAI5BkL,EAAGQ,aAAa1L,EAAM,IAEtBkL,EAAGgC,gBAAgBlN,GCgIrB,CAEI8L,uBACF,OAAOrF,KAAKuG,aAAajE,EAC3B,CAEI+C,qBAAiBmB,GACnBxG,KAAKiF,aAAa3C,EAAwBkE,EAC5C,E,OChOc/K,OAAOyC,eACNzC,OAAO8D,iBACA9D,OAAO6D,0BACL7D,OAAOgD,sBACdhD,OAAO2B,UAAUuJ,eACjBlL,OAAO2B,UAAUwJ,qBAiMpC,ICjMIC,EAAqB,uCAIrBC,EAA6B,IAG7BC,EAAY,uBAAyBD,EAgEzC,SAASE,EAAUC,QAEapK,IAA1BqK,WAAWH,KAEbG,WAAWH,GAAa,SAAUI,GAChCD,WAAWH,GAAWK,EAAEtI,KAAKqI,EAC/B,EACAD,WAAWH,GAAWK,EAAI,IAe9B,SAAkBC,GAEhB,GADgBpF,SAASqF,cAAc,eAAkBD,EAAM,MAE7D,OAEF,IAAIE,EAAStF,SAASuF,cAAc,UACpCD,EAAOE,OAAQ,EACfF,EAAOF,IAAMA,EACbpF,SAASyF,KAAKC,YAAYJ,EAC5B,CApBIK,CAASf,EAAqB,UAAYC,EAA6B,4BAIzEI,WAAWH,GAAWE,EACxB,CC5FgBxL,OAAOyC,eACNzC,OAAO8D,iBACA9D,OAAO6D,0BACL7D,OAAOgD,sBACdhD,OAAO2B,UAAUuJ,eACjBlL,OAAO2B,UAAUwJ,qBALpC,IA2CI,EAAoC,CAAEiB,IACxCA,EAA0B,MAAI,QAC9BA,EAAyB,KAAI,OACtBA,GAH+B,CAIrC,GAAqB,CAAC,GACrB,EAA8B,CAAEC,IAClCA,EAA6B,eAAI,0DACjCA,EAAyB,WAAI,2CAC7BA,EAAoC,sBAAI,kEACxCA,EAA8B,gBAAI,gDAClCA,EAAqC,uBAAI,oEACzCA,EAA4B,cAAI,8CAChCA,EAA+B,iBAAI,6DACnCA,EAAyB,WAAI,iDAC7BA,EAA0B,YAAI,4CAC9BA,EAAwB,UAAI,6CAC5BA,EAA6B,eAAI,gDACjCA,EAA4B,cAAI,iDACzBA,GAbyB,CAc/B,GAAe,CAAC,GACf,EAA+B,CAAEC,IACnCA,EAAwB,SAAI,oDAC5BA,EAAuB,QAAI,uCAC3BA,EAA0B,WAAI,0CAC9BA,EAAoB,KAAI,oCACxBA,EAA0B,WAAI,2CAC9BA,EAAuB,QAAI,wCAC3BA,EAAoB,KAAI,oCACxBA,EAA+B,gBAAI,iDACnCA,EAAmC,oBAAI,+DACvCA,EAA4B,aAAI,6CAChCA,EAAuB,QAAI,uCAC3BA,EAA2B,YAAI,iEACxBA,GAb0B,CAchC,GAAgB,CAAC,GCzEpB,MAAMC,EAAS,YAWf,SAASC,EAAcC,GAAW,YAAEC,EAAW,eAAEC,IAC/C,IACIC,EADAC,GAAe,EAEnB,MAAMC,EClBR,SAAiBJ,EAAc,eAC7B,MAAoB,eAAhBA,EACK,sBAEF,sCACT,CDaeK,CAAQL,GACfM,EAAa,GACbC,EAAW,CAAC,UAAW,QACvBC,EAAgB1B,IAChBqB,EACFrB,EAASoB,GAETI,EAAW3J,KAAKmI,EAClB,EA4CF,OAxBAD,GAAW4B,IACTP,EAASO,EACT,MAAM,WAAEC,GAAeD,EAEvB,GADAC,EAAWC,WAAWZ,EAAWF,EAAQO,GACrCH,EAAgB,CAClB,MAAMW,EAAmB,GAAGb,KAAaE,EAAeY,KACxDN,EAAS5J,KAAKiK,GACdF,EAAWI,QAAQC,IAAIH,EAAkB,UAAsB,CAC7D3J,OAAQgJ,EAAehJ,OACvB4J,GAAIZ,EAAeY,IAEvB,CApDJ,IAA0BG,EAASC,GAATD,EAqDLN,EAAWQ,SAASC,UAAU,gBArDhBF,EAqDiC,IApD3DtD,QAAQyD,KAAK,CAClBJ,EAAQK,MAAK,KAAM,IACnB,IAAI1D,SAASC,IACX0D,YAAW,KACT1D,GAAQ,EAAM,GACbqD,EAAK,OA+C2DI,MAAME,IAKzE,IAJApB,GAAe,GACI,IAAfoB,GACFzD,QAAQ0D,KAAK,+BAERlB,EAAWrN,QAAQ,CACbqN,EAAWmB,KACtBC,CAAGxB,EACL,CACM,IACLrC,MAAMC,QAAQC,MAAM,IAElB,CACL4D,yBAlCgCpI,GAAUiH,GAC1C,EAAGE,aAAYkB,cAAeA,EAASD,yBACrC,CACEpI,QACAuH,QAASJ,EAAWI,QAAQe,QAAQtB,IAEtC,CAACR,MA6BH+B,qBA5C4BvI,GAAUiH,GAAa,EAAGE,aAAYkB,eAClEA,EAASG,iBACP,IACKxI,EACHuH,QAASJ,EAAWI,QAAQe,QAAQtB,IAEtC,CAACR,GACF,IAuCL,C,gME/DA,MAAMiC,GAAM7Q,EAAAA,EAAAA,eAAc8Q,qBAAcC,SAQxC,MAAM/H,EAAyB,yBAAwB,IAAAgI,EAAAC,EAAA,iBAAAC,EAAAD,EAAA,gBAAAE,EAAAF,EAAA,aAAAG,EAAAH,EAAA,iBAAAI,EAAAJ,EAAA,uBAAAK,EAAAL,EAAA,sBAAAM,EAAAN,EAAA,oBAAAO,EAAAP,EAAA,oBAEvD,MAAMQ,UAAmBhI,YAAY5F,eAAA6N,GAAA,SAAAA,GAAAvP,OAAAyC,eAAA,KAAA0M,EAAA,CAAA3M,MAAAgN,IAAAxP,OAAAyC,eAAA,KAAAyM,EAAA,CAAA1M,MAAAiN,IAAAzP,OAAAyC,eAAA,KAAAwM,EAAA,CAAAzM,MAAAkN,IAAA,KACnC5R,KAAO4Q,EAAG1O,OAAAyC,eAAA,KAAAoM,EAAA,CAAAjM,UAAA,EAAAJ,WAAA,IAAAxC,OAAAyC,eAAA,KAAAsM,EAAA,CAAAnM,UAAA,EAAAJ,WAAA,IAAAxC,OAAAyC,eAAA,KAAAuM,EAAA,CAAApM,UAAA,EAAAJ,MAGG,CACXmN,eAAe,EACfC,eAAe,KAChB5P,OAAAyC,eAAA,KAAA2M,EAAA,CAAAxM,UAAA,EAAAJ,MAmGmBA,KACbqN,EAAAtL,KAAIyK,GAAAA,GAAYW,gBACnBE,EAAAtL,KAAIyK,GAAAA,GAAYW,eAAgB,EAClC,IACD3P,OAAAyC,eAAA,KAAA4M,EAAA,CAAAzM,UAAA,EAAAJ,MAEmBA,KACbqN,EAAAtL,KAAIyK,GAAAA,GAAYY,gBACnBC,EAAAtL,KAAIyK,GAAAA,GAAYY,eAAgB,EAClC,GACD,CA3GD1H,oBACE3D,KAAKuL,SACLvL,KAAKsE,iBAAiB,8BAA6BgH,EAAEtL,KAAI6K,GAAAA,IACzD7K,KAAKsE,iBAAiB,8BAA6BgH,EAAEtL,KAAI8K,GAAAA,IAEzDQ,EAAAtL,KAAI0K,GAAAA,KACJY,EAAAtL,KAAI2K,GAAAA,IACN,CAEA7G,uBAC4B,MAA1Bd,MAAMc,sBAANd,MAAMc,uBACN9D,KAAK2E,oBAAoB,8BAA6B2G,EAAEtL,KAAI6K,GAAAA,IAC5D7K,KAAK2E,oBAAoB,8BAA6B2G,EAAEtL,KAAI8K,GAAAA,IAC5DQ,EAAAtL,KAAI4K,GAAAA,IACN,CAyDAW,SACE,IAzFgBC,EA0FH,kCA1FgBrO,EA0FmBsO,OAzFH,IAApCC,eAAeC,IAAIH,IAC5BE,eAAeE,OAAOJ,EAAarO,GA0FjC,MAAM0O,EAAsB7L,KAAKsH,cAAc,qBAGvB,IAAI1H,EAC1B,CAACiM,IACA5L,IACC,MAAMwB,EAAUxB,EAAc,GACxB6L,EAA0BD,EAAoBtF,aAAajE,GAC7Db,EAAQtB,gBAA8C,oBAA5B2L,GAC5BD,EAAoB5G,aAAa3C,EAAwB,eAEtDb,EAAQtB,gBAA8C,gBAA5B2L,GAC7BD,EAAoB5G,aAAa3C,EAAwB,kBAC3D,GAGN,CAAE,MAAOyJ,GAEP9F,QAAQC,MAAO,yBAAwBiE,IAAO4B,EAChD,CA/GJ,IAAoBP,EAAarO,CAgH/B,EAaD,SAAAgO,IArFGnL,KAAKgM,QAAU/D,EAAc,wBAAyB,CACpDE,YAAa8D,aACb7D,eAAgB,CACdhJ,OAAQ,KACR4J,GAAIhJ,KAAKkM,QAAQC,SAGvB,CAAC,SAAAjB,IAGCI,EAAAtL,KAAIsK,GAAAA,GAAkB,IAAIhK,sBAAsBC,IAAY,IAAA6L,EAC3C,OAAXA,EAAC7L,EAAQ,KAAR6L,EAAYjM,iBAGjBmL,EAAAtL,KAAIsK,GAAAA,GAAgBvJ,aACpBuK,EAAAtL,KAAIwK,GAAAA,GAAe1J,QAAQd,MAC3BA,KAAKgM,QAAQlC,yBAAyB,CACpCuC,OAAQC,EAAAA,cACRC,KAAM,CACJC,KAAMC,EAAAA,SAER,GACD,CAAC,GAEJnB,EAAAtL,KAAIwK,GAAAA,GAAiB,IAAIlK,sBACtBC,IAAY,IAAAmM,EACI,OAAXA,EAACnM,EAAQ,KAARmM,EAAYvM,iBAGjBmL,EAAAtL,KAAIwK,GAAAA,GAAezJ,aACnBf,KAAKgM,QAAQlC,yBAAyB,CACpCuC,OAAQC,EAAAA,cACRC,KAAM,CACJC,KAAMC,EAAAA,QAER,GAEJ,CAAE/M,UAAW,CAAC,GAAID,WAAY,0BAGhC6L,EAAAtL,KAAIsK,GAAAA,GAAgBxJ,QAAQd,KAC9B,CAAC,SAAAiL,IAEqB,IAAA0B,EAAAC,EAChB,OAAJD,EAAArB,EAAAtL,KAAIsK,GAAAA,KAAJqC,EAAqB5L,aACjB,OAAJ6L,EAAAtB,EAAAtL,KAAIwK,GAAAA,KAAJoC,EAAoB7L,YACtB,CAyCG2K,eAAeC,IAAIxB,IACtBuB,eAAeE,OAAOzB,EAAKY,E","sources":["webpack://levende-stillbilde/./node_modules/@nrk/dh-server-libs/get-element-tag.js","webpack://levende-stillbilde/./node_modules/@nrk/dh-server-libs/src/get-element-tag.js","webpack://levende-stillbilde/./node_modules/cuid/index.js","webpack://levende-stillbilde/./node_modules/cuid/lib/fingerprint.browser.js","webpack://levende-stillbilde/./node_modules/cuid/lib/getRandomValue.browser.js","webpack://levende-stillbilde/./node_modules/cuid/lib/pad.js","webpack://levende-stillbilde/webpack/bootstrap","webpack://levende-stillbilde/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://levende-stillbilde/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://levende-stillbilde/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://levende-stillbilde/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://levende-stillbilde/./node_modules/@nrk/dh-basis-common/dh-basis-common.esm.js","webpack://levende-stillbilde/./node_modules/@nrk/dh-basis-levende-stillbilde/dh-basis-levende-stillbilde.esm.js","webpack://levende-stillbilde/./node_modules/@nrk/nrkno-snowplow/node_modules/@nrk/snowplow-web/index.js","webpack://levende-stillbilde/./node_modules/@nrk/nrkno-snowplow/build-npm/nrkno-snowplow.package.mjs","webpack://levende-stillbilde/./node_modules/@nrk/snowplow-web/index.js","webpack://levende-stillbilde/./node_modules/@nrk/dh-snowplow/dist/index.mjs","webpack://levende-stillbilde/./node_modules/@nrk/dh-snowplow/dist/shared/dh-snowplow.1ee613bf.mjs","webpack://levende-stillbilde/./src/article/client.js"],"sourcesContent":["module.exports = require('./src/get-element-tag')\n","/**\n * Creates a valid custom element name that is versioned (major)\n */\nfunction getElementTag(name, version) {\n const formattedVersion = version ? `-v${version.split('.')[0]}` : ''\n return name + formattedVersion\n}\n\nmodule.exports.getElementTag = getElementTag\n","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\nvar fingerprint = require('./lib/fingerprint.js');\nvar pad = require('./lib/pad.js');\nvar getRandomValue = require('./lib/getRandomValue.js');\n\nvar c = 0,\n blockSize = 4,\n base = 36,\n discreteValues = Math.pow(base, blockSize);\n\nfunction randomBlock () {\n return pad((getRandomValue() *\n discreteValues << 0)\n .toString(base), blockSize);\n}\n\nfunction safeCounter () {\n c = c < discreteValues ? c : 0;\n c++; // this is not subliminal\n return c - 1;\n}\n\nfunction cuid () {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c', // hard-coded allows for sequential access\n\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = (new Date().getTime()).toString(base),\n\n // Prevent same-machine collisions.\n counter = pad(safeCounter().toString(base), blockSize),\n\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n print = fingerprint(),\n\n // Grab some more chars from Math.random()\n random = randomBlock() + randomBlock();\n\n return letter + timestamp + counter + print + random;\n}\n\ncuid.slug = function slug () {\n var date = new Date().getTime().toString(36),\n counter = safeCounter().toString(36).slice(-4),\n print = fingerprint().slice(0, 1) +\n fingerprint().slice(-1),\n random = randomBlock().slice(-2);\n\n return date.slice(-2) +\n counter + print + random;\n};\n\ncuid.isCuid = function isCuid (stringToCheck) {\n if (typeof stringToCheck !== 'string') return false;\n if (stringToCheck.startsWith('c')) return true;\n return false;\n};\n\ncuid.isSlug = function isSlug (stringToCheck) {\n if (typeof stringToCheck !== 'string') return false;\n var stringLength = stringToCheck.length;\n if (stringLength >= 7 && stringLength <= 10) return true;\n return false;\n};\n\ncuid.fingerprint = fingerprint;\n\nmodule.exports = cuid;\n","var pad = require('./pad.js');\n\nvar env = typeof window === 'object' ? window : self;\nvar globalCount = Object.keys(env).length;\nvar mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar clientId = pad((mimeTypesLength +\n navigator.userAgent.length).toString(36) +\n globalCount.toString(36), 4);\n\nmodule.exports = function fingerprint () {\n return clientId;\n};\n","\nvar getRandomValue;\n\nvar crypto = typeof window !== 'undefined' &&\n (window.crypto || window.msCrypto) ||\n typeof self !== 'undefined' &&\n self.crypto;\n\nif (crypto) {\n var lim = Math.pow(2, 32) - 1;\n getRandomValue = function () {\n return Math.abs(crypto.getRandomValues(new Uint32Array(1))[0] / lim);\n };\n} else {\n getRandomValue = Math.random;\n}\n\nmodule.exports = getRandomValue;\n","module.exports = function pad (num, size) {\n var s = '000000000' + num;\n return s.substr(s.length - size);\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _defineProperty from '@babel/runtime/helpers/defineProperty';\n\n/* eslint-disable compat/compat */\nfunction getDefaultRoot() {\n /*\n Use document if supported\n IntersectionObserver will otherwise default to top level document,\n and IntersectionObserver will not work as expected in an iframe.\n https://github.com/w3c/IntersectionObserver/issues/372\n */\n\n /*\n Safari does not throw error on root: document, but does not trigger events as expected\n returning null for now until better feature detection is possible\n */\n return null;\n /*\n try {\n // eslint-disable-next-line no-new\n new IntersectionObserver(() => {}, { root: document })\n return document\n } catch (e) {\n return null\n }\n */\n}\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar defaultConfig = {\n rootMargin: '0px 0px 0px 0px',\n threshold: [0, 0.5, 1],\n root: getDefaultRoot()\n};\nclass ElementIntersectionObserver {\n constructor(elements, onChange, config) {\n _defineProperty(this, \"intersections\", void 0);\n\n _defineProperty(this, \"elements\", void 0);\n\n this.elements = elements.slice(0);\n this.intersections = elements.map(target => ({\n target,\n isIntersecting: false,\n ratio: null\n }));\n this.intersectionObserver = new IntersectionObserver(entries => {\n var intersections = this.intersections.slice(0);\n entries.forEach(entry => {\n var idx = elements.indexOf(entry.target);\n intersections.splice(idx, 1, {\n target: entry.target,\n isIntersecting: entry.isIntersecting,\n ratio: entry.intersectionRatio\n });\n });\n this.intersections = intersections;\n onChange(this.intersections);\n }, _objectSpread(_objectSpread({}, defaultConfig), config));\n elements.forEach(elm => this.intersectionObserver.observe(elm));\n }\n\n disconnect() {\n // Unregister trigger elements\n this.elements.forEach(elm => this.intersectionObserver.unobserve(elm)); // Disconnect intersection observer\n\n this.intersectionObserver.disconnect();\n }\n\n}\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n\n var nextValue;\n\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\n }\n\n if (nextValue) {\n el.setAttribute(name, '');\n } else {\n el.removeAttribute(name);\n }\n}\nfunction setAttribute(el, name, nextValue) {\n if (!el) {\n return;\n }\n\n if (nextValue) {\n el.setAttribute(name, nextValue);\n } else {\n el.removeAttribute(name);\n }\n}\nvar closest = (() => {\n var proto = typeof window === 'undefined' ? {} : window.Element.prototype;\n var match = proto.matches || proto.msMatchesSelector || proto.webkitMatchesSelector;\n\n if (proto.closest) {\n return (el, css) => el.closest(css);\n } else {\n return (el, css) => {\n for (; el; el = el.parentElement) {\n if (match.call(el, css)) return el;\n }\n\n return null;\n };\n }\n})();\nfunction addStyle(nodeName, css) {\n var key = \"style-\".concat(nodeName.toLowerCase());\n var min = css.replace(/\\/\\*[^!][^*]*\\*\\//g, '').replace(/\\s*(^|[:;,{}]|$)\\s*/g, '$1');\n document.getElementById(key) || document.head.insertAdjacentHTML('afterbegin', \"\"));\n}\nfunction toArray(nodeList) {\n return [].slice.call(nodeList);\n}\nfunction dispatchEvent(element, name) {\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var ignore = \"prevent_recursive_dispatch_maximum_callstack\".concat(name);\n var event;\n if (element[ignore]) return true; // We are already processing this event, so skip sending a new one\n else element[ignore] = true; // Add name to dispatching ignore\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(name, true, true, detail);\n } // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\n\n\n var result = element.dispatchEvent(event);\n element[ignore] = null; // Remove name from dispatching ignore\n\n return result; // Follow W3C standard for return value\n}\n\nfunction easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n}\n\nclass VerticalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n\n this.container = container;\n }\n\n cancel() {\n this._cancelled = true;\n }\n\n to(top) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollTop;\n var distance = top - from;\n var startTime = null;\n\n var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n\n if (timeElapsed < duration) {\n this.container.scrollTop = from + distance * easeOutQuint(timeElapsed / duration);\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollTop = top;\n callback && callback();\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n\n}\nclass HorizontalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n\n this.container = container;\n }\n\n cancel() {\n this._cancelled = true;\n }\n\n to(left) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollLeft;\n var distance = left - from;\n var startTime = null;\n\n var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n\n if (timeElapsed < duration) {\n this.container.scrollLeft = from + distance * easeOutQuint(timeElapsed / duration);\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollLeft = left;\n callback && callback();\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n\n}\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\n }\n\n return false;\n}\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction withinRange(current) {\n var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : MAX_SAFE_INTEGER;\n return current >= start && current <= stop;\n}\nfunction withinStops(currentTime, stops, targetStop) {\n var nrOfStops = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n var uniqueStops = stops.filter(unique);\n var targetTime = stops[targetStop];\n var prevTime = uniqueStops[uniqueStops.indexOf(targetTime) - nrOfStops];\n var nextTime = uniqueStops[uniqueStops.indexOf(targetTime) + nrOfStops];\n return withinRange(currentTime, prevTime, nextTime);\n}\n\nfunction unique(value, index, self) {\n return self.indexOf(value) === index;\n}\n\n/*\n * 'loading=\"lazy\"' is defined in terms of IntersectionObserver and the initial root.\n * As a result images with 'loading=\"lazy\"' inside a scroll container will not load\n * until they at least have one pixel visible in the viewport.\n *\n * This will hopefully fixed in a future version of the spec:\n * https://github.com/w3c/IntersectionObserver/issues/431\n *\n * scroll-container-lazy-load observes images and a scroll container.\n * Once images are close to intersecting it will change 'loading=\"lazy\"' to 'loading=\"eager\"'.\n * */\n\nfunction loadImage(image) {\n if (image.loading === 'lazy') {\n image.loading = 'eager';\n }\n}\n\nfunction connectScrollContainerLazyLoad(container, images) {\n var containerIntersecting = false;\n var deferredImages = []; // eslint-disable-next-line compat/compat\n\n var containerObserver = new IntersectionObserver(entries => {\n containerIntersecting = entries === null || entries === void 0 ? void 0 : entries[0].isIntersecting;\n\n if (containerIntersecting) {\n deferredImages.forEach(image => loadImage(image));\n deferredImages = [];\n }\n }, {\n root: getDefaultRoot(),\n threshold: [0.0]\n });\n containerObserver.observe(container); // eslint-disable-next-line compat/compat\n\n var imageObserver = new IntersectionObserver(entries => {\n for (var entry of entries) {\n if (entry.isIntersecting) {\n var image = entry.target;\n imageObserver.unobserve(image);\n\n if (containerIntersecting) {\n loadImage(image);\n } else {\n /* Defer loading of if the container is not intersecting the viewport */\n deferredImages.push(image);\n }\n }\n }\n }, {\n root: container,\n rootMargin: '300px',\n threshold: 0.0\n });\n\n for (var image of images) {\n imageObserver.observe(image);\n }\n\n return () => {\n containerObserver.disconnect();\n imageObserver.disconnect();\n };\n}\n\nfunction debounce(fn, delay) {\n var timeout;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport { ElementIntersectionObserver, HorizontalScroll, VerticalScroll, addStyle, closest, connectScrollContainerLazyLoad, debounce, dispatchEvent, setAttribute, testReducedMotion, toArray, toggleAttribute, withinRange, withinStops };\n//# sourceMappingURL=dh-basis-common.esm.js.map\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { dispatchEvent, testReducedMotion, toArray, toggleAttribute } from '@nrk/dh-basis-common';\n\nvar STATE_ATTR = 'data-state';\nvar VIEWPORT_POSITION_ATTR = 'data-viewport-position';\nvar DISABLE_FORCED_ATTRIBUTES_ATTR = 'disable-forced-attributes';\nvar IS_PAUSED = 'is-paused';\nvar AUTOPLAY_BLOCKED = 'autoplay-blocked';\nvar READY_STATE = {\n HAVE_NOTHING: 0,\n HAVE_METADATA: 1,\n HAVE_CURRENT_DATA: 2,\n HAVE_FUTURE_DATA: 3,\n HAVE_ENOUGH_DATA: 4 // Can play through\n\n};\n\nvar isVisible = child => !!child.offsetParent;\n\nclass LevendeStillbilde extends HTMLElement {\n constructor() {\n super(...arguments);\n\n _defineProperty(this, \"_disconnecting\", false);\n\n _defineProperty(this, \"_visibleVideoElement\", void 0);\n\n _defineProperty(this, \"_handlePlayChange\", e => {\n if (e.type === 'play') {\n dispatchEvent(this, 'dh-basis-autoplay-succeeded');\n }\n\n if (e.target === this._visibleVideoElement) {\n this.isPaused = this._visibleVideoElement.paused;\n }\n });\n\n _defineProperty(this, \"_updatePlayState\", () => {\n if (!this._visibleVideoElement) {\n return;\n }\n\n if (this._shouldPlay()) {\n this._playVideo();\n } else {\n this._pauseVideo();\n }\n });\n\n _defineProperty(this, \"_handleResize\", () => {\n this._updateVisibleVideoElement();\n });\n }\n\n static get observedAttributes() {\n return [STATE_ATTR, DISABLE_FORCED_ATTRIBUTES_ATTR, VIEWPORT_POSITION_ATTR];\n }\n\n connectedCallback() {\n this._setVideoAttributes();\n\n this._setEventListeners();\n\n this._updateVisibleVideoElement();\n }\n\n disconnectedCallback() {\n this._disconnecting = true;\n\n this._removeEventListeners();\n }\n\n attributeChangedCallback(name, prevValue, newValue) {\n var valueChanged = prevValue !== newValue;\n\n if (name === STATE_ATTR || name === VIEWPORT_POSITION_ATTR) {\n if (valueChanged) {\n this._updateVisibleVideoElement();\n\n this._updatePlayState();\n\n if (name === VIEWPORT_POSITION_ATTR && newValue === 'IN-VIEWPORT') {\n this._preload();\n }\n }\n }\n }\n\n _setEventListeners() {\n window.addEventListener('resize', this._handleResize);\n this.videoElements.forEach(el => {\n el.addEventListener('pause', this._handlePlayChange);\n el.addEventListener('play', this._handlePlayChange);\n el.addEventListener('canplaythrough', this._updatePlayState);\n });\n }\n\n _removeEventListeners() {\n window.removeEventListener('resize', this._handleResize);\n this.videoElements.forEach(el => {\n el.removeEventListener('pause', this._handlePlayChange);\n el.removeEventListener('play', this._handlePlayChange);\n el.removeEventListener('canplaythrough', this._updatePlayState);\n });\n }\n\n _updateVisibleVideoElement() {\n requestAnimationFrame(() => {\n var nextVisibleVideo = this.videoElements.find(isVisible);\n\n if (nextVisibleVideo !== this._visibleVideoElement) {\n // Pause previous video\n this._pauseVideo();\n\n this._visibleVideoElement = nextVisibleVideo;\n\n if (this._shouldPreload()) {\n this._preload();\n }\n\n this._updatePlayState();\n }\n });\n }\n\n _setVideoAttributes() {\n if (!this.disableForcedAttributes) {\n this.videoElements.forEach(el => {\n el.setAttribute('playsInline', '');\n el.setAttribute('loop', '');\n el.setAttribute('disableRemotePlayback', '');\n el.setAttribute('x-webkit-airplay', 'deny');\n });\n }\n }\n\n _shouldPlay() {\n var _this$_visibleVideoEl;\n\n /*\n * Safari 14-15.5 hides poster on play, leaving a transparent element until enough data is available to play through.\n * We have to wait for the canplaythrough event and readystate = READY_STATE.HAVE_ENOUGH_DATA before calling `.play()`\n * */\n return ((_this$_visibleVideoEl = this._visibleVideoElement) === null || _this$_visibleVideoEl === void 0 ? void 0 : _this$_visibleVideoEl.readyState) >= READY_STATE.HAVE_ENOUGH_DATA && this.state === 'ACTIVE' && this.viewportPosition === 'IN-VIEWPORT';\n }\n\n _shouldPreload() {\n return this.viewportPosition === 'IN-VIEWPORT';\n }\n\n _preload() {\n var _this$_visibleVideoEl2;\n\n if (((_this$_visibleVideoEl2 = this._visibleVideoElement) === null || _this$_visibleVideoEl2 === void 0 ? void 0 : _this$_visibleVideoEl2.readyState) < READY_STATE.HAVE_ENOUGH_DATA) {\n var _this$_visibleVideoEl3;\n\n (_this$_visibleVideoEl3 = this._visibleVideoElement) === null || _this$_visibleVideoEl3 === void 0 ? void 0 : _this$_visibleVideoEl3.load();\n }\n }\n\n _playVideo() {\n dispatchEvent(this, 'dh-basis-autoplay-attempted');\n var reducedMotion = testReducedMotion();\n var videoElement = this._visibleVideoElement;\n\n if (videoElement.paused && !reducedMotion && !this.autoplayBlocked) {\n var playPromise = videoElement.play() || Promise.resolve();\n playPromise.catch(e => {\n console.error(e);\n this.autoplayBlocked = true;\n });\n }\n }\n\n _pauseVideo() {\n var videoElement = this._visibleVideoElement;\n\n if (videoElement && !videoElement.paused) {\n videoElement.pause();\n }\n }\n\n get videoElements() {\n return toArray(this.querySelectorAll('video'));\n }\n\n get disableForcedAttributes() {\n return this.hasAttribute(DISABLE_FORCED_ATTRIBUTES_ATTR);\n }\n\n get state() {\n return this.getAttribute(STATE_ATTR);\n }\n\n set state(val) {\n this.setAttribute(STATE_ATTR, val);\n }\n\n get isPaused() {\n return this.getAttribute(IS_PAUSED);\n }\n\n set isPaused(val) {\n if (val) {\n this.setAttribute(IS_PAUSED, '');\n } else {\n this.removeAttribute(IS_PAUSED);\n }\n }\n\n get autoplayBlocked() {\n return this.hasAttribute(AUTOPLAY_BLOCKED) || false;\n }\n\n set autoplayBlocked(val) {\n toggleAttribute(this, AUTOPLAY_BLOCKED, val);\n }\n\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n\n set viewportPosition(val) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, val);\n }\n\n}\n\nexport { LevendeStillbilde as default };\n//# sourceMappingURL=dh-basis-levende-stillbilde.esm.js.map\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/nrk-types.ts\nvar ClickEventKind = /* @__PURE__ */ ((ClickEventKind2) => {\n ClickEventKind2[\"Content\"] = \"content\";\n ClickEventKind2[\"Other\"] = \"other\";\n return ClickEventKind2;\n})(ClickEventKind || {});\nvar ImpressionEventKind = /* @__PURE__ */ ((ImpressionEventKind2) => {\n ImpressionEventKind2[\"Impression\"] = \"impression\";\n return ImpressionEventKind2;\n})(ImpressionEventKind || {});\nvar PlaybackEventKind = /* @__PURE__ */ ((PlaybackEventKind2) => {\n PlaybackEventKind2[\"Complete\"] = \"complete\";\n PlaybackEventKind2[\"Exit\"] = \"exit\";\n PlaybackEventKind2[\"Progress\"] = \"progress\";\n PlaybackEventKind2[\"Start\"] = \"start\";\n return PlaybackEventKind2;\n})(PlaybackEventKind || {});\nvar SearchSource = /* @__PURE__ */ ((SearchSource2) => {\n SearchSource2[\"PopularSearch\"] = \"popular-search\";\n SearchSource2[\"PreviousResult\"] = \"previous-result\";\n SearchSource2[\"Search\"] = \"search\";\n return SearchSource2;\n})(SearchSource || {});\nvar ViewportEventKind = /* @__PURE__ */ ((ViewportEventKind2) => {\n ViewportEventKind2[\"Entry\"] = \"entry\";\n ViewportEventKind2[\"Exit\"] = \"exit\";\n return ViewportEventKind2;\n})(ViewportEventKind || {});\nvar EventSchema = /* @__PURE__ */ ((EventSchema3) => {\n EventSchema3[\"BackstageEvent\"] = \"iglu:no.nrk.innlogging/backstage-event/jsonschema/1-0-0\";\n EventSchema3[\"ClickEvent\"] = \"iglu:no.nrk/click-event/jsonschema/1-0-0\";\n EventSchema3[\"FrontstageServerEvent\"] = \"iglu:no.nrk.innlogging/frontstage-server-event/jsonschema/1-0-0\";\n EventSchema3[\"ImpressionEvent\"] = \"iglu:no.nrk/impression-event/jsonschema/1-0-0\";\n EventSchema3[\"LoginRegisterFlowEvent\"] = \"iglu:no.nrk.innlogging/login-register-flow-event/jsonschema/1-0-0\";\n EventSchema3[\"PlaybackEvent\"] = \"iglu:no.nrk/playback-event/jsonschema/1-0-0\";\n EventSchema3[\"ProfilePageEvent\"] = \"iglu:no.nrk.innlogging/profile-page-event/jsonschema/1-0-0\";\n EventSchema3[\"RadioEvent\"] = \"iglu:no.nrk.radio/radio-event/jsonschema/1-0-0\";\n EventSchema3[\"SearchEvent\"] = \"iglu:no.nrk/search-event/jsonschema/1-0-0\";\n EventSchema3[\"StepEvent\"] = \"iglu:no.nrk.dh/step-event/jsonschema/1-0-0\";\n EventSchema3[\"TimeSpentEvent\"] = \"iglu:no.nrk/time-spent-event/jsonschema/1-0-0\";\n EventSchema3[\"ViewportEvent\"] = \"iglu:no.nrk.dh/viewport-event/jsonschema/1-0-0\";\n return EventSchema3;\n})(EventSchema || {});\nvar EntitySchema = /* @__PURE__ */ ((EntitySchema2) => {\n EntitySchema2[\"ClientID\"] = \"iglu:no.nrk.innlogging/client-id/jsonschema/1-0-0\";\n EntitySchema2[\"Content\"] = \"iglu:no.nrk/content/jsonschema/1-0-1\";\n EntitySchema2[\"Experiment\"] = \"iglu:no.nrk/experiment/jsonschema/1-0-0\";\n EntitySchema2[\"Link\"] = \"iglu:no.nrk/link/jsonschema/2-0-0\";\n EntitySchema2[\"NrkSession\"] = \"iglu:no.nrk/nrk-session/jsonschema/1-0-0\";\n EntitySchema2[\"NrkUser\"] = \"iglu:no.nrk/nrk-user/jsonschema/1-0-0\";\n EntitySchema2[\"Plug\"] = \"iglu:no.nrk/plug/jsonschema/3-0-0\";\n EntitySchema2[\"PreviousWebPage\"] = \"iglu:no.nrk/previous-web-page/jsonschema/1-0-0\";\n EntitySchema2[\"RegistrationContext\"] = \"iglu:no.nrk.innlogging/registration-context/jsonschema/1-0-0\";\n EntitySchema2[\"SearchResult\"] = \"iglu:no.nrk/search-result/jsonschema/1-0-1\";\n EntitySchema2[\"Service\"] = \"iglu:no.nrk/service/jsonschema/2-0-0\";\n EntitySchema2[\"Application\"] = \"iglu:com.snowplowanalytics.mobile/application/jsonschema/1-0-0\";\n return EntitySchema2;\n})(EntitySchema || {});\n\n// src/nrk-base-tracker.ts\nimport cuid from \"cuid\";\nvar NrkBaseTracker = class {\n constructor(snowplow, config) {\n this.sharedEntities = {};\n var _a, _b, _c;\n this.snowplow = snowplow;\n this.trackerId = (_a = config.trackerId) != null ? _a : cuid.slug();\n this.setSharedEntity(\"iglu:no.nrk/service/jsonschema/2-0-0\" /* Service */, { id: config.serviceId, environment: (_b = config.environment) != null ? _b : null });\n if (config.appVersion && config.appBuild) {\n this.setSharedEntity(\"iglu:com.snowplowanalytics.mobile/application/jsonschema/1-0-0\" /* Application */, { build: config.appBuild, version: config.appVersion });\n }\n snowplow.newTracker(this.trackerId, config.collectorUrl, {\n postPath: \"/nrk/wd6\",\n appId: config.appId,\n plugins: config.plugins,\n platform: (_c = config.platform) != null ? _c : \"web\",\n contexts: {\n webPage: config.disableWebContext !== true\n },\n stateStorageStrategy: config.disableLocalStorage ? \"cookie\" : void 0\n });\n }\n /**\n * Track page view.\n */\n trackPageView(contentEntity) {\n if (contentEntity) {\n this.snowplow.trackPageView(\n {\n context: entitiesToContexts(__spreadProps(__spreadValues({}, this.sharedEntities), {\n [\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */]: contentEntity\n }))\n },\n [this.trackerId]\n );\n } else {\n this.snowplow.trackPageView({ context: entitiesToContexts(this.sharedEntities) }, [this.trackerId]);\n }\n }\n /**\n * Generic track event for custom schemas, typed up to only support NRK\n * events and entities. All shared entities are included, and can be\n * overridden by specified entities.\n */\n trackSchemaEvent(schema, data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackSelfDescribingEvent(\n {\n event: { schema, data: __spreadValues({}, data) },\n context\n },\n [this.trackerId]\n );\n }\n /**\n * Send a standard structured event.\n */\n trackEvent(data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackStructEvent(__spreadProps(__spreadValues({}, data), { context }), [this.trackerId]);\n }\n /**\n * Set the logged in user.\n */\n setUser(userId) {\n this.snowplow.setUserId(userId, [this.trackerId]);\n this.setSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */, { id: userId });\n }\n /**\n * Clear the user when logged out.\n */\n clearUser() {\n this.snowplow.setUserId(null, [this.trackerId]);\n this.removeSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */);\n }\n /**\n * Add a plugin to the tracker.\n */\n addPlugin(configuration) {\n this.snowplow.addPlugin(configuration, [this.trackerId]);\n }\n /**\n * Set data for a shared entity for all events of this tracker.\n *\n * The `snowplow.addGlobalContexts()` method could potentially be used, but\n * `removeGlobalContexts()` requires the data as argument as well (awkward),\n * and there's no `getGlobalContexts()` to help with that.\n */\n setSharedEntity(schema, data) {\n this.sharedEntities[schema] = data;\n }\n /**\n * Returns any shared entities for an entity schema.\n */\n getSharedEntity(schema) {\n return this.sharedEntities[schema];\n }\n /**\n * Remove all shared entities for an entity schema.\n */\n removeSharedEntity(schema) {\n if (schema in this.sharedEntities) {\n delete this.sharedEntities[schema];\n }\n }\n};\nfunction entitiesToContexts(entities) {\n const contexts = [];\n Object.entries(entities).forEach(([schema, data]) => {\n const dataList = Array.isArray(data) ? data : [data];\n for (const entityData of dataList) {\n contexts.push({ schema, data: __spreadValues({}, entityData) });\n }\n });\n return contexts;\n}\n\n// src/nrk-player-tracker.ts\nvar NrkPlayerTracker = class extends NrkBaseTracker {\n /**\n * Tell the tracker what the current media is.\n */\n setMedia(mediaId, details) {\n const content = { id: mediaId };\n if (details == null ? void 0 : details.source) {\n content.source = details == null ? void 0 : details.source;\n }\n if (details == null ? void 0 : details.kind) {\n content.kind = details == null ? void 0 : details.kind;\n }\n this.setSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */, content);\n if (details == null ? void 0 : details.channelId) {\n this.channelId = details.channelId;\n }\n if (details && \"autoplay\" in details && details.autoplay !== void 0) {\n this.autoplay = details.autoplay;\n }\n }\n /**\n * Set autoplay for the current media.\n */\n setMediaAutoplay(autoplay) {\n this.autoplay = autoplay;\n }\n /**\n * Tell the tracker that media is unknown (like for gaps in the EPG).\n */\n setUnknownMedia(channelId) {\n this.setSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */, { id: \"unknown\", kind: \"unknown\" });\n this.channelId = channelId;\n }\n /**\n * Send a playback event of kind 'start'.\n *\n * Should be called when time starts running:\n * - After changing media.\n * - After user pauses playback.\n * - At replay.\n */\n sendStartEvent(startTime, live) {\n if (this.getSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */) === void 0) {\n throw new Error(\"Must use setMedia() first!\");\n }\n const start = Math.max(0, Math.floor(startTime));\n this.trackSchemaEvent(\"iglu:no.nrk/playback-event/jsonschema/1-0-0\" /* PlaybackEvent */, {\n kind: \"start\" /* Start */,\n startTime: start,\n endTime: start,\n autoplay: this.autoplay,\n live,\n channelId: this.channelId\n });\n }\n /**\n * Send a playback event of kind 'progress'.\n *\n * Should be called when time stops for any reason other than complete or\n * exit.\n */\n sendProgressEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"progress\" /* Progress */, startTime, endTime, live);\n }\n /**\n * Send a playback event of kind 'complete'.\n *\n * Should be called when:\n * - Playback reaches the end (100%) of the media (for ODM it stops, for\n * channels it continues to play the next program in the EPG).\n * - When a skip-to-next media function is invoked when binging.\n */\n sendCompleteEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"complete\" /* Complete */, startTime, endTime != null ? endTime : startTime, live);\n }\n /**\n * Send a playback event of kind 'exit'.\n *\n * Should be called when leaving the media before a 'complete'-event is sent,\n * including when seeking away from a program in the EPG to another.\n */\n sendExitEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"exit\" /* Exit */, startTime, endTime != null ? endTime : startTime, live);\n }\n sendPlaybackEvent(kind, startTime, endTime, live) {\n const start = Math.max(0, Math.floor(startTime));\n const end = Math.max(0, Math.floor(endTime));\n if (start === end && kind === \"progress\" /* Progress */) {\n return;\n }\n if (start > end) {\n throw new Error(`Start time can't be after end time (${start} vs ${end}). Event was ${kind}`);\n }\n this.trackSchemaEvent(\"iglu:no.nrk/playback-event/jsonschema/1-0-0\" /* PlaybackEvent */, {\n kind,\n startTime: start,\n endTime: end,\n live,\n channelId: this.channelId\n });\n }\n};\n\n// src/service-id.ts\nvar ServiceID = /* @__PURE__ */ ((ServiceID2) => {\n ServiceID2[\"Embed\"] = \"embed\";\n ServiceID2[\"Nrkbeta\"] = \"nrkbeta\";\n ServiceID2[\"Nrkinnlogging\"] = \"nrkinnlogging\";\n ServiceID2[\"Nrkno\"] = \"nrkno\";\n ServiceID2[\"Nrkp3\"] = \"nrkp3\";\n ServiceID2[\"Nrkradio\"] = \"nrkradio\";\n ServiceID2[\"Nrksuper\"] = \"nrksuper\";\n ServiceID2[\"Nrktv\"] = \"nrktv\";\n ServiceID2[\"Yr\"] = \"yr\";\n return ServiceID2;\n})(ServiceID || {});\n\n// src/snowplow-global.ts\nvar SnowplowGlobal = class {\n constructor() {\n this.snowplow = window.snowplow;\n if (this.snowplow === void 0) {\n throw new Error(\"There is no global Snowplow function.\");\n }\n }\n /**\n * Check if the global API is available (provided by the \"Snowplow tag\"). No\n * distinction is made between sp.js and sp.lite.js.\n */\n static isAvailable() {\n return window.snowplow !== void 0;\n }\n /**\n * Modify newTracker() to support adding plugins via the tracker\n * configuration. See \"Creating your own plugins\" in the JavaScript tracker\n * Snowplow docs.\n *\n * Note: The tracker configuration hasn't been thoroughly checked for\n * inconsistencies between the global API and @snowplow/browser-tracker.\n * There might be issues.\n */\n newTracker(trackerId, collectorUrl, configuration) {\n this.snowplow(\"newTracker\", trackerId, collectorUrl, configuration);\n if ((configuration == null ? void 0 : configuration.plugins) !== void 0) {\n configuration.plugins.forEach((plugin) => {\n this.addPlugin({ plugin }, [trackerId]);\n });\n }\n }\n setUserId(...args) {\n this.proxy(\"setUserId\", args, 2);\n }\n trackPageView(...args) {\n this.proxy(\"trackPageView\", args, 2);\n }\n trackSelfDescribingEvent(...args) {\n this.proxy(\"trackSelfDescribingEvent\", args, 2);\n }\n trackStructEvent(...args) {\n this.proxy(\"trackStructEvent\", args, 2);\n }\n preservePageViewId(...args) {\n this.proxy(\"preservePageViewId\", args, 1);\n }\n addPlugin(config, trackers) {\n const args = [{ Plugin: () => config.plugin }, \"Plugin\", trackers];\n this.proxy(\"addPlugin\", args, args.length);\n }\n /**\n * Make a call to the global Snowplow API, with the specified method and\n * arguments. It only supports methods which have a `trackers` argument as\n * the last (optional) argument.\n *\n * The `trackers` argument of the Snowplow methods is optional and not always\n * in the same position. The `maxArgs` argument specifies the maximum number\n * of arguments the method supports and so in which position the `trackers`\n * argument is, when present. This is necessary in order to transform the use\n * of `trackers` between the Snowplow API and the global API. So if\n * `Args['length']` is `1 | 2`, then `maxArgs` should be 2.\n */\n proxy(method, args, maxArgs) {\n const trackerIds = args.length === maxArgs ? args.pop() : void 0;\n if (trackerIds && trackerIds.length > 0) {\n trackerIds.forEach((trackerId) => {\n this.snowplow(`${method}:${trackerId}`, ...args);\n });\n } else {\n this.snowplow(method, ...args);\n }\n }\n};\nexport {\n ClickEventKind,\n EntitySchema,\n EventSchema,\n ImpressionEventKind,\n NrkBaseTracker,\n NrkPlayerTracker,\n PlaybackEventKind,\n SearchSource,\n ServiceID,\n SnowplowGlobal,\n ViewportEventKind,\n entitiesToContexts\n};\n","import { EntitySchema, EventSchema } from '@nrk/snowplow-web';\n\n/**\n * Root path to snowplow bundle on static.nrk.no.\n */\nvar staticSnowplowRoot = \"https://static.nrk.no/nrkno-snowplow\";\n/**\n * The current major version\n */\nvar staticSnowplowMajorVersion = \"1\";\n\n//@ts-expect-error post-fix version to allow multiple versions to co-exists at the same time\nvar globalKey = \"nrknoOnTrackerReady-\" + staticSnowplowMajorVersion;\n\n/**\n * Modified version of @nrk/snowplow-web. Does not allow array or undefined\n */\n\n/**\n * Typecheck and generate `{schema, data}`\n */\nfunction getTyped(schema, data) {\n return {\n schema,\n data\n };\n}\n\n/**\n * No-op type check\n */\nfunction isTypedContext(_schema, _data) {}\n/**\n * No-op type check\n */\nfunction isTypedEvent(_schema, _data) {}\n/**\n * No-op type check\n */\nfunction isTyped(_schema, _data) {}\n\n/**\n * No-op type check\n */\nfunction isTypedArray(_schema, _data) {}\n\n/**\n * Typechecks a context and return the Snowplow type\n */\nfunction asSnowplowContext(data) {\n return data;\n}\nfunction asSnowplowEntity(data) {\n return data;\n}\n\nvar typeUtil = /*#__PURE__*/Object.freeze({\n __proto__: null,\n EntitySchema: EntitySchema,\n EventSchema: EventSchema,\n asSnowplowContext: asSnowplowContext,\n asSnowplowEntity: asSnowplowEntity,\n getTyped: getTyped,\n isTyped: isTyped,\n isTypedArray: isTypedArray,\n isTypedContext: isTypedContext,\n isTypedEvent: isTypedEvent\n});\n\n/// \n/**\n * Takes a callback that will be called with the bundled JS when ready.\n *\n * This function will load the major version (defined above in JS file) from `static.nrk.no`\n * @note the callback will never be called if a network error occurs.\n */\nfunction getBundle(callback) {\n // Add callback queue placeholder if needed\n if (globalThis[globalKey] === undefined) {\n //@ts-expect-error `q` is next line\n globalThis[globalKey] = function (cb) {\n globalThis[globalKey].q.push(cb);\n };\n globalThis[globalKey].q = [];\n }\n {\n // load script if needed\n loadOnce(staticSnowplowRoot + \"/major/\" + staticSnowplowMajorVersion + \"/nrkno-snowplow-entry.js\");\n }\n\n // add callback\n globalThis[globalKey](callback);\n}\n/**\n * loadOnce loads the given script IFF it is not already present in the DOM.\n * @param {string} src URL for script\n * @returns {undefined}\n */\nfunction loadOnce(src) {\n var hasScript = document.querySelector(\"script[src=\\\"\" + src + \"\\\"]\");\n if (hasScript) {\n return;\n }\n var script = document.createElement('script');\n script.async = true;\n script.src = src;\n document.head.appendChild(script);\n}\n\nexport { typeUtil as TypeUtils, getBundle };\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/nrk-types.ts\nvar ClickEventKind = /* @__PURE__ */ ((ClickEventKind2) => {\n ClickEventKind2[\"Content\"] = \"content\";\n ClickEventKind2[\"Other\"] = \"other\";\n return ClickEventKind2;\n})(ClickEventKind || {});\nvar ImpressionEventKind = /* @__PURE__ */ ((ImpressionEventKind2) => {\n ImpressionEventKind2[\"Impression\"] = \"impression\";\n return ImpressionEventKind2;\n})(ImpressionEventKind || {});\nvar PlaybackEventKind = /* @__PURE__ */ ((PlaybackEventKind2) => {\n PlaybackEventKind2[\"Complete\"] = \"complete\";\n PlaybackEventKind2[\"Exit\"] = \"exit\";\n PlaybackEventKind2[\"Progress\"] = \"progress\";\n PlaybackEventKind2[\"Start\"] = \"start\";\n return PlaybackEventKind2;\n})(PlaybackEventKind || {});\nvar SearchSource = /* @__PURE__ */ ((SearchSource2) => {\n SearchSource2[\"PopularSearch\"] = \"popular-search\";\n SearchSource2[\"PreviousResult\"] = \"previous-result\";\n SearchSource2[\"Search\"] = \"search\";\n return SearchSource2;\n})(SearchSource || {});\nvar ViewportEventKind = /* @__PURE__ */ ((ViewportEventKind2) => {\n ViewportEventKind2[\"Entry\"] = \"entry\";\n ViewportEventKind2[\"Exit\"] = \"exit\";\n return ViewportEventKind2;\n})(ViewportEventKind || {});\nvar EventSchema = /* @__PURE__ */ ((EventSchema3) => {\n EventSchema3[\"BackstageEvent\"] = \"iglu:no.nrk.innlogging/backstage-event/jsonschema/1-0-0\";\n EventSchema3[\"ClickEvent\"] = \"iglu:no.nrk/click-event/jsonschema/1-0-0\";\n EventSchema3[\"FrontstageServerEvent\"] = \"iglu:no.nrk.innlogging/frontstage-server-event/jsonschema/1-0-0\";\n EventSchema3[\"ImpressionEvent\"] = \"iglu:no.nrk/impression-event/jsonschema/1-0-0\";\n EventSchema3[\"LoginRegisterFlowEvent\"] = \"iglu:no.nrk.innlogging/login-register-flow-event/jsonschema/1-0-0\";\n EventSchema3[\"PlaybackEvent\"] = \"iglu:no.nrk/playback-event/jsonschema/1-0-0\";\n EventSchema3[\"ProfilePageEvent\"] = \"iglu:no.nrk.innlogging/profile-page-event/jsonschema/1-0-0\";\n EventSchema3[\"RadioEvent\"] = \"iglu:no.nrk.radio/radio-event/jsonschema/1-0-0\";\n EventSchema3[\"SearchEvent\"] = \"iglu:no.nrk/search-event/jsonschema/1-0-0\";\n EventSchema3[\"StepEvent\"] = \"iglu:no.nrk.dh/step-event/jsonschema/1-0-0\";\n EventSchema3[\"TimeSpentEvent\"] = \"iglu:no.nrk/time-spent-event/jsonschema/1-0-0\";\n EventSchema3[\"ViewportEvent\"] = \"iglu:no.nrk.dh/viewport-event/jsonschema/1-0-0\";\n return EventSchema3;\n})(EventSchema || {});\nvar EntitySchema = /* @__PURE__ */ ((EntitySchema2) => {\n EntitySchema2[\"ClientID\"] = \"iglu:no.nrk.innlogging/client-id/jsonschema/1-0-0\";\n EntitySchema2[\"Content\"] = \"iglu:no.nrk/content/jsonschema/1-0-1\";\n EntitySchema2[\"Experiment\"] = \"iglu:no.nrk/experiment/jsonschema/1-0-0\";\n EntitySchema2[\"Link\"] = \"iglu:no.nrk/link/jsonschema/2-0-0\";\n EntitySchema2[\"NrkSession\"] = \"iglu:no.nrk/nrk-session/jsonschema/1-0-0\";\n EntitySchema2[\"NrkUser\"] = \"iglu:no.nrk/nrk-user/jsonschema/1-0-0\";\n EntitySchema2[\"Plug\"] = \"iglu:no.nrk/plug/jsonschema/3-0-0\";\n EntitySchema2[\"PreviousWebPage\"] = \"iglu:no.nrk/previous-web-page/jsonschema/1-0-0\";\n EntitySchema2[\"RegistrationContext\"] = \"iglu:no.nrk.innlogging/registration-context/jsonschema/1-0-0\";\n EntitySchema2[\"SearchResult\"] = \"iglu:no.nrk/search-result/jsonschema/1-0-1\";\n EntitySchema2[\"Service\"] = \"iglu:no.nrk/service/jsonschema/2-0-0\";\n EntitySchema2[\"Application\"] = \"iglu:com.snowplowanalytics.mobile/application/jsonschema/1-0-0\";\n return EntitySchema2;\n})(EntitySchema || {});\n\n// src/nrk-base-tracker.ts\nimport cuid from \"cuid\";\nvar NrkBaseTracker = class {\n constructor(snowplow, config) {\n this.sharedEntities = {};\n var _a, _b, _c;\n this.snowplow = snowplow;\n this.trackerId = (_a = config.trackerId) != null ? _a : cuid.slug();\n this.setSharedEntity(\"iglu:no.nrk/service/jsonschema/2-0-0\" /* Service */, { id: config.serviceId, environment: (_b = config.environment) != null ? _b : null });\n if (config.appVersion && config.appBuild) {\n this.setSharedEntity(\"iglu:com.snowplowanalytics.mobile/application/jsonschema/1-0-0\" /* Application */, { build: config.appBuild, version: config.appVersion });\n }\n snowplow.newTracker(this.trackerId, config.collectorUrl, {\n postPath: \"/nrk/wd6\",\n appId: config.appId,\n plugins: config.plugins,\n platform: (_c = config.platform) != null ? _c : \"web\",\n contexts: {\n webPage: config.disableWebContext !== true\n },\n stateStorageStrategy: config.disableLocalStorage ? \"cookie\" : void 0\n });\n }\n /**\n * Track page view.\n */\n trackPageView(contentEntity) {\n if (contentEntity) {\n this.snowplow.trackPageView(\n {\n context: entitiesToContexts(__spreadProps(__spreadValues({}, this.sharedEntities), {\n [\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */]: contentEntity\n }))\n },\n [this.trackerId]\n );\n } else {\n this.snowplow.trackPageView({ context: entitiesToContexts(this.sharedEntities) }, [this.trackerId]);\n }\n }\n /**\n * Generic track event for custom schemas, typed up to only support NRK\n * events and entities. All shared entities are included, and can be\n * overridden by specified entities.\n */\n trackSchemaEvent(schema, data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackSelfDescribingEvent(\n {\n event: { schema, data: __spreadValues({}, data) },\n context\n },\n [this.trackerId]\n );\n }\n /**\n * Send a standard structured event.\n */\n trackEvent(data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackStructEvent(__spreadProps(__spreadValues({}, data), { context }), [this.trackerId]);\n }\n /**\n * Set the logged in user.\n */\n setUser(userId) {\n this.snowplow.setUserId(userId, [this.trackerId]);\n this.setSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */, { id: userId });\n }\n /**\n * Clear the user when logged out.\n */\n clearUser() {\n this.snowplow.setUserId(null, [this.trackerId]);\n this.removeSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */);\n }\n /**\n * Add a plugin to the tracker.\n */\n addPlugin(configuration) {\n this.snowplow.addPlugin(configuration, [this.trackerId]);\n }\n /**\n * Set data for a shared entity for all events of this tracker.\n *\n * The `snowplow.addGlobalContexts()` method could potentially be used, but\n * `removeGlobalContexts()` requires the data as argument as well (awkward),\n * and there's no `getGlobalContexts()` to help with that.\n */\n setSharedEntity(schema, data) {\n this.sharedEntities[schema] = data;\n }\n /**\n * Returns any shared entities for an entity schema.\n */\n getSharedEntity(schema) {\n return this.sharedEntities[schema];\n }\n /**\n * Remove all shared entities for an entity schema.\n */\n removeSharedEntity(schema) {\n if (schema in this.sharedEntities) {\n delete this.sharedEntities[schema];\n }\n }\n};\nfunction entitiesToContexts(entities) {\n const contexts = [];\n Object.entries(entities).forEach(([schema, data]) => {\n const dataList = Array.isArray(data) ? data : [data];\n for (const entityData of dataList) {\n contexts.push({ schema, data: __spreadValues({}, entityData) });\n }\n });\n return contexts;\n}\n\n// src/nrk-player-tracker.ts\nvar NrkPlayerTracker = class extends NrkBaseTracker {\n /**\n * Tell the tracker what the current media is.\n */\n setMedia(mediaId, details) {\n const content = { id: mediaId };\n if (details == null ? void 0 : details.source) {\n content.source = details == null ? void 0 : details.source;\n }\n if (details == null ? void 0 : details.kind) {\n content.kind = details == null ? void 0 : details.kind;\n }\n this.setSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */, content);\n if (details == null ? void 0 : details.channelId) {\n this.channelId = details.channelId;\n }\n if (details && \"autoplay\" in details && details.autoplay !== void 0) {\n this.autoplay = details.autoplay;\n }\n }\n /**\n * Set autoplay for the current media.\n */\n setMediaAutoplay(autoplay) {\n this.autoplay = autoplay;\n }\n /**\n * Tell the tracker that media is unknown (like for gaps in the EPG).\n */\n setUnknownMedia(channelId) {\n this.setSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */, { id: \"unknown\", kind: \"unknown\" });\n this.channelId = channelId;\n }\n /**\n * Send a playback event of kind 'start'.\n *\n * Should be called when time starts running:\n * - After changing media.\n * - After user pauses playback.\n * - At replay.\n */\n sendStartEvent(startTime, live) {\n if (this.getSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */) === void 0) {\n throw new Error(\"Must use setMedia() first!\");\n }\n const start = Math.max(0, Math.floor(startTime));\n this.trackSchemaEvent(\"iglu:no.nrk/playback-event/jsonschema/1-0-0\" /* PlaybackEvent */, {\n kind: \"start\" /* Start */,\n startTime: start,\n endTime: start,\n autoplay: this.autoplay,\n live,\n channelId: this.channelId\n });\n }\n /**\n * Send a playback event of kind 'progress'.\n *\n * Should be called when time stops for any reason other than complete or\n * exit.\n */\n sendProgressEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"progress\" /* Progress */, startTime, endTime, live);\n }\n /**\n * Send a playback event of kind 'complete'.\n *\n * Should be called when:\n * - Playback reaches the end (100%) of the media (for ODM it stops, for\n * channels it continues to play the next program in the EPG).\n * - When a skip-to-next media function is invoked when binging.\n */\n sendCompleteEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"complete\" /* Complete */, startTime, endTime != null ? endTime : startTime, live);\n }\n /**\n * Send a playback event of kind 'exit'.\n *\n * Should be called when leaving the media before a 'complete'-event is sent,\n * including when seeking away from a program in the EPG to another.\n */\n sendExitEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"exit\" /* Exit */, startTime, endTime != null ? endTime : startTime, live);\n }\n sendPlaybackEvent(kind, startTime, endTime, live) {\n const start = Math.max(0, Math.floor(startTime));\n const end = Math.max(0, Math.floor(endTime));\n if (start === end && kind === \"progress\" /* Progress */) {\n return;\n }\n if (start > end) {\n throw new Error(`Start time can't be after end time (${start} vs ${end}). Event was ${kind}`);\n }\n this.trackSchemaEvent(\"iglu:no.nrk/playback-event/jsonschema/1-0-0\" /* PlaybackEvent */, {\n kind,\n startTime: start,\n endTime: end,\n live,\n channelId: this.channelId\n });\n }\n};\n\n// src/service-id.ts\nvar ServiceID = /* @__PURE__ */ ((ServiceID2) => {\n ServiceID2[\"Embed\"] = \"embed\";\n ServiceID2[\"Nrkbeta\"] = \"nrkbeta\";\n ServiceID2[\"Nrkinnlogging\"] = \"nrkinnlogging\";\n ServiceID2[\"Nrkno\"] = \"nrkno\";\n ServiceID2[\"Nrkp3\"] = \"nrkp3\";\n ServiceID2[\"Nrkradio\"] = \"nrkradio\";\n ServiceID2[\"Nrksuper\"] = \"nrksuper\";\n ServiceID2[\"Nrktv\"] = \"nrktv\";\n ServiceID2[\"Yr\"] = \"yr\";\n return ServiceID2;\n})(ServiceID || {});\n\n// src/snowplow-global.ts\nvar SnowplowGlobal = class {\n constructor() {\n this.snowplow = window.snowplow;\n if (this.snowplow === void 0) {\n throw new Error(\"There is no global Snowplow function.\");\n }\n }\n /**\n * Check if the global API is available (provided by the \"Snowplow tag\"). No\n * distinction is made between sp.js and sp.lite.js.\n */\n static isAvailable() {\n return window.snowplow !== void 0;\n }\n /**\n * Modify newTracker() to support adding plugins via the tracker\n * configuration. See \"Creating your own plugins\" in the JavaScript tracker\n * Snowplow docs.\n *\n * Note: The tracker configuration hasn't been thoroughly checked for\n * inconsistencies between the global API and @snowplow/browser-tracker.\n * There might be issues.\n */\n newTracker(trackerId, collectorUrl, configuration) {\n this.snowplow(\"newTracker\", trackerId, collectorUrl, configuration);\n if ((configuration == null ? void 0 : configuration.plugins) !== void 0) {\n configuration.plugins.forEach((plugin) => {\n this.addPlugin({ plugin }, [trackerId]);\n });\n }\n }\n setUserId(...args) {\n this.proxy(\"setUserId\", args, 2);\n }\n trackPageView(...args) {\n this.proxy(\"trackPageView\", args, 2);\n }\n trackSelfDescribingEvent(...args) {\n this.proxy(\"trackSelfDescribingEvent\", args, 2);\n }\n trackStructEvent(...args) {\n this.proxy(\"trackStructEvent\", args, 2);\n }\n preservePageViewId(...args) {\n this.proxy(\"preservePageViewId\", args, 1);\n }\n addPlugin(config, trackers) {\n const args = [{ Plugin: () => config.plugin }, \"Plugin\", trackers];\n this.proxy(\"addPlugin\", args, args.length);\n }\n /**\n * Make a call to the global Snowplow API, with the specified method and\n * arguments. It only supports methods which have a `trackers` argument as\n * the last (optional) argument.\n *\n * The `trackers` argument of the Snowplow methods is optional and not always\n * in the same position. The `maxArgs` argument specifies the maximum number\n * of arguments the method supports and so in which position the `trackers`\n * argument is, when present. This is necessary in order to transform the use\n * of `trackers` between the Snowplow API and the global API. So if\n * `Args['length']` is `1 | 2`, then `maxArgs` should be 2.\n */\n proxy(method, args, maxArgs) {\n const trackerIds = args.length === maxArgs ? args.pop() : void 0;\n if (trackerIds && trackerIds.length > 0) {\n trackerIds.forEach((trackerId) => {\n this.snowplow(`${method}:${trackerId}`, ...args);\n });\n } else {\n this.snowplow(method, ...args);\n }\n }\n};\nexport {\n ClickEventKind,\n EntitySchema,\n EventSchema,\n ImpressionEventKind,\n NrkBaseTracker,\n NrkPlayerTracker,\n PlaybackEventKind,\n SearchSource,\n ServiceID,\n SnowplowGlobal,\n ViewportEventKind,\n entitiesToContexts\n};\n","import { getBundle } from '@nrk/nrkno-snowplow';\nimport { EntitySchema } from '@nrk/snowplow-web';\nimport { g as getHost } from './shared/dh-snowplow.1ee613bf.mjs';\n\nconst APP_ID = \"no.nrk.dh\";\nfunction resolveOrTimeout(promise, wait) {\n return Promise.race([\n promise.then(() => true),\n new Promise((resolve) => {\n setTimeout(() => {\n resolve(false);\n }, wait);\n })\n ]);\n}\nfunction createTracker(trackerId, { environment, contentContext }) {\n let trackerReady = false;\n let bundle;\n const host = getHost(environment);\n const eventQueue = [];\n const contexts = [\"service\", \"user\"];\n const trackOrQueue = (callback) => {\n if (trackerReady) {\n callback(bundle);\n } else {\n eventQueue.push(callback);\n }\n };\n const trackStructuredEvent = (event) => trackOrQueue(({ NrknoUtils, Snowplow }) => {\n Snowplow.trackStructEvent(\n {\n ...event,\n context: NrknoUtils.context.collect(contexts)\n },\n [trackerId]\n );\n });\n const trackSelfDescribingEvent = (event) => trackOrQueue(\n ({ NrknoUtils, Snowplow }) => Snowplow.trackSelfDescribingEvent(\n {\n event,\n context: NrknoUtils.context.collect(contexts)\n },\n [trackerId]\n )\n );\n getBundle((nrknoBundle) => {\n bundle = nrknoBundle;\n const { NrknoUtils } = nrknoBundle;\n NrknoUtils.newTracker(trackerId, APP_ID, host);\n if (contentContext) {\n const contentContextId = `${trackerId}-${contentContext.id}`;\n contexts.push(contentContextId);\n NrknoUtils.context.set(contentContextId, EntitySchema.Content, {\n source: contentContext.source,\n id: contentContext.id\n });\n }\n resolveOrTimeout(NrknoUtils.trackers.whenReady(\"main-tracker\"), 1e3).then((isResolved) => {\n trackerReady = true;\n if (isResolved === false) {\n console.warn(\"nrkno tracker not available\");\n }\n while (eventQueue.length) {\n const fn = eventQueue.pop();\n fn(bundle);\n }\n return;\n }).catch(console.error);\n });\n return {\n trackSelfDescribingEvent,\n trackStructuredEvent\n };\n}\n\nexport { createTracker, getHost };\n","function getHost(environment = \"development\") {\n if (environment === \"production\") {\n return \"https://data.nrk.no\";\n }\n return \"https://no-nrk-prod1.mini.snplow.net\";\n}\n\nexport { getHost as g };\n","/* eslint-disable import/no-unresolved */\nimport { getElementTag } from '@nrk/dh-server-libs/get-element-tag'\n\nimport levendeStillbilde from '@nrk/dh-basis-levende-stillbilde'\nimport { ElementIntersectionObserver } from '@nrk/dh-basis-common'\nimport { createTracker } from '@nrk/dh-snowplow'\nimport { EventSchema, ViewportEventKind } from '@nrk/snowplow-web'\nimport './components/VideoLoop.module.css'\nimport './components/Byline.module.css'\nimport './client.module.css'\n\nconst tag = getElementTag(__APP_NAME__, __APP_VERSION__)\n\nfunction safeDefine(elementName, constructor) {\n if (typeof customElements.get(elementName) === 'undefined') {\n customElements.define(elementName, constructor)\n }\n}\n\nconst VIEWPORT_POSITION_ATTR = 'data-viewport-position'\n\nclass AppElement extends HTMLElement {\n name = tag\n #entryObserver\n #exitObserver\n #logStatus = {\n playAttempted: false,\n playSucceeded: false,\n }\n\n connectedCallback() {\n this.render()\n this.addEventListener('dh-basis-autoplay-attempted', this.#logPlayAttempted)\n this.addEventListener('dh-basis-autoplay-succeeded', this.#logPlaySucceeded)\n\n this.#createTracker()\n this.#startViewportLogger()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.()\n this.removeEventListener('dh-basis-autoplay-attempted', this.#logPlayAttempted)\n this.removeEventListener('dh-basis-autoplay-succeeded', this.#logPlaySucceeded)\n this.#stopViewportLogger()\n }\n\n #createTracker() {\n if (process.env.DEV) {\n import('@nrk/dh-snowplow/mock')\n .then(({ mock }) => mock())\n .catch(console.error)\n }\n\n this.tracker = createTracker('dh-levende-stillbilde', {\n environment: process.env.ENVIRONMENT,\n contentContext: {\n source: 'pp',\n id: this.dataset.selfId,\n },\n })\n }\n\n #startViewportLogger() {\n this.#entryObserver = new IntersectionObserver((entries) => {\n if (!entries[0]?.isIntersecting) {\n return\n }\n this.#entryObserver.disconnect()\n this.#exitObserver.observe(this)\n this.tracker.trackSelfDescribingEvent({\n schema: EventSchema.ViewportEvent,\n data: {\n kind: ViewportEventKind.Entry,\n },\n })\n }, {})\n\n this.#exitObserver = new IntersectionObserver(\n (entries) => {\n if (!entries[0]?.isIntersecting) {\n return\n }\n this.#exitObserver.disconnect()\n this.tracker.trackSelfDescribingEvent({\n schema: EventSchema.ViewportEvent,\n data: {\n kind: ViewportEventKind.Exit,\n },\n })\n },\n { threshold: [1], rootMargin: '99000px 0px -100% 0px' }\n )\n\n this.#entryObserver.observe(this)\n }\n\n #stopViewportLogger() {\n this.#entryObserver?.disconnect()\n this.#exitObserver?.disconnect()\n }\n\n render() {\n try {\n safeDefine('dh-lvs-basis-levende-stillbilde', levendeStillbilde)\n\n const videoWrapperElement = this.querySelector('.dh-video-wrapper')\n\n // eslint-disable-next-line no-unused-vars\n const elementObserver = new ElementIntersectionObserver(\n [videoWrapperElement],\n (intersections) => {\n const element = intersections[0]\n const elementViewportPosition = videoWrapperElement.getAttribute(VIEWPORT_POSITION_ATTR)\n if (element.isIntersecting && elementViewportPosition === 'OUT-OF-VIEWPORT') {\n videoWrapperElement.setAttribute(VIEWPORT_POSITION_ATTR, 'IN-VIEWPORT')\n }\n if (!element.isIntersecting && elementViewportPosition === 'IN-VIEWPORT') {\n videoWrapperElement.setAttribute(VIEWPORT_POSITION_ATTR, 'OUT-OF-VIEWPORT')\n }\n }\n )\n } catch (err) {\n // fail silently\n console.error(`Error while rendering ${tag}`, err)\n }\n }\n\n #logPlayAttempted = () => {\n if (!this.#logStatus.playAttempted) {\n this.#logStatus.playAttempted = true\n }\n }\n\n #logPlaySucceeded = () => {\n if (!this.#logStatus.playSucceeded) {\n this.#logStatus.playSucceeded = true\n }\n }\n}\n\nif (!customElements.get(tag)) {\n customElements.define(tag, AppElement)\n}\n"],"names":["module","exports","getElementTag","name","version","split","fingerprint","pad","getRandomValue","c","blockSize","base","discreteValues","Math","pow","randomBlock","toString","safeCounter","cuid","Date","getTime","slug","date","counter","slice","print","random","isCuid","stringToCheck","startsWith","isSlug","stringLength","length","env","window","self","globalCount","Object","keys","clientId","navigator","mimeTypes","userAgent","crypto","msCrypto","lim","abs","getRandomValues","Uint32Array","num","size","s","substr","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","_typeof","obj","Symbol","iterator","constructor","prototype","_toPropertyKey","arg","key","input","hint","prim","toPrimitive","res","call","TypeError","String","Number","value","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","defaultConfig","rootMargin","threshold","root","ElementIntersectionObserver","elements","onChange","config","this","intersections","map","isIntersecting","ratio","intersectionObserver","IntersectionObserver","entries","entry","idx","indexOf","splice","intersectionRatio","elm","observe","disconnect","unobserve","proto","match","Element","matches","msMatchesSelector","webkitMatchesSelector","closest","dispatchEvent","element","event","detail","ignore","concat","CustomEvent","bubbles","cancelable","document","createEvent","initCustomEvent","result","STATE_ATTR","VIEWPORT_POSITION_ATTR","DISABLE_FORCED_ATTRIBUTES_ATTR","IS_PAUSED","AUTOPLAY_BLOCKED","READY_STATE","isVisible","child","offsetParent","LevendeStillbilde","HTMLElement","super","e","type","_visibleVideoElement","isPaused","paused","_shouldPlay","_playVideo","_pauseVideo","_updateVisibleVideoElement","observedAttributes","connectedCallback","_setVideoAttributes","_setEventListeners","disconnectedCallback","_disconnecting","_removeEventListeners","attributeChangedCallback","prevValue","newValue","_updatePlayState","_preload","addEventListener","_handleResize","videoElements","el","_handlePlayChange","removeEventListener","requestAnimationFrame","nextVisibleVideo","find","_shouldPreload","disableForcedAttributes","setAttribute","_this$_visibleVideoEl","readyState","state","viewportPosition","_this$_visibleVideoEl2","_this$_visibleVideoEl3","load","reducedMotion","matchMedia","videoElement","autoplayBlocked","play","Promise","resolve","catch","console","error","pause","nodeList","querySelectorAll","hasAttribute","getAttribute","val","removeAttribute","boolValue","hasOwnProperty","propertyIsEnumerable","staticSnowplowRoot","staticSnowplowMajorVersion","globalKey","getBundle","callback","globalThis","cb","q","src","querySelector","script","createElement","async","head","appendChild","loadOnce","ViewportEventKind2","EventSchema3","EntitySchema2","APP_ID","createTracker","trackerId","environment","contentContext","bundle","trackerReady","host","getHost","eventQueue","contexts","trackOrQueue","nrknoBundle","NrknoUtils","newTracker","contentContextId","id","context","set","promise","wait","trackers","whenReady","race","then","setTimeout","isResolved","warn","pop","fn","trackSelfDescribingEvent","Snowplow","collect","trackStructuredEvent","trackStructEvent","tag","__APP_NAME__","__APP_VERSION__","_entryObserver","_classPrivateFieldLooseKey","_exitObserver","_logStatus","_createTracker","_startViewportLogger","_stopViewportLogger","_logPlayAttempted","_logPlaySucceeded","AppElement","args","_stopViewportLogger2","_startViewportLogger2","_createTracker2","playAttempted","playSucceeded","_classPrivateFieldLooseBase","render","elementName","levendeStillbilde","customElements","get","define","videoWrapperElement","elementViewportPosition","err","tracker","process","dataset","selfId","_entries$","schema","EventSchema","data","kind","ViewportEventKind","_entries$2","_classPrivateFieldLoo","_classPrivateFieldLoo2"],"sourceRoot":""}