{"version":3,"file":"main-9a94ff425412b196e8fc.esm.js","mappings":"UAKIA,EAIAC,E,iBCGJ,IAAIC,EAAc,EAAQ,KACtBC,EAAM,EAAQ,KACdC,EAAiB,EAAQ,IAEzBC,EAAI,EAGNC,EAAiBC,KAAKC,IADf,GADK,GAId,SAASC,IACP,OAAON,GAAKC,IACVE,EAAkB,GACjBI,SANI,IADK,EAQd,CAEA,SAASC,IAGP,OAFAN,EAAIA,EAAIC,EAAiBD,EAAI,IAC7BA,EACW,CACb,CAEA,SAASO,IAqBP,MAlBa,KAKE,IAAIC,MAAOC,UAAWJ,SAvB9B,IA0BKP,EAAIQ,IAAcD,SA1BvB,IADK,GAgCFR,KAGCO,IAAgBA,IAG7B,CAEAG,EAAKG,KAAO,WACV,IAAIC,GAAO,IAAIH,MAAOC,UAAUJ,SAAS,IACvCO,EAAUN,IAAcD,SAAS,IAAIQ,OAAO,GAC5CC,EAAQjB,IAAcgB,MAAM,EAAG,GAC7BhB,IAAcgB,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,EAAKV,YAAcA,EAEnByB,EAAOC,QAAUhB,C,gBCnFjB,IAAIT,EAAM,EAAQ,KAEd0B,EAAwB,iBAAXC,OAAsBA,OAASC,KAC5CC,EAAcC,OAAOC,KAAKL,GAAKH,OAE/BS,EAAWhC,IADOiC,UAAUC,UAAYD,UAAUC,UAAUX,OAAS,GAEvEU,UAAUE,UAAUZ,QAAQhB,SAAS,IACrCsB,EAAYtB,SAAS,IAAK,GAE5BiB,EAAOC,QAAU,WACf,OAAOO,CACT,C,SCVA,IAAI/B,EAEAmC,EAA2B,oBAAXT,SACjBA,OAAOS,QAAUT,OAAOU,WACT,oBAATT,MACPA,KAAKQ,OAEP,GAAIA,EAAQ,CACR,IAAIE,EAAMlC,KAAKC,IAAI,EAAG,IAAM,EAC5BJ,EAAiB,WACb,OAAOG,KAAKmC,IAAIH,EAAOI,gBAAgB,IAAIC,YAAY,IAAI,GAAKH,EACpE,CACJ,MACIrC,EAAiBG,KAAKa,OAG1BO,EAAOC,QAAUxB,C,UCjBjBuB,EAAOC,QAAU,SAAciB,EAAKC,GAClC,IAAIC,EAAI,YAAcF,EACtB,OAAOE,EAAEC,OAAOD,EAAErB,OAASoB,EAC7B,C,gBCHAnB,EAAOC,QAAU,EAAjB,I,UCQAD,EAAOC,QAAQqB,cALf,SAAuBC,EAAMC,GAE3B,OAAOD,GADkBC,EAAU,KAAKA,EAAQC,MAAM,KAAK,KAAO,GAEpE,C,2DCJA,SAASC,EAAsBC,EAAGC,GAEhC,OCJF,SAAkCD,EAAGC,GACnC,OAAOA,EAAEC,IAAMD,EAAEC,IAAIC,KAAKH,GAAKC,EAAEG,KACnC,CDES,CAAwBJ,GADvB,EAAAK,EAAA,GAAsBJ,EAAGD,GAEnC,C,6BEJA,SAASM,EAAuBb,EAAGc,GACjC,OAAOd,EAAES,ICFX,SAA2BF,EAAGC,EAAGO,GAC/B,GAAI,mBAAqBR,EAAIA,IAAMC,EAAID,EAAES,IAAIR,GAAI,OAAOS,UAAUtC,OAAS,EAAI6B,EAAIO,EACnF,MAAM,IAAIG,UAAU,gDACtB,CDDe,CAAiBlB,EAAGc,GACnC,C,2EEDA,SAASK,EAAsBZ,EAAGC,EAAGY,GAEnC,OCJF,SAAkCb,EAAGC,EAAGa,GACtC,GAAIb,EAAEc,IAAKd,EAAEc,IAAIZ,KAAKH,EAAGc,OAAQ,CAC/B,IAAKb,EAAEe,SAAU,MAAM,IAAIL,UAAU,4CACrCV,EAAEG,MAAQU,CACZ,CACF,CDDS,CAAwBd,GADvB,EAAAK,EAAA,GAAsBJ,EAAGD,GACIa,GAAIA,CAC3C,C,6BELA,SAASI,EAAQC,GAGf,OAAOD,EAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAK,mBAAqBC,QAAUD,EAAEG,cAAgBF,QAAUD,IAAMC,OAAOG,UAAY,gBAAkBJ,CACpH,EAAGD,EAAQC,EACb,CCNA,SAASK,EAActB,GACrB,IAAIuB,ECFN,SAAqBvB,EAAGY,GACtB,GAAI,UAAYI,EAAQhB,KAAOA,EAAG,OAAOA,EACzC,IAAID,EAAIC,EAAEkB,OAAOM,aACjB,QAAI,IAAWzB,EAAG,CAChB,IAAIwB,EAAIxB,EAAEG,KAAKF,EAAGY,GAAK,WACvB,GAAI,UAAYI,EAAQO,GAAI,OAAOA,EACnC,MAAM,IAAIb,UAAU,+CACtB,CACA,OAAQ,WAAaE,EAAIa,OAASC,QAAQ1B,EAC5C,CDPUwB,CAAYxB,EAAG,UACvB,MAAO,UAAYgB,EAAQO,GAAKA,EAAIA,EAAI,EAC1C,CEJA,SAASI,EAAgB5B,EAAGa,EAAGZ,GAC7B,OAAQY,EAAIU,EAAcV,MAAOb,EAAIrB,OAAOkD,eAAe7B,EAAGa,EAAG,CAC/DT,MAAOH,EACP6B,YAAY,EACZC,cAAc,EACdf,UAAU,IACPhB,EAAEa,GAAKZ,EAAGD,CACjB,C,oJCoBA,SAASgC,EAAQhC,EAAGa,GAAK,IAAIZ,EAAItB,OAAOC,KAAKoB,GAAI,GAAIrB,OAAOsD,sBAAuB,CAAE,IAAIf,EAAIvC,OAAOsD,sBAAsBjC,GAAIa,IAAMK,EAAIA,EAAEgB,QAAO,SAAUrB,GAAK,OAAOlC,OAAOwD,yBAAyBnC,EAAGa,GAAGiB,UAAY,KAAK7B,EAAEmC,KAAKC,MAAMpC,EAAGiB,EAAI,CAAE,OAAOjB,CAAG,CAC9P,SAASqC,EAActC,GAAK,IAAK,IAAIa,EAAI,EAAGA,EAAIH,UAAUtC,OAAQyC,IAAK,CAAE,IAAIZ,EAAI,MAAQS,UAAUG,GAAKH,UAAUG,GAAK,CAAC,EAAGA,EAAI,EAAImB,EAAQrD,OAAOsB,IAAI,GAAIsC,SAAQ,SAAU1B,IAAK,OAAgBb,EAAGa,EAAGZ,EAAEY,GAAK,IAAKlC,OAAO6D,0BAA4B7D,OAAO8D,iBAAiBzC,EAAGrB,OAAO6D,0BAA0BvC,IAAM+B,EAAQrD,OAAOsB,IAAIsC,SAAQ,SAAU1B,GAAKlC,OAAOkD,eAAe7B,EAAGa,EAAGlC,OAAOwD,yBAAyBlC,EAAGY,GAAK,GAAI,CAAE,OAAOb,CAAG,CACtb,IAAI0C,EAAgB,CAClBC,WAAY,kBACZC,UAAW,CAAC,EAAG,GAAK,GACpBC,KAlBO,MAoBT,MAAMC,EACJ,WAAAzB,CAAY0B,EAAUC,EAAUC,IAC9B,OAAgBC,KAAM,qBAAiB,IACvC,OAAgBA,KAAM,gBAAY,GAClCA,KAAKH,SAAWA,EAASnF,MAAM,GAC/BsF,KAAKC,cAAgBJ,EAASK,KAAIC,IAAU,CAC1CA,SACAC,gBAAgB,EAChBC,MAAO,SAETL,KAAKM,qBAAuB,IAAIC,sBAAqBC,IACnD,IAAIP,EAAgBD,KAAKC,cAAcvF,MAAM,GAC7C8F,EAAQnB,SAAQoB,IACd,IAAIC,EAAMb,EAASc,QAAQF,EAAMN,QACjCF,EAAcW,OAAOF,EAAK,EAAG,CAC3BP,OAAQM,EAAMN,OACdC,eAAgBK,EAAML,eACtBC,MAAOI,EAAMI,mBACb,IAEJb,KAAKC,cAAgBA,EACrBH,EAASE,KAAKC,cAAc,GAC3Bb,EAAcA,EAAc,CAAC,EAAGI,GAAgBO,IACnDF,EAASR,SAAQyB,GAAOd,KAAKM,qBAAqBS,QAAQD,IAC5D,CACA,UAAAE,GAEEhB,KAAKH,SAASR,SAAQyB,GAAOd,KAAKM,qBAAqBW,UAAUH,KAGjEd,KAAKM,qBAAqBU,YAC5B,EAGF,SAASE,EAAgBC,EAAIzE,EAAM0E,GAC5BD,UAIoB,IAAdC,IACKA,EAEFD,EAAGE,aAAa3E,IAG5ByE,EAAGG,aAAa5E,EAAM,IAEtByE,EAAGI,gBAAgB7E,GAEvB,CACA,SAAS4E,EAAaH,EAAIzE,EAAM8E,GACzBL,IAGDK,EACFL,EAAGG,aAAa5E,EAAM8E,GAEtBL,EAAGI,gBAAgB7E,GAEvB,CACA,IACM+E,EACAC,EAFFC,GACEF,EAA0B,oBAAXnG,OAAyB,CAAC,EAAIA,OAAOsG,QAAQxD,UAC5DsD,EAAQD,EAAMI,SAAWJ,EAAMK,mBAAqBL,EAAMM,sBAC1DN,EAAME,QACD,CAACR,EAAIa,IAAQb,EAAGQ,QAAQK,GAExB,CAACb,EAAIa,KACV,KAAOb,EAAIA,EAAKA,EAAGc,cAAe,GAAIP,EAAMzE,KAAKkE,EAAIa,GAAM,OAAOb,EAClE,OAAO,IAAI,GASjB,SAASe,EAAQC,GACf,MAAO,GAAGzH,MAAMuC,KAAKkF,EACvB,CACA,SAASC,EAAcC,EAAS3F,GAC9B,IAEI4F,EAFAC,EAAS/E,UAAUtC,OAAS,QAAsBsH,IAAjBhF,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9EiF,EAAS,+CAA+CC,OAAOhG,GAEnE,GAAI2F,EAAQI,GAAS,OAAO,EAEvBJ,EAAQI,IAAU,EAEW,mBAAvBnH,OAAOqH,YAChBL,EAAQ,IAAIhH,OAAOqH,YAAYjG,EAAM,CACnCkG,SAAS,EACTC,YAAY,EACZN,YAGFD,EAAQQ,SAASC,YAAY,gBACvBC,gBAAgBtG,GAAM,GAAM,EAAM6F,GAI1C,IAAIU,EAASZ,EAAQD,cAAcE,GAGnC,OAFAD,EAAQI,GAAU,KAEXQ,CACT,CA4EA,SAASC,IACP,MAAsB,oBAAX5H,WACAA,OAAO6H,YAAc7H,OAAO6H,WAAW,4BAA4BtB,QAGhF,CAEA,IAAIuB,EAAmB,iBACvB,SAASC,EAAYC,GAGnB,OAAOA,IAFK9F,UAAUtC,OAAS,QAAsBsH,IAAjBhF,UAAU,GAAmBA,UAAU,GAAK,IAErD8F,IADhB9F,UAAUtC,OAAS,QAAsBsH,IAAjBhF,UAAU,GAAmBA,UAAU,GAAK4F,EAEjF,CACA,SAASG,EAAYC,EAAaC,EAAOC,GACvC,IAAIC,EAAYnG,UAAUtC,OAAS,QAAsBsH,IAAjBhF,UAAU,GAAmBA,UAAU,GAAK,EAChFoG,EAAcH,EAAMzE,OAAO6E,GAC3BC,EAAaL,EAAMC,GAGvB,OAAOL,EAAYG,EAFJI,EAAYA,EAAYjD,QAAQmD,GAAcH,GAC9CC,EAAYA,EAAYjD,QAAQmD,GAAcH,GAE/D,CACA,SAASE,EAAO3G,EAAO6G,EAAOxI,GAC5B,OAAOA,EAAKoF,QAAQzD,KAAW6G,CACjC,C,GC7OIC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB1B,IAAjB2B,EACH,OAAOA,EAAa/I,QAGrB,IAAID,EAAS6I,EAAyBE,GAAY,CACjDE,GAAIF,EACJG,QAAQ,EACRjJ,QAAS,CAAC,GAUX,OANAkJ,EAAoBJ,GAAUjH,KAAK9B,EAAOC,QAASD,EAAQA,EAAOC,QAAS6I,GAG3E9I,EAAOkJ,QAAS,EAGTlJ,EAAOC,OACf,CAGA6I,EAAoBM,EAAID,EC5BxBL,EAAoBO,KAAO,CAAC,ECC5BP,EAAoB3G,EAAKnC,IACxB,IAAIsJ,EAAStJ,GAAUA,EAAOuJ,WAC7B,IAAOvJ,EAAiB,QACxB,IAAM,EAEP,OADA8I,EAAoBU,EAAEF,EAAQ,CAAEpH,EAAGoH,IAC5BA,CAAM,ECLdR,EAAoBU,EAAI,CAACvJ,EAASwJ,KACjC,IAAI,IAAIC,KAAOD,EACXX,EAAoBjG,EAAE4G,EAAYC,KAASZ,EAAoBjG,EAAE5C,EAASyJ,IAC5EpJ,OAAOkD,eAAevD,EAASyJ,EAAK,CAAEjG,YAAY,EAAM5B,IAAK4H,EAAWC,IAE1E,ECNDZ,EAAoBa,EAAI,CAAC,EAGzBb,EAAoBnH,EAAKiI,GACjBC,QAAQC,IAAIxJ,OAAOC,KAAKuI,EAAoBa,GAAGI,QAAO,CAACC,EAAUN,KACvEZ,EAAoBa,EAAED,GAAKE,EAASI,GAC7BA,IACL,KCNJlB,EAAoBmB,EAAKL,KAEX,CAAC,IAAM,oBAAoB,IAAM,WAAWA,IAAYA,GAAW,UAAY,CAAC,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,wBAAwBA,GAAW,OCFjMd,EAAoBoB,SAAYN,GAEnBA,EAAL,4BCHRd,EAAoBjG,EAAI,CAACsH,EAAKC,IAAU9J,OAAO2C,UAAUoH,eAAevI,KAAKqI,EAAKC,GCClFtB,EAAoBtG,EAAKvC,IACH,oBAAX6C,QAA0BA,OAAOwH,aAC1ChK,OAAOkD,eAAevD,EAAS6C,OAAOwH,YAAa,CAAEvI,MAAO,WAE7DzB,OAAOkD,eAAevD,EAAS,aAAc,CAAE8B,OAAO,GAAO,ECL9D+G,EAAoByB,IAAOvK,IAC1BA,EAAOwK,MAAQ,GACVxK,EAAOyK,WAAUzK,EAAOyK,SAAW,IACjCzK,GCHR8I,EAAoB4B,EAAI,qB,MCAxB,GAAwB,oBAAb/C,SAAX,CACA,IAkDIgD,EAAkBf,GACd,IAAIC,SAAQ,CAACe,EAASC,KAC5B,IAAIC,EAAOhC,EAAoBoB,SAASN,GACpCmB,EAAWjC,EAAoB4B,EAAII,EACvC,GAlBmB,EAACA,EAAMC,KAE3B,IADA,IAAIC,EAAmBrD,SAASsD,qBAAqB,QAC7C9H,EAAI,EAAGA,EAAI6H,EAAiBjL,OAAQoD,IAAK,CAChD,IACI+H,GADAC,EAAMH,EAAiB7H,IACRiI,aAAa,cAAgBD,EAAIC,aAAa,QACjE,GAAe,eAAZD,EAAIE,MAAyBH,IAAaJ,GAAQI,IAAaH,GAAW,OAAOI,CACrF,CACA,IAAIG,EAAoB3D,SAASsD,qBAAqB,SACtD,IAAQ9H,EAAI,EAAGA,EAAImI,EAAkBvL,OAAQoD,IAAK,CACjD,IAAIgI,EAEJ,IADID,GADAC,EAAMG,EAAkBnI,IACTiI,aAAa,gBAChBN,GAAQI,IAAaH,EAAU,OAAOI,CACvD,GAMII,CAAeT,EAAMC,GAAW,OAAOH,IAtDrB,EAAChB,EAASmB,EAAUS,EAAQZ,EAASC,KAC3D,IAAIY,EAAU9D,SAAS+D,cAAc,QAErCD,EAAQJ,IAAM,aACdI,EAAQE,KAAO,WACX7C,EAAoB8C,KACvBH,EAAQI,MAAQ/C,EAAoB8C,IAmBrCH,EAAQK,QAAUL,EAAQM,OAjBJ5E,IAGrB,GADAsE,EAAQK,QAAUL,EAAQM,OAAS,KAChB,SAAf5E,EAAMwE,KACTf,QACM,CACN,IAAIoB,EAAY7E,GAASA,EAAMwE,KAC3BM,EAAW9E,GAASA,EAAMnC,QAAUmC,EAAMnC,OAAO8F,MAAQC,EACzDmB,EAAM,IAAIC,MAAM,qBAAuBvC,EAAU,cAAgBoC,EAAY,KAAOC,EAAW,KACnGC,EAAI3K,KAAO,iBACX2K,EAAIE,KAAO,wBACXF,EAAIP,KAAOK,EACXE,EAAIG,QAAUJ,EACVR,EAAQa,YAAYb,EAAQa,WAAWC,YAAYd,GACvDZ,EAAOqB,EACR,GAGDT,EAAQX,KAAOC,EAGXS,EACHA,EAAOc,WAAWE,aAAaf,EAASD,EAAOiB,aAE/C9E,SAAS+E,KAAKC,YAAYlB,EAEb,EAqBbmB,CAAiBhD,EAASmB,EAAU,KAAMH,EAASC,EAAO,IAIxDgC,EAAqB,CACxB,IAAK,GAGN/D,EAAoBa,EAAEmD,QAAU,CAAClD,EAASI,KAEtC6C,EAAmBjD,GAAUI,EAASjG,KAAK8I,EAAmBjD,IACzB,IAAhCiD,EAAmBjD,IAFX,CAAC,IAAM,GAEgCA,IACtDI,EAASjG,KAAK8I,EAAmBjD,GAAWe,EAAef,GAASmD,MAAK,KACxEF,EAAmBjD,GAAW,CAAC,IAC5BjI,IAEH,aADOkL,EAAmBjD,GACpBjI,CAAC,IAET,CA1E0C,C,K7BKvCtD,EAAkB,CACrB,IAAK,GAGFC,EAAgB0O,IACnB,IAGIjE,EAAUa,GAHV,IAACqD,EAAG,QAAEC,EAAO,QAAEC,GAAWH,EAGP7J,EAAI,EAC3B,IAAI4F,KAAYmE,EACZpE,EAAoBjG,EAAEqK,EAASnE,KACjCD,EAAoBM,EAAEL,GAAYmE,EAAQnE,IAI5C,IADGoE,GAASA,EAAQrE,GACf3F,EAAI8J,EAAIlN,OAAQoD,IACpByG,EAAUqD,EAAI9J,GACX2F,EAAoBjG,EAAExE,EAAiBuL,IAAYvL,EAAgBuL,IACrEvL,EAAgBuL,GAAS,KAE1BvL,EAAgB4O,EAAI9J,IAAM,CAC3B,EAID2F,EAAoBa,EAAEyD,EAAI,CAACxD,EAASI,KAElC,IAAIqD,EAAqBvE,EAAoBjG,EAAExE,EAAiBuL,GAAWvL,EAAgBuL,QAAWvC,EACtG,GAA0B,IAAvBgG,EAGF,GAAGA,EACFrD,EAASjG,KAAKsJ,EAAmB,QAC3B,CAGL,IAAIC,EAAUC,OAAO,KAAOzE,EAAoBmB,EAAEL,IAAUmD,KAAKzO,GAAeqD,IAE/E,MADgC,IAA7BtD,EAAgBuL,KAAgBvL,EAAgBuL,QAAWvC,GACxD1F,CAAC,IAEJ2L,EAAUzD,QAAQ2D,KAAK,CAACF,EAAS,IAAIzD,SAASe,GAAayC,EAAqBhP,EAAgBuL,GAAW,CAACgB,OAChHZ,EAASjG,KAAKsJ,EAAmB,GAAKC,EAExC,CACD,E,mB8BjDoO,IAAI3L,EAAE,CAAC8L,eAAe,KAAKC,KAAK,OAAOvK,EAAE,SAASvB,GAAG,IAAIuB,EAAEhB,EAAEU,OAAE,IAASjB,IAAIA,EAAE,CAAC,GAAGiD,KAAK8I,WAAU,EAAG9I,KAAK+I,SAAQ,EAAG/I,KAAKgJ,UAAU,GAAGhJ,KAAK9C,MAAM,CAAC+L,SAAS,EAAEC,UAAU,GAAGlJ,KAAKmJ,KAAK1N,OAAO2N,OAAO,CAAC,EAAEtM,EAAEC,GAAGiD,KAAKqJ,YAAYrJ,KAAKsJ,iBAAiBtJ,KAAKuJ,SAASvJ,KAAKwJ,aAAaxJ,KAAKwJ,aAAaC,KAAKzJ,MAAMA,KAAK0J,iBAAiBpL,EAAE0B,KAAKwJ,aAAa,WAAW,IAAI,IAAIzM,EAAE,GAAGD,EAAEU,UAAUtC,OAAO4B,KAAKC,EAAED,GAAGU,UAAUV,GAAG,IAAIa,EAAEqC,KAAKhC,GAAG2L,aAAarM,GAAGA,EAAEsM,YAAW,WAAWvP,KAAKwP,MAAM7L,GAAG,MAAMM,EAAEa,MAAMxB,EAAEZ,GAAGiB,EAAE3D,KAAKwP,MAAM,GAAE,KAAKxP,KAAKwP,MAAM7L,MAAMM,EAAEa,MAAMxB,EAAEZ,GAAGiB,EAAE3D,KAAKwP,MAAM,EAAE,EAAkMvL,EAAEF,UAAU0L,MAAM,WAAW,oBAAoBxO,SAASA,OAAOyO,iBAAiB,SAAS/J,KAAK0J,iBAAiBpO,OAAOyO,iBAAiB,oBAAoB/J,KAAKwJ,eAAexJ,KAAK+I,SAAQ,CAAE,EAAEzK,EAAEF,UAAU4L,QAAQ,WAAW,oBAAoB1O,SAASA,OAAO2O,oBAAoB,SAASjK,KAAK0J,iBAAiBpO,OAAO2O,oBAAoB,oBAAoBjK,KAAKwJ,eAAexJ,KAAK+I,SAAQ,CAAE,EAAEzK,EAAEF,UAAUkL,eAAe,WAAW,MAAM,oBAAoBhO,OAAOA,OAAO4O,YAAY5O,OAAO6O,WAAW,WAAW,YAAYnK,KAAKmJ,KAAKP,cAAc,EAAEtK,EAAEF,UAAUoL,aAAa,WAAWxJ,KAAKuJ,QAAQ,EAAEjL,EAAEF,UAAUgM,OAAO,SAASrN,GAAG,IAAID,EAAEkD,KAAK,OAAOA,KAAKgJ,UAAU9J,KAAKnC,IAAG,IAAKiD,KAAK+I,SAAS/I,KAAK8J,QAAQ,WAAWhN,EAAEkM,UAAUlM,EAAEkM,UAAUhK,QAAO,SAASlC,GAAG,OAAOA,IAAIC,CAAC,GAAE,CAAC,EAAEuB,EAAEF,UAAUiM,KAAK,WAAW,IAAItN,EAAEiD,KAAKlD,EAAEkD,KAAKsK,QAAQhM,EAAE0B,KAAKuK,YAAYvK,KAAKgJ,UAAU3J,SAAQ,SAAS/B,GAAG,OAAOA,EAAER,EAAEwB,EAAEvB,EAAEsM,YAAY,GAAE,EAAE/K,EAAEF,UAAUmM,UAAU,WAAW,OAAOvK,KAAKqJ,YAAYrJ,KAAK9C,MAAM8C,KAAKqJ,aAAa,CAAC,EAAE/K,EAAEF,UAAUkM,MAAM,WAAW,OAAOtK,KAAKqJ,YAAYrJ,KAAK9C,MAAM8C,KAAKqJ,aAAa,IAAI,CAAC,EAAE/K,EAAEF,UAAUmL,OAAO,WAAW,IAAIxM,EAAEiD,KAAKqJ,YAAY,GAAGrJ,KAAKqJ,YAAYrJ,KAAKsJ,iBAAiBtJ,KAAKqJ,YAAY,CAAC,IAAIvM,EAAEkD,KAAK9C,MAAM8C,KAAKqJ,aAAa/K,EAAEhD,OAAO4O,YAAYnN,IAAIiD,KAAKqJ,aAAa/K,EAAExB,IAAIkD,KAAK9C,MAAM8C,KAAKqJ,aAAa/K,GAAG0B,KAAKqK,QAAQ/L,EAAExB,IAAIkD,KAAK9C,MAAM8C,KAAKqJ,aAAa/K,EAAE0B,KAAKqK,OAAO,CAAC,EAAt0E,WAAa,IAAItN,EAAED,EAAElB,UAAUE,WAAWF,UAAU4O,QAAQlP,OAAOmP,MAAMnM,EAAExB,EAAE4N,cAAc,QAAQ5N,MAAMlB,UAAU+O,UAAU,mBAAmBC,KAAKhP,UAAU+O,YAAY5N,EAAE,2CAA2CA,GAAGA,EAAE6N,KAAKtM,GAAG,CCEjOuM,IDFsxB,WAAa,IAAI9N,EAAE,IAAIuB,EAASvB,EAAEqN,QAAO,SAASrN,GAAG,IAAI+F,SAASsD,qBAAqB,QAAQ,GAAG0E,MAAMC,YAAY,UAAUhO,EAAE,KAAK,CAAC,MAAMA,GAAGiO,QAAQC,MAAMlO,EAAE,CAAC,GAAI,CCG57BmO,G,iDCCF,SAASpM,EAAQhC,EAAGa,GAAK,IAAIZ,EAAItB,OAAOC,KAAKoB,GAAI,GAAIrB,OAAOsD,sBAAuB,CAAE,IAAIf,EAAIvC,OAAOsD,sBAAsBjC,GAAIa,IAAMK,EAAIA,EAAEgB,QAAO,SAAUrB,GAAK,OAAOlC,OAAOwD,yBAAyBnC,EAAGa,GAAGiB,UAAY,KAAK7B,EAAEmC,KAAKC,MAAMpC,EAAGiB,EAAI,CAAE,OAAOjB,CAAG,CAE9P,IAAIoO,EAAW,EAMf,SAASC,EAAYC,GACnB,IAAIC,EAAUH,IACd,OAAOI,IACL,IAAIC,EAAsBC,EAC1B,GAAqD,QAAhDD,EAAuBD,EAAKG,sBAAqD,IAAzBF,GAAmCA,EAAqBF,GACnH,OAAOC,EAET,IAAII,EAAWN,EAAME,GAGrB,OAFAI,EAASD,eAfb,SAAuB5O,GAAK,IAAK,IAAIa,EAAI,EAAGA,EAAIH,UAAUtC,OAAQyC,IAAK,CAAE,IAAIZ,EAAI,MAAQS,UAAUG,GAAKH,UAAUG,GAAK,CAAC,EAAGA,EAAI,EAAImB,EAAQrD,OAAOsB,IAAI,GAAIsC,SAAQ,SAAU1B,IAAK,OAAgBb,EAAGa,EAAGZ,EAAEY,GAAK,IAAKlC,OAAO6D,0BAA4B7D,OAAO8D,iBAAiBzC,EAAGrB,OAAO6D,0BAA0BvC,IAAM+B,EAAQrD,OAAOsB,IAAIsC,SAAQ,SAAU1B,GAAKlC,OAAOkD,eAAe7B,EAAGa,EAAGlC,OAAOwD,yBAAyBlC,EAAGY,GAAK,GAAI,CAAE,OAAOb,CAAG,CAexZsC,CAAc,CAAC,EAAqD,QAAjDqM,EAAwBF,EAAKG,sBAAsD,IAA1BD,EAAmCA,EAAwB,CAAC,GAClKE,EAASD,eAAeJ,IAAW,EAC5BK,CAAQ,CAEnB,CAEA,SAASC,EAA8BtG,EAAKuG,GAAcC,EAA6BxG,EAAKuG,GAAaA,EAAWE,IAAIzG,EAAM,CAC9H,SAAS0G,EAA2B1G,EAAK2G,EAAY/O,GAAS4O,EAA6BxG,EAAK2G,GAAaA,EAAWpO,IAAIyH,EAAKpI,EAAQ,CACzI,SAAS4O,EAA6BxG,EAAK4G,GAAqB,GAAIA,EAAkB3O,IAAI+H,GAAQ,MAAM,IAAI7H,UAAU,iEAAqE,CAC3L,SAAS0O,EAAyBC,EAAUP,EAAYQ,GAAM,IAAKR,EAAWtO,IAAI6O,GAAa,MAAM,IAAI3O,UAAU,kDAAqD,OAAO4O,CAAI,CACnL,IAAIC,EAAyB,oBACzBC,EACa,iBADbA,EAEU,cAFVA,EAGa,iBAiKjB,IAAIC,EAAwBpB,GAxI5B,SAAgCqB,GAC9B,IAAIC,EAAWC,EAA6BC,EAAiCC,EAC7E,OAAOH,EAAyB,IAAII,QAAWH,EAA2C,IAAII,QAAWH,EAA+C,IAAIG,QAAWF,EAAyC,IAAIC,QAAW,cAAcL,EAC3O,WAAAtO,GACE6O,SAASxP,WACToO,EAA8B5L,KAAM4M,GACpChB,EAA8B5L,KAAM2M,GACpCX,EAA2BhM,KAAM0M,EAAW,CAC1C5O,UAAU,EACVZ,WAAO,IAET8O,EAA2BhM,KAAM6M,EAA2B,CAC1D/O,UAAU,EACVZ,MAAO+P,IACL,IAAKC,GAAgBD,EACrB,GAAIC,EAAa9M,eACXJ,KAAKmN,mBAAqBZ,IAC5BvM,KAAKmN,iBAAmBZ,QAG1B,IAAKvM,KAAKmN,kBAAoBnN,KAAKmN,mBAAqBZ,EAA+B,CACrF,IAAI,IACFa,EAAG,OACHC,GACErN,KAAKsN,wBAMLC,EAAUH,GAAO,GAAKC,GAAU/R,OAAO4O,YAC3ClK,KAAKmN,iBAAmBI,EAAUhB,EAAmCA,CACvE,CACF,GAGN,CACA,6BAAWiB,GACT,IAAIC,EACJ,MAAO,IAA4D,QAAtDA,EAAwBT,MAAMQ,0BAA0D,IAA1BC,EAAmCA,EAAwB,GAAKnB,EAC7I,CACA,iBAAAoB,GACE,IAAIC,EACkD,QAArDA,EAAwBX,MAAMU,yBAAyD,IAA1BC,GAAoCA,EAAsB1Q,KAAK+C,MAC7HmM,EAAyBnM,KAAM2M,EAA6BiB,GAA8B3Q,KAAK+C,KACjG,CACA,oBAAA6N,GACE,IAAIC,EACqD,QAAxDA,EAAwBd,MAAMa,4BAA4D,IAA1BC,GAAoCA,EAAsB7Q,KAAK+C,MAChImM,EAAyBnM,KAAM4M,EAAiCmB,GAAkC9Q,KAAK+C,KACzG,CAMA,qBAAIgO,GACF,IAAIC,EAWJ,OAA+D,QAAvDA,EAAwBnL,SAASoL,wBAAwD,IAA1BD,EAAmCA,EAAwBnL,SAASqL,eAC7I,CAMA,4BAAIC,GACF,IAAIJ,EAAoBhO,KAAKgO,kBAC7B,GA7FN,SAAoBA,GAClB,OAEEA,IAAsBlL,SAASoL,kBAAoBF,IAAsBlL,SAASqL,eAEtF,CAwFUE,CAAWL,GAAoB,CACjC,IAAIM,EAAYC,EACZC,EAAWlT,OAAOmT,WAAanT,OAAOoT,OAAOD,SAC7CE,EAAwC,QAA5BL,EAAa1S,iBAAsC,IAAf0S,GAAiE,QAAvCA,EAAaA,EAAWxS,iBAAsC,IAAfwS,GAAyE,QAA/CC,EAAsBD,EAAWM,gBAA8C,IAAxBL,OAAiC,EAASA,EAAoBtR,KAAKqR,EAAY,UAE7R,OAAIE,IAAaG,EAER7L,SAEA,IAEX,CACE,OAAOkL,CAEX,CAOA,oBAAIb,CAAiBjQ,GAEfA,IADe8C,KAAKuG,aAAa+F,IAEnCtM,KAAKsB,aAAagL,EAAwBpP,EAE9C,CAOA,oBAAIiQ,GACF,OAAOnN,KAAKuG,aAAa+F,EAC3B,GAEF,SAASsB,KAEP,OAAsB5N,KAAM0M,EAAW,IAAInM,sBAAqB,OAAsBP,KAAM6M,GAA4B,CACtHnN,UAAW,CAAC,GAEZC,KAAMK,KAAKoO,yBAGX3O,WAAY,wBAEd,OAAsBO,KAAM0M,GAAW3L,QAAQf,KACjD,CACA,SAAS+N,IACP,IAAI3Q,EAAwByR,EAC0C,QAArEzR,GAAyB,OAAsB4C,KAAM0M,UAAmD,IAA3BtP,GAAqCA,EAAuB6D,UAAUjB,MAC9E,QAArE6O,GAAyB,OAAsB7O,KAAM0M,UAAmD,IAA3BmC,GAAqCA,EAAuB7N,YAC5I,CACF,IAOA,SAAS8N,EAA4BxJ,EAAKuG,IAC1C,SAAoCvG,EAAK4G,GAAqB,GAAIA,EAAkB3O,IAAI+H,GAAQ,MAAM,IAAI7H,UAAU,iEAAqE,CADjIsR,CAA2BzJ,EAAKuG,GAAaA,EAAWE,IAAIzG,EAAM,CAK1H,SAAS0J,EAAgC5C,EAAU6C,EAAkBC,EAAYhS,GAAwL,OAA/KiS,EAA+B/C,EAAU6C,GAAmBG,EAAwCF,EAAY,OAG1M,SAAkC9C,EAAU8C,EAAYhS,GAAS,GAAIgS,EAAWrR,IAAOqR,EAAWrR,IAAIZ,KAAKmP,EAAUlP,OAAe,CAAE,IAAKgS,EAAWpR,SAAY,MAAM,IAAIL,UAAU,4CAA+CyR,EAAWhS,MAAQA,CAAO,CAAE,CAH/CmS,CAAyBjD,EAAU8C,EAAYhS,GAAeA,CAAO,CACvR,SAASkS,EAAwCF,EAAYI,GAAU,QAAmB9M,IAAf0M,EAA4B,MAAM,IAAIzR,UAAU,gBAAkB6R,EAAS,+CAAmD,CACzM,SAASH,EAA+B/C,EAAU6C,GAAoB,GAAI7C,IAAa6C,EAAoB,MAAM,IAAIxR,UAAU,4CAAgD,CA8F/K,IAAI8R,EAAwBnE,GA9E5B,SAAgCqB,GAC9B,IAAI+C,EAAQC,EAAoBC,EAChC,OAAOD,EAAkC,IAAI1C,QAAYyC,EAAS,MAAMG,UAAiClD,EACvG,WAAAtO,GACE6O,SAASxP,WACTsR,EAA4B9O,KAAMyP,EACpC,CAMA,0BAAWG,GACT,MAAO,EACT,CACA,6BAAWpC,GACT,IAAIC,EACAmC,EAAkB,CAAC,EAGvB,IAAK,IAAI,UACPC,EAAS,QACTC,KACG9P,KAAK4P,gBAAiB,CACzB,GAAyB,iBAAdC,EACT,MAAMvI,MAAM,+EAEd,IAAKyI,EAAiBC,EAAkBD,GAAmBF,EAAUjT,MAAM,KAC3EgT,EAAgBG,GAAmB,CACjCE,oBAAqBF,EACrBG,oBAAqBF,EACrBF,UAEJ,CAIA,OAHAd,EAAgCW,EAA0BH,EAAQE,EAAkBE,GAG7E,IAA4D,QAAtDnC,EAAwBT,MAAMQ,0BAA0D,IAA1BC,EAAmCA,EAAwB,MAAQhS,OAAOC,KAAKkU,GAC5J,CACA,wBAAAO,CAAyBzT,EAAM0T,EAAUC,GACvC,IAAIC,EAEJ,GAD6D,QAA5DA,EAAwBtD,MAAMmD,gCAAgE,IAA1BG,GAAoCA,EAAsBrT,KAAK+C,KAAMtD,EAAM0T,EAAUC,GACtJA,IAAaD,EAAjB,CAGA,IAjEmChE,EAA4B8C,EAiE3DU,GAjE2DV,EAiEyBQ,EAjEXP,EAA1C/C,EAiEmBuD,EAA0BH,GAjEyDJ,EAAwCF,EAAY,OACnM,SAAkC9C,EAAU8C,GAAc,OAAIA,EAAWlS,IAAckS,EAAWlS,IAAIC,KAAKmP,GAAoB8C,EAAWhS,KAAO,CADiEqT,CAAyBnE,EAAU8C,IAkE/O,GAAIxS,KAAQkT,EAAiB,CAC3B,IAAIY,EAAgBZ,EAAgBlT,GAChCoT,EAAUU,EAAcV,QACxBW,EAtEZ,SAAgCrE,EAAUP,EAAYQ,GAAM,IAAKR,EAAWtO,IAAI6O,GAAa,MAAM,IAAI3O,UAAU,kDAAqD,OAAO4O,CAAI,CAsEpJqE,CAAuB1Q,KAAMyP,EAAoBkB,GAAqB1T,KAAK+C,KAAM8P,GACtG,IAAK,IAAIzN,KAAWoO,EACD,OAAbJ,EACFhO,EAAQf,aAAakP,EAAcN,oBAAqBG,GAExDhO,EAAQd,gBAAgBiP,EAAcN,oBAG5C,CAbA,CAcF,GACCR,EAAmB,CACpB5R,UAAU,EACVZ,WAAO,GACNsS,EACH,SAASmB,EAAoBb,GAC3B,GAAuB,mBAAZA,EACT,OAAOA,EAAQ9P,MACV,GAAuB,iBAAZ8P,EAChB,OAAOc,MAAMC,KAAK7Q,KAAK8Q,iBAAiBhB,IAExC,MAAM,IAAIxI,MAAM,6BAA6B5E,cAAcoN,GAE/D,CACF,IC/RA,SAAS,EAA4BxK,EAAKuG,GAAc,EAA2BvG,EAAKuG,GAAaA,EAAWE,IAAIzG,EAAM,CAC1H,SAAS,EAA2BA,EAAK2G,EAAY/O,GAAS,EAA2BoI,EAAK2G,GAAaA,EAAWpO,IAAIyH,EAAKpI,EAAQ,CACvI,SAAS,EAA2BoI,EAAK4G,GAAqB,GAAIA,EAAkB3O,IAAI+H,GAAQ,MAAM,IAAI7H,UAAU,iEAAqE,CACzL,SAAS,EAAuB2O,EAAUP,EAAYQ,GAAM,IAAKR,EAAWtO,IAAI6O,GAAa,MAAM,IAAI3O,UAAU,kDAAqD,OAAO4O,CAAI,CAIjL,IAAI0E,EAAyB,uBACzBC,EAAmB,cAGnBC,EAAa,qBACbC,EAAuB,uBAGvBC,EAAa,aAKjB,SAASC,EAAUtQ,GACjB,OAAOA,EAAIO,aAAa6P,EAC1B,CACA,SAASG,EAAavQ,GACpB,OAAOA,EAAIO,aAAa4P,EAC1B,CAeA,IAAIK,EAAmC,IAAIxE,QACvCJ,EAAyB,IAAII,QAC7BH,EAA2C,IAAII,QAC/CH,EAA+C,IAAIG,QACnDwE,EAAoC,IAAIzE,QACxC0E,EAAmC,IAAIzE,QACvC0E,EAAkC,IAAI1E,QACtC2E,EAAgC,IAAI3E,QACxC,MAAM4E,UAAuBnF,EAAsB+C,EAAsBqC,eACvE,WAAAzT,GACE6O,SAASxP,WACT,EAA4BwC,KAAM0R,GAClC,EAA4B1R,KAAMyR,GAClC,EAA4BzR,KAAMwR,GAClC,EAA4BxR,KAAM4M,GAClC,EAA4B5M,KAAM2M,GAClC,EAA2B3M,KAAMsR,EAAqB,CACpDxT,UAAU,EACVZ,WAAO,IAET,EAA2B8C,KAAM0M,EAAW,CAC1C5O,UAAU,EACVZ,WAAO,IAET,EAA2B8C,KAAMuR,EAAsB,CACrDzT,UAAU,EACVZ,MAAO+C,IACL,IAAI4R,EAAqB5R,EAAcjB,QAAOV,GAAKA,EAAE8B,iBAAgB0R,MACrE,GAAKD,GAAuBA,EAAmB1R,OAA/C,CAIA,IAAI4R,EAAiBF,EAAmB1R,OAGxCH,KAAKgS,mBAAqBD,EAAexL,aAAa2K,GAGtD,IAGMe,EAHFC,EAAgBH,EAAexL,aAjEtB,uBAkET4L,EAAiBJ,EAAexL,aAjEtB,wBAkEd,GAAI2L,EAEkD,QAAnDD,EAAwBjS,KAAKoS,wBAAwD,IAA1BH,GAAoCA,EAAsB3Q,aAAa4Q,EAAeC,GAEpJnS,KAAKqS,gBAAgBhT,SAAQyB,IAAO,QAAaA,EAAKqQ,EAAYrQ,IAAQiR,EAAiB,cAAWvP,KACtG,IAAI8P,EAAetS,KAAKqS,gBAAgB1R,QAAQoR,GAC5CO,KAAiB,OAAsBtS,KAAMsR,MAC/C,OAAsBtR,KAAMsR,EAAqBgB,IACjD,QAActS,KArEM,4CAqEyB,CAC3CsS,eACAC,aAAcvS,KAAKgS,mBACnBE,gBACAC,mBArBJ,MAFE,OAAsBnS,KAAMsR,EAAqB,KAyBnD,GAGN,CACA,6BAAW9D,GACT,MAAO,IAAIR,MAAMQ,mBAAoBwD,EAAkBD,EACzD,CAGA,0BAAWnB,GACT,MAAO,CAAC,CACNC,UAAW,GAAGnN,OAAO4J,EAAwB,KAAK5J,OAzFtB,0BA0F5BoN,QAAS0C,GAAYA,EAASC,aAElC,CACA,iBAAA/E,GACEV,MAAMU,oBACN,EAAuB1N,KAAMyR,EAAoBiB,GAAqBzV,KAAK+C,MAC3E,EAAuBA,KAAM2M,EAA6BiB,GAA8B3Q,KAAK+C,KAC/F,CACA,oBAAA6N,GACEb,MAAMa,uBACN,EAAuB7N,KAAM4M,EAAiCmB,GAAkC9Q,KAAK+C,KACvG,CACA,wBAAAmQ,CAAyBzT,EAAM0T,EAAUC,GACvCrD,MAAMmD,yBAAyBzT,EAAM0T,EAAUC,GAC3C3T,IAASsU,GACX,EAAuBhR,KAAM4M,EAAiCmB,GAAkC9Q,KAAK+C,MACrG,EAAuBA,KAAM2M,EAA6BiB,GAA8B3Q,KAAK+C,OACpFtD,IAAS4P,GAClB,EAAuBtM,KAAMwR,EAAqBmB,GAAsB1V,KAAK+C,MAC7E,EAAuBA,KAAMyR,EAAoBiB,GAAqBzV,KAAK+C,OAClEtD,IAASqU,GAClB,EAAuB/Q,KAAMyR,EAAoBiB,GAAqBzV,KAAK+C,KAE/E,CACA,mBAAIqS,GACF,OAAO,QAAQrS,KAAK4F,UAAU5G,OAAOoS,EACvC,CACA,eAAIqB,GACF,OAAO,QAAQzS,KAAK4F,UAAU5G,OAAOqS,EACvC,CAIA,cAAI5R,GACF,OAAOO,KAAKuG,aAAayK,IAAqB,iBAChD,CACA,cAAIvR,CAAWmT,GACb5S,KAAKsB,aAAa0P,EAAkB4B,GAAO,kBAC7C,CACA,sBAAIZ,CAAmB9U,GACjBA,IAAU8C,KAAKgS,oBACjBhS,KAAKsB,aAAayP,EAAwB7T,EAE9C,CACA,sBAAI8U,GACF,OAAOhS,KAAKuG,aAAawK,EAC3B,CACA,oBAAIqB,GACF,OAAOpS,KAAK6S,cAAc,IAAInQ,OAAOuO,EAAY,MAAOvO,OAAO1C,KAAKgS,mBAAoB,MAC1F,EAEF,SAASpE,KACP,OAAsB5N,KAAM0M,EAAW,IAAI,KAA4B1M,KAAKqS,iBAAiB,OAAsBrS,KAAMuR,GAAuB,CAC9I5R,KAAMK,KAAKoO,yBACX3O,WAAYO,KAAKP,aAErB,CACA,SAASsO,KACH,OAAsB/N,KAAM0M,KAC9B,OAAsB1M,KAAM0M,GAAW1L,YAE3C,CACA,SAAS2R,IACP,IAAIxF,EAAmBnN,KAAKmN,iBAC5B,GAAIA,IAAqBZ,GAAoCY,IAAqBZ,EAAkC,CAClH,IAAI8F,EAAkBrS,KAAKqS,gBAC3B,GAAIA,EAAgBnX,OAAS,EAAG,CAC9B,IAAIoX,EAAenF,IAAqBZ,EAAmC8F,EAAgBnX,OAAS,EAAI,EACxG8E,KAAKgS,mBAAqBK,EAAgBC,GAAc/L,aAAa2K,EACvE,CACF,CACF,CACA,SAASwB,IACP,IAAIV,EAAqBhS,KAAKgS,mBAC1BS,EAAczS,KAAKyS,YACvBA,EAAYpT,SAAQ,CAACyT,EAAYpS,KAC/B,IAIIqS,EAHAC,EADeF,EAAWvM,aAAa0K,KACXe,EAC5BiB,EAAa,EAAuBjT,KAAM0R,EAAkBwB,GAAmBjW,KAAK+C,KAAMyS,EAAa/R,EAAM,KAAOsR,EACpHmB,EAAa,EAAuBnT,KAAM0R,EAAkBwB,GAAmBjW,KAAK+C,KAAMyS,EAAa/R,EAAM,KAAOsR,EAEpHgB,EACFD,EAAQ,SACCE,EACTF,EAAQ,OACCI,IACTJ,EAAQ,QAGNA,IADeD,EAAWvM,aAAa4K,KAEzC,QAAa2B,EAAY3B,EAAY4B,EACvC,GAEJ,CACA,SAASG,EAAkBT,EAAa1O,GACtC,GAAI0O,EAAY1O,GACd,OAAO0O,EAAY1O,GAAOwC,aAAa0K,EAE3C,CChNA,SAAgB,OAAS,sBAAsB,QAAU,uBAAuB,kBAAoB,iCAAiC,aAAa,0BAA0B,UAAY,0BAA0B,cAAc,2BAA2B,WAAa,2BAA2B,KAAO,oBAAoB,WAAa,0BAA0B,iBAAiB,8BAA8B,cAAgB,+BCApa,EAA4K,oBCQ7J,MAAMmC,UAA0BzB,EAAexT,WAAAA,IAAAkV,GAAA,SAAAA,GAAA,KAwC5DC,aAAgBxW,IACd,MAAMyW,EAAoBzW,EAAEqD,SAAUwB,EAAAA,EAAAA,IAAQ7E,EAAEqD,OAAQ,wBAClDqT,EAAiB1W,EAAEqD,SAAUwB,EAAAA,EAAAA,IAAQ7E,EAAEqD,OAAQ,IAAIsT,EAAOC,WAChE,IAAI3B,EACJ,GAAIwB,EAAmB,CACrB,MAAMhB,EAAegB,EAAkBhN,aAAa,sBAChDvG,KAAKgS,qBAAuBO,IAC9BR,EAAiB/R,KAAKqS,gBAAgBsB,MACnC7S,GAAQA,EAAIyF,aAAa,0BAA4BgM,IAG5D,MAAWiB,IACTzB,EAAiByB,EAAeI,oBAG9B7B,GAAgE,WAA9CA,EAAexL,aAAa,eAChDjL,OAAOuY,SAAS,EAAG9B,EAAe+B,UAAYxY,OAAO4O,YAAc,EACrE,EACD,KAED6J,uBAAyB,KACvB,MAAMtB,EAAczS,KAAKyS,YACnBJ,EAAkBrS,KAAKqS,gBAC7B,KAAKI,GAAgBA,EAAYvX,QAAWmX,GAAoBA,EAAgBnX,QAC9E,OAGF,MAAM8Y,EAAYhU,KAAKiU,mBAEjBnB,EAAaL,EAAYkB,MAAMO,GAAMA,EAAEC,eAC7C,IAAKrB,EACH,OAEF,MAAMsB,GAAeJ,EAAYlB,EAAWqB,cAAgB,EAEtDE,EAAkBhC,EAAgB,GACrCQ,cAAc,IAAIyB,KAClBhH,wBAAwBiH,OACrBC,EAAiBnC,EAAgBA,EAAgBnX,OAAS,GAC7D2X,cAAc,IAAIyB,KAClBhH,wBAAwBiH,OAE3B,IAAKE,MAAML,GAAc,CACvBpU,KAAK8K,MAAMC,YAAY,qBAAsB,GAAGqJ,OAChDpU,KAAK8K,MAAMC,YAAY,uBAAwB,GAAGsJ,OAClDrU,KAAK8K,MAAMC,YAAY,sBAAuB,GAAGyJ,OAEjD,MAAME,EAAsB,KAAK,EAAIN,GAAaO,QAAQ,OAC1D3U,KAAKP,WAAa,GAAGiV,SAA2BA,OAClD,EACD,CAzFDhH,iBAAAA,GACEV,MAAMU,oBACNkH,sBAAsB5U,KAAK+T,wBAC3BzY,OAAOyO,iBAAiB,SAAU/J,KAAK+T,wBAGvC,IAAK,MAAMjT,KAAOd,KAAK8Q,iBAAiB,0BACtChQ,EAAI+T,SAAW,KAEjB7U,KAAK+J,iBAAiB,QAAS/J,KAAKsT,cAAc,EACpD,CAEAzF,oBAAAA,GACEb,MAAMa,uBACNvS,OAAO2O,oBAAoB,SAAUjK,KAAK+T,wBAC1C/T,KAAKiK,oBAAoB,QAASjK,KAAKsT,cAAc,EACvD,CAEAW,gBAAAA,GAME,IACE,MAAM5R,EAAUS,SAAS+D,cAAc,OACvCxE,EAAQyI,MAAMyJ,OAAS,2BACvBlS,EAAQyI,MAAMgK,SAAW,WACzBzS,EAAQyI,MAAMsC,IAAM,IACpB/K,EAAQyI,MAAMiK,KAAO,IACrBjS,SAASqL,gBAAgBrG,YAAYzF,GACrC,MAAM2R,EAAY3R,EAAQ8R,aAE1B,OADArR,SAASqL,gBAAgBzG,YAAYrF,GAC9B2R,CACT,CAAE,MAAOlX,GACP,OAAOxB,OAAO4O,WAChB,CACF,EC5CF,IAAI8K,EAAa,QACbC,GAAmB,cACnBC,GAAmB,mBACnB,GAAa,aACb,GAAyB,yBACzBC,GAKgB,EAMhBC,GAAYC,GAASA,EAAMC,YAAc,GAAKD,EAAMlB,aAAe,EAUvE,MAAMoB,WAAqB3D,YACzB,WAAAzT,GACE6O,SAASxP,YACT,OAAgBwC,KAAM,WAAW,IACjC,OAAgBA,KAAM,kBAAkB,IACxC,OAAgBA,KAAM,6BAA6B,IACnD,OAAgBA,KAAM,uBAAuBlD,IACvCsY,GAAUtY,EAAEqD,SAAWrD,EAAEqD,OAAOqV,YAAcL,IAChDnV,KAAKyV,YACP,KAEF,OAAgBzV,KAAM,gBAAgBlD,IAEpC,IADU,QAAQA,EAAEqD,OAAQ,UAC5B,CAKA,IAAIuV,EAAe1V,KAAK0V,aACxB,GAAIA,SAAoDA,EAAaC,QACjDD,EAAaE,QAAU5Q,QAAQe,WACrCmC,MAAK,KACflI,KAAK6V,iBAAkB,CAAK,GAPhC,CASA,GAEJ,CACA,6BAAWrI,GACT,MAAO,CAACyH,GAAkB,GAAY,GACxC,CACA,iBAAAvH,GACE1N,KAAK+J,iBAAiB,QAAS/J,KAAK8V,cACpC9V,KAAK+V,cAAc1W,SAAQqW,GAAgBA,EAAa3L,iBAAiB,iBAAkB/J,KAAKgW,sBAClG,CACA,oBAAAnI,GACE7N,KAAKiW,gBAAiB,EACtBjW,KAAKiK,oBAAoB,QAASjK,KAAK8V,cACvC9V,KAAK+V,cAAc1W,SAAQqW,GAAgBA,EAAazL,oBAAoB,iBAAkBjK,KAAKgW,sBACrG,CACA,wBAAA7F,CAAyBzT,EAAMwZ,EAAW7F,GACxC,IAAI8F,EAAwB,OAAb9F,EACI6F,IAAc7F,IAI7B3T,IAAS,GACXsD,KAAKoW,cAAcF,EAAW7F,GACrB3T,IAAS,GAClBsD,KAAKqW,iBAAiBhG,GACb3T,IAASuY,IAClBkB,GAAYnW,KAAKyV,aAErB,CACA,aAAAW,CAAcE,EAAWC,GACL,WAAdA,GACgB,SAAdD,EACFtW,KAAKwW,aACkB,SAAdF,GACTtW,KAAKyW,WAEPzW,KAAKyV,cAELzV,KAAK0W,SAAU,CAEnB,CACA,gBAAAL,CAAiBhG,GACE,gBAAbA,GACFrQ,KAAK2W,WACL3W,KAAKyV,cACiB,mBAAbpF,GACTrQ,KAAK0W,SAAU,EACf1W,KAAKyW,YACiB,mBAAbpG,IACTrQ,KAAK0W,SAAU,EACf1W,KAAKwW,aAET,CACA,WAAAI,GACE,IAAIC,EACAC,OAA8C,IAA1B9W,KAAKmN,kBAA8D,gBAA1BnN,KAAKmN,iBACtE,OAAqD,QAA5C0J,EAAqB7W,KAAK0V,oBAAiD,IAAvBmB,OAAgC,EAASA,EAAmBrB,aAAeL,IAAgC2B,GAA6B,WAAf9W,KAAK+S,KAC7L,CACA,QAAA4D,GACE,IAAIjB,EAAe1V,KAAK0V,cACnBA,aAAmD,EAASA,EAAaF,YAAcL,KAC1FO,SAAoDA,EAAaqB,OAErE,CACA,UAAAP,GACE,IAAIxW,KAAK6V,gBAAT,CAGA,IAAIH,EAAe1V,KAAK0V,aACpBA,GAA6C,IAA7BA,EAAalS,cAC/BkS,EAAalS,YAAc,EAH7B,CAKF,CACA,QAAAiT,GACE,IAAIzW,KAAK6V,gBAAT,CAGA,IAAIH,EAAe1V,KAAK0V,aACpBsB,EAAWtB,aAAmD,EAASA,EAAasB,SACpFvY,OAAOwY,SAASD,KAClBtB,EAAalS,YAAcwT,EAJ7B,CAMF,CACA,0BAAAE,GACE,IAAIxB,EAAe1V,KAAK0V,aACxB,OAAI1V,KAAKmX,4BAA8BzB,EAC9B1Q,QAAQe,WAET2P,EAAaE,QAAU5Q,QAAQe,SAAQ,IAAOmC,MAAK,KACzDwN,EAAa0B,QACbpX,KAAKmX,2BAA4B,CAAI,IACpCE,OAAMva,OAGX,CACA,UAAA2Y,GACE,GAAKzV,KAAK0W,SAAY1W,KAAK4W,cAA3B,CAGA,IAEIU,EAFAC,GAAgB,UACpBvX,KAAK0W,SAAU,EAEf,IAAIc,EAAOC,IACT,IAAI/B,EAAe1V,KAAK0V,aACpB5R,EAAa9D,KAAKyD,MAAMzD,KAAK0D,YACjC,GAAI1D,KAAKiW,gBAAkBjW,KAAK0W,UAAYhB,IAAiBuB,SAASnT,GAGpE,OAFA9D,KAAK0W,SAAU,OACfhB,SAAoDA,EAAa0B,SAG9DE,IACHA,EAAWG,GAEbzX,KAAK0X,uBAAuB1Y,QAAO2Y,IAAUA,EAAMhC,SAAQtW,SAAQuY,GAAkBA,EAAeR,UACpG,IA9IS/a,EAAKwb,EACdC,EA6IIC,GAAMN,EAAYH,GAAY,IAE9BU,EAAS,GADOje,KAAKke,IAAIle,KAAKme,KAAKne,KAAKmC,IAtJjC,GAsJqC6b,IAAmB,GAtJxD,GAwJPvU,EAAckS,EAAalS,YAE/B,IADmB,QAAYA,EAAaM,EAAakU,EAAQlU,EAAakU,GAExEtC,EAAalS,cAAgBM,IAC/B4R,EAAalS,YAAcM,GAE7B9D,KAAK0W,SAAU,EACfhB,EAAa0B,aACR,GAAIG,EACTvX,KAAKkX,6BAA6BhP,MAAK,KACrCwN,EAAalS,YAAcM,EAC3B9D,KAAK0W,SAAU,CAAI,QAEhB,CACL,IAAIyB,EAAQnY,KAAKoY,gBAAgB5U,GAC7B6U,EAAiBvU,EAAaN,GAlK1B,EAAI,GAAK,EAmKjB,GAAIxD,KAAK6V,sBAAwB,GAAkB,IAAdwC,EAAiB,CAGpD,GADA3C,EAAa4C,aAAeH,EACxBzC,EAAaC,QACGD,EAAaE,QAAU5Q,QAAQe,WACrCsR,OAAMva,IAChBkO,QAAQC,MAAMnO,GACdkD,KAAK6V,iBAAkB,CAAI,GAGjC,KAAO,CAGLH,EAAa0B,QACb,IAAImB,GA/KClc,EA+KgBmH,EAAcuU,EAAKI,EAAQE,EA/KtCR,EA+KiD,EA9K/DC,EAAa/d,KAAKC,IAAI,GAAM6d,GACzB9d,KAAKye,MAAMnc,EAAMyb,GAAcA,GA8K1BtU,IAAgB+U,IAClB7C,EAAalS,YAAc+U,EAE/B,CACAjB,EAAWG,EACX7C,sBAAsB4C,EACxB,GAGF5C,sBAAsB4C,EA3DtB,CA4DF,CACA,eAAAY,CAAgB5U,GACd,OAAO,QAAYA,EAAaxD,KAAKyD,MAAOzD,KAAK0D,WAAY,GAAK,EAAI,CACxE,CACA,gBAAIgS,GACF,OAAO1V,KAAK+V,cAAcpC,KAAKyB,GACjC,CACA,0BAAIsC,GACF,OAAO1X,KAAK+V,cAAc/W,QAAOqW,IAAUD,GAAUC,IACvD,CACA,iBAAIU,GACF,OAAO,QAAQ/V,KAAK4F,UAAU5G,QAAOqW,GAA4B,UAAnBA,EAAMoD,UACtD,CACA,SAAIhV,GAEF,OADiBzD,KAAKuG,aAAayO,IAAe,IAChC0D,QAAQ,SAAU,IAAI9b,MAAM,KAAKsD,KAAI3D,GAAKA,EAAEoc,SAAQ3Z,OAAO4Z,SAAS1Y,KAAI3D,GAAKkC,OAAOlC,IACxG,CACA,SAAIkH,CAAMmP,GACR5S,KAAKsB,aAAa0T,EAAYpC,EAAI1S,KAAI7D,GAAOA,EAAIsY,QAAQ,KAAIkE,KAAK,KACpE,CACA,cAAInV,GACF,OAAOjF,OAAOuB,KAAKuG,aAAa0O,KAAqB,EACvD,CACA,cAAIvR,CAAWkP,GACb5S,KAAKsB,aAAa2T,GAAkBrC,EACtC,CACA,SAAIG,GACF,OAAO/S,KAAKuG,aAAa,GAC3B,CACA,SAAIwM,CAAMH,IACR,QAAa5S,KAAM,GAAY4S,EACjC,CACA,oBAAIzF,GACF,OAAOnN,KAAKuG,aAAa,GAC3B,CACA,oBAAI4G,CAAiByF,GACnB5S,KAAKsB,aAAa,GAAwBsR,EAC5C,CACA,mBAAIiD,GACF,OAAO7V,KAAKqB,aAAa6T,MAAqB,CAChD,CACA,mBAAIW,CAAgBjD,IAClB,QAAgB5S,KAAMkV,GAAkBtC,EAC1C,EC3PF,IAAI,GAAa,aACb,GAAyB,yBACzBkG,GAAiC,4BACjCC,GAAY,YACZ,GAAmB,mBACnB,GAKgB,EAEhB,GAAY1D,KAAWA,EAAM2D,aACjC,MAAMC,WAA0BrH,YAC9B,WAAAzT,GACE6O,SAASxP,YACT,OAAgBwC,KAAM,kBAAkB,IACxC,OAAgBA,KAAM,4BAAwB,IAC9C,OAAgBA,KAAM,qBAAqBlD,IAC1B,SAAXA,EAAEgK,OACJ,QAAc9G,KAAM,+BAElBlD,EAAEqD,SAAWH,KAAKkZ,uBACpBlZ,KAAKmZ,SAAWnZ,KAAKkZ,qBAAqBvD,OAC5C,KAEF,OAAgB3V,KAAM,oBAAoB,KACnCA,KAAKkZ,uBAGNlZ,KAAK4W,cACP5W,KAAKoZ,aAELpZ,KAAKqZ,cACP,KAEF,OAAgBrZ,KAAM,iBAAiB,KACrCA,KAAKsZ,4BAA4B,GAErC,CACA,6BAAW9L,GACT,MAAO,CAAC,GAAYsL,GAAgC,GACtD,CACA,iBAAApL,GACE1N,KAAKuZ,sBACLvZ,KAAKwZ,qBACLxZ,KAAKsZ,4BACP,CACA,oBAAAzL,GACE7N,KAAKiW,gBAAiB,EACtBjW,KAAKyZ,uBACP,CACA,wBAAAtJ,CAAyBzT,EAAMwZ,EAAW7F,GAEpC3T,IAAS,IAAcA,IAAS,IADjBwZ,IAAc7F,IAG7BrQ,KAAKsZ,6BACLtZ,KAAK0Z,mBACDhd,IAAS,IAAuC,gBAAb2T,GACrCrQ,KAAK2W,WAIb,CACA,kBAAA6C,GACEle,OAAOyO,iBAAiB,SAAU/J,KAAK2Z,eACvC3Z,KAAK+V,cAAc1W,SAAQ8B,IACzBA,EAAG4I,iBAAiB,QAAS/J,KAAK4Z,mBAClCzY,EAAG4I,iBAAiB,OAAQ/J,KAAK4Z,mBACjCzY,EAAG4I,iBAAiB,iBAAkB/J,KAAK0Z,iBAAiB,GAEhE,CACA,qBAAAD,GACEne,OAAO2O,oBAAoB,SAAUjK,KAAK2Z,eAC1C3Z,KAAK+V,cAAc1W,SAAQ8B,IACzBA,EAAG8I,oBAAoB,QAASjK,KAAK4Z,mBACrCzY,EAAG8I,oBAAoB,OAAQjK,KAAK4Z,mBACpCzY,EAAG8I,oBAAoB,iBAAkBjK,KAAK0Z,iBAAiB,GAEnE,CACA,0BAAAJ,GAEE1E,uBAAsB,KACpB,IAAIiF,EAAmB7Z,KAAK+V,cAAcpC,KAAK,IAC3CkG,IAAqB7Z,KAAKkZ,uBAE5BlZ,KAAKqZ,cACLrZ,KAAKkZ,qBAAuBW,EACxB7Z,KAAK8Z,kBACP9Z,KAAK2W,WAEP3W,KAAK0Z,mBACP,GAEJ,CACA,mBAAAH,GACOvZ,KAAK+Z,yBACR/Z,KAAK+V,cAAc1W,SAAQ8B,IACzBA,EAAGG,aAAa,cAAe,IAC/BH,EAAGG,aAAa,OAAQ,IACxBH,EAAGG,aAAa,wBAAyB,IACzCH,EAAGG,aAAa,mBAAoB,OAAO,GAGjD,CACA,WAAAsV,GACE,IAAIoD,EAKJ,OAAgE,QAAvDA,EAAwBha,KAAKkZ,4BAA4D,IAA1Bc,OAAmC,EAASA,EAAsBxE,aAAe,IAA+C,WAAfxV,KAAK+S,OAAgD,gBAA1B/S,KAAKmN,gBAC3N,CACA,cAAA2M,GACE,MAAiC,gBAA1B9Z,KAAKmN,gBACd,CACA,QAAAwJ,GACE,IAAIsD,EAEEC,GADwD,QAAxDD,EAAyBja,KAAKkZ,4BAA6D,IAA3Be,OAAoC,EAASA,EAAuBzE,YAAc,KAE7F,QAAxD0E,EAAyBla,KAAKkZ,4BAA6D,IAA3BgB,GAAqCA,EAAuBnD,OAEjI,CACA,UAAAqC,IACE,QAAcpZ,KAAM,+BACpB,IAAIuX,GAAgB,UAChB7B,EAAe1V,KAAKkZ,sBACpBxD,EAAaC,QAAW4B,GAAkBvX,KAAK6V,kBAC/BH,EAAaE,QAAU5Q,QAAQe,WACrCsR,OAAMva,IAChBkO,QAAQC,MAAMnO,GACdkD,KAAK6V,iBAAkB,CAAI,GAGjC,CACA,WAAAwD,GACE,IAAI3D,EAAe1V,KAAKkZ,qBACpBxD,IAAiBA,EAAaC,QAChCD,EAAa0B,OAEjB,CACA,iBAAIrB,GACF,OAAO,QAAQ/V,KAAK8Q,iBAAiB,SACvC,CACA,2BAAIiJ,GACF,OAAO/Z,KAAKqB,aAAayX,GAC3B,CACA,SAAI/F,GACF,OAAO/S,KAAKuG,aAAa,GAC3B,CACA,SAAIwM,CAAMH,GACR5S,KAAKsB,aAAa,GAAYsR,EAChC,CACA,YAAIuG,GACF,OAAOnZ,KAAKuG,aAAawS,GAC3B,CACA,YAAII,CAASvG,GACPA,EACF5S,KAAKsB,aAAayX,GAAW,IAE7B/Y,KAAKuB,gBAAgBwX,GAEzB,CACA,mBAAIlD,GACF,OAAO7V,KAAKqB,aAAa,MAAqB,CAChD,CACA,mBAAIwU,CAAgBjD,IAClB,QAAgB5S,KAAM,GAAkB4S,EAC1C,CACA,oBAAIzF,GACF,OAAOnN,KAAKuG,aAAa,GAC3B,CACA,oBAAI4G,CAAiByF,GACnB5S,KAAKsB,aAAa,GAAwBsR,EAC5C,EC/KF,MACMzB,GAAa,aACb7E,GAAyB,oBAGzB0I,GAAa,QACbC,GAAmB,cAMV,MAAMkF,WAAqBvI,YACxC,6BAAWpE,GACT,MAAO,CAAC2D,GAAY7E,GAAwB0I,GAAYC,GAC1D,CAEAvH,iBAAAA,GAAqB,CAErBG,oBAAAA,GAAwB,CAExBsC,wBAAAA,CAAyBzT,EAAM0d,EAAMC,GAC/BD,IAASC,GAGbra,KAAKsa,sBACP,CAEAA,oBAAAA,GACE,MAAMvH,EAAQ/S,KAAK+S,MACb5F,EAAmBnN,KAAKmN,iBACxBoN,EAAiBva,KAAKua,eACtB9W,EAAQzD,KAAKyD,MACbC,EAAa1D,KAAK0D,WACxB6W,EAAelb,SAASmb,KACtBlZ,EAAAA,EAAAA,IAAakZ,EAAcrJ,GAAY4B,IACvCzR,EAAAA,EAAAA,IAAakZ,EAjCiB,yBAiC0BrN,GACpD1J,GAASA,EAAMvI,UACjBoG,EAAAA,EAAAA,IAAakZ,EAAcxF,GAAYvR,IACvCnC,EAAAA,EAAAA,IAAakZ,EAAcvF,GAAkBvR,GAC/C,GAEJ,CAEA,kBAAI6W,GACF,OAAOrY,EAAAA,EAAAA,IAAQlC,KAAK8Q,iBA7CD,0CA8CrB,CAEA,oBAAI3D,GACF,OAAOnN,KAAKuG,aAAa+F,GAC3B,CAEA,oBAAIa,CAAiBjQ,IACnBoE,EAAAA,EAAAA,IAAatB,KAAMsM,GAAwBpP,EAC7C,CAEA,SAAI6V,GACF,OAAO/S,KAAKuG,aAAa4K,GAC3B,CAEA,SAAI4B,CAAM7V,IACRoE,EAAAA,EAAAA,IAAatB,KAAMmR,GAAYjU,EACjC,CAEA,SAAIuG,GACF,OAAOzD,KAAKuG,aAAayO,GAC3B,CAEA,SAAIvR,CAAMmP,GACR5S,KAAKsB,aAAa0T,GAAYpC,EAChC,CAEA,cAAIlP,GACF,OAAOjF,OAAOuB,KAAKuG,aAAa0O,IAClC,CAEA,cAAIvR,CAAWkP,GACb5S,KAAKsB,aAAa2T,GAAkBrC,EACtC,E,OChFcnX,OAAOkD,eACNlD,OAAO8D,iBACA9D,OAAO6D,0BACL7D,OAAOsD,sBACdtD,OAAO2C,UAAUoH,eACjB/J,OAAO2C,UAAUqc,qBAoMpC,IC7LIC,GAAY,wBAgEhB,SAASC,GAAUC,QAEapY,IAA1BqY,WAAWH,MAEbG,WAAWH,IAAa,SAAUI,GAChCD,WAAWH,IAAWK,EAAE7b,KAAK4b,EAC/B,EACAD,WAAWH,IAAWK,EAAI,IAe9B,SAAkBC,GAEhB,GADgBlY,SAAS+P,cAAc,eAAkBmI,EAAM,MAE7D,OAEF,IAAIC,EAASnY,SAAS+D,cAAc,UACpCoU,EAAOC,OAAQ,EACfD,EAAOD,IAAMA,EACblY,SAAS+E,KAAKC,YAAYmT,EAC5B,CApBIE,CAASC,wEAIXP,WAAWH,IAAWE,EACxB,CC5FgBnf,OAAOkD,eACNlD,OAAO8D,iBACA9D,OAAO6D,0BACL7D,OAAOsD,sBACdtD,OAAO2C,UAAUoH,eACjB/J,OAAO2C,UAAUqc,qBALpC,IAuDI,GAA+B,CAAEY,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,IAAgB,CAAC,GCjEpB,MACaC,GACA,6CADAA,GAEI,iDAuBV,SAASC,GACdC,GACA,KAAEC,EAAI,OAAEC,IAER,GAAIpgB,OAAOqgB,gBACT,OAGF,IACIC,EADAC,GAAe,EAEnB,MAAMC,EAAa,GAIbC,EAAmC,GAAGP,KAAaE,IAEzD,SAASM,EAAc1Z,GACrB,IAAqB,IAAjBuZ,EAEF,YADAC,EAAW5c,KAAKoD,GAIlB,MAAM,WAAE2Z,EAAU,SAAEC,GAAaN,EACjCM,EAASC,yBACP,CACE7Z,QACA8Z,QAASH,EAAWG,QAAQC,QAAQ,CAAC,UAAW,OAAQN,KAE1D,CAACP,GAEL,CAoCA,OAlCAb,IAAW2B,IACTV,EAAUU,EACV,MAAM,WAAEL,GAAeK,EA7C3B,IAA0B7T,EAAuB8T,EA8C7CN,EAAWO,WAAWhB,EA7DX,YA6D8BC,GAMrCC,GACFO,EAAWG,QAAQve,IAAIke,EAAkBU,GAAaC,QAAgB,CACpEC,OAAQ,KACRvY,GAAIsX,KAvDcjT,EA2DLwT,EAAWW,SAASC,UAAU,gBA3DFN,EA2DmB,IA1D3DvX,QAAQ2D,KAAK,CAClBF,EAAQP,MAAK,KAAM,IACnB,IAAIlD,SAAkBe,IACpB6D,YAAW,KACT7D,GAAQ,EAAM,GACbwW,EAAK,OAsDPrU,MAAM4U,IACLjB,GAAe,GACI,IAAfiB,GACF9R,QAAQ+R,KAAK,+BAIf,IAAK,IAAIze,EAAIwd,EAAW5gB,OAAS,EAAGoD,GAAK,EAAGA,IAAK,CAE/C0d,EADcF,EAAWhK,MAE3B,CAEM,IAEPuF,MAAMrM,QAAQC,MAAM,IAGlB+Q,CACT,C,sLCrFA,MAAM1V,IAAM7J,EAAAA,EAAAA,eAAcugB,uBAAcC,UAExC,SAASC,GAAWC,EAAahf,QACgB,IAApCif,eAAepgB,IAAImgB,IAC5BC,eAAeC,OAAOF,EAAahf,EAEvC,CAAC,IAAAuO,GAAA4Q,GAAA,YAAAC,GAAAD,GAAA,sBAAAE,GAAAF,GAAA,0BAAAG,GAAAH,GAAA,yBAAAI,GAAAJ,GAAA,wBAAAK,GAAAL,GAAA,SAEM,MAAMM,WAAmBhM,YAAYzT,WAAAA,IAAAkV,GAAA,SAAAA,GAAA5X,OAAAkD,eAAA,KAAAgf,GAAA,CAAA3gB,IAAA6gB,GAAAhgB,SAAA,IAAApC,OAAAkD,eAAA,KAAA+e,GAAA,CAAAxgB,MAAA4gB,KAAAriB,OAAAkD,eAAA,KAAA8e,GAAA,CAAAvgB,MAAA6gB,KAAAtiB,OAAAkD,eAAA,KAAA4e,GAAA,CAAArgB,MAAA8gB,KAAA,KAC1CthB,KAAO4J,GAAG7K,OAAAkD,eAAA,KAAA+N,GAAA,CAAA5O,UAAA,EAAAZ,WAAA,IAAAzB,OAAAkD,eAAA,KAAA6e,GAAA,CAAA1f,UAAA,EAAAZ,MAgDiBJ,IAAM,IAAAmhB,EAE/B,MAAM3b,EAAQ,CACZ4b,OAAQ5C,GACRnT,KAAM,CAAE7E,QAASxG,EAAEyF,OAAO+P,aAAe,EAAG6L,MAAOC,GAAApe,KAAI2d,IAAAA,IAAQziB,SAE1C,OAAvB+iB,EAAAje,KAAKqe,qBAALJ,EAAAhhB,KAAA+C,KAA0BsC,EAAM,GACjC,CApDD,uBAAMoL,GACJ1N,KAAK+J,iBAAiB,4CAA2CqU,GAAEpe,KAAIwd,IAAAA,KAEvEY,GAAApe,KAAIud,IAAAA,MACJa,GAAApe,KAAIyd,IAAAA,MAEJzd,KAAKqe,mBAAqB9C,GAAa,uBAAwB,CAC7DE,KAAMzb,KAAKse,QAAQC,aACnB7C,OAAQ1b,KAAKse,QAAQ5C,aAAUlZ,GAEnC,CAEAqL,oBAAAA,GACE7N,KAAKiK,oBACH,4CAA2CmU,GAC3Cpe,KAAIwd,IAAAA,KAENY,GAAApe,KAAI0d,IAAAA,KACN,CAgFA,YAAIc,GACF,OAAOC,KAAKC,MAAM1e,KAAKuG,aAAa,aAAe,KACrD,EAKD,eAAAyX,KA9EG,GANAd,GAAW,uBAAwB9J,GACnC8J,GAAW,4BAA6B3H,IACxC2H,GAAW,iCAAkCjE,IAC7CiE,GAAW,qBAAsB/C,IAI/Bna,KAAKwe,SAASG,aAC8C,IAArDvB,eAAepgB,IAAI,8BAC1B,CAIAkgB,GAAW,oCAFH,8BACN0B,QAEJ,CAEA,GAAI5e,KAAKwe,SAASK,WAA0D,IAA3CzB,eAAepgB,IAAI,oBAAqC,CAIvFkgB,GAAW,0BAHS,sDACjB0B,QAGL,CACF,CAAC,SAAAb,KAYC,GAAIziB,OAAOqgB,gBACT,OAGF,IAAImD,GAAa,EACbC,GAAe,EAGnBX,GAAApe,KAAI0M,IAAAA,IAAa,IAAInM,sBAClBN,IAAkB,IAAA+e,EACjB,IAAI5e,EAAiC,OAAnB4e,EAAG/e,EAAc,SAAE,EAAhB+e,EAAkB5e,eACvC,IAAK0e,GAAc1e,GAAkBJ,KAAKsN,wBAAwBF,IAAM,EAAG,KAAA6R,EACzEH,GAAa,EAEb,MAAMxc,EAAQ,CACZ4b,OAAQ5C,GACRnT,KAAM,CAAE+W,KAAM,UAEO,OAAvBD,EAAAjf,KAAKqe,qBAALY,EAAAhiB,KAAA+C,KAA0BsC,EAC5B,MAAO,GACLwc,IACCC,IACA3e,GACDJ,KAAKsN,wBAAwBD,OAAS,EACtC,KAAA8R,EACAJ,GAAe,EAEf,MAAMzc,EAAQ,CACZ4b,OAAQ5C,GACRnT,KAAM,CAAE+W,KAAM,SAEO,OAAvBC,EAAAnf,KAAKqe,qBAALc,EAAAliB,KAAA+C,KAA0BsC,EAC5B,IAEF,CAAE5C,UAAW,CAAC,KAEhB0e,GAAApe,KAAI0M,IAAAA,IAAW3L,QAAQf,KACzB,CAAC,SAAA8d,KAEuB,IAAAsB,EAClB,OAAJA,EAAAhB,GAAApe,KAAI0M,IAAAA,MAAJ0S,EAAgBpe,YAClB,CAAC,SAAA6c,KAOC,OAAO7d,KAAK8Q,iBAAiB,IAAIwD,IACnC,CAGF4I,GAAW5W,GAAKsX,G","sources":["webpack://dh-forklaringsscroll/webpack/runtime/import chunk loading","webpack://dh-forklaringsscroll/./node_modules/cuid/index.js","webpack://dh-forklaringsscroll/./node_modules/cuid/lib/fingerprint.browser.js","webpack://dh-forklaringsscroll/./node_modules/cuid/lib/getRandomValue.browser.js","webpack://dh-forklaringsscroll/./node_modules/cuid/lib/pad.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/dh-server-libs/get-element-tag.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/dh-server-libs/src/get-element-tag.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://dh-forklaringsscroll/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/dh-basis-common/dist/index.esm.js","webpack://dh-forklaringsscroll/webpack/bootstrap","webpack://dh-forklaringsscroll/webpack/runtime/amd options","webpack://dh-forklaringsscroll/webpack/runtime/compat get default export","webpack://dh-forklaringsscroll/webpack/runtime/define property getters","webpack://dh-forklaringsscroll/webpack/runtime/ensure chunk","webpack://dh-forklaringsscroll/webpack/runtime/get javascript chunk filename","webpack://dh-forklaringsscroll/webpack/runtime/get mini-css chunk filename","webpack://dh-forklaringsscroll/webpack/runtime/hasOwnProperty shorthand","webpack://dh-forklaringsscroll/webpack/runtime/make namespace object","webpack://dh-forklaringsscroll/webpack/runtime/node module decorator","webpack://dh-forklaringsscroll/webpack/runtime/publicPath","webpack://dh-forklaringsscroll/webpack/runtime/css loading","webpack://dh-forklaringsscroll/./node_modules/@nrk/dh-vh/dist/index.mjs","webpack://dh-forklaringsscroll/./src/polyfills.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/dh-basis-mixins/dist/index.esm.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/dh-basis-scrollhistorie/dist/index.esm.js","webpack://dh-forklaringsscroll/./src/components/forklaringsscroll.module.css?d4f0","webpack://dh-forklaringsscroll/./src/components/cards/cards.module.css?fefa","webpack://dh-forklaringsscroll/./src/components/forklaringsscroll.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/dh-basis-stegvis-video/dist/index.esm.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/dh-basis-levende-stillbilde/dist/index.esm.js","webpack://dh-forklaringsscroll/./src/components/media/spesialmodul.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/nrkno-snowplow/node_modules/@nrk/snowplow-web/index.js","webpack://dh-forklaringsscroll/./node_modules/@nrk/nrkno-snowplow/build-npm/nrkno-snowplow.package.mjs","webpack://dh-forklaringsscroll/./node_modules/@nrk/snowplow-web/index.js","webpack://dh-forklaringsscroll/./src/lib/snowplow.ts","webpack://dh-forklaringsscroll/./src/client.js"],"sourcesContent":["// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\nvar installChunk = (data) => {\n\tvar {ids, modules, runtime} = data;\n\t// add \"modules\" to the modules object,\n\t// then flag all \"ids\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in modules) {\n\t\tif(__webpack_require__.o(modules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = modules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\tfor(;i < ids.length; i++) {\n\t\tchunkId = ids[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[ids[i]] = 0;\n\t}\n\n}\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// import() chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[1]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = import(\"./\" + __webpack_require__.u(chunkId)).then(installChunk, (e) => {\n\t\t\t\t\t\tif(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t});\n\t\t\t\t\tvar promise = Promise.race([promise, new Promise((resolve) => (installedChunkData = installedChunks[chunkId] = [resolve]))])\n\t\t\t\t\tpromises.push(installedChunkData[1] = promise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no external install chunk\n\n// no on chunks loaded","/**\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","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","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classPrivateFieldGet2 from \"./classPrivateFieldGet2.js\";\nfunction _classPrivateFieldGet(e, t) {\n var r = classPrivateFieldGet2(t, e);\n return classApplyDescriptorGet(e, r);\n}\nexport { _classPrivateFieldGet as default };","function _classApplyDescriptorGet(e, t) {\n return t.get ? t.get.call(e) : t.value;\n}\nexport { _classApplyDescriptorGet as default };","import assertClassBrand from \"./assertClassBrand.js\";\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(assertClassBrand(s, a));\n}\nexport { _classPrivateFieldGet2 as default };","function _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\nexport { _assertClassBrand as default };","import classApplyDescriptorSet from \"./classApplyDescriptorSet.js\";\nimport classPrivateFieldGet2 from \"./classPrivateFieldGet2.js\";\nfunction _classPrivateFieldSet(e, t, r) {\n var s = classPrivateFieldGet2(t, e);\n return classApplyDescriptorSet(e, s, r), r;\n}\nexport { _classPrivateFieldSet as default };","function _classApplyDescriptorSet(e, t, l) {\n if (t.set) t.set.call(e, l);else {\n if (!t.writable) throw new TypeError(\"attempted to set read only private field\");\n t.value = l;\n }\n}\nexport { _classApplyDescriptorSet as default };","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","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 /*\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(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\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 _defineProperty(this, \"elements\", void 0);\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 disconnect() {\n // Unregister trigger elements\n this.elements.forEach(elm => this.intersectionObserver.unobserve(elm));\n\n // Disconnect intersection observer\n this.intersectionObserver.disconnect();\n }\n}\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n var nextValue;\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\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 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 if (proto.closest) {\n return (el, css) => el.closest(css);\n } else {\n return (el, css) => {\n for (; el; el = el.parentElement) if (match.call(el, css)) return el;\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;\n // 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 }\n // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\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}\nclass VerticalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n this.container = container;\n }\n cancel() {\n this._cancelled = true;\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 var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n if (!startTime) {\n startTime = currentTime - 1;\n }\n var timeElapsed = currentTime - startTime;\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 // eslint-disable-next-line compat/compat\n window.requestAnimationFrame(loop);\n }\n}\nclass HorizontalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n this.container = container;\n }\n cancel() {\n this._cancelled = true;\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 var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n if (!startTime) {\n startTime = currentTime - 1;\n }\n var timeElapsed = currentTime - startTime;\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 // eslint-disable-next-line compat/compat\n window.requestAnimationFrame(loop);\n }\n}\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\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}\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 * */\nfunction loadImage(image) {\n if (image.loading === 'lazy') {\n image.loading = 'eager';\n }\n}\nfunction connectScrollContainerLazyLoad(container, images) {\n var containerIntersecting = false;\n var deferredImages = [];\n\n // eslint-disable-next-line compat/compat\n var containerObserver = new IntersectionObserver(entries => {\n containerIntersecting = entries === null || entries === void 0 ? void 0 : entries[0].isIntersecting;\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);\n\n // eslint-disable-next-line compat/compat\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 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 for (var image of images) {\n imageObserver.observe(image);\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 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=index.esm.js.map\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\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"667\":\"dh-stegvis-lottie\",\"750\":\"dh-kart\"}[chunkId] || chunkId) + \"-chunk-\" + {\"529\":\"698a7e05e8cdf73caf75\",\"667\":\"26123313cbb614e056c7\",\"750\":\"157f5e7ce8fe92aa8b2a\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + \"a829592c9123ececa37f\" + \".css\";\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"https://static.nrk.no/dh/module/forklaringsscroll/static/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"529\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","function t(){var t,e=navigator.userAgent||navigator.vendor||window.opera,i=e.toLowerCase();return!!e&&(!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform)&&(t=/fban|fbav|instagram|firefox|opera|fxios/),t&&t.test(i))}var e={ssrOrientation:null,mode:\"max\"},i=function(t){var i,n,o;void 0===t&&(t={}),this.destroyed=!1,this.mounted=!1,this.listeners=[],this.value={portrait:0,landscape:0},this.opts=Object.assign({},e,t),this.orientation=this.getOrientation(),this.update(),this.handleUpdate=this.handleUpdate.bind(this),this.throttledUpdate=(i=this.handleUpdate,function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=this;o?(clearTimeout(n),n=setTimeout(function(){Date.now()-o>=100&&(i.apply(r,t),o=Date.now())},100-(Date.now()-o))):(i.apply(r,t),o=Date.now())})};function n(){var t=new i;return t.listen(function(t){try{document.getElementsByTagName(\"html\")[0].style.setProperty(\"--dh-vh\",t+\"px\")}catch(t){console.error(t)}}),t}function o(){return\"Dh Vh\"}i.prototype.mount=function(){\"undefined\"!=typeof window&&(window.addEventListener(\"resize\",this.throttledUpdate),window.addEventListener(\"orientationchange\",this.handleUpdate)),this.mounted=!0},i.prototype.destroy=function(){\"undefined\"!=typeof window&&(window.removeEventListener(\"resize\",this.throttledUpdate),window.removeEventListener(\"orientationchange\",this.handleUpdate)),this.mounted=!1},i.prototype.getOrientation=function(){return\"undefined\"!=typeof window?window.innerHeight>window.innerWidth?\"portrait\":\"landscape\":this.opts.ssrOrientation},i.prototype.handleUpdate=function(){this.update()},i.prototype.listen=function(t){var e=this;return this.listeners.push(t),!1===this.mounted&&this.mount(),function(){e.listeners=e.listeners.filter(function(e){return e!==t})}},i.prototype.emit=function(){var t=this,e=this.getVh(),i=this.getHeight();this.listeners.forEach(function(n){return n(e,i,t.orientation)})},i.prototype.getHeight=function(){return this.orientation?this.value[this.orientation]:0},i.prototype.getVh=function(){return this.orientation?this.value[this.orientation]/100:0},i.prototype.update=function(){var t=this.orientation;if(this.orientation=this.getOrientation(),this.orientation){var e=this.value[this.orientation],i=window.innerHeight;t!==this.orientation?(i>e&&(this.value[this.orientation]=i),this.emit()):i>e&&(this.value[this.orientation]=i,this.emit())}};export{o as test,t as checkHasVhBug,n as fixVhBug};\n//# sourceMappingURL=index.mjs.map\n","import { checkHasVhBug, fixVhBug } from '@nrk/dh-vh'\n\nif (checkHasVhBug()) {\n fixVhBug()\n}\n","import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nvar dedupeId = 0;\n\n/**\n * @template {HTMLElement} BaseClass\n * @param {(base: BaseClass) => BaseClass} mixin\n */\nfunction dedupeMixin(mixin) {\n var mixinId = dedupeId++;\n return base => {\n var _base$_appliedMixins, _base$_appliedMixins2;\n if ((_base$_appliedMixins = base._appliedMixins) !== null && _base$_appliedMixins !== void 0 && _base$_appliedMixins[mixinId]) {\n return base;\n }\n var extended = mixin(base);\n extended._appliedMixins = _objectSpread({}, (_base$_appliedMixins2 = base._appliedMixins) !== null && _base$_appliedMixins2 !== void 0 ? _base$_appliedMixins2 : {});\n extended._appliedMixins[mixinId] = true;\n return extended;\n };\n}\n\nfunction _classPrivateMethodInitSpec$1(obj, privateSet) { _checkPrivateRedeclaration$1(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration$1(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet$1(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar VIEWPORT_POSITION_ATTR = 'viewport-position';\nvar VIEWPORT_POSITIONS = {\n aboveViewport: 'ABOVE-VIEWPORT',\n inViewport: 'IN-VIEWPORT',\n belowViewport: 'BELOW-VIEWPORT'\n};\n\n/**\n * Check if element represents the browser viewport\n *\n * @param viewportContainer Element to check\n * @returns {boolean} True if element represents the browser viewport and not a scroll container\n */\nfunction isViewport(viewportContainer) {\n return (\n // eslint-disable-next-line compat/compat\n viewportContainer === document.scrollingElement || viewportContainer === document.documentElement\n );\n}\n\n/**\n * Custom Element mixin.\n *\n * Updates the `viewport-position` attribute according to whether the element is in the viewport or not.\n * Possible values for the attribute is `IN-VIEWPORT`, `ABOVE-VIEWPORT` and `BELOW-VIEWPORT`\n *\n * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base\n */\nfunction _ViewportPositionMixin(Base) {\n var _observer, _createIntersectionObserver, _disconnectIntersectionObserver, _handleIntersectionChange;\n return _observer = /*#__PURE__*/new WeakMap(), _createIntersectionObserver = /*#__PURE__*/new WeakSet(), _disconnectIntersectionObserver = /*#__PURE__*/new WeakSet(), _handleIntersectionChange = /*#__PURE__*/new WeakMap(), class extends Base {\n constructor() {\n super(...arguments);\n _classPrivateMethodInitSpec$1(this, _disconnectIntersectionObserver);\n _classPrivateMethodInitSpec$1(this, _createIntersectionObserver);\n _classPrivateFieldInitSpec(this, _observer, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _handleIntersectionChange, {\n writable: true,\n value: _ref => {\n var [intersection] = _ref;\n if (intersection.isIntersecting) {\n if (this.viewportPosition !== VIEWPORT_POSITIONS.inViewport) {\n this.viewportPosition = VIEWPORT_POSITIONS.inViewport;\n }\n } else {\n if (!this.viewportPosition || this.viewportPosition === VIEWPORT_POSITIONS.inViewport) {\n var {\n top,\n bottom\n } = this.getBoundingClientRect();\n\n // The latest chrome reports bcr.bottom to be 0.5\n // Instead of checking that the bottom is outside the viewport\n // we check that the top of the element is above the viewport,\n // and that the bottom of the element is above the bottom of the viewport\n var isAbove = top <= 0 && bottom <= window.innerHeight;\n this.viewportPosition = isAbove ? VIEWPORT_POSITIONS.aboveViewport : VIEWPORT_POSITIONS.belowViewport;\n }\n }\n }\n });\n }\n static get observedAttributes() {\n var _super$observedAttrib;\n return [...((_super$observedAttrib = super.observedAttributes) !== null && _super$observedAttrib !== void 0 ? _super$observedAttrib : []), VIEWPORT_POSITION_ATTR];\n }\n connectedCallback() {\n var _super$connectedCallb;\n (_super$connectedCallb = super.connectedCallback) === null || _super$connectedCallb === void 0 || _super$connectedCallb.call(this);\n _classPrivateMethodGet$1(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n }\n disconnectedCallback() {\n var _super$disconnectedCa;\n (_super$disconnectedCa = super.disconnectedCallback) === null || _super$disconnectedCa === void 0 || _super$disconnectedCa.call(this);\n _classPrivateMethodGet$1(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n }\n /**\n * Get the viewport or the scroll container element that is used as a replacement for the viewport.\n *\n * @returns {Element|HTMLElement} viewportContainer\n */\n get viewportContainer() {\n var _document$scrollingEl;\n /*\n * Using root/document.scrollingElement to represent the viewport,\n * as this presents a unified API for scrolling for both the viewport and scrolling elements.\n * (scrollTop, scrollLeft, scrollTo)\n *\n * Some API's such as IntersectionObserver use different values for the viewport\n * (such as null and document), so take care.\n */\n\n // eslint-disable-next-line compat/compat\n return (_document$scrollingEl = document.scrollingElement) !== null && _document$scrollingEl !== void 0 ? _document$scrollingEl : document.documentElement;\n }\n\n /**\n * Get the intersection root\n * @returns {null|Element|HTMLElement|Document}\n */\n get viewportIntersectionRoot() {\n var viewportContainer = this.viewportContainer;\n if (isViewport(viewportContainer)) {\n var _navigator, _navigator$includes;\n var isIFrame = window.location !== window.parent.location;\n var isChrome = (_navigator = navigator) === null || _navigator === void 0 || (_navigator = _navigator.userAgent) === null || _navigator === void 0 || (_navigator$includes = _navigator.includes) === null || _navigator$includes === void 0 ? void 0 : _navigator$includes.call(_navigator, 'Chrome');\n // Chrome has a bug when using document in as IntersectionObserver root: https://bugs.chromium.org/p/chromium/issues/detail?id=1420155\n if (isIFrame && !isChrome) {\n /* Use document as intersection root in iframes */\n return document;\n } else {\n return null;\n }\n } else {\n return viewportContainer;\n }\n }\n\n /**\n * Position of this element relative to the viewport.\n *\n * @type {'ABOVE-VIEWPORT' | 'IN-VIEWPORT' | 'BELOW-VIEWPORT' }\n */\n set viewportPosition(value) {\n var currentValue = this.getAttribute(VIEWPORT_POSITION_ATTR);\n if (value !== currentValue) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, value);\n }\n }\n\n /**\n * Position of this element relative to the viewport.\n *\n * @type {'ABOVE-VIEWPORT' | 'IN-VIEWPORT' | 'BELOW-VIEWPORT' }\n */\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n };\n function _createIntersectionObserver2() {\n // eslint-disable-next-line compat/compat\n _classPrivateFieldSet(this, _observer, new IntersectionObserver(_classPrivateFieldGet(this, _handleIntersectionChange), {\n threshold: [0],\n // Intersection observer uses null or document for regular viewport\n root: this.viewportIntersectionRoot,\n // Scroll snapping elements trigger intersection when they are perfectly aligned with the screen,\n // both above and below the viewport. Using -1px as root margin to prevent intersection.\n rootMargin: '-1px 0px -1px 0px'\n }));\n _classPrivateFieldGet(this, _observer).observe(this);\n }\n function _disconnectIntersectionObserver2() {\n var _classPrivateFieldGet2, _classPrivateFieldGet3;\n (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _observer)) === null || _classPrivateFieldGet2 === void 0 || _classPrivateFieldGet2.unobserve(this);\n (_classPrivateFieldGet3 = _classPrivateFieldGet(this, _observer)) === null || _classPrivateFieldGet3 === void 0 || _classPrivateFieldGet3.disconnect();\n }\n}\n\n/**\n * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base */\nvar ViewportPositionMixin = dedupeMixin(_ViewportPositionMixin);\n\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nfunction _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classCheckPrivateStaticFieldDescriptor(descriptor, action) { if (descriptor === undefined) { throw new TypeError(\"attempted to \" + action + \" private static field before its declaration\"); } }\nfunction _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError(\"Private static access of wrong provenance\"); } }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\n/**\n * @typedef BoundAttributeConfig\n * @property {string} attribute – name of attribute to bind, or name of source and target attributes separated with a semicolon\n * @property {string | function } targets – selector string or function that takes element as argument and returns list of target elements\n */\n\n/**\n * Custom element mixin that creates a one way binding between an attribute on\n * the custom element and a given attribute on it's children.\n *\n * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base\n */\nfunction _AttributeBindingMixin(Base) {\n var _class, _getTargetElements, _boundAttributes;\n return _getTargetElements = /*#__PURE__*/new WeakSet(), (_class = class AttributeBindingMixinDef extends Base {\n constructor() {\n super(...arguments);\n _classPrivateMethodInitSpec(this, _getTargetElements);\n }\n /**\n * Configure the bound attributes.\n *\n * @returns {BoundAttributeConfig[]}\n */\n static get boundAttributes() {\n return [];\n }\n static get observedAttributes() {\n var _super$observedAttrib;\n var boundAttributes = {};\n\n // Parse and store configuration for faster lookup\n for (var {\n attribute,\n targets\n } of this.boundAttributes) {\n if (typeof attribute !== 'string') {\n throw Error('Bound attribute configuration must have `attribute` property of string type');\n }\n var [sourceAttribute, targetAttribute = sourceAttribute] = attribute.split(':');\n boundAttributes[sourceAttribute] = {\n sourceAttributeName: sourceAttribute,\n targetAttributeName: targetAttribute,\n targets\n };\n }\n _classStaticPrivateFieldSpecSet(AttributeBindingMixinDef, _class, _boundAttributes, boundAttributes);\n\n // Observe bound attributes\n return [...((_super$observedAttrib = super.observedAttributes) !== null && _super$observedAttrib !== void 0 ? _super$observedAttrib : []), ...Object.keys(boundAttributes)];\n }\n attributeChangedCallback(name, oldValue, newValue) {\n var _super$attributeChang;\n (_super$attributeChang = super.attributeChangedCallback) === null || _super$attributeChang === void 0 || _super$attributeChang.call(this, name, oldValue, newValue);\n if (newValue === oldValue) {\n return;\n }\n var boundAttributes = _classStaticPrivateFieldSpecGet(AttributeBindingMixinDef, _class, _boundAttributes);\n if (name in boundAttributes) {\n var configuration = boundAttributes[name];\n var targets = configuration.targets;\n var targetElements = _classPrivateMethodGet(this, _getTargetElements, _getTargetElements2).call(this, targets);\n for (var element of targetElements) {\n if (newValue !== null) {\n element.setAttribute(configuration.targetAttributeName, newValue);\n } else {\n element.removeAttribute(configuration.targetAttributeName);\n }\n }\n }\n }\n }, _boundAttributes = {\n writable: true,\n value: void 0\n }, _class);\n function _getTargetElements2(targets) {\n if (typeof targets === 'function') {\n return targets(this);\n } else if (typeof targets === 'string') {\n return Array.from(this.querySelectorAll(targets));\n } else {\n throw new Error(\"Unsupported targets type: \".concat(typeof targets));\n }\n }\n}\n\n/**\n * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base\n */\nvar AttributeBindingMixin = dedupeMixin(_AttributeBindingMixin);\n\nexport { AttributeBindingMixin, VIEWPORT_POSITIONS, VIEWPORT_POSITION_ATTR, ViewportPositionMixin };\n//# sourceMappingURL=index.esm.js.map\n","import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\nimport { toArray, setAttribute, dispatchEvent, ElementIntersectionObserver } from '@nrk/dh-basis-common';\nimport { ViewportPositionMixin, AttributeBindingMixin, VIEWPORT_POSITION_ATTR, VIEWPORT_POSITIONS } from '@nrk/dh-basis-mixins';\n\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\n\n/* Attributes */\n// VIEWPORT_POSITION_ATTR – Added by ViewportPositionMixin\nvar ACTIVE_BACKGROUND_ATTR = 'active-background-id';\nvar ROOT_MARGIN_ATTR = 'root-margin';\n\n/* Child attributes */\nvar BG_ID_ATTR = 'data-background-id';\nvar SHOW_BACKGROUND_ATTR = 'data-show-background';\nvar ATTRIBUTE_NAME = 'data-attribute-name';\nvar ATTRIBUTE_VALUE = 'data-attribute-value';\nvar STATE_ATTR = 'data-state';\nvar VIEWPORT_POSITION_DATA_ATTR = 'data-viewport-position';\n\n/* Events */\nvar TRIGGER_ACTIVATED_EVENT = 'dh-basis-scrollhistorie-trigger-activated';\nfunction isTrigger(elm) {\n return elm.hasAttribute(SHOW_BACKGROUND_ATTR);\n}\nfunction isBackground(elm) {\n return elm.hasAttribute(BG_ID_ATTR);\n}\n\n/**\n * Custom element that manages a set of background and trigger elements.\n *\n * Background elements are annotated with a `data-background-id` attribute.\n *\n * Trigger elements are annotated with a `data-show-background` attribute,\n * `data-attribute-name` and `data-attribute-value` attributes.\n *\n *\n * When a trigger element comes into view it will set the `data-state` attribute\n * of the corresponding background to `ACTIVE`.\n * The previous and next background will get `data-state`=`PREV` and `NEXT`.\n */\nvar _activeTriggerIndex = /*#__PURE__*/new WeakMap();\nvar _observer = /*#__PURE__*/new WeakMap();\nvar _createIntersectionObserver = /*#__PURE__*/new WeakSet();\nvar _disconnectIntersectionObserver = /*#__PURE__*/new WeakSet();\nvar _handleTriggerChange = /*#__PURE__*/new WeakMap();\nvar _prepareBackgrounds = /*#__PURE__*/new WeakSet();\nvar _updateBackgrounds = /*#__PURE__*/new WeakSet();\nvar _getBackgroundId = /*#__PURE__*/new WeakSet();\nclass Scrollhistorie extends ViewportPositionMixin(AttributeBindingMixin(HTMLElement)) {\n constructor() {\n super(...arguments);\n _classPrivateMethodInitSpec(this, _getBackgroundId);\n _classPrivateMethodInitSpec(this, _updateBackgrounds);\n _classPrivateMethodInitSpec(this, _prepareBackgrounds);\n _classPrivateMethodInitSpec(this, _disconnectIntersectionObserver);\n _classPrivateMethodInitSpec(this, _createIntersectionObserver);\n _classPrivateFieldInitSpec(this, _activeTriggerIndex, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _observer, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _handleTriggerChange, {\n writable: true,\n value: intersections => {\n var activeIntersection = intersections.filter(i => i.isIntersecting).pop();\n if (!activeIntersection || !activeIntersection.target) {\n _classPrivateFieldSet(this, _activeTriggerIndex, null);\n return;\n }\n var triggerElement = activeIntersection.target;\n\n // Set active background\n this.activeBackgroundId = triggerElement.getAttribute(SHOW_BACKGROUND_ATTR);\n\n // Update attribute on active background\n var attributeName = triggerElement.getAttribute(ATTRIBUTE_NAME);\n var attributeValue = triggerElement.getAttribute(ATTRIBUTE_VALUE);\n if (attributeName) {\n var _this$activeBackgroun;\n (_this$activeBackgroun = this.activeBackground) === null || _this$activeBackgroun === void 0 || _this$activeBackgroun.setAttribute(attributeName, attributeValue);\n }\n this.triggerElements.forEach(elm => setAttribute(elm, STATE_ATTR, elm === triggerElement ? 'ACTIVE' : undefined));\n var triggerIndex = this.triggerElements.indexOf(triggerElement);\n if (triggerIndex !== _classPrivateFieldGet(this, _activeTriggerIndex)) {\n _classPrivateFieldSet(this, _activeTriggerIndex, triggerIndex);\n dispatchEvent(this, TRIGGER_ACTIVATED_EVENT, {\n triggerIndex,\n backgroundId: this.activeBackgroundId,\n attributeName,\n attributeValue\n });\n }\n }\n });\n }\n static get observedAttributes() {\n return [...super.observedAttributes, ROOT_MARGIN_ATTR, ACTIVE_BACKGROUND_ATTR];\n }\n\n // Binding VIEWPORT-POSITION attribute to background DATA-VIEWPORT-POSITION attribute\n static get boundAttributes() {\n return [{\n attribute: \"\".concat(VIEWPORT_POSITION_ATTR, \":\").concat(VIEWPORT_POSITION_DATA_ATTR),\n targets: instance => instance.backgrounds\n }];\n }\n connectedCallback() {\n super.connectedCallback();\n _classPrivateMethodGet(this, _updateBackgrounds, _updateBackgrounds2).call(this);\n _classPrivateMethodGet(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n _classPrivateMethodGet(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n }\n attributeChangedCallback(name, oldValue, newValue) {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (name === ROOT_MARGIN_ATTR) {\n _classPrivateMethodGet(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n _classPrivateMethodGet(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n } else if (name === VIEWPORT_POSITION_ATTR) {\n _classPrivateMethodGet(this, _prepareBackgrounds, _prepareBackgrounds2).call(this);\n _classPrivateMethodGet(this, _updateBackgrounds, _updateBackgrounds2).call(this);\n } else if (name === ACTIVE_BACKGROUND_ATTR) {\n _classPrivateMethodGet(this, _updateBackgrounds, _updateBackgrounds2).call(this);\n }\n }\n get triggerElements() {\n return toArray(this.children).filter(isTrigger);\n }\n get backgrounds() {\n return toArray(this.children).filter(isBackground);\n }\n\n /* Mirrored attributes: */\n\n get rootMargin() {\n return this.getAttribute(ROOT_MARGIN_ATTR) || '0px 0px 0px 0px';\n }\n set rootMargin(val) {\n this.setAttribute(ROOT_MARGIN_ATTR, val || '0px 0px 0px 0px');\n }\n set activeBackgroundId(value) {\n if (value !== this.activeBackgroundId) {\n this.setAttribute(ACTIVE_BACKGROUND_ATTR, value);\n }\n }\n get activeBackgroundId() {\n return this.getAttribute(ACTIVE_BACKGROUND_ATTR);\n }\n get activeBackground() {\n return this.querySelector(\"[\".concat(BG_ID_ATTR, \"=\\\"\").concat(this.activeBackgroundId, \"\\\"]\"));\n }\n}\nfunction _createIntersectionObserver2() {\n _classPrivateFieldSet(this, _observer, new ElementIntersectionObserver(this.triggerElements, _classPrivateFieldGet(this, _handleTriggerChange), {\n root: this.viewportIntersectionRoot,\n rootMargin: this.rootMargin\n }));\n}\nfunction _disconnectIntersectionObserver2() {\n if (_classPrivateFieldGet(this, _observer)) {\n _classPrivateFieldGet(this, _observer).disconnect();\n }\n}\nfunction _prepareBackgrounds2() {\n var viewportPosition = this.viewportPosition;\n if (viewportPosition === VIEWPORT_POSITIONS.aboveViewport || viewportPosition === VIEWPORT_POSITIONS.belowViewport) {\n var triggerElements = this.triggerElements;\n if (triggerElements.length > 0) {\n var triggerIndex = viewportPosition === VIEWPORT_POSITIONS.aboveViewport ? triggerElements.length - 1 : 0;\n this.activeBackgroundId = triggerElements[triggerIndex].getAttribute(SHOW_BACKGROUND_ATTR);\n }\n }\n}\nfunction _updateBackgrounds2() {\n var activeBackgroundId = this.activeBackgroundId;\n var backgrounds = this.backgrounds;\n backgrounds.forEach((background, idx) => {\n var backgroundId = background.getAttribute(BG_ID_ATTR);\n var isActive = backgroundId === activeBackgroundId;\n var nextActive = _classPrivateMethodGet(this, _getBackgroundId, _getBackgroundId2).call(this, backgrounds, idx + 1) === activeBackgroundId;\n var prevActive = _classPrivateMethodGet(this, _getBackgroundId, _getBackgroundId2).call(this, backgrounds, idx - 1) === activeBackgroundId;\n var state;\n if (isActive) {\n state = 'ACTIVE';\n } else if (nextActive) {\n state = 'PREV';\n } else if (prevActive) {\n state = 'NEXT';\n }\n var currentState = background.getAttribute(STATE_ATTR);\n if (state !== currentState) {\n setAttribute(background, STATE_ATTR, state);\n }\n });\n}\nfunction _getBackgroundId2(backgrounds, index) {\n if (backgrounds[index]) {\n return backgrounds[index].getAttribute(BG_ID_ATTR);\n }\n}\n\nexport { Scrollhistorie as default };\n//# sourceMappingURL=index.esm.js.map\n","// extracted by mini-css-extract-plugin\nexport default {\"colors\":\"dhfs__colors--f3d61\",\"wrapper\":\"dhfs__wrapper--d4862\",\"forklaringsscroll\":\"dhfs__forklaringsscroll--d00fa\",\"align-left\":\"dhfs__align-left--d8954\",\"alignLeft\":\"dhfs__align-left--d8954\",\"align-right\":\"dhfs__align-right--d5fb9\",\"alignRight\":\"dhfs__align-right--d5fb9\",\"card\":\"dhfs__card--b16c8\",\"background\":\"dhfs__background--b26f8\",\"card-container\":\"dhfs__card-container--fd089\",\"cardContainer\":\"dhfs__card-container--fd089\"};","// extracted by mini-css-extract-plugin\nexport default {\"card-container\":\"dhfs__card-container--b7de5\",\"cardContainer\":\"dhfs__card-container--b7de5\",\"first\":\"dhfs__first--cd235\",\"last\":\"dhfs__last--ba7bd\",\"card\":\"dhfs__card--fd4d0\",\"animate-in\":\"dhfs__animate-in--d63db\",\"animateIn\":\"dhfs__animate-in--d63db\",\"animate-out\":\"dhfs__animate-out--b852e\",\"animateOut\":\"dhfs__animate-out--b852e\"};","import Scrollhistorie from '@nrk/dh-basis-scrollhistorie'\nimport { closest } from '@nrk/dh-basis-common'\n\n/* styles */\nimport styles from './forklaringsscroll.module.css'\nimport './media/background.module.css'\nimport cardStyles from './cards/cards.module.css'\nimport './cards/alt-text.module.css'\n\nexport default class Forklaringsscroll extends Scrollhistorie {\n connectedCallback() {\n super.connectedCallback()\n requestAnimationFrame(this.updateMarginAndHeights)\n window.addEventListener('resize', this.updateMarginAndHeights)\n\n /* Scroll text into view when media-element receives focus */\n for (const elm of this.querySelectorAll('img, video, [role=img]')) {\n elm.tabIndex = '-1'\n }\n this.addEventListener('focus', this._handleFocus, true)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n window.removeEventListener('resize', this.updateMarginAndHeights)\n this.removeEventListener('focus', this._handleFocus, true)\n }\n\n measureICBHeight() {\n /*\n * Measure the height of the Initial Containing Block (ICB).\n * In most modern browsers 100vh === height of the ICB.\n * The ICB does not change when the URL bar is hidden.\n * */\n try {\n const element = document.createElement('div')\n element.style.height = 'calc(100 * var(--dh-vh))'\n element.style.position = 'absolute'\n element.style.top = '0'\n element.style.left = '0'\n document.documentElement.appendChild(element)\n const icbHeight = element.offsetHeight\n document.documentElement.removeChild(element)\n return icbHeight\n } catch (e) {\n return window.innerHeight\n }\n }\n\n _handleFocus = (e) => {\n const backgroundElement = e.target && closest(e.target, '[data-background-id]')\n const altTextElement = e.target && closest(e.target, `.${styles.altText}`)\n let triggerElement\n if (backgroundElement) {\n const backgroundId = backgroundElement.getAttribute('data-background-id')\n if (this.activeBackgroundId !== backgroundId) {\n triggerElement = this.triggerElements.find(\n (elm) => elm.getAttribute('data-show-background') === backgroundId,\n )\n }\n } else if (altTextElement) {\n triggerElement = altTextElement.nextElementSibling\n }\n\n if (triggerElement && triggerElement.getAttribute('data-state') !== 'ACTIVE') {\n window.scrollTo(0, triggerElement.offsetTop - window.innerHeight / 2)\n }\n }\n\n updateMarginAndHeights = () => {\n const backgrounds = this.backgrounds\n const triggerElements = this.triggerElements\n if (!backgrounds || !backgrounds.length || !triggerElements || !triggerElements.length) {\n return\n }\n\n const icbHeight = this.measureICBHeight()\n // Measure first visible background. All backgrounds should be 3:4\n const background = backgrounds.find((b) => b.offsetHeight)\n if (!background) {\n return\n }\n const storyMargin = (icbHeight - background.offsetHeight) / 2\n\n const firstCardHeight = triggerElements[0]\n .querySelector(`.${cardStyles.card}`)\n .getBoundingClientRect().height\n const lastCardHeight = triggerElements[triggerElements.length - 1]\n .querySelector(`.${cardStyles.card}`)\n .getBoundingClientRect().height\n\n if (!isNaN(storyMargin)) {\n this.style.setProperty('--sfv-story-margin', `${storyMargin}px`)\n this.style.setProperty('--_first-card-height', `${firstCardHeight}px`)\n this.style.setProperty('--_last-card-height', `${lastCardHeight}px`)\n\n const negativeStoryMargin = `${(-1 * storyMargin).toFixed(1)}px`\n this.rootMargin = `${negativeStoryMargin} 0px ${negativeStoryMargin} 0px`\n }\n }\n}\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { closest, testReducedMotion, withinStops, toArray, setAttribute, toggleAttribute, withinRange } from '@nrk/dh-basis-common';\n\nvar STOPS_ATTR = 'stops';\nvar TARGET_STOP_ATTR = 'target-stop';\nvar AUTOPLAY_BLOCKED = 'autoplay-blocked';\nvar STATE_ATTR = 'data-state'; // Data attribute, so that it can be used on other elements\nvar VIEWPORT_POSITION_ATTR = 'data-viewport-position';\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// Most videos have a frame-rate of 25 fps, but not all. Use with care.\n// Used to calculate target zone.\nvar FRAME_RATE = 25;\nvar isVisible = child => child.offsetWidth > 0 || child.offsetHeight > 0;\n\n/* Ponyfill Math.sign */\nfunction sign(val) {\n return val >= 0 ? 1 : -1;\n}\nfunction round(num, decimals) {\n var multiplier = Math.pow(10.0, decimals);\n return Math.round(num * multiplier) / multiplier;\n}\nclass StegvisVideo extends HTMLElement {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"_paused\", true);\n _defineProperty(this, \"_disconnecting\", false);\n _defineProperty(this, \"_reducedMotionSeekEnabled\", false);\n _defineProperty(this, \"_onReadyStateChange\", e => {\n if (isVisible(e.target) && e.target.readyState >= READY_STATE.HAVE_ENOUGH_DATA) {\n this._startSeek();\n }\n });\n _defineProperty(this, \"_handleClick\", e => {\n var btn = closest(e.target, 'button');\n if (!btn) {\n return;\n }\n\n /* Triggers play if autoplay was blocked */\n var videoElement = this.videoElement;\n if (videoElement !== null && videoElement !== void 0 && videoElement.paused) {\n var playPromise = videoElement.play() || Promise.resolve();\n playPromise.then(() => {\n this.autoplayBlocked = false;\n });\n }\n });\n }\n static get observedAttributes() {\n return [TARGET_STOP_ATTR, STATE_ATTR, VIEWPORT_POSITION_ATTR];\n }\n connectedCallback() {\n this.addEventListener('click', this._handleClick);\n this.videoElements.forEach(videoElement => videoElement.addEventListener('canplaythrough', this._onReadyStateChange));\n }\n disconnectedCallback() {\n this._disconnecting = true;\n this.removeEventListener('click', this._handleClick);\n this.videoElements.forEach(videoElement => videoElement.removeEventListener('canplaythrough', this._onReadyStateChange));\n }\n attributeChangedCallback(name, prevValue, newValue) {\n var hasValue = newValue !== null;\n var valueChanged = prevValue !== newValue;\n if (!valueChanged) {\n return;\n }\n if (name === STATE_ATTR) {\n this._stateChanged(prevValue, newValue);\n } else if (name === VIEWPORT_POSITION_ATTR) {\n this._viewportChanged(newValue);\n } else if (name === TARGET_STOP_ATTR) {\n hasValue && this._startSeek();\n }\n }\n _stateChanged(prevState, nextState) {\n if (nextState === 'ACTIVE') {\n if (prevState === 'NEXT') {\n this._gotoStart();\n } else if (prevState === 'PREV') {\n this._gotoEnd();\n }\n this._startSeek();\n } else {\n this._paused = true;\n }\n }\n _viewportChanged(newValue) {\n if (newValue === 'IN-VIEWPORT') {\n this._preload();\n this._startSeek();\n } else if (newValue === 'ABOVE-VIEWPORT') {\n this._paused = true;\n this._gotoEnd();\n } else if (newValue === 'BELOW-VIEWPORT') {\n this._paused = true;\n this._gotoStart();\n }\n }\n _shouldPlay() {\n var _this$videoElement;\n var inViewport = typeof this.viewportPosition === 'undefined' || this.viewportPosition === 'IN-VIEWPORT';\n return ((_this$videoElement = this.videoElement) === null || _this$videoElement === void 0 ? void 0 : _this$videoElement.readyState) >= READY_STATE.HAVE_ENOUGH_DATA && inViewport && this.state === 'ACTIVE';\n }\n _preload() {\n var videoElement = this.videoElement;\n if ((videoElement === null || videoElement === void 0 ? void 0 : videoElement.readyState) < READY_STATE.HAVE_ENOUGH_DATA) {\n videoElement === null || videoElement === void 0 || videoElement.load();\n }\n }\n _gotoStart() {\n if (this.autoplayBlocked) {\n return;\n }\n var videoElement = this.videoElement;\n if (videoElement && videoElement.currentTime !== 0) {\n videoElement.currentTime = 0;\n }\n }\n _gotoEnd() {\n if (this.autoplayBlocked) {\n return;\n }\n var videoElement = this.videoElement;\n var duration = videoElement === null || videoElement === void 0 ? void 0 : videoElement.duration;\n if (Number.isFinite(duration)) {\n videoElement.currentTime = duration;\n }\n }\n _enableSeekOnReducedMotion() {\n var videoElement = this.videoElement;\n if (this._reducedMotionSeekEnabled || !videoElement) {\n return Promise.resolve();\n }\n return (videoElement.play() || Promise.resolve(true)).then(() => {\n videoElement.pause();\n this._reducedMotionSeekEnabled = true;\n }).catch(e => {\n // Ignore error\n });\n }\n _startSeek() {\n if (!this._paused || !this._shouldPlay()) {\n return;\n }\n var reducedMotion = testReducedMotion();\n this._paused = false;\n var prevTime;\n var loop = timestamp => {\n var videoElement = this.videoElement;\n var targetTime = this.stops[this.targetStop];\n if (this._disconnecting || this._paused || !videoElement || !isFinite(targetTime)) {\n this._paused = true;\n videoElement === null || videoElement === void 0 || videoElement.pause();\n return;\n }\n if (!prevTime) {\n prevTime = timestamp;\n }\n this.invisibleVideoElements.filter(video => !video.paused).forEach(invisibleVideo => invisibleVideo.pause());\n var dt = (timestamp - prevTime) / 1000;\n var framesPerTick = Math.max(Math.ceil(Math.abs(dt * FRAME_RATE)), 1);\n var buffer = 0.5 * framesPerTick / FRAME_RATE;\n var currentTime = videoElement.currentTime;\n var atTargetStop = withinRange(currentTime, targetTime - buffer, targetTime + buffer);\n if (atTargetStop) {\n if (videoElement.currentTime !== targetTime) {\n videoElement.currentTime = targetTime;\n }\n this._paused = true;\n videoElement.pause();\n } else if (reducedMotion) {\n this._enableSeekOnReducedMotion().then(() => {\n videoElement.currentTime = targetTime;\n this._paused = true;\n });\n } else {\n var speed = this._calculateSpeed(currentTime);\n var direction = sign(targetTime - currentTime);\n if (this.autoplayBlocked) ; else if (direction === 1) {\n // Use normal playback for forward playback\n videoElement.playbackRate = speed;\n if (videoElement.paused) {\n var playPromise = videoElement.play() || Promise.resolve();\n playPromise.catch(e => {\n console.error(e);\n this.autoplayBlocked = true;\n });\n }\n } else {\n // Use seeking for reverse playback:\n // https://github.com/whatwg/html/issues/3754\n videoElement.pause();\n var nextTime = round(currentTime + dt * speed * direction, 2.0);\n if (currentTime !== nextTime) {\n videoElement.currentTime = nextTime;\n }\n }\n prevTime = timestamp;\n requestAnimationFrame(loop);\n }\n };\n // eslint-disable-next-line compat/compat\n requestAnimationFrame(loop);\n }\n _calculateSpeed(currentTime) {\n return withinStops(currentTime, this.stops, this.targetStop, 1) ? 1 : 3;\n }\n get videoElement() {\n return this.videoElements.find(isVisible);\n }\n get invisibleVideoElements() {\n return this.videoElements.filter(child => !isVisible(child));\n }\n get videoElements() {\n return toArray(this.children).filter(child => child.nodeName === 'VIDEO');\n }\n get stops() {\n var stopString = this.getAttribute(STOPS_ATTR) || '';\n return stopString.replace(/[[\\]]/g, '').split(',').map(s => s.trim()).filter(Boolean).map(s => Number(s));\n }\n set stops(val) {\n this.setAttribute(STOPS_ATTR, val.map(num => num.toFixed(2)).join(','));\n }\n get targetStop() {\n return Number(this.getAttribute(TARGET_STOP_ATTR) || 0);\n }\n set targetStop(val) {\n this.setAttribute(TARGET_STOP_ATTR, val);\n }\n get state() {\n return this.getAttribute(STATE_ATTR);\n }\n set state(val) {\n setAttribute(this, STATE_ATTR, val);\n }\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n set viewportPosition(val) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, val);\n }\n get autoplayBlocked() {\n return this.hasAttribute(AUTOPLAY_BLOCKED) || false;\n }\n set autoplayBlocked(val) {\n toggleAttribute(this, AUTOPLAY_BLOCKED, val);\n }\n}\n\nexport { StegvisVideo as default };\n//# sourceMappingURL=index.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};\nvar isVisible = child => !!child.offsetParent;\nclass LevendeStillbilde extends HTMLElement {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"_disconnecting\", false);\n _defineProperty(this, \"_visibleVideoElement\", void 0);\n _defineProperty(this, \"_handlePlayChange\", e => {\n if (e.type === 'play') {\n dispatchEvent(this, 'dh-basis-autoplay-succeeded');\n }\n if (e.target === this._visibleVideoElement) {\n this.isPaused = this._visibleVideoElement.paused;\n }\n });\n _defineProperty(this, \"_updatePlayState\", () => {\n if (!this._visibleVideoElement) {\n return;\n }\n if (this._shouldPlay()) {\n this._playVideo();\n } else {\n this._pauseVideo();\n }\n });\n _defineProperty(this, \"_handleResize\", () => {\n this._updateVisibleVideoElement();\n });\n }\n static get observedAttributes() {\n return [STATE_ATTR, DISABLE_FORCED_ATTRIBUTES_ATTR, VIEWPORT_POSITION_ATTR];\n }\n connectedCallback() {\n this._setVideoAttributes();\n this._setEventListeners();\n this._updateVisibleVideoElement();\n }\n disconnectedCallback() {\n this._disconnecting = true;\n this._removeEventListeners();\n }\n attributeChangedCallback(name, prevValue, newValue) {\n var valueChanged = prevValue !== newValue;\n if (name === STATE_ATTR || name === VIEWPORT_POSITION_ATTR) {\n if (valueChanged) {\n this._updateVisibleVideoElement();\n this._updatePlayState();\n if (name === VIEWPORT_POSITION_ATTR && newValue === 'IN-VIEWPORT') {\n this._preload();\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 _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 _updateVisibleVideoElement() {\n // eslint-disable-next-line compat/compat\n requestAnimationFrame(() => {\n var nextVisibleVideo = this.videoElements.find(isVisible);\n if (nextVisibleVideo !== this._visibleVideoElement) {\n // Pause previous video\n this._pauseVideo();\n this._visibleVideoElement = nextVisibleVideo;\n if (this._shouldPreload()) {\n this._preload();\n }\n this._updatePlayState();\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 _shouldPlay() {\n var _this$_visibleVideoEl;\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 _shouldPreload() {\n return this.viewportPosition === 'IN-VIEWPORT';\n }\n _preload() {\n var _this$_visibleVideoEl2;\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 (_this$_visibleVideoEl3 = this._visibleVideoElement) === null || _this$_visibleVideoEl3 === void 0 || _this$_visibleVideoEl3.load();\n }\n }\n _playVideo() {\n dispatchEvent(this, 'dh-basis-autoplay-attempted');\n var reducedMotion = testReducedMotion();\n var videoElement = this._visibleVideoElement;\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 _pauseVideo() {\n var videoElement = this._visibleVideoElement;\n if (videoElement && !videoElement.paused) {\n videoElement.pause();\n }\n }\n get videoElements() {\n return toArray(this.querySelectorAll('video'));\n }\n get disableForcedAttributes() {\n return this.hasAttribute(DISABLE_FORCED_ATTRIBUTES_ATTR);\n }\n get state() {\n return this.getAttribute(STATE_ATTR);\n }\n set state(val) {\n this.setAttribute(STATE_ATTR, val);\n }\n get isPaused() {\n return this.getAttribute(IS_PAUSED);\n }\n set isPaused(val) {\n if (val) {\n this.setAttribute(IS_PAUSED, '');\n } else {\n this.removeAttribute(IS_PAUSED);\n }\n }\n get autoplayBlocked() {\n return this.hasAttribute(AUTOPLAY_BLOCKED) || false;\n }\n set autoplayBlocked(val) {\n toggleAttribute(this, AUTOPLAY_BLOCKED, val);\n }\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n set viewportPosition(val) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, val);\n }\n}\n\nexport { LevendeStillbilde as default };\n//# sourceMappingURL=index.esm.js.map\n","import { toArray, setAttribute } from '@nrk/dh-basis-common'\n\nconst CHILD_SELECTOR = '[dh-receive-historiescroll-attributes]'\nconst STATE_ATTR = 'data-state'\nconst VIEWPORT_POSITION_ATTR = 'viewport-position'\nconst VIEWPORT_POSITION_DATA_ATTR = 'data-viewport-position'\n\nconst STOPS_ATTR = 'stops'\nconst TARGET_STOP_ATTR = 'target-stop'\n\n/*\n * Copies down the 'data-state' attribute to child.\n * Detects and sets 'data-viewport-position' on child.\n * */\nexport default class Spesialmodul extends HTMLElement {\n static get observedAttributes() {\n return [STATE_ATTR, VIEWPORT_POSITION_ATTR, STOPS_ATTR, TARGET_STOP_ATTR]\n }\n\n connectedCallback() {}\n\n disconnectedCallback() {}\n\n attributeChangedCallback(name, prev, next) {\n if (prev === next) {\n return\n }\n this._updateChildElements()\n }\n\n _updateChildElements() {\n const state = this.state\n const viewportPosition = this.viewportPosition\n const spesialmoduler = this.spesialmoduler\n const stops = this.stops\n const targetStop = this.targetStop\n spesialmoduler.forEach((spesialmodul) => {\n setAttribute(spesialmodul, STATE_ATTR, state)\n setAttribute(spesialmodul, VIEWPORT_POSITION_DATA_ATTR, viewportPosition)\n if (stops && stops.length) {\n setAttribute(spesialmodul, STOPS_ATTR, stops)\n setAttribute(spesialmodul, TARGET_STOP_ATTR, targetStop)\n }\n })\n }\n\n get spesialmoduler() {\n return toArray(this.querySelectorAll(CHILD_SELECTOR))\n }\n\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR)\n }\n\n set viewportPosition(value) {\n setAttribute(this, VIEWPORT_POSITION_ATTR, value)\n }\n\n get state() {\n return this.getAttribute(STATE_ATTR)\n }\n\n set state(value) {\n setAttribute(this, STATE_ATTR, value)\n }\n\n get stops() {\n return this.getAttribute(STOPS_ATTR)\n }\n\n set stops(val) {\n this.setAttribute(STOPS_ATTR, val)\n }\n\n get targetStop() {\n return Number(this.getAttribute(TARGET_STOP_ATTR))\n }\n\n set targetStop(val) {\n this.setAttribute(TARGET_STOP_ATTR, val)\n }\n}\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[\"BridgeEvent\"] = \"iglu:no.nrk/bridge-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[\"NotificationEvent\"] = \"iglu:no.nrk/notification-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[\"Bridge\"] = \"iglu:no.nrk/bridge/jsonschema/1-0-0\";\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-1\";\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 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[\"TimeSpentEvent\"] = \"iglu:no.nrk/time-spent-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 trackPageView(entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackPageView({ context }, [this.trackerId]);\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 trackEvent(data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackStructEvent(__spreadProps(__spreadValues({}, data), { context }), [this.trackerId]);\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 clearUser() {\n this.snowplow.setUserId(null, [this.trackerId]);\n this.removeSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */);\n }\n addPlugin(configuration) {\n this.snowplow.addPlugin(configuration, [this.trackerId]);\n }\n setSharedEntity(schema, data) {\n this.sharedEntities[schema] = data;\n }\n getSharedEntity(schema) {\n return this.sharedEntities[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 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 }\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 sendStartEvent(startTime, autoplay, 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,\n live,\n channelId: this.channelId\n });\n }\n sendProgressEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"progress\" /* Progress */, startTime, endTime, live);\n }\n sendCompleteEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"complete\" /* Complete */, startTime, endTime != null ? endTime : startTime, live);\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 static isAvailable() {\n return window.snowplow !== void 0;\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, index) => {\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 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 entitiesToContexts\n};\n","import { getBundle } from '@nrk/nrkno-snowplow'\nimport { EntitySchema } from '@nrk/snowplow-web'\nimport { SelfDescribingJson } from '@snowplow/tracker-core'\n\nconst APP_ID = 'no.nrk.dh'\nexport const Schemas = {\n StepEvent: 'iglu:no.nrk.dh/step-event/jsonschema/1-0-0',\n ViewportEvent: 'iglu:no.nrk.dh/viewport-event/jsonschema/1-0-0',\n}\n\nexport type StepEvent = {\n current: number\n total: number\n}\n\nexport type ViewportEvent = {\n kind: 'entry' | 'exit'\n}\n\nfunction resolveOrTimeout(promise: Promise, wait: number): Promise {\n return Promise.race([\n promise.then(() => true),\n new Promise((resolve) => {\n setTimeout(() => {\n resolve(false)\n }, wait)\n }),\n ])\n}\n\nexport function setupTracker(\n trackerId: `dh-${string}`,\n { host, selfId }: { host: `https://${string}`; selfId?: string },\n) {\n if (window.preventTracking) {\n return\n }\n\n let trackerReady = false\n let _bundle\n const eventQueue = []\n\n // This needs to be unique per contentId to avoid collisions when more than one\n // instance of forklaringsscroll is present in the document\n const contentContextId: `dh-${string}` = `${trackerId}-${selfId}`\n\n function trackEvent(event: SelfDescribingJson) {\n if (trackerReady === false) {\n eventQueue.push(event)\n return\n }\n\n const { NrknoUtils, Snowplow } = _bundle\n Snowplow.trackSelfDescribingEvent(\n {\n event,\n context: NrknoUtils.context.collect(['service', 'user', contentContextId]),\n },\n [trackerId],\n )\n }\n\n getBundle((bundle) => {\n _bundle = bundle\n const { NrknoUtils } = bundle\n NrknoUtils.newTracker(trackerId, APP_ID, host)\n\n if (process.env.DEV) {\n import('./snowplow-nrkno-mock.js').then(({ mock }) => mock(host)).catch(console.error)\n }\n\n if (selfId) {\n NrknoUtils.context.set(contentContextId, EntitySchema.Content as any, {\n source: 'pp',\n id: selfId,\n })\n }\n\n resolveOrTimeout(NrknoUtils.trackers.whenReady('main-tracker'), 1000)\n .then((isResolved) => {\n trackerReady = true\n if (isResolved === false) {\n console.warn('nrkno tracker not available')\n }\n\n // Clear the event queue\n for (let i = eventQueue.length - 1; i >= 0; i--) {\n const event = eventQueue.pop()\n trackEvent(event)\n }\n\n return\n })\n .catch(console.error)\n })\n\n return trackEvent\n}\n","import './polyfills'\nimport { getElementTag } from '@nrk/dh-server-libs/get-element-tag'\nimport Forklaringsscroll from './components/forklaringsscroll'\nimport StegvisVideo from '@nrk/dh-basis-stegvis-video'\nimport LevendeStillbilde from '@nrk/dh-basis-levende-stillbilde'\nimport Spesialmodul from './components/media/spesialmodul'\nimport { Schemas, setupTracker } from './lib/snowplow'\n\nimport './client.module.css'\nimport './components/forklaringsscroll.module.css'\nimport cardStyles from './components/cards/cards.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\nexport class AppElement extends HTMLElement {\n name = tag\n #observer\n\n async connectedCallback() {\n this.addEventListener('dh-basis-scrollhistorie-trigger-activated', this.#handleTriggerActivated)\n\n this.#loadCustomElements()\n this.#startCompletionLogger()\n\n this.trackSnowplowEvent = setupTracker('dh-forklaringsscroll', {\n host: this.dataset.snowplowHost,\n selfId: this.dataset.selfId || undefined,\n })\n }\n\n disconnectedCallback() {\n this.removeEventListener(\n 'dh-basis-scrollhistorie-trigger-activated',\n this.#handleTriggerActivated,\n )\n this.#stopCompletionLogger()\n }\n\n async #loadCustomElements() {\n safeDefine('dh-forklaringsscroll', Forklaringsscroll)\n safeDefine('dh-fs-basis-stegvis-video', StegvisVideo)\n safeDefine('dh-fs-basis-levende-stillbilde', LevendeStillbilde)\n safeDefine('dh-fs-spesialmodul', Spesialmodul)\n\n /* Stegvis lottie is only defined if used */\n if (\n this.features.lottie &&\n typeof customElements.get('dh-fs-basis-stegvis-lottie') === 'undefined'\n ) {\n const stegvisLottie = (\n await import('@nrk/dh-basis-stegvis-lottie' /* webpackChunkName: \"dh-stegvis-lottie\" */)\n ).default\n safeDefine('dh-fs-basis-stegvis-lottie', stegvisLottie)\n }\n\n if (this.features.kart && typeof customElements.get('dh-fs-basis-kart') === 'undefined') {\n const kart = (await import('./lib/karthistorie-chunk' /* webpackChunkName: \"dh-kart\" */))\n .default\n\n safeDefine('dh-fs-basis-kart', kart)\n }\n }\n\n #handleTriggerActivated = (e) => {\n /** @type {import('@snowplow/tracker-core').SelfDescribingJson} */\n const event = {\n schema: Schemas.StepEvent,\n data: { current: e.detail.triggerIndex + 1, total: this.#cards.length },\n }\n this.trackSnowplowEvent?.(event)\n }\n\n #startCompletionLogger() {\n if (window.preventTracking) {\n return\n }\n\n let hasStarted = false\n let hasCompleted = false\n\n // eslint-disable-next-line compat/compat\n this.#observer = new IntersectionObserver(\n (intersections) => {\n let isIntersecting = intersections[0]?.isIntersecting\n if (!hasStarted && isIntersecting && this.getBoundingClientRect().top > 0) {\n hasStarted = true\n /** @type {import('@snowplow/tracker-core').SelfDescribingJson} */\n const event = {\n schema: Schemas.ViewportEvent,\n data: { kind: 'entry' },\n }\n this.trackSnowplowEvent?.(event)\n } else if (\n hasStarted &&\n !hasCompleted &&\n !isIntersecting &&\n this.getBoundingClientRect().bottom < 0\n ) {\n hasCompleted = true\n /** @type {import('@snowplow/tracker-core').SelfDescribingJson} */\n const event = {\n schema: Schemas.ViewportEvent,\n data: { kind: 'exit' },\n }\n this.trackSnowplowEvent?.(event)\n }\n },\n { threshold: [0] },\n )\n this.#observer.observe(this)\n }\n\n #stopCompletionLogger() {\n this.#observer?.disconnect()\n }\n\n get features() {\n return JSON.parse(this.getAttribute('features') || '{}')\n }\n\n get #cards() {\n return this.querySelectorAll(`.${cardStyles.card}`)\n }\n}\n\nsafeDefine(tag, AppElement)\n"],"names":["installedChunks","installChunk","fingerprint","pad","getRandomValue","c","discreteValues","Math","pow","randomBlock","toString","safeCounter","cuid","Date","getTime","slug","date","counter","slice","print","random","isCuid","stringToCheck","startsWith","isSlug","stringLength","length","module","exports","env","window","self","globalCount","Object","keys","clientId","navigator","mimeTypes","userAgent","crypto","msCrypto","lim","abs","getRandomValues","Uint32Array","num","size","s","substr","getElementTag","name","version","split","_classPrivateFieldGet","e","t","get","call","value","classPrivateFieldGet2","_classPrivateFieldGet2","a","n","has","arguments","TypeError","_classPrivateFieldSet","r","l","set","writable","_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","i","toPrimitive","String","Number","_defineProperty","defineProperty","enumerable","configurable","ownKeys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","forEach","getOwnPropertyDescriptors","defineProperties","defaultConfig","rootMargin","threshold","root","ElementIntersectionObserver","elements","onChange","config","this","intersections","map","target","isIntersecting","ratio","intersectionObserver","IntersectionObserver","entries","entry","idx","indexOf","splice","intersectionRatio","elm","observe","disconnect","unobserve","toggleAttribute","el","boolValue","hasAttribute","setAttribute","removeAttribute","nextValue","proto","match","closest","Element","matches","msMatchesSelector","webkitMatchesSelector","css","parentElement","toArray","nodeList","dispatchEvent","element","event","detail","undefined","ignore","concat","CustomEvent","bubbles","cancelable","document","createEvent","initCustomEvent","result","testReducedMotion","matchMedia","MAX_SAFE_INTEGER","withinRange","current","withinStops","currentTime","stops","targetStop","nrOfStops","uniqueStops","unique","targetTime","index","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","id","loaded","__webpack_modules__","m","amdO","getter","__esModule","d","definition","key","f","chunkId","Promise","all","reduce","promises","u","miniCssF","obj","prop","hasOwnProperty","toStringTag","nmd","paths","children","p","loadStylesheet","resolve","reject","href","fullhref","existingLinkTags","getElementsByTagName","dataHref","tag","getAttribute","rel","existingStyleTags","findStylesheet","oldTag","linkTag","createElement","type","nc","nonce","onerror","onload","errorType","realHref","err","Error","code","request","parentNode","removeChild","insertBefore","nextSibling","head","appendChild","createStylesheet","installedCssChunks","miniCss","then","data","ids","modules","runtime","j","installedChunkData","promise","import","race","ssrOrientation","mode","destroyed","mounted","listeners","portrait","landscape","opts","assign","orientation","getOrientation","update","handleUpdate","bind","throttledUpdate","clearTimeout","setTimeout","now","mount","addEventListener","destroy","removeEventListener","innerHeight","innerWidth","listen","emit","getVh","getHeight","vendor","opera","toLowerCase","platform","test","checkHasVhBug","style","setProperty","console","error","fixVhBug","dedupeId","dedupeMixin","mixin","mixinId","base","_base$_appliedMixins","_base$_appliedMixins2","_appliedMixins","extended","_classPrivateMethodInitSpec$1","privateSet","_checkPrivateRedeclaration$1","add","_classPrivateFieldInitSpec","privateMap","privateCollection","_classPrivateMethodGet$1","receiver","fn","VIEWPORT_POSITION_ATTR","VIEWPORT_POSITIONS","ViewportPositionMixin","Base","_observer","_createIntersectionObserver","_disconnectIntersectionObserver","_handleIntersectionChange","WeakMap","WeakSet","super","_ref","intersection","viewportPosition","top","bottom","getBoundingClientRect","isAbove","observedAttributes","_super$observedAttrib","connectedCallback","_super$connectedCallb","_createIntersectionObserver2","disconnectedCallback","_super$disconnectedCa","_disconnectIntersectionObserver2","viewportContainer","_document$scrollingEl","scrollingElement","documentElement","viewportIntersectionRoot","isViewport","_navigator","_navigator$includes","isIFrame","location","parent","isChrome","includes","_classPrivateFieldGet3","_classPrivateMethodInitSpec","_checkPrivateRedeclaration","_classStaticPrivateFieldSpecSet","classConstructor","descriptor","_classCheckPrivateStaticAccess","_classCheckPrivateStaticFieldDescriptor","_classApplyDescriptorSet","action","AttributeBindingMixin","_class","_getTargetElements","_boundAttributes","AttributeBindingMixinDef","boundAttributes","attribute","targets","sourceAttribute","targetAttribute","sourceAttributeName","targetAttributeName","attributeChangedCallback","oldValue","newValue","_super$attributeChang","_classApplyDescriptorGet","configuration","targetElements","_classPrivateMethodGet","_getTargetElements2","Array","from","querySelectorAll","ACTIVE_BACKGROUND_ATTR","ROOT_MARGIN_ATTR","BG_ID_ATTR","SHOW_BACKGROUND_ATTR","STATE_ATTR","isTrigger","isBackground","_activeTriggerIndex","_handleTriggerChange","_prepareBackgrounds","_updateBackgrounds","_getBackgroundId","Scrollhistorie","HTMLElement","activeIntersection","pop","triggerElement","activeBackgroundId","_this$activeBackgroun","attributeName","attributeValue","activeBackground","triggerElements","triggerIndex","backgroundId","instance","backgrounds","_updateBackgrounds2","_prepareBackgrounds2","val","querySelector","background","state","isActive","nextActive","_getBackgroundId2","prevActive","Forklaringsscroll","args","_handleFocus","backgroundElement","altTextElement","styles","altText","find","nextElementSibling","scrollTo","offsetTop","updateMarginAndHeights","icbHeight","measureICBHeight","b","offsetHeight","storyMargin","firstCardHeight","cardStyles","height","lastCardHeight","isNaN","negativeStoryMargin","toFixed","requestAnimationFrame","tabIndex","position","left","STOPS_ATTR","TARGET_STOP_ATTR","AUTOPLAY_BLOCKED","READY_STATE","isVisible","child","offsetWidth","StegvisVideo","readyState","_startSeek","videoElement","paused","play","autoplayBlocked","_handleClick","videoElements","_onReadyStateChange","_disconnecting","prevValue","hasValue","_stateChanged","_viewportChanged","prevState","nextState","_gotoStart","_gotoEnd","_paused","_preload","_shouldPlay","_this$videoElement","inViewport","load","duration","isFinite","_enableSeekOnReducedMotion","_reducedMotionSeekEnabled","pause","catch","prevTime","reducedMotion","loop","timestamp","invisibleVideoElements","video","invisibleVideo","decimals","multiplier","dt","buffer","max","ceil","speed","_calculateSpeed","direction","playbackRate","nextTime","round","nodeName","replace","trim","Boolean","join","DISABLE_FORCED_ATTRIBUTES_ATTR","IS_PAUSED","offsetParent","LevendeStillbilde","_visibleVideoElement","isPaused","_playVideo","_pauseVideo","_updateVisibleVideoElement","_setVideoAttributes","_setEventListeners","_removeEventListeners","_updatePlayState","_handleResize","_handlePlayChange","nextVisibleVideo","_shouldPreload","disableForcedAttributes","_this$_visibleVideoEl","_this$_visibleVideoEl2","_this$_visibleVideoEl3","Spesialmodul","prev","next","_updateChildElements","spesialmoduler","spesialmodul","propertyIsEnumerable","globalKey","getBundle","callback","globalThis","cb","q","src","script","async","loadOnce","staticSnowplowRoot","EntitySchema2","Schemas","setupTracker","trackerId","host","selfId","preventTracking","_bundle","trackerReady","eventQueue","contentContextId","trackEvent","NrknoUtils","Snowplow","trackSelfDescribingEvent","context","collect","bundle","wait","newTracker","EntitySchema","Content","source","trackers","whenReady","isResolved","warn","__APP_NAME__","__APP_VERSION__","safeDefine","elementName","customElements","define","_classPrivateFieldLooseKey","_loadCustomElements","_handleTriggerActivated","_startCompletionLogger","_stopCompletionLogger","_cards","AppElement","_get_cards","_stopCompletionLogger2","_startCompletionLogger2","_loadCustomElements2","_this$trackSnowplowEv","schema","total","_classPrivateFieldLooseBase","trackSnowplowEvent","dataset","snowplowHost","features","JSON","parse","lottie","default","kart","hasStarted","hasCompleted","_intersections$","_this$trackSnowplowEv2","kind","_this$trackSnowplowEv3","_classPrivateFieldLoo"],"sourceRoot":""}