{"version":3,"sources":["pages/error/index.tsx","components/main-video/index.tsx","components/section/index.tsx","components/image-item/index.tsx","components/sec-projects/components/projects-carousel-item/index.tsx","common.ts","components/sec-projects/index.tsx","components/description-item/index.tsx","components/sec-clients/index.tsx","components/sec-developing/index.tsx","components/sec-services/index.tsx","components/sec-protection/index.tsx","components/sec-support/index.tsx","components/sec-outstaffing/index.tsx","components/sec-benefits/index.tsx","components/sec-reviews/index.tsx","api.js","components/sec-news/components/facebook-posts/index.jsx","components/sec-news/index.tsx","components/sec-feedback/components/feedback-form/index.tsx","components/sec-feedback/index.tsx","components/sec-map/components/ymap/index.tsx","components/sec-map/index.tsx","components/parallax-cache/index.tsx","components/footer/index.tsx","components/navbar/components/scroll-into/index.tsx","i18n/config.js","components/navbar/index.jsx","pages/home/index.tsx","App.tsx","index.tsx"],"names":["Error","className","Alert","variant","Heading","to","href","MainVideo","id","src","loop","autoPlay","muted","alt","Section","color","title","fluid","wrapper","children","Container","ImageItem","path","ProjectCarouselItem","description","info","Carousel","Item","pageId","ClientsLogo","ReviewsInfo","person","position","ProjectsInfo","DevelopingInfo","lines","ServicesInfo","ProtectionInfo","SupportInfo","OutstaffingInfo","BenefitsInfo","Projects","t","useTranslation","map","item","key","DescriptionItem","md","sm","xs","imageClass","titleClass","Col","Clients","Row","Developing","line","Services","Protection","Support","Outstaffing","Benefits","Reviews","Media","Body","request","method","url","data","withFile","headers","Headers","options","append","body","JSON","stringify","fetch","then","res","a","ok","json","Promise","reject","catch","err","FacebookPosts","useState","postIds","setPostIds","useEffect","window","fbAsyncInit","FB","init","appId","xfbml","version","console","d","s","js","fjs","getElementsByTagName","getElementById","createElement","parentNode","insertBefore","document","ids","push","split","carousel","style","opacity","slides","i","length","display","setTimeout","getElementsByClassName","click","setAttribute","getBoundingClientRect","height","removeProperty","error","interval","onSlide","slideNumber","container","nextHeight","getAttribute","$","animate","data-href","data-show-text","data-width","Math","min","screen","width","target","News","FeedbackForm","validated","setValidated","sizeExceeded","setSizeExceeded","captchaPassed","setCaptchaPassed","captchaResponse","setCaptchaResponse","name","setName","email","setEmail","phone","setPhone","message","setMessage","file","setFile","Form","noValidate","onSubmit","e","preventDefault","classList","remove","add","currentTarget","checkValidity","button","disabled","formData","FormData","addClassName","hasErrors","removeClassName","resultDiv","innerHTML","stopPropagation","encType","FormGroup","as","Label","column","Control","placeholder","onChange","value","required","Feedback","type","pattern","rows","File","data-browse","files","size","siteKey","theme","onSuccess","result","Button","marginTop","YMap","overflow","fontSize","top","frameBorder","allowFullScreen","pointerEvents","Map","ParallaxCache","parallaxController","useController","handler","update","addEventListener","removeEventListener","Footer","Date","getFullYear","ScrollInto","onClick","selector","el","querySelector","elementScrollIntoView","behavior","i18n","use","initReactI18next","fallbackLng","lng","resources","en","translations","require","ru","ns","defaultNS","languages","Navbar","pageYOffset","setPosition","changeLanguage","handleScroll","handleDropdownOpen","this","toggle","dropdownContent","nextElementSibling","maxHeight","scrollHeight","handleDocumentClick","overflowY","checked","contains","tagName","content","passive","htmlFor","viewBox","fill","xmlns","Home","layers","image","amount","App","exact","component","ReactDOM","render"],"mappings":"m0jEAIaA,EAAkB,kBAC3B,yBAAKC,UAAU,eACX,kBAACC,EAAA,EAAD,CAAOC,QAAQ,UACX,kBAACD,EAAA,EAAME,QAAP,0GACA,2FACe,kBAAC,IAAD,CAAMC,GAAG,KAAT,yCADf,uBAC+C,uBAAGC,KAAK,+BAAR,uEAD/C,QCHCC,G,OAAsB,kBAC/B,0BAAMC,GAAG,WAAWP,UAAU,wBAC1B,2BAAOQ,IAAI,WAAWC,MAAI,EAACC,UAAQ,EAACC,OAAK,IACzC,yBAAKX,UAAU,4DACX,yBAAKA,UAAU,OAAOQ,IAAI,mBAAmBI,IAAI,kB,kBCKhDC,G,OAA2B,SAAC,GAAD,IAAGN,EAAH,EAAGA,GAAIO,EAAP,EAAOA,MAAOC,EAAd,EAAcA,MAAOC,EAArB,EAAqBA,MAAOC,EAA5B,EAA4BA,QAASC,EAArC,EAAqCA,SAArC,OACpC,6BAASX,GAAIA,EAAIP,UAAWc,GACxB,kBAACK,EAAA,EAAD,CAAWH,MAAOA,EAAOhB,UAAWiB,EAAU,UAAY,IACrDF,EACG,oCACI,wBAAIf,UAAU,oBAAoBe,GACjCG,GAEL,oCAAGA,OCfNE,EAA6B,SAAC,GAAD,IAAGC,EAAH,EAAGA,KAAMrB,EAAT,EAASA,UAAT,OACtC,yBAAKA,UAAWA,GACZ,yBAAKQ,IAAKa,MCMLC,G,OAAuC,SAAC,GAAD,IAAGD,EAAH,EAAGA,KAAMN,EAAT,EAASA,MAAOQ,EAAhB,EAAgBA,YAAaC,EAA7B,EAA6BA,KAAMxB,EAAnC,EAAmCA,UAAnC,OAChD,kBAACyB,EAAA,EAASC,KAAV,CAAe1B,UAAWA,GACtB,yBAAKA,UAAU,iBACX,kBAAC,EAAD,CAAWqB,KAAMA,EAAMrB,UAAU,gBACjC,yBAAKA,UAAU,QACX,wBAAIA,UAAU,QAAQe,GACtB,2BAAIQ,GACJ,uBAAGvB,UAAU,aAAawB,QCrB7BG,EAAS,mBAGTC,EAAkC,CAC3C,+BACA,gCACA,0BACA,2BACA,0BACA,gCACA,6BACA,4BACA,gCACA,2BACA,6BACA,4BACA,2BACA,0BACA,0BACA,6BACA,+BACA,+BACA,mCACA,oCAuBSC,EAA6C,CACtD,CACIR,KAAM,8BACNE,YAAa,8BACbO,OAAQ,yBACRC,SAAU,4BAEd,CACIV,KAAM,8BACNE,YAAa,8BACbO,OAAQ,yBACRC,SAAU,6BAILC,EAA+C,CACxD,CACIX,KAAM,mCACNN,MAAO,+BACPQ,YAAa,qCACbC,KAAM,+BAEV,CACIH,KAAM,+BACNN,MAAO,2BACPQ,YAAa,oCACbC,KAAM,+BAEV,CACIH,KAAM,4BACNN,MAAO,2BACPQ,YAAa,iCACbC,KAAM,+BAEV,CACIH,KAAM,6BACNN,MAAO,4BACPQ,YAAa,kCACbC,KAAM,+BAEV,CACIH,KAAM,8BACNN,MAAO,6BACPQ,YAAa,mCACbC,KAAM,6BAGV,CACIH,KAAM,+BACNN,MAAO,8BACPQ,YAAa,oCACbC,KAAM,8BAEV,CACIH,KAAM,6BACNN,MAAO,4BACPQ,YAAa,kCACbC,KAAM,4BAEV,CACIH,KAAM,4BACNN,MAAO,2BACPQ,YAAa,iCACbC,KAAM,2BAEV,CACIH,KAAM,iCACNN,MAAO,gCACPQ,YAAa,sCACbC,KAAM,gCAEV,CACIH,KAAM,8BACNN,MAAO,6BACPQ,YAAa,mCACbC,KAAM,8BAIDS,EAA0C,CACnD,CACIZ,KAAM,iCACNN,MAAO,kCACPmB,MAAO,CACH,wCACA,yCACA,0CAGR,CACIb,KAAM,4BACNN,MAAO,6BACPmB,MAAO,CACH,mCACA,oCACA,qCAGR,CACIb,KAAM,iCACNN,MAAO,kCACPmB,MAAO,CACH,wCACA,yCACA,wCACA,4CAMCC,EAAwC,CACjD,CACId,KAAM,mCACNN,MAAO,6BACPmB,MAAO,CACH,6BACA,8BACA,+BAGR,CACIb,KAAM,iCACNN,MAAO,2BACPmB,MAAO,CACH,2BACA,4BACA,6BAGR,CACIb,KAAM,6BACNN,MAAO,uBACPmB,MAAO,CACH,uBACA,wBACA,yBAGR,CACIb,KAAM,6BACNN,MAAO,uBACPmB,MAAO,CACH,uBACA,wBACA,uBACA,2BAKCE,EAA0C,CACnD,CACIf,KAAM,iCACNN,MAAO,0BACPmB,MAAO,CACH,0BACA,6BAGR,CACIb,KAAM,4BACNN,MAAO,qBACPmB,MAAO,CACH,uBAGR,CACIb,KAAM,iCACNN,MAAO,0BACPmB,MAAO,CACH,6BAKCG,EAAuC,CAChD,CACIhB,KAAM,4BACNN,MAAO,wBACPmB,MAAO,CACH,wBACA,yBACA,wBACA,2BAGR,CACIb,KAAM,+BACNN,MAAO,wBACPmB,MAAO,CACH,wBACA,yBACA,0BAGR,CACIb,KAAM,4BACNN,MAAO,qBACPmB,MAAO,CACH,qBACA,wBAGR,CACIb,KAAM,kCACNN,MAAO,2BACPmB,MAAO,CACH,2BACA,4BACA,8BAKCI,EAA2C,CACpD,CACIvB,MAAO,sBAEX,CACIA,MAAO,sBAEX,CACIA,MAAO,uBAIFwB,EAAwC,CACjD,CACIlB,KAAM,6BACNN,MAAO,uBACPmB,MAAO,CACH,yBAGR,CACIb,KAAM,4BACNN,MAAO,sBACPmB,MAAO,CACH,wBAGR,CACIb,KAAM,6BACNN,MAAO,uBACPmB,MAAO,CACH,yBAGR,CACIb,KAAM,4BACNN,MAAO,sBACPmB,MAAO,CACH,wBAGR,CACIb,KAAM,iCACNN,MAAO,2BACPmB,MAAO,CACH,6BAGR,CACIb,KAAM,iCACNN,MAAO,2BACPmB,MAAO,CACH,8B,SCjTCM,EAAqB,WAC9B,IAAQC,EAAMC,cAAND,EAGX,OACG,kBAAC,EAAD,CACAlC,GAAG,eACHQ,MAAO0B,EAAE,uBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACQ,EAAA,EAAD,KACKO,EAAaW,KAAI,SAACC,EAAMC,GAAP,OACd,kBAAC,EAAD,CACIxB,KAAMuB,EAAKvB,KACXN,MAAO0B,EAAEG,EAAK7B,OACdQ,YAAakB,EAAEG,EAAKrB,aACpBC,KAAMiB,EAAEG,EAAKpB,MACbqB,IAAKA,U,kBCXRC,EAAmC,SAAC,GAAD,IAAGzB,EAAH,EAAGA,KAAMN,EAAT,EAASA,MAAOgC,EAAhB,EAAgBA,GAAIC,EAApB,EAAoBA,GAAIC,EAAxB,EAAwBA,GAAI/B,EAA5B,EAA4BA,SAAUgC,EAAtC,EAAsCA,WAAYC,EAAlD,EAAkDA,WAAlD,OAC5C,kBAACC,EAAA,EAAD,CAAKL,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,GACpB5B,GAAQ6B,GACL,kBAAC,EAAD,CAAW7B,KAAMA,EAAMrB,UAAWkD,IAGrCnC,GACG,wBAAIf,UAAWmD,GAAapC,GAE/BG,IChBImC,EAAoB,WAE7B,IAAQZ,EAAMC,cAAND,EACR,OAAQ,kBAAC,EAAD,CACJlC,GAAG,cACHQ,MAAO0B,EAAE,iBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACqC,EAAA,EAAD,KACK1B,EAAYe,KAAI,SAACC,EAAMC,GAAP,OACb,kBAAC,EAAD,CACIxB,KAAMuB,EACNG,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,WAAW,cACXL,IAAKA,UCjBZU,EAAuB,WAChC,IAAQd,EAAMC,cAAND,EAGR,OACA,kBAAC,EAAD,CACIlC,GAAG,iBAEHQ,MAAO0B,EAAE,yBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACqC,EAAA,EAAD,CAAKtD,UAAU,YACViC,EAAeU,KAAI,SAACC,EAAMC,GAAP,OAChB,kBAAC,EAAD,CACIxB,KAAMuB,EAAKvB,KACX0B,GAAI,EACJC,GAAI,EACJC,GAAI,GACJlC,MAAO0B,EAAEG,EAAK7B,OACdmC,WAAW,cACXL,IAAKA,GAEL,4BACKD,EAAKV,MAAOS,KAAI,SAACa,EAAMX,GAAP,OACb,wBAAIA,IAAKA,GAAMJ,EAAEe,eCxBhCC,EAAqB,WAC9B,IAAQhB,EAAMC,cAAND,EAGR,OACA,kBAAC,EAAD,CACIlC,GAAG,eACHQ,MAAO0B,EAAE,kBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACqC,EAAA,EAAD,CAAKtD,UAAU,YACVmC,EAAaQ,KAAI,SAACC,EAAMC,GAAP,OACd,kBAAC,EAAD,CACIxB,KAAMuB,EAAKvB,KACX0B,GAAI,EACJC,GAAI,EACJC,GAAI,GACJlC,MAAO0B,EAAEG,EAAK7B,OACdmC,WAAW,cACXL,IAAKA,GAEL,4BACKD,EAAKV,MAAOS,KAAI,SAACa,EAAMX,GAAP,OACb,wBAAIA,IAAKA,GAAMJ,EAAEe,eC3BhCE,EAAuB,WAChC,IAAQjB,EAAMC,cAAND,EAER,OACA,kBAAC,EAAD,CACIlC,GAAG,iBACHQ,MAAO0B,EAAE,iBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACqC,EAAA,EAAD,CAAKtD,UAAU,YACVoC,EAAeO,KAAI,SAACC,EAAMC,GAAP,OAChB,kBAAC,EAAD,CACIxB,KAAMuB,EAAKvB,KACX0B,GAAI,EACJC,GAAI,EACJC,GAAI,GACJlC,MAAO0B,EAAEG,EAAK7B,OACdmC,WAAW,cACXL,IAAKA,GAEL,4BACKD,EAAKV,MAAOS,KAAI,SAACa,EAAMX,GAAP,OACb,wBAAIA,IAAKA,GAAMJ,EAAEe,eCtBhCG,EAAoB,WAC7B,IAAQlB,EAAMC,cAAND,EAGR,OACA,kBAAC,EAAD,CACIlC,GAAG,cACHQ,MAAO0B,EAAE,iBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACqC,EAAA,EAAD,CAAKtD,UAAU,YACVqC,EAAYM,KAAI,SAACC,EAAMC,GAAP,OACb,kBAAC,EAAD,CACIxB,KAAMuB,EAAKvB,KACX0B,GAAI,EACJC,GAAI,EACJC,GAAI,GACJlC,MAAO0B,EAAEG,EAAK7B,OACdmC,WAAW,cACXL,IAAKA,GAEL,4BACKD,EAAKV,MAAOS,KAAI,SAACa,EAAMX,GAAP,OACb,wBAAIA,IAAKA,GAAMJ,EAAEe,eCtBhCI,G,OAAwB,WAEjC,IAAQnB,EAAMC,cAAND,EAEZ,OACI,kBAAC,EAAD,CACIlC,GAAG,kBACHQ,MAAO0B,EAAE,qBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACqC,EAAA,EAAD,CAAKtD,UAAU,UACX,yBAAKA,UAAU,eACX,yBAAKQ,IAAI,4BAA6BI,IAAI,UAGlD,kBAAC0C,EAAA,EAAD,CAAKtD,UAAU,QACVsC,EAAgBK,KAAI,SAACC,EAAMC,GAAP,OACjB,kBAAC,EAAD,CACIxB,KAAMuB,EAAKvB,KACX0B,GAAI,EACJC,GAAI,GACJC,GAAI,GACJlC,MAAO0B,EAAEG,EAAK7B,OACdmC,WAAW,cACXC,WAAW,cACXN,IAAKA,GAEJD,EAAKV,OACF,wBAAIlC,UAAU,eACT4C,EAAKV,MAAOS,KAAI,SAACa,EAAMX,GAAP,OACb,wBAAIA,IAAKA,GAAMJ,EAAEe,aAOzC,kBAACF,EAAA,EAAD,CAAKtD,UAAU,mBACX,wBAAIA,UAAU,eACV,4BAAKyC,EAAE,oBACP,4BAAKA,EAAE,oBACP,4BAAKA,EAAE,yBC5CVoB,EAAqB,WAC9B,IAAQpB,EAAMC,cAAND,EAGR,OACA,kBAAC,EAAD,CACIlC,GAAG,eACHQ,MAAO0B,EAAE,kBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACqC,EAAA,EAAD,KACKf,EAAaI,KAAI,SAACC,EAAMC,GAAP,OACd,kBAAC,EAAD,CACIxB,KAAMuB,EAAKvB,KACX0B,GAAI,EACJC,GAAI,EACJC,GAAI,GACJlC,MAAO0B,EAAEG,EAAK7B,OACdmC,WAAW,cACXL,IAAKA,GAEJD,EAAKV,OACF,oCACKU,EAAKV,MAAOS,KAAI,SAACa,EAAMX,GAAP,OACb,uBAAGA,IAAKA,EAAK7C,UAAU,QAAQyC,EAAEe,e,SCvBpDM,G,OAAoB,WAEjC,IAAOrB,EAAKC,cAALD,EACH,OACA,kBAAC,EAAD,CACIlC,GAAG,cACHQ,MAAO0B,EAAE,iBACT3B,MAAM,UACNG,SAAO,GAEP,kBAACqC,EAAA,EAAD,CAAKtD,UAAU,YACV6B,EAAYc,KAAI,SAACC,EAAMC,GAAP,OACb,kBAACO,EAAA,EAAD,CAAKL,GAAI,EAAG/C,UAAU,SAAS6C,IAAKA,GAChC,kBAACkB,EAAA,EAAD,KACI,kBAAC,EAAD,CAAW1C,KAAMuB,EAAKvB,KAAMrB,UAAU,cACtC,kBAAC+D,EAAA,EAAMC,KAAP,KACI,2BAAIvB,EAAEG,EAAKrB,cACX,4BACI,gCAASkB,EAAEG,EAAKd,QAAhB,UACA,0BAAM9B,UAAU,cAAcyC,EAAEG,EAAKb,sB,8DC7BxDkC,EAAU,SAACC,EAAQC,EAAKC,EAAMC,GACvC,IAAMC,EAAU,IAAIC,QACdC,EAAU,CAAEN,UAelB,OAbKG,IACDC,EAAQG,OAAO,eAAgB,mCAC/BD,EAAQF,QAAUA,GAGlBF,IAEII,EAAQE,KADRL,EACeD,EAEAO,KAAKC,UAAUR,IAI/BS,MAAMV,EAAKK,GACbM,KADE,uCACG,WAAOC,GAAP,SAAAC,EAAA,0DACED,EAAIE,GADN,gCAEeF,EAAIG,OAFnB,wEAKKC,QAAQC,UALb,2CADH,uDAQFC,OAAM,SAACC,GAAD,OAASH,QAAQC,OAAOE,OCjB1BC,EAAgB,WACzB,MAA8BC,mBAAS,IAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACOjD,EAAKC,cAALD,EAgEP,OArCAkD,qBAAU,WAvBNC,OAAOC,YAAc,WACjBD,OAAOE,GAAGC,KAAK,CACXC,MZhBK,mBYiBLC,OAAO,EACPC,QAAS,UAIjBC,QAAQ3E,KAAK,kBAEZ,SAAS4E,EAAGC,EAAG9F,GACZ,IAAI+F,EAAIC,EAAMH,EAAEI,qBAAqBH,GAAG,GACpCD,EAAEK,eAAelG,MAIrB+F,EAAKF,EAAEM,cAAcL,IAAO9F,GAAKA,EACjC+F,EAAG9F,IAAM,4CACT+F,EAAII,WAAWC,aAAaN,EAAIC,GAChCJ,QAAQ3E,KAAK,kBAThB,CAUCqF,SAAU,SAAU,kBAKtB5C,EAAQ,MAAD,0CAA2CtC,EAA3C,8BZrCa,4LYqCb,8CACNmD,MAAK,SAACC,GACH,IAAI+B,EAAM,GACV/B,EAAIX,KAAKzB,KAAI,SAACC,GAAD,OAAUkE,EAAIC,KAAKnE,EAAKrC,GAAGyG,MAAM,KAAK,OACnDtB,EAAWoB,GAIX,IAAIG,EAAWJ,SAASJ,eAAe,iBACvCQ,EAASC,MAAMC,QAAU,EAGzB,IADA,IAAIC,EAASH,EAAS/F,SAAS,GAAGA,SACzBmG,EAAI,EAAGA,EAAID,EAAOE,OAAQD,IAC/BD,EAAOC,GAAGH,MAAMK,QAAU,QAK9BC,YAAW,WAAM,oBAEOX,SAASY,uBAAuB,wBAFvC,IAEb,2BAA4E,SAChEC,SAHC,8BAMb,IAAK,IAAIL,EAAI,EAAGA,EAAID,EAAOE,OAAQD,IAC/BD,EAAOC,GAAGM,aAAa,eAAgBP,EAAOC,GAAGO,wBAAwBC,OAAS,IAClFT,EAAOC,GAAGH,MAAMY,eAAe,WAGnCb,EAASC,MAAMC,QAAU,IAC1B,QAEN9B,OAAM,SAACC,GAAD,OAASa,QAAQ4B,MAAMzC,QAC/B,IAEuB,IAAnBG,EAAQ6B,OACX,kBAAC7F,EAAA,EAAD,CACIuG,SAAU,KACVzH,GAAG,gBACH0H,QAAS,SAACC,GACN,IAAIC,EAAYtB,SAASJ,eAAe,iBAAiBvF,SAAS,GAC9DkH,EAAaD,EAAUjH,SAASgH,GAAaG,aAAa,gBAC9DC,IAAEH,GAAWI,QAAQ,CAAEV,OAAQO,GAAc,OAGhD3C,EAAQ9C,KAAI,SAACC,EAAMC,GAAP,OACT,kBAACpB,EAAA,EAASC,KAAV,CAAe1B,UAAU,cAAc6C,IAAKA,GACxC,yBAAK7C,UAAU,UAAUwI,YAAA,mCAAuC7G,EAAvC,kBAAuDiB,GAAQ6F,iBAAe,OAAOC,aAAmD,MAAvCC,KAAKC,IAAIhD,OAAOiD,OAAOC,MAAO,KAAe,MAAQ,SAC/K,yBAAK9I,UAAU,oBACX,uBAAGK,KAAI,mCAA8BsB,EAA9B,kBAA8CiB,GAAQmG,OAAO,UAAUtG,EAAE,mCAKhG,+BCnFKuG,G,OAAiB,WAC1B,IAAOvG,EAAKC,cAALD,EACX,OACI,kBAAC,EAAD,CACIlC,GAAG,WACHQ,MAAO0B,EAAE,mBACT3B,MAAM,UACNG,SAAO,GAEP,kBAAC,EAAD,S,sCCVKgI,I,OAAyB,WAElC,IAAQxG,EAAMC,cAAND,EAER,EAAkC+C,oBAAS,GAA3C,mBAAO0D,EAAP,KAAkBC,EAAlB,KACA,EAAwC3D,oBAAS,GAAjD,mBAAO4D,EAAP,KAAqBC,EAArB,KACA,EAA0C7D,oBAAS,GAAnD,mBAAO8D,EAAP,KAAsBC,EAAtB,KACA,EAA8C/D,mBAAS,IAAvD,mBAAOgE,EAAP,KAAwBC,EAAxB,KAGA,EAAwBjE,mBAAS,IAAjC,mBAAOkE,EAAP,KAAaC,EAAb,KACA,EAA0BnE,mBAAS,IAAnC,mBAAOoE,EAAP,KAAcC,EAAd,KACA,EAA0BrE,mBAAS,IAAnC,mBAAOsE,EAAP,KAAcC,EAAd,KACA,EAA8BvE,mBAAS,IAAvC,mBAAOwE,EAAP,KAAgBC,EAAhB,KACA,EAAwBzE,mBAAsB,MAA9C,mBAAO0E,EAAP,KAAaC,EAAb,KAsEA,OACI,kBAACC,EAAA,EAAD,CAAMC,YAAU,EAACnB,UAAWA,EAAWoB,SApEtB,SAACC,GAoBlB,GAnBAA,EAAEC,iBAGEpB,GACAvC,SAASY,uBAAuB,aAAa,GAAGgD,UAAUC,OAAO,YACjE7D,SAASY,uBAAuB,aAAa,GAAGgD,UAAUE,IAAI,gBAE9D9D,SAASY,uBAAuB,aAAa,GAAGgD,UAAUC,OAAO,cACjE7D,SAASY,uBAAuB,aAAa,GAAGgD,UAAUE,IAAI,aAI9DrB,EACAzC,SAASY,uBAAuB,eAAe,GAAGgD,UAAUC,OAAO,cAEnE7D,SAASY,uBAAuB,eAAe,GAAGgD,UAAUE,IAAI,cAGtDJ,EAAEK,cAAcC,iBAAmBvB,IAAmBY,IAASd,IAAkBc,GAIxF,CACH,IAAIY,EAASjE,SAASL,qBAAqB,UAAU,GACrDsE,EAAOC,UAAW,EAClBD,EAAOL,UAAUE,IAAI,UAGrB,IAAIK,EAAW,IAAIC,SACnBD,EAASvG,OAAO,WAAYiF,GAC5BsB,EAASvG,OAAO,QAASmF,GACzBoB,EAASvG,OAAO,QAASqF,GACzBkB,EAASvG,OAAO,OAAQuF,GACxBgB,EAASvG,OAAO,UAAW+E,GACvBU,GACAc,EAASvG,OAAO,OAAQyF,EAAOA,EAAKR,MAGvBzF,EAAQ,OAAQ,WAAY+G,GAAU,GAC9ClG,MAAK,SAACV,GACX,GAAIA,EAAM,CACN,IAAI8G,EAAe9G,EAAK+G,UAAY,eAAiB,gBACjDC,EAAkBhH,EAAK+G,UAAY,gBAAkB,eACrDE,EAAYxE,SAASY,uBAAuB,UAAU,GAC1D4D,EAAUC,UAAYlH,EAAK4F,QAC3BqB,EAAUZ,UAAUC,OAAOU,GAC3BC,EAAUZ,UAAUE,IAAIO,GACxBG,EAAUnE,MAAMK,QAAU,QAG9BuD,EAAOC,UAAW,EAClBD,EAAOL,UAAUC,OAAO,aACzBrF,OAAM,WACLyF,EAAOC,UAAW,EAClBD,EAAOL,UAAUC,OAAO,UACxB,IAAIW,EAAYxE,SAASY,uBAAuB,UAAU,GAC1D4D,EAAUC,UAAY,oGACtBD,EAAUZ,UAAUC,OAAO,iBAC3BW,EAAUZ,UAAUE,IAAI,gBACxBU,EAAUnE,MAAMK,QAAU,gBAvC9B4B,GAAa,GACboB,EAAEgB,kBA0CNpC,GAAa,IAIkDqC,QAAQ,uBACnE,kBAACC,EAAA,EAAD,CAAWC,GAAIpI,KACX,kBAAC8G,EAAA,EAAKuB,MAAN,CAAYC,QAAM,EAAC5I,GAAI,GACnB,gCAASP,EAAE,wBAEf,kBAACW,EAAA,EAAD,CAAKJ,GAAI,GACL,kBAACoH,EAAA,EAAKyB,QAAN,CACIC,YAAarJ,EAAE,sBACfsJ,SAAU,SAACxB,GAAD,OAAsCZ,EAAQY,EAAEK,cAAcoB,QACxEC,UAAQ,IAEZ,kBAAC7B,EAAA,EAAKyB,QAAQK,SAAd,CAAuBC,KAAK,WAAW1J,EAAE,8BAGjD,kBAACgJ,EAAA,EAAD,CAAWC,GAAIpI,KACX,kBAAC8G,EAAA,EAAKuB,MAAN,CAAYC,QAAM,EAAC5I,GAAI,GACnB,2CAEJ,kBAACI,EAAA,EAAD,CAAKJ,GAAI,GACL,kBAACoH,EAAA,EAAKyB,QAAN,CACIM,KAAK,QACLL,YAAY,SACZC,SAAU,SAACxB,GAAD,OAAsCV,EAASU,EAAEK,cAAcoB,QACzEC,UAAQ,IAEZ,kBAAC7B,EAAA,EAAKyB,QAAQK,SAAd,CAAuBC,KAAK,WAAW1J,EAAE,wCAGjD,kBAACgJ,EAAA,EAAD,CAAWC,GAAIpI,KACX,kBAAC8G,EAAA,EAAKuB,MAAN,CAAYC,QAAM,EAAC5I,GAAI,GACnB,gCAASP,EAAE,gCAEf,kBAACW,EAAA,EAAD,CAAKJ,GAAI,GACL,kBAACoH,EAAA,EAAKyB,QAAN,CACIM,KAAK,MACLC,QAAQ,gBAAgBN,YAAarJ,EAAE,8BACvCsJ,SAAU,SAACxB,GAAD,OAAsCR,EAASQ,EAAEK,cAAcoB,QACzEC,UAAQ,IAEZ,kBAAC7B,EAAA,EAAKyB,QAAQK,SAAd,CAAuBC,KAAK,WAAW1J,EAAE,wCAGjD,kBAACgJ,EAAA,EAAD,CAAWC,GAAIpI,KACX,kBAAC8G,EAAA,EAAKuB,MAAN,CAAYC,QAAM,EAAC5I,GAAI,GACnB,gCAASP,EAAE,2BAEf,kBAACW,EAAA,EAAD,CAAKJ,GAAI,GACL,kBAACoH,EAAA,EAAKyB,QAAN,CACIH,GAAG,WACHW,KAAM,EACNN,SAAU,SAACxB,GAAD,OAAsCN,EAAWM,EAAEK,cAAcoB,QAC3EC,UAAQ,IAEZ,kBAAC7B,EAAA,EAAKyB,QAAQK,SAAd,CAAuBC,KAAK,WAAW1J,EAAE,8BAGjD,kBAACgJ,EAAA,EAAD,CAAWC,GAAIpI,KACX,kBAAC8G,EAAA,EAAKuB,MAAN,CAAYC,QAAM,EAAC5I,GAAI,GACnB,gCAASP,EAAE,wBAAX,SACA,0BAAMzC,UAAU,cAAcyC,EAAE,8BAEpC,kBAACW,EAAA,EAAD,CAAKJ,GAAI,GACL,kBAACoH,EAAA,EAAKkC,KAAN,CAGItM,UAAU,cACVuM,cAAY,4EACZR,SAAU,SAACxB,GAC+B,IAAlCA,EAAEK,cAAc4B,MAAOlF,QACvB+B,EAAgBkB,EAAEK,cAAc4B,MAAO,GAAGC,KAAO,UACjDtC,EAAQI,EAAEK,cAAc4B,MAAO,KAE/BnD,GAAgB,MAI5B,kBAACe,EAAA,EAAKyB,QAAQK,SAAd,CAAuBC,KAAK,WAA5B,mRAGR,kBAACV,EAAA,EAAD,CAAWC,GAAIpI,KACX,kBAACF,EAAA,EAAD,CAAKJ,GAAI,IACT,kBAACI,EAAA,EAAD,CAAKJ,GAAI,GACL,kBAAC,KAAD,CACI0J,QAAQ,2CACRC,MAAM,QACNF,KAAK,SACLG,UAAW,SAACC,GACRpD,EAAmBoD,GACnBtD,GAAiB,MAGzB,kBAACa,EAAA,EAAKyB,QAAQK,SAAd,CAAuBC,KAAK,UAAUnM,UAAU,mBAAmByC,EAAE,oCAG7E,kBAACgJ,EAAA,EAAD,CAAWC,GAAIpI,KACX,kBAACF,EAAA,EAAD,CAAKJ,GAAI,GAAID,GAAI,IACb,kBAAC+J,GAAA,EAAD,CAAQX,KAAK,SAASnM,UAAU,2BAA2ByC,EAAE,4BAC7D,0BAAMzC,UAAU,QAAQyC,EAAE,0BAC1B,0BAAMzC,UAAU,QAAO,uBAAGK,KAAK,oBAAR,yBAG/B,yBAAKL,UAAU,eAAekH,MAAO,CAAEK,QAAS,OAAQwF,UAAW,aC5LlEb,GAAqB,WAC9B,IAAOzJ,EAAKC,cAALD,EAEX,OAEI,kBAAC,EAAD,CACIlC,GAAG,WACHQ,MAAO0B,EAAE,kBACT3B,MAAM,UACNG,SAAO,GAEP,wBAAIjB,UAAU,eAAeyC,EAAE,oBAC/B,kBAAC,GAAD,QCXKuK,I,OAAO,WAChB,IAAQvK,EAAMC,cAAND,EAGR,OACA,oCACI,yBAAKlC,GAAG,OAAO2G,MAAO,CAAEnF,SAAU,WAAYkL,SAAU,WACpD,uBAAG5M,KAAK,yEAAyE6G,MAAO,CAAEpG,MAAO,OAAQoM,SAAU,OAAQnL,SAAU,WAAYoL,IAAK,SACtJ,uBAAG9M,KAAK,s5BAAs5B6G,MAAO,CAAEpG,MAAO,OAAQoM,SAAU,OAAQnL,SAAU,WAAYoL,IAAK,SAAn+B,6cAAwkC,4BAAQ3M,IAAI,6CAA6C4M,YAAY,IAAIC,iBAAiB,EAAMnG,MAAO,CAAE4B,MAAO,OAAQjB,OAAQ,OAAQ9F,SAAU,eAE9tC,yBAAK/B,UAAU,YACf,yBAAKA,UAAU,qBACX,4BAAI,uBAAGK,KAAK,oBAAR,uBACJ,6BAAK,uBAAGA,KAAK,2BAA2BU,MAAM,6GAAzC,sBACL,6BAAK,uBAAGmG,MAAO,CAAEoG,cAAe,QAAUjN,KAAK,yBAAyBU,MAAM,2DAAzE,oBACL,6BAAK,uBAAGV,KAAK,k3BAAk3B0I,OAAO,UAAUtG,EAAE,YACl5B,6BAAK,uBAAGpC,KAAK,oCAAoCU,MAAM,mEAAsBgI,OAAO,UAAS,yBAAKvI,IAAI,4BAA4B0G,MAAO,CAAEW,OAAQ,gBCnBlJ0F,GAAgB,kBACzB,kBAAC,EAAD,CACIhN,GAAG,UACHO,MAAM,UACNE,OAAK,GAEL,kBAAC,GAAD,QCPKwM,GAA0B,WACnC,IAAQC,EAAuBC,0BAAvBD,mBASR,OANA9H,qBAAU,WACN,IAAMgI,EAAU,kBAAMF,EAAmBG,UAEzC,OADAhI,OAAOiI,iBAAiB,OAAQF,GACzB,kBAAM/H,OAAOkI,oBAAoB,OAAQH,MACjD,CAACF,IAEG,MCVEM,I,OAAmB,kBAC5B,4BAAQ/N,UAAU,WACd,wCAAa,IAAIgO,MAAOC,cAAxB,qDACA,yDAAU,uBAAG5N,KAAK,mBAAR,a,UCIL6N,GAA8B,SAAC,GAAgD,IAA9CC,EAA6C,EAA7CA,QAASjN,EAAoC,EAApCA,SAAUkN,EAA0B,EAA1BA,SAAUpO,EAAgB,EAAhBA,UASvE,OACI,yBAAKA,UAAWA,EAAWmO,QATR,WACnB,IAAME,EAAKxH,SAASyH,cAAcF,GAClCG,aAAsBF,EAAK,CAAEG,SAAU,WACnCL,GACAA,MAKiDjN,I,4BClB7DuN,KAAKC,IAAIC,MAAkB5I,KAAK,CAC9B6I,YAAa,KACbC,IAAK,KACLC,UAAW,CACTC,GAAI,CACFC,aAAcC,EAAQ,MAExBC,GAAI,CACFF,aAAcC,EAAQ,OAG1BE,GAAI,CAAC,gBACLC,UAAW,iBAGbX,KAAKY,UAAY,CAAC,KAAM,MAETZ,GAAf,EAAeA,ICPFa,GAAS,WAClB,IAAQ7M,EAAMC,cAAND,EACAgM,EAAS/L,cAAT+L,KAGR,EAAgCjJ,mBAASI,OAAO2J,aAAhD,mBAAOxN,EAAP,KAAiByN,EAAjB,KAGF,SAASC,EAAelF,GACtBkE,EAAKgB,eAAelF,EAAExB,OAAOiD,OAI7B,IAAM0D,EAAe,kBAAMF,EAAY5J,OAAO2J,cAGxCI,EAAqB,WACvBC,KAAKnF,UAAUoF,OAAO,UACtB,IAAIC,EAAkBF,KAAKG,mBACvBD,EAAgB5I,MAAM8I,WACtBF,EAAgB5I,MAAM8I,UAAY,KAClCF,EAAgB5I,MAAM+F,SAAW,WAEjC6C,EAAgB5I,MAAM8I,UAAYF,EAAgBG,aAAe,KACjEzI,YAAW,WACPsI,EAAgB5I,MAAM+F,SAAW,YAClC,MAKLiD,EAAsB,SAAC3F,GAkBzB,GAf2B,yBAAvBA,EAAExB,OAAO/I,YACT6G,SAASnC,KAAKwC,MAAMiJ,UAAatJ,SAASJ,eAAe,eAAe2J,QAAqB,SAAX,WAIvD,eAA1B7F,EAAExB,OAAO0B,UAAU,IACM,2BAA1BF,EAAExB,OAAO0B,UAAU,IACnBF,EAAExB,OAAO0B,UAAU4F,SAAS,qBACZ,oBAAhB9F,EAAExB,OAAOxI,KACTsG,SAASJ,eAAe,eAAe2J,UACvCvJ,SAASJ,eAAe,eAAe2J,SAAU,EACjDvJ,SAASnC,KAAKwC,MAAMiJ,UAAY,UAIhB,oBAAhB5F,EAAExB,OAAOxI,IACY,SAArBgK,EAAExB,OAAOuH,SACY,QAArB/F,EAAExB,OAAOuH,SACc,yBAAvB/F,EAAExB,OAAO/I,UAHb,CAQA,IAAIuQ,EAAU1J,SAASJ,eAAe,oBAClC8J,EAAQrJ,MAAM8I,YACdO,EAAQrJ,MAAM8I,UAAY,KAC1BO,EAAQrJ,MAAM+F,SAAW,SACzBpG,SAASJ,eAAe,mBAAmBgE,UAAUC,OAAO,aAWpE,OANA/E,qBAAU,WACNC,OAAOiI,iBAAiB,SAAU6B,EAAc,CAAEc,SAAS,IAC3D3J,SAASJ,eAAe,mBAAmBoH,iBAAiB,QAAS8B,GACrE9I,SAASgH,iBAAiB,QAASqC,KACpC,IAGC,4BAAQlQ,UAAS,+CAA0C+B,EAAW,IAAM,eAAiB,KACzF,yBAAK/B,UAAU,iBACX,yBAAKA,UAAU,oEACX,kBAAC,GAAD,CAAYoO,SAAS,YAAYpO,UAAU,kBACvC,yBAAKA,UAAU,iDAAiDQ,IAAI,yBAAyBI,IAAI,cACjG,yBAAKZ,UAAU,gDAAgDQ,IAAI,mBAAmBI,IAAI,eAG9F,yBAAKZ,UAAU,+EACX,2BAAOmM,KAAK,WAAW5L,GAAG,cAAcP,UAAU,uBAClD,2BAAOyQ,QAAQ,cAAczQ,UAAU,yBAEvC,yBAAKO,GAAG,OAAOP,UAAU,oBACrB,yBAAKA,UAAU,oCACX,0BAAMO,GAAG,kBAAkBP,UAAU,mBACpCyC,EAAE,mBACC,0BAAMzC,UAAU,wBACZ,yBAAK8I,MAAM,IAAIjB,OAAO,IAAI6I,QAAQ,UAAUC,KAAK,OAAOC,MAAM,8BAC1D,0BAAMxK,EAAE,0CAA0CuK,KAAK,aAKnE,yBAAKpQ,GAAG,mBAAmBP,UAAU,6CACjC,kBAAC,GAAD,CAAYoO,SAAS,kBAAkBpO,UAAU,0BAChDyC,EAAE,mBAEH,kBAAC,GAAD,CAAY2L,SAAS,gBAAgBpO,UAAU,0BAC9CyC,EAAE,mBAEH,kBAAC,GAAD,CAAY2L,SAAS,kBAAkBpO,UAAU,0BAChDyC,EAAE,wBAEH,kBAAC,GAAD,CAAY2L,SAAS,eAAepO,UAAU,0BAC7CyC,EAAE,mBAEH,kBAAC,GAAD,CAAY2L,SAAS,mBAAmBpO,UAAU,0BACjDyC,EAAE,wBAKX,kBAAC,GAAD,CAAY2L,SAAS,gBAAgBpO,UAAU,sBAC1CyC,EAAE,oBAEP,kBAAC,GAAD,CAAY2L,SAAS,gBAAgBpO,UAAU,wCAC9CyC,EAAE,qBADH,gCAEA,kBAAC,GAAD,CAAY2L,SAAS,eAAepO,UAAU,wCAC7CyC,EAAE,mBAEH,kBAAC,GAAD,CAAY2L,SAAS,YAAYpO,UAAU,wCAC1CyC,EAAE,gBAEH,kBAAC,GAAD,CAAY2L,SAAS,WAAWpO,UAAU,wCACzCyC,EAAE,oBAGH,yBAAKlC,GAAG,kBAAkBP,UAAU,uCAChC,kBAAC,GAAD,CAAYoO,SAAS,YAAYpO,UAAU,2BAC1CyC,EAAE,yBAYf,yBAAKlC,GAAG,mBAAmBP,UAAU,wCACjC,kBAAC,GAAD,CAAYoO,SAAS,YAAYpO,UAAU,2BAC1CyC,EAAE,uBAKP,yBAAMzC,UAAU,+CAChB,yBAAMkH,MAAO,CAAC,QAAU,OAAQlH,UAAU,wCAC9B,4BAAQkH,MAAO,CAAC,mBAAmB,cAAe,MAAQ,QAAQ,QAAU,QAASiH,QAASsB,EAAgBzD,MAAM,MAApH,OAEJ,yBAAM9E,MAAO,CAAC,QAAU,OAAQlH,UAAU,wCACtC,4BAAQkH,MAAO,CAAC,mBAAmB,cAAe,MAAQ,QAAQ,QAAU,QAASiH,QAASsB,EAAgBzD,MAAM,MAApH,YCjJnB6E,I,OAAiB,kBAC1B,oCACI,kBAAC,GAAD,MACA,kBAAC,GAAD,MACA,kBAAC,EAAD,MACA,kBAAC,EAAD,MACA,kBAAC,EAAD,MAGA,kBAAC,iBAAD,CAAgBC,OAAQ,CAAC,CACrBC,MAAO,yBACPC,OAAQ,OAGZ,kBAAC,EAAD,MACA,kBAAC,EAAD,MACA,kBAAC,EAAD,MAGA,kBAAC,iBAAD,CAAgBF,OAAQ,CACpB,CACIC,MAAO,wBACPC,OAAQ,OAIhB,kBAAC,EAAD,MAGA,kBAAC,iBAAD,CAAgBF,OAAQ,CACpB,CACIC,MAAO,6BACPC,OAAQ,OAIhB,kBAAC,EAAD,MACA,kBAAC,EAAD,MACA,kBAAC,EAAD,MACA,kBAAC,EAAD,MAtCJ,IAuCI,kBAAC,GAAD,MAvCJ,IAwCI,kBAAC,GAAD,MACA,kBAAC,GAAD,SCtDKC,I,cAAgB,kBACzB,kBAAC,mBAAD,KACI,kBAAC,IAAD,KACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAOC,OAAK,EAAC7P,KAAK,IAAI8P,UAAWN,KACjC,kBAAC,IAAD,CAAOxP,KAAK,IAAI8P,UAAWpR,SCT3CqR,IAASC,OAAO,kBAAC,GAAD,MAASxK,SAASJ,eAAe,W","file":"static/js/main.6853a172.chunk.js","sourcesContent":["import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Alert } from 'react-bootstrap';\r\n\r\nexport const Error: React.FC = () => (\r\n
\r\n \r\n Что-то пошло не так :(\r\n

\r\n Попробуйте еще раз или напишите нам.\r\n

\r\n
\r\n
\r\n);\r\n","import React from 'react';\r\n\r\nimport './styles.scss';\r\n\r\n// 1 экран - видео и логотип\r\nexport const MainVideo: React.FC = () => (\r\n
\r\n
\r\n);\r\n","import React from 'react';\r\nimport { Container } from 'react-bootstrap';\r\n\r\nimport './styles.scss';\r\n\r\ntype Props = Readonly<{\r\n id: string;\r\n color?: string;\r\n title?: string;\r\n fluid?: boolean;\r\n wrapper?: boolean;\r\n children: JSX.Element[] | JSX.Element;\r\n}>;\r\n\r\nexport const Section: React.FC = ({ id, color, title, fluid, wrapper, children }) => (\r\n
\r\n \r\n {title ? (\r\n <>\r\n

{title}

\r\n {children}\r\n \r\n ) : <>{children}}\r\n
\r\n
\r\n);\r\n","import React from 'react';\r\n\r\ntype Props = Readonly<{\r\n path: string;\r\n className: string\r\n}>;\r\n\r\nexport const ImageItem: React.FC = ({ path, className }) => (\r\n
\r\n \r\n
\r\n);\r\n","import React from 'react';\r\nimport { Carousel } from 'react-bootstrap';\r\nimport { ImageItem } from '../../../image-item';\r\n\r\nimport './styles.scss';\r\n\r\ntype Props = Readonly<{\r\n path: string; // Путь до изображения\r\n title: string; // Заголовок\r\n description: string; // Описание\r\n info: string; // Служебное (информация о проекте)\r\n className?: string; // Чтобы классы передались от карусели до слайдов, не используется напрямую\r\n}>;\r\n\r\n// Компонент элемента карусели для проектов\r\nexport const ProjectCarouselItem: React.FC = ({ path, title, description, info, className }) => (\r\n \r\n
\r\n \r\n
\r\n

{title}

\r\n

{description}

\r\n

{info}

\r\n
\r\n
\r\n
\r\n);\r\n","export const appId = '1329011377289870';\r\nexport const pageId = '1476834779292911';\r\nexport const access_token = 'EAAS4upMLuo4BANeSyT0U5KQ7627tdSZAdsAHT5B505CtTI4BmatQz34s0aG0YibQrjY12RfnZBlfGxoLa50r2mzJLGkbmZCS41Do9AxpSZCglzrXHHjxMhZC2AaSEUscf9b2w8Yi3PZAZAM0n7yOrozOBEiI6AARSZCYFQpbcNnaCwsaumxupe83';\r\n\r\nexport const ClientsLogo: Readonly = [\r\n '/images/clients/sberbank.png',\r\n '/images/clients/microsoft.png',\r\n '/images/clients/vtb.png',\r\n '/images/clients/mgts.png',\r\n '/images/clients/vsk.png',\r\n '/images/clients/sochi2014.png',\r\n '/images/clients/toyota.png',\r\n '/images/clients/lexus.png',\r\n '/images/clients/severstal.png',\r\n '/images/clients/gtnn.png',\r\n '/images/clients/pf-mgu.png',\r\n '/images/clients/nnobl.png',\r\n '/images/clients/cbrf.png',\r\n '/images/clients/sgm.png',\r\n '/images/clients/tnl.png',\r\n '/images/clients/mvideo.png',\r\n '/images/clients/alfabank.png',\r\n '/images/clients/x5retail.png',\r\n '/images/clients/pyatyorochka.png',\r\n '/images/clients/perekryostok.png'\r\n];\r\n\r\ntype ProjectDescription = Readonly<{\r\n path: string;\r\n title: string;\r\n description: string;\r\n info: string;\r\n}>;\r\n\r\ntype ReviewDescription = Readonly<{\r\n path: string;\r\n description: string;\r\n person: string;\r\n position: string;\r\n}>;\r\n\r\ntype Description = Readonly<{\r\n path?: string;\r\n title?: string|any;\r\n lines?: string[];\r\n}>;\r\n\r\nexport const ReviewsInfo: Readonly = [\r\n {\r\n path: '/images/reviews/client2.png',\r\n description: 'reviews.client2.description',\r\n person: 'reviews.client2.person',\r\n position: 'reviews.client2.position'\r\n },\r\n {\r\n path: '/images/reviews/client1.png',\r\n description: 'reviews.client1.description',\r\n person: 'reviews.client1.person',\r\n position: 'reviews.client1.position'\r\n }\r\n]\r\n\r\nexport const ProjectsInfo: Readonly = [\r\n {\r\n path: '/images/projects/thin-client.png',\r\n title: 'last-projects.sber-irm.title',\r\n description: 'last-projects.sber-irm.description',\r\n info: 'last-projects.sber-irm.info'\r\n },\r\n {\r\n path: '/images/projects/irmview.png',\r\n title: 'last-projects.thic.title',\r\n description: 'last-projects.irmview.description',\r\n info: 'last-projects.sber-irm.info'\r\n },\r\n {\r\n path: '/images/projects/thic.png',\r\n title: 'last-projects.thic.title',\r\n description: 'last-projects.thic.description',\r\n info: 'last-projects.sber-irm.info'\r\n },\r\n {\r\n path: '/images/projects/admin.png',\r\n title: 'last-projects.admin.title',\r\n description: 'last-projects.admin.description',\r\n info: 'last-projects.sber-irm.info'\r\n },\r\n {\r\n path: '/images/projects/alpina.png',\r\n title: 'last-projects.alpina.title',\r\n description: 'last-projects.alpina.description',\r\n info: 'last-projects.alpina.info'\r\n },\r\n\r\n {\r\n path: '/images/projects/talents.png',\r\n title: 'last-projects.talents.title',\r\n description: 'last-projects.talents.description',\r\n info: 'last-projects.talents.info'\r\n },\r\n {\r\n path: '/images/projects/sbatm.png',\r\n title: 'last-projects.sbatm.title',\r\n description: 'last-projects.sbatm.description',\r\n info: 'last-projects.sbatm.info'\r\n },\r\n {\r\n path: '/images/projects/mgts.png',\r\n title: 'last-projects.mgts.title',\r\n description: 'last-projects.mgts.description',\r\n info: 'last-projects.mgts.info'\r\n },\r\n {\r\n path: '/images/projects/severstal.png',\r\n title: 'last-projects.severstal.title',\r\n description: 'last-projects.severstal.description',\r\n info: 'last-projects.severstal.info'\r\n },\r\n {\r\n path: '/images/projects/market.png',\r\n title: 'last-projects.market.title',\r\n description: 'last-projects.market.description',\r\n info: 'last-projects.market.info'\r\n }\r\n];\r\n\r\nexport const DevelopingInfo: Readonly = [\r\n {\r\n path: '/images/features/fullcycle.png',\r\n title: 'developing-info.fullcycle.title',\r\n lines: [\r\n 'developing-info.fullcycle.lines.first',\r\n 'developing-info.fullcycle.lines.second',\r\n 'developing-info.fullcycle.lines.third'\r\n ]\r\n },\r\n {\r\n path: '/images/features/tech.png',\r\n title: 'developing-info.tech.title',\r\n lines: [\r\n 'developing-info.tech.lines.first',\r\n 'developing-info.tech.lines.second',\r\n 'developing-info.tech.lines.third'\r\n ]\r\n },\r\n {\r\n path: '/images/features/effective.png',\r\n title: 'developing-info.effective.title',\r\n lines: [\r\n 'developing-info.effective.lines.first',\r\n 'developing-info.effective.lines.second',\r\n 'developing-info.effective.lines.third',\r\n 'developing-info.effective.lines.fourth'\r\n\r\n ]\r\n }\r\n];\r\n\r\nexport const ServicesInfo: Readonly = [\r\n {\r\n path: '/images/features/development.png',\r\n title: 'services.development.title',\r\n lines: [\r\n 'services.development.first',\r\n 'services.development.second',\r\n 'services.development.third'\r\n ]\r\n },\r\n {\r\n path: '/images/features/migration.png',\r\n title: 'services.migration.title',\r\n lines: [\r\n 'services.migration.first',\r\n 'services.migration.second',\r\n 'services.migration.third'\r\n ]\r\n },\r\n {\r\n path: '/images/features/cloud.png',\r\n title: 'services.cloud.title',\r\n lines: [\r\n 'services.cloud.first',\r\n 'services.cloud.second',\r\n 'services.cloud.third'\r\n ]\r\n },\r\n {\r\n path: '/images/features/point.png',\r\n title: 'services.point.title',\r\n lines: [\r\n 'services.point.first',\r\n 'services.point.second',\r\n 'services.point.third',\r\n 'services.point.fourth'\r\n ]\r\n }\r\n];\r\n\r\nexport const ProtectionInfo: Readonly = [\r\n {\r\n path: '/images/features/fullcycle.png',\r\n title: 'protect.fullcycle.title',\r\n lines: [\r\n 'protect.fullcycle.first',\r\n 'protect.fullcycle.second'\r\n ]\r\n },\r\n {\r\n path: '/images/features/tech.png',\r\n title: 'protect.tech.title',\r\n lines: [\r\n 'protect.tech.first'\r\n ]\r\n },\r\n {\r\n path: '/images/features/effective.png',\r\n title: 'protect.effective.title',\r\n lines: [\r\n 'protect.effective.first'\r\n ]\r\n }\r\n];\r\n\r\nexport const SupportInfo: Readonly = [\r\n {\r\n path: '/images/features/24x7.png',\r\n title: 'support.alltime.title',\r\n lines: [\r\n 'support.alltime.first',\r\n 'support.alltime.second',\r\n 'support.alltime.third',\r\n 'support.alltime.fourth'\r\n ]\r\n },\r\n {\r\n path: '/images/features/updates.png',\r\n title: 'support.updates.title',\r\n lines: [\r\n 'support.updates.first',\r\n 'support.updates.second',\r\n 'support.updates.third'\r\n ]\r\n },\r\n {\r\n path: '/images/features/cost.png',\r\n title: 'support.cost.title',\r\n lines: [\r\n 'support.cost.first',\r\n 'support.cost.second'\r\n ]\r\n },\r\n {\r\n path: '/images/features/aggreement.png',\r\n title: 'support.aggreement.title',\r\n lines: [\r\n 'support.aggreement.first',\r\n 'support.aggreement.second',\r\n 'support.aggreement.third'\r\n ]\r\n }\r\n];\r\n\r\nexport const OutstaffingInfo: Readonly = [\r\n {\r\n title: 'outstaffing.title1'\r\n },\r\n {\r\n title: 'outstaffing.title2'\r\n },\r\n {\r\n title: 'outstaffing.title3'\r\n }\r\n];\r\n\r\nexport const BenefitsInfo: Readonly = [\r\n {\r\n path: '/images/features/tools.png',\r\n title: 'benefits.tools.title',\r\n lines: [\r\n 'benefits.tools.first'\r\n ]\r\n },\r\n {\r\n path: '/images/features/wide.png',\r\n title: 'benefits.wide.title',\r\n lines: [\r\n 'benefits.wide.first'\r\n ]\r\n },\r\n {\r\n path: '/images/features/areas.png',\r\n title: 'benefits.areas.title',\r\n lines: [\r\n 'benefits.areas.first'\r\n ]\r\n },\r\n {\r\n path: '/images/features/team.png',\r\n title: 'benefits.team.title',\r\n lines: [\r\n 'benefits.team.first'\r\n ]\r\n },\r\n {\r\n path: '/images/features/mspartner.png',\r\n title: 'benefits.mspartner.title',\r\n lines: [\r\n 'benefits.mspartner.first'\r\n ]\r\n },\r\n {\r\n path: '/images/features/yapartner.png',\r\n title: 'benefits.yapartner.title',\r\n lines: [\r\n 'benefits.yapartner.first'\r\n ]\r\n }\r\n];\r\n","import React from 'react';\r\nimport { Carousel } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { ProjectCarouselItem } from './components/projects-carousel-item';\r\nimport { ProjectsInfo } from '../../common';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\n// Экран \"Несколько наших последних проектов\"\r\nexport const Projects: React.FC = () => {\r\n const { t } = useTranslation();\r\n\r\n\r\n return(\r\n \r\n \r\n {ProjectsInfo.map((item, key) => (\r\n \r\n ))}\r\n \r\n\r\n )\r\n};\r\n","import React from 'react';\r\nimport { Col } from 'react-bootstrap';\r\nimport { ImageItem } from '../image-item';\r\n\r\ntype Props = Readonly<{\r\n path?: string; // Путь до изображения\r\n title?: string; // Заголовок\r\n md?: number; // Свойство md bootstrap\r\n sm?: number; // Свойство sm bootstrap\r\n xs?: number; // Свойство xs bootstrap\r\n chidren?: JSX.Element[] | JSX.Element; // Содержимое (строки/lines)\r\n imageClass?: string;\r\n titleClass?: string;\r\n}>;\r\n\r\n// Общий элемент описания для большинства экранов\r\nexport const DescriptionItem: React.FC = ({ path, title, md, sm, xs, children, imageClass, titleClass }) => (\r\n \r\n {path && imageClass && (\r\n \r\n )}\r\n\r\n {title && (\r\n

{title}

\r\n )}\r\n {children}\r\n \r\n);\r\n","import React from 'react';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { DescriptionItem } from '../description-item';\r\nimport { ClientsLogo } from '../../common';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\n// Экран \"Наши клиенты\"\r\nexport const Clients: React.FC = () => {\r\n \r\n const { t } = useTranslation();\r\n return( \r\n \r\n {ClientsLogo.map((item, key) => (\r\n \r\n ))}\r\n \r\n )\r\n\r\n \r\n };\r\n","import React from 'react';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { DescriptionItem } from '../description-item';\r\nimport { DevelopingInfo } from '../../common';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\n// Экран \"Разработка заказного программного обеспечения\"\r\nexport const Developing: React.FC = () => {\r\n const { t } = useTranslation();\r\n\r\n\r\n return( \r\n \r\n \r\n {DevelopingInfo.map((item, key) => (\r\n \r\n
    \r\n {item.lines!.map((line, key) => (\r\n
  • {t(line)}
  • \r\n ))}\r\n
\r\n \r\n ))}\r\n
\r\n \r\n \r\n ) };\r\n","import React from 'react';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { DescriptionItem } from '../description-item';\r\nimport { ServicesInfo } from '../../common';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\n// Экран \"Корпоративные порталы\"\r\nexport const Services: React.FC = () => {\r\n const { t } = useTranslation();\r\n\r\n\r\n return(\r\n \r\n \r\n {ServicesInfo.map((item, key) => (\r\n \r\n
    \r\n {item.lines!.map((line, key) => (\r\n
  • {t(line)}
  • \r\n ))}\r\n
\r\n \r\n ))}\r\n
\r\n \r\n)};\r\n","import React from 'react';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { DescriptionItem } from '../description-item';\r\nimport { ProtectionInfo } from '../../common';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport const Protection: React.FC = () => {\r\n const { t } = useTranslation();\r\n\r\n return(\r\n \r\n \r\n {ProtectionInfo.map((item, key) => (\r\n \r\n
    \r\n {item.lines!.map((line, key) => (\r\n
  • {t(line)}
  • \r\n ))}\r\n
\r\n \r\n ))}\r\n
\r\n \r\n )};\r\n","import React from 'react';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { DescriptionItem } from '../description-item';\r\nimport { SupportInfo } from '../../common';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n// Экран \"Поддержка и сопровождение\"\r\nexport const Support: React.FC = () => {\r\n const { t } = useTranslation();\r\n\r\n\r\n return(\r\n \r\n \r\n {SupportInfo.map((item, key) => (\r\n \r\n
    \r\n {item.lines!.map((line, key) => (\r\n
  • {t(line)}
  • \r\n ))}\r\n
\r\n \r\n ))}\r\n
\r\n \r\n)};\r\n","import React from 'react';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { DescriptionItem } from '../description-item';\r\nimport { OutstaffingInfo } from '../../common';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport './styles.scss';\r\n\r\n// Экран \"Аутстаффинг\"\r\nexport const Outstaffing: React.FC = () => {\r\n\r\n const { t } = useTranslation();\r\n\r\nreturn(\r\n \r\n \r\n
\r\n \"pic\"/\r\n
\r\n
\r\n \r\n {OutstaffingInfo.map((item, key) => (\r\n \r\n {item.lines &&\r\n
    \r\n {item.lines!.map((line, key) => (\r\n
  • {t(line)}
  • \r\n ))}\r\n
\r\n }\r\n \r\n ))}\r\n
\r\n \r\n
    \r\n
  • {t('outstaffing.li1')}
  • \r\n
  • {t('outstaffing.li2')}
  • \r\n
  • {t('outstaffing.li3')}
  • \r\n
\r\n
\r\n \r\n)};\r\n","import React from 'react';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { DescriptionItem } from '../description-item';\r\nimport { BenefitsInfo } from '../../common';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n// Экран \"Преимущества работы с нами\"\r\nexport const Benefits: React.FC = () => {\r\n const { t } = useTranslation();\r\n\r\n\r\n return(\r\n \r\n \r\n {BenefitsInfo.map((item, key) => (\r\n \r\n {item.lines &&\r\n <>\r\n {item.lines!.map((line, key) => (\r\n

{t(line)}

\r\n ))}\r\n \r\n }\r\n \r\n ))}\r\n
\r\n \r\n)};\r\n","import React from 'react';\r\nimport { Row, Col, Media } from 'react-bootstrap';\r\nimport { Section } from '../section';\r\nimport { ImageItem } from '../image-item';\r\nimport { ReviewsInfo } from '../../common';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport './styles.scss'\r\n\r\n// Экран \"Отзывы клиентов о нашей работе\"\r\nexport const Reviews: React.FC = () => {\r\n\r\nconst {t} = useTranslation()\r\n return(\r\n \r\n \r\n {ReviewsInfo.map((item, key) => (\r\n \r\n \r\n \r\n \r\n

{t(item.description)}

\r\n
\r\n {t(item.person)},  \r\n {t(item.position)}\r\n
\r\n
\r\n
\r\n \r\n ))}\r\n
\r\n \r\n)};\r\n","export const request = (method, url, data, withFile) => {\r\n const headers = new Headers();\r\n const options = { method };\r\n\r\n if (!withFile) {\r\n headers.append('Content-Type', 'application/json; charset=utf-8');\r\n options.headers = headers;\r\n }\r\n\r\n if (data) {\r\n if (withFile) {\r\n options.body = data;\r\n } else {\r\n options.body = JSON.stringify(data);\r\n }\r\n }\r\n\r\n return fetch(url, options)\r\n .then(async (res) => {\r\n if (res.ok) {\r\n return await res.json();\r\n }\r\n\r\n return Promise.reject();\r\n })\r\n .catch((err) => Promise.reject(err));\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Carousel } from 'react-bootstrap';\r\nimport $ from 'jquery';\r\nimport { appId, pageId, access_token } from '../../../../common';\r\nimport { request } from '../../../../api';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\nexport const FacebookPosts = () => {\r\n const [postIds, setPostIds] = useState([]);\r\n const {t} = useTranslation()\r\n\r\n\r\n const loadLoginSdk = () => {\r\n window.fbAsyncInit = () => {\r\n window.FB.init({\r\n appId,\r\n xfbml: true,\r\n version: 'v7.0'\r\n });\r\n };\r\n\r\n console.info('Loading FB SDK');\r\n\r\n (function(d, s, id) {\r\n let js, fjs = d.getElementsByTagName(s)[0];\r\n if (d.getElementById(id)) {\r\n return;\r\n }\r\n\r\n js = d.createElement(s); js.id = id;\r\n js.src = \"https://connect.facebook.net/ru_RU/sdk.js\";\r\n fjs.parentNode.insertBefore(js, fjs);\r\n console.info('FB SDK loaded');\r\n }(document, 'script', 'facebook-jssdk'));\r\n }\r\n\r\n useEffect(() => {\r\n loadLoginSdk();\r\n request('GET', `https://graph.facebook.com/v7.0/${pageId}/feed?access_token=${access_token}&fields=id&format=json&limit=5&method=get`)\r\n .then((res) => {\r\n let ids = [];\r\n res.data.map((item) => ids.push(item.id.split('_')[1]));\r\n setPostIds(ids);\r\n\r\n // Настраиваем предварительно величины для плавного изменения контейнера, а, затем, возвращаем отображение как было\r\n // (Bootstrap Carousel просто не умеет в плавное изменение высоты)\r\n let carousel = document.getElementById('news-carousel');\r\n carousel.style.opacity = 0;\r\n\r\n let slides = carousel.children[1].children;\r\n for (let i = 0; i < slides.length; i++) {\r\n slides[i].style.display = 'block';\r\n }\r\n\r\n // После рендеринга iframe'ов, выставляем положение высот и возвращаем отображение как было\r\n // Локально у меня не всегда работает корректно из-за выжранных ресурсов\r\n setTimeout(() => {\r\n // Развернем ссылку \"еще\", чтобы размер был более точный\r\n for (let seeMore of document.getElementsByClassName('see_more_link_inner')) {\r\n seeMore.click();\r\n }\r\n\r\n for (let i = 0; i < slides.length; i++) {\r\n slides[i].setAttribute('frame-height', slides[i].getBoundingClientRect().height + 23);\r\n slides[i].style.removeProperty('display');\r\n }\r\n\r\n carousel.style.opacity = 1;\r\n }, 8000);\r\n })\r\n .catch((err) => console.error(err));\r\n }, []);\r\n\r\n return postIds.length !== 0 ? (\r\n {\r\n let container = document.getElementById('news-carousel').children[1];\r\n let nextHeight = container.children[slideNumber].getAttribute('frame-height');\r\n $(container).animate({ height: nextHeight }, 1000);\r\n }\r\n }>\r\n {postIds.map((item, key) => (\r\n \r\n
\r\n \r\n
\r\n ))}\r\n \r\n ) :
;\r\n};\r\n","import React from 'react';\r\nimport { Section } from '../section';\r\nimport { FacebookPosts } from './components/facebook-posts';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\nimport './styles.scss';\r\n\r\n// Экран \"Последние новости\"\r\nexport const News: React.FC = () => {\r\n const {t} = useTranslation()\r\nreturn(\r\n \r\n \r\n \r\n)};\r\n","import React, { useState, ChangeEvent } from 'react';\r\nimport { Form, FormGroup, Row, Col, Button } from 'react-bootstrap';\r\nimport ReCaptcha from '@matt-block/react-recaptcha-v2';\r\nimport { request } from '../../../../api';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport './styles.scss';\r\n\r\n// Компонент формы для обратной связи\r\nexport const FeedbackForm: React.FC = () => {\r\n\r\n const { t } = useTranslation();\r\n\r\n const [validated, setValidated] = useState(false);\r\n const [sizeExceeded, setSizeExceeded] = useState(false);\r\n const [captchaPassed, setCaptchaPassed] = useState(false);\r\n const [captchaResponse, setCaptchaResponse] = useState('');\r\n\r\n // Другого пути, судя по документациям React-Bootstrap и React, нет\r\n const [name, setName] = useState('');\r\n const [email, setEmail] = useState('');\r\n const [phone, setPhone] = useState('');\r\n const [message, setMessage] = useState('');\r\n const [file, setFile] = useState(null);\r\n\r\n // Предварительная валидация полей и отправка сообщения в случае коррректности\r\n const handleSubmit = (e: any) => {\r\n e.preventDefault();\r\n\r\n // Для Form.File, видимо, валидацию нормально не завезли\r\n if (sizeExceeded) {\r\n document.getElementsByClassName('form-file')[0].classList.remove('is-valid');\r\n document.getElementsByClassName('form-file')[0].classList.add('is-invalid');\r\n } else {\r\n document.getElementsByClassName('form-file')[0].classList.remove('is-invalid');\r\n document.getElementsByClassName('form-file')[0].classList.add('is-valid');\r\n }\r\n\r\n // Для reCAPTCHA придется делать тоже вручную\r\n if (captchaPassed) {\r\n document.getElementsByClassName('g-recaptcha')[0].classList.remove('is-invalid');\r\n } else {\r\n document.getElementsByClassName('g-recaptcha')[0].classList.add('is-invalid');\r\n }\r\n\r\n let isValid = e.currentTarget.checkValidity() && captchaPassed && ((file && !sizeExceeded) || !file);\r\n if (!isValid) {\r\n setValidated(false);\r\n e.stopPropagation();\r\n } else {\r\n let button = document.getElementsByTagName('button')[0];\r\n button.disabled = true;\r\n button.classList.add('active');\r\n\r\n // Подготавливаем набор данных с формы и делаем запрос\r\n let formData = new FormData();\r\n formData.append('FullName', name);\r\n formData.append('EMail', email);\r\n formData.append('Phone', phone);\r\n formData.append('Text', message);\r\n formData.append('Captcha', captchaResponse);\r\n if (file) {\r\n formData.append('File', file!, file.name);\r\n }\r\n\r\n const response = request('POST', 'feedback', formData, true);\r\n response.then((data) => {\r\n if (data) {\r\n let addClassName = data.hasErrors ? 'alert-danger' : 'alert-success';\r\n let removeClassName = data.hasErrors ? 'alert-success' : 'alert-danger';\r\n let resultDiv = document.getElementsByClassName('result')[0] as HTMLElement;\r\n resultDiv.innerHTML = data.message;\r\n resultDiv.classList.remove(removeClassName);\r\n resultDiv.classList.add(addClassName);\r\n resultDiv.style.display = 'block';\r\n }\r\n\r\n button.disabled = false;\r\n button.classList.remove('active');\r\n }).catch(() => {\r\n button.disabled = false;\r\n button.classList.remove('active');\r\n let resultDiv = document.getElementsByClassName('result')[0] as HTMLElement;\r\n resultDiv.innerHTML = 'Что-то пошло не так :(';\r\n resultDiv.classList.remove('alert-success');\r\n resultDiv.classList.add('alert-danger');\r\n resultDiv.style.display = 'block';\r\n });\r\n }\r\n\r\n setValidated(true);\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {t('feedback.form.name')}\r\n \r\n \r\n ) => setName(e.currentTarget.value)}\r\n required\r\n />\r\n {t('feedback.form.not-empty')}\r\n \r\n \r\n \r\n \r\n E-mail\r\n \r\n \r\n ) => setEmail(e.currentTarget.value)}\r\n required\r\n />\r\n {t('feedback.form.enter-email-example')}\r\n \r\n \r\n \r\n \r\n {t('feedback.form.phone-number')}\r\n \r\n \r\n ) => setPhone(e.currentTarget.value)}\r\n required\r\n />\r\n {t('feedback.form.enter-phone-example')}\r\n \r\n \r\n \r\n \r\n {t('feedback.form.message')}\r\n \r\n \r\n ) => setMessage(e.currentTarget.value)}\r\n required\r\n />\r\n {t('feedback.form.not-empty')}\r\n \r\n \r\n \r\n \r\n {t('feedback.form.attach')}  \r\n {t('feedback.form.file-limit')}\r\n \r\n \r\n ) => {\r\n if (e.currentTarget.files!.length !== 0) {\r\n setSizeExceeded(e.currentTarget.files![0].size > 20971520);\r\n setFile(e.currentTarget.files![0])\r\n } else {\r\n setSizeExceeded(false);\r\n }\r\n }}\r\n />\r\n Недопустимый размер файла. Принимаются файлы до 20 МБ.\r\n \r\n \r\n \r\n \r\n \r\n {\r\n setCaptchaResponse(result);\r\n setCaptchaPassed(true);\r\n }}\r\n />\r\n {t('feedback.form.recaptcha-error')}\r\n \r\n \r\n \r\n \r\n \r\n {t('feedback.form.call-us')}\r\n +7 (495) 690 91 79\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { Section } from '../section';\r\nimport { FeedbackForm } from './components/feedback-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\n// Экран \"Хотите реализовать проект?\"\r\nexport const Feedback: React.FC = () => {\r\n const {t} = useTranslation()\r\n\r\nreturn(\r\n\r\n \r\n

{t('feedback.header')}

\r\n \r\n \r\n)};\r\n","import React from 'react';\r\n\r\nimport './styles.scss';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\n// Компонент для импортирования Yandex-карт. Пакет react-yandex-maps накладывает свои ограничения, поэтому такая реализация\r\nexport const YMap = () => {\r\n const { t } = useTranslation();\r\n\r\n\r\n return(\r\n <>\r\n \r\n
\r\n \r\n \r\n )};\r\n","import React from 'react';\r\nimport { Section } from '../section';\r\nimport { YMap } from './components/ymap';\r\n\r\n// Экран с картой\r\nexport const Map: React.FC = () => (\r\n \r\n \r\n \r\n);\r\n","import React, { useEffect } from 'react';\r\nimport { useController } from 'react-scroll-parallax';\r\n\r\n// Кэширование для параллакс-эффекта\r\nexport const ParallaxCache: React.FC = () => {\r\n const { parallaxController } = useController();\r\n\r\n // Нужно, чтобы параллакс-эффект работал всегда, а не только когда страница изначально отображена сверху\r\n useEffect(() => {\r\n const handler = () => parallaxController.update();\r\n window.addEventListener('load', handler);\r\n return () => window.removeEventListener('load', handler);\r\n }, [parallaxController]);\r\n\r\n return null;\r\n};\r\n","import React from 'react';\r\n\r\nimport './styles.scss';\r\n\r\nexport const Footer: React.FC = () => (\r\n
\r\n
2008 - {new Date().getFullYear()} Шаресофт
\r\n
фото Picls
\r\n
\r\n);\r\n","import React from 'react';\r\nimport { elementScrollIntoView } from 'seamless-scroll-polyfill';\r\n\r\ntype Props = Readonly<{\r\n onClick?: () => void\r\n children: JSX.Element[] | JSX.Element; // То, нажатие на что будет активировать прокрутку\r\n selector: string; // Селектор элемента, к которому нужно прокручивать\r\n className?: string;\r\n}>;\r\n\r\n// Компонент плавной прокрутки к элементу с выбранным селектором\r\nexport const ScrollInto: React.FC = ({ onClick, children, selector, className }) => {\r\n const scrollIntoView = () => {\r\n const el = document.querySelector(selector);\r\n elementScrollIntoView(el!, { behavior: 'smooth' });\r\n if (onClick) {\r\n onClick();\r\n }\r\n }\r\n\r\n return (\r\n
{children}
\r\n );\r\n};\r\n","import i18n from 'i18next';\r\nimport { initReactI18next } from 'react-i18next';\r\n\r\ni18n.use(initReactI18next).init({\r\n fallbackLng: 'ru',\r\n lng: 'ru',\r\n resources: {\r\n en: {\r\n translations: require('./locales/en/translations.json')\r\n },\r\n ru: {\r\n translations: require('./locales/ru/translations.json')\r\n }\r\n },\r\n ns: ['translations'],\r\n defaultNS: 'translations'\r\n});\r\n\r\ni18n.languages = ['en', 'ru'];\r\n\r\nexport default i18n;","import React, { useState, useEffect } from 'react';\r\nimport { ScrollInto } from './components/scroll-into';\r\n\r\nimport './styles.scss';\r\n\r\nimport '../../i18n/config';\r\n\r\n\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\n\r\n// Навигация\r\nexport const Navbar = () => {\r\n const { t } = useTranslation();\r\n const { i18n } = useTranslation();\r\n\r\n\r\n const [position, setPosition] = useState(window.pageYOffset);\r\n\r\n \r\n function changeLanguage(e) {\r\n i18n.changeLanguage(e.target.value);\r\n }\r\n\r\n // Обработка прокрутки для смены типа navbar\r\n const handleScroll = () => setPosition(window.pageYOffset);\r\n\r\n // Обработка открытия dropdown\r\n const handleDropdownOpen = function () {\r\n this.classList.toggle('active');\r\n let dropdownContent = this.nextElementSibling;\r\n if (dropdownContent.style.maxHeight) {\r\n dropdownContent.style.maxHeight = null;\r\n dropdownContent.style.overflow = 'hidden';\r\n } else {\r\n dropdownContent.style.maxHeight = dropdownContent.scrollHeight + 'px';\r\n setTimeout(() => {\r\n dropdownContent.style.overflow = 'visible';\r\n }, 10);\r\n }\r\n }\r\n\r\n // Обработка случаев navbar при нажатии на другие части документа\r\n const handleDocumentClick = (e) => {\r\n // Нажатие на кнопку открытия-закрытия шторки\r\n // Инвертированное условие потому, что checked в проверяемом input выставляется уже ПОСЛЕ этого события click\r\n if (e.target.className === 'section-menu__button') {\r\n document.body.style.overflowY = !document.getElementById('menu-mobile').checked ? 'hidden' : 'scroll';\r\n }\r\n\r\n // Нажатие на элементы меню для перехода на разделы при открытой шторке закрывает шторку\r\n if ((e.target.classList[0] === 'menu__item' || // Элемент меню\r\n e.target.classList[0] === 'dropdown-content__item' || // Элемент выпадающего списка\r\n e.target.classList.contains('button--contacts') || // Кнопка \"Свяжитесь с нами\" в мобильном виде\r\n e.target.id === 'contacts-mobile') && // Элемент, где лежит кнопка \"Свяжитесь с нами\" в мобильном виде\r\n document.getElementById('menu-mobile').checked) { // Шторка отображается\r\n document.getElementById('menu-mobile').checked = false;\r\n document.body.style.overflowY = 'scroll';\r\n }\r\n\r\n // Если нажатие на dropdown, то обработка не требуется\r\n if (e.target.id === 'dropdown__label' || // Название \"Услуги\"\r\n e.target.tagName === 'path' || // Контейнер для SVG\r\n e.target.tagName === 'svg' || // SVG со стрелочкой\r\n e.target.className === 'dropdown__arrow-down') { // Сама стрелочка\r\n return;\r\n }\r\n\r\n // Если dropdown открыт, закрываем\r\n let content = document.getElementById('dropdown-content');\r\n if (content.style.maxHeight) {\r\n content.style.maxHeight = null;\r\n content.style.overflow = 'hidden';\r\n document.getElementById('dropdown__label').classList.remove('active');\r\n }\r\n }\r\n\r\n // Для смены вида navbar при прокрутке используем свойство scroll, а также настраиваем navbar\r\n useEffect(() => {\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n document.getElementById('dropdown__label').addEventListener('click', handleDropdownOpen);\r\n document.addEventListener('click', handleDocumentClick);\r\n }, [])\r\n\r\n return (\r\n
750 ? 'headerScroll' : ''}`}>\r\n
\r\n
\r\n \r\n \"Sharesoft\"\r\n \"Sharesoft\"\r\n \r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n {t('navbar.contact-us')}\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { ParallaxBanner } from 'react-scroll-parallax';\r\nimport {\r\n MainVideo,\r\n Projects,\r\n Clients,\r\n Developing,\r\n Services,\r\n Protection,\r\n Support,\r\n Outstaffing,\r\n Benefits,\r\n Reviews,\r\n News,\r\n Feedback,\r\n Map,\r\n ParallaxCache,\r\n Footer\r\n} from '../../components';\r\n\r\nimport { Navbar } from '../../components/navbar';\r\n\r\nimport './styles.scss';\r\n\r\nexport const Home: React.FC = () => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* Параллакс-изображение */}\r\n \r\n\r\n \r\n \r\n \r\n\r\n {/* Параллакс-изображение */}\r\n \r\n\r\n \r\n\r\n {/* Параллакс-изображение */}\r\n \r\n\r\n \r\n \r\n \r\n {/* TODO */}\r\n {/* TODO */}\r\n \r\n