{"version":3,"file":"static/chunks/23883-3862b0c1ca1470d9.js","sources":["webpack://_N_E/./src/common/components/TabNavigation/TabNavigation.context.ts","webpack://_N_E/./src/common/components/TabNavigation/useTabNavigation.ts","webpack://_N_E/./src/common/components/TabNavigation/index.tsx","webpack://_N_E/./src/common/components/filterDropdown/FilterDropdown.tsx","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/SlotsFilters.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 { createContext } from 'react';\nimport { TabButtonProps } from '@ui/tab-button';\nimport { UseTabNavigationResult } from './useTabNavigation';\n\nexport const TabNavigationContext = createContext<{\n\tactiveId: TabButtonProps['id'];\n\tchangeTabById: UseTabNavigationResult['changeTabById'];\n}>({\n\tactiveId: null,\n\tchangeTabById: null,\n});\n","import { TabNavigationProps } from '@ui/tab-navigation';\nimport { FC, useCallback, useEffect, useState } from 'react';\nimport { TabButtonProps } from '@ui/tab-button';\nimport { useAppDispatch } from '@legacyApp/hooks/store/useAppDispatch';\nimport { updateUrlQuery } from '@legacyApp/client/store/app/app.actions';\nimport { QueryKeys, useRouterQueryKey } from '../../selectors/router.selectors';\nimport { useOnMount } from '../../hooks/useOnMount';\nimport { isFunction } from '../../methods/isFunction';\n\nexport interface UseTabNavigationProps {\n\ttabs: TabNavigationProps['tabs'];\n\tactiveTabId?: TabNavigationProps['activeTabId'];\n\tdefaultTabId?: TabNavigationProps['activeTabId'];\n\tqueryKey?: QueryKeys;\n\thandleUrlQuery?: boolean;\n\tonChange?: (tab: TabButtonProps) => void;\n}\n\nexport interface UseTabNavigationResult {\n\tactiveTabId: TabNavigationProps['activeTabId'];\n\tonTabClick: TabNavigationProps['onClick'];\n\tchangeTabById: (tabId: TabButtonProps['id']) => void;\n\tcontent: FC;\n}\n\nconst getTab = (tabs: TabNavigationProps['tabs'], tabId?: string) => {\n\tif (!tabId) {\n\t\treturn null;\n\t}\n\treturn tabs.find((tab) => tab.id === tabId);\n};\n\nconst getQueryKey = (queryKey: string) =>\n\tqueryKey === undefined ? QueryKeys.TAB : queryKey;\n\nexport const useTabNavigation = ({\n\ttabs,\n\tactiveTabId,\n\tdefaultTabId,\n\tqueryKey,\n\thandleUrlQuery,\n\tonChange,\n}: UseTabNavigationProps): UseTabNavigationResult => {\n\tconst [_queryKey, setQueryKey] = useState(getQueryKey(queryKey));\n\tconst dispatch = useAppDispatch();\n\tconst routerQueryTab = useRouterQueryKey(_queryKey);\n\tconst [activeTab, setActiveTab] = useState(null);\n\n\tconst _setActiveTab = useCallback(\n\t\t(tab: TabButtonProps) => {\n\t\t\tif (tab?.id === activeTab?.id) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetActiveTab(tab);\n\t\t\tif (handleUrlQuery && _queryKey) {\n\t\t\t\tdispatch(updateUrlQuery({ [_queryKey]: tab.id }));\n\t\t\t}\n\t\t\tif (isFunction(onChange)) {\n\t\t\t\tonChange(tab);\n\t\t\t}\n\t\t},\n\t\t[_queryKey, activeTab?.id, dispatch, handleUrlQuery, onChange],\n\t);\n\n\tconst changeTabById = useCallback(\n\t\t(tabId: TabButtonProps['id']) => {\n\t\t\tif (tabId) {\n\t\t\t\tconst tab = getTab(tabs, tabId);\n\t\t\t\tif (tab && tab.id !== activeTab?.id) {\n\t\t\t\t\t_setActiveTab(tab);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[_setActiveTab, activeTab?.id, tabs],\n\t);\n\n\tconst onTabClick: TabNavigationProps['onClick'] = useCallback(\n\t\t(event, { id }) => {\n\t\t\tchangeTabById(id);\n\t\t},\n\t\t[changeTabById],\n\t);\n\n\tuseOnMount(() => {\n\t\t_setActiveTab(\n\t\t\tgetTab(tabs, activeTabId || routerQueryTab || defaultTabId) || null,\n\t\t);\n\t});\n\n\tuseEffect(() => {\n\t\tif (activeTabId && activeTabId !== activeTab?.id && !routerQueryTab) {\n\t\t\tconst tab = getTab(tabs, activeTabId);\n\t\t\tif (tab && tab.id !== activeTab?.id) {\n\t\t\t\t_setActiveTab(tab);\n\t\t\t}\n\t\t}\n\t}, [_setActiveTab, activeTab?.id, activeTabId, tabs]);\n\n\tuseEffect(() => {\n\t\tif (routerQueryTab && routerQueryTab !== activeTab?.id && !activeTabId) {\n\t\t\tconst tab = getTab(tabs, routerQueryTab);\n\t\t\tif (tab && tab.id !== activeTab?.id) {\n\t\t\t\t_setActiveTab(tab);\n\t\t\t}\n\t\t}\n\t}, [_setActiveTab, activeTab?.id, routerQueryTab, tabs]);\n\n\tuseEffect(() => {\n\t\tsetQueryKey(getQueryKey(queryKey));\n\t}, [queryKey]);\n\n\t// console.log('useTabNavigation', { activeTabId, routerQueryTab, defaultTabId, queryKey });\n\n\treturn {\n\t\tactiveTabId: activeTab?.id || null,\n\t\tonTabClick,\n\t\tchangeTabById,\n\t\tcontent: activeTab?.content || null,\n\t};\n};\n","import {\n\tTabNavigation as UITabNavigation,\n\tTabNavigationProps,\n} from '@ui/tab-navigation';\nimport { FC, PropsWithChildren } from 'react';\nimport { useTabNavigation, UseTabNavigationProps } from './useTabNavigation';\nimport { TabNavigationContext } from './TabNavigation.context';\n\ninterface TabNavigationProps_ {\n\ttabs: TabNavigationProps['tabs'];\n\tonClick?: TabNavigationProps['onClick'];\n\tactiveTabId?: TabNavigationProps['activeTabId'];\n\tdefaultTabId?: TabNavigationProps['activeTabId'];\n\tqueryKey?: UseTabNavigationProps['queryKey'];\n\thandleUrlQuery?: UseTabNavigationProps['handleUrlQuery'];\n\tonChange?: UseTabNavigationProps['onChange'];\n}\n\nexport const TabNavigation: FC> = ({\n\ttabs,\n\tonClick,\n\tactiveTabId,\n\tdefaultTabId,\n\tchildren,\n\tqueryKey,\n\thandleUrlQuery,\n\tonChange,\n}) => {\n\tconst {\n\t\tactiveTabId: activeTabId_,\n\t\tcontent: Content,\n\t\tonTabClick,\n\t\tchangeTabById,\n\t} = useTabNavigation({\n\t\ttabs,\n\t\tactiveTabId,\n\t\tdefaultTabId,\n\t\tqueryKey,\n\t\thandleUrlQuery,\n\t\tonChange,\n\t});\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{children}\n\t\t\t\n\t\t\t
{Content ? : null}
\n\t\t\n\t);\n};\n","import React, { FC, PropsWithChildren } from 'react';\nimport { Button } from '@ui/button';\nimport { DropdownArrow } from '@ui/dropdown/DropdownArrow';\nimport {\n\tStyledFilterContainer,\n\tStyledFilterSelect,\n} from '@modules/slots/components/SlotsFilters';\n\nimport { Size } from '@uiTypes/Size';\nimport { ButtonStyleType } from '@uiTypes/ButtonStyleType';\nimport { dropdownDelete } from '@legacyApp/client/store/dropdown/dropdown.actions';\nimport { useAppDispatch } from '@legacyApp/hooks/store/useAppDispatch';\nimport DropdownContainer from '../../../LegacyApp/client/components/dropdown/dropdown.container';\nimport { isFunction } from '../../methods/isFunction';\n\nexport interface FilterDropdownElement {\n\tid: string;\n\telement?: JSX.Element;\n\tlabel?: string;\n}\n\nexport interface FilterDropdownProps {\n\tonClick?: (item: FilterDropdownElement) => void;\n\tid: string;\n\tlist: ReadonlyArray;\n}\n\nexport const FilterDropdown: FC> = ({\n\tonClick,\n\tid,\n\tchildren,\n\tlist,\n}) => {\n\tconst dispatch = useAppDispatch();\n\treturn (\n\t\t\n\t\t\t\n\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}\n\t\t\t\t\tlocalTheme={{ default: true }}\n\t\t\t\t\tlist={list.map((item) => ({\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tif (isFunction(onClick)) {\n\t\t\t\t\t\t\t\tonClick(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdispatch(dropdownDelete(id));\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\n\t);\n};\n","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): Array =>\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: ,\n\t\t};\n\t});\n\nconst NO_RESULTS = [\n\t{\n\t\tid: 'no-result',\n\t\tcontent: (\n\t\t\t{trans({ label: 'No results' })}\n\t\t),\n\t},\n];\n\nconst LOADING = [\n\t{\n\t\tid: 'loading',\n\t\tcontent: (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t),\n\t},\n];\n\nexport const GamesSearchBar = () => {\n\tconst [isOpen, setIsOpen] = useState(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 => {\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 toggleOpen(event, true)}\n\t\t>\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t setTerm(event.target.value)}\n\t\t\t\t\t\ticon={}\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n\nexport interface GameSearchBetStyledProps {\n\t$isOpen?: boolean;\n}\n\nexport const GameSearchBarStyled = styled.div`\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';\nimport { trans } from '@legacyApp/client/modules/translation/translate';\nimport {\n\tAVAILABLE_OFFER,\n\tMainPageOfferButton,\n} from '../../layout/MainPageOfferButton/MainPageOfferButton';\nimport { StyledGamesList } from '../../games/GamesList/GamesList.styled';\nimport { ScrollCardsWithTitle } from '../../layout/ScrollCards/ScrollCardsWithTitle';\n\nexport const Inhouse: FC<{\n\tnoName?: boolean;\n}> = ({ noName }) => {\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{AVAILABLE_OFFER.map((offer) => {\n\t\t\t\t\t\t\treturn ;\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\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 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\ttrans,\n\ttransSlots,\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';\n\nexport interface MenuItem {\n\tname: string;\n\ticon: ({\n\t\theight,\n\t\twidth,\n\t\tcolor,\n\t}: {\n\t\theight?: number;\n\t\twidth?: number;\n\t\tcolor?: string;\n\t}) => React.ReactNode;\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) => 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) => props.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) => props.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) => props.theme.media.maxWidthSmallTablet}) {\n\t\tfont-size: 12px;\n\t}\n`;\n\nexport const filterMenuCategories = (categories: SlotCategoryDTO[]) => {\n\treturn categories.filter((category) => !!category.show_in_menu);\n};\n\nexport const useMenuCategories = () => {\n\tconst { callback, options } = useFetchCategories();\n\tconst { data: categories } = useGetDataArray(\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: trans({ label: 'Home' }),\n\t\t\ticon: (props) => ,\n\t\t\turl: generateUrl(ROUTE.slotsHomePage),\n\t\t},\n\t\tisLogged && {\n\t\t\tname: transSlots({ label: 'My Favorite' }),\n\t\t\ticon: (props) => ,\n\t\t\turl: generateUrl(ROUTE.slotFavorites),\n\t\t},\n\t\t...menuCategories.map((category) => {\n\t\t\treturn {\n\t\t\t\tname: transSlots({ label: category.name }),\n\t\t\t\ticon: (props) => {\n\t\t\t\t\tconst Icon = categoriesIcons[category.slug] || EmptyIcon;\n\t\t\t\t\treturn ;\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: transSlots({ label: 'New Games' }),\n\t\t\ticon: (props) => ,\n\t\t\turl: generateUrl(ROUTE.slotNewGames),\n\t\t},\n\t\t{\n\t\t\tname: trans({ label: 'Search' }),\n\t\t\ticon: (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\n\t\t\t\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\n\t\t\t\t\t\t\t{item.icon(props)}\n\t\t\t\t\t\t\t{item.name}\n\t\t\t\t\t\t\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\n\t\t\t\t\t\t\t{component}\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\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 = ({\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(\n\t\t`providers-${userIsAdmin}`,\n\t\tprovidersCallback,\n\t\toptions,\n\t);\n\n\treturn (\n\t\t\n\t\t\t {\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\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};\n\t\t\t\t})}\n\t\t\t/>\n\t\t\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\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{_firstSection?.category?.name && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\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\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\n\t\t\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(\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}, [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';\nimport {\n\tTrans,\n\ttransSlots,\n} from '@legacyApp/client/modules/translation/translate';\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 { 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: Trans({ 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: transSlots({ label: 'My Favorite' }),\n\t\t\ticon: (props) => ,\n\t\t\tonClick: () => onClickRoutePaths(ROUTE.slotFavorites),\n\t\t},\n\t\t{\n\t\t\tid: 'in-house',\n\t\t\tlabel: Trans({ label: 'In House' }),\n\t\t\ticon: InHouse,\n\t\t\tcontent: () => ,\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: Trans({ 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: transSlots({ label: category.name }),\n\t\t\t\ticon: (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: transSlots({ label: 'New Games' }),\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\n\t\t\t\n\t\t\t\n\t\t\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 {\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
\n\t\t\t\t{children ? React.cloneElement(children, children?.props) : null}\n\t\t\t
\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 this.setMenuInnerRef(inst)}\n\t\t\t>\n\t\t\t\t{this.state.items.map((Item, i) => (\n\t\t\t\t\t\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\n\t\t\t\t))}\n\t\t\t\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 {\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
\n\t\t\t\t{notDisabledArrow && (\n\t\t\t\t\t\n\t\t\t\t\t\t{arrowLeft}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t{notDisabledArrow && (\n\t\t\t\t\t\n\t\t\t\t\t\t{arrowRight}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\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\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}, [isChatVisible]);\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\n\t\t\t}\n\t\t\t\tarrowRight={}\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\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\n> = ({ children, name, href, count, list, noList, loaded, noDataContent }) => {\n\tconst isMobile = useAppMobile();\n\n\tconst nameComponent = (\n\t\t\n\t\t\t{name}\n\t\t\n\t);\n\n\tconst isNavButton = !!href && !!count;\n\n\treturn (\n\t\t\n\t\t\t{name && (\n\t\t\t\t\n\t\t\t\t\t{href ? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{nameComponent}\n\t\t\t\t\t\t\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\n\t\t\t\t\t\t\t\n\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\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\t\n\t\t\t)}\n\t\t\t{!noList && (\n\t\t\t\t\n\t\t\t)}\n\t\t\t{children}\n\t\t\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 = ({ fill }) => {\n\tconst _fill = fill || 'white';\n\treturn (\n\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 = ({ 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\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\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),\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 = ({ fill, fillStop }) => {\n\tconst { get } = useId({ id: 'newgames' });\n\tconst color = fill || 'white';\n\treturn (\n\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\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\t\n\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\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\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\n\t\t\t{transSlots({ label: 'There are no games in this category' })}.\n\t\t\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 = ({ slug, isNew, name }) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{isNew ? (\n\t\t\t\t\t\n\t\t\t\t\t\t{trans({ label: 'new' })}\n\t\t\t\t\t\n\t\t\t\t) : null}\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\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(\n\t\t`providers-${userIsAdmin}`,\n\t\tcallback,\n\t\toptions,\n\t);\n\n\treturn (\n\t\t\n\t\t\t (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\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\n\t\t\t\t\t\t {\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\n\t\t\t\t\t\t\t\t\t\t\t\n\t\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};\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\t}\n\t\t\t/>\n\t\t\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 = ({\n\tdisplayingGames,\n\tallGames,\n\tshowMore,\n}) => {\n\tconst progress = (displayingGames / allGames) * 100;\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\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\n\t\t\t{displayingGames !== allGames && (\n\t\t\t\t\n\t\t\t)}\n\t\t\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\n\t\t\t\n\t\t\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 = ({\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\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t Wolfbet\n\t\t\t\t\n\t\t\t\n\n\t\t\t{category?.id && (\n\t\t\t\t<>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{transSlots({ label: categoryName })}\n\t\t\t\t\t\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\n\n\t\t\t\t\t\n\t\t\t\t\t\t{providerName}\n\t\t\t\t\t\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\n\n\t\t\t\t\t\n\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\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\n\n\t\t\t\t\t{title}\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nexport { SlotsBreadcrumbs };\n","import React, { FC, useCallback } from 'react';\nimport styled from 'styled-components';\n\nimport { useUserIsAdmin } from '@common/selectors/user.selectors';\nimport sortService, {\n\tDIRECTION,\n} from '@legacyApp/client/modules/app/sortService';\nimport {\n\ttrans,\n\tTransSlots,\n\ttransSlots,\n} from '@legacyApp/client/modules/translation/translate';\nimport { useFetchProviders } from '@modules/slots/hooks/useFetchProviders';\nimport { SORT_OPTION } from '@modules/slots/layouts/SlotCategory.layout';\nimport { ProviderDTO } from '@modules/slots/store/slots.types';\nimport { simpleTrans } from '@legacyApp/client/modules/translation/translationService';\nimport { useGetDataArray } from '@legacyApp/hooks/fetch/useGetDataArray';\n\nimport {\n\tFilterDropdown,\n\tFilterDropdownElement,\n} from '@common/components/filterDropdown/FilterDropdown';\nimport { Checkbox } from '@legacyApp/client/components/checkbox';\nimport { CSSClassNameButton } from '@ui/button';\nimport { DropdownArrowParentMixin } from '@ui/dropdown/DropdownArrow';\n\ninterface SlotsFiltersProps {\n\tname: string;\n\tsetFilterProvider?: (provider: number, add: boolean) => void;\n\tsetFilterSort: (sort: Option) => void;\n\tfilterSort: Option;\n\tfilterProviders?: string[];\n}\n\nexport type Option = {\n\tlabel: string;\n\tvalue: string;\n};\n\nexport const StyledFilterContainer = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tmargin-left: 0.5rem;\n\t@media (max-width: ${(props) => props.theme.media.maxWidthTablet}) {\n\t\t:first-of-type {\n\t\t\tmargin-left: 0;\n\t\t}\n\t\tjustify-content: space-between;\n\t}\n\n\t@media (max-width: ${(props) => props.theme.media.maxWidthVerySmall}) {\n\t\t.${CSSClassNameButton} {\n\t\t\tpadding: 7px 10px;\n\t\t}\n\t}\n`;\n\nexport const StyledFilterSelect = styled.div`\n\t.${CSSClassNameButton} {\n\t\t${DropdownArrowParentMixin};\n\t}\n`;\n\nexport const SlotsFilters: FC = ({\n\tsetFilterSort,\n\tsetFilterProvider,\n\tfilterSort,\n\tfilterProviders,\n}) => {\n\tconst { callback, options } = useFetchProviders();\n\n\tconst userIsAdmin = useUserIsAdmin();\n\n\tconst { data: providers } = useGetDataArray(\n\t\t`providers-${userIsAdmin}`,\n\t\tcallback,\n\t\toptions,\n\t);\n\n\tconst _setFilterSort = useCallback(\n\t\t(item: FilterDropdownElement) => {\n\t\t\tsetFilterSort({\n\t\t\t\tvalue: item.id,\n\t\t\t\tlabel: item.label,\n\t\t\t});\n\t\t},\n\t\t[setFilterSort],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{filterProviders && (\n\t\t\t\t sortService.sort(DIRECTION.ASC, a.name, b.name))\n\t\t\t\t\t\t.map((provider) => ({\n\t\t\t\t\t\t\tid: String(provider.id),\n\t\t\t\t\t\t\telement: (\n\t\t\t\t\t\t\t\t{provider.name}}\n\t\t\t\t\t\t\t\t\tonChange={(checked) => {\n\t\t\t\t\t\t\t\t\t\tsetFilterProvider(provider.id, checked);\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>\n\t\t\t\t\t{filterProviders.length > 0 ? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{transSlots({ label: 'Providers' })}\n\t\t\t\t\t\t\t{`: ${filterProviders.length}`}\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t)}\n\n\t\t\t ({\n\t\t\t\t\tid: item.value,\n\t\t\t\t\telement: (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{trans({ label: item.label })}\n\t\t\t\t\t\t
\n\t\t\t\t\t),\n\t\t\t\t\tlabel: item.label,\n\t\t\t\t}))}\n\t\t\t>\n\t\t\t\t<>{`${simpleTrans('Sort by')}: ${simpleTrans(filterSort.label)}`}\n\t\t\t\n\t\t\n\t);\n};\n","export const SlotBannerConfig = {\n\tshowFrom: '2025-02-10T00:00:00.000Z',\n\tfrom: '2025-02-10T00:00:00.000Z',\n\tto: '2025-02-17T00:00:00.000Z',\n\tslug: 'valentines-days',\n\tname: \"Valentine'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\n\t\t\t
\n\t\t\t\t\n\t\t\t\t{enableDetails && (\n\t\t\t\t\t {\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
\n\t\t
\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 = ({\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(\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 {\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\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\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> = ({\n\tchildren,\n\tsetGamesCount,\n}) => {\n\tconst gridRef_ = useRef(null);\n\n\tconst [gamesCount_, setGamesCount_] = useState(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{children}\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 = ({\n\tsetGamesCount,\n\titems,\n\tloaded,\n}) => {\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t\tpreloadLength={10}\n\t\t\tlistElement={\n\t\t\t\t\n\t\t\t\t\t{items.map((game) => {\n\t\t\t\t\t\treturn (\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\t\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 =\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, 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 { DIRECTION } from '@legacyApp/client/modules/app/sortService';\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 { Option, 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\nexport const SORT_OPTION: Option[] = [\n\t{ label: 'Popular', value: undefined },\n\t// { label: 'Featured', value: 'Featured' },\n\t{ label: 'A-Z', value: DIRECTION.ASC.toUpperCase() },\n\t{ label: 'Z-A', value: DIRECTION.DESC.toUpperCase() },\n];\n\nexport const SlotCategoryLayout: FC<{ category: SlotCategoryDTO }> = ({\n\tcategory,\n}) => {\n\tconst categoryId = category?.id;\n\tconst categoryName = category?.name;\n\n\tconst [filterProviders, setFilterProviders] = useState([]);\n\tconst [filterSort, setFilterSort] = useState(SORT_OPTION[0]);\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(`${dataKey}${gamesPage}`, gamesCallback);\n\n\tconst showMoreHandler = () => {\n\t\tsetGamesPage((prevGamesPage) => prevGamesPage + 1);\n\t};\n\n\tconst setFilterProviderHandler = (provider, add) => {\n\t\tsetFilterProviders((previousFilterProviders) => {\n\t\t\tif (add) {\n\t\t\t\treturn [...previousFilterProviders, provider];\n\t\t\t}\n\t\t\treturn previousFilterProviders.filter((item) => item !== provider);\n\t\t});\n\t};\n\n\tconst setFilterSortHandler = (sort) => {\n\t\tsetFilterSort(sort);\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\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t{list?.length === 0 && loaded && !loading && }\n\t\t\t\t\n\t\t\t\t{!!loaded && list.length > 0 && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n"],"names":["TabNavigationContext","createContext","activeId","changeTabById","getTab","tabs","tabId","find","tab","id","getQueryKey","queryKey","undefined","QueryKeys","TabNavigation","onClick","activeTabId","defaultTabId","children","handleUrlQuery","onChange","useState","_queryKey","setQueryKey","dispatch","useAppDispatch","routerQueryTab","useRouterQueryKey","activeTab","setActiveTab","_setActiveTab","useCallback","updateUrlQuery","isFunction","onTabClick","event","useOnMount","useEffect","content","useTabNavigation","activeTabId_","Content","value","className","FilterDropdown","list","active","label","size","Size","styleType","ButtonStyleType","name","localTheme","default","map","item","dropdownDelete","StyledFlexContainer","styled","mapSlotsToDropdown","slot","game_id","operator_id","NO_RESULTS","StyledNoResults","trans","LOADING","GamesSearchBar","isOpen","setIsOpen","focusRef","useRef","focus","current","querySelector","input","toggleOpen","isOpen_","preventDefault","handleClickOutside_","setTimeout","outSideRef","useOnclickOutside","useFetchSearchTerm","results","loading","setTerm","term","useFetchSearchDefault","list_","termResults","defaultResults","length","getList","GameSearchBarStyled","$isOpen","ref","forceVisible","defaultActiveId","onSelect","I","placeholder","simpleTrans","target","icon","Search","props","StyledDropdownButtonWrapper","InputIconWrapperStyled","css","InputBoxStyled","InputWrapperStyled","InputStyled","StyledResultLayout","theme","media_v2","max_mobile_medium","media","maxWidthTablet","Inhouse","noName","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","categoryId","games","push","splice","created_at","section","firstSection","bottomSections","Lobby","useContext","SlotsFirstSectionContext","setFirstSection","SlotsBottomSectionsContext","setBottomSections","then","firstSection_","bottomSections_","useMainSections","_firstSection","_bottomSections","useDispatch","SlotGroupPromoBanner","SlotBannerConfig","SlotsScrollCards","transSlots","slots","SectionsTabNav","isLogged","useUserIsLogged","menuCategories","onClickIndexPaths","appGoTo","generateSlotsHomeUrl","onClickRoutePaths","route","generateUrl","TABS","Trans","LobbyContent","FavoriteIconV2","ROUTE","InHouse","doNotShowInTabs","NewGames","el","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","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","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","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","_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","StyledFilterContainer","maxWidthVerySmall","CSSClassNameButton","StyledFilterSelect","DropdownArrowParentMixin","SlotsFilters","setFilterSort","setFilterProvider","filterSort","filterProviders","providers","_setFilterSort","sort","sortService","DIRECTION","element","checked","SORT_OPTION","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","SlotsCategoriesContext","setCategories","fetchApi","useFetchApiPromise","contextSlotsCategories","generateGetCategories","disableErrorHandler","fromState","_categories","generateGetNewGamesUrl","normalizeSlots","StyledSlotContainer","TabNavigationWrapperStyled","StyledSectionHeader","StyledHeaderTitleContainer","StyledHeaderFilters","SlotCategoryLayout","setFilterProviders","memoizedSetGamesCount","DEFAULT_GAMES_PAGE","gamesPage","setGamesPage","dataKey","setDataKey","page","orderBy","dataKey_","join","add","previousFilterProviders","prevGamesPage"],"mappings":"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","debug_id":"cf19fa26-b062-513d-976e-dc54c3cdb9ec"}