{"version":3,"file":"static/chunks/pages/_site/[city]/internet/equipment-35131fdcf51c8435.js","mappings":"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","sources":["webpack://_N_E/?00f7","webpack://_N_E/./src/features/equipment/pageBlocks/BannerRoutersCardBlock/constants.ts","webpack://_N_E/./src/features/equipment/pageBlocks/BannerRoutersCardBlock/renderRouterCards.tsx","webpack://_N_E/./src/features/equipment/pageBlocks/BannerRoutersCardBlock/styled.ts","webpack://_N_E/./src/features/equipment/pageBlocks/BannerRoutersCardBlock/index.tsx","webpack://_N_E/./src/features/equipment/pageBlocks/BannerWithRoutersCard/styled.ts","webpack://_N_E/./src/features/equipment/pageBlocks/BannerWithRoutersCard/index.tsx","webpack://_N_E/./src/features/equipment/pageBlocks/CallBackFormRouters/styled.ts","webpack://_N_E/./src/features/equipment/pageBlocks/CallBackFormRouters/index.tsx","webpack://_N_E/./src/features/equipment/pageBlocks/Header/styled.ts","webpack://_N_E/./src/features/equipment/pageBlocks/Header/index.tsx","webpack://_N_E/./src/features/equipment/pageBlocks/RoutersBanners/styled.ts","webpack://_N_E/./src/features/equipment/data.tsx","webpack://_N_E/./src/features/equipment/pageBlocks/RoutersBanners/index.tsx","webpack://_N_E/./src/features/equipment/index.tsx","webpack://_N_E/./src/features/_layout/SeoScripts/stringFormatterSeoScript.tsx","webpack://_N_E/./src/features/equipment/getMinCostProduct.ts","webpack://_N_E/./pages/_site/[city]/internet/equipment/index.tsx","webpack://_N_E/./src/api/content/banners.ts","webpack://_N_E/./src/components/AdaptiveNukaCarousel/styled.ts","webpack://_N_E/./src/components/AdaptiveNukaCarousel/index.tsx","webpack://_N_E/./src/features/equipment/pageBlocks/Routers/styled.ts","webpack://_N_E/./src/features/equipment/pageBlocks/Routers/index.tsx","webpack://_N_E/./src/features/equipment/styled.ts","webpack://_N_E/./src/features/index/Banners/TopBanners/useGaBanner.tsx","webpack://_N_E/./src/features/internet/internet-represent/styled.ts","webpack://_N_E/./src/helpers/hooks/useProgressiveImage.tsx","webpack://_N_E/../../packages/api-domru/src/full-buy/v1/equipment/index.ts","webpack://_N_E/../../packages/do-request/src/error/customAxiosError.ts","webpack://_N_E/../../packages/shared/src/hooks/useOnceExecute.ts","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/DefaultArrow/styled.tsx","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/DefaultDots/styled.tsx","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/DefaultArrow/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/DefaultDots/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/styled.tsx","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/controls/baseControlsData.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/baseRadio/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/baseRadio/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/costs/Cost/format.ts","webpack://_N_E/../../packages/ui-react/src/components/costs/Cost/Cost.tsx","webpack://_N_E/../../packages/ui-react/src/components/costs/Cost/styled.tsx","webpack://_N_E/../../packages/ui-react/src/components/costs/Cost/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/costs/helpers/divideByThousand.ts","webpack://_N_E/../../packages/ui-react/src/components/typography/TextWrapper/index.ts","webpack://_N_E/../../packages/ui-react/src/experimental/purchase/cost/Cost/RubleSymbol.ts","webpack://_N_E/./static/images/defaultImageFallback.svg","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/DefaultArrow/arrow.svg"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_site/[city]/internet/equipment\",\n function () {\n return require(\"private-next-pages/_site/[city]/internet/equipment/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_site/[city]/internet/equipment\"])\n });\n }\n ","/**\n * Интервал между блоками в каруселе\n *\n * @name constants.CELL_SPACING_DATA\n * @type {Record}\n */\nexport const CELL_SPACING_DATA: Record = {\n desktop: 6,\n sDesktop: 2,\n};\n\n/**\n * Медиавыражения для определения соответствия документа определенному разрешению\n *\n * @name data.EMediaWidth\n * @type {enum}\n */\nexport enum EMediaWidth {\n desktop = '(min-width: 1601px)',\n sDesktop = '(max-width: 1567px)',\n laptop = '(max-width: 1279px)',\n}\n\n/**\n * Переломное разрешение для карусели (по нему определяется кол-во слайдов)\n *\n * @name constants.sDesktopMedia\n * @type {string}\n */\nexport const sDesktopMedia = '(min-width: 1280px)';\n\n/**\n * Минимальное кол-во карточек для создания карусели\n *\n * @name constants.needCountCarousel\n * @type {number}\n */\nexport const needCountCarousel = 3;\n\n/**\n * Минимальное кол-во карточек для создания карусели (Laptop)\n *\n * @name constants.needCountCarouselLaptop\n * @type {number}\n */\nexport const needCountCarouselLaptop = 2;\n\n/**\n * Один слайд\n *\n * @name constants.ONE_SLIDE\n * @type {number}\n */\nexport const ONE_SLIDE = 1;\n\n/**\n * Два слайда\n *\n * @name constants.TWO_SLIDES\n * @type {number}\n */\nexport const TWO_SLIDES = 2;\n\n/**\n * Атрибуты для тестирования\n *\n * @name constants.TEST_NAMES_ATTR\n * @type {{title: string, subTitle: string, carousel: string, routerCard: string, container: string}}\n */\nexport const TEST_NAMES_ATTR = {\n title: 'title',\n subTitle: 'subTitle',\n carousel: 'carousel',\n routerCard: 'router-card',\n container: 'container',\n};\n","import { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\n\nimport DeviceGridItem from '~/src/components/Equipment/internet/DeviceGridItem';\nimport { TEST_NAMES_ATTR } from '~/src/features/equipment/pageBlocks/BannerRoutersCardBlock/constants';\n\nexport const renderRouterCards = (routers: IEquipment[]) => {\n return routers.map(router => (\n \n ));\n};\n","import styled from 'styled-components';\n\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 { breakPoints } from '~/src/constants/breakpoints';\n\ninterface IContainer {\n backgroundImgPath: string,\n colorProp: string,\n needCarouselWrap: boolean,\n}\n\nexport const Container = styled.div`\n width: 100%;\n height: 432px;\n padding-top: 16px;\n background: url(${({ backgroundImgPath }) => backgroundImgPath}) left / cover no-repeat ;\n border-radius: ${BorderRadius.OuterBlockRadius};\n color: ${({ colorProp }) => colorProp};\n ${({ needCarouselWrap }) => needCarouselWrap ? '' : 'gap: 6px'};\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n padding-right: 10px;\n ${({ needCarouselWrap }) => needCarouselWrap ? '' : 'gap: 4px'};\n }\n\n @media (max-width: ${breakPoints.mobile}) {\n height: 628px;\n flex-direction: column;\n padding-right: 10px;\n padding-left: 10px;\n justify-content: flex-start;\n gap: 24px;\n }\n\n @media (max-width: ${wideBreakpoints.sMobile}) {\n margin-left: -8px;\n margin-right: -8px;\n align-items: center;\n }\n`;\n\nexport const Wrapper = styled.div`\n gap: 24px;\n\n @media (max-width: ${breakPoints.desktop}) {\n gap: 32px;\n }\n`;\n\nexport const InfoBlock = styled.div<{ needCarouselWrap: boolean }>`\n width: 51%;\n ${({ needCarouselWrap }) => needCarouselWrap ? 'width: calc(51% + 6px)' : ''};\n height: fit-content;\n padding: 48px 60px 0 128px;\n gap: 7px;\n\n @media (max-width: ${breakPoints.desktop}) {\n padding: 24px 50px 0 40px;\n }\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n width: 45%;\n ${({ needCarouselWrap }) => needCarouselWrap ? 'width: calc(45% + 6px)' : ''};\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: 65%;\n ${({ needCarouselWrap }) => needCarouselWrap ? 'width: calc(65% + 6px)' : ''};\n padding-right: 90px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n width: calc(54% + 9px);\n ${({ needCarouselWrap }) => needCarouselWrap ? 'width: calc(55% + 6px)' : ''};\n padding-right: 80px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 100%;\n max-height: 160px;\n padding: 0 20px 0 14px;\n\n & + div {\n ${({ needCarouselWrap }) => needCarouselWrap ? '' : 'flex-basis: auto'};\n margin: 0;\n }\n }\n`;\n\nexport const Title = styled.div`\n ${FONTS.H2};\n\n @media (max-width: ${breakPoints.sDesktop}) {\n ${FONTS.H3};\n }\n\n @media (max-width: ${breakPoints.tablet}) {\n ${FONTS.H4};\n }\n\n @media (max-width: ${breakPoints.mobile}) {\n ${FONTS.H3};\n }\n`;\n\nexport const Text = styled.div`\n min-height: 63px;\n ${FONTS.M};\n\n @media (max-width: ${breakPoints.sDesktop}) {\n ${FONTS.S};\n }\n\n @media (max-width: ${breakPoints.tablet}) {\n ${FONTS.XS};\n }\n\n @media (max-width: ${breakPoints.mobile}) {\n min-height: fit-content;\n }\n`;\n\nexport const CardsBlock = styled.div`\n width: calc(49% - 6px);\n align-items: center;\n padding-right: 85px;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n width: calc(54% - 6px);\n padding-right: 0;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: calc(35% - 6px);\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n width: calc(45% - 6px);\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 304px;\n }\n`;\n\nexport const CardsBlockWrap = styled.div`\n width: 49%;\n`;\n\nexport const CardsBlockWrap2 = styled.div`\n width: 100%;\n`;\n","import React, { useMemo } from 'react';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport NukaCarousel from '@r1-frontend/ui-react/components/NukaCarousel';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { IBanner } from '~/src/api/content/banners';\nimport {\n CELL_SPACING_DATA,\n EMediaWidth,\n needCountCarousel,\n needCountCarouselLaptop,\n ONE_SLIDE,\n sDesktopMedia,\n TEST_NAMES_ATTR,\n TWO_SLIDES,\n} from '~/src/features/equipment/pageBlocks/BannerRoutersCardBlock/constants';\nimport { useGaBanner } from '~/src/features/index/Banners/TopBanners/useGaBanner';\n\nimport { renderRouterCards } from './renderRouterCards';\n\nimport * as ST from './styled';\n\ninterface IProps {\n bannerWithRouters: IBanner,\n}\n\nexport const BannerRoutersCardBlock = ({ bannerWithRouters }: IProps): JSX.Element | null => {\n const isSDesktopForCarousel = useMatchMedia(sDesktopMedia);\n const isSDesktop = useMatchMedia(EMediaWidth.sDesktop);\n const isLaptop = useMatchMedia(EMediaWidth.laptop);\n\n const {\n bannerInfo: { title, link, image_background, button_type, text_color, text, button_text },\n routers = [],\n } = bannerWithRouters;\n const routersCount = routers.length;\n\n const { onBannerClick } = useGaBanner('long', title, link);\n\n const needCarouselWrap = useMemo(() => {\n return (routersCount >= needCountCarousel) || (isLaptop && routersCount >= needCountCarouselLaptop);\n }, [isLaptop, routersCount]);\n\n const carouselCellSpacing = useMemo(() => isSDesktop ? CELL_SPACING_DATA.sDesktop : CELL_SPACING_DATA.desktop, [isSDesktop]);\n\n if (!routersCount) {\n return null;\n }\n\n return (\n \n \n {title}\n {text}\n \n {button_text}\n \n \n {needCarouselWrap\n ? \n \n {renderRouterCards(routers)}\n \n \n : renderRouterCards(routers)\n }\n \n );\n};\n","import styled from 'styled-components';\n\nimport { breakPoints } from '~/src/constants/breakpoints';\n\nexport const Wrapper = styled.div`\n gap: 24px;\n\n @media (max-width: ${breakPoints.desktop}) {\n gap: 32px;\n }\n`;\n","import { IBanner } from '~/src/api/content/banners';\nimport { BannerRoutersCardBlock } from '~/src/features/equipment/pageBlocks/BannerRoutersCardBlock';\n\nimport * as ST from './styled';\n\ninterface IProps {\n banners: IBanner[],\n}\n\nconst BannerWithRoutersCard = ({ banners }: IProps): JSX.Element => (\n \n {banners.map((banner) => (\n \n ))}\n \n);\n\nexport default BannerWithRoutersCard;\n","import { LazyLoadImage } from 'react-lazy-load-image-component';\nimport styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nimport { RequestFormPhone } from '~/src/components/RequestFormPhone';\n\nconst breakPoints = {\n tablet: '999px',\n};\n\nexport const Content = styled.div`\n display: flex;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n padding: 16px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background: ${COLORS.BgSecondary};\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n padding: 16px 12px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n padding: 16px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n padding: 8px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: column-reverse;\n padding: 16px;\n }\n`;\n\nexport const TextContent = styled.div`\n flex-direction: column;\n align-items: flex-start;\n width: 544px;\n margin-left: 112px;\n margin-right: 96px;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n margin-left: 38px;\n margin-right: 74px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: 345px;\n margin-left: 24px;\n margin-right: 22px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n width: 310px;\n margin-right: 14px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 100%;\n margin-left: 0;\n margin-right: 0;\n }\n`;\n\nexport const Title = styled.div`\n ${FONTS.H2};\n margin-bottom: 16px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.H3};\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.H4};\n margin-bottom: 8px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H3};\n }\n`;\n\nexport const Subtitle = styled.div`\n ${FONTS.S};\n max-width: 446px;\n margin-bottom: 32px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin-bottom: 8px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.XS};\n margin-bottom: 24px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.S};\n }\n`;\n\nexport const SRequestFormPhone = styled(RequestFormPhone)`\n & > div {\n grid-template-columns: auto;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n grid-template-areas:\n 'input button'\n 'checkbox checkbox';\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n grid-template-areas:\n 'input'\n 'checkbox'\n 'margin'\n 'button';\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n display: flex;\n }\n }\n\n & > div > button {\n width: 260px;\n margin-left: 16px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin-left: 0;\n width: 100%;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n order: 3;\n margin-top: 18px;\n }\n }\n\n & > div > div > input {\n width: 260px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: 100%;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n order: 1;\n }\n }\n\n > div > div {\n > button {\n @media (max-width: ${breakPoints.tablet}) {\n width: 100%;\n }\n }\n }\n`;\n\nexport const ImgContent = styled.div`\n width: 720px;\n height: auto;\n border-radius: 16px;\n overflow: hidden;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n width: 526px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n width: 372px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: auto;\n margin-bottom: 24px;\n }\n`;\n\nexport const Image = styled(LazyLoadImage)`\n width: 100%;\n height: 311px;\n object-fit: cover;\n object-position: center;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n height: 291px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n height: 170px;\n }\n`;\n","import React, { useCallback } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport {\n ERequestStatus,\n requestByConnection,\n ResponseDto,\n} from '@r1-frontend/api-domru/api-request/v1/user/request-by-connection';\n\nimport WebpImage from '@r1-frontend/ui-react/components/WebpImage';\nimport { ACTIONS, CATEGORIES, EVENTS } from '@r1-frontend/shared/constants/analytics';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\nimport { EProductsId } from '@r1-frontend/shared/types/EProductsId';\n\nimport { ISubmitParams } from '~/src/components/RequestFormPhone';\nimport { dataLayerForCBPhonePush, divideUsersGA } from '~/src/helpers/eventsForDataLayer';\nimport { IDataLayerPushUid } from '~/src/helpers/eventsForDataLayer';\nimport { selectCsrf } from '~/src/store/selectors/auth/selectCsrf';\n\nimport * as ST from './styled';\n\nexport type { ISubmitParams };\n\nenum EMediaWidth {\n mobile = '(max-width: 1365px)',\n}\n\nexport interface ICallBackFormRoutersProps {\n isAuth: boolean,\n agreement?: number,\n}\n\nconst CallBackFormRouters = ({ isAuth, agreement }: ICallBackFormRoutersProps): JSX.Element => {\n const isMobile = useMatchMedia(EMediaWidth.mobile);\n const csrf = useSelector(selectCsrf);\n\n const sendGTMevent = useCallback((ok: boolean, labelText = '', message?: string) => {\n dataLayerForCBPhonePush({\n event: 'UAevent',\n category: CATEGORIES.applicationForm,\n action: divideUsersGA(ok, isAuth),\n label: `${labelText} | ${message}`,\n uid: isAuth ? agreement : null,\n } as unknown as IDataLayerPushUid);\n }, []);\n\n const submitRequest = useCallback(async(params: ISubmitParams, labelText = '') => {\n const dataParams = {\n fio: 'Потенциальный клиент с сайта',\n phone: params.phone,\n product_id: [EProductsId.internet],\n check_call_type: window && window.location.href,\n csrf,\n };\n\n const resp = await doRequest.apiRequest(\n requestByConnection(dataParams),\n );\n\n if (resp.isSuccess) {\n const { status, message } = resp.payload;\n const ok = !!status;\n\n sendGTMevent(ok, labelText, message);\n return { ok, message, status: status ? ERequestStatus.success : ERequestStatus.error };\n } else {\n sendGTMevent(false, labelText);\n return {\n ok: false,\n message: 'Не удалось отправить заявку.',\n status: ERequestStatus.error,\n };\n }\n }, [sendGTMevent]);\n\n const onStartFormFilling = useCallback((labelText = '') => {\n dataLayerForCBPhonePush({\n event: EVENTS.UAevent,\n category: CATEGORIES.applicationForm,\n action: isAuth ? ACTIONS.startedEquip : ACTIONS.started,\n label: labelText || '',\n uid: isAuth ? agreement : null,\n } as unknown as IDataLayerPushUid);\n }, []);\n\n return (\n \n \n Поможем подобрать роутер\n Оставьте свой номер телефона. Менеджер перезвонит вам и поможет подобрать подходящий роутер.\n submitRequest(params, '')}\n onStartFormFilling={() => onStartFormFilling('')}\n btnText='Оставить заявку'\n templateVariant={'second'}\n />\n \n \n \n \n \n \n \n );\n};\n\nexport default CallBackFormRouters;\n","import { LazyLoadImage } from 'react-lazy-load-image-component';\nimport styled from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\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\nexport const HeaderWrapper = styled.div`\n width: 100%;\n justify-content: space-between;\n flex-wrap: nowrap;\n margin-top: 86px;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n margin-top: 75px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin-top: 66px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n margin-top: 63px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: column-reverse;\n margin-top: 65px;\n margin-bottom: 43px;\n }\n`;\n\nexport const HeaderContent = styled.div`\n flex-direction: column;\n max-width: 560px;\n margin-top: 29px;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n margin-top: 40px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n max-width: 446px;\n margin-top: 0;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n max-width: 334px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n max-width: unset;\n }\n`;\n\nexport const HeaderPreTitle = styled.h1`\n ${FONTS.H5};\n`;\n\nexport const HeaderTitle = styled.div`\n ${FONTS.H1};\n margin-top: 0;\n margin-bottom: 8px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.H2}\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.H3}\n }\n`;\n\nexport const HeaderSubTitle = styled.div`\n ${FONTS.M};\n margin-bottom: 16px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.S}\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.XS}\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.S}\n }\n`;\n\nexport const SBaseButton = styled(BaseButton)`\n max-width: max-content;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n max-width: unset;\n }\n`;\n\nexport const HeaderMedia = styled.div`\n max-width: 590px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n max-width: 454px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n max-width: 353px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n max-width: unset;\n }\n`;\n\nexport const HeaderImage = styled(LazyLoadImage)`\n width: 100%;\n height: auto;\n border-radius: ${BorderRadius.OuterBlockRadius};\n`;\n","import { RefObject, useCallback } from 'react';\n\nimport { dataLayerPush } from '@r1-frontend/analytics/dataLayerPush';\n\nimport { btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport WebpImage from '@r1-frontend/ui-react/components/WebpImage';\nimport { ACTIONS, CATEGORIES, EVENTS } from '@r1-frontend/shared/constants/analytics';\n\nimport * as ST from './styled';\n\ninterface IHeaderProps {\n cityIn: string,\n routersRef?: RefObject,\n}\n\nconst Header = ({ cityIn, routersRef }: IHeaderProps): JSX.Element => {\n const onClickHandler = useCallback(() => {\n dataLayerPush({\n event: EVENTS.UAevent,\n category: CATEGORIES.equipment,\n action: ACTIONS.clickChooseBtn,\n label: '',\n });\n routersRef?.current?.scrollIntoView({\n behavior: 'smooth',\n });\n }, [routersRef]);\n\n return (\n \n \n Wi-Fi роутеры в {cityIn}\n Танцуйте с удовольствием, а не с бубном у роутера\n \n Простые в настройке, лёгкие в управлении, надёжные в работе и с доставкой по всей России. Выберите свой.\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Header;\n","import { LazyLoadImage } from 'react-lazy-load-image-component';\nimport styled, { css } from 'styled-components';\n\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nimport { breakPoints, BreakPointsMFirst } from '~/src/constants/breakpoints';\nimport { useProgressiveImage } from '~/src/helpers/hooks/useProgressiveImage';\n\ntype TImgBlock = {\n webpImg?: string,\n pngImg?: string,\n}\n\ntype TTextColor = {\n textColor?: string,\n}\n\nexport const RoutersBannersContainer = styled.div`\n width: 100%;\n box-sizing: content-box;\n margin: 64px 0;\n`;\n\nexport const RoutersBannersBlock = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n grid-gap: 24px;\n width: 100%;\n\n @media (max-width: ${breakPoints.mobile}) {\n flex-direction: column;\n flex-wrap: wrap;\n grid-gap: 18px;\n }\n`;\n\nexport const ImgBlock = styled.div`\n width: 40%;\n height: 100%;\n\n @media (max-width: ${BreakPointsMFirst.tablet}) {\n width: 50%;\n }\n`;\n\nexport const Image = styled(LazyLoadImage)`\n object-fit: cover;\n object-position: right;\n width: 100%;\n height: 100%;\n border-radius: ${BorderRadius.OuterBlockRadius} 0 0 ${BorderRadius.OuterBlockRadius};\n\n @media (max-width: ${breakPoints.sMobile}) {\n object-position: 93% 100%;\n }\n`;\n\nexport const TextBlock = styled.div`\n width: 60%;\n\n @media (max-width: ${BreakPointsMFirst.tablet}) {\n width: 50%;\n }\n\n @media (max-width: ${breakPoints.tablet}) {\n width: 80%;\n }\n`;\n\nexport const ContentWrap = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n border-radius: ${BorderRadius.OuterBlockRadius};\n height: auto;\n ${(props) => (props.pngImg || props.webpImg) && css`\n background-image: url('${useProgressiveImage(props.webpImg, { hasTimeout: true, timeoutDelay: 1 }, props.pngImg)}');\n background-repeat: no-repeat;\n background-size: cover;\n width: 50%;\n\n @media (max-width: ${BreakPointsMFirst.sDesktop}) {\n overflow: hidden;\n }\n\n @media (max-width: ${breakPoints.mobile}) {\n width: 100%;\n }\n `};\n`;\n\nexport const Title = styled.div`\n ${(props) => props.textColor && css`\n color: ${props.textColor};\n padding: 40px 10px 8px 20px;\n ${FONTS.H4};\n\n @media (max-width: ${BreakPointsMFirst.sDesktop}) {\n padding-left: 0;\n }\n\n @media (max-width: ${breakPoints.tablet}) {\n ${FONTS.H5};\n padding: 24px 5px 8px 0;\n }\n\n @media (max-width: ${breakPoints.sMobile}) {\n margin-left: -5px;\n ${FONTS.H4};\n }\n `};\n`;\n\nexport const SubText = styled.div`\n ${(props) => props.textColor && css`\n color: ${props.textColor};\n padding: 0 20px 40px 20px;\n ${FONTS.XS};\n\n @media (max-width: ${BreakPointsMFirst.sDesktop}) {\n padding-left: 0;\n }\n\n @media (max-width: ${breakPoints.tablet}) {\n padding: 0 5px 32px 0;\n }\n\n @media (max-width: ${breakPoints.sMobile}) {\n margin-left: -5px;\n }\n `};\n`;\n","import { COLORS } from '@r1-frontend/ui-react/assets/js/constants';\n\nimport { IHomeData } from '~/src/components/BlockInternet/constants';\n\nimport { IQuestion } from '../internet/internet-represent';\n\nenum EWiFiVariant {\n WiFi5 = 'Wi-Fi 5',\n WiFi6 = 'Wi-Fi 6',\n Mesh = 'Mesh-систему',\n}\n\nconst definitionLink = (data: EWiFiVariant) => {\n const link = () => {\n switch (data) {\n case EWiFiVariant.WiFi5:\n return 'wifi-router-tp-link-archer-ec220g5ert?withOption=0';\n case EWiFiVariant.WiFi6:\n return 'marshrutizator-wifi-d-link-dir-x1530-ru-a';\n case EWiFiVariant.Mesh:\n return 'wifi-system-tp-link-deco-m4?withOption=0';\n }\n };\n\n const url = `/internet/equipment/${link()}`;\n return `${data}`;\n\n};\n\nexport const routersAdvs: IHomeData[] = [\n {\n id: 1,\n initialTypeIsRow: true,\n imgUrl: '/static/images/equipment/reliability.png',\n webpUrl: '/static/images/equipment/reliability.webp',\n title: 'Положитесь на Wi-Fi',\n subText: 'Переходите из комнаты в комнату во время видеоконференций. Картинка и звук не зависнут и не оборвутся.',\n color: `${COLORS.black}`,\n },\n {\n id: 2,\n imgUrl: '/static/images/equipment/stability.png',\n webpUrl: '/static/images/equipment/stability.webp',\n title: 'Почувствуйте стабильность',\n subText: 'Наслаждайтесь стабильным интернетом для онлайн-игр и прямых трансляций с безупречным видео и чистым звуком.',\n color: `${COLORS.black}`,\n },\n {\n id: 2,\n imgUrl: '/static/images/equipment/control.png',\n webpUrl: '/static/images/equipment/control.webp',\n title: 'Держите всё под контролем',\n subText: 'Используйте чёрный список, чтобы уберечь детей от нежелательного контента.',\n color: `${COLORS.black}`,\n },\n {\n id: 4,\n imgUrl: '/static/images/equipment/safety.png',\n webpUrl: '/static/images/equipment/safety.webp',\n title: 'Ничего не бойтесь',\n subText: 'Наши роутеры защищены от кибератак, взломов и соответствуют самым высоким требованиям безопасности.',\n color: `${COLORS.black}`,\n },\n];\n\nexport const faqData: IQuestion[] = [\n {\n id: 1,\n question: 'Какой роутер подойдёт для однокомнатной квартиры?',\n answer: `Если у вас однокомнатная квартира, и вы сидите в сети с ноутбука и телефона —\n вам подойдёт роутер с ${definitionLink(EWiFiVariant.WiFi5)}, поддерживающий скорость на уровне 300 Мбит/с. К нему можно подключить\n до 10 устройств.`,\n },\n {\n id: 2,\n question: 'Какой роутер выбрать, если у меня несколько комнат в квартире?',\n answer: `Если в вашей квартире две комнаты — вам подойдёт роутер с ${definitionLink(EWiFiVariant.WiFi5)}, поддерживающий скорость на уровне\n 300 Мбит/с. А если больше трёх комнат — выбирайте модель с ${definitionLink(EWiFiVariant.WiFi6)}, поддерживающую скорость на уровне\n 600 Мбит/с, или ${definitionLink(EWiFiVariant.Mesh)} с двумя или тремя блоками.`,\n },\n {\n id: 3,\n question: 'Какой роутер подойдёт для большой площади частного дома?',\n answer: 'Для дома с большой площадью и сложной планировкой подойдут домашняя сеть Wi-Fi или Wi-Fi Mesh-система.',\n },\n {\n id: 4,\n question: 'Как выбрать и установить роутер для эффективной работы?',\n answer: `Инженеры Дом.ру изучат планировку квартиры, а затем установят и настроят оборудование так, чтобы сигнал был стабильный в любой\n точке — от кухни до балкона.`,\n },\n {\n id: 5,\n question: 'В каких диапазонах работают роутеры?',\n answer: `У каждого роутера два диапазона: 2,4 ГГц и 5 ГГц. Чтобы получить скорость без помех от соседних сетей и бытовых\n приборов — выберите в списке сеть с диапазоном 5 ГГц и подключите к ней своё устройство.`,\n },\n {\n id: 6,\n question: 'Защищены ли роутеры от кибератак и взломов?',\n answer: 'Все Wi-Fi роутеры соответствуют самым высоким требованиям безопасности и препятствуют появлению киберугроз для вашей домашней сети.',\n },\n {\n id: 7,\n question: 'Кому доступна бесплатная доставка?',\n answer: `Мы доставляем роутеры по всей России. Если пользуетесь нашими услугами — доставка для вас будет бесплатной, а если\n нет — платной. Стоимость доставки будет зависеть от выбранного адреса.`,\n },\n];\n","import React from 'react';\n\nimport WebpImage from '@r1-frontend/ui-react/components/WebpImage';\n\nimport { IBanner } from '~/src/api/content/banners';\n\nimport * as ST from './styled';\n\ninterface IProps {\n routersBanners: IBanner[],\n}\n\nconst RoutersBanners = ({ routersBanners }: IProps): JSX.Element => {\n return (\n \n {routersBanners.map((elem) => !!elem.bannerInfo?.is_active && (\n \n \n {elem.bannerInfo?.image && (\n \n \n \n )}\n \n \n {elem.bannerInfo?.title}\n {elem.bannerInfo?.text}\n \n \n ))}\n \n );\n};\n\nexport default RoutersBanners;\n","import { useRef } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\nimport { ICurrentCity } from '@r1-frontend/entities/City/models/ICurrentCity';\n\nimport WideContainer from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nimport { IBanner } from '~/src/api/content/banners';\nimport AdvantagesBlock from '~/src/components/BlockInternet/AdvantagesBlock';\nimport { AddOpportunities, IRepresentTopProps } from '~/src/features/internet/internet-represent/page-blocks/AddOpportunities';\nimport { Questions } from '~/src/features/internet/internet-represent/page-blocks/Questions';\nimport { TState } from '~/src/store';\n\nimport BannerWithRoutersCard from './pageBlocks/BannerWithRoutersCard';\nimport CallBackFormRouters from './pageBlocks/CallBackFormRouters';\nimport Header from './pageBlocks/Header';\nimport Routers from './pageBlocks/Routers';\nimport RoutersBanners from './pageBlocks/RoutersBanners';\nimport { faqData, routersAdvs } from './data';\n\nimport { BlockTitle, BlockWrapper } from './styled';\nexport interface IProps {\n city: ICurrentCity,\n productList: IEquipment[],\n addOpportunities: IRepresentTopProps['addOpportunities'] | null,\n routersBanners: IBanner[] | null,\n banners: IBanner[],\n}\n\nexport interface ISelectedOption {\n label: string,\n operType: string,\n price: number | string,\n pricePromo?: number | string,\n sort: number,\n type: number | string,\n value: number | string,\n}\n\nconst Equipment = ({\n city,\n productList,\n addOpportunities,\n routersBanners,\n banners,\n}: IProps): JSX.Element => {\n const { cityIn } = city;\n\n const routersRef = useRef(null);\n\n const { isAuth, clientPersonal } = useSelector((state: TState) => state.auth);\n\n return (\n \n
\n {!!routersBanners?.length && \n Приятные бонусы при покупке роутера\n \n }\n \n Wi-Fi роутеры и не только\n \n \n\n \n Роутеры для любых задач\n \n \n \n Роутеры для надёжных отношений с интернетом\n \n \n \n {addOpportunities &&\n \n }\n Если остались вопросы} questions={faqData}/>\n \n );\n};\n\nexport default Equipment;\n","const SEO_SCRIPT_FAQ = /<(?!\\/?td|\\/?tr|\\/?caption|\\/?thead|\\/?th|\\/?table)[^>]*>|[\\r\\n]+/g;\n\nexport const stringFormatterSeoScript = (text?: string) => text?.replace(SEO_SCRIPT_FAQ, '');\n\n","import { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\n\nimport { EPriceTypes } from '@r1-frontend/shared/types/EPriceTypes';\n\nimport { getPriceOptions } from '~/src/entities/equipment';\nimport { convertShopPrices, IPrice } from '~/src/entities/price';\nimport { stringFormatterSeoScript } from '~/src/features/_layout/SeoScripts/stringFormatterSeoScript';\nimport { sortFunctionWithRequestIdOnTop } from '~/src/helpers/functions';\n\ninterface IGetMinCostProduct {\n description: string,\n url: string,\n imagePath?: string,\n}\n\ninterface IGetMinCostProductWithPrice extends IGetMinCostProduct {\n price: number,\n}\n\nexport interface IPriceOptionProps {\n price: IPrice['value'],\n pricePromo?: IPrice['valuePromo'],\n label: string,\n id?: number,\n}\n\nconst getPrice = (product: IPriceOptionProps) => product['price'] || product['pricePromo'] || 0;\n\nexport const getMinCostProduct = (products: IEquipment[]) => {\n const sortedProducts = products\n .map(product => {\n const options: IPriceOptionProps[] = getPriceOptions(\n convertShopPrices(product),\n null,\n false,\n sortFunctionWithRequestIdOnTop,\n );\n\n if (product.testDrive) {\n product.testDrive.pricesAfter.forEach(({ id, type, duration, value }) => {\n const isLeasing = type === EPriceTypes.Leasing;\n const uniqueTestDriveVariant = options.findIndex(({ id: optionId = 0 }) => optionId === id);\n\n if (uniqueTestDriveVariant < 0) {\n options.push({\n label: isLeasing ? `Рассрочка на ${duration} мес.` : 'Полная стоимость',\n price: value,\n });\n }\n });\n }\n options.sort((a, b) => getPrice(a) - getPrice(b));\n const minCostOption = options[0];\n\n return ({\n description: stringFormatterSeoScript(\n `${product.category?.title || ''}: ${product.titleShort || product.title}. ${minCostOption.label} ${product.body || ''}`,\n ) || '',\n price: options[0].price,\n imagePath: product.imageWebp || product.image,\n url: `internet/equipment/${product.alias ? product.alias : product.id}`.replace('//', '/'),\n });\n })\n .sort((productA: IGetMinCostProductWithPrice, ProductB: IGetMinCostProductWithPrice) =>\n productA.price - ProductB.price);\n\n const result = sortedProducts[0] || {};\n\n return {\n ...result,\n price: result.price.toString(),\n };\n};\n","import { useMemo } from 'react';\nimport { NextPage } from 'next';\n\nimport { equipment } from '@r1-frontend/api-domru/full-buy/v1/equipment';\nimport { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\nimport { ICurrentCity } from '@r1-frontend/entities/City/models/ICurrentCity';\n\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport { getBanners, groupByTags, IBanner } from '~/src/api/content/banners';\nimport { getPageView, IPageView } from '~/src/api/content/page/view';\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport Layout from '~/src/features/_layout';\nimport { SeoScriptAggregateRatingWithOffer } from '~/src/features/_layout/SeoScripts';\nimport Equipment from '~/src/features/equipment';\nimport { getMinCostProduct } from '~/src/features/equipment/getMinCostProduct';\nimport { initialProps } from '~/src/helpers/basePageFunc';\nimport { sortFunction } from '~/src/helpers/functions';\nimport getRequester from '~/src/helpers/getRequester';\nimport { getCurrentCity, selectCompanyName } from '~/src/store/selectors/city';\nimport selectProviderId from '~/src/store/selectors/selectProviderId';\n\nconst EXPAND_BANNER = 'bannerInfo.tags,order,routers,routers.labels,routers.props,routers.category';\nconst ADDITIONAL_OPPORTUNITIES_ID = '2912';\nconst BANNER_TAGS = ['router_banner', 'router_bonuses'];\n\ninterface IPageProps {\n companyName: string,\n currentCity: ICurrentCity,\n productsList: IEquipment[],\n bannersList: IBanner[],\n addOpportunities: IPageView | null,\n}\n\nconst EquipmentPage: NextPage = ({\n companyName,\n currentCity,\n productsList,\n bannersList,\n addOpportunities,\n}) => {\n const { callCenter, cityIn } = currentCity;\n\n const products = useMemo(() => {\n return productsList\n .sort(sortFunction)\n .map(item => ({ ...item, alias: item.alias?.replace(/-im$/, '') }));\n }, [productsList]);\n\n const { router_banner = [], router_bonuses = [] } = useMemo(() => {\n if (bannersList.length) {\n return groupByTags(bannersList, BANNER_TAGS, products);\n }\n\n return {};\n }, [bannersList, products]);\n\n const minCostedProduct = getMinCostProduct(products);\n\n return (\n <>\n \n \n \n \n \n );\n};\n\nEquipmentPage.getInitialProps = async(options) => {\n await initialProps(options, { isNeedAuthData: true });\n const { req, store } = options;\n\n const doRequest = getRequester(req);\n const state = store.getState();\n\n const providerId = selectProviderId(state);\n const currentCity = getCurrentCity(state);\n const companyName = selectCompanyName(state);\n\n const [\n shopItemsResponse,\n bannersResponse,\n addOpportunitiesResponse,\n ] = await Promise.all([\n doRequest.fullBuy(\n equipment({\n categories: [EShopCategory.Routers],\n providerId,\n }),\n ),\n getBanners({ providerId, tag: BANNER_TAGS, expand: EXPAND_BANNER }),\n getPageView(providerId, ADDITIONAL_OPPORTUNITIES_ID),\n ]);\n\n return {\n companyName,\n currentCity,\n productsList: shopItemsResponse.isSuccess ? shopItemsResponse.payload : [],\n bannersList: bannersResponse.isSuccess ? bannersResponse.payload : [],\n addOpportunities: addOpportunitiesResponse.isSuccess ? addOpportunitiesResponse.payload : null,\n };\n};\n\nexport default EquipmentPage;\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 styled from 'styled-components';\n\nimport NukaCarousel from '@r1-frontend/ui-react/components/NukaCarousel';\n\nexport const CustomSwiper = styled(NukaCarousel)`\n padding-left: 0 !important;\n padding-right: 0 !important;\n \n & section,\n & div {\n outline: none;\n }\n\n & > section > div.slider-frame {\n padding: 24px 0 !important;\n\n div.slider-list {\n cursor: default !important;\n }\n }\n`;\n","import { ReactNode, useEffect, useState } from 'react';\nimport { CarouselProps } from 'nuka-carousel';\n\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { CustomSwiper } from './styled';\n\nenum EMediaWidth {\n desktop = '(min-width: 1600px)',\n sDesktop = '(max-width: 1599px) and (min-width: 1280px)',\n laptop = '(max-width: 1279px) and (min-width: 768px)',\n mobile = '(max-width: 767px)',\n}\n\ntype TBreakpoint = 'desktop' | 'sDesktop' | 'laptop' | 'mobile';\n\ntype TVisibleSlides = {\n [key in TBreakpoint]: number;\n};\n\ninterface IProps extends CarouselProps {\n children: Array,\n desktopSlideWidth?: string,\n mobileSlideWidth?: string,\n visibleSlides?: TVisibleSlides,\n [key: string]: unknown,\n}\n\nconst defaultVisibleSlides: TVisibleSlides = {\n desktop: 4,\n sDesktop: 3,\n laptop: 2,\n mobile: 1,\n};\n\n/**\n * Адаптив карусели Nuka-Carousel\n * @param items - массив компонентов (TariffCard, ProductCard, etc)\n * @param desktopSlideWidth - ширина слайда карусели на десктопе\n * @param mobileSlideWidth - ширина слайда карусели на мобилках\n * @param visibleSlides - количество целых видимых слайдов в карусели\n * @returns Function{}\n */\n// todo: move to ui-react\nconst AdaptiveNukaCarousel = ({\n children,\n desktopSlideWidth = '304px',\n mobileSlideWidth = '288px',\n visibleSlides = defaultVisibleSlides,\n ...props\n}: IProps): JSX.Element => {\n const [hideArrows, setHideArrows] = useState(false);\n const [hideDots, setHideDots] = useState(false);\n const [slideWidth, setSlideWidth] = useState(desktopSlideWidth);\n\n const isDesktop = useMatchMedia(EMediaWidth.desktop);\n const isSDesktop = useMatchMedia(EMediaWidth.sDesktop);\n const isLaptop = useMatchMedia(EMediaWidth.laptop);\n const isMobile = useMatchMedia(EMediaWidth.mobile);\n\n useEffect(() => {\n if (isMobile) {\n setSlideWidth(mobileSlideWidth);\n setHideArrows(true);\n if (children.length > visibleSlides.mobile) {\n setHideDots(false);\n } else {\n setHideDots(true);\n }\n } else {\n setSlideWidth(desktopSlideWidth);\n if ((isLaptop && children.length > visibleSlides.laptop) ||\n (isSDesktop && children.length > visibleSlides.sDesktop) ||\n (isDesktop && children.length > visibleSlides.desktop)) {\n setHideArrows(false);\n setHideDots(false);\n } else {\n setHideArrows(true);\n setHideDots(true);\n }\n }\n }, [\n isDesktop,\n isSDesktop,\n isLaptop,\n isMobile,\n children,\n desktopSlideWidth,\n mobileSlideWidth,\n visibleSlides,\n ]);\n\n return (\n \n {children}\n \n );\n};\n\nexport default AdaptiveNukaCarousel;\n","import styled from 'styled-components';\n\nexport const NoSsrWrapper = styled.div`\n gap: 20px;\n`;\n","import { useEffect, useState } from 'react';\n\nimport { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\n\nimport { isClientSide } from '@r1-frontend/shared/helpers/ssr';\n\nimport AdaptiveNukaCarousel from '~/src/components/AdaptiveNukaCarousel';\nimport DeviceGridItem from '~/src/components/Equipment/internet/DeviceGridItem';\n\nimport { NoSsrWrapper } from './styled';\n\ninterface IRoutersProps {\n routers: IEquipment[],\n cellSpacing?: number,\n isDecoder?: boolean,\n baseRoute?: string,\n}\n\nconst Routers = ({ routers, cellSpacing, isDecoder, baseRoute }: IRoutersProps): JSX.Element => {\n const [onClientSide, setOnClientSide] = useState(false);\n\n useEffect(() => {\n setOnClientSide(isClientSide());\n }, []);\n\n const getRoutersCards = () => {\n return (\n routers.map(router => (\n \n ))\n );\n };\n\n return (onClientSide\n ? \n {getRoutersCards()}\n \n : \n {getRoutersCards()}\n \n );\n};\n\nexport default Routers;\n","import styled, { css } from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const BlockWrapper = styled.div<{ isSmallCards?: boolean }>`\n width: 100%;\n flex-direction: column;\n margin-bottom: 64px;\n\n ${p => p.isSmallCards && css`\n padding-left: 16px;\n `}\n`;\n\nexport const BlockTitle = styled.h2<{ withCarousel?: boolean }>`\n ${FONTS.H2};\n margin-bottom: ${({ withCarousel }) => withCarousel ? '8px' : '32px'};\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.H3};\n margin-bottom: ${({ withCarousel }) => withCarousel ? 0 : '24px'};\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n margin-bottom: ${({ withCarousel }) => withCarousel ? '8px' : '32px'};\n }\n\n @media (max-width: ${wideBreakpoints.sMobile}) {\n max-width: 95%;\n }\n`;\n","import { useCallback } from 'react';\nimport Router from 'next/router';\n\nimport { dataLayerPush } from '@r1-frontend/analytics/dataLayerPush';\n\ntype TAction = 'simple' | 'long' | 'custom';\n\nconst actionMap: Record = {\n simple: 'banner to req',\n long: 'marketing banner',\n custom: 'additionally banner to req',\n};\n\nexport const useGaBanner = (type: TAction, title: string, link: string) => {\n const onDataLayerPush = useCallback((isFull: boolean) => {\n dataLayerPush({\n event: 'UAevent',\n category: 'banner main',\n action: `click ${title} ${actionMap[type]}${isFull ? ' full' : ''}`,\n label: link,\n });\n }, [title, link, type]);\n\n const onBannerClick = useCallback((isFull = false) => {\n onDataLayerPush(isFull);\n Router.push(link);\n }, [link, onDataLayerPush]);\n\n return { onBannerClick };\n};\n","import styled from 'styled-components';\n\n// @ts-ignore\nimport GridContainer from '@r1-frontend/ui-react/components/layouts/gridContainer';\n\nexport const breakePoints = {\n lDesktop: '1600px',\n desktop: '1599px',\n sDesktop: '1365px',\n laptop: '1279px',\n tablet: '1023px',\n mobile: '767px',\n sMobile: '479px',\n};\n\nexport const InternetRepresent = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n`;\n\nexport const StyledGridContainer = styled(GridContainer)`\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n\n @media (max-width: ${breakePoints.desktop}) {\n padding-left: 0;\n padding-right: 0;\n }\n\n @media (max-width: ${breakePoints.mobile}) {\n padding-left: 16px;\n padding-right: 16px;\n }\n`;\n\nexport const PlankFormWrap = styled.div`\n position: fixed;\n z-index: 100;\n bottom: 0;\n width: 100%;\n\n @media (max-width: ${breakePoints.mobile}) {\n display: none;\n }\n`;\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { isClientSide } from '@r1-frontend/shared/helpers/ssr';\n\nimport defaultImageFallback from '~/static/images/defaultImageFallback.svg';\n\ninterface ITimeout {\n hasTimeout?: boolean,\n timeoutDelay?: number,\n}\n\ninterface IOptions {\n timeout?: ITimeout,\n fallbackSrc?: string,\n}\n\ntype TEvent = Event | string | undefined;\n\nexport interface IProgressiveImageExtendedResult {\n sourceLoaded: string,\n isFallback: boolean,\n errorEvent: TEvent,\n}\n\nconst getImage = (onSuccess: () => void, onError: OnErrorEventHandlerNonNull, src?: string) => {\n if (src && isClientSide()) {\n const img = new Image();\n img.src = src;\n img.onload = onSuccess;\n if (onError) {\n img.onerror = onError;\n }\n } else {\n onError('No src');\n }\n};\n\n// использовать только для картинок (LazyLoadImage, img, picture),\n// не подходит для фоновых изображений (css: background, background-image), для них ручная проверка - useWebp\nexport function useProgressiveImage(\n src?: string,\n timeout?: ITimeout,\n fallbackSrc = defaultImageFallback,\n): string {\n const [sourceLoaded, setSourceLoaded] = useState('');\n const { hasTimeout = false, timeoutDelay = 0 } = timeout || {};\n\n const onSuccess = useCallback(\n () => hasTimeout\n ? setTimeout(() => setSourceLoaded(src as string), timeoutDelay)\n : setSourceLoaded(src as string),\n [src, hasTimeout, timeoutDelay],\n );\n\n const onError = useCallback(() => {\n setSourceLoaded(fallbackSrc);\n }, [fallbackSrc]);\n\n useMemo(() => getImage(onSuccess, onError, src), [onError, onSuccess, src]);\n\n return sourceLoaded;\n}\n\nexport function useProgressiveImageWithFallbackDetection(\n src?: string,\n options?: IOptions,\n): IProgressiveImageExtendedResult {\n const {\n timeout,\n fallbackSrc = defaultImageFallback,\n } = options || {};\n const [sourceLoaded, setSourceLoaded] = useState('');\n const [isFallback, setIsFallback] = useState(false);\n const [errorEvent, setErrorEvent] = useState(undefined);\n\n const { hasTimeout = false, timeoutDelay = 0 } = timeout || {};\n\n const onSuccess = useCallback(\n () => hasTimeout\n ? setTimeout(() => setSourceLoaded(src as string), timeoutDelay)\n : setSourceLoaded(src as string),\n [src, hasTimeout, timeoutDelay],\n );\n\n const onError = useCallback((event) => {\n setSourceLoaded(fallbackSrc);\n setIsFallback(true);\n setErrorEvent(event);\n }, [fallbackSrc]);\n\n useMemo(() => getImage(onSuccess, onError, src), [onError, onSuccess, src]);\n\n return ({ sourceLoaded, isFallback, errorEvent });\n}\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\nimport { IEquipmentRequest } from './dto/Request.dto';\n\n/**\n * Получение информации об оборудовании\n */\nexport const equipment = ({ providerId, globalId, categories, routerFilter }: IEquipmentRequest): IRequest => ({\n uri: `/v1/${providerId}/equipment`,\n method: 'GET',\n withAuth: true,\n withProvider: true,\n queryParams: {\n globalId,\n categories,\n routerFilter,\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 { 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 styled, { css } from 'styled-components';\n\n// @ts-ignore\nimport svg from './arrow.svg';\n\nexport const Wrapper = styled.div`\n width: fit-content;\n height: 30px;\n opacity: 0.2;\n transition: opacity 0.2s ease-in;\n cursor: pointer;\n \n :hover {\n opacity: 1;\n }\n`;\n\nexport const ArrowSvg = styled.img.attrs({\n src: svg,\n})<{ type?: 'left' | 'right' }>`\n height: 100%;\n ${({ type }) => type === 'right' && css`transform: rotate(180deg);`}\n`;\n","import styled, { CSSObject, keyframes } from 'styled-components';\n\nimport { COLORS } from '../../../assets/js/constants';\n\nexport interface ICustomDotsStyles {\n dotsContainer?: CSSObject,\n dot?: CSSObject,\n dotContainer?: CSSObject,\n activeDot?: CSSObject,\n}\n\nexport const Dot = styled.div<{ active?: boolean, customStyles?: ICustomDotsStyles }>`\n height: 100%;\n width: 100%;\n border-radius: 2px;\n background: ${COLORS.black};\n opacity: 0.1;\n transition: opacity .3s ease;\n ${p => p.customStyles?.dot ?? ''};\n\n &:hover {\n opacity: ${({ active }) => active ? 1 : 0.45};\n }\n`;\n\nexport const DotContainer = styled.div<{ active?: boolean, customStyles?: ICustomDotsStyles }>`\n position: relative;\n width: ${({ active }) => active ? '48px' : '24px'};\n height: 4px;\n margin: 0 4px;\n cursor: pointer;\n transition: width .3s ease;\n ${p => p.customStyles?.dotContainer ?? ''};\n`;\n\nconst activeLineAnimation = keyframes`\n 0% { width: 0; }\n 100% { width: 100%; }\n`;\n\nexport const ActiveLine = styled.div<{ active?: boolean, time?: number, customStyles?: ICustomDotsStyles }>`\n display: ${({ active }) => active ? 'initial' : 'none'};\n position: absolute;\n top: 0;\n left: 0;\n background: ${COLORS.black};\n width: ${({ active }) => active ? '100%' : '0%'};\n height: 100%;\n border-radius: 2px;\n animation-name: ${activeLineAnimation};\n animation-duration: ${({ time }) => time || 0}s;\n animation-iteration-count: 1;\n ${p => p.customStyles?.activeDot ?? ''};\n`;\n\nexport const DotsContainer = styled.div< {customStyles?: ICustomDotsStyles }>`\n justify-content: center;\n width: 100%;\n margin-top: 10px;\n bottom: 26px;\n z-index: 10;\n flex-wrap: nowrap;\n ${p => p.customStyles?.dotsContainer ?? ''};\n`;\n","import React from 'react';\n\nimport * as ST from './styled';\n\nexport interface IArrowProps {\n previousSlide?: () => void,\n nextSlide?: () => void,\n}\n\nconst DefaultArrow = ({ previousSlide, nextSlide }: IArrowProps) => {\n return (\n \n \n \n );\n};\n\nexport default DefaultArrow;\n","import React, { FC } from 'react';\n\nimport * as ST from './styled';\n\nexport interface IDotsProps {\n goToSlide: (i: number) => void,\n slideCount: number,\n currentSlide: number,\n autoplayInterval: number,\n autoplay: boolean,\n customDotsStyles?: ST.ICustomDotsStyles,\n}\n\nconst DefaultDots: FC = ({\n goToSlide,\n slideCount,\n currentSlide,\n autoplayInterval,\n autoplay,\n customDotsStyles,\n}) => {\n return (\n \n {Array(slideCount).fill(null).map((_, index) => (\n goToSlide(index)}\n customStyles={customDotsStyles}\n >\n \n \n \n ))}\n \n );\n};\n\nexport default DefaultDots;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ withoutDots?: boolean, withoutArrows?: boolean }>`\n display: flex;\n justify-content: center;\n width: 100%;\n height: fit-content;\n margin: 0 auto;\n padding-bottom: ${({ withoutDots }) => withoutDots ? 0 : 32}px;\n padding-right: ${({ withoutArrows }) => withoutArrows ? 0 : 32}px;\n padding-left: ${({ withoutArrows }) => withoutArrows ? 0 : 32}px;\n \n div:focus-visible {\n outline: none !important;\n }\n`;\n","import React, { FC, RefObject, useEffect, useRef, useState } from 'react';\nimport NukaSwiper, {\n CarouselControlContainerProp,\n CarouselProps,\n} from 'nuka-carousel';\n\nimport { ICustomDotsStyles } from './DefaultDots/styled';\nimport DefaultArrow, { IArrowProps } from './DefaultArrow';\nimport DefaultDots, { IDotsProps } from './DefaultDots';\n\nimport * as ST from './styled';\n\nexport interface ICarouselProps extends CarouselProps {\n withoutArrows?: boolean,\n withoutDots?: boolean,\n customArrow?: FC,\n customDots?: FC,\n customDotsStyles?: ICustomDotsStyles,\n}\n\ninterface INukaSwiperMethods {\n setDimensions: () => void,\n}\n\nconst DEFAULT_AUTOPLAY_INTERVAL = 3000;\nconst DOTS_PADDING = -20;\nconst ARROWS_PADDING = -32;\n\nconst getDefaultControlsContainerStyles = (key: CarouselControlContainerProp) => {\n switch (key) {\n case 'BottomCenter':\n return {\n bottom: DOTS_PADDING,\n };\n case 'CenterRight':\n return {\n right: `${ARROWS_PADDING}px`,\n };\n case 'CenterLeft':\n return {\n left: `${ARROWS_PADDING}px`,\n };\n default: return;\n }\n};\n\nconst NukaCarousel: FC = ({\n customArrow: CustomArrow,\n customDots: CustomDots,\n children,\n withoutArrows,\n withoutControls,\n withoutDots,\n autoplayInterval = DEFAULT_AUTOPLAY_INTERVAL,\n autoplay,\n className,\n customDotsStyles,\n ...props\n}) => {\n const [pausedAutoplay, setPausedAutoplay] = useState(false);\n const Arrow = CustomArrow || DefaultArrow;\n const Dots = CustomDots || DefaultDots;\n const swiperRef = useRef();\n\n useEffect(() => {\n swiperRef?.current?.setDimensions();\n }, [withoutArrows, withoutControls]);\n\n const handleMouseOver = () => {\n if (autoplay) {\n setPausedAutoplay(true);\n }\n };\n\n const handleMouseOut = () => {\n if (autoplay) {\n setPausedAutoplay(false);\n }\n };\n\n return (\n \n }\n // @ts-ignore\n getControlsContainerStyles={getDefaultControlsContainerStyles}\n renderCenterLeftControls={({ previousSlide }) => withoutArrows || }\n renderCenterRightControls={({ nextSlide }) => withoutArrows || }\n renderBottomCenterControls={(props) => withoutDots || (\n \n )}\n autoplayInterval={autoplayInterval}\n autoplay={autoplay}\n withoutControls={withoutControls}\n {...props}\n >\n {children}\n \n \n );\n};\n\nexport default NukaCarousel;\n","import { FONTS } from '../../tokens/fonts';\n\nexport type TControlSize = 'S' | 'XS' | 'XXS';\nexport type TControlDirection = 'left' | 'right';\n\ninterface ISizeProps {\n inputSize: number,\n radioCheckSize: number,\n font: string,\n rMargin: number,\n}\n\ninterface ICheckboxSizeProps extends ISizeProps {\n iconWidth: number,\n iconHeight: number,\n promoIconSize: number,\n}\n\ntype ICheckboxSizes = {\n [key in TControlSize]: Partial;\n}\n\nexport const getSizes = (size: TControlSize, data: ICheckboxSizes): Partial => data[size];\n\nexport const checkboxSizes: ICheckboxSizes = {\n S: {\n inputSize: 24,\n font: FONTS.MediumS,\n rMargin: 12,\n iconWidth: 13,\n iconHeight: 9,\n promoIconSize: 11,\n },\n XS: {\n inputSize: 20,\n font: FONTS.MediumXS,\n rMargin: 8,\n iconWidth: 11,\n iconHeight: 7,\n promoIconSize: 9,\n },\n XXS: {\n inputSize: 16,\n font: FONTS.MediumXXS,\n rMargin: 8,\n iconWidth: 9,\n iconHeight: 6,\n promoIconSize: 7,\n },\n};\n\nexport const radioSizes: ICheckboxSizes = {\n S: {\n inputSize: 24,\n radioCheckSize: 10,\n font: FONTS.MediumS,\n rMargin: 12,\n },\n XS: {\n inputSize: 20,\n radioCheckSize: 8,\n font: FONTS.MediumXS,\n rMargin: 8,\n },\n XXS: {\n inputSize: 16,\n radioCheckSize: 6,\n font: FONTS.MediumXXS,\n rMargin: 8,\n },\n};\n","import styled from 'styled-components';\n\nimport { COLORS } from '../../../tokens/colors';\nimport { getSizes, radioSizes, TControlDirection, TControlSize } from '../baseControlsData';\n\nconst getRadioSizes = (size: TControlSize) => getSizes(size, radioSizes);\n\ntype IStyleProps = {\n size: TControlSize,\n disabled: boolean,\n withLabel: boolean,\n direction: TControlDirection,\n}\n\nexport const Label = styled.label`\n display: flex;\n flex-direction: ${({ direction }) => direction === 'right' ? 'row-reverse' : 'row'};\n flex-wrap: nowrap;\n align-items: center;\n margin: 0;\n padding: 0;\n ${p => getRadioSizes(p.size).font};\n color: ${({ disabled }) => disabled ? COLORS.TextDisabled : COLORS.TextPrimary};\n user-select: none;\n\n input[type=\"radio\"] {\n position: relative;\n appearance: none;\n flex: 0 0 auto;\n width: ${p => getRadioSizes(p.size).inputSize}px;\n height: ${p => getRadioSizes(p.size).inputSize}px;\n margin: 0;\n margin-right: ${p => p.withLabel && p.direction !== 'right' ? getRadioSizes(p.size).rMargin + 'px' : 0 };\n margin-left: ${p => p.withLabel && p.direction === 'right' ? getRadioSizes(p.size).rMargin + 'px' : 0 };\n padding: 0;\n background-color: ${COLORS.BgMain};\n border-width: 2px;\n border-style: solid;\n border-color: ${COLORS.Brand_Blue};\n border-radius: 50%;\n transition: .3s;\n outline: none;\n box-sizing: border-box;\n cursor: pointer;\n align-self: flex-start;\n\n @media (hover: hover) {\n &:hover {\n border-color: ${COLORS.Link};\n }\n }\n\n &:required:invalid {\n border-color: ${COLORS.Error};\n background-color: ${COLORS.BgError};\n\n &:hover {\n border-color: ${COLORS.Link};\n background-color: ${COLORS.BgMain};\n }\n }\n\n &:disabled {\n border-color: ${COLORS.GRAY_LIGHT};\n background-color: ${COLORS.GRAY_LIGHT};\n cursor: default;\n pointer-events: none;\n\n @media (hover: hover) {\n &:hover {\n border-color: ${COLORS.GRAY_LIGHT};\n }\n }\n }\n\n &:checked {\n border-color: ${COLORS.Control};\n background-color: ${COLORS.Control};\n\n &:after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n transform-origin: center;\n width: ${p => getRadioSizes(p.size).radioCheckSize}px;\n height: ${p => getRadioSizes(p.size).radioCheckSize}px;\n border-radius: 50%;\n background-color: ${COLORS.BgMain};\n }\n\n @media (hover: hover) {\n &:hover {\n border-color: ${COLORS.Link};\n background-color: ${COLORS.Outline_Dark};\n }\n }\n\n &:disabled {\n border-color: ${COLORS.GRAY_DARK};\n background-color: ${COLORS.GRAY_DARK};\n pointer-events: none;\n\n &:after {\n background-color: ${COLORS.GRAY_LIGHT};\n }\n }\n }\n }\n`;\n","import React, { FC, useCallback } from 'react';\n\nimport { TControlDirection, TControlSize } from '../baseControlsData';\n\nimport { Label } from './styled';\n\nexport interface IRadioProps {\n size?: TControlSize,\n id?: string,\n name?: string,\n value?: string,\n checked?: boolean,\n disabled?: boolean,\n required?: boolean,\n onChange?: (value: string, event?: React.ChangeEvent) => void,\n className?: string,\n direction?: TControlDirection,\n [key: string]: unknown,\n}\n\nconst BaseRadio: FC = ({\n size = 'XS',\n id,\n name = '',\n value = '',\n checked,\n disabled = false,\n required,\n children,\n onChange,\n className,\n direction = 'left',\n ...props\n}) => {\n const onChangeHandler = useCallback((event: React.ChangeEvent) => {\n if (!disabled) {\n onChange && onChange(event.target.value, event);\n }\n }, [disabled, onChange]);\n\n return (\n \n \n {children}\n \n );\n};\n\nexport default BaseRadio;\n","import divideByThousand from '@r1-frontend/ui-react/components/costs/helpers/divideByThousand';\nimport { NBSP, RubleSymbol } from '@r1-frontend/ui-react/tokens/symbols';\n\ntype TMonthlyProps = {\n /**\n * Цена в месяц\n */\n monthly: boolean,\n annually?: never,\n}\n\ntype TAnnuallyProps = {\n monthly?: never,\n /**\n * Цена в год\n */\n annually: boolean,\n}\n\nexport type TFormatProps = TMonthlyProps | TAnnuallyProps;\n\nconst format = (cost: number | string, is?: TFormatProps) => {\n const period = !is ? '' : is.monthly ? '/мес' : '/год';\n\n return `${divideByThousand(cost)}${NBSP}${RubleSymbol}${period}`;\n};\n\nexport default format;\n","import format, { TFormatProps } from '@r1-frontend/ui-react/components/costs/Cost/format';\n\nexport interface IBaseCostProps {\n children: string | number,\n isPreviously?: boolean,\n className?: string,\n}\n\nexport interface IMonthlyCostProps extends IBaseCostProps {\n isMonthly?: boolean,\n isAnnually?: never,\n}\n\nexport interface IAnnuallyCostProps extends IBaseCostProps {\n isMonthly?: never,\n isAnnually?: boolean,\n}\n\nexport type TCostProps = IMonthlyCostProps | IAnnuallyCostProps;\n\nconst Cost = ({\n children,\n\n ...props\n}: TCostProps) => {\n const options: TFormatProps | undefined = props.isMonthly\n ? { monthly: true }\n : props.isAnnually\n ? { annually: true }\n : undefined;\n\n return (\n \n {format(children, options)}\n \n );\n};\n\nexport default Cost;\n","import styled from 'styled-components';\n\nimport Cost, { TCostProps } from './Cost';\n\nconst StyledCost = styled(Cost)`\n display: inline-block;\n white-space: nowrap;\n\n ${p => p.isPreviously && 'text-decoration: line-through;'}\n`;\n\nexport default StyledCost;\n","import Cost from '@r1-frontend/ui-react/components/costs/Cost/styled';\n\nexport default Cost;\n","const divideByThousand = (cost: number | string): string => {\n if (typeof cost === 'string') {\n cost = parseFloat(cost);\n }\n\n return new Intl.NumberFormat('ru', {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }).format(cost);\n};\n\nexport default divideByThousand;\n","import styled, { css } from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { H1, H2, H3, H4, H5 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph1, Paragraph2, Paragraph3, Paragraph4, Paragraph5 } from '@r1-frontend/ui-react/components/typography/paragraph';\n\nconst TextWrapper = styled.div<{ $lastIndent?: boolean }>`\n display: block;\n \n ${H1} {\n margin-bottom: 16px;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n margin-bottom: 24px;\n }\n }\n \n ${H2} {\n margin-bottom: 8px;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n margin-bottom: 16px;\n }\n }\n \n ${H3}, ${H4}, ${H5} {\n margin-bottom: 8px;\n }\n \n ${Paragraph1}, ${Paragraph2}, ${Paragraph3}, ${Paragraph4}, ${Paragraph5} {\n margin-bottom: 16px;\n\n ${({ $lastIndent = true }) => $lastIndent\n ? ''\n : css`\n &:last-child {\n margin-bottom: 0px;\n }\n `}\n }\n`;\n\nexport default TextWrapper;\n","export const RubleSymbol = String.fromCharCode(8381);\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiByeD0iMTIiIGZpbGw9IiNGQUZBRkEiIGZpbGwtb3BhY2l0eT0iMC4xNSIvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMjciIHZpZXdCb3g9IjAgMCAxNSAyNyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjE0MjYgMjUuMTk5N0wxLjE0MjU4IDEzLjE5OTdMMTMuMTQyNiAxLjE5OTcxIiBzdHJva2U9IiMxYTFhMWEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPg==\""],"names":["window","__NEXT_P","push","CELL_SPACING_DATA","EMediaWidth","TEST_NAMES_ATTR","renderRouterCards","routers","map","router","DeviceGridItem","item","baseRoute","data-test","isCharacteristics","id","Container","styled","backgroundImgPath","BorderRadius","colorProp","needCarouselWrap","wideBreakpoints","breakPoints","InfoBlock","Title","FONTS","Text","CardsBlock","BannerRoutersCardBlock","bannerWithRouters","isSDesktopForCarousel","useMatchMedia","isSDesktop","sDesktop","isLaptop","laptop","bannerInfo","title","link","image_background","button_type","text_color","text","button_text","routersCount","length","useGaBanner","onBannerClick","useMemo","carouselCellSpacing","ST","Button","bType","size","href","onClick","NukaCarousel","cellSpacing","slidesToShow","withoutArrows","wrapAround","Wrapper","banners","banner","Content","COLORS","TextContent","Subtitle","SRequestFormPhone","RequestFormPhone","ImgContent","Image","LazyLoadImage","isAuth","agreement","isMobile","mobile","csrf","useSelector","selectCsrf","sendGTMevent","useCallback","ok","labelText","message","dataLayerForCBPhonePush","event","category","CATEGORIES","action","divideUsersGA","label","uid","submitRequest","params","dataParams","resp","status","fio","phone","product_id","EProductsId","check_call_type","location","doRequest","requestByConnection","isSuccess","payload","ERequestStatus","onStartFormFilling","EVENTS","ACTIONS","btnText","templateVariant","WebpImage","urlWebp","src","HeaderWrapper","HeaderContent","HeaderPreTitle","HeaderTitle","HeaderSubTitle","SBaseButton","BaseButton","HeaderMedia","HeaderImage","cityIn","routersRef","onClickHandler","dataLayerPush","current","scrollIntoView","behavior","type","btnTypes","btnSizes","alt","RoutersBannersBlock","ImgBlock","BreakPointsMFirst","TextBlock","ContentWrap","props","pngImg","webpImg","css","useProgressiveImage","hasTimeout","timeoutDelay","textColor","SubText","routersBanners","elem","is_active","image_background_webp","image","image_webp","EWiFiVariant","definitionLink","data","url","WiFi5","WiFi6","Mesh","routersAdvs","initialTypeIsRow","imgUrl","webpUrl","subText","color","faqData","question","answer","city","productList","addOpportunities","useRef","state","auth","clientPersonal","WideContainer","Header","BlockWrapper","BlockTitle","RoutersBanners","ref","withCarousel","Routers","BannerWithRoutersCard","AdvantagesBlock","incomingData","CallBackFormRouters","AddOpportunities","Questions","questions","SEO_SCRIPT_FAQ","getPrice","product","BANNER_TAGS","EquipmentPage","companyName","currentCity","productsList","bannersList","callCenter","products","sort","sortFunction","alias","replace","groupByTags","router_banner","router_bonuses","minCostedProduct","result","options","getPriceOptions","convertShopPrices","sortFunctionWithRequestIdOnTop","testDrive","pricesAfter","forEach","duration","value","isLeasing","EPriceTypes","uniqueTestDriveVariant","findIndex","optionId","price","a","b","minCostOption","description","titleShort","body","imagePath","imageWebp","productA","ProductB","toString","getMinCostProduct","SeoScriptAggregateRatingWithOffer","name","ratingCount","ratingValue","Layout","withMenu","withChat","withFooter","bgColor","Equipment","getInitialProps","req","store","providerId","shopItemsResponse","bannersResponse","addOpportunitiesResponse","initialProps","isNeedAuthData","getRequester","getState","selectProviderId","getCurrentCity","selectCompanyName","Promise","all","fullBuy","equipment","categories","EShopCategory","getBanners","tag","expand","getPageView","tags","response","Error","Array","isArray","join","contentRequest","items","captureQueryError","groups","reduce","acc","mapper","cache","Map","cached","get","routerId","equipmentRouter","find","set","key","bannerMapper","bannerTags","bannerTag","mappedBanner","CustomSwiper","defaultVisibleSlides","desktop","children","desktopSlideWidth","mobileSlideWidth","visibleSlides","useState","hideArrows","setHideArrows","hideDots","setHideDots","slideWidth","setSlideWidth","isDesktop","useEffect","withoutDots","NoSsrWrapper","isDecoder","onClientSide","setOnClientSide","isClientSide","getRoutersCards","AdaptiveNukaCarousel","slidesToScroll","p","isSmallCards","actionMap","simple","long","custom","onDataLayerPush","isFull","Router","breakePoints","lDesktop","tablet","sMobile","InternetRepresent","StyledGridContainer","GridContainer","getImage","onSuccess","onError","img","onload","onerror","timeout","fallbackSrc","defaultImageFallback","sourceLoaded","setSourceLoaded","setTimeout","useProgressiveImageWithFallbackDetection","isFallback","setIsFallback","undefined","errorEvent","setErrorEvent","globalId","routerFilter","uri","method","withAuth","withProvider","queryParams","useOnceExecute","callBack","wasCalled","setWasCalled","ArrowSvg","svg","previousSlide","nextSlide","Dot","customStyles","dot","active","DotContainer","dotContainer","activeLineAnimation","keyframes","ActiveLine","time","activeDot","DotsContainer","dotsContainer","goToSlide","slideCount","currentSlide","autoplayInterval","autoplay","customDotsStyles","fill","_","index","getDefaultControlsContainerStyles","bottom","right","left","customArrow","customDots","withoutControls","className","pausedAutoplay","setPausedAutoplay","Arrow","CustomArrow","DefaultArrow","Dots","CustomDots","DefaultDots","swiperRef","setDimensions","handleMouseOver","handleMouseOut","onTouchStart","onTouchEnd","onMouseOver","onMouseOut","NukaSwiper","getControlsContainerStyles","renderCenterLeftControls","renderCenterRightControls","renderBottomCenterControls","getSizes","checkboxSizes","S","inputSize","font","rMargin","iconWidth","iconHeight","promoIconSize","XS","XXS","radioSizes","radioCheckSize","getRadioSizes","Label","direction","disabled","withLabel","checked","required","onChange","onChangeHandler","target","input","cost","is","period","monthly","NBSP","divideByThousand","RubleSymbol","isMonthly","isAnnually","annually","span","format","Cost","isPreviously","parseFloat","Intl","NumberFormat","style","minimumFractionDigits","maximumFractionDigits","TextWrapper","H1","H2","H3","H4","H5","Paragraph1","Paragraph2","Paragraph3","Paragraph4","Paragraph5","$lastIndent","String","fromCharCode","module","exports"],"sourceRoot":""}