{"version":3,"file":"js/2170.0e635ef78b9c02bb.js","mappings":"sIAEiBA,E,UAAjB,SAAiBA,GAIb,SAAgBC,IACZC,OAAOC,UAAUC,KAAK,CAClBC,KAAM,CACFC,KAAM,gBACNC,KAAM,gBACNC,aAAc,aAG1B,CAEA,IAAKC,EAML,SAAgBC,EAAsBC,EAAsBC,EAAkBC,GAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAC5F1B,OAAOC,UAAUC,KAAK,CAClByB,MAAO,uBACPC,OAAQ,CACJC,KAAM,CACFC,SAAU,CACN,CACIC,SAAuB,QAAfnB,EAAEH,EAAKuB,gBAAQ,IAAApB,EAAAA,EAAI,KAC3BN,aAAc,WACd2B,UAAW,WACXvB,SAAUA,EACVwB,OAAiC,QAA3BrB,EAAe,QAAfC,EAAEL,EAAK0B,gBAAQ,IAAArB,OAAA,EAAbA,EAAesB,kBAAU,IAAAvB,EAAAA,EAAI,KACrCwB,OAAiC,QAA3BtB,EAAe,QAAfC,EAAEP,EAAK6B,gBAAQ,IAAAtB,OAAA,EAAbA,EAAeoB,kBAAU,IAAArB,EAAAA,EAAI,KACrCwB,aAAc9B,EAAK+B,mBACbjC,EAAuBkC,SACvBlC,EAAuBmC,QAC7BC,aAAuC,QAA3B1B,EAAe,QAAfC,EAAET,EAAKmC,gBAAQ,IAAA1B,OAAA,EAAbA,EAAe2B,kBAAU,IAAA5B,EAAAA,EAAI,KAC3C6B,cAAenC,EACfoC,UAAoB,QAAX5B,EAAEV,EAAKuC,YAAI,IAAA7B,EAAAA,EAAI,KACxB8B,cAA4B,QAAf7B,EAAEX,EAAKyC,gBAAQ,IAAA9B,EAAAA,EAAI,KAChC+B,WAAuC,QAA7B9B,EAAiB,QAAjBC,EAAEb,EAAK0C,kBAAU,IAAA7B,OAAA,EAAfA,EAAiBc,kBAAU,IAAAf,EAAAA,EAAI,KAC3C+B,aAAqD,QAAzC7B,EAAe,QAAfC,EAAEf,EAAKmC,gBAAQ,IAAApB,GAAc,QAAdA,EAAbA,EAAe6B,oBAAY,IAAA7B,OAAA,EAA3BA,EAA6BY,kBAAU,IAAAb,EAAAA,EAAI,KACzD+B,oBAAuC,QAApB7B,EAAEhB,EAAK8C,qBAAa,IAAA9B,EAAAA,EAAI,KAC3C+B,kBAAmC,QAAlB9B,EAAEjB,EAAKgD,mBAAW,IAAA/B,EAAAA,EAAI,UAM/D,CAGA,SAAgBgC,EACZ3B,EACArB,EACAwB,EACAG,EACAE,GAEAvC,OAAOC,UAAUC,KAAK,CAClByB,MAAO,uBACPC,OAAQ,CACJC,KAAM,CACFC,SAAU,CACN,CACIC,SAAUA,EACVzB,aAAc,WACd2B,UAAW,WACXvB,SAAUA,EACVwB,OAAQA,EACRG,OAAQA,EACRE,aAAcA,OAMtC,CAGA,SAAgBoB,IACZ3D,OAAOC,UAAUC,KAAK,CAClByB,MAAO,kCAEf,CAGA,SAAgBiC,IACZ5D,OAAOC,UAAUC,KAAK,CAClByB,MAAO,0BACPC,OAAQ,CACJiC,MAAO,CACHb,KAAM,WACNc,eAAgB,UAIhC,CAGA,SAAgBC,EAAchC,EAAkBrB,GAC5CV,OAAOC,UAAUC,KAAK,CAClByB,MAAO,uBACPC,OAAQ,CACJC,KAAM,CACFC,SAAU,CACN,CACIC,SAAUA,EACVzB,aAAc,WACd2B,UAAW,SACXvB,SAAUA,OAMlC,CAGA,SAAgBsD,IACZhE,OAAOC,UAAUC,KAAK,CAClByB,MAAO,+BAEf,CAGA,SAAgBsC,IACZjE,OAAOC,UAAUC,KAAK,CAClByB,MAAO,qBAEf,CAGA,SAAgBuC,EACZC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEAxE,OAAOC,UAAUC,KAAK,CAClByB,MAAO,wBACPC,OAAQ,CACJ6C,QAAS,CACLC,OAAQ,CACJ,CACIC,GAAIR,EACJnB,KAAMmB,EAAY,IAAMC,EACxBQ,SAAUP,EACV3D,SAAU,WAGd,CACIiE,GAAIL,EACJtB,KAAMsB,EAAY,IAAMC,EACxBK,SAAUJ,EACV9D,SAAU,eAMlC,CAGA,SAAgBmE,EAAgB7C,EAAkB8C,EAAgBF,GAC9D5E,OAAOC,UAAUC,KAAK,CAClByB,MAAO,qBACPC,OAAQ,CACJC,KAAM,CACF6C,OAAQ,CACJ,CACIC,GAAI3C,EACJgB,KAAMhB,EAAW,IAAM8C,EACvBF,SAAUA,EACVlE,SAAU,eAMlC,CAlLgBZ,EAAAC,cAAaA,EAU7B,SAAKQ,GACDA,EAAA,uBACAA,EAAA,oBACH,CAHD,CAAKA,IAAAA,EAAsB,KAMXT,EAAAU,sBAAqBA,EAgCrBV,EAAA4D,kBAAiBA,EA4BjB5D,EAAA6D,4BAA2BA,EAO3B7D,EAAA8D,oBAAmBA,EAanB9D,EAAAiE,cAAaA,EAmBbjE,EAAAkE,mBAAkBA,EAOlBlE,EAAAmE,cAAaA,EAObnE,EAAAoE,qBAAoBA,EAiCpBpE,EAAA+E,gBAAeA,CAiBlC,EAvLD,CAAiB/E,IAAAA,EAAmB,I,kDCEpC,MAAMiF,GAAQC,EAAAA,EAAAA,IAAsB,IAE9B,SAAUC,IACZ,SAASC,EAAYC,GACjBA,EAAOC,SAASC,IACZ,MAAMC,EAAeP,EAAMQ,MAAMC,MAAMC,GAASA,EAAKC,UAAYL,EAAYK,UAE3D,IAAAC,EAAAC,EAAAC,EAAAC,EAAdR,IACAA,EAAa1C,SAASC,WAAmC,QAAzB8C,EAAGN,EAAYxC,kBAAU,IAAA8C,EAAAA,EAAI,KAC7DL,EAAa1C,SAASmD,qBAAuD,QAAnCH,EAAGP,EAAYU,4BAAoB,IAAAH,EAAAA,EAAI,KACjFN,EAAa1C,SAASS,aAAuC,QAA3BwC,EAAGR,EAAYhC,oBAAY,IAAAwC,EAAAA,EAAI,KACjEP,EAAa1C,SAASoD,aAAuC,QAA3BF,EAAGT,EAAYW,oBAAY,IAAAF,EAAAA,EAAI,KACrE,GAER,CAEA,MAAO,CAAEf,QAAOG,cACpB,C,kBCrBM,IAAWe,E,iBAAjB,SAAiBA,GAuDb,SAAgBC,EAAcC,GAC1B,OAAOA,EAAIC,MAAM,IAAIC,UAAUC,KAAK,GACxC,CAQA,SAAgBC,EAAqBC,GACjC,MAAMC,EAAUC,SAASC,cAAc,OAEvC,OADAF,EAAQG,UAAYJ,EACbC,EAAQI,aAAeJ,EAAQK,WAAa,EACvD,CAKA,SAAgBC,EAAeC,GAC3B,OAAOA,EACFC,QAAQ,WAAY,IACpBA,QAAQ,OAAQ,KAChBC,MACT,CAvEajB,EAAAkB,aAAe,CAAC5B,EAAe6B,GAAU,KAClD,GAAqB,kBAAV7B,EACP,MAAO,MAEX,MAAMP,EAAMO,EAAM8B,QAAQ,GAAGjB,MAAM,KACnC,IAAIkB,EAAWtC,EAAI,IAAM,GACzB,MAAMuC,EAAYvC,EAAI,GAGtB,OAFAsC,EAAWpB,GAAeA,EAAcoB,GAAUE,MAAM,YAAc,CAAC,KAAKlB,KAAKc,EAAU,SAAW,MAElF,MAAbG,EAAoBD,EAAW,IAAMC,EAAYD,CAAQ,EAUvDrB,EAAAwB,eAAiB,CAAClC,EAAe6B,GAAU,KAE/C7B,IAASmC,MAAMnC,KAChBA,EAAQ,GAEL,GAAGU,EAAAkB,aAAa5B,EAAO6B,KAAWA,EAAU,SAAW,SAUrDnB,EAAA0B,gBAAkB,CAACC,EAAcC,EAAQ,KAC9CD,GAAQA,EAAKE,OAASD,EACfD,EAAKG,UAAU,EAAGF,EAAQ,GAAK,MAEnCD,EASK3B,EAAAC,cAAaA,EAUbD,EAAAM,qBAAoBA,EASpBN,EAAAc,eAAcA,CAMjC,CAhFD,CAAiBd,IAAAA,EAAW,I,sHCErB,MAAM+B,EAAuBC,EAAAA,EAAMC,OAAO,CAC7CC,QAAS,qBCANC,eAAeC,IAClB,MAAMC,QAAiBN,EAAqBO,IAAsB,WAE5D,KAAEC,GAASF,EAajB,OAVAE,EAAKpD,SAAS3E,IAAQ,IAAAS,EACL,QAAbA,EAAAT,EAAKmC,gBAAQ,IAAA1B,IAAbT,EAAKmC,SAAa,CACd8C,QAAS,KACTK,qBAAsB,KACtBlD,WAAY,KACZQ,aAAc,KACd2C,aAAc,MACjB,IAGEwC,CACX,C,2DCdM,SAAUC,IACZ,MAAMC,GAAS1D,EAAAA,EAAAA,IAAqC,MAC9C2D,GAAY3D,EAAAA,EAAAA,KAAI,GAEhB4D,EAAUR,UAQZ,GAPKM,EAAOnD,QACRmD,EAAOnD,MAAQ,IAAIsD,EAAAA,EACfC,YAAY,2CACZC,EAAAA,EAAYC,OACZC,YAAYC,OAGfP,EAAUpD,MACX,UACUmD,EAAOnD,MAAMqD,UACnBD,EAAUpD,OAAQ,EAClB4D,QAAQC,IAAI,0BAChB,CAAE,MAAOC,GACLF,QAAQG,MAAM,kCAAmCD,EACrD,CACJ,EAGEE,EAAanB,UACf,GAAIM,EAAOnD,OAASoD,EAAUpD,MAC1B,UACUmD,EAAOnD,MAAMgE,aACnBZ,EAAUpD,OAAQ,EAClB4D,QAAQC,IAAI,+BAChB,CAAE,MAAOC,GACLF,QAAQG,MAAM,uCAAwCD,EAC1D,CACJ,EAGEG,EAAYpB,UAKd,GAJKO,EAAUpD,aACLqD,IAGNF,EAAOnD,OAASoD,EAAUpD,MAC1B,UACUmD,EAAOnD,MAAMkE,OAAO,YAAaC,GACvCP,QAAQC,IAAI,kBAAkBM,MAClC,CAAE,MAAOL,GACLF,QAAQG,MAAM,2BAA2BI,MAAoBL,EACjE,MAEAF,QAAQG,MAAM,sDAClB,EAGEK,EAASA,CAAiCC,EAA2BC,KAClEnB,EAAOnD,MAKZmD,EAAOnD,MAAMoE,OAAOC,GAASpB,IACzBqB,EAASrB,EAAU,IALnBW,QAAQW,KAAK,WAAWF,kCAM1B,EAGN,MAAO,CACHlB,SACAC,YACAC,UACAW,aACAI,SACAH,YAER,C,yBC1EA,MAAMO,EAAa,CAAEC,MAAO,qBAM5B,GAA4BC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,2BACRC,MAAO,CACL1E,KAAM,CAAC,GAET2E,KAAAA,CAAMC,GCOR,MAAMC,EAAuBA,CAAC7E,EAAsB8E,KAAa,IAAAC,EAAAC,EAC7D,OAAOhF,EAAKiF,aAAejF,EAAKkF,YAA0B,QAAjBH,EAAI/E,EAAK7C,gBAAQ,IAAA4H,OAAA,EAAbA,EAAenH,eAAgBkH,IAAkB,QAAjBE,EAAIhF,EAAK7C,gBAAQ,IAAA6H,OAAA,EAAbA,EAAepH,aAAY,EDAhH,MAAO,CAACuH,EAAUC,MACRC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOhB,EAAY,GAC1De,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoBC,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAYL,EAAKnF,KAAKtC,YAAaoH,KACjFO,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaC,EAAAA,EAAQ,CACzCC,IAAKb,EACLvH,KAAM,UACNqI,MAAO,GACPvG,OAAQ,GACRkF,OAAOsB,EAAAA,EAAAA,IAAgB,CAAC,yBAA0B,CAAE,iCAAkChB,EAAqBM,EAAKnF,KAAM8E,OACrH,KAAM,EAAG,CAAC,aACX,QAGR,IEhCMgB,EAAc,EAEpB,ICFMxB,EAAa,CAAEC,MAAO,qBAK5B,GAA4BC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,2BACRC,MAAO,CACLqB,QAAS,CAAC,GAEZpB,KAAAA,CAAMC,GCER,MAAMF,EAAQE,EAIRoB,GAAgBC,EAAAA,EAAAA,KAAS,IACpBvB,EAAMqB,QAAQG,KAAI,CAACC,EAAKC,KAAU,CACrCC,OAAQF,EACRjH,GAAI,GAAGiH,KAAOC,UAIhBE,EAAoBxB,IACtB,GAAU,MAANA,GAAmB,OAANA,EACb,MAAO,QAGX,MAAMuB,EAASE,SAASzB,EAAG,IAE3B,OAAKuB,GAAU,GAAKA,GAAU,IAAQA,GAAU,IAAMA,GAAU,GACrDA,EAAS,IAAM,EAAI,QAAU,OAC5BA,GAAU,IAAMA,GAAU,IAAQA,GAAU,IAAMA,GAAU,KAC7DA,EAAS,IAAM,EAAI,MAGvB,OAAO,EDClB,MAAO,CAAClB,EAAUC,MACRC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOhB,EAAY,GAC1De,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoBC,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAYQ,EAAclG,OAAQ0G,KAChFnB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK,CAC7CK,IAAKa,EAAKtH,GACVqF,OAAOsB,EAAAA,EAAAA,IAAgB,sDAAsDS,EAAiBE,EAAKH,aAClGI,EAAAA,EAAAA,IAAiBD,EAAKH,QAAS,MAChC,QAGR,IE/CM,EAAc,EAEpB,ICFM/B,EAAa,CACjBqB,IAAK,EACLpB,MAAO,WAEHmC,EAAa,CAAC,OAAQ,eAAgB,WACtCC,EAAa,CAAEpC,MAAO,WACtBqC,EAAa,CAAErC,MAAO,mBACtBsC,EAAa,CAAEtC,MAAO,wBACtBuC,EAAa,CAAEvC,MAAO,sBACtBwC,EAAa,CAAExC,MAAO,wBACtByC,EAAa,CAAEzC,MAAO,YACtB0C,EAAa,CACjBtB,IAAK,EACLpB,MAAO,kBAEH2C,EAAc,CAClBvB,IAAK,EACLpB,MAAO,kBAEH4C,EAAc,CAAC,OACfC,EAAc,CAAE7C,MAAO,mBACvB8C,EAAc,CAAE9C,MAAO,mBACvB+C,EAAc,CAAE/C,MAAO,yBACvBgD,EAAc,CAClB5B,IAAK,EACLpB,MAAO,oBAEHiD,EAAc,CAAC,aACfC,EAAc,CAAC,aACfC,EAAc,CAClB/B,IAAK,EACLpB,MAAO,6BAmBT,GAA4BC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,oBACRE,KAAAA,CAAMC,GC2CR,MAAM,WAAE+C,IAAeC,EAAAA,EAAAA,iBACjB,MAAEtI,EAAK,YAAEG,IAAgBD,EAAAA,EAAAA,KACzBqI,EAAY7E,IAEZ8E,GAAUvI,EAAAA,EAAAA,KAAI,GACdsE,GAAQtE,EAAAA,EAAAA,MAERwI,EAAkB/H,IAAwB,IAAA+E,EAC5C,OAAK/E,EAAKkF,iBAIiC8C,IAA1B,QAAbjD,EAAA/E,EAAK7C,gBAAQ,IAAA4H,OAAA,EAAbA,EAAezE,uBACPN,EAAK7C,SAASmD,sBAGlBN,EAAKiF,YAAW,EAGtBgD,EAAatF,UACf,IAAI,IAAAuF,EACA5I,EAAMQ,MAAqC,QAAhCoI,QAAUtF,WAAsB,IAAAsF,EAAAA,EAAK,EACpD,CAAE,MAAOC,GACLzE,QAAQG,MAAM,qCAAsCsE,GACpDtE,EAAM/D,MAAQqI,GACdC,EAAAA,EAAAA,GAAU,CACNC,MAAO,oBACPC,QAAS,sEAEjB,CAAE,QACER,EAAQhI,OAAQ,CACpB,GAGJmI,IAEA,MAAMM,EAAgBA,KAClB,MAAMC,EAAevH,SAASwH,eAAe,qBACzCD,GACAA,EAAaE,UAAUC,IAAI,SAC/B,EAIEC,EAAsB5I,IACjB,GAGX6I,EAAAA,EAAAA,IAAMf,GAAUgB,IACPA,GACDP,GACJ,IAGJ,MAAMQ,EAAiB/I,IAAwB,IAAAgF,EAC3C,MAA+B,kBAApBhF,EAAKtC,YAAkE,kBAAnB,QAApBsH,EAAOhF,EAAK7C,gBAAQ,IAAA6H,OAAA,EAAbA,EAAepH,cACtD,KAEJ,IAAGoC,EAAKtC,WAAasC,EAAK7C,SAASS,aAAc,GAG5DiL,EAAAA,EAAAA,IAAMlB,GAAYhF,UACVmG,GACApF,QAAQC,IAAI,8DACNkE,EAAU/D,eAEhBJ,QAAQC,IAAI,qDACNkE,EAAU1E,gBACV0E,EAAU9D,UAAUiF,EAAAA,EAAyBC,YACnDpB,EAAU3D,OAA4B,oBAAqBnB,IACvDW,QAAQC,IAAI,+CAAgDZ,GAC5DtD,EAAYsD,EAAKrD,OAAO,IAEhC,KAGJwJ,EAAAA,EAAAA,KAAUvG,UACDgF,EAAW7H,QACZ4D,QAAQC,IAAI,kCACNkE,EAAU1E,gBACV0E,EAAU9D,UAAUiF,EAAAA,EAAyBC,YACnDpB,EAAU3D,OAA4B,oBAAqBnB,IACvDW,QAAQC,IAAI,+CAAgDZ,GAC5DtD,EAAYsD,EAAKrD,OAAO,IAEhC,IAGJyJ,eAAiBA,KACbzF,QAAQC,IAAI,iDACZkE,EAAU/D,YAAY,EAG1B,MAAMsF,EAAkBA,CAACpJ,EAAsB/E,KAC3CZ,EAAAA,EAAoBU,sBAAsBiF,EAAM/E,EAAS0B,WAAYoM,EAAc/I,GAAM,EDtC7F,MAAO,CAACmF,EAAUC,IACP0C,EAAQhI,OA2FbuJ,EAAAA,EAAAA,IAAoB,IAAI,KA1FvBhE,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOhB,EAAY,GACnDe,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoBC,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,KAAY8D,EAAAA,EAAAA,IAAOhK,IAAQ,CAACU,EAAMoG,KAAS,IAAAmD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACjG,OAAQxE,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK,CAC7CK,IAAK3F,EAAKC,QACV6J,KAAM9J,EAAK+J,IACXxF,OAAOsB,EAAAA,EAAAA,IAAgB,CACnB,iCACA,CACI,6BAA8BkC,EAAe/H,MAGrD,eAAgBA,EAAKgK,WACrB,kBAAmB,OACnBC,QAAUC,GAAiBd,EAAgBpJ,EAAMoG,EAAQ,IACxD,EACD+D,EAAAA,EAAAA,IAAoB,MAAOxD,EAAY,EACrCwD,EAAAA,EAAAA,IAAoB,MAAOvD,EAAY,EACrCuD,EAAAA,EAAAA,IAAoB,MAAOtD,EAAY,EACrCsD,EAAAA,EAAAA,IAAoB,KAAMrD,GAAYL,EAAAA,EAAAA,IAAiBzG,EAAKzC,MAAO,IACnE4M,EAAAA,EAAAA,IAAoB,IAAKpD,GAAYN,EAAAA,EAAAA,IAA0C,QAA1B8C,EAAc,QAAdC,EAACxJ,EAAK7C,gBAAQ,IAAAqM,OAAA,EAAbA,EAAepM,kBAAU,IAAAmM,EAAAA,EAAI,IAAK,MAE1FY,EAAAA,EAAAA,IAAoB,MAAOnD,EAAY,CACpChH,EAAKjD,qBACDsI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK2B,EAAY,WACnD5B,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK4B,GAAaT,EAAAA,EAAAA,IAAiBzG,EAAKlC,eAAiB,OAAQ2I,EAAAA,EAAAA,IAAiBzG,EAAKhC,aAAc,SAGhJmM,EAAAA,EAAAA,IAAoB,MAAO,CACzBC,IAAKpK,EAAKqK,YACV9F,MAAO,eACP+F,IAAK,IACJ,KAAM,EAAGnD,IACZgD,EAAAA,EAAAA,IAAoB,MAAO/C,EAAa,EACtC+C,EAAAA,EAAAA,IAAoB,MAAO9C,EAAa,EACtCkD,EAAAA,EAAAA,IAAa7E,EAAAA,EAAQ,CACnBnI,KAAM,kBACNqI,MAAO,GACPvG,OAAQ,MAEV8K,EAAAA,EAAAA,IAAoB,OAAQ7C,EAAa,EACvCkD,EAAAA,EAAAA,KAAiB/D,EAAAA,EAAAA,KAAiB6C,EAAAA,EAAAA,IAAO9I,EAAAA,GAAawB,eAAehC,EAAKnD,UAAU,IAAU,IAAK,GACnGuI,EAAO,KAAOA,EAAO,IAAK+E,EAAAA,EAAAA,IAAoB,OAAQ,CAAE5F,MAAO,0BAA4B,KAAM,KACjGiG,EAAAA,EAAAA,IAAiB,KAAM/D,EAAAA,EAAAA,KAAiB6C,EAAAA,EAAAA,IAAO9I,EAAAA,GAAawB,eAAehC,EAAKtD,UAAU,IAAS,OAI3D,QAAnB,QAAb+M,EAAAzJ,EAAK7C,gBAAQ,IAAAsM,OAAA,EAAbA,EAAe7L,oBACiBoK,KAAnB,QAAb0B,EAAA1J,EAAK7C,gBAAQ,IAAAuM,OAAA,EAAbA,EAAe9L,eACfoC,EAAKtC,aAEZ2H,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAagF,EAAuB,CACjD9E,IAAK,EACL3F,KAAMA,EACN,kBAAmBA,EAAKtC,YACvB,KAAM,EAAG,CAAC,OAAQ,qBAEmB,QAAnB,QAAbiM,EAAA3J,EAAK7C,gBAAQ,IAAAwM,OAAA,EAAbA,EAAepJ,oBACiByH,KAAnB,QAAb4B,EAAA5J,EAAK7C,gBAAQ,IAAAyM,OAAA,EAAbA,EAAerJ,eACF,QAD4BsJ,EACzC7J,EAAK7C,gBAAQ,IAAA0M,GAAbA,EAAetJ,aAAa8B,SAEjCgD,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaiF,EAAuB,CACjD/E,IAAK,EACLI,QAAS/F,EAAK7C,SAASoD,cACtB,KAAM,EAAG,CAAC,cACb8I,EAAAA,EAAAA,IAAoB,IAAI,KAE/BtB,EAAe/H,KACXqF,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOiC,EAAa,CACnDvH,EAAK7C,SAASmD,sBAAyBN,EAAKiF,cAMzCI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK,CACtCK,IAAK,EACLxE,UAAWnB,EAAK2K,kBAChBpG,MAAO,yBACN,KAAM,EAAGkD,MATXpC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK,CACtCK,IAAK,EACLxE,UAAWnB,EAAK4K,qBAChBrG,MAAO,yBACN,KAAM,EAAGiD,QAOlB6B,EAAAA,EAAAA,IAAoB,IAAI,KAE7BT,EAAmB5I,KACfqF,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOoC,EAAatC,EAAO,KAAOA,EAAO,GAAK,EAC/E+E,EAAAA,EAAAA,IAAoB,OAAQ,CAAE5F,MAAO,kCAAoC,kDAAmD,QAE9H8E,EAAAA,EAAAA,IAAoB,IAAI,IAC3B,GAAI3C,EAAW,IAChB,QAIZ,IErPM,EAAc,EAEpB,G","sources":["webpack://@sazka/web/./js/app/live-dealer/live-dealer-analytics.ts","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/live-dealer-cards.ts","webpack://@sazka/web/../../libs/utils/string-utils.ts","webpack://@sazka/web/./js/app/live-dealer/http-client.ts","webpack://@sazka/web/./js/app/live-dealer/live-dealer-api.ts","webpack://@sazka/web/./js/workers/notifications/websocket/public-hub.ts","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/ld-product-card-capacity.vue?154d","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/ld-product-card-capacity.vue","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/ld-product-card-capacity.vue?8185","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/ld-product-card-roulette.vue?f7b5","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/ld-product-card-roulette.vue","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/ld-product-card-roulette.vue?1cda","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/_ld-product-cards.vue?5ca8","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/_ld-product-cards.vue","webpack://@sazka/web/./js/app/live-dealer/widgets/ld-product-cards/_ld-product-cards.vue?1ce2"],"sourcesContent":["import { LiveDealerGame } from \"./models/live-dealer-game\";\r\n\r\nexport namespace LiveDealerAnalytics {\r\n // V1.0\r\n\r\n // DL1.10\r\n export function pushPageReady() {\r\n window.dataLayer.push({\r\n page: {\r\n type: \"lobby.hryLive\",\r\n kind: \"lobby.hryLive\",\r\n verticalCode: \"hry-live\",\r\n },\r\n });\r\n }\r\n\r\n enum LiveDealerAvailability {\r\n fulltime = \"fulltime\",\r\n bounded = \"bounded\",\r\n }\r\n\r\n // DL2.10\r\n export function pushGameCardClickFeed(game: LiveDealerGame, position: string, emptySeats: string) {\r\n window.dataLayer.push({\r\n event: \"action.show.products\",\r\n action: {\r\n show: {\r\n products: [\r\n {\r\n gameCode: game.codeName ?? null,\r\n verticalCode: \"hry-live\",\r\n placement: \"allGames\",\r\n position: position,\r\n maxBet: game.maxWager?.toString() ?? null,\r\n minBet: game.minWager?.toString() ?? null,\r\n availability: game.isAvailableNonstop\r\n ? LiveDealerAvailability.fulltime\r\n : LiveDealerAvailability.bounded,\r\n croupierName: game.liveData?.dealerName ?? null,\r\n tableCapacity: emptySeats,\r\n tableName: game.name ?? null,\r\n tableProvider: game.provider ?? null,\r\n tableSeats: game.tableSeats?.toString() ?? null,\r\n tablePlayers: game.liveData?.playersCount?.toString() ?? null,\r\n operationHoursStart: game.availableFrom ?? null,\r\n operationHoursEnd: game.availableTo ?? null,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n }\r\n\r\n // DL2.10\r\n export function pushGameCardClick(\r\n gameCode: string,\r\n position: string,\r\n maxBet: string,\r\n minBet: string,\r\n availability: string\r\n ) {\r\n window.dataLayer.push({\r\n event: \"action.show.products\",\r\n action: {\r\n show: {\r\n products: [\r\n {\r\n gameCode: gameCode,\r\n verticalCode: \"hry-live\",\r\n placement: \"allGames\",\r\n position: position,\r\n maxBet: maxBet,\r\n minBet: minBet,\r\n availability: availability,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n }\r\n\r\n // DL2.35\r\n export function pushCloseOnboardingTutorial() {\r\n window.dataLayer.push({\r\n event: \"action.closeOnboarding.hryLive\",\r\n });\r\n }\r\n\r\n // DL2.40\r\n export function pushNavigationClick() {\r\n window.dataLayer.push({\r\n event: \"action.click.navigation\",\r\n action: {\r\n click: {\r\n name: \"Hry Live\",\r\n eventProperty2: \"main\",\r\n },\r\n },\r\n });\r\n }\r\n\r\n // DL2.50\r\n export function pushClickGame(gameCode: string, position: number) {\r\n window.dataLayer.push({\r\n event: \"action.show.products\",\r\n action: {\r\n show: {\r\n products: [\r\n {\r\n gameCode: gameCode,\r\n verticalCode: \"hry-live\",\r\n placement: \"bottom\",\r\n position: position,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n }\r\n\r\n // DL2.60\r\n export function pushClickMoreGames() {\r\n window.dataLayer.push({\r\n event: \"action.showSazkaHry.hryLive\",\r\n });\r\n }\r\n\r\n // DL2.70\r\n export function pushPlayVideo() {\r\n window.dataLayer.push({\r\n event: \"action.play.video\",\r\n });\r\n }\r\n\r\n // DL3.10\r\n export function pushBannerImpression(\r\n codeName1: string,\r\n height1: string,\r\n creative1: string,\r\n codeName2: string,\r\n height2: string,\r\n creative2: string\r\n ) {\r\n window.dataLayer.push({\r\n event: \"action.impress.promos\",\r\n action: {\r\n impress: {\r\n promos: [\r\n {\r\n id: codeName1,\r\n name: codeName1 + \".\" + height1,\r\n creative: creative1,\r\n position: \"hryLive\",\r\n },\r\n\r\n {\r\n id: codeName2,\r\n name: codeName2 + \".\" + height2,\r\n creative: creative2,\r\n position: \"hryLive\",\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n }\r\n\r\n // DL3.20\r\n export function pushBannerClick(codeName: string, height: string, creative: string) {\r\n window.dataLayer.push({\r\n event: \"action.show.promos\",\r\n action: {\r\n show: {\r\n promos: [\r\n {\r\n id: codeName,\r\n name: codeName + \".\" + height,\r\n creative: creative,\r\n position: \"hryLive\",\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n }\r\n}\r\n","import { LiveDealerGame } from \"@/live-dealer/models/live-dealer-game\";\r\nimport { LiveDealerTable } from \"../../../../workers/notifications/websocket/models/live-dealer-tables\";\r\nimport { ref } from \"vue\";\r\n\r\nconst cards = ref<LiveDealerGame[]>([]);\r\n\r\nexport function useLiveDealerCards() {\r\n function updateCards(tables: LiveDealerTable[]) {\r\n tables.forEach((tableUpdate) => {\r\n const matchingCard = cards.value.find((card) => card.tableId === tableUpdate.tableId);\r\n\r\n if (matchingCard) {\r\n matchingCard.liveData.dealerName = tableUpdate.dealerName ?? null;\r\n matchingCard.liveData.isCurrentlyAvailable = tableUpdate.isCurrentlyAvailable ?? null;\r\n matchingCard.liveData.playersCount = tableUpdate.playersCount ?? null;\r\n matchingCard.liveData.tableResults = tableUpdate.tableResults ?? null;\r\n }\r\n });\r\n }\r\n\r\n return { cards, updateCards };\r\n}\r\n","export namespace StringUtils {\r\n /**\r\n * Formats a number by adding commas for thousands separator and truncating decimal places.\r\n *\r\n * @param {number} value - The number to format.\r\n * @param {boolean} useNbsp - Optional flag to use non-breaking space as a separator. Defaults to true.\r\n * @return {string} The formatted number with commas and optional non-breaking space separator.\r\n */\r\n export const formatNumber = (value: number, useNbsp = true): string => {\r\n if (typeof value !== \"number\") {\r\n return \"---\";\r\n }\r\n const ref = value.toFixed(2).split(\".\");\r\n let preComma = ref[0] || \"\";\r\n const postComma = ref[1];\r\n preComma = stringReverse((stringReverse(preComma).match(/.{1,3}/g) || [\"\"]).join(useNbsp ? \";psbn&\" : \" \"));\r\n\r\n return postComma != \"00\" ? preComma + \",\" + postComma : preComma;\r\n };\r\n\r\n /**\r\n * Formats a currency value by calling formatNumber and appending the currency symbol.\r\n *\r\n * @param {number} value - The value to format as currency.\r\n * @param {boolean} useNbsp - Optional flag to use non-breaking space as a separator. Defaults to true.\r\n * @return {string} The formatted currency value with the currency symbol.\r\n */\r\n export const formatCurrency = (value: number, useNbsp = true): string => {\r\n // this is also case for 0\r\n if (!value || isNaN(value)) {\r\n value = 0;\r\n }\r\n return `${formatNumber(value, useNbsp)}${useNbsp ? \" \" : \" \"}KÄŤ`;\r\n };\r\n\r\n /**\r\n * Limits the length of the text if it exceeds the specified limit by truncating and adding ellipsis.\r\n *\r\n * @param {string} text - The input text to limit.\r\n * @param {number} limit - The maximum length of the text before truncation. Defaults to 50.\r\n * @return {string} The text with limited length, potentially truncated with ellipsis.\r\n */\r\n export const limitTextLength = (text: string, limit = 50) => {\r\n if (text && text.length > limit) {\r\n return text.substring(0, limit - 3) + \"...\";\r\n }\r\n return text;\r\n };\r\n\r\n /**\r\n * Reverses the given string.\r\n *\r\n * @param {string} str - The string to be reversed.\r\n * @return {string} The reversed string.\r\n */\r\n export function stringReverse(str: string): string {\r\n return str.split(\"\").reverse().join(\"\");\r\n }\r\n\r\n /**\r\n * Converts given HTML text to plain text.\r\n *\r\n * @param {string} htmlText - The HTML text to be converted to plain text.\r\n * @return {string} The plain text.\r\n */\r\n export function getPlainTextFromHtml(htmlText: string): string {\r\n const tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = htmlText;\r\n return tempDiv.textContent || tempDiv.innerText || \"\";\r\n }\r\n\r\n /**\r\n * Sanitizes a string by removing HTML tags and replacing multiple whitespaces/newlines with a single space.\r\n */\r\n export function sanitizeString(input: string): string {\r\n return input\r\n .replace(/<[^>]*>/g, \"\") // Remove HTML tags\r\n .replace(/\\s+/g, \" \") // Replace multiple whitespaces/newlines with a single space\r\n .trim(); // Remove leading and trailing spaces\r\n }\r\n}\r\n","import axios from \"axios\";\r\n\r\nexport const liveDealerHttpClient = axios.create({\r\n baseURL: \"/api/live-dealer\",\r\n});\r\n","import { liveDealerHttpClient } from \"./http-client\";\r\nimport { LiveDealerGame } from \"./models/live-dealer-game\";\r\n\r\nexport async function fetchLiveDealerGames() {\r\n const response = await liveDealerHttpClient.get<LiveDealerGame[]>(\"/games\");\r\n\r\n const { data } = response;\r\n\r\n // prefill with empty liveData object\r\n data.forEach((game) => {\r\n game.liveData ??= {\r\n tableId: null,\r\n isCurrentlyAvailable: null,\r\n dealerName: null,\r\n playersCount: null,\r\n tableResults: null,\r\n };\r\n });\r\n\r\n return data;\r\n}\r\n","import { ref } from \"vue\";\r\nimport { NotificationServerClient } from \"./notification-server-client\";\r\nimport { HubEndpoint } from \"./models/hub-endpoints\";\r\nimport { ServerSubscribeArguments } from \"./models/server-subscribe-argument\";\r\nimport { ServerListenDataType, ServerListenMetod } from \"./models/listen-models\";\r\n\r\nexport function usePublicHub() {\r\n const client = ref<NotificationServerClient | null>(null);\r\n const connected = ref(false);\r\n\r\n const connect = async () => {\r\n if (!client.value) {\r\n client.value = new NotificationServerClient(\r\n appSettings[\"Integrations:NotificationsServer:Domain\"],\r\n HubEndpoint.Public,\r\n environment.env\r\n );\r\n }\r\n if (!connected.value) {\r\n try {\r\n await client.value.connect();\r\n connected.value = true;\r\n console.log(\"Connected to Public Hub\");\r\n } catch (err) {\r\n console.error(\"Failed to connect to Public Hub\", err);\r\n }\r\n }\r\n };\r\n\r\n const disconnect = async () => {\r\n if (client.value && connected.value) {\r\n try {\r\n await client.value.disconnect();\r\n connected.value = false;\r\n console.log(\"Disconnected from Public Hub\");\r\n } catch (err) {\r\n console.error(\"Failed to disconnect from Public Hub\", err);\r\n }\r\n }\r\n };\r\n\r\n const subscribe = async (serverArgument: ServerSubscribeArguments) => {\r\n if (!connected.value) {\r\n await connect();\r\n }\r\n\r\n if (client.value && connected.value) {\r\n try {\r\n await client.value.invoke(\"Subscribe\", serverArgument);\r\n console.log(`Subscribed to '${serverArgument}'.`);\r\n } catch (err) {\r\n console.error(`Failed to subscribe to '${serverArgument}'.`, err);\r\n }\r\n } else {\r\n console.error(\"Public Hub client is not available or not connected\");\r\n }\r\n };\r\n\r\n const listen = <T extends ServerListenDataType>(method: ServerListenMetod, callback: (data: T) => void) => {\r\n if (!client.value) {\r\n console.warn(`Listen '${method}' didn't assign to CONNECTION!`);\r\n return;\r\n }\r\n\r\n client.value.listen(method, (data: ServerListenDataType) => {\r\n callback(data as T);\r\n });\r\n };\r\n\r\n return {\r\n client,\r\n connected,\r\n connect,\r\n disconnect,\r\n listen,\r\n subscribe,\r\n };\r\n}\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"ld-card__capacity\" }\n\nimport { LiveDealerGame } from \"@/live-dealer/models/live-dealer-game\";\r\nimport DsIcon from \"@sazka/design-system/src/icon/ds-icon.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ld-product-card-capacity',\n props: {\n card: {}\n },\n setup(__props: any) {\n\r\n\r\n\r\nconst capacityIconIsActive = (card: LiveDealerGame, n: number) => {\r\n return card.isAvailable && card.isEnabled && card.liveData?.playersCount && n <= card.liveData?.playersCount;\r\n};\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.card.tableSeats, (n) => {\n return (_openBlock(), _createBlock(DsIcon, {\n key: n,\n name: \"account\",\n width: 16,\n height: 16,\n class: _normalizeClass(['ld-card__capacity-icon', { 'ld-card__capacity-icon--active': capacityIconIsActive(_ctx.card, n) }])\n }, null, 8, [\"class\"]))\n }), 128))\n ]))\n}\n}\n\n})","<template>\r\n <div class=\"ld-card__capacity\">\r\n <DsIcon\r\n v-for=\"n in card.tableSeats\"\r\n :key=\"n\"\r\n name=\"account\"\r\n :width=\"16\"\r\n :height=\"16\"\r\n :class=\"['ld-card__capacity-icon', { 'ld-card__capacity-icon--active': capacityIconIsActive(card, n) }]\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { LiveDealerGame } from \"@/live-dealer/models/live-dealer-game\";\r\nimport DsIcon from \"@sazka/design-system/src/icon/ds-icon.vue\";\r\n\r\ndefineProps<{\r\n card: LiveDealerGame;\r\n}>();\r\n\r\nconst capacityIconIsActive = (card: LiveDealerGame, n: number) => {\r\n return card.isAvailable && card.isEnabled && card.liveData?.playersCount && n <= card.liveData?.playersCount;\r\n};\r\n</script>\r\n","import script from \"./ld-product-card-capacity.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ld-product-card-capacity.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"ld-card__roulette\" }\n\nimport { computed } from \"vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ld-product-card-roulette',\n props: {\n numbers: {}\n },\n setup(__props: any) {\n\r\nconst props = __props;\r\n\r\nconst numberedItems = computed(() => {\r\n return props.numbers.map((num, index) => ({\r\n number: num,\r\n id: `${num}-${index}`,\r\n }));\r\n});\r\n\r\nconst getRouletteColor = (n: string) => {\r\n if (n === \"0\" || n === \"00\") {\r\n return \"green\";\r\n }\r\n\r\n const number = parseInt(n, 10);\r\n\r\n if ((number >= 1 && number <= 10) || (number >= 19 && number <= 28)) {\r\n return number % 2 === 0 ? \"black\" : \"red\";\r\n } else if ((number >= 11 && number <= 18) || (number >= 29 && number <= 36)) {\r\n return number % 2 === 0 ? \"red\" : \"black\";\r\n }\r\n\r\n return \"black\";\r\n};\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(numberedItems.value, (item) => {\n return (_openBlock(), _createElementBlock(\"p\", {\n key: item.id,\n class: _normalizeClass(`ld-card__roulette-number ld-card__roulette-number--${getRouletteColor(item.number)}`)\n }, _toDisplayString(item.number), 3))\n }), 128))\n ]))\n}\n}\n\n})","<template>\r\n <div class=\"ld-card__roulette\">\r\n <p\r\n v-for=\"item in numberedItems\"\r\n :key=\"item.id\"\r\n :class=\"`ld-card__roulette-number ld-card__roulette-number--${getRouletteColor(item.number)}`\"\r\n >\r\n {{ item.number }}\r\n </p>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from \"vue\";\r\n\r\nconst props = defineProps<{\r\n numbers: string[];\r\n}>();\r\n\r\nconst numberedItems = computed(() => {\r\n return props.numbers.map((num, index) => ({\r\n number: num,\r\n id: `${num}-${index}`,\r\n }));\r\n});\r\n\r\nconst getRouletteColor = (n: string) => {\r\n if (n === \"0\" || n === \"00\") {\r\n return \"green\";\r\n }\r\n\r\n const number = parseInt(n, 10);\r\n\r\n if ((number >= 1 && number <= 10) || (number >= 19 && number <= 28)) {\r\n return number % 2 === 0 ? \"black\" : \"red\";\r\n } else if ((number >= 11 && number <= 18) || (number >= 29 && number <= 36)) {\r\n return number % 2 === 0 ? \"red\" : \"black\";\r\n }\r\n\r\n return \"black\";\r\n};\r\n</script>\r\n","import script from \"./ld-product-card-roulette.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ld-product-card-roulette.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createTextVNode as _createTextVNode, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"ld-grid\"\n}\nconst _hoisted_2 = [\"href\", \"data-game-id\", \"onClick\"]\nconst _hoisted_3 = { class: \"ld-card\" }\nconst _hoisted_4 = { class: \"ld-card__header\" }\nconst _hoisted_5 = { class: \"ld-card__header-text\" }\nconst _hoisted_6 = { class: \"ld-card__game-name\" }\nconst _hoisted_7 = { class: \"ld-card__dealer-name\" }\nconst _hoisted_8 = { class: \"ds-badge\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"ds-badge__text\"\n}\nconst _hoisted_10 = {\n key: 1,\n class: \"ds-badge__text\"\n}\nconst _hoisted_11 = [\"src\"]\nconst _hoisted_12 = { class: \"ld-card__bottom\" }\nconst _hoisted_13 = { class: \"ld-card__payout\" }\nconst _hoisted_14 = { class: \"ld-card__payout-prize\" }\nconst _hoisted_15 = {\n key: 0,\n class: \"ld-card__overlay\"\n}\nconst _hoisted_16 = [\"innerHTML\"]\nconst _hoisted_17 = [\"innerHTML\"]\nconst _hoisted_18 = {\n key: 0,\n class: \"ld-card__happy-hour-bagde\"\n}\n\nimport { onMounted, ref, watch } from \"vue\";\r\nimport { StringUtils } from \"@sazka/utils/string-utils\";\r\nimport { showAlert } from \"@sazka/design-system/src/modal-alert/mount-alert\";\r\nimport { fetchLiveDealerGames } from \"@/live-dealer/live-dealer-api\";\r\nimport { LiveDealerAnalytics } from \"@/live-dealer/live-dealer-analytics\";\r\nimport { LiveDealerGame } from \"@/live-dealer/models/live-dealer-game\";\r\nimport { useLiveDealerCards } from \"./live-dealer-cards\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport { usePublicHub } from \"../../../../workers/notifications/websocket/public-hub\";\r\nimport { ServerSubscribeArguments } from \"../../../../workers/notifications/websocket/models/server-subscribe-argument\";\r\nimport { LiveDealerTablesDto } from \"../../../../workers/notifications/websocket/models/listen-models\";\r\nimport LdProductCardCapacity from \"./ld-product-card-capacity.vue\";\r\nimport DsIcon from \"@sazka/design-system/src/icon/ds-icon.vue\";\r\nimport LdProductCardRoulette from \"./ld-product-card-roulette.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: '_ld-product-cards',\n setup(__props) {\n\r\nconst { isLoggedIn } = useNgSession();\r\nconst { cards, updateCards } = useLiveDealerCards();\r\nconst publicHub = usePublicHub();\r\n\r\nconst loading = ref(true);\r\nconst error = ref();\r\n\r\nconst cardIsDisabled = (card: LiveDealerGame) => {\r\n if (!card.isEnabled) {\r\n return true;\r\n }\r\n\r\n if (card.liveData?.isCurrentlyAvailable != undefined) {\r\n return !card.liveData.isCurrentlyAvailable;\r\n }\r\n\r\n return !card.isAvailable;\r\n};\r\n\r\nconst fetchGames = async () => {\r\n try {\r\n cards.value = (await fetchLiveDealerGames()) ?? [];\r\n } catch (e) {\r\n console.error(\"Failed to fetch live dealer games:\", e);\r\n error.value = e;\r\n showAlert({\r\n title: \"Vyskytla se chyba\",\r\n subText: \"NepodaĹ™ilo se nám naÄŤĂst Hry live, zkuste to prosĂm znovu pozdÄ›ji.\",\r\n });\r\n } finally {\r\n loading.value = false;\r\n }\r\n};\r\n\r\nfetchGames();\r\n\r\nconst hideSkeletons = () => {\r\n const skeletonGrid = document.getElementById(\"ld-grid-skeletons\");\r\n if (skeletonGrid) {\r\n skeletonGrid.classList.add(\"hidden\");\r\n }\r\n};\r\n\r\n// left like a placeholder for v-if, replace with data from web socket in future\r\nconst showHappyHourBagde = (card: LiveDealerGame): boolean => {\r\n return false;\r\n};\r\n\r\nwatch(loading, (newVal) => {\r\n if (!newVal) {\r\n hideSkeletons();\r\n }\r\n});\r\n\r\nconst getEmptySeats = (card: LiveDealerGame) => {\r\n if (typeof card.tableSeats !== \"number\" || typeof card.liveData?.playersCount !== \"number\") {\r\n return null;\r\n }\r\n return `${card.tableSeats - card.liveData.playersCount}`;\r\n};\r\n\r\nwatch(isLoggedIn, async (newVal) => {\r\n if (newVal) {\r\n console.log(\"USER IS NOT LOGGED IN, DISCONNECTING FROM PUBLIC HUB\");\r\n await publicHub.disconnect();\r\n } else {\r\n console.log(\"USER IS LOGGED IN, CONNECTING TO PUBLIC HUB\");\r\n await publicHub.connect();\r\n await publicHub.subscribe(ServerSubscribeArguments.LiveDealer);\r\n publicHub.listen<LiveDealerTablesDto>(\"LiveDealerTables\", (data) => {\r\n console.log(\"NEW 'LiveDealerTables' DATA FROM PUBLIC HUB:\", data);\r\n updateCards(data.tables);\r\n });\r\n }\r\n});\r\n\r\nonMounted(async () => {\r\n if (!isLoggedIn.value) {\r\n console.log(\"CONNECTING TO PUBLIC HUB\");\r\n await publicHub.connect();\r\n await publicHub.subscribe(ServerSubscribeArguments.LiveDealer);\r\n publicHub.listen<LiveDealerTablesDto>(\"LiveDealerTables\", (data) => {\r\n console.log(\"NEW 'LiveDealerTables' DATA FROM PUBLIC HUB:\", data);\r\n updateCards(data.tables);\r\n });\r\n }\r\n});\r\n\r\nonbeforeunload = () => {\r\n console.log(\"PAGE UNLOADING, DISCONNECTING FROM PUBLIC HUB\");\r\n publicHub.disconnect();\r\n};\r\n\r\nconst handleAnalytics = (card: LiveDealerGame, position: number) => {\r\n LiveDealerAnalytics.pushGameCardClickFeed(card, position.toString(), getEmptySeats(card));\r\n};\r\n\nreturn (_ctx: any,_cache: any) => {\n return (!loading.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(cards), (card, index) => {\n return (_openBlock(), _createElementBlock(\"a\", {\n key: card.tableId,\n href: card.url,\n class: _normalizeClass([\r\n 'game-launcher ld-card__wrapper',\r\n {\r\n 'ld-card__wrapper--disabled': cardIsDisabled(card),\r\n },\r\n ]),\n \"data-game-id\": card.externalId,\n \"data-money-mode\": \"true\",\n onClick: ($event: any) => (handleAnalytics(card, index + 1))\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"h3\", _hoisted_6, _toDisplayString(card.name), 1),\n _createElementVNode(\"p\", _hoisted_7, _toDisplayString(card.liveData?.dealerName ?? \"\"), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (card.isAvailableNonstop)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_9, \"24/7\"))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_10, _toDisplayString(card.availableFrom) + \" – \" + _toDisplayString(card.availableTo), 1))\n ])\n ]),\n _createElementVNode(\"img\", {\n src: card.teaserImage,\n class: \"ld-card__img\",\n alt: \"\"\n }, null, 8, _hoisted_11),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(DsIcon, {\n name: \"bet-amount-thin\",\n width: 16,\n height: 16\n }),\n _createElementVNode(\"span\", _hoisted_14, [\n _createTextVNode(_toDisplayString(_unref(StringUtils).formatCurrency(card.minWager, false)) + \" \", 1),\n _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"ld-card__payout-hyphen\" }, \"–\", -1)),\n _createTextVNode(\" \" + _toDisplayString(_unref(StringUtils).formatCurrency(card.maxWager, false)), 1)\n ])\n ]),\n (\r\n card.liveData?.playersCount !== null &&\r\n card.liveData?.playersCount !== undefined &&\r\n card.tableSeats\r\n )\n ? (_openBlock(), _createBlock(LdProductCardCapacity, {\n key: 0,\n card: card,\n \"available-seats\": card.tableSeats\n }, null, 8, [\"card\", \"available-seats\"]))\n : (\r\n card.liveData?.tableResults !== null &&\r\n card.liveData?.tableResults !== undefined &&\r\n card.liveData?.tableResults.length\r\n )\n ? (_openBlock(), _createBlock(LdProductCardRoulette, {\n key: 1,\n numbers: card.liveData.tableResults\n }, null, 8, [\"numbers\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (cardIsDisabled(card))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n (!card.liveData.isCurrentlyAvailable || !card.isAvailable)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 0,\n innerHTML: card.unavailableTableText,\n class: \"ld-card__overlay-text\"\n }, null, 8, _hoisted_16))\n : (_openBlock(), _createElementBlock(\"p\", {\n key: 1,\n innerHTML: card.disabledTableText,\n class: \"ld-card__overlay-text\"\n }, null, 8, _hoisted_17))\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (showHappyHourBagde(card))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, _cache[1] || (_cache[1] = [\n _createElementVNode(\"span\", { class: \"ld-card__happy-hour-bagde-text\" }, \" HAPPY HOUR: BonusovĂ˝ kĂłd najdete ve hĹ™e na TV\", -1)\n ])))\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_2))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","<template>\r\n <div v-if=\"!loading\" class=\"ld-grid\">\r\n <a\r\n v-for=\"(card, index) in cards\"\r\n :key=\"card.tableId\"\r\n :href=\"card.url\"\r\n :class=\"[\r\n 'game-launcher ld-card__wrapper',\r\n {\r\n 'ld-card__wrapper--disabled': cardIsDisabled(card),\r\n },\r\n ]\"\r\n :data-game-id=\"card.externalId\"\r\n data-money-mode=\"true\"\r\n @click=\"handleAnalytics(card, index + 1)\"\r\n >\r\n <div class=\"ld-card\">\r\n <div class=\"ld-card__header\">\r\n <div class=\"ld-card__header-text\">\r\n <h3 class=\"ld-card__game-name\">\r\n {{ card.name }}\r\n </h3>\r\n <p class=\"ld-card__dealer-name\">\r\n {{ card.liveData?.dealerName ?? \"\" }}\r\n </p>\r\n </div>\r\n <div class=\"ds-badge\">\r\n <p v-if=\"card.isAvailableNonstop\" class=\"ds-badge__text\">24/7</p>\r\n <p v-else class=\"ds-badge__text\">\r\n {{ card.availableFrom }} –\r\n {{ card.availableTo }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <img :src=\"card.teaserImage\" class=\"ld-card__img\" alt=\"\" />\r\n\r\n <div class=\"ld-card__bottom\">\r\n <div class=\"ld-card__payout\">\r\n <DsIcon name=\"bet-amount-thin\" :width=\"16\" :height=\"16\" />\r\n <span class=\"ld-card__payout-prize\"\r\n >{{ StringUtils.formatCurrency(card.minWager, false) }}\r\n <span class=\"ld-card__payout-hyphen\">–</span>\r\n {{ StringUtils.formatCurrency(card.maxWager, false) }}</span\r\n >\r\n </div>\r\n <LdProductCardCapacity\r\n v-if=\"\r\n card.liveData?.playersCount !== null &&\r\n card.liveData?.playersCount !== undefined &&\r\n card.tableSeats\r\n \"\r\n :card=\"card\"\r\n :available-seats=\"card.tableSeats\"\r\n />\r\n <LdProductCardRoulette\r\n v-else-if=\"\r\n card.liveData?.tableResults !== null &&\r\n card.liveData?.tableResults !== undefined &&\r\n card.liveData?.tableResults.length\r\n \"\r\n :numbers=\"card.liveData.tableResults\"\r\n />\r\n </div>\r\n\r\n <div v-if=\"cardIsDisabled(card)\" class=\"ld-card__overlay\">\r\n <p\r\n v-if=\"!card.liveData.isCurrentlyAvailable || !card.isAvailable\"\r\n v-html=\"card.unavailableTableText\"\r\n class=\"ld-card__overlay-text\"\r\n ></p>\r\n <p v-else v-html=\"card.disabledTableText\" class=\"ld-card__overlay-text\"></p>\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"showHappyHourBagde(card)\" class=\"ld-card__happy-hour-bagde\">\r\n <span class=\"ld-card__happy-hour-bagde-text\"> HAPPY HOUR: BonusovĂ˝ kĂłd najdete ve hĹ™e na TV</span>\r\n </div>\r\n </a>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { onMounted, ref, watch } from \"vue\";\r\nimport { StringUtils } from \"@sazka/utils/string-utils\";\r\nimport { showAlert } from \"@sazka/design-system/src/modal-alert/mount-alert\";\r\nimport { fetchLiveDealerGames } from \"@/live-dealer/live-dealer-api\";\r\nimport { LiveDealerAnalytics } from \"@/live-dealer/live-dealer-analytics\";\r\nimport { LiveDealerGame } from \"@/live-dealer/models/live-dealer-game\";\r\nimport { useLiveDealerCards } from \"./live-dealer-cards\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport { usePublicHub } from \"../../../../workers/notifications/websocket/public-hub\";\r\nimport { ServerSubscribeArguments } from \"../../../../workers/notifications/websocket/models/server-subscribe-argument\";\r\nimport { LiveDealerTablesDto } from \"../../../../workers/notifications/websocket/models/listen-models\";\r\nimport LdProductCardCapacity from \"./ld-product-card-capacity.vue\";\r\nimport DsIcon from \"@sazka/design-system/src/icon/ds-icon.vue\";\r\nimport LdProductCardRoulette from \"./ld-product-card-roulette.vue\";\r\n\r\nconst { isLoggedIn } = useNgSession();\r\nconst { cards, updateCards } = useLiveDealerCards();\r\nconst publicHub = usePublicHub();\r\n\r\nconst loading = ref(true);\r\nconst error = ref();\r\n\r\nconst cardIsDisabled = (card: LiveDealerGame) => {\r\n if (!card.isEnabled) {\r\n return true;\r\n }\r\n\r\n if (card.liveData?.isCurrentlyAvailable != undefined) {\r\n return !card.liveData.isCurrentlyAvailable;\r\n }\r\n\r\n return !card.isAvailable;\r\n};\r\n\r\nconst fetchGames = async () => {\r\n try {\r\n cards.value = (await fetchLiveDealerGames()) ?? [];\r\n } catch (e) {\r\n console.error(\"Failed to fetch live dealer games:\", e);\r\n error.value = e;\r\n showAlert({\r\n title: \"Vyskytla se chyba\",\r\n subText: \"NepodaĹ™ilo se nám naÄŤĂst Hry live, zkuste to prosĂm znovu pozdÄ›ji.\",\r\n });\r\n } finally {\r\n loading.value = false;\r\n }\r\n};\r\n\r\nfetchGames();\r\n\r\nconst hideSkeletons = () => {\r\n const skeletonGrid = document.getElementById(\"ld-grid-skeletons\");\r\n if (skeletonGrid) {\r\n skeletonGrid.classList.add(\"hidden\");\r\n }\r\n};\r\n\r\n// left like a placeholder for v-if, replace with data from web socket in future\r\nconst showHappyHourBagde = (card: LiveDealerGame): boolean => {\r\n return false;\r\n};\r\n\r\nwatch(loading, (newVal) => {\r\n if (!newVal) {\r\n hideSkeletons();\r\n }\r\n});\r\n\r\nconst getEmptySeats = (card: LiveDealerGame) => {\r\n if (typeof card.tableSeats !== \"number\" || typeof card.liveData?.playersCount !== \"number\") {\r\n return null;\r\n }\r\n return `${card.tableSeats - card.liveData.playersCount}`;\r\n};\r\n\r\nwatch(isLoggedIn, async (newVal) => {\r\n if (newVal) {\r\n console.log(\"USER IS NOT LOGGED IN, DISCONNECTING FROM PUBLIC HUB\");\r\n await publicHub.disconnect();\r\n } else {\r\n console.log(\"USER IS LOGGED IN, CONNECTING TO PUBLIC HUB\");\r\n await publicHub.connect();\r\n await publicHub.subscribe(ServerSubscribeArguments.LiveDealer);\r\n publicHub.listen<LiveDealerTablesDto>(\"LiveDealerTables\", (data) => {\r\n console.log(\"NEW 'LiveDealerTables' DATA FROM PUBLIC HUB:\", data);\r\n updateCards(data.tables);\r\n });\r\n }\r\n});\r\n\r\nonMounted(async () => {\r\n if (!isLoggedIn.value) {\r\n console.log(\"CONNECTING TO PUBLIC HUB\");\r\n await publicHub.connect();\r\n await publicHub.subscribe(ServerSubscribeArguments.LiveDealer);\r\n publicHub.listen<LiveDealerTablesDto>(\"LiveDealerTables\", (data) => {\r\n console.log(\"NEW 'LiveDealerTables' DATA FROM PUBLIC HUB:\", data);\r\n updateCards(data.tables);\r\n });\r\n }\r\n});\r\n\r\nonbeforeunload = () => {\r\n console.log(\"PAGE UNLOADING, DISCONNECTING FROM PUBLIC HUB\");\r\n publicHub.disconnect();\r\n};\r\n\r\nconst handleAnalytics = (card: LiveDealerGame, position: number) => {\r\n LiveDealerAnalytics.pushGameCardClickFeed(card, position.toString(), getEmptySeats(card));\r\n};\r\n</script>\r\n","import script from \"./_ld-product-cards.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./_ld-product-cards.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__"],"names":["LiveDealerAnalytics","pushPageReady","window","dataLayer","push","page","type","kind","verticalCode","LiveDealerAvailability","pushGameCardClickFeed","game","position","emptySeats","_game$codeName","_game$maxWager$toStri","_game$maxWager","_game$minWager$toStri","_game$minWager","_game$liveData$dealer","_game$liveData","_game$name","_game$provider","_game$tableSeats$toSt","_game$tableSeats","_game$liveData$player","_game$liveData2","_game$availableFrom","_game$availableTo","event","action","show","products","gameCode","codeName","placement","maxBet","maxWager","toString","minBet","minWager","availability","isAvailableNonstop","fulltime","bounded","croupierName","liveData","dealerName","tableCapacity","tableName","name","tableProvider","provider","tableSeats","tablePlayers","playersCount","operationHoursStart","availableFrom","operationHoursEnd","availableTo","pushGameCardClick","pushCloseOnboardingTutorial","pushNavigationClick","click","eventProperty2","pushClickGame","pushClickMoreGames","pushPlayVideo","pushBannerImpression","codeName1","height1","creative1","codeName2","height2","creative2","impress","promos","id","creative","pushBannerClick","height","cards","ref","useLiveDealerCards","updateCards","tables","forEach","tableUpdate","matchingCard","value","find","card","tableId","_tableUpdate$dealerNa","_tableUpdate$isCurren","_tableUpdate$playersC","_tableUpdate$tableRes","isCurrentlyAvailable","tableResults","StringUtils","stringReverse","str","split","reverse","join","getPlainTextFromHtml","htmlText","tempDiv","document","createElement","innerHTML","textContent","innerText","sanitizeString","input","replace","trim","formatNumber","useNbsp","toFixed","preComma","postComma","match","formatCurrency","isNaN","limitTextLength","text","limit","length","substring","liveDealerHttpClient","axios","create","baseURL","async","fetchLiveDealerGames","response","get","data","usePublicHub","client","connected","connect","NotificationServerClient","appSettings","HubEndpoint","Public","environment","env","console","log","err","error","disconnect","subscribe","invoke","serverArgument","listen","method","callback","warn","_hoisted_1","class","_defineComponent","__name","props","setup","__props","capacityIconIsActive","n","_card$liveData","_card$liveData2","isAvailable","isEnabled","_ctx","_cache","_openBlock","_createElementBlock","_Fragment","_renderList","_createBlock","DsIcon","key","width","_normalizeClass","__exports__","numbers","numberedItems","computed","map","num","index","number","getRouletteColor","parseInt","item","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","isLoggedIn","useNgSession","publicHub","loading","cardIsDisabled","undefined","fetchGames","_await$fetchLiveDeale","e","showAlert","title","subText","hideSkeletons","skeletonGrid","getElementById","classList","add","showHappyHourBagde","watch","newVal","getEmptySeats","ServerSubscribeArguments","LiveDealer","onMounted","onbeforeunload","handleAnalytics","_createCommentVNode","_unref","_card$liveData$dealer","_card$liveData3","_card$liveData4","_card$liveData5","_card$liveData6","_card$liveData7","_card$liveData8","href","url","externalId","onClick","$event","_createElementVNode","src","teaserImage","alt","_createVNode","_createTextVNode","LdProductCardCapacity","LdProductCardRoulette","disabledTableText","unavailableTableText"],"sourceRoot":""}