{"version":3,"file":"static/chunks/56354-adda355faf97411d.js","sources":["webpack://_N_E/./src/common/components/flex/FlexContainer.tsx","webpack://_N_E/./src/common/components/home/SectionsTabNav/GamesSearchBar.tsx","webpack://_N_E/./src/common/components/home/SectionsTabNav/Inhouse.tsx","webpack://_N_E/./src/common/components/home/SectionsTabNav/SectionTabNav.styled.ts","webpack://_N_E/./src/modules/slots/components/SlotsMenu.tsx","webpack://_N_E/./src/modules/slots/components/SlotsSectionsContainer.styled.tsx","webpack://_N_E/./src/modules/slots/components/ProvidersScrollCards.tsx","webpack://_N_E/./src/modules/slots/methods/getMainPageCategories.ts","webpack://_N_E/./src/common/components/home/SectionsTabNav/Lobby.tsx","webpack://_N_E/./src/modules/slots/hooks/useMainPageSections.ts","webpack://_N_E/./src/common/components/home/SectionsTabNav/SectionsTabNav.tsx","webpack://_N_E/./src/common/components/layout/ScrollCards/ScrollCards.styled.js","webpack://_N_E/./src/common/components/layout/ScrollCards/ScrollMenu/defautSettings.ts","webpack://_N_E/./src/common/components/layout/ScrollCards/ScrollMenu/wrapper.tsx","webpack://_N_E/./src/common/components/layout/ScrollCards/ScrollMenu/ScrollMenu.tsx","webpack://_N_E/./src/common/components/layout/ScrollCards/ScrollCards.tsx","webpack://_N_E/./src/common/components/layout/ScrollCards/ScrollCardsWithTitle.tsx","webpack://_N_E/./src/common/icons/bottom-menu/search.tsx","webpack://_N_E/./src/common/icons/in-house.tsx","webpack://_N_E/./src/common/icons/new-games.tsx","webpack://_N_E/./src/common/icons/slots/favorite_v2.tsx","webpack://_N_E/./src/modules/slots/components/ListWrapper.styled.tsx","webpack://_N_E/./src/modules/slots/components/LoaderListItemWrapper.styled.tsx","webpack://_N_E/./src/modules/slots/components/NoGames.tsx","webpack://_N_E/./src/modules/slots/components/ProviderTile.tsx","webpack://_N_E/./src/modules/slots/components/HrizontalListWrapper.styled.tsx","webpack://_N_E/./src/modules/slots/components/ProvidersSection.tsx","webpack://_N_E/./src/common/components/progressBar/ProgressBar.styled.ts","webpack://_N_E/./src/modules/slots/components/ShowMore.tsx","webpack://_N_E/./src/modules/slots/components/SlotCategoryBanner.tsx","webpack://_N_E/./src/modules/slots/components/SlotsBreadcrumbs.tsx","webpack://_N_E/./src/modules/slots/components/SlotsGroupPromoBanner/SlotBannerConfig.tsx","webpack://_N_E/./src/modules/slots/components/SlotsGroupPromoBanner/SlotGroupPromoBanner.tsx","webpack://_N_E/./src/modules/slots/components/SlotsScrollCards.tsx","webpack://_N_E/./src/modules/slots/components/SlotsGridLayout.tsx","webpack://_N_E/./src/modules/slots/components/TileSlotsGrid.tsx","webpack://_N_E/./src/modules/slots/constants/Slots.constants.ts","webpack://_N_E/./src/modules/slots/context/SlotsBottomSectionsContext.ts","webpack://_N_E/./src/modules/slots/context/SlotsCategoriesContext.ts","webpack://_N_E/./src/modules/slots/context/SlotsFirstSectionContext.ts","webpack://_N_E/./src/modules/slots/hooks/useFetchCategories.ts","webpack://_N_E/./src/modules/slots/hooks/useFetchNewGames.ts","webpack://_N_E/./src/modules/slots/layouts/SlotCategory.layout.tsx"],"sourceRoot":"","sourcesContent":["import styled from 'styled-components';\n\nexport const StyledFlexContainer = styled.div`\n\tdisplay: flex;\n\tflex-wrap: wrap;\n`;\n","import { Input } from '@ui/input';\nimport { useCallback, useRef, useState } from 'react';\nimport useOnclickOutside from 'react-cool-onclickoutside';\nimport styled, { css } from 'styled-components';\nimport { Search } from '@icons/bottom-menu/search';\nimport {\n\tInputBoxStyled,\n\tInputIconWrapperStyled,\n\tInputStyled,\n\tInputWrapperStyled,\n} from '@ui/input/Input.styled';\nimport {\n\tDropdown,\n\tDropdownItemProps,\n\tStyledDropdownButtonWrapper,\n} from '@ui/dropdown';\nimport { useFetchSearchTerm } from '@modules/slots/hooks/useFetchSearchTerm';\nimport {\n\tStyledNoResults,\n\tuseFetchSearchDefault,\n} from '@modules/slots/components/search/SlotsSearchModal';\nimport { Loader } from '@legacyApp/client/components/loader/loader';\nimport {\n\tSlotsSearchResult,\n\tStyledResultLayout,\n} from '@modules/slots/components/search/SlotsSearchResult';\nimport { trans } from '@legacyApp/client/modules/translation/translate';\nimport { Size } from '@uiTypes/Size';\nimport { Slot } from '@modules/slots/store/slots.types';\nimport { simpleTrans } from '@legacyApp/client/modules/translation/translationService';\n\nconst mapSlotsToDropdown = (list: Array<Slot>): Array<DropdownItemProps> =>\n\tlist.map((slot) => {\n\t\tconst id = `${slot.game_id}_${slot.operator_id}`;\n\t\treturn {\n\t\t\tid,\n\t\t\tcontent: <SlotsSearchResult key={id} slot={slot} />,\n\t\t};\n\t});\n\nconst NO_RESULTS = [\n\t{\n\t\tid: 'no-result',\n\t\tcontent: (\n\t\t\t<StyledNoResults>{trans({ label: 'No results' })}</StyledNoResults>\n\t\t),\n\t},\n];\n\nconst LOADING = [\n\t{\n\t\tid: 'loading',\n\t\tcontent: (\n\t\t\t<StyledNoResults>\n\t\t\t\t<Loader active={true} />\n\t\t\t</StyledNoResults>\n\t\t),\n\t},\n];\n\nexport const GamesSearchBar = () => {\n\tconst [isOpen, setIsOpen] = useState<boolean>(false);\n\tconst focusRef = useRef(null);\n\n\tconst focus = useCallback(() => {\n\t\tif (typeof focusRef.current?.querySelector !== 'function') {\n\t\t\treturn;\n\t\t}\n\t\tconst input = focusRef.current.querySelector('input');\n\t\tif (typeof input?.focus === 'function') {\n\t\t\tinput.focus();\n\t\t}\n\t}, []);\n\n\tconst toggleOpen = useCallback(\n\t\t(event, isOpen_) => {\n\t\t\tif (typeof event?.preventDefault === 'function') {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tif (isOpen_ === undefined) {\n\t\t\t\tisOpen_ = !isOpen;\n\t\t\t}\n\n\t\t\tif (isOpen_ !== isOpen) {\n\t\t\t\tsetIsOpen(isOpen_);\n\t\t\t\tif (isOpen_) {\n\t\t\t\t\tfocus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[focus, isOpen],\n\t);\n\n\tconst handleClickOutside_ = useCallback(() => {\n\t\tsetTimeout(() => {\n\t\t\tif (!isOpen) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttoggleOpen(null, false);\n\t\t}, 150);\n\t}, [isOpen, toggleOpen]);\n\n\tconst outSideRef = useOnclickOutside(handleClickOutside_);\n\n\tconst { results, loading, setTerm, term } = useFetchSearchTerm();\n\tconst { list } = useFetchSearchDefault();\n\n\tconst getList = useCallback((): Array<DropdownItemProps> => {\n\t\tconst termResults = mapSlotsToDropdown(results);\n\t\tconst defaultResults = mapSlotsToDropdown(list);\n\n\t\tif (term?.length) {\n\t\t\tif (!loading) {\n\t\t\t\tif (results?.length) {\n\t\t\t\t\treturn termResults;\n\t\t\t\t} else {\n\t\t\t\t\treturn NO_RESULTS;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn LOADING;\n\t\t\t}\n\t\t} else {\n\t\t\treturn defaultResults;\n\t\t}\n\t}, [list, loading, results, term?.length]);\n\n\tconst list_ = getList();\n\n\treturn (\n\t\t<GameSearchBarStyled\n\t\t\t$isOpen={isOpen}\n\t\t\tref={outSideRef}\n\t\t\tonClick={(event) => toggleOpen(event, true)}\n\t\t>\n\t\t\t<Dropdown\n\t\t\t\tforceVisible={isOpen}\n\t\t\t\tdefaultActiveId={null}\n\t\t\t\tlist={list_}\n\t\t\t\tonSelect={null}\n\t\t\t\tsize={Size.LARGE}\n\t\t\t>\n\t\t\t\t<div ref={outSideRef}>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tvalue={term}\n\t\t\t\t\t\tplaceholder={simpleTrans('Search for game')}\n\t\t\t\t\t\tonChange={(event) => setTerm(event.target.value)}\n\t\t\t\t\t\ticon={<Search />}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</Dropdown>\n\t\t</GameSearchBarStyled>\n\t);\n};\n\nexport interface GameSearchBetStyledProps {\n\t$isOpen?: boolean;\n}\n\nexport const GameSearchBarStyled = styled.div<GameSearchBetStyledProps>`\n\twidth: ${(props) => (props.$isOpen ? '350px' : '42px')};\n\n\t${StyledDropdownButtonWrapper} {\n\t\t> div {\n\t\t\twidth: 100%;\n\t\t\tfloat: right;\n\t\t}\n\t}\n\n\t> div {\n\t\tfloat: left;\n\t\twidth: 100%;\n\t}\n\n\t${InputIconWrapperStyled} {\n\t\ttransition: right 300ms;\n\t\tleft: unset;\n\n\t\tsvg {\n\t\t\theight: 16px;\n\t\t\twidth: 16px;\n\t\t}\n\n\t\t${(props) =>\n\t\t\tprops.$isOpen\n\t\t\t\t? css`\n\t\t\t\t\t\tright: calc(100% - 28px);\n\t\t\t\t  `\n\t\t\t\t: css`\n\t\t\t\t\t\tright: 14px;\n\t\t\t\t  `}\n\t}\n\n\t${InputBoxStyled} {\n\t\talign-items: flex-end;\n\t}\n\n\t> div:not(${StyledDropdownButtonWrapper}) {\n  \tmax-width: 420px;\n\t}\n\n\t${InputWrapperStyled} {\n\n\t\t${(props) =>\n\t\t\tprops.$isOpen\n\t\t\t\t? css`\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t  `\n\t\t\t\t: css`\n\t\t\t\t\t\tbackground-color: var(--color-dark-500);\n\t\t\t\t\t\tborder-radius: 40px;\n\t\t\t\t\t\tbox-shadow: 0 1px 5px var(--color-dark-900);\n\t\t\t\t  `}\n\t}\n\n\t${InputStyled} {\n\t\tborder-radius: 40px;\n\t\ttransition:  width 300ms;\n\t\twidth: 100%;\n\t\tbox-shadow: 0 1px 5px var(--color-dark-900);\n\t\tfloat: right;\n\n\t\t${(props) =>\n\t\t\tprops.$isOpen\n\t\t\t\t? css``\n\t\t\t\t: css`\n\t\t\t\t\t\theight: 42px;\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\tpadding: 0;\n\t\t\t\t\t\twidth: 42px;\n\t\t\t\t  `}\n\t}\n\n\t${StyledResultLayout} {\n\t\tpadding: 0;\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media_v2.max_mobile_medium}) {\n\t\t${InputStyled} {\n\t\t\t${(props) =>\n\t\t\t\tprops.$isOpen\n\t\t\t\t\t? null\n\t\t\t\t\t: css`\n\t\t\t\t\t\t\theight: 36px;\n\t\t\t\t\t\t\twidth: 36px;\n\t\t\t\t\t  `}\n\t\t}\n\n\t\t${InputIconWrapperStyled} {\n\t\t\tsvg {\n\t\t\t\theight: 12px;\n\t\t\t\twidth: 12px;\n\t\t\t}\n\n\t\t\t${(props) =>\n\t\t\t\tprops.$isOpen\n\t\t\t\t\t? css`\n\t\t\t\t\t\t\tright: calc(100% - 28px);\n\t\t\t\t\t  `\n\t\t\t\t\t: css`\n\t\t\t\t\t\t\tright: 12px;\n\t\t\t\t\t  `}\n\t\t}\n\t}\n\n\t${(props) =>\n\t\tprops.$isOpen\n\t\t\t? css`\n\t\t\t\t\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\t\t\t\t\twidth: calc(100% - 32px);\n\t\t\t\t\t}\n\n\t\t\t\t\t@media (max-width: ${(props) =>\n\t\t\t\t\t\t\tprops.theme.media_v2.max_mobile_medium}) {\n\t\t\t\t\t\twidth: calc(100% - 24px);\n\t\t\t\t\t}\n\t\t\t  `\n\t\t\t: css`\n\t\t\t\t\t@media (max-width: ${(props) =>\n\t\t\t\t\t\t\tprops.theme.media_v2.max_mobile_medium}) {\n\t\t\t\t\t\twidth: 36px;\n\t\t\t\t\t}\n\t\t\t  `}\n\t}\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { trans } from '@legacyApp/client/modules/translation/translate';\n\nimport { StyledGamesList } from '@common/components/games/GamesList/GamesList.styled';\nimport { AVAILABLE_OFFER, MainPageOfferButton } from '@common/components/layout/MainPageOfferButton/MainPageOfferButton';\nimport { ScrollCardsWithTitle } from '@common/components/layout/ScrollCards/ScrollCardsWithTitle';\n\nexport const Inhouse: FC<{\n\tnoName?: boolean;\n}> = ({ noName }) => {\n\treturn (\n\t\t<>\n\t\t\t<ScrollCardsWithTitle\n\t\t\t\tname={!noName && trans({ label: 'In house' })}\n\t\t\t\tnoList\n\t\t\t>\n\t\t\t\t<StyledGamesGrid>\n\t\t\t\t\t<StyledOfferList $length={AVAILABLE_OFFER?.length}>\n\t\t\t\t\t\t{AVAILABLE_OFFER.map((offer) => {\n\t\t\t\t\t\t\treturn <MainPageOfferButton key={offer} offerName={offer} />;\n\t\t\t\t\t\t})}\n\t\t\t\t\t</StyledOfferList>\n\t\t\t\t</StyledGamesGrid>\n\t\t\t</ScrollCardsWithTitle>\n\t\t</>\n\t);\n};\n\nconst StyledGamesGrid = styled.div`\n\tdisplay: flex;\n\tjustify-content: center;\n`;\n\nconst StyledOfferList = styled(StyledGamesList) <{\n\t$length: number;\n}>`\n\tgrid-template-columns: repeat(${(props) => props.$length}, auto);\n\tpadding: 0;\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\tgrid-template-columns: repeat(2, auto);\n\t}\n`;\n","import styled from 'styled-components';\nimport { TabNavigationStyled } from '@ui/tab-navigation/TabNavigation.styled';\nimport { GameSearchBarStyled } from './GamesSearchBar';\n\nexport const SectionsTabNavStyled = styled.div`\n\tfloat: left;\n\tposition: relative;\n\twidth: 100%;\n\n\t${GameSearchBarStyled} {\n\t\tposition: absolute;\n\t\tright: 16px;\n\t\ttop: 15px;\n\t\tz-index: 3;\n\n\t\t&:before {\n\t\t\tbackground-color: var(--color-dark-700);\n\t\t\tcontent: '';\n\t\t\tborder-top-left-radius: 46px;\n\t\t\tborder-bottom-left-radius: 46px;\n\t\t\theight: 105%;\n\t\t\tleft: 0;\n\t\t\tposition: absolute;\n\t\t\ttop: -2.5%;\n\t\t\twidth: calc(100% + 6px);\n\t\t\tz-index: 0;\n\t\t\ttransition: 300ms;\n\t\t}\n\t}\n\n\t${TabNavigationStyled} {\n\t\tborder-bottom-right-radius: 0;\n\t\tborder-top-right-radius: 0;\n\t\tpadding-right: 30px;\n\t\twidth: calc(100% - 15px);\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media_v2.max_mobile_medium}) {\n\t\t${GameSearchBarStyled} {\n\t\t\tright: 12px;\n\t\t\ttop: 12px;\n\t\t}\n\n\t\tdiv.margin-top-48 {\n\t\t\tmargin-top: 24px;\n\t\t}\n\t}\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { categoriesIcons } from '@icons/slots/categories';\nimport { NewGamesIcon } from '@icons/slots/categories/NewGamesIcon';\nimport { generateUrl, ROUTE } from 'src/common/routes';\nimport { LinkTo } from 'src/common/components/default/LinkTo/LinkTo';\nimport { HomeIcon, SearchIcon } from 'src/common/icons/slots';\nimport { openModal } from 'src/modules/modals/store/modal.actions';\nimport { useAppDispatch } from 'src/LegacyApp/hooks/store/useAppDispatch';\nimport { useUserIsLogged } from 'src/common/selectors/user.selectors';\nimport { MODAL_ID } from 'src/common/constants/modal/ids.modal.constants';\nimport {\n\tTranslateOrString,\n\tTransProps,\n} from 'src/LegacyApp/client/modules/translation/translate';\nimport { theme } from 'src/LegacyApp/client/modules/style/theme';\nimport FavoriteIcon from 'src/common/icons/slots/favorite';\nimport { useFetchCategories } from 'src/modules/slots/hooks/useFetchCategories';\nimport { EmptyIcon } from 'src/common/components/icons/Icon';\nimport { SlotCategoryDTO } from 'src/modules/slots/store/slots.types';\nimport { useGetDataArray } from 'src/LegacyApp/hooks/fetch/useGetDataArray';\nimport { TransNamespace } from '@legacyApp/client/modules/translation/TransNamespace';\n\nexport interface MenuItem {\n\tname: string | TransProps;\n\ticon: FC<{\n\t\theight?: number;\n\t\twidth?: number;\n\t\tcolor?: string;\n\t}>;\n\turl: string;\n\tonClick?: () => void;\n}\n\nconst StyledMenuContainer = styled.div`\n\tdisplay: flex;\n\tmargin: 0 auto;\n`;\n\nconst StyledMenuWrapper = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\toverflow-x: auto;\n\tpadding: 0.5rem 0 0;\n`;\n\nconst StyledMenuItem = styled.div`\n\tcursor: pointer;\n\tdisplay: block;\n\tfont-family: ${(props): string => props.theme.text.fonts.Regular};\n\theight: 60px;\n\tpadding: 0 0.6rem;\n\ttext-align: center;\n\twhite-space: nowrap;\n\n\t@media (max-width: ${(props): string =>\n\t\t\tprops.theme.media.maxWidthSmallTablet}) {\n\t\theight: 50px;\n\t\tpadding: 0 0.4rem;\n\t}\n\n\t&:hover {\n\t\topacity: 0.65;\n\t}\n`;\n\nconst StyledIconWrapper = styled.div`\n\theight: 35px;\n\n\tsvg {\n\t\theight: 30px;\n\t}\n\n\t@media (max-width: ${(props): string =>\n\t\t\tprops.theme.media.maxWidthSmallTablet}) {\n\t\theight: 30px;\n\n\t\tsvg {\n\t\t\theight: 25px;\n\t\t}\n\t}\n`;\n\nconst StyledIconName = styled.div`\n\t@media (max-width: ${(props): string =>\n\t\t\tprops.theme.media.maxWidthSmallTablet}) {\n\t\tfont-size: 12px;\n\t}\n`;\n\nexport const filterMenuCategories = (\n\tcategories: SlotCategoryDTO[],\n): SlotCategoryDTO[] => {\n\treturn categories.filter((category) => !!category.show_in_menu);\n};\n\nexport const useMenuCategories = (): SlotCategoryDTO[] => {\n\tconst { callback, options } = useFetchCategories();\n\tconst { data: categories } = useGetDataArray<SlotCategoryDTO>(\n\t\t'menu-categories',\n\t\tcallback,\n\t\toptions,\n\t);\n\treturn filterMenuCategories(categories);\n};\n\nexport const SlotsMenu: React.FC = () => {\n\tconst dispatch = useAppDispatch();\n\tconst isLogged = useUserIsLogged();\n\n\tconst menuCategories = useMenuCategories();\n\n\tconst menuItems: MenuItem[] = [\n\t\t{\n\t\t\tname: { label: 'Home' },\n\t\t\ticon: (props) => <HomeIcon {...props} />,\n\t\t\turl: generateUrl(ROUTE.slotsHomePage),\n\t\t},\n\t\tisLogged && {\n\t\t\tname: { label: 'My Favorite', namespace: TransNamespace.SLOTS },\n\t\t\ticon: (props) => <FavoriteIcon {...props} />,\n\t\t\turl: generateUrl(ROUTE.slotFavorites),\n\t\t},\n\t\t...menuCategories.map((category): MenuItem => {\n\t\t\treturn {\n\t\t\t\tname: { label: category.name, namespace: TransNamespace.SLOTS },\n\t\t\t\ticon: (props): ReturnType<FC> => {\n\t\t\t\t\tconst Icon = categoriesIcons[category.slug] || EmptyIcon;\n\t\t\t\t\treturn <Icon {...props} />;\n\t\t\t\t},\n\t\t\t\turl: generateUrl(ROUTE.slotCategoryPage, {\n\t\t\t\t\tcategory: category.slug,\n\t\t\t\t}),\n\t\t\t};\n\t\t}),\n\t\t{\n\t\t\tname: { label: 'New Games', namespace: TransNamespace.SLOTS },\n\t\t\ticon: (props) => <NewGamesIcon {...props} />,\n\t\t\turl: generateUrl(ROUTE.slotNewGames),\n\t\t},\n\t\t{\n\t\t\tname: { label: 'Search' },\n\t\t\ticon: (props) => <SearchIcon {...props} />,\n\t\t\turl: null,\n\t\t\tonClick: () => dispatch(openModal(MODAL_ID.SLOT_SEARCH, 'SlotsMenu')),\n\t\t},\n\t];\n\n\treturn (\n\t\t<StyledMenuWrapper>\n\t\t\t<StyledMenuContainer>\n\t\t\t\t{menuItems.map((item, index) => {\n\t\t\t\t\tif (!item) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tconst props = {\n\t\t\t\t\t\theight: 55,\n\t\t\t\t\t\twidth: 55,\n\t\t\t\t\t\tcolor: theme.colors.active,\n\t\t\t\t\t};\n\t\t\t\t\tconst component = (\n\t\t\t\t\t\t<StyledMenuItem key={index} onClick={item.onClick}>\n\t\t\t\t\t\t\t<StyledIconWrapper>{item.icon(props)}</StyledIconWrapper>\n\t\t\t\t\t\t\t<StyledIconName>\n\t\t\t\t\t\t\t\t<TranslateOrString label={item.name} />\n\t\t\t\t\t\t\t</StyledIconName>\n\t\t\t\t\t\t</StyledMenuItem>\n\t\t\t\t\t);\n\n\t\t\t\t\tif (item.onClick) {\n\t\t\t\t\t\treturn component;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<LinkTo forceATag={true} key={`link-${index}`} href={item.url}>\n\t\t\t\t\t\t\t{component}\n\t\t\t\t\t\t</LinkTo>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</StyledMenuContainer>\n\t\t</StyledMenuWrapper>\n\t);\n};\n","import styled from 'styled-components';\n\nexport const StyledSlotsSectionsContainer = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-top: 8px;\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\tpadding-bottom: 50px;\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media_v2.max_mobile_medium}) {\n\t\tmargin-top: 4px;\n\t\tpadding-bottom: 25px;\n\t}\n`;\n","import { FC, useCallback } from 'react';\nimport styled from 'styled-components';\n\nimport { useUserIsAdmin } from '@common/selectors/user.selectors';\nimport { useGetDataArray } from '@legacyApp/hooks/fetch/useGetDataArray';\nimport { useFetchProviders } from '@modules/slots/hooks/useFetchProviders';\nimport { SLOTS_SCROLL_CARD_COUNT } from '@modules/slots/constants/Slots.constants';\nimport { ProviderDTO } from '@modules/slots/store/slots.types';\n\nimport { ScrollCardsWithTitle } from '@common/components/layout/ScrollCards/ScrollCardsWithTitle';\nimport { ProviderTile } from '@modules/slots/components/ProviderTile';\n\nconst StyledProvidersSection = styled.div`\n\tmargin-bottom: 15px;\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\tmargin-bottom: 10px;\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthSmallTablet}) {\n\t\tmargin-bottom: 5px;\n\t}\n`;\n\nconst StyledProviderTileWrapper = styled.div`\n\tmargin-right: 10px;\n`;\n\ninterface ProvidersScrollCardsProps {\n\tname?: any;\n}\n\nexport const ProvidersScrollCards: FC<ProvidersScrollCardsProps> = ({\n\tname,\n}) => {\n\tconst { callback, options } = useFetchProviders();\n\n\tconst providersCallback = useCallback(\n\t\t() => callback(SLOTS_SCROLL_CARD_COUNT),\n\t\t[callback],\n\t);\n\n\tconst userIsAdmin = useUserIsAdmin();\n\n\tconst { data: providers_, count } = useGetDataArray<ProviderDTO>(\n\t\t`providers-${userIsAdmin}`,\n\t\tprovidersCallback,\n\t\toptions,\n\t);\n\n\treturn (\n\t\t<StyledProvidersSection>\n\t\t\t<ScrollCardsWithTitle\n\t\t\t\tname={name}\n\t\t\t\tcount={count}\n\t\t\t\thref={'/slots/provider/all'}\n\t\t\t\tlist={providers_.map((provider: ProviderDTO) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: provider.name,\n\t\t\t\t\t\tcomponent: (\n\t\t\t\t\t\t\t<StyledProviderTileWrapper key={provider.id}>\n\t\t\t\t\t\t\t\t<ProviderTile\n\t\t\t\t\t\t\t\t\tslug={provider.slug}\n\t\t\t\t\t\t\t\t\tisNew={provider.new}\n\t\t\t\t\t\t\t\t\tname={provider.name}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</StyledProviderTileWrapper>\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t})}\n\t\t\t/>\n\t\t</StyledProvidersSection>\n\t);\n};\n","import { isFunction } from '@common/methods/isFunction';\nimport { SlotCategoryDTO } from '../store/slots.types';\nimport { SLOTS_SCROLL_CARD_COUNT } from '../constants/Slots.constants';\n\nexport const getMainPageCategories = async (\n\tgetSlots,\n\tcategories: SlotCategoryDTO[],\n\tnewGames,\n) => {\n\tconst sections = [];\n\tfor (const category of categories) {\n\t\tconst games = isFunction(getSlots)\n\t\t\t? await getSlots({\n\t\t\t\t\tcount: SLOTS_SCROLL_CARD_COUNT,\n\t\t\t\t\tcategoryId: category.id,\n\t\t\t  })\n\t\t\t: { list: [{}] };\n\t\tif (games?.list?.length) {\n\t\t\tsections.push({\n\t\t\t\tgames,\n\t\t\t\tcategory,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (newGames?.list?.length) {\n\t\tsections.splice(4, 0, {\n\t\t\tgames: newGames,\n\t\t\tcategory: {\n\t\t\t\tid: null,\n\t\t\t\tname: 'New Games',\n\t\t\t\tslug: 'new-games',\n\t\t\t\tshow_in_menu: true,\n\t\t\t\tcreated_at: null,\n\t\t\t},\n\t\t});\n\t}\n\n\t// console.log('getMainPageCategories', sections, { categories, newGames });\n\n\tconst [firstSection, ...bottomSections] = sections.filter(\n\t\t(section) => !!section.games?.list?.length,\n\t);\n\n\treturn {\n\t\tbottomSections: bottomSections || [],\n\t\tfirstSection: firstSection || {},\n\t};\n};\n","import React, { FC, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { StyledSlotsSectionsContainer } from '@modules/slots/components/SlotsSectionsContainer.styled';\n\nimport { SlotsScrollCards } from '@modules/slots/components/SlotsScrollCards';\nimport { transSlots } from '@legacyApp/client/modules/translation/translate';\nimport { ProvidersScrollCards } from '@modules/slots/components/ProvidersScrollCards';\nimport { StyledSlotContainer } from '@modules/slots/layouts/SlotCategory.layout';\nimport { useMainSections } from '@modules/slots/hooks/useMainPageSections';\nimport { updateUrlQuery } from '@legacyApp/client/store/app/app.actions';\nimport { SlotGroupPromoBanner } from '@modules/slots/components/SlotsGroupPromoBanner/SlotGroupPromoBanner';\nimport { SlotBannerConfig } from '@modules/slots/components/SlotsGroupPromoBanner/SlotBannerConfig';\nimport { Inhouse } from './Inhouse';\n\nexport const Lobby: FC = () => {\n\tconst { firstSection: _firstSection, bottomSections: _bottomSections } =\n\t\tuseMainSections();\n\n\tconst dispatch = useDispatch();\n\n\tuseEffect(() => {\n\t\tdispatch(updateUrlQuery({ tab: undefined }));\n\t}, [dispatch]);\n\n\treturn (\n\t\t<StyledSlotContainer>\n\t\t\t<StyledSlotsSectionsContainer>\n\t\t\t\t<SlotGroupPromoBanner\n\t\t\t\t\tslug={SlotBannerConfig.slug}\n\t\t\t\t\tclassName=\"maxWidthMobile:mt-[-20px] minWidthSmallTablet:mt-[-25px] block\"\n\t\t\t\t/>\n\t\t\t\t<Inhouse />\n\t\t\t\t{_firstSection?.category?.name && (\n\t\t\t\t\t<SlotsScrollCards\n\t\t\t\t\t\tname={transSlots({ label: _firstSection.category.name })}\n\t\t\t\t\t\tcategory={_firstSection.category}\n\t\t\t\t\t\tslots={_firstSection.games?.list || []}\n\t\t\t\t\t\tcount={_firstSection.games?.length || 0}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<ProvidersScrollCards name={transSlots({ label: 'Providers' })} />\n\t\t\t\t{!!_bottomSections.length &&\n\t\t\t\t\t_bottomSections?.map((section) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SlotsScrollCards\n\t\t\t\t\t\t\t\tkey={section.category.id}\n\t\t\t\t\t\t\t\tname={transSlots({ label: section.category.name })}\n\t\t\t\t\t\t\t\tcategory={section.category}\n\t\t\t\t\t\t\t\tslots={section.games?.list || []}\n\t\t\t\t\t\t\t\tcount={section.games?.length || 0}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t</StyledSlotsSectionsContainer>\n\t\t</StyledSlotContainer>\n\t);\n};\n","import { useContext, useEffect } from 'react';\nimport { useGetDataArray } from '@legacyApp/hooks/fetch/useGetDataArray';\nimport { getMainPageCategories } from '../methods/getMainPageCategories';\nimport { SlotsFirstSectionContext } from '../context/SlotsFirstSectionContext';\nimport { SlotsBottomSectionsContext } from '../context/SlotsBottomSectionsContext';\nimport { SlotCategoryDTO } from '../store/slots.types';\nimport { useFetchCategories } from './useFetchCategories';\n\nexport const useMainSections = () => {\n\tconst { firstSection, setFirstSection } = useContext(\n\t\tSlotsFirstSectionContext,\n\t);\n\tconst { bottomSections, setBottomSections } = useContext(\n\t\tSlotsBottomSectionsContext,\n\t);\n\n\tconst { callback, options } = useFetchCategories();\n\tconst { data: categories } = useGetDataArray<SlotCategoryDTO>(\n\t\t'useMainPageSections-categories',\n\t\tcallback,\n\t\toptions,\n\t);\n\n\tuseEffect(() => {\n\t\tif (categories?.length && (!bottomSections?.length || !firstSection)) {\n\t\t\tgetMainPageCategories(undefined, categories, { list: [{}] }).then(\n\t\t\t\t({ firstSection: firstSection_, bottomSections: bottomSections_ }) => {\n\t\t\t\t\tif (firstSection_?.games?.list?.length) {\n\t\t\t\t\t\tsetFirstSection(firstSection_);\n\t\t\t\t\t}\n\t\t\t\t\tif (bottomSections_?.length) {\n\t\t\t\t\t\tsetBottomSections(bottomSections_);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [categories?.length]);\n\n\treturn {\n\t\tfirstSection,\n\t\tbottomSections,\n\t};\n};\n","import React, { FC, MouseEvent } from 'react';\nimport { TabNavigationProps } from '@ui/tab-navigation';\nimport { useDispatch } from 'react-redux';\nimport { Lobby } from '@icons/lobby';\nimport { InHouse } from '@icons/in-house';\nimport { FavoriteIconV2 } from '@icons/slots/favorite_v2';\nimport { NewGames } from '@icons/new-games';\n\nimport { useMenuCategories } from '@modules/slots/components/SlotsMenu';\nimport { generateUrl, ROUTE } from '@common/routes';\nimport { generateSlotsHomeUrl } from '@modules/slots/services/Slots.service';\nimport { appGoTo } from '@legacyApp/client/store/app/app.actions';\nimport { useUserIsLogged } from '@common/selectors/user.selectors';\nimport { TransNamespace } from '@legacyApp/client/modules/translation/TransNamespace';\nimport { Icon } from '../../icons';\nimport { TabNavigation } from '../../TabNavigation';\nimport { Inhouse as InHouseContent } from './Inhouse';\nimport { Lobby as LobbyContent } from './Lobby';\nimport { GamesSearchBar } from './GamesSearchBar';\nimport { SectionsTabNavStyled } from './SectionTabNav.styled';\n\nexport const SectionsTabNav: FC<{\n\tactiveTabId?: string;\n\tdefaultTabId?: string;\n}> = ({ activeTabId, defaultTabId }) => {\n\tconst isLogged = useUserIsLogged();\n\tconst menuCategories = useMenuCategories();\n\tconst dispatch = useDispatch();\n\n\tconst onClickIndexPaths: TabNavigationProps['onClick'] = (\n\t\tevent: MouseEvent,\n\t\t{ id }: { id: string },\n\t) => {\n\t\tdispatch(appGoTo(generateSlotsHomeUrl(id ? { tab: id } : undefined), true));\n\t};\n\n\tconst onClickRoutePaths = (route: ROUTE, category?: string) =>\n\t\tdispatch(\n\t\t\tappGoTo(\n\t\t\t\tgenerateUrl(route, {\n\t\t\t\t\tcategory,\n\t\t\t\t}),\n\t\t\t\ttrue,\n\t\t\t),\n\t\t);\n\n\tconst TABS: TabNavigationProps['tabs'] = [\n\t\t{\n\t\t\tid: 'lobby',\n\t\t\tlabel: { label: 'Lobby' },\n\t\t\ticon: Lobby,\n\t\t\tcontent: LobbyContent,\n\t\t\tonClick: onClickIndexPaths,\n\t\t},\n\t\tisLogged && {\n\t\t\tid: 'favorite',\n\t\t\tlabel: { label: 'My Favorite', namespace: TransNamespace.SLOTS },\n\t\t\ticon: (props) => <FavoriteIconV2 {...props} />,\n\t\t\tonClick: () => onClickRoutePaths(ROUTE.slotFavorites),\n\t\t},\n\t\t{\n\t\t\tid: 'in-house',\n\t\t\tlabel: { label: 'In House' },\n\t\t\ticon: InHouse,\n\t\t\tcontent: () => <InHouseContent noName />,\n\t\t\tonClick: onClickIndexPaths,\n\t\t\tdoNotShowInTabs: true,\n\t\t},\n\t\t{\n\t\t\tid: 'casino',\n\t\t\tlabel: { label: 'In House' },\n\t\t\ticon: InHouse,\n\t\t\tonClick: () => onClickRoutePaths(ROUTE.slotCasino),\n\t\t},\n\t\t...menuCategories.map((category) => {\n\t\t\treturn {\n\t\t\t\tid: category.slug,\n\t\t\t\tlabel: { label: category.name, namespace: TransNamespace.SLOTS },\n\t\t\t\ticon: (props) => <Icon id={category.slug} props={props} />,\n\t\t\t\tonClick: () => onClickRoutePaths(ROUTE.slotCategoryPage, category.slug),\n\t\t\t};\n\t\t}),\n\t\t{\n\t\t\tid: 'new-games',\n\t\t\tlabel: { label: 'New Games', namespace: TransNamespace.SLOTS },\n\t\t\ticon: NewGames,\n\t\t\tonClick: () => onClickRoutePaths(ROUTE.slotCategoryPage, 'new-games'),\n\t\t},\n\t].filter((el) => !!el);\n\n\treturn (\n\t\t<SectionsTabNavStyled>\n\t\t\t<GamesSearchBar />\n\t\t\t<TabNavigation\n\t\t\t\ttabs={TABS}\n\t\t\t\tactiveTabId={activeTabId}\n\t\t\t\tdefaultTabId={defaultTabId}\n\t\t\t/>\n\t\t</SectionsTabNavStyled>\n\t);\n};\n","import styled, { css } from 'styled-components';\n\nconst ARROW_COLOR = 'white';\n\nexport const controlArrow = css`\n\t&:before {\n\t\tborder-bottom: 2px solid ${ARROW_COLOR} !important;\n\t\tborder-left: unset !important;\n\t\tborder-right: 2px solid ${ARROW_COLOR} !important;\n\t\tborder-top: unset !important;\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\theight: 6px;\n\t\twidth: 6px;\n\t}\n\n\t&.control-next:before {\n\t\ttransform: rotate(315deg);\n\t}\n\n\t&.control-prev:before {\n\t\ttransform: rotate(135deg);\n\t}\n`;\n\nexport const StyledControlArrow = styled.div.attrs((props) => ({\n\t...props,\n\tclassName: `control-${props.$type}`,\n}))`\n\t${controlArrow};\n\n\t&.control-next {\n\t\tmargin-left: 10px;\n\t\tmargin-right: 9px;\n\t}\n\n\t&.control-prev {\n\t\tmargin-left: 11px;\n\t\tmargin-right: 9px;\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\tpadding: 10px 0;\n\n\t\t&.control-next {\n\t\t\tpadding-right: 15px;\n\t\t}\n\t}\n`;\n","import { CSSProperties } from 'react';\nimport { MenuProps } from './types';\n\n/**\n * Default styles for ScrollMenu component\n */\nconst defaultMenuStyle: CSSProperties = {\n\talignItems: 'center',\n\tdisplay: 'flex',\n\tuserSelect: 'none',\n};\n\n/**\n * Default styles for OuterWrapper component\n */\nconst defaultWrapperStyle: CSSProperties = {\n\toverflow: 'hidden',\n\tuserSelect: 'none',\n};\n\n/**\n * Default styles for InnerWrapper component\n */\nconst defaultInnerWrapperStyle: CSSProperties = {\n\ttextAlign: 'left',\n};\n\n/**\n * Default styles for item Wrapper component\n */\nconst defaultItemWrapperStyle: CSSProperties = {\n\tdisplay: 'inline-block',\n};\n\n/**\n * Default props for ScrollMenu component\n */\nconst defaultProps: MenuProps = {\n\t/** align menu items to center, so in left and right will be empty space */\n\talignCenter: true,\n\t/** align items after window resize */\n\talignOnResize: true,\n\t/** class for Arrow component */\n\tarrowClass: 'scroll-menu-arrow',\n\t/** class for arrow when it's disabled */\n\tarrowDisabledClass: 'scroll-menu-arrow--disabled',\n\t/** Arrows components */\n\tarrowLeft: null,\n\tarrowRight: null,\n\t/** when drag item and mouse button mouseup choose menu item under cursor  */\n\tclickWhenDrag: false,\n\t/** enable/disable dragging with mouse */\n\t/** array of MenuItem elements */\n\tdata: [],\n\tdragging: true,\n\t/** enable/disable inertia scrolling */\n\t/** add disabled class to arrows */\n\thideArrows: false,\n\t/** hide left/right arrow on left/right edge */\n\thideSingleArrow: false,\n\t/** class for ScrollMenu */\n\tinertiaScrolling: false,\n\t/** slow down factor for inertia scrolling */\n\tinertiaScrollingSlowdown: 0.25,\n\t/** class for InnerWrapper */\n\tinnerWrapperClass: 'menu-wrapper--inner',\n\t/** styles for InnerWrapper */\n\tinnerWrapperStyle: defaultInnerWrapperStyle,\n\t/** class for MenuItem */\n\titemClass: 'menu-item-wrapper',\n\t/** class for selected MenuItem */\n\titemClassActive: 'active',\n\t/** styles for menuItem */\n\titemStyle: defaultItemWrapperStyle,\n\tmenuClass: 'horizontal-menu',\n\t/** styles for ScrollMenu */\n\tmenuStyle: defaultMenuStyle,\n\t/** cb for first item reached */\n\tonFirstItemVisible: () => false,\n\t/** cb for last item reached */\n\tonLastItemVisible: () => false,\n\t/** cb when item selected */\n\tonSelect: () => false,\n\t/** cb when position updated */\n\tonUpdate: () => false,\n\t/** how many items to scroll, 0 for all visible */\n\tscrollBy: 0,\n\t/** automatically scroll to selected item on initialization */\n\tscrollToSelected: false,\n\t/** selected menu item */\n\tselected: '',\n\t/** animation speed */\n\ttransition: 0.4,\n\t/** position of elements */\n\ttranslate: 0.0,\n\t/** use button role for items */\n\tuseButtonRole: true,\n\t/** class for wrapper */\n\twrapperClass: 'menu-wrapper',\n\t/** styles for wrapper */\n\twrapperStyle: defaultWrapperStyle,\n\t/** scroll with mouse wheel */\n\t// tslint:disable-next-line:object-literal-sort-keys\n\twheel: true,\n\t/** this not used */\n\txPoint: 0,\n\tdisableTabindex: false,\n\t/** for rtl languages */\n\trtl: false,\n\t/** minimum require value to activate move left/right */\n\ttouchMoveThreshold: 10,\n\t/** Correction for value which decides if element is fully visible */\n\telemVisForMargThreshold: 0.96,\n};\n\nexport { defaultMenuStyle, defaultProps, defaultWrapperStyle };\n","import React, { CSSProperties } from 'react';\nimport { defaultProps } from './defautSettings';\nimport { Data, RefObject, Void } from './types';\n\ninterface ArrowWrapperProps {\n\tclassName: string;\n\t// tslint:disable-next-line:ban-types\n\tonClick: Function;\n\tchildren: JSX.Element;\n\tisDisabled: boolean;\n\tdisabledClass?: string;\n}\n\nconst ArrowDefaultProps = {\n\tdisabledClass: defaultProps.arrowDisabledClass,\n};\n\n/** Wrapper component for arrows */\nexport class ArrowWrapper extends React.PureComponent<ArrowWrapperProps> {\n\tpublic static defaultProps = ArrowDefaultProps;\n\n\tpublic render(): React.ReactNode {\n\t\tconst {\n\t\t\tisDisabled,\n\t\t\tclassName: clsName,\n\t\t\tdisabledClass,\n\t\t\tonClick,\n\t\t\tchildren,\n\t\t} = this.props;\n\t\tconst className = `${clsName} ${isDisabled ? disabledClass : ''}`;\n\t\tconst clickHandler = (): Void => {\n\t\t\treturn onClick();\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={className} onClick={clickHandler}>\n\t\t\t\t{children ? React.cloneElement(children, children?.props) : null}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\ninterface InnerStyleProps {\n\ttranslate: number;\n\tdragging: boolean;\n\tmounted: boolean;\n\ttransition: number;\n\tinertiaScrolling: boolean;\n\trtl: boolean;\n}\n\n/** function to get default styles for innerWrapper */\nexport const innerStyle = ({\n\ttranslate,\n\tdragging,\n\tmounted,\n\ttransition,\n\tinertiaScrolling,\n\trtl,\n}: InnerStyleProps): CSSProperties => {\n\treturn {\n\t\ttransform: `translate3d(${rtl ? -translate : translate}px, 0, 0)`,\n\t\ttransition:\n\t\t\t`transform ${dragging || !mounted ? '0' : transition}s` +\n\t\t\t(inertiaScrolling ? ' ease-out' : ''),\n\t\twhiteSpace: 'nowrap',\n\t};\n};\n\ninterface InnerWrapperProps {\n\tdata: Data;\n\t// setRef: Function;\n\tsetRef: (ref: RefObject) => Void;\n\tsetMenuInnerRef: (arg0: any) => Void;\n\t// tslint:disable-next-line:ban-types\n\tonClick: Function;\n\ttranslate: number;\n\tdragging: boolean;\n\tmounted: boolean;\n\ttransition: number;\n\tselected: string | number;\n\tinnerWrapperStyle: object;\n\tinnerWrapperClass: string;\n\titemStyle: object;\n\titemClass: string;\n\titemClassActive: string;\n\tinertiaScrolling: boolean;\n\tuseButtonRole: boolean;\n\tdisableTabindex: boolean;\n\trtl: boolean;\n}\n\ninterface InnerWrapperState {\n\titems: JSX.Element[];\n\tdata: Data;\n\tselected: string | number;\n}\n\n// ** innerWrapper component, menuItems will be children */\n// tslint:disable-next-line:max-classes-per-file\nexport class InnerWrapper extends React.PureComponent<\n\tInnerWrapperProps,\n\tInnerWrapperState\n> {\n\tconstructor(props: InnerWrapperProps) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tdata: [],\n\t\t\titems: [],\n\t\t\tselected: '',\n\t\t};\n\t}\n\n\tpublic static defaultProps = {\n\t\tdata: [],\n\t\tdragging: true,\n\t\tmounted: false,\n\t\tselected: defaultProps.selected,\n\t\ttransition: defaultProps.transition,\n\t\ttranslate: defaultProps.translate,\n\t};\n\n\tpublic static getDerivedStateFromProps(\n\t\tprops: InnerWrapperProps,\n\t\tstate: InnerWrapperState,\n\t) {\n\t\tif (state.data !== props.data || state.selected !== props.selected) {\n\t\t\treturn {\n\t\t\t\tdata: props.data,\n\t\t\t\titems: InnerWrapper.setItems(props.data, props.selected, props.onClick),\n\t\t\t\tselected: props.selected,\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/** set ref of this component */\n\tpublic setMenuInnerRef = (value: HTMLDivElement | null): Void => {\n\t\tconst { setMenuInnerRef } = this.props;\n\t\tsetMenuInnerRef({ menuInner: { key: 'menuInner', elem: value } });\n\t};\n\n\t/** set ref for menuItems */\n\tpublic setRef = (\n\t\tkey: string,\n\t\telKey: string,\n\t\tindex: number,\n\t\tvalue: HTMLDivElement | null,\n\t): Void => {\n\t\tconst { setRef } = this.props;\n\t\tsetRef({ [key]: { index, key: elKey, elem: value } });\n\t};\n\n\t/** check if menuItem active */\n\tpublic static isElementActive = (\n\t\titemId: string | number | null,\n\t\tselected: string | number,\n\t): boolean => String(itemId) === String(selected);\n\n\t/** make array of menuItems */\n\tpublic static setItems = (\n\t\tarr: JSX.Element[],\n\t\tselected: React.ReactText,\n\t\t// tslint:disable-next-line: ban-types\n\t\tselectItem: Function,\n\t): JSX.Element[] => {\n\t\tconst items = arr.map((el) => {\n\t\t\tconst { onClick = () => false } = el.props;\n\t\t\tconst props = {\n\t\t\t\tonClick: () =>\n\t\t\t\t\tInnerWrapper.forwardClickHandler(el.key, onClick, selectItem),\n\t\t\t\tselected: InnerWrapper.isElementActive(el.key, selected),\n\t\t\t};\n\t\t\treturn React.cloneElement(el, props);\n\t\t});\n\t\treturn items;\n\t};\n\n\tpublic static forwardClickHandler =\n\t\t(\n\t\t\tkey: any,\n\t\t\t// tslint:disable-next-line:ban-types\n\t\t\tonClick: Function = () => false,\n\t\t\t// tslint:disable-next-line:ban-types\n\t\t\tselectItem: Function,\n\t\t) =>\n\t\t(): Void => {\n\t\t\tonClick();\n\t\t\tselectItem(key);\n\t\t};\n\n\tpublic render() {\n\t\tconst {\n\t\t\ttranslate,\n\t\t\tdragging,\n\t\t\tmounted,\n\t\t\ttransition,\n\t\t\tinnerWrapperStyle,\n\t\t\tinnerWrapperClass,\n\t\t\titemStyle,\n\t\t\titemClass,\n\t\t\titemClassActive,\n\t\t\tinertiaScrolling,\n\t\t\tuseButtonRole,\n\t\t\tdisableTabindex,\n\t\t\trtl,\n\t\t} = this.props;\n\n\t\tconst style: CSSProperties = innerStyle({\n\t\t\tdragging,\n\t\t\tinertiaScrolling,\n\t\t\tmounted,\n\t\t\trtl,\n\t\t\ttransition,\n\t\t\ttranslate,\n\t\t});\n\n\t\tconst wrapperStyles = { ...style, ...innerWrapperStyle };\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={innerWrapperClass}\n\t\t\t\tstyle={wrapperStyles}\n\t\t\t\tref={(inst) => this.setMenuInnerRef(inst)}\n\t\t\t>\n\t\t\t\t{this.state.items.map((Item, i) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={(inst) =>\n\t\t\t\t\t\t\tthis.setRef(`menuitem-${i}`, String(Item.key || ''), i, inst)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={`${itemClass} ${\n\t\t\t\t\t\t\tItem.props.selected ? itemClassActive : ''\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tkey={'menuItem-' + Item.key}\n\t\t\t\t\t\tstyle={itemStyle}\n\t\t\t\t\t\tonClick={Item.props.onClick()}\n\t\t\t\t\t\ttabIndex={disableTabindex ? undefined : 0}\n\t\t\t\t\t\trole={useButtonRole ? 'button' : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{Item}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t}\n}\n","import { Component, ReactNode, TouchEvent, WheelEvent } from 'react';\nimport classnames from 'classnames';\nimport {\n\tdefaultMenuStyle,\n\tdefaultProps,\n\tdefaultWrapperStyle,\n} from './defautSettings';\nimport {\n\tDragHistoryEntry,\n\tMenuCustomRef,\n\tMenuItem,\n\tMenuItems,\n\tMenuProps,\n\tMenuState,\n\tRef,\n\tRefObject,\n\tVoid,\n} from './types';\nimport { getClientRect, notUndefOrNull, translateIsValid } from './utils';\nimport { ArrowWrapper, InnerWrapper } from './wrapper';\n\nexport class ScrollMenu extends Component<MenuProps, MenuState> {\n\tpublic static defaultProps: MenuProps = defaultProps;\n\n\tprivate ref: RefObject = {};\n\tprivate menuWrapper: Ref = null;\n\tprivate menuInner: MenuCustomRef = null;\n\tprivate mounted = false;\n\tprivate needUpdate = false;\n\tprivate allItemsWidth = 0;\n\tprivate menuPos = 0;\n\tprivate menuWidth = 0;\n\tprivate wWidth = 0;\n\tprivate firstPageOffset = 0;\n\tprivate lastPageOffset = 0;\n\tprivate lastTranslateUpdate = 0;\n\tprivate menuItems: MenuItems = [];\n\tprivate selected: string;\n\tprivate prevWindowHeight = 0;\n\n\t/** timers for setTimeout if RAF not supported */\n\tprivate onLoadTimer: any = 0;\n\tprivate rafTimer: any = 0;\n\tprivate resizeTimer: any = 0;\n\tprivate frameId: any = 0;\n\n\tprivate data: JSX.Element[] | null = null;\n\n\tprivate dragHistory: DragHistoryEntry[] = [];\n\tprivate isTransitioning = false;\n\n\tprivate swipeInitX = 0;\n\tprivate swipeInitY = 0;\n\n\tconstructor(props: MenuProps) {\n\t\tsuper(props);\n\t\tthis.selected = String(props.selected) || '';\n\t}\n\n\tpublic state = {\n\t\tdragging: false,\n\t\tfirstItemVisible: true,\n\t\tlastItemVisible: false,\n\t\tleftArrowVisible: false,\n\t\trightArrowVisible: true,\n\t\tstartDragTranslate: 0,\n\t\ttranslate: this.props.translate,\n\t\txDraggedDistance: 0,\n\t\txPoint: 0,\n\t};\n\n\tpublic componentDidCatch(err: any, info: any): Void {\n\t\t// tslint:disable-next-line:no-console\n\t\tconsole.log('ScrollMenu catched error: ', err, info);\n\t}\n\n\tpublic componentDidMount(): Void {\n\t\tthis.setInitial();\n\n\t\twindow.addEventListener('load', this.onLoad);\n\t\twindow.addEventListener('resize', this.resizeHandler);\n\n\t\tif (screen.orientation) {\n\t\t\tscreen.orientation.addEventListener('change', this.resizeHandler);\n\t\t} else {\n\t\t\twindow.addEventListener('orientationchange', this.resizeHandler);\n\t\t}\n\n\t\tdocument.addEventListener('mousemove', this.handleDragWrapper);\n\t\tdocument.addEventListener('mouseup', this.handleDragStopWrapper);\n\n\t\tthis.menuInner?.menuInner?.elem.addEventListener(\n\t\t\t'transitionstart',\n\t\t\tthis.setIsTransitioning,\n\t\t);\n\n\t\tthis.menuInner?.menuInner?.elem.addEventListener(\n\t\t\t'transitionend',\n\t\t\tthis.setIsTransitioning,\n\t\t);\n\n\t\tthis.menuInner?.menuInner?.elem.addEventListener(\n\t\t\t'transitioncancel',\n\t\t\tthis.setIsTransitioning,\n\t\t);\n\n\t\t// if styles loaded before js bundle need wait for it\n\t\tthis.onLoadTimer = setTimeout(() => {\n\t\t\tthis.onLoad();\n\t\t\tthis.forceUpdate();\n\t\t}, 0);\n\t}\n\n\tpublic shouldComponentUpdate(\n\t\tnextProps: MenuProps,\n\t\tnextState: MenuState,\n\t): boolean {\n\t\t// TODO: need refactor all this or remove\n\t\t// it's too complicated already\n\t\tconst { translate, dragging, firstItemVisible, lastItemVisible } =\n\t\t\tthis.state;\n\t\tconst {\n\t\t\ttranslate: translateNew,\n\t\t\tdragging: draggingNew,\n\t\t\tfirstItemVisible: firstItemVisibleNew,\n\t\t\tlastItemVisible: lastItemVisibleNew,\n\t\t} = nextState;\n\n\t\tconst {\n\t\t\ttranslate: translateProps,\n\t\t\tselected: selectedProps,\n\t\t\tscrollToSelected,\n\t\t} = this.props;\n\t\tconst { translate: translatePropsNew, selected: selectedPropsNew } =\n\t\t\tnextProps;\n\n\t\tconst translatePropsNotNull = notUndefOrNull(translatePropsNew);\n\t\tconst translateStateDiff = translate !== translateNew;\n\t\tconst translatePropsDiff =\n\t\t\ttranslatePropsNotNull && translateProps !== translatePropsNew;\n\t\tconst translateDiff =\n\t\t\ttranslatePropsNew !== translateNew ||\n\t\t\ttranslateStateDiff ||\n\t\t\ttranslatePropsDiff;\n\n\t\tconst selectedPropsDiff =\n\t\t\tnotUndefOrNull(selectedPropsNew) && selectedProps !== selectedPropsNew;\n\t\tconst selectedDiff =\n\t\t\tselectedPropsDiff || this.selected !== selectedPropsNew;\n\n\t\tconst propsDiff = translateDiff || selectedDiff;\n\n\t\tconst firstItemVisibleDiff = firstItemVisible !== firstItemVisibleNew;\n\t\tconst lastItemVisibleDiff = lastItemVisible !== lastItemVisibleNew;\n\n\t\tlet translateResult = translateNew;\n\n\t\tconst newMenuItems =\n\t\t\tthis.props.data !== nextProps.data ||\n\t\t\tthis.props.data.length !== nextProps.data.length;\n\t\tconst newTranslateProps =\n\t\t\ttranslateIsValid(translatePropsNew) &&\n\t\t\ttranslatePropsDiff &&\n\t\t\t!newMenuItems;\n\n\t\tif (newMenuItems || (scrollToSelected && selectedPropsDiff)) {\n\t\t\tthis.needUpdate = true;\n\t\t}\n\n\t\tif (propsDiff) {\n\t\t\tif (selectedPropsDiff) {\n\t\t\t\tthis.selected = selectedPropsNew;\n\t\t\t}\n\n\t\t\tif (newTranslateProps) {\n\t\t\t\ttranslateResult = translatePropsNew;\n\t\t\t}\n\t\t}\n\n\t\tif (newTranslateProps) {\n\t\t\tthis.setState({ translate: +translateResult });\n\t\t}\n\n\t\treturn (\n\t\t\tnewMenuItems ||\n\t\t\ttranslateDiff ||\n\t\t\tdragging !== draggingNew ||\n\t\t\tpropsDiff ||\n\t\t\tfirstItemVisibleDiff ||\n\t\t\tlastItemVisibleDiff\n\t\t);\n\t}\n\n\tpublic componentDidUpdate(prevProps: MenuProps, prevState: MenuState): Void {\n\t\t// update if have new menu items or selected value\n\t\tif (this.needUpdate) {\n\t\t\tthis.needUpdate = false;\n\t\t\tthis.onLoad();\n\t\t}\n\n\t\tconst { translate: translateOld } = prevState;\n\t\tconst { translate, dragging } = this.state;\n\n\t\tif (!dragging && translateOld !== translate) {\n\t\t\tthis.onUpdate({ translate, translateOld });\n\t\t}\n\n\t\t// call cb for first/last item visible\n\t\tconst { firstItemVisible, lastItemVisible } =\n\t\t\tthis.checkFirstLastItemVisibility({ translate });\n\t\tconst { onFirstItemVisible, onLastItemVisible } = this.props;\n\t\tif (firstItemVisible) {\n\t\t\tonFirstItemVisible();\n\t\t}\n\t\tif (lastItemVisible) {\n\t\t\tonLastItemVisible();\n\t\t}\n\n\t\tconst { hideSingleArrow, transition } = this.props;\n\t\tif (hideSingleArrow) {\n\t\t\tcancelAnimationFrame(this.frameId);\n\t\t\tclearTimeout(this.rafTimer);\n\t\t\tthis.frameId = requestAnimationFrame(this.setFirstLastItemVisibility);\n\t\t\tthis.rafTimer = setTimeout(() => {\n\t\t\t\tcancelAnimationFrame(this.frameId);\n\t\t\t\tthis.frameId = requestAnimationFrame(this.setFirstLastItemVisibility);\n\t\t\t}, transition * 1000 + 10);\n\t\t}\n\t}\n\n\tpublic componentWillUnmount(): Void {\n\t\twindow.removeEventListener('load', this.onLoad);\n\t\twindow.removeEventListener('resize', this.resizeHandler);\n\n\t\tif (screen.orientation) {\n\t\t\tscreen.orientation.removeEventListener('change', this.resizeHandler);\n\t\t} else {\n\t\t\twindow.removeEventListener('orientationchange', this.resizeHandler);\n\t\t}\n\n\t\tdocument.removeEventListener('mousemove', this.handleDragWrapper);\n\t\tdocument.removeEventListener('mouseup', this.handleDragStopWrapper);\n\n\t\tthis.menuInner?.menuInner?.elem.removeEventListener(\n\t\t\t'transitionstart',\n\t\t\tthis.setIsTransitioning,\n\t\t);\n\t\tthis.menuInner?.menuInner?.elem.removeEventListener(\n\t\t\t'transitionend',\n\t\t\tthis.setIsTransitioning,\n\t\t);\n\t\tthis.menuInner?.menuInner?.elem.removeEventListener(\n\t\t\t'transitioncancel',\n\t\t\tthis.setIsTransitioning,\n\t\t);\n\n\t\tclearTimeout(this.rafTimer);\n\t\tclearTimeout(this.onLoadTimer);\n\t\tclearTimeout(this.resizeTimer);\n\t\tcancelAnimationFrame(this.frameId);\n\t}\n\n\t/** set ref for MenuItems */\n\tpublic setRef = (ref: RefObject): Void => {\n\t\tconst [key, value] = Object.entries(ref)[0];\n\t\tif (value.elem) {\n\t\t\tthis.ref[key] = value;\n\t\t}\n\t};\n\n\tpublic setMenuInnerRef = (ref: MenuCustomRef): Void => {\n\t\tthis.menuInner = ref;\n\t};\n\n\t/** set ref for wrapper */\n\tpublic setWrapperRef = (ref: Ref): Void => {\n\t\tthis.menuWrapper = ref;\n\t};\n\n\t/** check if first and last items visible */\n\tpublic checkFirstLastItemVisibility = ({\n\t\ttranslate = this.state.translate,\n\t}: {\n\t\ttranslate?: number;\n\t}): { firstItemVisible: boolean; lastItemVisible: boolean } => {\n\t\tconst { menuItems } = this;\n\n\t\tlet firstItemVisible = true;\n\t\tlet lastItemVisible = false;\n\t\tif (menuItems) {\n\t\t\tconst visibleItems = this.getVisibleItems({ offset: translate });\n\t\t\tfirstItemVisible = visibleItems.includes(menuItems[0]);\n\t\t\tlastItemVisible = visibleItems.includes(menuItems.slice(-1)[0]);\n\t\t}\n\n\t\treturn { firstItemVisible, lastItemVisible };\n\t};\n\n\t/** check first and last items and setState */\n\tpublic setFirstLastItemVisibility = (): Void => {\n\t\tconst { firstItemVisible, lastItemVisible } =\n\t\t\tthis.checkFirstLastItemVisibility({});\n\n\t\tconst leftArrowVisible = !firstItemVisible;\n\t\tconst rightArrowVisible = !lastItemVisible;\n\n\t\tthis.setState({\n\t\t\tfirstItemVisible,\n\t\t\tlastItemVisible,\n\t\t\tleftArrowVisible,\n\t\t\trightArrowVisible,\n\t\t});\n\t};\n\n\tpublic onLoad = (): Void => {\n\t\tthis.setInitial();\n\t\tthis.mounted = true;\n\t};\n\n\t/** kinda debounce */\n\tpublic resizeHandler = (event?: any): Void => {\n\t\tconst currentWindowHeight = event?.target?.innerHeight || null;\n\t\tif (currentWindowHeight) {\n\t\t\tif (!this.prevWindowHeight) {\n\t\t\t\tthis.prevWindowHeight = currentWindowHeight;\n\t\t\t}\n\t\t\tif (this.prevWindowHeight !== currentWindowHeight) {\n\t\t\t\t// prevent to handle resize on mobile when address ber is hiding\n\t\t\t\tthis.prevWindowHeight = currentWindowHeight;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tconst { alignOnResize } = this.props;\n\t\tif (!alignOnResize) {\n\t\t\treturn false;\n\t\t}\n\n\t\tclearTimeout(this.resizeTimer);\n\t\tthis.resizeTimer = setTimeout(() => this.resize(), 300);\n\t};\n\n\t/** Set values on resize */\n\tpublic resize = (): Void => {\n\t\tthis.updateWidth({});\n\n\t\tthis.setState({\n\t\t\ttranslate: 0,\n\t\t\tfirstItemVisible: true,\n\t\t\tlastItemVisible: false,\n\t\t\tleftArrowVisible: false,\n\t\t\trightArrowVisible: true,\n\t\t});\n\t};\n\n\t/** set initial values and for updates */\n\tpublic setInitial = (): Void => {\n\t\tthis.prevWindowHeight = process.browser ? window.innerHeight : 0;\n\t\tconst {\n\t\t\tselected,\n\t\t\tdata,\n\t\t\ttranslate: translateProp,\n\t\t\tscrollToSelected,\n\t\t\talignCenter,\n\t\t\thideSingleArrow,\n\t\t} = this.props;\n\t\tconst { translate: translateState } = this.state;\n\t\tif (!data || !data.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.menuItems.length || data !== this.data) {\n\t\t\tthis.menuItems = this.getMenuItems();\n\t\t\tthis.data = data;\n\t\t}\n\n\t\t// align item on initial load\n\t\tthis.updateWidth({});\n\n\t\tconst newState = { ...this.state };\n\n\t\t// set translate on first load\n\t\tconst firstMountAndDefaultTranslate =\n\t\t\t!this.mounted && translateProp === defaultProps.translate;\n\t\tif (\n\t\t\tfirstMountAndDefaultTranslate ||\n\t\t\t(!translateIsValid(translateProp) && !translateIsValid(translateState))\n\t\t) {\n\t\t\tnewState.translate = alignCenter\n\t\t\t\t? this.firstPageOffset\n\t\t\t\t: defaultProps.translate;\n\t\t}\n\n\t\t// check arrows\n\t\tconst { firstItemVisible, lastItemVisible } =\n\t\t\tthis.checkFirstLastItemVisibility({ translate: translateProp });\n\t\tnewState.firstItemVisible = firstItemVisible;\n\t\tnewState.lastItemVisible = lastItemVisible;\n\t\tnewState.leftArrowVisible = hideSingleArrow ? !firstItemVisible : true;\n\t\tnewState.rightArrowVisible = hideSingleArrow ? !lastItemVisible : true;\n\n\t\t// scrollToSelected\n\t\tif (scrollToSelected) {\n\t\t\tconst needScroll = this.isScrollNeeded({\n\t\t\t\titemId: selected,\n\t\t\t\ttranslate: newState.translate,\n\t\t\t});\n\t\t\tif (needScroll) {\n\t\t\t\tnewState.translate = this.getOffsetToItemByKey(selected);\n\t\t\t}\n\t\t}\n\n\t\tthis.setState({ ...newState });\n\t};\n\n\t/** check if selected item visible on screen or need scroll to it */\n\tpublic isScrollNeeded = ({\n\t\titemId,\n\t\ttranslate = this.state.translate,\n\t}: {\n\t\titemId: string;\n\t\ttranslate?: number;\n\t}): boolean => {\n\t\tconst item = this.getItemByKey(itemId);\n\n\t\tconst visibleItems = this.getVisibleItems({\n\t\t\toffset: translate,\n\t\t});\n\t\treturn !visibleItems.includes(item);\n\t};\n\n\t/** external api, scroll to item by it key */\n\tpublic scrollTo = (itemKey: string): Void => {\n\t\tconst { translate } = this.state;\n\t\tconst newTranslate = this.getOffsetToItemByKey(itemKey);\n\t\tthis.selected = itemKey;\n\t\tif (translate === newTranslate) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.setState({ translate: newTranslate });\n\t};\n\n\t/** get MenuItems from refs */\n\tpublic getMenuItems = (): MenuItems =>\n\t\tObject.entries(this.ref).slice(0, this.props.data.length || 0);\n\n\t/** get width of all menu items */\n\tpublic getItemsWidth = ({\n\t\titems = this.menuItems,\n\t}: {\n\t\titems?: MenuItems;\n\t}): number => {\n\t\treturn items\n\t\t\t.map((el) => el[1].elem)\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((acc, el) => (acc += getClientRect(el).width), 0);\n\t};\n\n\t/** get width of items, window and pos of menu */\n\tpublic getWidth = ({\n\t\titems,\n\t}: {\n\t\titems: MenuItems;\n\t}): {\n\t\twWidth: number;\n\t\tmenuPos: number;\n\t\tmenuWidth: number;\n\t\tallItemsWidth: number;\n\t} => {\n\t\tconst wWidth = window && window.innerWidth;\n\t\tconst { x: menuPos, width: menuWidth } = getClientRect(this.menuWrapper);\n\t\tconst allItemsWidth = this.getItemsWidth({ items });\n\t\treturn { wWidth, menuPos, menuWidth, allItemsWidth };\n\t};\n\n\t/** values from 2 functions above */\n\tpublic updateWidth = ({\n\t\titems = this.menuItems,\n\t}: {\n\t\titems?: MenuItems;\n\t}): Void => {\n\t\tconst { wWidth, menuPos, menuWidth, allItemsWidth } = this.getWidth({\n\t\t\titems,\n\t\t});\n\t\tconst { firstPageOffset, lastPageOffset } = this.getPagesOffsets({\n\t\t\tallItemsWidth,\n\t\t\titems,\n\t\t\tmenuWidth,\n\t\t});\n\n\t\tthis.menuPos = menuPos;\n\t\tthis.wWidth = wWidth;\n\t\tthis.allItemsWidth = allItemsWidth;\n\t\tthis.menuWidth = menuWidth;\n\t\tthis.firstPageOffset = firstPageOffset;\n\t\tthis.lastPageOffset = lastPageOffset;\n\t};\n\n\t/** get firstPageOffset */\n\tpublic getFirstPageOffset = ({\n\t\titems = this.menuItems,\n\t\toffset = this.state.translate,\n\t\tmenuWidth = this.menuWidth,\n\t}: {\n\t\titems: MenuItems;\n\t\toffset: number;\n\t\tmenuWidth: number;\n\t}): number => {\n\t\tconst visibleItemsStart = this.getVisibleItems({\n\t\t\titems,\n\t\t\tmenuWidth,\n\t\t\toffset,\n\t\t});\n\t\tconst firstPageOffset = this.getCenterOffset({\n\t\t\titems: visibleItemsStart,\n\t\t\tmenuWidth,\n\t\t});\n\t\treturn firstPageOffset;\n\t};\n\n\t/** get lastPageOffset */\n\tpublic getLastPageOffset = ({\n\t\titems = this.menuItems,\n\t\tallItemsWidth = this.allItemsWidth,\n\t\tmenuWidth = this.menuWidth,\n\t}: {\n\t\titems: MenuItems;\n\t\tallItemsWidth: number;\n\t\tmenuWidth: number;\n\t}): number => {\n\t\tconst { rtl } = this.props;\n\t\tconst visibleItemsEnd = this.getVisibleItems({\n\t\t\titems,\n\t\t\tmenuWidth,\n\t\t\toffset: rtl ? allItemsWidth - menuWidth : -allItemsWidth + menuWidth,\n\t\t});\n\t\tconst lastPageOffset = this.getCenterOffset({\n\t\t\titems: visibleItemsEnd,\n\t\t\tmenuWidth,\n\t\t});\n\n\t\treturn lastPageOffset;\n\t};\n\n\t/** get offsets to first and last item */\n\tpublic getPagesOffsets = ({\n\t\titems = this.menuItems,\n\t\tallItemsWidth = this.allItemsWidth,\n\t\tmenuWidth = this.menuWidth,\n\t\toffset = this.state.translate,\n\t}): {\n\t\tfirstPageOffset: number;\n\t\tlastPageOffset: number;\n\t} => {\n\t\tconst firstPageOffset = this.getFirstPageOffset({\n\t\t\titems,\n\t\t\tmenuWidth,\n\t\t\toffset,\n\t\t});\n\t\tconst lastPageOffset = this.getLastPageOffset({\n\t\t\tallItemsWidth,\n\t\t\titems,\n\t\t\tmenuWidth,\n\t\t});\n\n\t\treturn {\n\t\t\tfirstPageOffset,\n\t\t\tlastPageOffset,\n\t\t};\n\t};\n\n\t/** item click handler */\n\tpublic onItemClick = (id: string): Void => {\n\t\tconst { clickWhenDrag, onSelect } = this.props;\n\t\tconst { xDraggedDistance } = this.state;\n\n\t\tconst afterScroll = xDraggedDistance > 5;\n\n\t\tif (afterScroll && !clickWhenDrag) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.selected = id;\n\t\tif (onSelect) {\n\t\t\tonSelect(id);\n\t\t}\n\t};\n\n\t/** get item visible with current/provided translate */\n\tpublic getVisibleItems = ({\n\t\titems = this.menuItems,\n\t\tmenuWidth = this.menuWidth,\n\t\toffset = this.state.translate,\n\t\ttranslate = this.state.translate || defaultProps.translate,\n\t}): MenuItems => {\n\t\treturn items.filter((el) => {\n\t\t\tconst { width: elWidth } = getClientRect(el[1].elem);\n\t\t\tconst index = this.getItemIndex(items, el);\n\t\t\tconst x = this.getOffsetToItemByIndex({\n\t\t\t\tindex,\n\t\t\t\tmenuItems: items,\n\t\t\t\ttranslate,\n\t\t\t});\n\n\t\t\treturn this.elementVisible({\n\t\t\t\telWidth,\n\t\t\t\tmenuWidth,\n\t\t\t\toffset,\n\t\t\t\tx,\n\t\t\t});\n\t\t});\n\t};\n\n\t/** check if single menu item visible by it's position and width */\n\tpublic elementVisible = ({\n\t\tx,\n\t\toffset = 0,\n\t\telWidth,\n\t\tmenuWidth = this.menuWidth,\n\t}: {\n\t\tx: number;\n\t\toffset: number;\n\t\telWidth: number;\n\t\tmenuWidth?: number;\n\t}): boolean => {\n\t\tconst { rtl } = this.props;\n\t\tconst leftEdge = rtl ? -(menuWidth + 1) : -1;\n\t\tconst rightEdge = rtl ? 1 : menuWidth + 1;\n\t\tconst pos = rtl ? -(x + offset) : x + offset;\n\t\tconst posWithWidth = rtl ? pos - elWidth : pos + elWidth;\n\n\t\tif (rtl) {\n\t\t\treturn posWithWidth >= leftEdge && pos <= rightEdge;\n\t\t}\n\n\t\treturn (\n\t\t\tpos >= leftEdge &&\n\t\t\tposWithWidth * defaultProps.elemVisForMargThreshold <= rightEdge\n\t\t);\n\t};\n\n\t/** get index of item */\n\tpublic getItemIndex = (\n\t\tmenuItems: MenuItems = this.menuItems,\n\t\titem: MenuItem,\n\t): number => {\n\t\tif (!menuItems || !item) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn menuItems.findIndex((el) => el[0] === item[0]);\n\t};\n\n\t/** get next item in data */\n\tpublic getNextItemIndex = (\n\t\tleft: boolean,\n\t\tvisibleItems: MenuItems,\n\t): number => {\n\t\tconst { menuItems } = this;\n\t\tif (left) {\n\t\t\tif (!visibleItems.length) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t} else {\n\t\t\tif (!visibleItems.length) {\n\t\t\t\treturn menuItems.length;\n\t\t\t}\n\t\t}\n\t\tconst index = left\n\t\t\t? this.getItemIndex(menuItems, visibleItems[0]) - 1\n\t\t\t: this.getItemIndex(menuItems, visibleItems.slice(-1)[0]) + 1;\n\t\treturn index < 0 ? 0 : index;\n\t};\n\n\t/** get offset from start to item by it's key */\n\tpublic getOffsetToItemByKey = (key: string): number => {\n\t\tlet { translate } = this.state;\n\n\t\tconst itemIndex = this.getItemIndexByKey(key);\n\t\tif (itemIndex === -1) {\n\t\t\treturn translate;\n\t\t}\n\n\t\tconst { alignCenter, rtl } = this.props;\n\n\t\ttranslate = this.getOffsetToItemByIndex({ index: itemIndex });\n\n\t\tconst visibleItemsWithNewTranslate = this.getVisibleItems({\n\t\t\toffset: -translate,\n\t\t});\n\t\tconst offset = alignCenter\n\t\t\t? this.getCenterOffset({ items: visibleItemsWithNewTranslate })\n\t\t\t: defaultProps.translate;\n\n\t\ttranslate = -(translate - (rtl ? -offset : offset));\n\n\t\tif (this.itBeforeStart(translate)) {\n\t\t\ttranslate = this.getOffsetAtStart();\n\t\t} else if (this.itAfterEnd(translate)) {\n\t\t\ttranslate = this.getOffsetAtEnd();\n\t\t}\n\t\treturn translate;\n\t};\n\n\t/** get item from key */\n\tpublic getItemByKey = (key: string | number): MenuItem => {\n\t\treturn (\n\t\t\tthis.menuItems.find((el) => el[1].key === key) || [\n\t\t\t\t'',\n\t\t\t\t{ key: 'n', elem: null, index: -1 },\n\t\t\t]\n\t\t);\n\t};\n\n\t/** get index of item from it's key */\n\tpublic getItemIndexByKey = (itemKey: string): number => {\n\t\tif (!itemKey) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn this.menuItems.findIndex((el) => el[1].key === itemKey);\n\t};\n\n\t/** offset from start to item */\n\tpublic getOffsetToItemByIndex = ({\n\t\tindex,\n\t\tmenuItems = this.menuItems,\n\t\ttranslate = this.state.translate,\n\t}: {\n\t\tindex: number;\n\t\tmenuItems?: MenuItems;\n\t\ttranslate?: number;\n\t}): number => {\n\t\tif (!menuItems.length) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst ind = index >= menuItems.length ? menuItems.length - 1 : index;\n\t\tconst { x, x2 } = getClientRect(menuItems?.[ind]?.[1]?.elem);\n\t\tconst { rtl } = this.props;\n\n\t\tconst position = rtl\n\t\t\t? this.menuPos + this.menuWidth - translate - x2\n\t\t\t: +x - translate - this.menuPos;\n\n\t\treturn position;\n\t};\n\n\t/** get new offset value when scroll right */\n\tpublic getScrollRightOffset = (\n\t\tvisibleItems: MenuItems,\n\t\titems: MenuItems = this.menuItems,\n\t): number => {\n\t\tconst { scrollBy, rtl } = this.props;\n\n\t\tconst visibleItem = visibleItems?.[0]?.[1];\n\n\t\tconst visibleIndex = visibleItem?.index;\n\n\t\tconst nextItemIndex = scrollBy\n\t\t\t? visibleIndex + scrollBy\n\t\t\t: rtl\n\t\t\t? this.getPrevItem((visibleItem || items[0][1]).key)[1].index\n\t\t\t: this.getNextItem(\n\t\t\t\t\t((visibleItems.slice(-1)[0] && visibleItems.slice(-1)) ||\n\t\t\t\t\t\titems.slice(-1))[0][1].key,\n\t\t\t  )[1].index;\n\n\t\tconst newOffset = -this.getOffsetToItemByIndex({\n\t\t\tindex: nextItemIndex,\n\t\t\tmenuItems: items,\n\t\t});\n\n\t\treturn rtl ? -newOffset : newOffset;\n\t};\n\n\t/** get new offset value when scroll left */\n\tpublic getScrollLeftOffset = (\n\t\tvisibleItems: MenuItems,\n\t\titems: MenuItems = this.menuItems,\n\t): number => {\n\t\tconst { scrollBy, rtl } = this.props;\n\n\t\tconst prevItem = rtl\n\t\t\t? this.getNextItem(\n\t\t\t\t\t((visibleItems.slice(-1)[0] && visibleItems.slice(-1)) ||\n\t\t\t\t\t\titems.slice(-1))[0][1].key,\n\t\t\t  )\n\t\t\t: this.getPrevItem(\n\t\t\t\t\t((visibleItems[0] && visibleItems[0][1]) || items[0][1]).key,\n\t\t\t  );\n\t\tconst prevItemIndex =\n\t\t\tprevItem[1].index - (scrollBy ? scrollBy - 1 : visibleItems.length);\n\n\t\tconst newOffset = -this.getOffsetToItemByIndex({\n\t\t\tindex: prevItemIndex < 0 ? 0 : prevItemIndex,\n\t\t\tmenuItems: items,\n\t\t});\n\n\t\treturn newOffset;\n\t};\n\n\t/** get next item by key */\n\tpublic getNextItem = (key: string): MenuItem => {\n\t\tconst { menuItems } = this;\n\t\tconst itemIndex = menuItems.findIndex((el) => el[1].key === key);\n\t\tconst nextItemIndex = itemIndex + 1;\n\t\tconst nextItem = menuItems[nextItemIndex] || menuItems.slice(-1)[0];\n\t\treturn nextItem;\n\t};\n\n\t/** get prev item by key */\n\tpublic getPrevItem = (key: string): MenuItem => {\n\t\tconst { menuItems } = this;\n\t\tconst itemIndex = menuItems.findIndex((el) => el[1].key === key);\n\t\tconst prevItemIndex = itemIndex - 1;\n\t\tconst prevItem = menuItems[prevItemIndex] || menuItems[0];\n\t\treturn prevItem;\n\t};\n\n\t/** get new offset value when scroll left/right */\n\tpublic getOffset = (\n\t\tleft: boolean,\n\t\titems: MenuItems = this.menuItems,\n\t): number => {\n\t\tconst { rtl } = this.props;\n\n\t\tleft = rtl ? !left : left;\n\t\tconst visibleItems = this.getVisibleItems({ items });\n\t\tconst newOffset = left\n\t\t\t? this.getScrollLeftOffset(visibleItems, items)\n\t\t\t: this.getScrollRightOffset(visibleItems, items);\n\n\t\treturn newOffset;\n\t};\n\n\t/** offset from 0 to first menu item when scroll,\n\t * need pass items visible on screen\n\t */\n\tpublic getCenterOffset = ({\n\t\titems = this.menuItems,\n\t\tmenuWidth = this.menuWidth,\n\t}: {\n\t\titems?: MenuItems;\n\t\tmenuWidth?: number;\n\t}): number => {\n\t\tif (!items.length) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst itemsWidth = this.getItemsWidth({ items });\n\n\t\treturn (menuWidth - itemsWidth) / 2;\n\t};\n\n\t/** mouse wheel handler */\n\t// TODO: gestureEvents\n\tpublic handleWheel = (e: WheelEvent): Void => {\n\t\tconst { wheel } = this.props;\n\t\tif (!wheel) {\n\t\t\treturn false;\n\t\t}\n\t\tif (e.deltaY < 0) {\n\t\t\tthis.handleArrowClick();\n\t\t} else {\n\t\t\tthis.handleArrowClick(false);\n\t\t}\n\t};\n\n\t/** offset at start */\n\tpublic getOffsetAtStart = (): number => {\n\t\tconst { firstPageOffset } = this;\n\t\tconst { alignCenter } = this.props;\n\n\t\treturn alignCenter ? firstPageOffset : defaultProps.translate;\n\t};\n\n\t/** offset at end */\n\tpublic getOffsetAtEnd = (): number => {\n\t\tconst { alignCenter } = this.props;\n\t\tconst { allItemsWidth, menuWidth, lastPageOffset } = this;\n\t\tconst offset = allItemsWidth - menuWidth;\n\n\t\treturn alignCenter ? -offset - lastPageOffset : -offset;\n\t};\n\n\t/** click right arrow */\n\tpublic handleArrowClickRight = (): Void => {\n\t\tthis.handleArrowClick(false);\n\t};\n\n\t/** click arrow/scroll */\n\tpublic handleArrowClick = (left = true): Void => {\n\t\tconst { alignCenter, rtl } = this.props;\n\t\tconst { allItemsWidth, menuWidth } = this;\n\n\t\tif (this.isTransitioning) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!alignCenter && !left && allItemsWidth < menuWidth) {\n\t\t\treturn false;\n\t\t}\n\t\tlet newTranslate = 0;\n\n\t\tconst visibleItems = this.getVisibleItems({});\n\t\tconst firstItemVisible = visibleItems[0] && visibleItems[0][1].index === 0;\n\t\tconst lastItemVisible =\n\t\t\tvisibleItems.slice(-1)[0] &&\n\t\t\tvisibleItems.slice(-1)[0][1].index === this.menuItems.length - 1;\n\n\t\tconst transl = this.getOffset(left);\n\n\t\tif (left && (firstItemVisible || this.itBeforeStart(transl))) {\n\t\t\tnewTranslate = this.getOffsetAtStart();\n\t\t} else if (!left && (lastItemVisible || this.itAfterEnd(transl))) {\n\t\t\tnewTranslate = transl;\n\t\t} else {\n\t\t\t// tslint:disable-next-line:no-shadowed-variable\n\t\t\tconst visibleItems = () => this.getVisibleItems({ offset: transl });\n\t\t\tconst centerOffset = alignCenter\n\t\t\t\t? this.getCenterOffset({ items: visibleItems() })\n\t\t\t\t: 0;\n\n\t\t\tnewTranslate =\n\t\t\t\ttransl +\n\t\t\t\t(rtl\n\t\t\t\t\t? left\n\t\t\t\t\t\t? centerOffset + this.menuWidth\n\t\t\t\t\t\t: -centerOffset - this.menuWidth\n\t\t\t\t\t: centerOffset);\n\t\t}\n\n\t\tthis.setState({\n\t\t\tstartDragTranslate: 0,\n\t\t\ttranslate: newTranslate,\n\t\t\txDraggedDistance: 0,\n\t\t\txPoint: defaultProps.xPoint,\n\t\t});\n\t};\n\n\t/** check if position before first element */\n\tpublic itBeforeStart = (trans: number): boolean => {\n\t\tconst { alignCenter } = this.props;\n\t\tconst { menuWidth, allItemsWidth, firstPageOffset } = this;\n\t\tif (allItemsWidth < menuWidth) {\n\t\t\treturn true;\n\t\t}\n\t\treturn alignCenter\n\t\t\t? trans > firstPageOffset\n\t\t\t: trans > defaultProps.translate;\n\t};\n\t/** check if position after last element */\n\tpublic itAfterEnd = (trans: number): boolean => {\n\t\tconst { alignCenter } = this.props;\n\t\tconst { menuWidth, allItemsWidth, lastPageOffset } = this;\n\t\tif (allItemsWidth < menuWidth) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn alignCenter\n\t\t\t? trans < defaultProps.translate &&\n\t\t\t\t\tMath.abs(trans) > allItemsWidth - menuWidth + lastPageOffset\n\t\t\t: trans < defaultProps.translate &&\n\t\t\t\t\tMath.abs(trans) > allItemsWidth - menuWidth;\n\t};\n\n\t/** get coords from mouse event */\n\tpublic getPoint = (ev: MouseEvent | TouchEvent | Event): number => {\n\t\tif ('touches' in ev) {\n\t\t\treturn ev.touches[0].clientX;\n\t\t} else if ('clientX' in ev) {\n\t\t\treturn ev.clientX;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t};\n\n\t/** event handler when start drag and mouse down  */\n\tpublic handleDragStart = (ev: MouseEvent | TouchEvent): Void => {\n\t\t// 1 left button, 2 right button\n\t\tif (ev && 'buttons' in ev && ev.buttons === 2) {\n\t\t\treturn false;\n\t\t}\n\t\tconst { dragging: draggingEnable } = this.props;\n\t\tif (!draggingEnable) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (ev.type === 'touchstart') {\n\t\t\tthis.swipeInitX = (ev as TouchEvent).touches[0].clientX;\n\t\t\tthis.swipeInitY = (ev as TouchEvent).touches[0].clientY;\n\t\t}\n\n\t\tconst { translate: startDragTranslate } = this.state;\n\n\t\t// record drag events\n\t\tthis.dragHistory = [{ time: Date.now(), position: startDragTranslate }];\n\n\t\tthis.setState({\n\t\t\tdragging: true,\n\t\t\txDraggedDistance: 0,\n\t\t\txPoint: 0,\n\t\t});\n\t};\n\n\t/** wrapper for handleDrag event to avoid memory leak */\n\tpublic handleDragWrapper = (e: MouseEvent | TouchEvent | Event): Void => {\n\t\tthis.handleDrag(e);\n\t};\n\n\t/** drag event handler */\n\tpublic handleDrag = (e: MouseEvent | TouchEvent | Event): Void => {\n\t\tconst { dragging: draggingEnable, rtl } = this.props;\n\t\tconst { dragging } = this.state;\n\t\tif (!draggingEnable || !dragging) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst shouldBlockMove = this.isTouchMoveUpDown(e);\n\n\t\tif (shouldBlockMove) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocument.querySelector('body').style.overflow = 'hidden';\n\n\t\tthis.swipeInitX = 0;\n\t\tthis.swipeInitY = 0;\n\n\t\tconst point = this.getPoint(e);\n\n\t\tthis.setState(({ translate, xPoint, xDraggedDistance }) => {\n\t\t\tconst diff =\n\t\t\t\txPoint === defaultProps.xPoint ? defaultProps.xPoint : xPoint - point;\n\t\t\tlet result = translate - (rtl ? -diff : diff);\n\n\t\t\t// don't let scroll over start and end\n\t\t\tif (this.itBeforeStart(result)) {\n\t\t\t\tresult = result - Math.abs(diff) / 2;\n\t\t\t} else if (this.itAfterEnd(result)) {\n\t\t\t\tresult = result + Math.abs(diff) / 2;\n\t\t\t}\n\n\t\t\tif (diff !== 0) {\n\t\t\t\tthis.dragHistory.push({ time: Date.now(), position: result });\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttranslate: result,\n\t\t\t\txDraggedDistance: xDraggedDistance + Math.abs(diff),\n\t\t\t\txPoint: point,\n\t\t\t};\n\t\t});\n\t};\n\n\tpublic isTouchMoveUpDown = (e: MouseEvent | TouchEvent | Event) => {\n\t\tif (\n\t\t\te.type !== 'touchmove' ||\n\t\t\t(e.type === 'touchmove' && (!this.swipeInitX || !this.swipeInitY))\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst swipeCurrentX = (e as TouchEvent).touches[0].clientX;\n\t\tconst swipeCurrentY = (e as TouchEvent).touches[0].clientY;\n\n\t\tconst xDiff = this.swipeInitX - swipeCurrentX;\n\t\tconst yDiff = this.swipeInitY - swipeCurrentY;\n\n\t\tconst shouldBlockMove =\n\t\t\t(Math.abs(xDiff) > Math.abs(yDiff) &&\n\t\t\t\txDiff > -defaultProps.touchMoveThreshold &&\n\t\t\t\txDiff < defaultProps.touchMoveThreshold) ||\n\t\t\tMath.abs(xDiff) <= Math.abs(yDiff);\n\n\t\treturn shouldBlockMove;\n\t};\n\n\t/** wrapper for handleDragStop event to avoid memory leak */\n\tpublic handleDragStopWrapper = (e: Event): Void => {\n\t\tthis.handleDragStop(e);\n\t};\n\n\t/** event handler when drag and mouse up  */\n\tpublic handleDragStop = (e: MouseEvent | TouchEvent | Event): Void => {\n\t\tconst { allItemsWidth, menuWidth } = this;\n\t\tlet { translate, xPoint = this.getPoint(e) } = this.state;\n\t\tconst { dragging, startDragTranslate } = this.state;\n\t\tconst { dragging: draggingEnable, alignCenter } = this.props;\n\t\tif (!draggingEnable || !dragging) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// calculate inertia\n\t\tif (this.props.inertiaScrolling) {\n\t\t\tconst currentTime = Date.now();\n\t\t\tconst recentEntries = this.dragHistory.filter(\n\t\t\t\t(entry) => currentTime - entry.time < 150,\n\t\t\t);\n\t\t\tif (recentEntries.length > 2) {\n\t\t\t\tconst first = recentEntries[0];\n\t\t\t\tconst last = recentEntries[recentEntries.length - 1];\n\t\t\t\tlet speed = (last.position - first.position) / (last.time - first.time);\n\t\t\t\tspeed *= this.props.inertiaScrollingSlowdown;\n\t\t\t\ttranslate += speed * (this.props.transition * 1000);\n\t\t\t}\n\t\t}\n\n\t\tlet newTranslate = translate;\n\n\t\tif (this.itBeforeStart(translate)) {\n\t\t\tnewTranslate = this.getOffsetAtStart();\n\t\t\txPoint = defaultProps.xPoint;\n\t\t} else if (this.itAfterEnd(translate)) {\n\t\t\tnewTranslate = this.getOffsetAtEnd();\n\t\t\txPoint = defaultProps.xPoint;\n\t\t}\n\n\t\tif (!alignCenter && allItemsWidth <= menuWidth) {\n\t\t\tnewTranslate = defaultProps.translate;\n\t\t\txPoint = defaultProps.xPoint;\n\t\t}\n\n\t\tdocument.querySelector('body').style.overflow = 'auto';\n\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\tdragging: false,\n\t\t\t\ttranslate: newTranslate,\n\t\t\t\txPoint,\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.onUpdate({\n\t\t\t\t\ttranslate: newTranslate,\n\t\t\t\t\ttranslateOld: startDragTranslate,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t};\n\n\t/** check if no need show arrows */\n\tpublic isArrowsVisible = (): boolean => {\n\t\tconst {\n\t\t\tallItemsWidth,\n\t\t\tmenuWidth,\n\t\t\tprops: { hideArrows },\n\t\t} = this;\n\t\tconst hide = Boolean(hideArrows && allItemsWidth <= menuWidth);\n\t\treturn !hide;\n\t};\n\n\t/** cb for position update */\n\tpublic onUpdate = ({\n\t\ttranslate = this.state.translate,\n\t\ttranslateOld = this.state.translate,\n\t}: {\n\t\ttranslate?: number;\n\t\ttranslateOld?: number;\n\t}): Void => {\n\t\tconst { onUpdate } = this.props;\n\t\tconst { lastTranslateUpdate } = this;\n\t\tif (translate !== translateOld && translate !== lastTranslateUpdate) {\n\t\t\tthis.lastTranslateUpdate = translate;\n\n\t\t\tif (typeof onUpdate === 'function') {\n\t\t\t\tonUpdate({ translate });\n\t\t\t}\n\t\t}\n\t};\n\n\tpublic setIsTransitioning = (e) => {\n\t\tthis.isTransitioning = e.type === 'transitionstart' ? true : false;\n\t};\n\n\tpublic render(): ReactNode | null {\n\t\tconst {\n\t\t\tarrowClass,\n\t\t\tarrowDisabledClass,\n\t\t\tarrowLeft,\n\t\t\tarrowRight,\n\t\t\tdata,\n\t\t\tinertiaScrolling,\n\t\t\tinnerWrapperStyle,\n\t\t\tinnerWrapperClass,\n\t\t\titemStyle,\n\t\t\titemClass,\n\t\t\titemClassActive,\n\t\t\tmenuStyle,\n\t\t\tmenuClass,\n\t\t\ttransition,\n\t\t\tuseButtonRole,\n\t\t\twrapperClass,\n\t\t\twrapperStyle,\n\t\t\tdisableTabindex,\n\t\t\trtl,\n\t\t} = this.props;\n\t\tconst { translate, dragging, leftArrowVisible, rightArrowVisible } =\n\t\t\tthis.state;\n\t\tconst { selected, mounted } = this;\n\n\t\tif (!data || !data.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst arrowsVisible = mounted ? this.isArrowsVisible() : true;\n\n\t\tconst menuStyles = { ...defaultMenuStyle, ...menuStyle };\n\t\tconst wrapperStyles = { ...defaultWrapperStyle, ...wrapperStyle };\n\t\tconst itemWrapperStyle = { ...defaultProps.itemStyle, ...itemStyle };\n\n\t\tconst arrowProps = (isLeft) => ({\n\t\t\tclassName: classnames(arrowClass, {\n\t\t\t\tleft: isLeft,\n\t\t\t\tright: !isLeft,\n\t\t\t}),\n\t\t\tdisabledClass: arrowDisabledClass,\n\t\t});\n\n\t\tconst arrowLeftDisabled = !arrowLeft || !leftArrowVisible;\n\t\tconst arrowRightDisabled = !arrowRight || !rightArrowVisible;\n\n\t\tconst notDisabledArrow =\n\t\t\t(!arrowLeftDisabled || !arrowRightDisabled) && arrowsVisible;\n\n\t\treturn (\n\t\t\t<div className={menuClass} style={menuStyles} onWheel={this.handleWheel}>\n\t\t\t\t{notDisabledArrow && (\n\t\t\t\t\t<ArrowWrapper\n\t\t\t\t\t\t{...arrowProps(true)}\n\t\t\t\t\t\tdata-type={'left'}\n\t\t\t\t\t\tisDisabled={arrowLeftDisabled}\n\t\t\t\t\t\tonClick={this.handleArrowClick}\n\t\t\t\t\t>\n\t\t\t\t\t\t{arrowLeft}\n\t\t\t\t\t</ArrowWrapper>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tclassName={wrapperClass}\n\t\t\t\t\tstyle={wrapperStyles}\n\t\t\t\t\tref={this.setWrapperRef}\n\t\t\t\t\t// @ts-expect-error invalid error type\n\t\t\t\t\tonMouseDown={this.handleDragStart}\n\t\t\t\t\tonTouchStart={this.handleDragStart}\n\t\t\t\t\tonTouchEnd={this.handleDragStop}\n\t\t\t\t\t// @ts-expect-error invalid error type\n\t\t\t\t\tonMouseMove={this.handleDrag}\n\t\t\t\t\tonTouchMove={this.handleDrag}\n\t\t\t\t>\n\t\t\t\t\t<InnerWrapper\n\t\t\t\t\t\tdisableTabindex={disableTabindex}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\ttranslate={translate}\n\t\t\t\t\t\tdragging={dragging}\n\t\t\t\t\t\tmounted={mounted}\n\t\t\t\t\t\ttransition={mounted ? transition : 0}\n\t\t\t\t\t\tselected={selected}\n\t\t\t\t\t\tsetRef={this.setRef}\n\t\t\t\t\t\tsetMenuInnerRef={this.setMenuInnerRef}\n\t\t\t\t\t\tonClick={this.onItemClick}\n\t\t\t\t\t\tinnerWrapperStyle={innerWrapperStyle}\n\t\t\t\t\t\tinnerWrapperClass={innerWrapperClass}\n\t\t\t\t\t\titemStyle={itemWrapperStyle}\n\t\t\t\t\t\titemClass={itemClass}\n\t\t\t\t\t\titemClassActive={itemClassActive}\n\t\t\t\t\t\tinertiaScrolling={inertiaScrolling}\n\t\t\t\t\t\tuseButtonRole={useButtonRole}\n\t\t\t\t\t\trtl={rtl}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{notDisabledArrow && (\n\t\t\t\t\t<ArrowWrapper\n\t\t\t\t\t\t{...arrowProps(false)}\n\t\t\t\t\t\tdata-type={'right'}\n\t\t\t\t\t\tisDisabled={arrowRightDisabled}\n\t\t\t\t\t\tonClick={this.handleArrowClickRight}\n\t\t\t\t\t>\n\t\t\t\t\t\t{arrowRight}\n\t\t\t\t\t</ArrowWrapper>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n}\n","import styled, { css } from 'styled-components';\nimport { ReactNode, useEffect, useRef } from 'react';\nimport { usePrevious } from '@legacyApp/hooks/render/usePrevious';\nimport { SLOTS_SCROLL_CARD_COUNT } from '@modules/slots/constants/Slots.constants';\nimport { trans } from '@legacyApp/client/modules/translation/translate';\nimport { chatViewport } from '@legacyApp/client/modules/style/methods/chatViewport';\nimport { calcStyle } from '@legacyApp/client/modules/style/methods/calcStyle';\nimport { useChatVisible } from '@modules/chat/store/selectors/useChatVisible';\nimport { RectangleLoader } from '@common/components/contentLoaders/RectangleLoader';\nimport { ScrollMenu } from '@common/components/layout/ScrollCards/ScrollMenu/ScrollMenu';\nimport { StyledControlArrow } from '@common/components/layout/ScrollCards/ScrollCards.styled';\nimport { MenuProps } from '@common/components/layout/ScrollCards/ScrollMenu/types';\n\nconst SCROLL_MENU_PROPS: MenuProps = {\n\talignCenter: false,\n\tclickWhenDrag: false,\n\twheel: false,\n\tdragging: true,\n\thideArrows: false,\n\thideSingleArrow: true,\n\tscrollToSelected: false,\n\ttranslate: 0,\n\ttransition: 0.2,\n\titemClassActive: '',\n\tscrollBy: 1,\n};\n\nexport type ScrollCardsList = Array<{ name?: string; component: JSX.Element }>;\n\nexport const Menu = (\n\tlist: ScrollCardsList,\n\tloaded?: boolean,\n): MenuProps['data'] => {\n\tif (list?.length) {\n\t\treturn list.map((el) => {\n\t\t\treturn el.component;\n\t\t});\n\t}\n\n\tif (loaded) {\n\t\treturn [];\n\t}\n\n\treturn [...Array(SLOTS_SCROLL_CARD_COUNT)].map((value, index) => {\n\t\treturn (\n\t\t\t<RectangleLoader\n\t\t\t\tkey={index}\n\t\t\t\twidth={30}\n\t\t\t\theight={30}\n\t\t\t\tid={`loader-scroll-cards-${index}`}\n\t\t\t/>\n\t\t);\n\t});\n};\n\nconst useScrollMenuRefHandling = ({ ref }: { ref: ScrollMenu }) => {\n\tconst isChatVisible = useChatVisible();\n\tconst isChatVisiblePrev = usePrevious(isChatVisible);\n\n\tuseEffect(() => {\n\t\tif (isChatVisible !== isChatVisiblePrev) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (typeof ref?.resizeHandler === 'function') {\n\t\t\t\t\tref.resizeHandler();\n\t\t\t\t}\n\t\t\t}, 500);\n\t\t}\n\t}, [ref, isChatVisible, isChatVisiblePrev]);\n};\n\nexport const ScrollCards = ({\n\tlist,\n\tmenuProps,\n\tloaded,\n\tnoDataContent,\n}: {\n\tlist: ScrollCardsList;\n\tmenuProps?: MenuProps;\n\tloaded?: boolean;\n\tnoDataContent?: ReactNode;\n}) => {\n\tconst ScrollMenuRef = useRef(null);\n\tuseScrollMenuRefHandling({ ref: ScrollMenuRef?.current });\n\n\tconst data = Menu(list, loaded);\n\n\tif (!data?.length) {\n\t\tif (noDataContent) {\n\t\t\treturn <>{noDataContent}</>;\n\t\t}\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{trans({\n\t\t\t\t\tlabel: 'Missing content',\n\t\t\t\t})}\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<StyledScrollCardsWrapper>\n\t\t\t<ScrollMenu\n\t\t\t\tref={ScrollMenuRef}\n\t\t\t\tarrowLeft={<StyledControlArrow $type={'prev'} />}\n\t\t\t\tarrowRight={<StyledControlArrow $type={'next'} />}\n\t\t\t\tdata={data}\n\t\t\t\tonSelect={() => ({})}\n\t\t\t\t{...SCROLL_MENU_PROPS}\n\t\t\t\t{...menuProps}\n\t\t\t/>\n\t\t</StyledScrollCardsWrapper>\n\t);\n};\n\nexport const CSSClassNameScrollCardsWithTitle = 'has-view-all-btn';\n\nexport const StyledScrollCardsWrapper = styled.div`\n\twidth: 100%;\n\n\t.menu-wrapper {\n\t\twidth: 100%;\n\t}\n\t.menu-wrapper--inner {\n\t\tdisplay: flex;\n\n\t\tsvg[id*='loader-scroll-cards'] {\n\t\t\theight: 200px;\n\t\t\tmargin-right: 16px;\n\t\t\tmax-width: unset;\n\n\t\t\t${chatViewport(\n\t\t\t\t(viewportPadding) => css`\n\t\t\t\t\t@media (max-width: ${(props) =>\n\t\t\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\t\t\ta: props.theme.media.maxWidthTablet,\n\t\t\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t\t\t})}) {\n\t\t\t\t\t\theight: 180px;\n\t\t\t\t\t}\n\n\t\t\t\t\t@media (max-width: ${(props) =>\n\t\t\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\t\t\ta: props.theme.media.maxWidthSmallTablet,\n\t\t\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t\t\t})}) {\n\t\t\t\t\t\theight: 140px;\n\t\t\t\t\t}\n\n\t\t\t\t\t@media (max-width: ${(props) =>\n\t\t\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\t\t\ta: props.theme.media.maxWidthMobile,\n\t\t\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t\t\t})}) {\n\t\t\t\t\t\theight: 130px;\n\t\t\t\t\t}\n\t\t\t\t`,\n\t\t\t)}\n\t\t}\n\t}\n\n\t.horizontal-menu {\n\t\tposition: relative;\n\t}\n\n\t.scroll-menu-arrow {\n\t\talign-items: center;\n\t\tbackground: ${(props) => props.theme.colors.darkActive};\n\t\tborder-radius: 50%;\n\t\tbox-shadow: 0 0 17px 0 #000000;\n\t\tcursor: pointer;\n\t\tdisplay: flex;\n\t\theight: 30px;\n\t\tposition: absolute;\n\t\ttransition: all 0.2s ease-in-out;\n\t\twidth: 30px;\n\t\tz-index: 1;\n\n\t\t&:hover {\n\t\t\ttransform: scale(1.2);\n\t\t\t&:last-child {\n\t\t\t\ttransform: scale(1.2);\n\t\t\t}\n\t\t}\n\t}\n\n\t.scroll-menu-arrow {\n\t\tbackground-color: var(--color-dark-500);\n\t\tright: 0;\n\t\ttop: -72px;\n\n\t\t@media (min-width: ${(props) => props.theme.media_v2.min_tablet_large}) {\n\t\t\ttop: -71px;\n\t\t}\n\n\t\t@media (min-width: ${(props) => props.theme.media_v2.min_desktop_medium}) {\n\t\t\ttop: -70px;\n\t\t}\n\n\t\t${StyledControlArrow} {\n\t\t\t&:before {\n\t\t\t\tborder-color: var(--color-dark-50) !important;\n\t\t\t}\n\t\t}\n\n\t\t&.left {\n\t\t\tright: 40px;\n\t\t}\n\n\t\t&.right {\n\t\t\tright: 0;\n\t\t}\n\n\t\t&--disabled {\n\t\t\tbackground-color: var(--color-dark-700);\n\t\t\tpointer-events: none;\n\n\t\t\t${StyledControlArrow} {\n\t\t\t\t&:before {\n\t\t\t\t\tborder-color: var(--color-dark-300) !important;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media_v2.max_mobile_medium}) {\n\t\t.scroll-menu-arrow {\n\t\t\ttop: -65px;\n\t\t}\n\t}\n`;\n","import { FC, PropsWithChildren, ReactNode } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '@ui/button';\nimport { trans } from '@legacyApp/client/modules/translation/translate';\nimport { ButtonStyleType } from '@uiTypes/ButtonStyleType';\nimport { Size } from '@uiTypes/Size';\nimport { LinkTo } from '@common/components/default/LinkTo/LinkTo';\nimport {\n\tCSSClassNameScrollCardsWithTitle,\n\tScrollCards,\n\tScrollCardsList,\n} from '@common/components/layout/ScrollCards/ScrollCards';\nimport { useAppMobile } from '@common/selectors/app.selectors';\n\ninterface ScrollCardsWithTitleProps {\n\tname?: string | ReactNode;\n\thref?: string;\n\tlist?: ScrollCardsList;\n\tcount?: number;\n\tnoList?: boolean;\n\tloaded?: boolean;\n\tnoDataContent?: ReactNode;\n}\n\nexport const StyledScrollCardsWithTitle = styled.div.attrs<{\n\t$isNavButton?: boolean;\n}>((props) => ({\n\tclassName: props.$isNavButton ? CSSClassNameScrollCardsWithTitle : '',\n}))<{\n\t$isNavButton?: boolean;\n}>`\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tpadding-bottom: 48px;\n\n\t@media (max-width: ${(props) => props.theme.media_v2.max_mobile_medium}) {\n\t\tpadding-bottom: 36px;\n\t}\n`;\n\nexport const StyledScrollCardsHeader = styled.div`\n\tborder-bottom: 1px solid var(--color-dark-500);\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-grow: 1;\n\tjustify-content: space-between;\n\tmargin-bottom: 20px;\n`;\n\nexport const StyledScrollCardsTitle = styled.div`\n\tmargin-bottom: 22px;\n`;\n\nconst StyledScrollCardsNavigation = styled.div`\n\talign-items: flex-start;\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tmargin-right: 80px;\n`;\n\nexport const ScrollCardsWithTitle: FC<\n\tPropsWithChildren<ScrollCardsWithTitleProps>\n> = ({ children, name, href, count, list, noList, loaded, noDataContent }) => {\n\tconst isMobile = useAppMobile();\n\n\tconst nameComponent = (\n\t\t<StyledScrollCardsTitle className=\"text-style-xl-medium\">\n\t\t\t{name}\n\t\t</StyledScrollCardsTitle>\n\t);\n\n\tconst isNavButton = !!href && !!count;\n\n\treturn (\n\t\t<StyledScrollCardsWithTitle $isNavButton={isNavButton}>\n\t\t\t{name && (\n\t\t\t\t<StyledScrollCardsHeader>\n\t\t\t\t\t{href ? (\n\t\t\t\t\t\t<LinkTo href={href}>\n\t\t\t\t\t\t\t<a>{nameComponent}</a>\n\t\t\t\t\t\t</LinkTo>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tnameComponent\n\t\t\t\t\t)}\n\t\t\t\t\t{isNavButton && !isMobile && (\n\t\t\t\t\t\t<StyledScrollCardsNavigation>\n\t\t\t\t\t\t\t<LinkTo href={href}>\n\t\t\t\t\t\t\t\t<a>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tlabel={trans({ label: 'View all' })}\n\t\t\t\t\t\t\t\t\t\tclassName=\"margin-left-8\"\n\t\t\t\t\t\t\t\t\t\tsize={Size.MEDIUM}\n\t\t\t\t\t\t\t\t\t\tstyleType={ButtonStyleType.SECONDARY}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</LinkTo>\n\t\t\t\t\t\t</StyledScrollCardsNavigation>\n\t\t\t\t\t)}\n\t\t\t\t</StyledScrollCardsHeader>\n\t\t\t)}\n\t\t\t{!noList && (\n\t\t\t\t<ScrollCards\n\t\t\t\t\tlist={list}\n\t\t\t\t\tloaded={loaded}\n\t\t\t\t\tnoDataContent={noDataContent}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{children}\n\t\t</StyledScrollCardsWithTitle>\n\t);\n};\n","import { FC } from 'react';\nimport { IconProps } from '@icons/all-bets';\nimport { Svg } from '@legacyApp/client/components/svg/Svg';\n\nexport const Search: FC<IconProps> = ({ fill }) => {\n\tconst _fill = fill || 'white';\n\treturn (\n\t\t<Svg\n\t\t\tcontent={\n\t\t\t\t<path\n\t\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\t\tclipRule=\"evenodd\"\n\t\t\t\t\td=\"M5.25 10.5C6.49 10.5 7.62959 10.0701 8.52787 9.35124L10.6709 11.4942C10.8987 11.7221 11.268 11.7221 11.4958 11.4942C11.7236 11.2664 11.7236 10.8971 11.4958 10.6693L9.35265 8.5261C10.0707 7.6281 10.5 6.48919 10.5 5.25C10.5 2.3505 8.1495 0 5.25 0C2.3505 0 0 2.3505 0 5.25C0 8.1495 2.3505 10.5 5.25 10.5ZM5.25 1.16667C2.99484 1.16667 1.16667 2.99484 1.16667 5.25C1.16667 7.50516 2.99484 9.33333 5.25 9.33333C6.34799 9.33333 7.34475 8.89997 8.07859 8.19495C8.09509 8.17293 8.11335 8.15182 8.13338 8.13179C8.15333 8.11184 8.17438 8.09363 8.19631 8.07717C8.90053 7.34347 9.33333 6.34728 9.33333 5.25C9.33333 2.99484 7.50516 1.16667 5.25 1.16667Z\"\n\t\t\t\t\tfill={_fill}\n\t\t\t\t/>\n\t\t\t}\n\t\t\twidth={12}\n\t\t\theight={12}\n\t\t/>\n\t);\n};\n","import { IconProps } from '@icons/all-bets';\nimport { FC } from 'react';\nimport { Svg } from '@legacyApp/client/components/svg/Svg';\nimport { useId } from '../hooks/useId';\n\nexport const InHouse: FC<IconProps> = ({ fill, fillStop }) => {\n\tconst { get } = useId({ id: 'inhouse' });\n\tconst fill_ = fill || 'white';\n\tconst fillStop_ = fillStop || fill;\n\treturn Svg({\n\t\tcontent: (\n\t\t\t<>\n\t\t\t\t<path\n\t\t\t\t\td=\"M7.8274 0.0175076C7.77954 0.0311503 7.69409 0.068669 7.63939 0.0993652C7.58128 0.130061 5.86531 1.82176 3.82118 3.86477C1.19253 6.48759 0.0884267 7.61311 0.0508257 7.70179C-0.00728494 7.84504 -0.0175398 8.12472 0.0303161 8.25091C0.0850085 8.38734 0.27985 8.58857 0.426836 8.65337C0.713971 8.78639 1.00452 8.71818 1.27457 8.45214L1.43523 8.29525V11.8628V15.4304L1.53094 15.6112C1.5993 15.7442 1.67109 15.8226 1.79415 15.8977L1.95822 16H7.99831H14.0384L14.2025 15.8977C14.3255 15.8226 14.3973 15.7442 14.4657 15.6112L14.5614 15.4304V11.8628V8.29525L14.7255 8.45214C14.9101 8.63632 15.081 8.71818 15.2792 8.71818C15.7851 8.71818 16.1406 8.17588 15.9458 7.70179C15.8774 7.5449 8.52473 0.188043 8.3333 0.085722C8.1829 0.0106868 7.95046 -0.0234207 7.8274 0.0175076ZM10.5518 4.2911L13.0915 6.82524V10.6861V14.5505H7.99831H2.90508V10.6896V6.82524L5.44144 4.29451C6.83952 2.89954 7.98806 1.76037 7.99831 1.76037C8.00857 1.76037 9.15711 2.89954 10.5518 4.2911Z\"\n\t\t\t\t\tfill={get().url}\n\t\t\t\t/>\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={get().id}\n\t\t\t\t\t\tx1=\"16\"\n\t\t\t\t\t\ty1=\"16\"\n\t\t\t\t\t\tx2=\"-1.43051e-06\"\n\t\t\t\t\t\ty2=\"4.76837e-07\"\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop stopColor={fill_} />\n\t\t\t\t\t\t<stop offset=\"1\" stopColor={fillStop_} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t</defs>\n\t\t\t</>\n\t\t),\n\t\twidth: 16,\n\t\theight: 16,\n\t});\n};\n","import { IconProps } from '@icons/all-bets';\nimport { FC } from 'react';\nimport { Svg } from '@legacyApp/client/components/svg/Svg';\nimport { useId } from '../hooks/useId';\n\nexport const NewGames: FC<IconProps> = ({ fill, fillStop }) => {\n\tconst { get } = useId({ id: 'newgames' });\n\tconst color = fill || 'white';\n\treturn (\n\t\t<Svg\n\t\t\tcontent={\n\t\t\t\t<>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M8 8.4375C8.51777 8.4375 8.9375 8.01777 8.9375 7.5C8.9375 6.98223 8.51777 6.5625 8 6.5625C7.48223 6.5625 7.0625 6.98223 7.0625 7.5C7.0625 8.01777 7.48223 8.4375 8 8.4375Z\"\n\t\t\t\t\t\tfill={get().url}\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\t\t\tclipRule=\"evenodd\"\n\t\t\t\t\t\td=\"M7.29336 1.15936C7.49213 0.995157 7.74195 0.905273 7.9999 0.905273C8.25863 0.905273 8.50918 0.995705 8.70825 1.16086C9.47597 1.78602 11.1379 3.33632 12.0564 5.72386C12.3711 6.54175 12.596 7.45191 12.6707 8.44893L15.0618 11.3183C15.1743 11.4504 15.2537 11.6075 15.2934 11.7765C15.3329 11.9441 15.3322 12.1185 15.2915 12.2857L14.3319 16.6313L14.3315 16.6328C14.2898 16.819 14.2014 16.9915 14.0746 17.1341C13.9478 17.2767 13.7869 17.3848 13.6069 17.448C13.4269 17.5113 13.2337 17.5278 13.0456 17.4959C12.8575 17.464 12.6803 17.3845 12.5313 17.2654L10.3246 15.5001H5.67518L3.46823 17.2656C3.31916 17.3847 3.14225 17.464 2.95413 17.4959C2.76601 17.5278 2.57287 17.5113 2.39286 17.448C2.21286 17.3848 2.05191 17.2767 1.92514 17.1341C1.79838 16.9915 1.70997 16.819 1.66823 16.6328L1.66788 16.6313L0.708279 12.2857C0.667584 12.1185 0.666894 11.9441 0.706321 11.7765C0.746106 11.6074 0.825585 11.4503 0.93816 11.318L3.28306 8.51012C3.35175 7.48759 3.58119 6.55539 3.90589 5.71943C4.83344 3.33137 6.5166 1.78139 7.29336 1.15936ZM11.686 8.72088C11.6805 8.68694 11.6785 8.6526 11.6801 8.61845C11.6202 7.67899 11.4117 6.83302 11.1231 6.08292C10.2924 3.92383 8.77688 2.50603 8.07491 1.93475L8.07001 1.9307C8.05034 1.91427 8.02553 1.90527 7.9999 1.90527C7.97427 1.90527 7.94945 1.91427 7.92978 1.9307L7.92162 1.93738C7.21241 2.50474 5.67665 3.92242 4.83804 6.08149C4.53796 6.85409 4.32423 7.72862 4.27332 8.70245C4.27335 8.71953 4.27251 8.73663 4.2708 8.75368C4.19496 10.3938 4.58145 12.3134 5.79161 14.5001H10.2053C11.3984 12.2988 11.7713 10.3683 11.686 8.72088ZM14.2955 11.9607L12.6629 10.0017C12.5404 11.4739 12.0839 13.102 11.1405 14.8722L13.1558 16.4844C13.1723 16.4976 13.192 16.5064 13.2129 16.51C13.2338 16.5135 13.2552 16.5117 13.2752 16.5046C13.2952 16.4976 13.3131 16.4856 13.3272 16.4698C13.3412 16.454 13.3511 16.4346 13.3557 16.4141L14.3163 12.0641L14.3197 12.0499C14.3233 12.0354 14.3234 12.0202 14.32 12.0056C14.3166 11.991 14.3097 11.9774 14.2999 11.966L14.2955 11.9607ZM3.30273 10.0467L1.70396 11.9611L1.69982 11.966C1.69006 11.9774 1.68317 11.991 1.67974 12.0056C1.6763 12.0202 1.67642 12.0354 1.68008 12.0499L1.68342 12.0641L2.64412 16.4145C2.6488 16.435 2.65858 16.454 2.67256 16.4698C2.68664 16.4856 2.70453 16.4976 2.72453 16.5046C2.74453 16.5117 2.76599 16.5135 2.78689 16.51C2.80775 16.5064 2.82747 16.4976 2.84401 16.4844L4.85642 14.8744C3.90375 13.1221 3.43597 11.5083 3.30273 10.0467Z\"\n\t\t\t\t\t\tfill={get(1).url}\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M6.24988 17.5C6.24988 17.2239 6.47374 17 6.74988 17H9.24988C9.52602 17 9.74988 17.2239 9.74988 17.5C9.74988 17.7761 9.52602 18 9.24988 18H6.74988C6.47374 18 6.24988 17.7761 6.24988 17.5Z\"\n\t\t\t\t\t\tfill={get(1).url}\n\t\t\t\t\t/>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\tid={get().id}\n\t\t\t\t\t\t\tx1=\"8.9375\"\n\t\t\t\t\t\t\ty1=\"6.5625\"\n\t\t\t\t\t\t\tx2=\"7.0625\"\n\t\t\t\t\t\t\ty2=\"8.4375\"\n\t\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<stop stopColor={fillStop || color} />\n\t\t\t\t\t\t\t<stop offset=\"1\" stopColor={color} />\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\tid={get(1).id}\n\t\t\t\t\t\t\tx1=\"15.3225\"\n\t\t\t\t\t\t\ty1=\"0.905273\"\n\t\t\t\t\t\t\tx2=\"-1.56981\"\n\t\t\t\t\t\t\ty2=\"15.3771\"\n\t\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<stop stopColor={fillStop || color} />\n\t\t\t\t\t\t\t<stop offset=\"1\" stopColor={color} />\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t</defs>\n\t\t\t\t</>\n\t\t\t}\n\t\t\twidth={16}\n\t\t\theight={18}\n\t\t/>\n\t);\n};\n","import { IconProps } from '@icons/all-bets';\nimport { Svg } from '@legacyApp/client/components/svg/Svg';\n\nexport const FavoriteIconV2 = ({ fill }: IconProps) => {\n\tconst fill_ = fill || 'white';\n\treturn (\n\t\t<Svg\n\t\t\tcontent={\n\t\t\t\t<path\n\t\t\t\t\td=\"M264.434,745.453l1.771,3.589a.842.842,0,0,0,.634.46l3.96.576a.842.842,0,0,1,.467,1.437l-2.865,2.793a.84.84,0,0,0-.243.745l.677,3.944a.843.843,0,0,1-1.223.888l-3.541-1.862a.842.842,0,0,0-.784,0l-3.542,1.862a.842.842,0,0,1-1.222-.888l.676-3.944a.842.842,0,0,0-.242-.745l-2.866-2.793a.842.842,0,0,1,.467-1.437l3.96-.576a.84.84,0,0,0,.634-.46l1.771-3.589A.843.843,0,0,1,264.434,745.453Z\"\n\t\t\t\t\ttransform=\"translate(-255.072 -744.234)\"\n\t\t\t\t\tfill={'transparent'}\n\t\t\t\t\tstroke={fill_}\n\t\t\t\t\tstrokeMiterlimit=\"10\"\n\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t/>\n\t\t\t}\n\t\t\twidth={17.212}\n\t\t\theight={16.519}\n\t\t/>\n\t);\n};\n","import styled, { css } from 'styled-components';\nimport { rgba } from 'polished';\nimport { chatViewport } from '@legacyApp/client/modules/style/methods/chatViewport';\nimport { calcStyle } from '@legacyApp/client/modules/style/methods/calcStyle';\nimport { StyledLoader } from '@legacyApp/client/components/loader/Loader.styled';\n\nexport const StyledListWrapper = styled.div`\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tmargin-top: 1rem;\n\tpadding-bottom: 40px;\n\n\t${StyledLoader} {\n\t\tbackground: ${rgba('#1c2533', 0.6)};\n\t\tpointer-events: none;\n\t\tposition: fixed;\n\t\tz-index: 10;\n\t}\n\n\t${chatViewport(\n\t\t(viewportPadding) => css`\n\t\t\t@media (max-width: ${(props) =>\n\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\ta: props.theme.media_v2.max_mobile_medium,\n\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t})}) {\n\t\t\t\tpadding-bottom: 20px;\n\t\t\t}\n\t\t`,\n\t)}\n`;\n","import styled from 'styled-components';\n\nexport const StyledLoaderListItemWrapper = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 0 10px 10px 0;\n\t> svg {\n\t\twidth: 220px;\n\n\t\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\t\twidth: 200px;\n\t\t}\n\n\t\t@media (max-width: ${(props) => props.theme.media.maxWidthSmallTablet}) {\n\t\t\twidth: 175px;\n\t\t}\n\t}\n\t&:last-child {\n\t\tmargin: 0 0 10px 0;\n\t}\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { transSlots } from '@legacyApp/client/modules/translation/translate';\n\nexport const StyledNoGames = styled.div.attrs({\n\tclassName: 'text-style-md-regular',\n})`\n\tdisplay: block;\n\tpadding: 0 0 1rem 1rem;\n`;\n\nexport const NoGames: FC = () => {\n\treturn (\n\t\t<StyledNoGames>\n\t\t\t{transSlots({ label: 'There are no games in this category' })}.\n\t\t</StyledNoGames>\n\t);\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { fontSize } from '@legacyApp/client/modules/style/mixins/fontSize';\nimport { trans } from '@legacyApp/client/modules/translation/translate';\nimport { generateSlotProviderUrl } from '@modules/slots/services/Slots.service';\nimport { ProviderDTO } from '@modules/slots/store/slots.types';\n\nimport { LinkTo } from '@common/components/default/LinkTo/LinkTo';\nimport { ProviderLogo } from '@modules/slots/components/ProviderLogo';\n\ninterface ProviderTileProps {\n\tslug: ProviderDTO['slug'];\n\tisNew: ProviderDTO['new'];\n\tname: ProviderDTO['name'];\n}\n\nexport const StyledProviderTileContainer = styled.div`\n\talign-items: center;\n\tbackground: var(--color-dark-500);\n\tborder-radius: 12px;\n\tcursor: pointer;\n\tdisplay: flex;\n\theight: 80px;\n\tjustify-content: center;\n\tpadding: 8px 24px;\n\twidth: 216px;\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\theight: 70px;\n\t\twidth: 191px;\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthSmallTablet}) {\n\t\theight: 60px;\n\t\twidth: 141px;\n\t}\n\n\t> img {\n\t\twidth: 100%;\n\t}\n`;\n\nconst StyledProviderNewBadge = styled.span`\n\tbackground: ${(props) => props.theme.colors.gold};\n\tborder-radius: 12px;\n\t${fontSize({ size: '12px', sizeDesktop: '12px', sizeBigScreen: '12px' })};\n\tdisplay: inline-block;\n\tpadding: 0.1rem 0.4rem;\n\tposition: absolute;\n\tright: 0;\n\ttext-transform: uppercase;\n\ttop: auto;\n`;\n\nconst StyledATag = styled.a`\n\tdisplay: block;\n\theight: 100%;\n\tposition: relative;\n\twidth: 100%;\n\n\t&:hover {\n\t\topacity: 0.65;\n\t}\n`;\n\nexport const ProviderTile: FC<ProviderTileProps> = ({ slug, isNew, name }) => {\n\treturn (\n\t\t<LinkTo href={generateSlotProviderUrl(slug)} passHref>\n\t\t\t<StyledATag>\n\t\t\t\t{isNew ? (\n\t\t\t\t\t<StyledProviderNewBadge>\n\t\t\t\t\t\t{trans({ label: 'new' })}\n\t\t\t\t\t</StyledProviderNewBadge>\n\t\t\t\t) : null}\n\n\t\t\t\t<StyledProviderTileContainer>\n\t\t\t\t\t<ProviderLogo slug={slug} name={name} />\n\t\t\t\t</StyledProviderTileContainer>\n\t\t\t</StyledATag>\n\t\t</LinkTo>\n\t);\n};\n","import styled from 'styled-components';\n\nexport const StyledHorizontalListWrapper = styled.div`\n\tdisplay: flex;\n\toverflow: scroll;\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { useUserIsAdmin } from '@common/selectors/user.selectors';\nimport { useGetDataArray } from '@legacyApp/hooks/fetch/useGetDataArray';\nimport { useFetchProviders } from '@modules/slots/hooks/useFetchProviders';\nimport { ProviderDTO } from '@modules/slots/store/slots.types';\n\nimport { LoaderListWrapper } from '@common/components/contentLoaders/LoaderListWrapper';\nimport { RectangleLoader } from '@common/components/contentLoaders/RectangleLoader';\nimport { ScrollCards } from '@common/components/layout/ScrollCards/ScrollCards';\nimport { StyledHorizontalListWrapper } from '@modules/slots/components/HrizontalListWrapper.styled';\nimport { StyledLoaderListItemWrapper } from '@modules/slots/components/LoaderListItemWrapper.styled';\nimport { ProviderTile } from '@modules/slots/components/ProviderTile';\n\nconst DEFAULT_COUNT = 6;\n\nexport const StyledProvidersSection = styled.div`\n\tmargin-bottom: 16px;\n\t.menu-wrapper {\n\t\twidth: 100%;\n\t}\n\n\t.menu-wrapper--inner {\n\t\tdisplay: flex;\n\t}\n\n\t.scroll-menu-arrow {\n\t\ttop: -44px !important;\n\t}\n`;\n\nconst StyledProviderTileWrapper = styled.div`\n\tmargin-right: 10px;\n`;\n\nexport const ProvidersSection: FC = () => {\n\tconst { callback, options } = useFetchProviders();\n\n\tconst userIsAdmin = useUserIsAdmin();\n\n\tconst { data: providers_, loaded } = useGetDataArray<ProviderDTO>(\n\t\t`providers-${userIsAdmin}`,\n\t\tcallback,\n\t\toptions,\n\t);\n\n\treturn (\n\t\t<StyledProvidersSection>\n\t\t\t<LoaderListWrapper\n\t\t\t\tlist={providers_}\n\t\t\t\tloaded={loaded}\n\t\t\t\tpreloadElement={(el, index) => (\n\t\t\t\t\t<StyledLoaderListItemWrapper key={index}>\n\t\t\t\t\t\t<RectangleLoader id={index} />\n\t\t\t\t\t</StyledLoaderListItemWrapper>\n\t\t\t\t)}\n\t\t\t\tpreloadLength={DEFAULT_COUNT}\n\t\t\t\tloaderWrapper={StyledHorizontalListWrapper}\n\t\t\t\tlistElement={\n\t\t\t\t\t<StyledProvidersSection>\n\t\t\t\t\t\t<ScrollCards\n\t\t\t\t\t\t\tlist={providers_.map((provider: ProviderDTO) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tname: provider.name,\n\t\t\t\t\t\t\t\t\tcomponent: (\n\t\t\t\t\t\t\t\t\t\t<StyledProviderTileWrapper key={provider.id}>\n\t\t\t\t\t\t\t\t\t\t\t<ProviderTile\n\t\t\t\t\t\t\t\t\t\t\t\tslug={provider.slug}\n\t\t\t\t\t\t\t\t\t\t\t\tisNew={provider.new}\n\t\t\t\t\t\t\t\t\t\t\t\tname={provider.name}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</StyledProviderTileWrapper>\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</StyledProvidersSection>\n\t\t\t\t}\n\t\t\t/>\n\t\t</StyledProvidersSection>\n\t);\n};\n","import styled from 'styled-components';\n\nexport const StyledProgressBar = styled.div<{\n\tprogress: number;\n}>`\n\tbackground-color: var(--color-dark-500);\n\tborder-radius: 4px;\n\tdisplay: block;\n\theight: 4px;\n\twidth: 25vw;\n\t&:before {\n\t\tbackground-color: var(--color-blue-dark);\n\t\tborder-radius: 4px;\n\t\tcontent: ' ';\n\t\tdisplay: block;\n\t\theight: 100%;\n\t\twidth: ${(props) => props.progress}%;\n\t}\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '@ui/button';\nimport {\n\ttrans,\n\ttransSlots,\n} from '@legacyApp/client/modules/translation/translate';\nimport { StyledProgressBar } from '@common/components/progressBar/ProgressBar.styled';\nimport { Size } from '@uiTypes/Size';\nimport { ButtonStyleType } from '@uiTypes/ButtonStyleType';\n\ninterface ShowMoreProps {\n\tdisplayingGames: number;\n\tallGames: number;\n\tshowMore: () => void;\n}\n\nconst StyledShowMoreContainer = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin: 1rem 0;\n\t${StyledProgressBar} {\n\t\tmargin-bottom: 0.75rem;\n\t}\n`;\n\nconst StyledDisplayingGamesInfo = styled.div`\n\tmargin-bottom: 1.5rem;\n`;\n\nexport const ShowMore: FC<ShowMoreProps> = ({\n\tdisplayingGames,\n\tallGames,\n\tshowMore,\n}) => {\n\tconst progress = (displayingGames / allGames) * 100;\n\treturn (\n\t\t<StyledShowMoreContainer>\n\t\t\t<StyledProgressBar progress={progress} />\n\t\t\t<StyledDisplayingGamesInfo className=\"text-style-sm-regular\">\n\t\t\t\t{transSlots({\n\t\t\t\t\tlabel: 'Displaying {{numberOfGames}} of {{numberOfAllGames}} games',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tnumberOfGames: displayingGames,\n\t\t\t\t\t\tnumberOfAllGames: allGames,\n\t\t\t\t\t},\n\t\t\t\t})}\n\t\t\t</StyledDisplayingGamesInfo>\n\t\t\t{displayingGames !== allGames && (\n\t\t\t\t<Button\n\t\t\t\t\tlabel={trans({ label: 'Show more' })}\n\t\t\t\t\tsize={Size.LARGE}\n\t\t\t\t\tstyleType={ButtonStyleType.SECONDARY}\n\t\t\t\t\tname={'show_more_slots'}\n\t\t\t\t\tonClick={showMore}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</StyledShowMoreContainer>\n\t);\n};\n","import { FC } from 'react';\nimport styled from 'styled-components';\nimport {\n\tuseAppDeviceType,\n\tuseAppLanguage,\n} from '@common/selectors/app.selectors';\nimport { getTimestamp } from '@legacyApp/client/modules/app/timeService';\nimport { Image } from '@common/components/default/Image/Image';\nimport { SlotCategoryDTO } from '../store/slots.types';\n\nexport const useBannerSize = () => {\n\tconst deviceType = useAppDeviceType();\n\tif (deviceType === 'desktopBig') {\n\t\treturn '1920X400';\n\t}\n\tif (deviceType === 'desktop') {\n\t\treturn '1920X600';\n\t}\n\tif (deviceType === 'tablet') {\n\t\treturn '1095X463';\n\t}\n\tif (deviceType === 'mobileSmall') {\n\t\treturn '1080X1080';\n\t}\n\treturn '1200X630';\n};\n\nconst useBannerType = () => {\n\tconst isAfter = getTimestamp('2023-05-31 00:00:00') < getTimestamp();\n\treturn isAfter ? 'after' : 'before';\n};\n\nconst useBannerLanguage = () => {\n\tconst language = useAppLanguage();\n\tif (['de', 'en', 'jp', 'ru', 'tr'].indexOf(language) === -1) {\n\t\treturn 'en';\n\t}\n\treturn language;\n};\n\nexport const SlotCategoryBanner: FC<{ category: SlotCategoryDTO }> = ({\n\tcategory,\n}) => {\n\tconst language = useBannerLanguage();\n\tconst size = useBannerSize();\n\tconst type = useBannerType();\n\n\tif (category.slug !== 'drops-and-wins') {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<StyledSlotCategoryBanner>\n\t\t\t<Image\n\t\t\t\tsrc={`/img/slots/drops-and-wins/banners/${type}/${language}/${size}.png`}\n\t\t\t\talt={'Category Banner'}\n\t\t\t/>\n\t\t</StyledSlotCategoryBanner>\n\t);\n};\n\nexport const StyledSlotCategoryBanner = styled.div`\n\tmargin-bottom: 24px;\n\tmargin-top: 24px;\n\toverflow: hidden;\n\n\timg {\n\t\tborder-radius: 12px;\n\t\twidth: 100%;\n\t}\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n\tTransSlots,\n\ttransSlots,\n} from '@legacyApp/client/modules/translation/translate';\nimport {\n\tgenerateSlotCategoryUrl,\n\tgenerateSlotGroupUrl,\n\tgenerateSlotProviderUrl,\n\tgenerateSlotsHomeUrl,\n} from '@modules/slots/services/Slots.service';\nimport { ProviderDTO, SlotCategoryDTO } from '@modules/slots/store/slots.types';\n\nimport { LinkTo } from '@common/components/default/LinkTo/LinkTo';\nimport { Lobby } from '@icons/lobby';\nimport {\n\tStyledBreadcrumbs,\n\tStyledBreadcrumbsSpacer,\n} from '@modules/sports/components/Breadcrumbs/Breadcrumbs';\n\ninterface BreadcrumbsProps {\n\ttitle?: string | JSX.Element;\n\tcategory?: SlotCategoryDTO;\n\tprovider?: ProviderDTO;\n\tshowGroup?: boolean;\n}\n\nconst StyledSlotBreadcrumbs = styled(StyledBreadcrumbs)`\n\tborder-bottom: none !important;\n\tmargin-bottom: 0 !important;\n\toverflow-x: auto;\n\twhite-space: nowrap;\n`;\n\nconst SlotsBreadcrumbs: FC<BreadcrumbsProps> = ({\n\tcategory,\n\ttitle,\n\tprovider,\n\tshowGroup,\n}) => {\n\tconst categoryName = category?.name;\n\n\tconst categorySlug = category?.slug;\n\n\tconst providerName = provider?.name;\n\n\tconst providerSlug = provider?.slug;\n\n\treturn (\n\t\t<StyledSlotBreadcrumbs className=\"text-capitalize\">\n\t\t\t<LinkTo href={generateSlotsHomeUrl()}>\n\t\t\t\t<a>\n\t\t\t\t\t<Lobby fill={'#1566df'} /> Wolfbet\n\t\t\t\t</a>\n\t\t\t</LinkTo>\n\n\t\t\t{category?.id && (\n\t\t\t\t<>\n\t\t\t\t\t<StyledBreadcrumbsSpacer />\n\n\t\t\t\t\t<LinkTo href={generateSlotCategoryUrl(categorySlug)}>\n\t\t\t\t\t\t<a>{transSlots({ label: categoryName })}</a>\n\t\t\t\t\t</LinkTo>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{provider && (\n\t\t\t\t<>\n\t\t\t\t\t<StyledBreadcrumbsSpacer />\n\n\t\t\t\t\t<LinkTo href={generateSlotProviderUrl(providerSlug)}>\n\t\t\t\t\t\t<a>{providerName}</a>\n\t\t\t\t\t</LinkTo>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{showGroup && (\n\t\t\t\t<>\n\t\t\t\t\t<StyledBreadcrumbsSpacer />\n\n\t\t\t\t\t<LinkTo href={generateSlotGroupUrl('all')}>\n\t\t\t\t\t\t<a>\n\t\t\t\t\t\t\t<TransSlots label=\"Group\" />\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</LinkTo>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{title && (\n\t\t\t\t<>\n\t\t\t\t\t<StyledBreadcrumbsSpacer />\n\n\t\t\t\t\t<span className=\"text-style-md-regular\">{title}</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</StyledSlotBreadcrumbs>\n\t);\n};\n\nexport { SlotsBreadcrumbs };\n","export const SlotBannerConfig = {\n\tshowFrom: '2025-03-28T00:00:00.000Z',\n\tfrom: '2025-03-29T00:00:00.000Z',\n\tto: '2025-04-04T23:59:59.000Z',\n\tslug: 'april-fools',\n\tname: \"April Fool's Day\",\n\tprizes: [400, 200, 100],\n};\n","import { FC } from 'react';\nimport { getTimestamp } from '@legacyApp/client/modules/app/timeService';\nimport { Image } from '@common/components/default/Image/Image';\nimport {\n\tStyledSlotCategoryBanner,\n\tuseBannerSize,\n} from '@modules/slots/components/SlotCategoryBanner';\nimport { Button } from '@ui/button';\nimport routingService from '@legacyApp/client/modules/app/routingService';\nimport { useDispatchCallback } from '@legacyApp/hooks/store/useAppDispatch';\nimport { setConfirm } from '@legacyApp/client/store/confirm/confirm.actions';\nimport { trans } from '@legacyApp/client/modules/translation/translate';\nimport { Size } from '@uiTypes/Size';\nimport { ButtonStyleType } from '@uiTypes/ButtonStyleType';\nimport { SlotBannerConfig } from '@modules/slots/components/SlotsGroupPromoBanner/SlotBannerConfig';\n\nconst useAvailable = () => {\n\treturn (\n\t\tgetTimestamp(SlotBannerConfig.showFrom) < getTimestamp() &&\n\t\tgetTimestamp(SlotBannerConfig.to) > getTimestamp()\n\t);\n};\n\nexport const SlotGroupPromoBanner: FC<{\n\tslug: string;\n\tenableDetails?: boolean;\n\tclassName?: string;\n}> = ({ slug, enableDetails, className }) => {\n\tconst size = useBannerSize();\n\tconst isAvailable = useAvailable();\n\n\tconst dispatchSetConfirm = useDispatchCallback(setConfirm);\n\n\tif (slug !== SlotBannerConfig.slug || !isAvailable) {\n\t\treturn null;\n\t}\n\n\tconst props = enableDetails\n\t\t? {}\n\t\t: {\n\t\t\t\tas: 'a',\n\t\t\t\tonClick: () =>\n\t\t\t\t\troutingService.dynamicRedirect(\n\t\t\t\t\t\t`/slots/group/${SlotBannerConfig.slug}`,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t),\n\t\t  };\n\n\treturn (\n\t\t// @ts-expect-error incorrect props\n\t\t<StyledSlotCategoryBanner {...props} className={className}>\n\t\t\t<div className=\"flex justify-center items-center flex-column gap-4\">\n\t\t\t\t<Image\n\t\t\t\t\tsrc={`/img/slots/${SlotBannerConfig.slug}/${\n\t\t\t\t\t\tenableDetails ? '' : 'button/'\n\t\t\t\t\t}${size}.png`}\n\t\t\t\t\talt={SlotBannerConfig.name}\n\t\t\t\t/>\n\t\t\t\t{enableDetails && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsize={Size.SMALL}\n\t\t\t\t\t\tstyleType={ButtonStyleType.PRIMARY}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tdispatchSetConfirm({\n\t\t\t\t\t\t\t\tquestion: [\n\t\t\t\t\t\t\t\t\t`Event starts on ${new Date(\n\t\t\t\t\t\t\t\t\t\tSlotBannerConfig.from,\n\t\t\t\t\t\t\t\t\t).toDateString()} 00:00 UTC and ends on ${new Date(\n\t\t\t\t\t\t\t\t\t\tSlotBannerConfig.to,\n\t\t\t\t\t\t\t\t\t).toDateString()} 00:00 UTC.`,\n\t\t\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t\t\t`Top ${SlotBannerConfig.prizes.length} players with the highest win multiplier will share the prize pool`,\n\t\t\t\t\t\t\t\t\t...SlotBannerConfig.prizes.map(\n\t\t\t\t\t\t\t\t\t\t(prize, index) => `${index + 1}. $${prize}`,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t\t\t'Rules:',\n\t\t\t\t\t\t\t\t\t'- Minimum bet: $0.1',\n\t\t\t\t\t\t\t\t\t`- ONLY games with \"${SlotBannerConfig.slug}\" tag that are listed below can participate in promotion`,\n\t\t\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t\t\t'To participate in the event, you have to share your win to the support team. Please send our agent BET ID and a screenshot of your win. All prizes will be given after the event ends.',\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttext: 'OK',\n\t\t\t\t\t\t\t\tdisableCancelButton: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tlabel={trans({ label: 'Learn more' })}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</StyledSlotCategoryBanner>\n\t);\n};\n","import { FC, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { ScrollCardsWithTitle } from '@common/components/layout/ScrollCards/ScrollCardsWithTitle';\nimport { useGetDataArray } from '@legacyApp/hooks/fetch/useGetDataArray';\nimport { Slot, SlotCategoryDTO } from '../store/slots.types';\nimport { useFetchGames } from '../hooks/useFetchGames';\nimport { SLOTS_SCROLL_CARD_COUNT } from '../constants/Slots.constants';\nimport { useFetchNewGames } from '../hooks/useFetchNewGames';\nimport { SlotTile } from './SlotTile';\n\ninterface SlotsScrollCardsProps {\n\tname: string | JSX.Element;\n\tcategory: SlotCategoryDTO;\n\tslots: Slot[];\n\tcount: number;\n}\n\nexport const StyledSlotsScrollCardsTailWrapper = styled.div`\n\tmargin-right: 16px;\n\twidth: 153px;\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\tmargin-right: 12px;\n\t\twidth: 134px;\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthSmallTablet}) {\n\t\tmargin-right: 10px;\n\t\twidth: 97px;\n\t}\n`;\n\nexport const SlotsScrollCards: FC<SlotsScrollCardsProps> = ({\n\tname,\n\tcategory,\n\tcount,\n\tslots,\n}) => {\n\tconst { callback } = useFetchGames();\n\tconst { callback: callbackNewGames } = useFetchNewGames();\n\tconst gamesCallback = useCallback(\n\t\t() =>\n\t\t\tcallback({\n\t\t\t\tcount: SLOTS_SCROLL_CARD_COUNT,\n\t\t\t\tcategoryId: category?.id,\n\t\t\t}),\n\t\t[callback, category?.id],\n\t);\n\tconst newGamesCallback = useCallback(\n\t\t() =>\n\t\t\tcallbackNewGames({\n\t\t\t\tcount: SLOTS_SCROLL_CARD_COUNT,\n\t\t\t}),\n\t\t[callbackNewGames],\n\t);\n\tconst {\n\t\tdata: list,\n\t\tcount: _count,\n\t\tloaded,\n\t} = useGetDataArray<Slot>(\n\t\tString(category.slug),\n\t\tcategory.id ? gamesCallback : newGamesCallback,\n\t);\n\n\tconst slotsList = list?.length ? list : slots;\n\tconst slotsCount = _count || count;\n\n\tif (loaded && !list?.length) {\n\t\treturn;\n\t}\n\n\treturn (\n\t\t<ScrollCardsWithTitle\n\t\t\tname={name}\n\t\t\tloaded={loaded}\n\t\t\thref={`/slots/${category.slug}`}\n\t\t\tcount={slotsCount}\n\t\t\tlist={slotsList?.map?.((slot, index) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: slot.name,\n\t\t\t\t\tcomponent: (\n\t\t\t\t\t\t<StyledSlotsScrollCardsTailWrapper key={`${index}-${slot.slug}`}>\n\t\t\t\t\t\t\t<SlotTile {...slot} />\n\t\t\t\t\t\t</StyledSlotsScrollCardsTailWrapper>\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t})}\n\t\t/>\n\t);\n};\n","import React, {\n\tFC,\n\tPropsWithChildren,\n\tuseCallback,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { useWindowEventListener } from 'rooks';\n\nimport { isFunction } from '@common/methods/isFunction';\nimport { GAMES_ON_PAGE } from '@modules/slots/constants/SlotMenu.constants';\n\nimport { StyledSlotsGridLayout } from '@modules/slots/components/TileSlotsGrid';\n\nexport interface SlotsGridLayoutProps {\n\tsetGamesCount?: (count: number) => void;\n}\n\nconst getColumnsCount = (gridElement: HTMLElement) => {\n\tif (!gridElement) {\n\t\treturn 0;\n\t}\n\n\tconst gridComputedStyle = window.getComputedStyle(gridElement);\n\t// get number of grid rows\n\t// const gridRowCount = gridComputedStyle.getPropertyValue('grid-template-rows').split(' ').length;\n\t// get number of grid columns\n\treturn gridComputedStyle.getPropertyValue('grid-template-columns').split(' ')\n\t\t.length;\n};\n\nconst getGamesCount = (gridElement: HTMLElement) => {\n\tif (!gridElement) {\n\t\treturn GAMES_ON_PAGE;\n\t}\n\n\tconst columnsCount = getColumnsCount(gridElement);\n\n\treturn columnsCount * 6;\n};\n\nexport const SlotsGridLayout: FC<PropsWithChildren<SlotsGridLayoutProps>> = ({\n\tchildren,\n\tsetGamesCount,\n}) => {\n\tconst gridRef_ = useRef(null);\n\n\tconst [gamesCount_, setGamesCount_] = useState<number>(GAMES_ON_PAGE);\n\n\tconst updateGamesCount = useCallback(() => {\n\t\tconst gamesCount = getGamesCount(gridRef_.current);\n\n\t\tif (gamesCount) {\n\t\t\tsetGamesCount_(gamesCount);\n\t\t}\n\t}, [setGamesCount_]);\n\n\tuseWindowEventListener('resize', updateGamesCount);\n\n\tuseEffect(() => {\n\t\tupdateGamesCount();\n\t}, [updateGamesCount]);\n\n\tuseEffect(() => {\n\t\tif (!isFunction(setGamesCount)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetGamesCount(gamesCount_);\n\t}, [gamesCount_, setGamesCount]);\n\n\treturn (\n\t\t<StyledSlotsGridLayout ref={gridRef_}>{children}</StyledSlotsGridLayout>\n\t);\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { Slot } from '@modules/slots/store/slots.types';\n\nimport { LoaderListWrapper } from '@common/components/contentLoaders/LoaderListWrapper';\nimport { RectangleLoader } from '@common/components/contentLoaders/RectangleLoader';\nimport { StyledFlexContainer } from '@common/components/flex/FlexContainer';\nimport { StyledLoaderListItemWrapper } from '@modules/slots/components/LoaderListItemWrapper.styled';\nimport {\n\tSlotsGridLayout,\n\tSlotsGridLayoutProps,\n} from '@modules/slots/components/SlotsGridLayout';\nimport { SlotTile } from '@modules/slots/components/SlotTile';\n\ninterface SlotsTileGridProps {\n\titems: Slot[];\n\tloaded: boolean;\n\tsetGamesCount?: SlotsGridLayoutProps['setGamesCount'];\n}\n\nexport const StyledSlotsGridLayout = styled.div`\n\tdisplay: grid;\n\tgrid-gap: 16px;\n\tgrid-template-columns: repeat(auto-fill, minmax(175px, 1fr));\n\tmargin-bottom: 16px;\n\twidth: 100%;\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\tgrid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n\t\tgrid-gap: 12px;\n\t\tmargin-bottom: 12px;\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthSmallTablet}) {\n\t\tgrid-template-columns: repeat(auto-fill, minmax(125px, 1fr));\n\t\tgrid-gap: 10px;\n\t\tmargin-bottom: 10px;\n\t}\n`;\n\nexport const TileSlotsGrid: FC<SlotsTileGridProps> = ({\n\tsetGamesCount,\n\titems,\n\tloaded,\n}) => {\n\treturn (\n\t\t<LoaderListWrapper\n\t\t\tlist={items}\n\t\t\tloaded={loaded}\n\t\t\tloaderWrapper={StyledFlexContainer}\n\t\t\tpreloadElement={(el, index) => (\n\t\t\t\t<StyledLoaderListItemWrapper key={index}>\n\t\t\t\t\t<RectangleLoader id={index} />\n\t\t\t\t</StyledLoaderListItemWrapper>\n\t\t\t)}\n\t\t\tpreloadLength={10}\n\t\t\tlistElement={\n\t\t\t\t<SlotsGridLayout setGamesCount={setGamesCount}>\n\t\t\t\t\t{items.map((game) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SlotTile key={`${game.game_id}_${game.operator_id}`} {...game} />\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</SlotsGridLayout>\n\t\t\t}\n\t\t/>\n\t);\n};\n","export const SLOTS_SCROLL_CARD_COUNT = 10;\n","import { createContext } from 'react';\n\nexport const SlotsBottomSectionsContext = createContext<{\n\tbottomSections: any;\n\tsetBottomSections?: any;\n}>({\n\tbottomSections: {},\n\tsetBottomSections: (value) => value,\n});\n","import { createContext } from 'react';\nimport { SlotCategoryDTO } from '../store/slots.types';\n\nexport const SlotsCategoriesContext = createContext<{\n\tcategories: SlotCategoryDTO[];\n\tsetCategories: any;\n}>({\n\tcategories: [],\n\tsetCategories: (value) => value,\n});\n","import { createContext } from 'react';\n\nexport const SlotsFirstSectionContext = createContext<{\n\tfirstSection: any;\n\tsetFirstSection?: any;\n}>({\n\tfirstSection: {},\n\tsetFirstSection: (value) => value,\n});\n","import { useCallback, useContext } from 'react';\nimport { useFetchApiPromise } from '@legacyApp/hooks/fetch/useFetchApi';\nimport { UseGetDataArrayCallback } from '@legacyApp/hooks/fetch/useGetDataArray';\nimport { SlotCategoryDTO } from '../store/slots.types';\nimport { generateGetCategories } from '../services/Slots.service';\nimport { SlotsCategoriesContext } from '../context/SlotsCategoriesContext';\n\nexport const useFetchCategories = () => {\n\tconst fetchApi = useFetchApiPromise();\n\n\tconst contextSlotsCategories = useContext(SlotsCategoriesContext);\n\n\tconst callback: UseGetDataArrayCallback<SlotCategoryDTO> =\n\t\tuseCallback(async () => {\n\t\t\tconst { categories: _categories } = await fetchApi({\n\t\t\t\turl: generateGetCategories(),\n\t\t\t\tdisableErrorHandler: true,\n\t\t\t\tfromState: true,\n\t\t\t}).catch(() => ({\n\t\t\t\tcategories: contextSlotsCategories?.categories,\n\t\t\t}));\n\n\t\t\tif (contextSlotsCategories?.setCategories) {\n\t\t\t\tcontextSlotsCategories.setCategories(\n\t\t\t\t\t_categories || contextSlotsCategories?.categories,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: _categories || contextSlotsCategories?.categories || [],\n\t\t\t};\n\t\t}, [contextSlotsCategories, fetchApi]);\n\n\treturn {\n\t\tcallback,\n\t\toptions: {\n\t\t\tdata: contextSlotsCategories?.categories,\n\t\t},\n\t};\n};\n","import { useCallback } from 'react';\nimport { useFetchApiPromise } from '@legacyApp/hooks/fetch/useFetchApi';\nimport { UseGetDataArrayCallback } from '@legacyApp/hooks/fetch/useGetDataArray';\nimport { generateGetNewGamesUrl } from '../services/Slots.service';\nimport { normalizeSlots } from '../services/Slots.mapper';\nimport { Slot } from '../store/slots.types';\n\nexport const useFetchNewGames = () => {\n\tconst fetchApi = useFetchApiPromise();\n\n\tconst callback: UseGetDataArrayCallback<\n\t\tSlot,\n\t\t{\n\t\t\tcount: number;\n\t\t}\n\t> = useCallback(\n\t\tasync ({ count } = { count: undefined }) => {\n\t\t\tconst result = await fetchApi({\n\t\t\t\turl: generateGetNewGamesUrl(count),\n\t\t\t\tdisableErrorHandler: true,\n\t\t\t}).catch(() => ({\n\t\t\t\tlist: [],\n\t\t\t}));\n\n\t\t\treturn {\n\t\t\t\tdata: normalizeSlots(result?.list || []),\n\t\t\t\tcount: result?.list?.length || result?.length || 0,\n\t\t\t};\n\t\t},\n\t\t[fetchApi],\n\t);\n\n\treturn {\n\t\tcallback,\n\t};\n};\n","import React, { FC, useCallback, useContext, useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { TabNavigationWrapperStyled } from '@ui/tab-navigation/TabNavigation.styled';\nimport { transSlots } from '@legacyApp/client/modules/translation/translate';\nimport { useGetDataArray } from '@legacyApp/hooks/fetch/useGetDataArray';\nimport { SectionsTabNav } from '@common/components/home/SectionsTabNav/SectionsTabNav';\nimport { SectionsTabNavStyled } from '@common/components/home/SectionsTabNav/SectionTabNav.styled';\nimport { Loader } from '@legacyApp/client/components/loader/loader';\nimport {\n\tSlotsFiltersContainer,\n\tSlotsFiltersContext,\n} from '@modules/slots/components/SlotsFiltersContainer';\nimport { useFetchGames } from '../hooks/useFetchGames';\nimport { StyledListWrapper } from '../components/ListWrapper.styled';\nimport {\n\tProvidersSection,\n\tStyledProvidersSection,\n} from '../components/ProvidersSection';\nimport { Slot, SlotCategoryDTO } from '../store/slots.types';\nimport { TileSlotsGrid } from '../components/TileSlotsGrid';\nimport { NoGames } from '../components/NoGames';\nimport { SlotsFilters } from '../components/SlotsFilters';\nimport { ShowMore } from '../components/ShowMore';\nimport {\n\tDEFAULT_GAMES_PAGE,\n\tGAMES_ON_PAGE,\n} from '../constants/SlotMenu.constants';\nimport { SlotsBreadcrumbs } from '../components/SlotsBreadcrumbs';\nimport { SlotCategoryBanner } from '../components/SlotCategoryBanner';\n\nexport const StyledSlotContainer = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t${SectionsTabNavStyled} {\n\t\tmargin-top: 10px;\n\t}\n\n\t${TabNavigationWrapperStyled} {\n\t\tmargin-bottom: -40px;\n\t}\n\n\t${StyledProvidersSection} {\n\t\tmargin-top: 20px;\n\t}\n`;\n\nexport const StyledSectionHeader = styled.div`\n\tdisplay: flex;\n\tjustify-content: space-between;\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\tflex-direction: column;\n\t}\n`;\n\nexport const StyledHeaderTitleContainer = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n`;\n\nexport const StyledHeaderFilters = styled.div`\n\tdisplay: flex;\n`;\n\nconst SlotCategoryLayout_: FC<{ category: SlotCategoryDTO }> = ({\n\tcategory,\n}) => {\n\tconst categoryId = category?.id;\n\tconst categoryName = category?.name;\n\n\tconst { filterProviders, filterSort } = useContext(SlotsFiltersContext);\n\n\tconst [gamesCount, setGamesCount] = useState(GAMES_ON_PAGE);\n\tconst memoizedSetGamesCount = useCallback(\n\t\t(count) => setGamesCount(count),\n\t\t[],\n\t);\n\tconst [gamesPage, setGamesPage] = useState(DEFAULT_GAMES_PAGE);\n\tconst [dataKey, setDataKey] = useState('');\n\n\tconst { callback } = useFetchGames();\n\tconst gamesCallback = useCallback(\n\t\t() =>\n\t\t\tcallback({\n\t\t\t\tcount: gamesCount,\n\t\t\t\tpage: gamesPage,\n\t\t\t\tcategoryId: !categoryId ? null : categoryId,\n\t\t\t\t...(filterProviders && { provider: filterProviders }),\n\t\t\t\t...(filterSort.value && { orderBy: filterSort.value }),\n\t\t\t}),\n\t\t[\n\t\t\tgamesCount,\n\t\t\tcallback,\n\t\t\tcategoryId,\n\t\t\tfilterProviders,\n\t\t\tfilterSort.value,\n\t\t\tgamesPage,\n\t\t],\n\t);\n\tconst {\n\t\tdata: list,\n\t\tloaded,\n\t\tcount,\n\t\tloading,\n\t} = useGetDataArray<Slot>(`${dataKey}${gamesPage}`, gamesCallback);\n\n\tconst showMoreHandler = () => {\n\t\tsetGamesPage((prevGamesPage) => prevGamesPage + 1);\n\t};\n\n\tuseEffect(() => {\n\t\tconst dataKey_ = `${categoryName},${gamesCount},${filterProviders.join(\n\t\t\t',',\n\t\t)},${filterSort.value}`;\n\t\tif (dataKey_ !== dataKey) {\n\t\t\tsetGamesPage(DEFAULT_GAMES_PAGE);\n\t\t\tsetDataKey(dataKey_);\n\t\t}\n\t}, [\n\t\tcategoryId,\n\t\tcategoryName,\n\t\tdataKey,\n\t\tfilterProviders,\n\t\tfilterSort.value,\n\t\tgamesCount,\n\t]);\n\n\treturn (\n\t\t<StyledSlotContainer>\n\t\t\t<SlotCategoryBanner category={category} />\n\t\t\t<SectionsTabNav activeTabId={category.slug} />\n\t\t\t<StyledSectionHeader>\n\t\t\t\t<StyledHeaderTitleContainer>\n\t\t\t\t\t<SlotsBreadcrumbs title={transSlots({ label: categoryName })} />\n\t\t\t\t</StyledHeaderTitleContainer>\n\t\t\t\t<StyledHeaderFilters>\n\t\t\t\t\t<SlotsFilters name={categoryName} />\n\t\t\t\t</StyledHeaderFilters>\n\t\t\t</StyledSectionHeader>\n\t\t\t<StyledListWrapper>\n\t\t\t\t<Loader active={loading} />\n\t\t\t\t{list?.length === 0 && loaded && !loading && <NoGames />}\n\t\t\t\t<TileSlotsGrid\n\t\t\t\t\tsetGamesCount={memoizedSetGamesCount}\n\t\t\t\t\titems={list}\n\t\t\t\t\tloaded={loaded}\n\t\t\t\t/>\n\t\t\t\t{!!loaded && list.length > 0 && (\n\t\t\t\t\t<ShowMore\n\t\t\t\t\t\tdisplayingGames={list.length}\n\t\t\t\t\t\tallGames={count}\n\t\t\t\t\t\tshowMore={showMoreHandler}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</StyledListWrapper>\n\t\t\t<ProvidersSection />\n\t\t</StyledSlotContainer>\n\t);\n};\n\nexport const SlotCategoryLayout: typeof SlotCategoryLayout_ = (props) => {\n\treturn (\n\t\t<SlotsFiltersContainer>\n\t\t\t<SlotCategoryLayout_ {...props} />\n\t\t</SlotsFiltersContainer>\n\t);\n};\n"],"names":["StyledFlexContainer","styled","mapSlotsToDropdown","list","map","slot","id","game_id","operator_id","content","NO_RESULTS","StyledNoResults","trans","label","LOADING","active","GamesSearchBar","useState","isOpen","setIsOpen","focusRef","useRef","focus","useCallback","current","querySelector","input","toggleOpen","event","isOpen_","preventDefault","undefined","handleClickOutside_","setTimeout","outSideRef","useOnclickOutside","useFetchSearchTerm","results","loading","setTerm","term","useFetchSearchDefault","list_","termResults","defaultResults","length","getList","GameSearchBarStyled","$isOpen","ref","onClick","forceVisible","defaultActiveId","onSelect","size","Size","I","value","placeholder","simpleTrans","onChange","target","icon","Search","props","StyledDropdownButtonWrapper","InputIconWrapperStyled","css","InputBoxStyled","InputWrapperStyled","InputStyled","StyledResultLayout","theme","media_v2","max_mobile_medium","media","maxWidthTablet","Inhouse","noName","name","noList","StyledGamesGrid","StyledOfferList","$length","AVAILABLE_OFFER","offer","offerName","StyledGamesList","SectionsTabNavStyled","TabNavigationStyled","text","fonts","Regular","maxWidthSmallTablet","useMenuCategories","useFetchCategories","callback","options","categories","filter","category","show_in_menu","filterMenuCategories","useGetDataArray","data","StyledSlotsSectionsContainer","StyledProvidersSection","StyledProviderTileWrapper","ProvidersScrollCards","useFetchProviders","providersCallback","SLOTS_SCROLL_CARD_COUNT","userIsAdmin","useUserIsAdmin","providers_","count","ScrollCardsWithTitle","href","provider","component","ProviderTile","slug","isNew","getMainPageCategories","getSlots","newGames","sections","isFunction","categoryId","games","push","splice","created_at","section","firstSection","bottomSections","Lobby","useContext","SlotsFirstSectionContext","setFirstSection","SlotsBottomSectionsContext","setBottomSections","useEffect","then","firstSection_","bottomSections_","useMainSections","_firstSection","_bottomSections","dispatch","useDispatch","updateUrlQuery","tab","SlotGroupPromoBanner","SlotBannerConfig","className","SlotsScrollCards","transSlots","slots","SectionsTabNav","activeTabId","defaultTabId","isLogged","useUserIsLogged","menuCategories","onClickIndexPaths","appGoTo","generateSlotsHomeUrl","onClickRoutePaths","route","generateUrl","TABS","LobbyContent","namespace","TransNamespace","FavoriteIconV2","ROUTE","InHouse","doNotShowInTabs","NewGames","el","TabNavigation","tabs","ARROW_COLOR","controlArrow","StyledControlArrow","$type","defaultMenuStyle","alignItems","display","userSelect","defaultWrapperStyle","overflow","defaultProps","alignCenter","alignOnResize","arrowClass","arrowDisabledClass","arrowLeft","arrowRight","clickWhenDrag","dragging","hideArrows","hideSingleArrow","inertiaScrolling","inertiaScrollingSlowdown","innerWrapperClass","innerWrapperStyle","textAlign","itemClass","itemClassActive","itemStyle","menuClass","menuStyle","onFirstItemVisible","onLastItemVisible","onUpdate","scrollBy","scrollToSelected","selected","transition","translate","useButtonRole","wrapperClass","wrapperStyle","wheel","xPoint","disableTabindex","rtl","touchMoveThreshold","elemVisForMargThreshold","ArrowDefaultProps","disabledClass","ArrowWrapper","this","isDisabled","clsName","children","React","InnerWrapper","setMenuInnerRef","menuInner","key","elem","elKey","index","setRef","state","items","mounted","style","transform","whiteSpace","innerStyle","wrapperStyles","inst","Item","i","String","tabIndex","role","setItems","itemId","arr","selectItem","forwardClickHandler","isElementActive","ScrollMenu","firstItemVisible","lastItemVisible","leftArrowVisible","rightArrowVisible","startDragTranslate","xDraggedDistance","Object","entries","menuWrapper","menuItems","visibleItems","getVisibleItems","offset","includes","slice","checkFirstLastItemVisibility","setState","setInitial","currentWindowHeight","innerHeight","prevWindowHeight","clearTimeout","resizeTimer","resize","updateWidth","window","translateProp","translateState","getMenuItems","newState","translateIsValid","firstPageOffset","isScrollNeeded","getOffsetToItemByKey","item","getItemByKey","itemKey","newTranslate","Boolean","reduce","acc","getClientRect","width","wWidth","innerWidth","menuPos","x","menuWidth","allItemsWidth","getItemsWidth","getWidth","getPagesOffsets","lastPageOffset","visibleItemsStart","getCenterOffset","visibleItemsEnd","getFirstPageOffset","getLastPageOffset","elWidth","getItemIndex","getOffsetToItemByIndex","elementVisible","leftEdge","rightEdge","pos","posWithWidth","findIndex","left","itemIndex","getItemIndexByKey","visibleItemsWithNewTranslate","itBeforeStart","getOffsetAtStart","itAfterEnd","getOffsetAtEnd","find","ind","x2","visibleItem","visibleIndex","nextItemIndex","getPrevItem","getNextItem","newOffset","prevItem","prevItemIndex","getScrollLeftOffset","getScrollRightOffset","e","deltaY","handleArrowClick","isTransitioning","transl","getOffset","centerOffset","Math","abs","ev","touches","clientX","buttons","type","swipeInitX","swipeInitY","clientY","dragHistory","time","Date","now","position","handleDrag","draggingEnable","isTouchMoveUpDown","document","point","getPoint","diff","result","swipeCurrentX","swipeCurrentY","xDiff","yDiff","handleDragStop","currentTime","recentEntries","entry","first","last","speed","translateOld","lastTranslateUpdate","err","info","addEventListener","onLoad","resizeHandler","screen","orientation","handleDragWrapper","handleDragStopWrapper","setIsTransitioning","onLoadTimer","forceUpdate","nextProps","nextState","translateNew","draggingNew","firstItemVisibleNew","lastItemVisibleNew","translateProps","selectedProps","translatePropsNew","selectedPropsNew","translatePropsDiff","notUndefOrNull","translateDiff","selectedPropsDiff","selectedDiff","propsDiff","firstItemVisibleDiff","lastItemVisibleDiff","translateResult","newMenuItems","newTranslateProps","needUpdate","prevProps","prevState","cancelAnimationFrame","frameId","rafTimer","requestAnimationFrame","setFirstLastItemVisibility","removeEventListener","arrowsVisible","isArrowsVisible","menuStyles","itemWrapperStyle","arrowProps","isLeft","classnames","right","arrowLeftDisabled","arrowRightDisabled","notDisabledArrow","onWheel","handleWheel","setWrapperRef","onMouseDown","handleDragStart","onTouchStart","onTouchEnd","onMouseMove","onTouchMove","onItemClick","handleArrowClickRight","Component","SCROLL_MENU_PROPS","ScrollCards","menuProps","loaded","noDataContent","ScrollMenuRef","isChatVisible","useChatVisible","isChatVisiblePrev","usePrevious","useScrollMenuRefHandling","Array","RectangleLoader","height","Menu","StyledScrollCardsWrapper","CSSClassNameScrollCardsWithTitle","chatViewport","viewportPadding","calcStyle","a","b","maxWidthMobile","colors","darkActive","min_tablet_large","min_desktop_medium","StyledScrollCardsWithTitle","$isNavButton","StyledScrollCardsHeader","StyledScrollCardsTitle","StyledScrollCardsNavigation","isMobile","useAppMobile","nameComponent","isNavButton","styleType","ButtonStyleType","_fill","fill","fillRule","clipRule","d","fillStop","get","useId","fill_","fillStop_","Svg","url","x1","y1","y2","gradientUnits","stopColor","color","stroke","strokeMiterlimit","strokeWidth","StyledListWrapper","StyledLoader","rgba","StyledLoaderListItemWrapper","StyledNoGames","NoGames","StyledProviderTileContainer","StyledProviderNewBadge","gold","fontSize","sizeDesktop","sizeBigScreen","StyledATag","generateSlotProviderUrl","passHref","StyledHorizontalListWrapper","ProvidersSection","LoaderListWrapper","preloadElement","preloadLength","loaderWrapper","listElement","StyledProgressBar","progress","StyledShowMoreContainer","StyledDisplayingGamesInfo","ShowMore","displayingGames","allGames","showMore","numberOfGames","numberOfAllGames","useBannerSize","deviceType","useAppDeviceType","SlotCategoryBanner","language","useAppLanguage","indexOf","useBannerLanguage","getTimestamp","StyledSlotCategoryBanner","src","alt","StyledSlotBreadcrumbs","StyledBreadcrumbs","SlotsBreadcrumbs","title","showGroup","categoryName","categorySlug","providerName","providerSlug","generateSlotCategoryUrl","generateSlotGroupUrl","showFrom","from","to","prizes","enableDetails","isAvailable","dispatchSetConfirm","useDispatchCallback","setConfirm","as","routingService","question","toDateString","prize","disableCancelButton","StyledSlotsScrollCardsTailWrapper","useFetchGames","callbackNewGames","useFetchNewGames","gamesCallback","newGamesCallback","_count","slotsList","slotsCount","getGamesCount","gridElement","GAMES_ON_PAGE","columnsCount","getComputedStyle","getPropertyValue","split","getColumnsCount","SlotsGridLayout","setGamesCount","gridRef_","gamesCount_","setGamesCount_","updateGamesCount","gamesCount","useWindowEventListener","StyledSlotsGridLayout","TileSlotsGrid","game","SlotTile","createContext","SlotsCategoriesContext","setCategories","fetchApi","useFetchApiPromise","contextSlotsCategories","generateGetCategories","disableErrorHandler","fromState","_categories","generateGetNewGamesUrl","normalizeSlots","StyledSlotContainer","TabNavigationWrapperStyled","StyledSectionHeader","StyledHeaderTitleContainer","StyledHeaderFilters","SlotCategoryLayout_","SlotsFiltersContext","filterProviders","filterSort","memoizedSetGamesCount","DEFAULT_GAMES_PAGE","gamesPage","setGamesPage","dataKey","setDataKey","page","orderBy","dataKey_","join","prevGamesPage","SlotCategoryLayout"],"mappings":"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","debug_id":"e0ea3cf3-79cc-5a41-9ade-5ac2e02b3d33"}