{"version":3,"file":"static/chunks/pages/_site/[city]/domru-tv/packages-92715c1b08ccec82.js","mappings":"uFACKA,OAAOC,SAAWD,OAAOC,UAAY,IAAIC,KAAK,CAC7C,kCACA,WACE,OAAO,EAAQ,W,u6BCIhB,IAAMC,GAAcC,EAAAA,EAAAA,SAAOC,EAAAA,GAAY,Y,6BAAnBD,C,IACFE,EAAAA,GAAAA,QAKZC,EAAYH,EAAAA,QAAAA,GAAAA,WAAS,C,6BAATA,C,IACnBI,EAAAA,EAAAA,GAGmBF,EAAAA,GAAAA,OACfE,EAAAA,EAAAA,IAIGC,GAAuBL,EAAAA,EAAAA,SAAOM,EAAAA,GAAoB,Y,6BAA3BN,C,IAOHE,EAAAA,GAAAA,OACfE,EAAAA,EAAAA,GAEeF,EAAAA,GAAAA,OACfE,EAAAA,EAAAA,ICDlB,EAzBmB,WACf,IAAMG,GAAWC,EAAAA,EAAAA,OAEjBC,EAAAA,EAAAA,YAAU,WACNF,ECNG,W,OAAA,4BAAMA,EAA6BG,G,IAC4BA,EAAU,EAAhDC,EAAwBC,EAC9CC,E,wEAD4DH,EAAAA,IAAU,EAAVA,EAA1DI,KAAQC,EAAsB,EAAtBA,SAAYJ,WAAgBK,EAAsBN,EAAtBM,KAAQJ,O,UAC9BK,EAAAA,EAAAA,GAAW,CAC7BN,WAAAA,EACAC,OAAAA,EACAM,IAAK,QACLC,OAAQ,iD,OAJNN,EAAU,EAAH,KAObN,EAAS,CACLa,KAAMC,EAAAA,EAAAA,cACNC,QAAS,CACLT,QAASA,K,2DAZRN,EAA6BG,G,gCAAnC,MDOJ,CAACH,IAEJ,IAAM,GAEFgB,EAAAA,EAAAA,KAAY,SAACC,G,MAAmB,CAChCX,QAASW,EAAMC,gBAAgBZ,QAAQS,YAFvCT,QAKJ,OACI,UAACd,EAAW,C,WACR,SAACI,EAAS,C,SAAC,8IACX,SAACE,EAAoB,CACjBQ,QAASA,EACTa,cAAc,EACdC,YAAU,wB,4CEkB1B,EA9Bc,Y,IAAGC,EAAS,EAATA,UAAWC,EAAU,EAAVA,WAClBC,GAAWC,EAAAA,EAAAA,GAAc,eAAsC,OAAvB7B,EAAAA,GAAAA,OAAuB,MAErB8B,GAAAA,EAAAA,EAAAA,GAA2B,SAAS,GAA5EC,EAAwCD,EAAxCC,oBAAqBC,EAAmBF,EAAnBE,eAE7B,OACI,UAACjC,EAAAA,EAAW,CAACkC,GAAIP,E,WACb,SAAC3B,EAAAA,EAAAA,MAAiB,C,SAAC,qFACnB,SAACA,EAAAA,EAAAA,QAAmB,C,SACfiC,EAAeE,KAAIC,SAAAA,G,OAChB,SAACC,EAAAA,EAAa,CAEVC,SAAUF,EACVV,YAAU,gBAFLU,EAAOF,SAMvBF,IACG,SAAChC,EAAAA,EAAAA,OAAkB,CACfmB,KAAMoB,EAAAA,GAAAA,UACNC,KAAMX,EAAWY,EAAAA,GAAAA,MAAiBA,EAAAA,GAAAA,OAClCC,KAAM,sEACNC,QAAS,W,OAAMf,EAAW,UAC1BF,YAAU,uB,iCCf9B,EAhBiB,Y,IAAGC,EAAS,EAATA,UAChB,OACI,UAAC3B,EAAAA,EAAW,CAACkC,GAAIP,E,WACb,SAAC3B,EAAAA,EAAAA,MAAiB,C,SAAC,+HACnB,SAACA,EAAAA,EAAAA,QAAmB,C,SACf4C,OAAOC,QAAQC,EAAAA,GAAUX,KAAI,Y,mBAAED,EAAE,KAAEa,EAAO,K,OACvC,SAACC,EAAAA,EAAW,CAERD,QAASA,GADJb,Y,WCwB7B,EAxBsB,Y,IAAGP,EAAS,EAATA,UAAWC,EAAU,EAAVA,WAC1BC,GAAWC,EAAAA,EAAAA,GAAc,eAAsC,OAAvB7B,EAAAA,GAAAA,OAAuB,MAErB8B,GAAAA,EAAAA,EAAAA,GAA+B,iBAAiB,GAAxFC,EAAwCD,EAAxCC,oBAAqBC,EAAmBF,EAAnBE,eAE7B,OACI,UAACjC,EAAAA,EAAW,CAACkC,GAAIP,E,WACb,SAAC3B,EAAAA,EAAAA,MAAiB,C,SAAC,qKACnB,SAACA,EAAAA,EAAAA,QAAmB,C,UAChB,SAACiD,EAAAA,EAAmB,CAACC,cAAejB,MAEvCD,IACG,SAAChC,EAAAA,EAAAA,OAAkB,CACfmB,KAAMoB,EAAAA,GAAAA,UACNC,KAAMX,EAAWY,EAAAA,GAAAA,MAAiBA,EAAAA,GAAAA,OAClCC,KAAM,sEACNC,QAAS,W,OAAMf,EAAW,kBAC1BF,YAAU,uB,uSC3BvB,IAAMyB,GAAgBpD,EAAAA,EAAAA,SAAOqD,EAAAA,IAAc,Y,6BAArBrD,C,IAKJE,EAAAA,GAAAA,OAIAA,EAAAA,GAAAA,QCwEzB,EAjEuB,WACnB,IAAMK,GAAWC,EAAAA,EAAAA,MACX,GAAqB8C,EAAAA,EAAAA,KAAnBC,eAEoChC,GAAAA,EAAAA,EAAAA,KAAY,SAACC,G,MAAmB,CACxER,KAAMQ,EAAMR,KACZmC,cAAe3B,EAAMgC,IAAIL,iBACzBM,EAAAA,IAHIzC,EAAoCO,EAApCP,KAAQJ,OAAUuC,EAAkB5B,EAAlB4B,cAKcO,GAAAA,EAAAA,EAAAA,UAASC,EAAAA,IAA1CC,EAAiCF,EAA6B,GAAhDG,EAAmBH,EAA6B,GAE/DI,GAAgBC,EAAAA,EAAAA,cAAY,SAAC3C,GAC/ByC,EAAgB,CACZG,QAAQ,EACR5C,KAAAA,MAEL,IAEG6C,GAAgBF,EAAAA,EAAAA,cAAY,WAC9BF,EAAgBF,EAAAA,MACjB,IAwBH,OAtBAlD,EAAAA,EAAAA,YAAU,WACNF,GAAS2D,EAAAA,EAAAA,OACT3D,GAAS4D,EAAAA,EAAAA,QACV,CAACvD,EAAQL,KAEZE,EAAAA,EAAAA,YAAU,WACF8C,IAAmB,GAAaJ,EAAciB,SAAYxD,IAC1DkD,EAAc,mBAEnB,CAACP,EAAgBJ,EAAevC,EAAQkD,KAE3CrD,EAAAA,EAAAA,YAAU,WACN,GAAI4D,SAASC,KAAM,CACf,IAAM1C,EAAYyC,SAASC,KAAKC,QAAQ,KAAM,IAC9C,IAAK,IAAMC,KAAOC,EAAAA,GACVD,IAAQ5C,IACR8C,EAAAA,EAAAA,GAAe9C,MAI5B,KAGC,sB,UACKgC,EAAaI,QACR,SAACW,EAAAA,EAAa,CACZvD,KAAMwC,EAAaxC,KACnBwD,SAAUX,EACVtC,YAAU,oBAEZ,UAACyB,EAAa,CAACzB,YAAU,iB,WACvB,SAACkD,EAAU,KACX,SAACC,EAAAA,EAAmB,CAACC,MAAO,aAAcC,OAAO,WACjD,SAACC,EAAK,CAACrD,UAAW6C,EAAAA,GAAAA,MAAkB5C,WAAYiC,KAChD,SAACoB,EAAa,CAACtD,UAAW6C,EAAAA,GAAAA,cAA0B5C,WAAYiC,KAChE,SAACqB,EAAQ,CAACvD,UAAW6C,EAAAA,GAAAA,eAG7B,SAACW,EAAAA,EAAgC,Q,4CChEvCC,EAAwC,Y,IAAGC,EAAM,EAANA,OAAQC,EAAW,EAAXA,YACrD,OACI,SAACC,EAAAA,EAAM,CACHC,MAAO,4OAA+DH,OAAjBC,EAAY,YAAY,OAAPD,EAAO,8IAC7EI,YAAa,gTAA4EJ,OAAjBC,EAAY,YAAa,OAARD,EAAO,4gBAChGK,UAAU,EACVC,YAAY,EACZC,UAAU,EACVC,QAASC,EAAAA,EAAAA,O,UAET,SAACC,EAAc,OAK3BX,EAAoBY,gBAAkB,W,OAAA,4BAAMC,G,IACjCC,EAECC,EAAOC,EACT7E,EAAK,EAGY8D,EAGjBC,E,kFATgCe,EAAAA,EAAAA,GAAaJ,EAAS,CAAEK,gBAAgB,I,cAAzE,EAAsB,OAApBJ,qBAECC,EAAeF,EAAfE,MAAOC,EAAQH,EAARG,IACT7E,EAAQ4E,EAAM1F,W,EAKhBc,EAHAV,KACI0F,EAAqB,EAArBA,YAAelB,OAGjBC,GAAckB,EAAAA,EAAAA,IAAkBjF,IACZkF,EAAAA,EAAAA,MAEDP,IACrBQ,EAAAA,EAAAA,IAAqB,CAAEN,IAAAA,EAAKhC,SAAU,mB,kBAGnC,CAAEiB,OAAAA,EAAQC,YAAAA,I,4DAjBuBW,G,gCAAN,GAoBtC,S,wKCmBajF,EAAa,W,OAAA,+B,IAAQN,EAAY,EAAAC,EAAgBM,EAAK,EAAAC,EAKrDyF,EACAC,EAIAC,E,oEAVoBnG,EAAU,EAAVA,WAAY,EAAF,EAAEC,OAAAA,OAAM,IAAG,GAAK,EAAEM,EAAG,EAAHA,IAAK,EAAF,EAAEC,OAAAA,OAAM,IAAG,0BAAuB,E,SAEtFR,EAAY,C,eACb,MAAM,IAAIoG,MAAM,qN,cAEdH,EAAOI,MAAMC,QAAQ/F,GAAOA,EAAIgG,KAAK,KAAOhG,EAC5C2F,EAAM,iCAAwDD,OAAvBzF,EAAO,kBAAmCR,OAAnBiG,EAAK,gBAAkChG,OAApBD,EAAW,WAGjG,OAH0GC,EACrG,qBACA,qB,SAEiBuG,EAAAA,EAAAA,IAAmBN,G,cAApCC,EAAW,EAAH,K,kBAEP,CACHM,WAAW,EACX9F,QAASwF,EAASO,KAAKC,Q,4DAGpBC,EAAAA,EAAAA,IAAkB,EAAD,K,0EAjBT,G,gCAAG,GAmDbC,EAAc,SAAC3G,EAAoB+F,EAAgBa,GAC5D,IAAMC,EAASd,EAAKe,QAAO,SAACC,EAAgC1G,GAExD,OADA0G,EAAI1G,GAAO,GACJ0G,IACR,IAEGC,EApCW,SAACJ,GAClB,IAAMK,EAAQ,IAAIC,IAElB,OAAO,SAASC,G,IACPA,EAAL,KAAmB,QAAdA,EAAAA,EAAOP,eAAO,IAAdO,OAAAA,EAAAA,EAAgB5D,QACjB,OAAO4D,EAGX,IAAMC,EAAuB,GAExB,GAAY,EAAZ,GAAY,EAAZ,OAAY,E,IAAjB,I,IAAK,E,aAAA,IACO9F,EADP,EAAY,MACLA,GACF+F,EAASJ,EAAMK,IAAIC,GACnBC,EAAkBH,GAAUT,EAAQa,MAAK,Y,IAAGnG,EAAE,EAAFA,G,OAASiG,IAAajG,KAExE,GAAIkG,EAAiB,CACjB,IAAQlG,EAAYkG,EAAZlG,GAER8F,EAAOnI,KAAKuI,IACXH,GAAUJ,EAAMS,IAAI/D,EAAK6D,KAT7B,EAAgBL,EAAOP,QAAO,qBAA9B,OAAY,cAAZ,GAAY,M,SAAZ,GAAY,EAAZ,EAAY,E,YAAZ,GAAY,MAAZ,EAAY,QAAZ,EAAY,S,WAAZ,E,MAAA,GAaL,OAAO,kBACAO,GAAM,CACTP,QAASQ,KAWFO,CAAaf,GAE5B,OAAO5G,EAAQ8G,QAAO,SAACC,EAAKI,GACxB,IAAsBpB,EAAuBoB,EAArCS,WAAc7B,KAUtB,OARAA,EAAK8B,SAAQxH,SAAAA,GACT,GAAIyH,EAAWL,MAAKM,SAAAA,G,OAAaA,EAAU7D,QAAU7D,KAAM,CACvD,IAAM2H,EAAehB,EAAOG,GAE5BJ,EAAI1G,GAAKpB,KAAK+I,OAIfjB,IACRF,K,ySCtGMtC,EAAmC,YAC5C3E,EAAAA,EAAAA,YAAU,WACNF,GAASuI,EAAAA,EAAAA,SACV,IAEH,IAAMvI,GAAWC,EAAAA,EAAAA,MACoBe,GAAAA,EAAAA,EAAAA,KAAY,SAACC,G,MAAmB,CACjEuH,cAAcC,EAAAA,EAAAA,IAAmBxH,GACjCyH,WAAYzH,EAAM0H,WAAWD,cAC7BxF,EAAAA,IAHIsF,EAA6BxH,EAA7BwH,aAAcE,EAAe1H,EAAf0H,WAIwBvF,GAAAA,EAAAA,EAAAA,WAAS,GAAhDyF,EAAuCzF,EAAe,GAArC0F,EAAsB1F,EAAe,GACKA,GAAAA,EAAAA,EAAAA,UAA4B,CAC1FM,QAAQ,EACR5C,KAAMiI,EAAAA,EAAAA,UAFHC,EAA2D5F,EAGhE,GAHgC6F,EAAgC7F,EAGhE,GAEI8F,EAAqB,W,OAAA,4BAAMC,G,IAKrBC,EAAMC,EAAU,EAAaC,EAAUC,EAAgBC,EACzDC,EAGEC,EAAOC,EACTC,EAGApD,EAoBSA,E,oEAhCE,OAAZiC,QAAY,IAAZA,OAAAA,EAAAA,EAAcoB,UAAW,C,uDAG9Bf,GAAmB,GACXM,EAAkEX,EAAlEW,KAAMC,EAA4DZ,EAA5DY,SAAU,EAAkDZ,EAAlDoB,UAAaP,EAAQ,EAARA,SAAUC,EAAc,EAAdA,eAAgBC,EAAI,EAAJA,KACzDC,EAAmBF,IAAmBO,EAAAA,GAAAA,KACtCC,MAAQC,IAAIV,EAAU,OAAOW,OAAO,gBACpCF,MAAQC,IAAIV,EAAU,SAASW,OAAO,gBACpCP,EAAiBP,EAAjBO,MAAOC,EAAUR,EAAVQ,MACTC,EAA4DF,IAAUC,EACtE,CAAEO,YAAaP,GACf,CAAEQ,gBAAiBT,G,SACFU,EAAAA,EAAAA,YACnBC,EAAAA,EAAAA,IAAY,QACRC,SAAU7B,EAAa5G,GACvB2H,KAAAA,EACAe,KAAM5B,EACN6B,YAAa,GACVZ,K,QANLpD,EAAW,EAAH,MAUDM,UACTmC,EAA6B,CACzBvF,QAAQ,EACRyB,MAAO,uJAAoC,OAALiE,GACtC/G,KAAM,iEAAyDgH,OAA1CI,EAAiB,qHAAqCgB,OAAZpB,EAAS,KAAe,OAAZoB,EAAAA,GAAY,wBACvF3J,KAAMiI,EAAAA,EAAAA,UAGVE,EAA6B,CACzBvF,QAAQ,EACRyB,MAA6B,QAAtBqB,EAAAA,EAASkE,MAAMC,eAAO,IAAtBnE,EAAAA,EAA0B,sMACjCnE,KAAM,GACNvB,KAAMiI,EAAAA,EAAAA,QAGdD,GAAmB,GACnB8B,I,4DAvC6BzB,G,gCAAN,GA0CrB0B,GAAiBC,EAAAA,EAAAA,UAAQ,WAC3B,GAAKrC,EAAL,CAGA,IAAQvH,EAAqBuH,EAArBvH,MAAO2I,EAAcpB,EAAdoB,UACf,GAAS,OAAL3I,QAAK,IAALA,OAAAA,EAAAA,EAAO6J,UACP,MAAO,wEAAyE,OAAxDhB,IAAM,IAAIiB,KAAuB,IAAlB9J,EAAM6J,YAAmBd,OAAO,UAE3E,GAAIJ,EAAW,CACX,IAAQP,EAA6BO,EAA7BP,SACF2B,EAD+BpB,EAAnBN,iBACoBO,EAAAA,GAAAA,KAChC,GAAeoB,OAAZ5B,EAAS,KAAqC,QAAlC4B,EAAAA,EAAAA,GAAU5B,EAAU6B,EAAAA,KACnC,GAAeD,OAAZ5B,EAAS,KAAuC,QAApC4B,EAAAA,EAAAA,GAAU5B,EAAU8B,EAAAA,KAEzC,MAAO,GAAc,OAAXH,EAAW,+DAE1B,CAACxC,IAEEmC,EAAgB,WAClB3K,EAAS,CACLa,KAAMuK,EAAAA,GAAAA,kBACNrK,QAAS,CACLyH,aAAc,SAKpB6C,EAAuB,YACI,OAAzBtC,QAAyB,IAAzBA,OAAAA,EAAAA,EAA2BlI,QAASiI,EAAAA,EAAAA,SACpC9I,GAAS2D,EAAAA,EAAAA,OAEbqF,EAA6B,CACzBvF,QAAQ,EACR5C,KAAMiI,EAAAA,EAAAA,WAINrF,EAAwCsF,EAAxCtF,OAAQ,EAAgCsF,EAAhC7D,MAAAA,OAAK,IAAG,KAAE,IAAsB6D,EAApB3G,KAAAA,OAAI,IAAG,KAAE,EAAEvB,EAASkI,EAATlI,KACvC,OACI,sB,WACI,SAACyK,EAAAA,EAAwB,CACrB7H,SAAU+E,EACV+C,uBAAwB3C,EACxB1D,MAAO,gEAAiC,OAAP,OAAZsD,QAAY,IAAZA,OAAAA,EAAAA,EAAcW,MACnCqC,UAAyB,OAAdZ,QAAc,IAAdA,EAAAA,EAAkB,GAC7Ba,UAAWxC,EACXyC,QAASf,KAEb,SAACgB,EAAAA,EAAW,CACRlI,SAAUA,EACVyB,MAAOA,EACP9C,KAAMA,EACNvB,KAAMA,EACN6K,QAASL,E,UAET,SAACO,EAAAA,GAAY,C,UACT,SAACC,EAAAA,GAAU,C,UACP,SAACC,EAAAA,EAAM,CACHC,MAAO,SACP7J,KAAM,QACNG,QAASgJ,E,SACZ,0D,krCCrJlB,IAAMW,EAAUvM,EAAAA,QAAAA,QAAAA,WAAc,C,6BAAdA,C,KAMVwM,GAAYxM,EAAAA,EAAAA,SAAOyM,EAAAA,GAAI,Y,6BAAXzM,C,KAGnB,Y,OAAY,EAAT0M,YAA6BC,EAAAA,EAAAA,KAAG,OAMhBzM,EAAAA,GAAAA,UAMZ0M,GAAY5M,EAAAA,EAAAA,SAAO6M,EAAAA,GAAI,Y,6BAAX7M,C,IAEJ8M,EAAAA,EAAAA,iBAII5M,EAAAA,GAAAA,UAEH6M,SAAAA,G,OAASA,EAAMC,eAAiB,MAAQ,UACzCD,SAAAA,G,OAASA,EAAMC,eAAiB,MAAQ,SAEnDC,EAAAA,IACIF,SAAAA,G,OAASA,EAAMC,gBAAkB,kBAGrCE,EAAAA,IACIH,SAAAA,G,OAASA,EAAMC,gBAAkB5M,EAAAA,EAAAA,KAGrC+M,EAAAA,IACIJ,SAAAA,G,OAASA,EAAMC,gBAAkB5M,EAAAA,EAAAA,KAGrCgN,EAAAA,IACIL,SAAAA,G,OAASA,EAAMC,gBAAkB,gCC0B/C,EAzD8C,Y,QAAGnM,QAAAA,OAAO,IAAG,KAAE,MAAEa,aAAAA,OAAY,IAAG,GAAI,MAAE2L,UAAAA,OAAS,IAAG,KAAE,EACxFL,EAAiBnM,EAAQuD,OAZL,EAapBtC,GAAWC,EAAAA,EAAAA,GAAc,eAAsC,OAAvB7B,EAAAA,GAAAA,OAAuB,MAE/DoN,GAAoBlC,EAAAA,EAAAA,UAAQ,WAC9B,OAAc,OAAPvK,QAAO,IAAPA,OAAAA,EAAAA,EAASuB,KAAI,Y,IAAGqG,EAAU,EAAVA,WACb8E,GAAYC,EAAAA,EAAAA,GAAS/E,EAAWhD,MAhBzB,IAiBPgI,GAAWD,EAAAA,EAAAA,GAAS/E,EAAW9F,KAhBlB,IAkBnB,OACI,SAAC+K,EAAY,CAETC,GAAI,GACJX,eAAgBA,E,UAChB,SAACY,EAAAA,EAAW,CACRC,UAAWpF,EAAWtG,GACtBsD,MAAO/D,EAAe6L,EAAY9E,EAAWhD,MAC7CC,YAAahE,EAAe+L,EAAWhF,EAAW9F,KAClDmL,WAAYrF,EAAWsF,iBACvBC,eAAgBvF,EAAWwF,sBAC3BC,MAAOzF,EAAWyF,MAClBC,UAAW1F,EAAW2F,WACtBC,UAAW5F,EAAW6F,WACtBC,WAAY9F,EAAW+F,YACvBC,WAAYhG,EAAWiG,YACvB9H,KAAM6B,EAAW7B,KACjB+H,MAAOlG,EAAWmG,KAClBC,MAAO,CACHC,SAAUrG,EAAWsG,UACrBpM,KAAM8F,EAAWuG,WACjBX,UAAW5F,EAAWwG,uBAE1BtN,YAAU,eACVuN,YAAazG,EAAWyG,eAtBvBzG,EAAWtG,SA2B7B,CAACtB,EAASmM,IAEb,OACI,SAACU,EAAU,CAACL,UAAWA,E,UACnB,SAACK,EAAY,CAAChB,WAAkB,OAAP7L,QAAO,IAAPA,OAAAA,EAAAA,EAASuD,QAAS,E,SACtCtC,GAAYkL,GACP,SAACmC,EAAAA,EAAY,CACXC,eAAe,EACfC,YAAa,G,SAEZ/B,IAEHA,Q,wGCjETgC,EAAuB,SAACC,GACjC,IAAMC,GAAcC,EAAAA,EAAAA,IAAe,WAC/BF,OASJ,OAAOG,EAAAA,EAAAA,IANkB,a,YAAkB,GAAdC,gBAErBH,MAIyC,CAAEI,KAAM,KAAMC,WAAY,GAAIC,UAAW,M,4FCHjFJ,EAA0B,SACnCK,EAAsC,G,QACpCH,KAAAA,OAAI,IAAG,OAAI,EAAEC,EAAU,EAAVA,WAAY,EAAF,EAAEC,UAAAA,OAAS,IAAG,IAAC,EAGhBpM,GAAAA,EAAAA,EAAAA,UAAyB,MAA1CsM,EAAiBtM,EAA8B,GAAzCuM,EAAWvM,EAA8B,GAElDwM,EAAe,MAEfC,EAAAA,EAAAA,OACAD,EAAe,IAAItQ,OAAOwQ,qBAAqBL,EAAU,CACrDH,KAAAA,EACAC,WAAAA,EACAC,UAAAA,KAIR,IAAMO,GAAWC,EAAAA,EAAAA,QAAOJ,GAsBxB,OApBAzP,EAAAA,EAAAA,YACI,WACI,GAAI4P,EAASE,SAAWP,EAAM,CAC1B,IAAQO,EAA6BF,EAA7BE,QASR,OAPAC,EAAgBC,aAEZT,GAEAQ,EAAgBE,QAAQV,GAGrB,WACHQ,EAAgBC,iBAI5B,CAACT,IAGEC,I,kCCpDI,SAASU,IACpB,IAAMrM,EAAO1E,OAAOyE,SAASC,KAAKC,QAAQ,IAAK,IACnC,IAARD,GACAI,EAAeJ,G,uDAOhB,SAASI,EAAekM,G,IAAgBC,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,GAAkC,aAFzD,GAGdC,EAAKC,SAASC,eAAeJ,GAC7BK,EAAYF,SAASC,eAAe,aACpCE,EAAcH,SAASC,eAAe,eAC5C,GAAIF,EAAI,CACJ,IAAIK,EAAML,EAAGM,wBAAwBD,IACjCF,IACAE,GAAOF,EAAUI,cAEjBH,IACAC,GAbgB,IAepBvR,OAAO0R,SAAS,CACZC,SAAU,SACVJ,IAAKA,EAAMvR,OAAO4R,YAAcX,O,iICT3C,OAfuD9J,Q,qiBCajD,IAAM0K,EAAwB,SAACvD,GAClC,IAAKA,EACD,MAAO,GAGX,IAAQwD,EAAiBxD,EAAjBwD,IAAKC,EAAYzD,EAAZyD,QAEb,OAAKA,GAMEhF,EAAAA,EAAAA,KAAG,IACkB+E,EAGdC,EACAD,EAIAC,EACAD,IAfH/E,EAAAA,EAAAA,KAAG,IACkB+E,K,mECvB7B,IAAMlE,EAAW,SAACoE,EAA4BC,GACjD,OAAKD,EAIEA,EAAOxN,OAASyN,GAAmC,IAAlBA,EAClC,GAAyC,OAAtCD,EAAOE,MAAM,EAAGD,GAAeE,OAAO,OACzCH,EALK,K,iFCGFnC,EAAiB,SAACM,GAC3B,IAAkCrM,GAAAA,EAAAA,EAAAA,WAAS,GAApCsO,EAA2BtO,EAAe,GAA/BuO,EAAgBvO,EAAe,GAEjD,OAAOK,EAAAA,EAAAA,cAAY,YACdiO,GAAaC,GAAa,SAACD,GAKxB,OAJKA,GACDjC,KAGG,OAEZ,CAACiC,EAAWjC,M,gFChBnB,SAASmC,IACP,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EACjE,GAAID,QAAQC,UAAUC,KAAM,OAAO,EACnC,GAAqB,oBAAVC,MAAsB,OAAO,EAExC,IAEE,OADAhH,KAAKiH,UAAUC,SAASC,KAAKN,QAAQC,UAAU9G,KAAM,IAAI,iBAClD,EACP,MAAOoH,GACP,OAAO,GAIX,SAASN,EAAUO,EAAQC,EAAMC,GAc/B,OAZET,EADEF,IACUC,QAAQC,UAER,SAAmBO,EAAQC,EAAMC,GAC3C,IAAIC,EAAI,CAAC,MACTA,EAAEhT,KAAKiT,MAAMD,EAAGF,GAChB,IACII,EAAW,IADGC,SAASC,KAAKH,MAAMJ,EAAQG,IAG9C,OADID,IAAO,OAAgBG,EAAUH,EAAMN,WACpCS,GAIJZ,EAAUW,MAAM,KAAMI,WAGhB,SAASC,EAAWT,EAAQC,EAAMC,GAC/C,OAAOT,EAAUW,MAAM,KAAMI,W,eC5B/B,SAASE,EAAgBR,GACvB,IAAIS,EAAwB,oBAARvL,IAAqB,IAAIA,SAAQwL,EA8BrD,OA5BAF,EAAkB,SAAyBR,GACzC,GAAc,OAAVA,ICTkCW,EDSEX,GCRsB,IAAzDI,SAAST,SAASC,KAAKe,GAAIC,QAAQ,kBDQQ,OAAOZ,ECT5C,IAA2BW,EDWtC,GAAqB,oBAAVX,EACT,MAAM,IAAIa,UAAU,sDAGtB,GAAsB,qBAAXJ,EAAwB,CACjC,GAAIA,EAAOK,IAAId,GAAQ,OAAOS,EAAOnL,IAAI0K,GAEzCS,EAAO/K,IAAIsK,EAAOtG,GAGpB,SAASA,IACP,OAAO,EAAUsG,EAAOM,WAAW,OAAeS,MAAMC,aAW1D,OARAtH,EAAQgG,UAAY1P,OAAOiR,OAAOjB,EAAMN,UAAW,CACjDsB,YAAa,CACX7J,MAAOuC,EACPwH,YAAY,EACZC,UAAU,EACVC,cAAc,MAGX,OAAe1H,EAASsG,IAG1BQ,EAAgBR,GAGV,SAASqB,EAAiBrB,GACvC,OAAOQ,EAAgBR,M","sources":["webpack://_N_E/?2a2a","webpack://_N_E/./src/features/domru-tv/packages/sections/head/styled.ts","webpack://_N_E/./src/features/domru-tv/packages/sections/head/index.tsx","webpack://_N_E/./src/features/domru-tv/packages/store/actions/fetchBanners.ts","webpack://_N_E/./src/features/domru-tv/packages/sections/packs/index.tsx","webpack://_N_E/./src/features/domru-tv/packages/sections/services/index.tsx","webpack://_N_E/./src/features/domru-tv/packages/sections/subscriptions/index.tsx","webpack://_N_E/./src/features/domru-tv/packages/styled.ts","webpack://_N_E/./src/features/domru-tv/packages/index.tsx","webpack://_N_E/./pages/_site/[city]/domru-tv/packages/index.tsx","webpack://_N_E/./src/api/content/banners.ts","webpack://_N_E/./src/features/domru-tv/packages/components/TryAndBuyConnectionForTvServices/index.tsx","webpack://_N_E/./src/features/index/Banners/PromoBannersSection/styled.ts","webpack://_N_E/./src/features/index/Banners/PromoBannersSection/index.tsx","webpack://_N_E/./src/helpers/hooks/useElementVisibility.ts","webpack://_N_E/./src/helpers/hooks/useIntersectionObserver.ts","webpack://_N_E/./src/helpers/scrollToAnchor.ts","webpack://_N_E/../../packages/do-request/src/error/customAxiosError.ts","webpack://_N_E/../../packages/shared/src/helpers/progressiveBackground.ts","webpack://_N_E/../../packages/shared/src/helpers/truncate.ts","webpack://_N_E/../../packages/shared/src/hooks/useOnceExecute.ts","webpack://_N_E/../../node_modules/@swc/helpers/src/_construct.mjs","webpack://_N_E/../../node_modules/@swc/helpers/src/_wrap_native_super.mjs","webpack://_N_E/../../node_modules/@swc/helpers/src/_is_native_function.mjs"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_site/[city]/domru-tv/packages\",\n function () {\n return require(\"private-next-pages/_site/[city]/domru-tv/packages/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_site/[city]/domru-tv/packages\"])\n });\n }\n ","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nimport PageSection from '~/src/features/domru-tv/packages/components/PageSection';\nimport PromoBannersSection from '~/src/features/index/Banners/PromoBannersSection';\n\nexport const HeadSection = styled(PageSection)`\n @media (max-width: ${wideBreakpoints.mobile}) {\n row-gap: 24px;\n }\n`;\n\nexport const PageTitle = styled.h1`\n ${FONTS.H2};\n margin: 0;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.H3};\n }\n`;\n\nexport const SPromoBannersSection = styled(PromoBannersSection)`\n margin-bottom: 0;\n\n & > div > div {\n margin-bottom: 0;\n\n & p:first-child {\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.H3};\n }\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H4};\n }\n }\n }\n`;\n","import { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { fetchBanners } from '~/src/features/domru-tv/packages/store/actions/fetchBanners';\nimport { TState } from '~/src/store';\n\nimport { HeadSection, PageTitle, SPromoBannersSection } from './styled';\n\nconst PageHeader = (): JSX.Element => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(fetchBanners());\n }, [dispatch]);\n\n const {\n banners,\n } = useSelector((state: TState) => ({\n banners: state.tvSubscriptions.banners.payload,\n }));\n\n return (\n \n Все развлечения — в одном Movix\n \n \n );\n};\n\nexport default PageHeader;\n","import { getBanners } from '~/src/api/content/banners';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { ESubscriptionsDomruTvActions } from '../reducers';\n\nexport const fetchBanners = () => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState) => {\n const { city: { provider: { providerId } }, auth: { isAuth } } = getState();\n const banners = await getBanners({\n providerId,\n isAuth,\n tag: 'movix',\n expand: 'bannerInfo.advertising,bannerInfo.tags,order',\n });\n\n dispatch({\n type: ESubscriptionsDomruTvActions.FETCH_BANNERS,\n payload: {\n banners: banners,\n },\n });\n };\n};\n","import { btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport PageSection from '~/src/features/domru-tv/packages/components/PageSection';\nimport TvPackageCard from '~/src/features/domru-tv/packages/components/TvPackageCard';\nimport { useSectionData } from '~/src/features/domru-tv/packages/hooks/useSectionData';\nimport { ESectionId, TDetailsType } from '~/src/features/domru-tv/packages/types';\nimport { ITvPackage } from '~/src/store/reducers/tvPackages';\n\ninterface IProps {\n sectionId: ESectionId,\n onShowMore: (type: TDetailsType) => void,\n}\n\nconst Packs = ({ sectionId, onShowMore }: IProps): JSX.Element => {\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n const { isShowSectionButton, sectionWidgets } = useSectionData('packs', false);\n\n return (\n \n Пакеты каналов\n \n {sectionWidgets.map(packet => (\n \n ))}\n \n {isShowSectionButton && (\n onShowMore('packs')}\n data-test='details-button'\n />\n )}\n \n );\n};\n\nexport default Packs;\n","import PageSection from '~/src/features/domru-tv/packages/components/PageSection';\nimport ServiceCard from '~/src/features/domru-tv/packages/components/ServiceCard';\n\nimport { ESectionId } from '../../types';\n\nimport { services } from './services';\n\nconst Services = ({ sectionId }: { sectionId: ESectionId }): JSX.Element => {\n return (\n \n Дополнительные услуги\n \n {Object.entries(services).map(([id, service]) => (\n \n ))}\n \n \n );\n};\n\nexport default Services;\n","import { btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport PageSection from '~/src/features/domru-tv/packages/components/PageSection';\nimport SubscriptionsLayout from '~/src/features/domru-tv/packages/components/SubscriptionsLayout';\nimport { TSubscriptions, useSectionData } from '~/src/features/domru-tv/packages/hooks/useSectionData';\nimport { ESectionId, TDetailsType } from '~/src/features/domru-tv/packages/types';\n\ninterface IProps {\n sectionId: ESectionId,\n onShowMore: (type: TDetailsType) => void,\n}\n\nconst Subscriptions = ({ sectionId, onShowMore }: IProps): JSX.Element => {\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n const { isShowSectionButton, sectionWidgets } = useSectionData('subscriptions', false);\n\n return (\n \n Подписки на онлайн-кинотеатры\n \n \n \n {isShowSectionButton && (\n onShowMore('subscriptions')}\n data-test='details-button'\n />\n )}\n \n );\n};\n\nexport default Subscriptions;\n","import styled from 'styled-components';\n\nimport WideContainer, { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nexport const PageContainer = styled(WideContainer)`\n flex-direction: column;\n row-gap: 60px;\n margin-top: 72px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin-top: 60px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n margin-top: 24px;\n }\n`;\n","import { useCallback, useEffect, useState } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { SegmentedBannerGrid } from '~/src/components/SegmentedBanner/SegmentedBannerGrid';\nimport { usePrepareQueryData } from '~/src/helpers/hooks/usePrepareQueryData';\nimport { scrollToAnchor } from '~/src/helpers/scrollToAnchor';\nimport { TState } from '~/src/store';\nimport { fetchTvPackages } from '~/src/store/actions/tvPackages';\n\nimport DetailsLayout from './components/DetailsLayout';\nimport { TryAndBuyConnectionForTvServices } from './components/TryAndBuyConnectionForTvServices';\nimport PageHeader from './sections/head';\nimport Packs from './sections/packs';\nimport Services from './sections/services';\nimport Subscriptions from './sections/subscriptions';\nimport { fetchSubscriptions } from './store/actions/fetchSubscriptions';\nimport { defaultDetailsState, ESectionId, TDetailsType } from './types';\n\nimport { PageContainer } from './styled';\n\nconst PackagesLayout = (): JSX.Element => {\n const dispatch = useDispatch();\n const { subscriptionId } = usePrepareQueryData();\n\n const { auth: { isAuth }, subscriptions } = useSelector((state: TState) => ({\n auth: state.auth,\n subscriptions: state.vas.subscriptions,\n }), shallowEqual);\n\n const [detailsState, setDetailsState] = useState(defaultDetailsState);\n\n const onShowDetails = useCallback((type: TDetailsType) => {\n setDetailsState({\n isOpen: true,\n type,\n });\n }, []);\n\n const onHideDetails = useCallback(() => {\n setDetailsState(defaultDetailsState);\n }, []);\n\n useEffect(() => {\n dispatch(fetchTvPackages());\n dispatch(fetchSubscriptions());\n }, [isAuth, dispatch]);\n\n useEffect(() => {\n if (subscriptionId && ((isAuth && !!subscriptions.length) || !isAuth)) {\n onShowDetails('subscriptions');\n }\n }, [subscriptionId, subscriptions, isAuth, onShowDetails]);\n\n useEffect(() => {\n if (location.hash) {\n const sectionId = location.hash.replace(/#/i, '');\n for (const key in ESectionId) {\n if (key === sectionId) {\n scrollToAnchor(sectionId);\n }\n }\n }\n }, []);\n\n return (\n <>\n {detailsState.isOpen\n ? \n : \n \n \n \n \n \n \n }\n \n >\n );\n};\n\nexport default PackagesLayout;\n","import { NextPage } from 'next';\n\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport Layout from '~/src/features/_layout';\nimport PackagesLayout from '~/src/features/domru-tv/packages';\nimport { isShowcaseAbnEnabled } from '~/src/features/showcase/constants/abnVariants';\nimport { initialProps } from '~/src/helpers/basePageFunc';\nimport { nonPermanentRedirect } from '~/src/helpers/url';\nimport { selectCompanyName } from '~/src/store/selectors/city';\n\ninterface IProps {\n cityIn: string,\n companyName: string,\n}\n\nconst DomRuTvPackagesPage: NextPage = ({ cityIn, companyName }) => {\n return (\n \n \n \n );\n};\n\nDomRuTvPackagesPage.getInitialProps = async(options) => {\n const { validatedAccessToken } = await initialProps(options, { isNeedAuthData: true });\n\n const { store, res } = options;\n const state = store.getState();\n const {\n city: {\n currentCity: { cityIn },\n },\n } = state;\n const companyName = selectCompanyName(state);\n const isShowcaseEnabled = isShowcaseAbnEnabled();\n\n if (isShowcaseEnabled && validatedAccessToken) {\n nonPermanentRedirect({ res, location: '/subscriptions' });\n }\n\n return { cityIn, companyName };\n};\n\nexport default DomRuTvPackagesPage;\n","import { TResponse } from '@r1-frontend/do-request/core/types';\nimport { captureQueryError } from '@r1-frontend/do-request/error';\nimport { IAdvertising } from '@r1-frontend/api-domru/api-content/_dto/IAdvertising';\nimport { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\n\nimport { TButtonType } from '@r1-frontend/ui-react/components/buttons/button';\n\nimport contentRequest from '~/src/api/requests/contentRequest';\n\nexport interface IBannerTag {\n alias: string,\n id: number,\n name: string,\n}\n\nexport interface IBannerInfo {\n available_auth: number,\n available_new: number,\n button_text: string,\n button_type: TButtonType,\n callback_form: number,\n created_at: string,\n description: string,\n id: number,\n image: string,\n image_webp: string,\n image_background: string,\n image_background_webp: string,\n image_background_mobile: string,\n image_mobile: string,\n is_active: number,\n link: string,\n phone_introduction: number,\n tab_text: string,\n tab_title: string,\n tags: IBannerTag[],\n text: string,\n text_color: string,\n title: string,\n updated_at: string,\n age_limit?: string,\n legal_info?: string,\n legal_info_text_color?: string,\n advertising?: IAdvertising,\n}\n\nexport interface IBanner {\n banner: number,\n bannerInfo: IBannerInfo,\n city_id: number,\n id: number,\n order: number,\n routers?: IEquipment[],\n}\n\ninterface IProps {\n providerId: number,\n tag: string | string[],\n isAuth?: boolean,\n expand?: string,\n}\n\ntype TDataResponse = TResponse;\n\n/**\n * @param providerId\n * @param isAuth\n * @param tag место размещения // must be an array\n * @param expand // must be an array of an enum (придумай сам что туда писать)\n */\nexport const getBanners = async({ providerId, isAuth = false, tag, expand = 'bannerInfo.tags,order' }: IProps): Promise => {\n try {\n if (!providerId) {\n throw new Error('Не передан домен для получения баннеров');\n }\n const tags = Array.isArray(tag) ? tag.join(',') : tag;\n const url = `/v2/banner-city/search?expand=${expand}&filter[tags]=${tags}&providerId=${providerId}&filter${isAuth\n ? '[available_auth]=1'\n : '[available_new]=1'\n }`;\n const response = await contentRequest.get(url);\n\n return {\n isSuccess: true,\n payload: response.data.items,\n };\n } catch (error) {\n return captureQueryError(error);\n }\n};\n\nconst bannerMapper = (routers: IEquipment[]) => {\n const cache = new Map();\n\n return function(banner: IBanner): IBanner {\n if (!banner.routers?.length) {\n return banner;\n }\n\n const result: IEquipment[] = [];\n\n for (const router of banner.routers) {\n const { id: routerId } = router;\n const cached = cache.get(routerId);\n const equipmentRouter = cached || routers.find(({ id }) => routerId === id);\n\n if (equipmentRouter) {\n const { id: key } = equipmentRouter;\n\n result.push(equipmentRouter);\n !cached && cache.set(key, equipmentRouter);\n }\n }\n\n return {\n ...banner,\n routers: result,\n };\n };\n};\n\nexport const groupByTags = (banners: IBanner[], tags: string[], routers: IEquipment[]): Record => {\n const groups = tags.reduce((acc: Record, tag) => {\n acc[tag] = [];\n return acc;\n }, {});\n\n const mapper = bannerMapper(routers);\n\n return banners.reduce((acc, banner) => {\n const { bannerInfo: { tags: bannerTags } } = banner;\n\n tags.forEach(tag => {\n if (bannerTags.find(bannerTag => bannerTag.alias === tag)) {\n const mappedBanner = mapper(banner);\n\n acc[tag].push(mappedBanner);\n }\n });\n\n return acc;\n }, groups);\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport dayjs from 'dayjs';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport setTvPacket, { ResponseDto } from '@r1-frontend/api-domru/api-profile/v2/tv-packets/set-tv-packet';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport PopupResult, { EResultPopupStatus } from '@r1-frontend/ui-react/components/popups/popupResult';\nimport { IOption } from '@r1-frontend/ui-react/components/select/creatableSelect';\nimport { RubleSymbol } from '@r1-frontend/ui-react/tokens/symbols';\nimport { pluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { dayPluralize, monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport TryAndBuyConnectionPopup from '~/src/features/domru-tv/packages/components/TryAndBuyConnectionPopup';\nimport { TState } from '~/src/store';\nimport { fetchProfileTvPackages, fetchTvPackages } from '~/src/store/actions/tvPackages';\nimport { ETryAndBuyDurationTypeId, ETvPackagesActionTypes } from '~/src/store/reducers/tvPackages';\nimport { selectTrialPackage } from '~/src/store/selectors/tvPackages';\n\nimport { ButtonsRow, PopupContent } from '~/src/features/domru-tv/packages/components/PackageConnectPopup/styled';\n\nexport interface IConfirmedPhoneParam {\n notifyContactId: string | number,\n notifyPhone?: never,\n}\n\nexport interface IUnconfirmedPhoneParam {\n notifyContactId?: never,\n notifyPhone: string | number,\n}\n\nexport interface IPopupResultProps {\n isOpen: boolean,\n title?: string,\n text?: string,\n type: EResultPopupStatus,\n}\n\nexport const TryAndBuyConnectionForTvServices = () => {\n useEffect(() => {\n dispatch(fetchProfileTvPackages());\n }, []);\n\n const dispatch = useDispatch();\n const { trialPackage, terminalId } = useSelector((state: TState) => ({\n trialPackage: selectTrialPackage(state),\n terminalId: state.tvPackages.terminalId,\n }), shallowEqual);\n const [isTnBConnecting, setIsTnBConnecting] = useState(false);\n const [tryAndBuyConnectionResult, setTryAndBuyConnectionResult] = useState({\n isOpen: false,\n type: EResultPopupStatus.DEFAULT,\n });\n\n const onTryAndBuyConnect = async(phone: IOption) => {\n if (!trialPackage?.tryAndBuy) {\n return;\n }\n setIsTnBConnecting(true);\n const { name, baseCost, tryAndBuy: { duration, durationTypeId, raId } } = trialPackage;\n const tryAndBuyEndDate = durationTypeId === ETryAndBuyDurationTypeId.DAYS\n ? dayjs().add(duration, 'day').format('DD MMMM YYYY')\n : dayjs().add(duration, 'month').format('DD MMMM YYYY');\n const { value, label } = phone;\n const phoneParam: IConfirmedPhoneParam | IUnconfirmedPhoneParam = value === label\n ? { notifyPhone: label }\n : { notifyContactId: value };\n const response = await doRequest.apiProfile(\n setTvPacket({\n packetId: trialPackage.id,\n raId,\n trId: terminalId,\n closePacket: 0,\n ...phoneParam,\n }),\n );\n\n if (response.isSuccess) {\n setTryAndBuyConnectionResult({\n isOpen: true,\n title: `Вы подключили пакет каналов ${name}`,\n text: `Смотрите до ${tryAndBuyEndDate} года бесплатно, затем ${baseCost} ${RubleSymbol}/мес.`,\n type: EResultPopupStatus.SUCCESS,\n });\n } else {\n setTryAndBuyConnectionResult({\n isOpen: true,\n title: response.error.message ?? 'Что-то пошло не так. Попробуйте ещё раз.',\n text: '',\n type: EResultPopupStatus.ERROR,\n });\n }\n setIsTnBConnecting(false);\n closeTnBPopup();\n };\n\n const tryAndBuyLabel = useMemo(() => {\n if (!trialPackage) {\n return;\n }\n const { state, tryAndBuy } = trialPackage;\n if (state?.actDateTo) {\n return `промо-цена до ${dayjs(new Date(state.actDateTo * 1000)).format('DD.MM')}`;\n }\n if (tryAndBuy) {\n const { duration, durationTypeId } = tryAndBuy;\n const periodText = durationTypeId === ETryAndBuyDurationTypeId.DAYS\n ? `${duration} ${pluralize(duration, dayPluralize)}`\n : `${duration} ${pluralize(duration, monthPluralize)}`;\n\n return `${periodText} бесплатно`;\n }\n }, [trialPackage]);\n\n const closeTnBPopup = () => {\n dispatch({\n type: ETvPackagesActionTypes.SET_TRIAL_PACKAGE,\n payload: {\n trialPackage: null,\n },\n });\n };\n\n const onCloseResultHandler = () => {\n if (tryAndBuyConnectionResult?.type === EResultPopupStatus.SUCCESS) {\n dispatch(fetchTvPackages());\n }\n setTryAndBuyConnectionResult({\n isOpen: false,\n type: EResultPopupStatus.DEFAULT,\n });\n };\n\n const { isOpen, title = '', text = '', type } = tryAndBuyConnectionResult;\n return (\n <>\n \n \n \n \n \n \n \n \n >\n );\n};\n","import styled, { css } from 'styled-components';\n\nimport { FlexBoxCol as Col, FlexBoxRow as Row } from '@r1-frontend/ui-react/components/layouts/flexBoxGrid';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nimport { Desc, Text, Title, Wrapper as BannerWrapper } from '~/src/features/index/Banners/PromoBannersSection/PromoBanner/styled';\n\nexport const Wrapper = styled.section`\n display: block;\n width: 100%;\n margin-bottom: 56px;\n`;\n\nexport const BannerRow = styled(Row)<{ notSingle: boolean }>`\n margin: 0;\n\n ${({ notSingle }) => notSingle && css`\n @media (max-width: 1359px) {\n margin: 0;\n }\n `};\n\n @media (min-width: ${wideBreakpoints.sDesktop}) {\n grid-gap: 1rem;\n flex-wrap: nowrap;\n }\n`;\n\nexport const BannerCol = styled(Col)<{ isDoubleBanner: boolean }>`\n margin-bottom: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n padding-left: 0;\n padding-right: 0;\n\n @media (min-width: ${wideBreakpoints.sDesktop}) {\n flex: auto;\n flex-basis: ${props => props.isDoubleBanner ? '50%' : '100%'};\n max-width: ${props => props.isDoubleBanner ? '50%' : '100%'};\n\n ${BannerWrapper} {\n ${props => props.isDoubleBanner && 'height: 330px'};\n }\n\n ${Title} {\n ${props => props.isDoubleBanner && FONTS.H2};\n }\n\n ${Text} {\n ${props => props.isDoubleBanner && FONTS.XS};\n }\n\n ${Desc} {\n ${props => props.isDoubleBanner && 'padding: 38px 0 38px 32px;'};\n }\n }\n\n @media (max-width: 1919px) {\n overflow: hidden;\n }\n`;\n","import React, { useMemo } from 'react';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport NukaCarousel from '@r1-frontend/ui-react/components/NukaCarousel';\nimport { truncate } from '@r1-frontend/shared/helpers/truncate';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport type { IBanner } from '~/src/api/content/banners';\nimport PromoBanner from '~/src/features/index/Banners/PromoBannersSection/PromoBanner';\n\nimport * as ST from './styled';\n\nconst DEFAULT_BANNERS_COUNT = 1;\nconst MAX_TITLE_LENGTH = 35;\nconst MAX_DESCRIPTION_LENGTH = 90;\n\ninterface IProps {\n banners: IBanner[],\n withContainer?: boolean,\n withEllipsis?: boolean,\n className?: string,\n}\n\nconst PromoBannersSection: React.FC = ({ banners = [], withEllipsis = true, className = '' }): JSX.Element => {\n const isDoubleBanner = banners.length > DEFAULT_BANNERS_COUNT;\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n const renderBannersList = useMemo(() => {\n return banners?.map(({ bannerInfo }): JSX.Element => {\n const titleText = truncate(bannerInfo.title, MAX_TITLE_LENGTH);\n const descText = truncate(bannerInfo.text, MAX_DESCRIPTION_LENGTH);\n\n return (\n \n \n \n );\n });\n }, [banners, isDoubleBanner]);\n\n return (\n \n 1}>\n {isMobile && isDoubleBanner\n ? \n {renderBannersList}\n \n : renderBannersList\n }\n \n \n );\n};\n\nexport default PromoBannersSection;\n","import { useOnceExecute } from '@r1-frontend/shared/hooks/useOnceExecute';\n\nimport { useIntersectionObserver } from '~/src/helpers/hooks/useIntersectionObserver';\n\n/**\n * Разово выполняет переданный коллбэк в том случае, когда элемент появляется в viewport\n * @param callback - коллбэк, который необходимо выполнить\n */\nexport const useElementVisibility = (callback: () => void): ReturnType => {\n const executeOnce = useOnceExecute(() => {\n callback();\n });\n\n const onElementVisible = ([{ isIntersecting }]: IntersectionObserverEntry[]) => {\n if (isIntersecting) {\n executeOnce();\n }\n };\n\n return useIntersectionObserver(onElementVisible, { root: null, rootMargin: '', threshold: 1 });\n};\n","import { useEffect, useRef, useState } from 'react';\n\nimport { isClientSide } from '@r1-frontend/shared/helpers/ssr';\n\n/**\n * @param {function} callBack - вызываемя функция\n * @param {Node|null} root - dom Элемент который используется в качестве\n * области просмотра для проверки видимости целевого элемента\n * @param {string} rootMargin - Отступы вокруг root. Могут иметь значения как\n * свойство css margin: \"10px 20px 30px 40px\" (top, right, bottom, left).\n * Значения можно задавать в процентах.\n * @param {number|number[]} threshold - Число или массив чисел, указывающий,\n * при каком проценте видимости целевого элемента должен сработать\n * callback.\n * @return {function(value: Node):undefined}\n */\nexport const useIntersectionObserver = (\n callBack: IntersectionObserverCallback,\n { root = null, rootMargin, threshold = 0 }: IntersectionObserverInit,\n): React.Dispatch> => {\n // ссылка на элемент за которым будем/уже след -ить/-им\n const [node, setNode] = useState(null);\n\n let observerInst = null;\n\n if (isClientSide()) {\n observerInst = new window.IntersectionObserver(callBack, {\n root,\n rootMargin,\n threshold,\n });\n }\n\n const observer = useRef(observerInst);\n\n useEffect(\n () => {\n if (observer.current && node) {\n const { current: currentObserver } = observer;\n // отсоединяемся от предыдущего элемента\n currentObserver.disconnect();\n\n if (node) {\n // следим за текущим\n currentObserver.observe(node);\n }\n // при размонтировании отписываемся\n return () => {\n currentObserver.disconnect();\n };\n }\n },\n [node],\n );\n\n return setNode;\n};\n","/**\n * Ищет элемент с id, указанным в якоре. При нахождении скроллит экран к нему.\n */\nexport default function scrollToAnchorByUrlHash() {\n const hash = window.location.hash.replace('#', '');\n if (hash != '') {\n scrollToAnchor(hash);\n }\n}\n\nconst PLANK_MOBILE_HEIGHT = 72;\nconst NEW_MENU_HEIGHT = 72;\n\nexport function scrollToAnchor(anchor: string, additionalOffset = NEW_MENU_HEIGHT) {\n const el = document.getElementById(anchor);\n const phoneMenu = document.getElementById('MenuPhone');\n const plankMobile = document.getElementById('plankMobile');\n if (el) {\n let top = el.getBoundingClientRect().top;\n if (phoneMenu) {\n top -= phoneMenu.offsetHeight;\n }\n if (plankMobile) {\n top -= PLANK_MOBILE_HEIGHT;\n }\n window.scrollTo({\n behavior: 'smooth',\n top: top + window.pageYOffset - additionalOffset,\n });\n }\n}\n","import { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';\n\n// TODO проверить необходимость этого класса\nexport class CustomAxiosError extends Error implements AxiosError {\n code?: string;\n config: AxiosRequestConfig = {};\n request: any;\n response?: AxiosResponse;\n isAxiosError: boolean;\n status?: string;\n toJSON: () => object;\n\n constructor(message: string, responseBody: AxiosResponse) {\n super(message);\n this.response = responseBody;\n this.isAxiosError = true;\n this.toJSON = () => ({});\n }\n}\n","import { css } from 'styled-components';\n\nexport interface IImageSource {\n src: string,\n webpSrc?: string,\n}\n\n/**\n * Позволяет браузеру выбрать наиболее подходящий формат фонового избражения с помощью CSS\n * @param {Object} [image] - Объект с путями картинок разного формата\n * @param {string} image.src - Путь до картинки с обычным форматом (jpeg/png)\n * @param {string} [image.webpSrc] - Путь до картинки формата webp\n * @returns {string} Стили CSS\n *\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/image/image-set MDN}\n */\nexport const progressiveBackground = (image?: IImageSource): ReturnType | string => {\n if (!image) {\n return '';\n }\n\n const { src, webpSrc } = image;\n\n if (!webpSrc) {\n return css`\n background-image: url(${src});\n `;\n }\n\n return css`\n background-image: url(${src});\n\n background-image: -webkit-image-set(\n url(${webpSrc}) 1x,\n url(${src}) 1x\n );\n\n background-image: image-set(\n url(${webpSrc}) type('image/webp') 1x,\n url(${src}) 1x\n );\n `;\n};\n","// обрезать строку с многоточием при привышении заданного количества символом visibleLength\n// до выноса называлась ellipsis\nexport const truncate = (string: string | undefined, visibleLength: number) => {\n if (!string) {\n return '';\n }\n\n return string.length > visibleLength && visibleLength !== 0\n ? `${string.slice(0, visibleLength).trim()}...`\n : string;\n};\n","import { useCallback, useState } from 'react';\n\n/**\n * Вызывает функцию callBack не более одного раза.\n * Использование: отправка события аналитики при начале редактирования.\n */\n// todo: Перенести в shared\nexport const useOnceExecute = (callBack: () => void): () => void => {\n const [wasCalled, setWasCalled] = useState(false);\n\n return useCallback(() => {\n !wasCalled && setWasCalled((wasCalled) => {\n if (!wasCalled) {\n callBack();\n }\n\n return true;\n });\n }, [wasCalled, callBack]);\n};\n","import _setPrototypeOf from \"./_set_prototype_of.mjs\";\n\nfunction isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () { }));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n construct = Reflect.construct;\n } else {\n construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return construct.apply(null, arguments);\n}\n\nexport default function _construct(Parent, args, Class) {\n return construct.apply(null, arguments);\n}\n","import construct from './_construct.mjs';\nimport isNativeFunction from './_is_native_function.mjs';\nimport getPrototypeOf from './_get_prototype_of.mjs';\nimport setPrototypeOf from './_set_prototype_of.mjs';\n\nfunction wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n wrapNativeSuper = function wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return wrapNativeSuper(Class);\n}\n\nexport default function _wrapNativeSuper(Class) {\n return wrapNativeSuper(Class);\n}\n","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n"],"names":["window","__NEXT_P","push","HeadSection","styled","PageSection","wideBreakpoints","PageTitle","FONTS","SPromoBannersSection","PromoBannersSection","dispatch","useDispatch","useEffect","getState","providerId","isAuth","banners","city","provider","auth","getBanners","tag","expand","type","ESubscriptionsDomruTvActions","payload","useSelector","state","tvSubscriptions","withEllipsis","data-test","sectionId","onShowMore","isMobile","useMatchMedia","useSectionData","isShowSectionButton","sectionWidgets","id","map","packet","TvPackageCard","tvPacket","btnTypes","size","btnSizes","text","onClick","Object","entries","services","service","ServiceCard","SubscriptionsLayout","subscriptions","PageContainer","WideContainer","usePrepareQueryData","subscriptionId","vas","shallowEqual","useState","defaultDetailsState","detailsState","setDetailsState","onShowDetails","useCallback","isOpen","onHideDetails","fetchTvPackages","fetchSubscriptions","length","location","hash","replace","key","ESectionId","scrollToAnchor","DetailsLayout","onGoBack","PageHeader","SegmentedBannerGrid","alias","margin","Packs","Subscriptions","Services","TryAndBuyConnectionForTvServices","DomRuTvPackagesPage","cityIn","companyName","Layout","title","description","withMenu","withFooter","withChat","bgColor","COLORS","PackagesLayout","getInitialProps","options","validatedAccessToken","store","res","initialProps","isNeedAuthData","currentCity","selectCompanyName","isShowcaseAbnEnabled","nonPermanentRedirect","tags","url","response","Error","Array","isArray","join","contentRequest","isSuccess","data","items","captureQueryError","groupByTags","routers","groups","reduce","acc","mapper","cache","Map","banner","result","cached","get","routerId","equipmentRouter","find","set","bannerMapper","bannerInfo","forEach","bannerTags","bannerTag","mappedBanner","fetchProfileTvPackages","trialPackage","selectTrialPackage","terminalId","tvPackages","isTnBConnecting","setIsTnBConnecting","EResultPopupStatus","tryAndBuyConnectionResult","setTryAndBuyConnectionResult","onTryAndBuyConnect","phone","name","baseCost","duration","durationTypeId","raId","tryAndBuyEndDate","value","label","phoneParam","tryAndBuy","ETryAndBuyDurationTypeId","dayjs","add","format","notifyPhone","notifyContactId","doRequest","setTvPacket","packetId","trId","closePacket","RubleSymbol","error","message","closeTnBPopup","tryAndBuyLabel","useMemo","actDateTo","Date","periodText","pluralize","dayPluralize","monthPluralize","ETvPackagesActionTypes","onCloseResultHandler","TryAndBuyConnectionPopup","isConnectionInProgress","labelText","onConnect","onClose","PopupResult","PopupContent","ButtonsRow","Button","bType","Wrapper","BannerRow","Row","notSingle","css","BannerCol","Col","BorderRadius","props","isDoubleBanner","BannerWrapper","Title","Text","Desc","className","renderBannersList","titleText","truncate","descText","ST","xs","PromoBanner","bannerIdx","background","image_background","backgroundWebp","image_background_webp","image","imageWebp","image_webp","textColor","text_color","buttonText","button_text","buttonType","button_type","route","link","legal","ageLimit","age_limit","legal_info","legal_info_text_color","advertising","NukaCarousel","withoutArrows","cellSpacing","useElementVisibility","callback","executeOnce","useOnceExecute","useIntersectionObserver","isIntersecting","root","rootMargin","threshold","callBack","node","setNode","observerInst","isClientSide","IntersectionObserver","observer","useRef","current","currentObserver","disconnect","observe","scrollToAnchorByUrlHash","anchor","additionalOffset","el","document","getElementById","phoneMenu","plankMobile","top","getBoundingClientRect","offsetHeight","scrollTo","behavior","pageYOffset","progressiveBackground","src","webpSrc","string","visibleLength","slice","trim","wasCalled","setWasCalled","isNativeReflectConstruct","Reflect","construct","sham","Proxy","prototype","toString","call","e","Parent","args","Class","a","apply","instance","Function","bind","arguments","_construct","wrapNativeSuper","_cache","undefined","fn","indexOf","TypeError","has","this","constructor","create","enumerable","writable","configurable","_wrapNativeSuper"],"sourceRoot":""}