{"version":3,"file":"static/chunks/32514-634e47dd0a819a53.js","sources":["webpack://_N_E/./src/LegacyApp/hooks/app/useNoSleep.ts","webpack://_N_E/./src/common/components/auth/AuthActionButton.tsx","webpack://_N_E/./src/common/components/storeControllers/SlotsStoreController.tsx","webpack://_N_E/./src/common/icons/slots/FullScreenIcon.tsx","webpack://_N_E/./src/common/icons/slots/WideIcon.tsx","webpack://_N_E/./src/common/icons/slots/favorite.tsx","webpack://_N_E/./src/modules/slots/hooks/useUserGameWebsockets.ts","webpack://_N_E/./src/LegacyApp/methods/user/getUserIdFromAuth.ts","webpack://_N_E/./src/modules/slots/components/GameIframe.tsx","webpack://_N_E/./src/modules/slots/components/SessionExpiredContainer.styled.ts","webpack://_N_E/./src/modules/slots/components/SessionExpired.tsx","webpack://_N_E/./src/modules/slots/components/GameWindow.tsx","webpack://_N_E/./src/modules/slots/components/GameWindowWrapper.tsx","webpack://_N_E/./src/modules/slots/components/PlayContainer.styled.tsx","webpack://_N_E/./src/modules/slots/components/SlotPageInfo.tsx","webpack://_N_E/./src/modules/slots/components/RecommendedSlotsSection.tsx","webpack://_N_E/./src/modules/sports/components/Menu/Menu.styled.js","webpack://_N_E/./src/modules/slots/components/FavoriteSlot.tsx","webpack://_N_E/./src/modules/slots/hooks/useFetchFavoriteGame.ts","webpack://_N_E/./src/modules/slots/components/Fullscreen.tsx","webpack://_N_E/./src/modules/slots/components/SlotDetails.tsx","webpack://_N_E/./src/modules/slots/components/GameDesktop.tsx","webpack://_N_E/./src/modules/slots/components/GameMobile.tsx","webpack://_N_E/./src/modules/slots/components/CategoryTiles.tsx","webpack://_N_E/./src/modules/slots/layouts/Slot.layout.tsx"],"sourceRoot":"","sourcesContent":["import NoSleep from 'nosleep.js';\nimport { useCallback, useEffect, useMemo } from 'react';\n\nexport const useNoSleep = (element) => {\n\tconst noSleep = useMemo(() => {\n\t\treturn process.browser ? new NoSleep() : null;\n\t}, []);\n\n\tconst toggle = useCallback(() => {\n\t\t// @ts-expect-error invalid name in package\n\t\tif (!noSleep?.enabled) {\n\t\t\tnoSleep.enable().catch(() => null);\n\t\t}\n\t}, [noSleep]);\n\n\tuseEffect(\n\t\tfunction () {\n\t\t\tif (!noSleep || !element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement.addEventListener('click', toggle, false);\n\n\t\t\treturn () => {\n\t\t\t\telement.removeEventListener('click', toggle, false);\n\t\t\t\tnoSleep.disable();\n\t\t\t};\n\t\t},\n\t\t[element, noSleep, toggle],\n\t);\n};\n","import { FC, PropsWithChildren } from 'react';\nimport { Button, ButtonProps } from '@ui/button';\nimport {\n\tTrans,\n\tTransProps,\n} from '@legacyApp/client/modules/translation/translate';\nimport { openModal } from '@modules/modals/store/modal.actions';\nimport { useAppDispatch } from '@legacyApp/hooks/store/useAppDispatch';\nimport { MODAL_ID } from '@common/constants/modal/ids.modal.constants';\nimport { useUserIsLogged } from '@common/selectors/user.selectors';\n\nexport const AuthActionButton: FC<\n\tPropsWithChildren<{\n\t\tlabelText?: string | TransProps;\n\t\tprops?: ButtonProps;\n\t}>\n> = ({ labelText, children, props }) => {\n\tconst isLogged = useUserIsLogged();\n\tconst dispatch = useAppDispatch();\n\n\tif (!isLogged || !children) {\n\t\treturn (\n\t\t\t<Button\n\t\t\t\tlabel={<Trans label={labelText || 'Available after registration'} />}\n\t\t\t\tonClick={(): ReturnType<typeof dispatch> =>\n\t\t\t\t\tdispatch(openModal(MODAL_ID.NEW_ACCOUNT, 'auth_action_button'))\n\t\t\t\t}\n\t\t\t\tname={'submit-not-auth'}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn <>{children}</>;\n};\n","import { FC } from 'react';\nimport { enhanceComponent } from '@legacyApp/client/wrappers/enhanceComponent';\n// import { PackageType } from '../../../LegacyApp/client/store/registry/registry.constants';\n\nconst SlotsStoreController: FC = () => null;\n\n// export const slotsStoreProps = {\n// \tasyncReducers: [],\n// \tasyncEpics: [],\n// \tasyncPackage: PackageType.SLOTS,\n// };\n\nexport default enhanceComponent({\n\tSlotsStoreController,\n\t// props: slotsStoreProps,\n});\n","import { Svg } from '@legacyApp/client/components/svg/Svg';\n\nexport const FullScreenIcon = () =>\n\tSvg({\n\t\tcontent: (\n\t\t\t<>\n\t\t\t\t<g\n\t\t\t\t\tid=\"Group_95\"\n\t\t\t\t\tdata-name=\"Group 95\"\n\t\t\t\t\ttransform=\"translate(-1271.457 -744.984)\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\tid=\"Path_190\"\n\t\t\t\t\t\tdata-name=\"Path 190\"\n\t\t\t\t\t\td=\"M1284,758.186h-2.635a.675.675,0,0,0-.675.675v.448a.675.675,0,0,0,.675.675h4.433a.675.675,0,0,0,.675-.675v-4.433a.675.675,0,0,0-.675-.675h-.448a.675.675,0,0,0-.675.675v2.635A.675.675,0,0,1,1284,758.186Z\"\n\t\t\t\t\t\tfill=\"#fff\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\tid=\"Path_191\"\n\t\t\t\t\t\tdata-name=\"Path 191\"\n\t\t\t\t\t\td=\"M1284.678,744.984h-3.31a.675.675,0,0,0-.675.675v.448a.675.675,0,0,0,.675.675H1284a.675.675,0,0,1,.675.675v2.635a.675.675,0,0,0,.675.674h.448a.675.675,0,0,0,.675-.674v-4.433a.675.675,0,0,0-.675-.675Z\"\n\t\t\t\t\t\tfill=\"#fff\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\tid=\"Path_192\"\n\t\t\t\t\t\tdata-name=\"Path 192\"\n\t\t\t\t\t\td=\"M1272.58,754.2h-.448a.675.675,0,0,0-.675.675v4.433a.675.675,0,0,0,.675.675h4.432a.675.675,0,0,0,.675-.675v-.448a.675.675,0,0,0-.675-.675h-2.635a.675.675,0,0,1-.675-.675v-2.635A.675.675,0,0,0,1272.58,754.2Z\"\n\t\t\t\t\t\tfill=\"#fff\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\tid=\"Path_193\"\n\t\t\t\t\t\tdata-name=\"Path 193\"\n\t\t\t\t\t\td=\"M1272.132,744.984a.675.675,0,0,0-.675.675v4.433a.675.675,0,0,0,.675.674h.448a.674.674,0,0,0,.674-.674v-2.635a.675.675,0,0,1,.675-.675h2.635a.675.675,0,0,0,.675-.675v-.448a.675.675,0,0,0-.675-.675h-4.432Z\"\n\t\t\t\t\t\tfill=\"#fff\"\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t</>\n\t\t),\n\t\twidth: 15,\n\t\theight: 15,\n\t});\n","import { Svg } from '@legacyApp/client/components/svg/Svg';\n\nexport const WideIcon = () =>\n\tSvg({\n\t\tcontent: (\n\t\t\t<>\n\t\t\t\t<path\n\t\t\t\t\tid=\"Path_189\"\n\t\t\t\t\tdata-name=\"Path 189\"\n\t\t\t\t\td=\"M1254.577,746.484H1239.1a.714.714,0,0,0-.714.713V757.77a.714.714,0,0,0,.714.714h16.64a.714.714,0,0,0,.714-.714V747.2a.714.714,0,0,0-.714-.713Zm0,5.953V756.4a.2.2,0,0,1-.2.2h-13.9a.2.2,0,0,1-.2-.2v-7.833a.2.2,0,0,1,.2-.2h13.9a.2.2,0,0,1,.2.2Z\"\n\t\t\t\t\ttransform=\"translate(-1238.389 -746.484)\"\n\t\t\t\t\tfill=\"#fff\"\n\t\t\t\t/>\n\t\t\t</>\n\t\t),\n\t\twidth: 18,\n\t\theight: 12,\n\t});\n","import { Svg } from '@legacyApp/client/components/svg/Svg';\n\ninterface FavoriteIconProps {\n\twidth?: number;\n\theight?: number;\n\tisActive?: boolean;\n\tcolor?: string;\n\tviewBox?: string;\n}\n\nconst FavoriteIcon = ({\n\twidth,\n\theight,\n\tisActive = false,\n\tcolor,\n\tviewBox,\n}: FavoriteIconProps) =>\n\tSvg({\n\t\tcontent: (\n\t\t\t<path\n\t\t\t\td=\"M264.434,745.453l1.771,3.589a.842.842,0,0,0,.634.46l3.96.576a.842.842,0,0,1,.467,1.437l-2.865,2.793a.84.84,0,0,0-.243.745l.677,3.944a.843.843,0,0,1-1.223.888l-3.541-1.862a.842.842,0,0,0-.784,0l-3.542,1.862a.842.842,0,0,1-1.222-.888l.676-3.944a.842.842,0,0,0-.242-.745l-2.866-2.793a.842.842,0,0,1,.467-1.437l3.96-.576a.84.84,0,0,0,.634-.46l1.771-3.589A.843.843,0,0,1,264.434,745.453Z\"\n\t\t\t\ttransform=\"translate(-255.072 -744.234)\"\n\t\t\t\tfill={isActive ? '#fff' : 'none'}\n\t\t\t\tstroke={color ? color : '#fff'}\n\t\t\t\tstrokeMiterlimit=\"10\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t/>\n\t\t),\n\t\tviewBox: viewBox || '0 0 17.212 16.519',\n\t\twidth: width || 17.212,\n\t\theight: height || 16.519,\n\t});\n\nexport default FavoriteIcon;\n","import { useContext, useEffect } from 'react';\nimport { getUserIdFromAuth } from '@legacyApp/methods/user/getUserIdFromAuth';\nimport { unbindSocketChannel } from '@legacyApp/client/store/websocket/websocket.actions';\nimport {\n\tuseUserActiveCurrency,\n\tuseUserTokenValue,\n} from '@common/selectors/user.selectors';\nimport { useAppDispatch } from '@legacyApp/hooks/store/useAppDispatch';\nimport { bindSocketChannelEventThunk } from '@legacyApp/client/store/websocket/thunks/bindSocketChannelEvent.thunk';\nimport {\n\tWebsocketChannelType,\n\tWebsocketEventType,\n} from '@legacyApp/client/store/websocket/websocket.constants';\nimport { SlotsGameContext } from '../context/SlotsGameContext';\n\nexport const useUserGameWebsockets = ({\n\teventName,\n\teventCallback,\n}: {\n\teventName: WebsocketEventType;\n\teventCallback: () => void;\n}) => {\n\tconst dispatch = useAppDispatch();\n\tconst { game } = useContext(SlotsGameContext);\n\tconst { game_id, operator_id } = game || {};\n\n\tconst currency = useUserActiveCurrency();\n\tconst token = useUserTokenValue();\n\n\tuseEffect(() => {\n\t\tconst userId = token ? getUserIdFromAuth(token) : null;\n\t\tconst channel =\n\t\t\t`${currency}${userId}${operator_id}${game_id}` as WebsocketChannelType;\n\t\tif (token) {\n\t\t\tdispatch(\n\t\t\t\tbindSocketChannelEventThunk(\n\t\t\t\t\tchannel as WebsocketChannelType,\n\t\t\t\t\teventName,\n\t\t\t\t\t() => {\n\t\t\t\t\t\teventCallback();\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn () => {\n\t\t\tdispatch(unbindSocketChannel(channel, eventName));\n\t\t};\n\t}, [\n\t\tcurrency,\n\t\tdispatch,\n\t\teventCallback,\n\t\teventName,\n\t\tgame_id,\n\t\toperator_id,\n\t\ttoken,\n\t]);\n};\n","// eslint-disable-next-line import/named\nimport jwt_decode, { JwtPayload } from 'jwt-decode';\n\nexport const getUserIdFromAuth = (token) => {\n\t// console.log({ token });\n\tconst jwtDecoded: JwtPayload = jwt_decode(token);\n\treturn jwtDecoded?.sub;\n};\n","import { FC, PropsWithChildren, useCallback } from 'react';\nimport { useAppDispatch } from '@legacyApp/hooks/store/useAppDispatch';\nimport { showAlert } from '@legacyApp/client/store/alerts/alerts.actions';\nimport { WEBSOCKET_EVENTS } from '@legacyApp/client/store/websocket/websocket.constants';\nimport { useUserGameWebsockets } from '../hooks/useUserGameWebsockets';\n\nexport const GameIframe: FC<\n\tPropsWithChildren<{ code: string; style: string }>\n> = ({ code, style }) => {\n\tconst dispatch = useAppDispatch();\n\n\tconst eventCallback = useCallback(() => {\n\t\tdispatch(showAlert('error', 'Exceeds max bet amount for this game'));\n\t}, [dispatch]);\n\n\tuseUserGameWebsockets({\n\t\teventName: WEBSOCKET_EVENTS.SLOTS_BET_AMOUNT_LIMIT,\n\t\teventCallback,\n\t});\n\n\treturn <iframe srcDoc={`${style} ${code}`} />;\n};\n","import styled from 'styled-components';\nimport { borderRadius } from '@legacyApp/client/modules/style/defaults';\n\nexport const SessionExpiredContainer = styled.div`\n\talign-content: center;\n\tbackground: ${(props) => props.theme.colors.darkActive};\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tpadding: 20px 60px;\n\t${borderRadius};\n\tz-index: 2;\n\t> button {\n\t\tmargin-top: 20px;\n\t}\n`;\n","import { FC, useCallback, useEffect, useState } from 'react';\nimport { useRouter } from 'next/router';\nimport { useIdleTimer } from 'react-idle-timer';\nimport { Backdrop } from '@common/components/backdrop/Backdrop.styled';\nimport { Button } from '@legacyApp/client/components/button';\nimport { trans } from '@legacyApp/client/modules/translation/translate';\nimport { getTimestamp } from '@legacyApp/client/modules/app/timeService';\n\nimport { WEBSOCKET_EVENTS } from '@legacyApp/client/store/websocket/websocket.constants';\nimport { minute } from '@legacyApp/client/modules/app/time';\nimport { useUserGameWebsockets } from '../hooks/useUserGameWebsockets';\nimport { SessionExpiredContainer } from './SessionExpiredContainer.styled';\n\nconst IDLE_TIME = 30 * minute;\nconst IDLE_BACKGROUND_TIME = 30 * minute;\n\nexport const SessionExpired: FC = () => {\n\tconst router = useRouter();\n\tconst [sessionExpired, setSessionExpired] = useState(false);\n\tconst [lastSeenApp, setLastSeenApp] = useState(getTimestamp());\n\n\tconst handleOnIdle = () => {\n\t\tsetSessionExpired(true);\n\t};\n\n\tconst handleOnAction = (event) => {\n\t\tif (\n\t\t\tevent.type === 'visibilitychange' &&\n\t\t\tdocument.visibilityState === 'hidden'\n\t\t) {\n\t\t\tsetLastSeenApp(getTimestamp());\n\t\t}\n\t\tif (\n\t\t\tevent.type === 'visibilitychange' &&\n\t\t\tdocument.visibilityState === 'visible'\n\t\t) {\n\t\t\tconst remaining = getTimestamp() - lastSeenApp;\n\t\t\t// console.log('visibilitychange', document.visibilityState, {\n\t\t\t// \tremaining,\n\t\t\t// \tIDLE_BACKGROUND_TIME,\n\t\t\t// \tlastSeenApp,\n\t\t\t// });\n\t\t\tif (remaining > IDLE_BACKGROUND_TIME) {\n\t\t\t\tsetSessionExpired(true);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst refreshPage = () => {\n\t\trouter.reload();\n\t};\n\n\tconst { reset } = useIdleTimer({\n\t\ttimeout: IDLE_TIME,\n\t\tonIdle: handleOnIdle,\n\t\tonAction: handleOnAction,\n\t\tevents: ['mousedown', 'visibilitychange'],\n\t\tdebounce: 500,\n\t});\n\n\tuseEffect(() => {\n\t\treset();\n\t}, [reset]);\n\n\tconst eventCallback = useCallback(() => {\n\t\treset();\n\t\tsetLastSeenApp(getTimestamp());\n\t}, [reset]);\n\n\tuseUserGameWebsockets({\n\t\teventName: WEBSOCKET_EVENTS.SLOTS_GAME_ACTION,\n\t\teventCallback,\n\t});\n\n\tif (!sessionExpired) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Backdrop>\n\t\t\t<SessionExpiredContainer>\n\t\t\t\t{trans({ label: 'Session Expired' })}!{' '}\n\t\t\t\t<Button onClick={refreshPage}>{trans({ label: 'Refresh' })}</Button>\n\t\t\t</SessionExpiredContainer>\n\t\t</Backdrop>\n\t);\n};\n","import { FC } from 'react';\n\nimport { GameMode } from '@modules/slots/store/slots.types';\n\nimport { Loader } from '@legacyApp/client/components/loader/loader';\nimport { GameIframe } from '@modules/slots/components/GameIframe';\nimport { GameError } from '@modules/slots/components/GameError';\nimport { SessionExpired } from '@modules/slots/components/SessionExpired';\n\nexport type GameData =\n\t| string\n\t| {\n\t\t\ttext?: string;\n\t\t\tstatus?: number;\n\t\t\terrorStatus?: string;\n\t  };\n\nexport interface GameWindowProps {\n\tcode: GameData;\n\tstyle?: string;\n\tdownloadedMode?: GameMode;\n\tuserMode?: GameMode;\n}\n\nconst DEFAULT_IFRAME_STYLE = `\n<style>\n\tbody {\n\t\tmargin: 0;\n\t\twidth: 100vw !important;\n\t\theight: 100vh !important;\n\t\toverflow: hidden;\n\t}\n\tiframe {\n\t\twidth: 100% !important;\n\t\theight: 100% !important;\n\t}\n</style>\n`;\n\nexport const GameWindow: FC<GameWindowProps> = ({\n\tstyle,\n\tcode,\n\tdownloadedMode,\n\tuserMode,\n}) => {\n\tif (!code) {\n\t\treturn downloadedMode && <Loader active={true} />;\n\t}\n\n\tif (typeof code === 'string') {\n\t\tconst style_ = style || DEFAULT_IFRAME_STYLE;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Loader active={true} />\n\n\t\t\t\t<SessionExpired />\n\n\t\t\t\t<GameIframe style={style_} code={code} />\n\t\t\t</>\n\t\t);\n\t}\n\n\tif (!userMode) {\n\t\treturn null;\n\t}\n\n\treturn <GameError code={code} />;\n};\n","import { FC } from 'react';\nimport { GameMode } from '../store/slots.types';\nimport { useGameHTML } from '../hooks/useGameHTML';\nimport { GameWindow, GameWindowProps } from './GameWindow';\n\nexport const GameWindowWrapper: FC<{\n\tmode: GameMode;\n\tstyle?: GameWindowProps['style'];\n}> = ({ mode, style }) => {\n\tconst { gameHTML, downloadedMode } = useGameHTML({ mode });\n\n\treturn (\n\t\t<GameWindow\n\t\t\tcode={gameHTML}\n\t\t\tdownloadedMode={downloadedMode}\n\t\t\tuserMode={mode}\n\t\t\tstyle={style}\n\t\t/>\n\t);\n};\n","import styled, { css } from 'styled-components';\n\nexport const GameIframeStyles = css`\n\tiframe {\n\t\tborder: 0;\n\t\theight: 100%;\n\t\toverflow: hidden;\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t}\n`;\n\nexport const StyledPlayContainer = styled.div<{\n\t$backgroundImage?: string;\n}>`\n\talign-items: center;\n\tbackground-color: #071b32;\n\tborder-radius: 8px 8px 0 0;\n\tdisplay: flex;\n\tfont-family: FontRegular;\n\theight: 100%;\n\tjustify-content: center;\n\toverflow: hidden;\n\n\t${GameIframeStyles};\n`;\n","import React, { FC, useContext } from 'react';\nimport styled from 'styled-components';\n\nimport { SlotsGameContext } from '@modules/slots/context/SlotsGameContext';\n\nconst StyledSlotPageInfo = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 1rem 0 2rem;\n`;\n\nexport const SlotPageInfo: FC = () => {\n\tconst { game } = useContext(SlotsGameContext);\n\tconst { name, description } = game || {};\n\n\treturn (\n\t\t<StyledSlotPageInfo>\n\t\t\t<h1 className=\"font-maven font-medium leading-[30px]\">{name}</h1>\n\n\t\t\t<p className=\"font-maven font-normal text-align:justify leading-5\">\n\t\t\t\t{description ?? ''}\n\t\t\t</p>\n\t\t</StyledSlotPageInfo>\n\t);\n};\n","import { FC, useCallback, useContext } from 'react';\nimport styled from 'styled-components';\nimport { transSlots } from '@legacyApp/client/modules/translation/translate';\nimport { useGetDataArray } from '@legacyApp/hooks/fetch/useGetDataArray';\nimport { ScrollCardsWithTitle } from '@common/components/layout/ScrollCards/ScrollCardsWithTitle';\nimport { useAppMobile } from '@common/selectors/app.selectors';\nimport { SlotsGameContext } from '../context/SlotsGameContext';\nimport { useFetchGames } from '../hooks/useFetchGames';\nimport { Slot } from '../store/slots.types';\nimport { SlotTile } from './SlotTile';\nimport { StyledSlotsScrollCardsTailWrapper } from './SlotsScrollCards';\n\nexport const RecommendedSlotsSection: FC = () => {\n\tconst isMobile = useAppMobile();\n\tconst { game } = useContext(SlotsGameContext);\n\tconst { category, slug } = game || {};\n\tconst SLOT_LIMIT = 8;\n\tconst categorySlug = category?.slug;\n\n\tconst { callback } = useFetchGames();\n\tconst gamesCallback = useCallback(\n\t\t() =>\n\t\t\tcallback({\n\t\t\t\tcategoryId: category?.id,\n\t\t\t\tgameSlugToOmit: slug,\n\t\t\t\tcount: SLOT_LIMIT,\n\t\t\t}),\n\t\t[callback, category?.id, slug],\n\t);\n\tconst {\n\t\tdata: list,\n\t\tloaded,\n\t\tcount,\n\t} = useGetDataArray<Slot>(`${category?.id}_${slug}`, gamesCallback);\n\n\tif (!category?.slug) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<RecommendedSlotsSectionStyled\n\t\t\tname={\n\t\t\t\t<span>\n\t\t\t\t\t{isMobile ? null : <>{transSlots({ label: 'Recommended' })} </>}\n\t\t\t\t\t{transSlots({ label: category?.name })}\n\t\t\t\t</span>\n\t\t\t}\n\t\t\tloaded={loaded}\n\t\t\thref={`/slots/${categorySlug}`}\n\t\t\tcount={count}\n\t\t\tlist={list?.map?.((slot, index) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: slot.name,\n\t\t\t\t\tcomponent: (\n\t\t\t\t\t\t<StyledSlotsScrollCardsTailWrapper key={`${index}-${slot.slug}`}>\n\t\t\t\t\t\t\t<SlotTile {...slot} />\n\t\t\t\t\t\t</StyledSlotsScrollCardsTailWrapper>\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t})}\n\t\t/>\n\t);\n};\n\nexport const RecommendedSlotsSectionStyled = styled(ScrollCardsWithTitle)``;\n","import styled, { css } from 'styled-components';\nimport { Button } from '@legacyApp/client/components/button';\nimport { dashboard } from '@legacyApp/client/modules/style/mixins/dashboard';\nimport { fontSize } from '@legacyApp/client/modules/style/mixins/fontSize';\nimport { calcStyle } from '@legacyApp/client/modules/style/methods/calcStyle';\nimport { chatViewport } from '@legacyApp/client/modules/style/methods/chatViewport';\n\nexport const StyledMenuSection = styled.div`\n\tborder-left: 1px solid transparent;\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tfont-family: ${(props) => props.theme.text.fonts.Black};\n\tpadding: 0 5px;\n\tposition: relative;\n\n\t&:before {\n\t\tbackground-color: ${(props) => props.theme.colors.active};\n\t\tcontent: '';\n\t\theight: 30px;\n\t\tleft: 0;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\twidth: 1px;\n\t}\n\n\t&:first-of-type {\n\t\tborder-left: unset;\n\t\tpadding-left: 0 !important;\n\n\t\t&:before {\n\t\t\tcontent: unset;\n\t\t}\n\n\t\tbutton:first-of-type {\n\t\t\tmargin-left: 0 !important;\n\t\t}\n\t}\n\n\t&:last-of-type {\n\t\tpadding-right: 0 !important;\n\n\t\ta:last-of-type {\n\t\t\tmargin-right: 0 !important;\n\t\t}\n\t}\n\n\tbutton {\n\t\talign-items: center;\n\t\tdisplay: flex;\n\t\tpadding: 0 3px;\n\t\twhite-space: nowrap;\n\t\t${fontSize({\n\t\t\tsizeDiff: -2,\n\t\t\tsizeDesktopDiff: -2,\n\t\t\tsizeBigScreenDiff: -2,\n\t\t\timportant: true,\n\t\t})}\n\n\t\tsvg {\n\t\t\tmargin-right: 4px;\n\t\t}\n\n\t\tpath {\n\t\t\tfill: ${(props) => props.theme.colors.active};\n\t\t}\n\t}\n`;\n\nexport const StyledMenu = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\theight: 60px;\n\n\t.horizontal-menu {\n\t\twidth: 100%;\n\t}\n\n\tbutton[name='${(props) => props.$id}'] {\n\t\tposition: relative;\n\n\t\t&:before {\n\t\t\tbackground-color: ${(props) => props.theme.colors.active};\n\t\t\tborder-radius: 2px;\n\t\t\tbottom: -0.5rem;\n\t\t\tcontent: '';\n\t\t\theight: 3px;\n\t\t\tleft: 0;\n\t\t\tposition: absolute;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t${chatViewport(\n\t\t\t(viewportPadding) => css`\n\t\t\t\t@media (max-width: ${(props) =>\n\t\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\t\ta: props.theme.media.maxWidthTablet,\n\t\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t\t})}) {\n\t\t\t\t\t&:before {\n\t\t\t\t\t\theight: 2px;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t)}\n\t}\n\n\t${chatViewport(\n\t\t(viewportPadding) => css`\n\t\t\t@media (min-width: ${(props) =>\n\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\ta: props.theme.media.maxWidthTablet,\n\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t})}) {\n\t\t\t\t//button[name*=\"hockey\"],\n\t\t\t\t//button[name*=\"handball\"],\n\t\t\t\t//button[name*=\"american\"],\n\t\t\t\t//button[name*=\"volleyball\"] {\n\t\t\t\t//\tdisplay: none;\n\t\t\t\t//}\n\t\t\t}\n\n\t\t\t@media (max-width: ${calcStyle({\n\t\t\t\t\ta: 1080,\n\t\t\t\t\tb: viewportPadding,\n\t\t\t\t})}) and (min-width: ${(props) =>\n\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\ta: props.theme.media.maxWidthTablet,\n\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t})}) {\n\t\t\t\tbutton[name*='americal-football'] {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media (max-width: ${calcStyle({\n\t\t\t\t\ta: 940,\n\t\t\t\t\tb: viewportPadding,\n\t\t\t\t})}) and (min-width: ${(props) =>\n\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\ta: props.theme.media.maxWidthTablet,\n\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t})}) {\n\t\t\t\tbutton[name*='volleyball'] {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media (max-width: ${(props) =>\n\t\t\t\t\tcalcStyle({\n\t\t\t\t\t\ta: props.theme.media.maxWidthTablet,\n\t\t\t\t\t\tb: viewportPadding,\n\t\t\t\t\t})}) {\n\t\t\t\tmargin-top: -15px;\n\t\t\t\tmargin-bottom: 0.5rem;\n\n\t\t\t\t${dashboard(\n\t\t\t\t\t(padding) => css`\n\t\t\t\t\t\tmargin-left: -${padding};\n\t\t\t\t\t\tmargin-right: -${padding};\n\n\t\t\t\t\t\t${StyledMenuSection}:last-of-type {\n\t\t\t\t\t\t\tpadding-right: ${padding}!important;\n\t\t\t\t\t\t}\n\t\t\t\t\t`,\n\t\t\t\t)}\n\n\t\t\t\tbutton {\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tflex-direction: column;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\twidth: 45px;\n\n\t\t\t\t\tsvg {\n\t\t\t\t\t\ttransform: scale(1.5);\n\t\t\t\t\t\tmargin: 8px 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tspan {\n\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\tmax-width: 47px;\n\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\tfont-family: ${(props) => props.theme.text.fonts.Black};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t`,\n\t)}\n`;\n\nexport const StyledButton = styled(Button)`\n\tfont-family: ${(props) => props.theme.text.fonts.Bold};\n\n\tsvg {\n\t\tmin-width: 15px;\n\t}\n`;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { useUserIsLogged } from '@common/selectors/user.selectors';\nimport FavoriteIcon from '../../../common/icons/slots/favorite';\nimport { useIsFavoriteGame } from '../hooks/useFetchFavoriteGame';\nimport { Slot } from '../store/slots.types';\n\nexport const StyledFavoriteStarButton = styled.div`\n\tcursor: pointer;\n\t:hover {\n\t\topacity: 0.75;\n\t}\n`;\n\nexport const FavoriteSlot: FC<{ game: Slot }> = ({ game }) => {\n\tconst { isFavoriteGame, addToFavoriteGames, removeFromFavoriteGames } =\n\t\tuseIsFavoriteGame(game?.operator_id, game?.game_id, game?.slug);\n\tconst isLogged = useUserIsLogged();\n\n\tif (isLogged && game?.game_id) {\n\t\treturn (\n\t\t\t<StyledFavoriteStarButton\n\t\t\t\tonClick={isFavoriteGame ? removeFromFavoriteGames : addToFavoriteGames}\n\t\t\t>\n\t\t\t\t<FavoriteIcon isActive={isFavoriteGame} />\n\t\t\t</StyledFavoriteStarButton>\n\t\t);\n\t}\n\n\treturn null;\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useFetchApiPromise } from '@legacyApp/hooks/fetch/useFetchApi';\nimport { useUserId } from '@common/selectors/user.selectors';\nimport { getTimestamp } from '@legacyApp/client/modules/app/timeService';\nimport {\n\tgenerateGetIsFavoriteGameUrl,\n\tgeneratePostFavoriteGameUrl,\n} from '../services/Slots.service';\nimport transactionService from '../../transactions/transactionsService';\n\ninterface FavouriteGameDto {\n\tgameSlug: string;\n\tuuid: any;\n\tgameId: any;\n\toperatorId: any;\n}\n\nconst DEFAULT_LOADED = false;\nconst DEFAULT_FAVORITE_GAME = false;\n\nexport const useIsFavoriteGame = (\n\toperatorId: number,\n\tgameId: number,\n\tgameSlug: string,\n) => {\n\tconst fetchApi = useFetchApiPromise();\n\tconst uuid = useUserId();\n\n\tconst [loaded, setLoaded] = useState(DEFAULT_LOADED);\n\tconst [isFavoriteGame, setIsFavoriteGame] = useState(DEFAULT_FAVORITE_GAME);\n\tconst [_body, setBody] = useState<FavouriteGameDto>({\n\t\tgameId,\n\t\toperatorId,\n\t\tuuid,\n\t\tgameSlug,\n\t});\n\n\tconst addToFavoriteGames = useCallback(async () => {\n\t\tif (_body.gameId && _body.uuid && _body.operatorId && _body.gameSlug) {\n\t\t\tsetLoaded(false);\n\t\t\tawait fetchApi({\n\t\t\t\turl: generatePostFavoriteGameUrl(),\n\t\t\t\tparameters: {\n\t\t\t\t\tAuthorization: true,\n\t\t\t\t\tbody: _body,\n\t\t\t\t},\n\t\t\t\tmethod: 'POST',\n\t\t\t})\n\t\t\t\t.then(({ isFavoriteGame }) => {\n\t\t\t\t\tsetLoaded(true);\n\t\t\t\t\tif (isFavoriteGame) {\n\t\t\t\t\t\tsetIsFavoriteGame(true);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((e) => {\n\t\t\t\t\tsetLoaded(true);\n\t\t\t\t\tconsole.log(e);\n\t\t\t\t});\n\t\t}\n\t}, [fetchApi, _body]);\n\n\tconst removeFromFavoriteGames = useCallback(async () => {\n\t\tif (_body.gameId && _body.uuid && _body.operatorId && _body.gameSlug) {\n\t\t\tsetLoaded(false);\n\t\t\tawait fetchApi({\n\t\t\t\turl: generatePostFavoriteGameUrl(),\n\t\t\t\tparameters: {\n\t\t\t\t\tAuthorization: true,\n\t\t\t\t\tbody: _body,\n\t\t\t\t},\n\t\t\t\tmethod: 'DELETE',\n\t\t\t})\n\t\t\t\t.then(({ isFavoriteGame }) => {\n\t\t\t\t\tsetLoaded(true);\n\t\t\t\t\t// console.log({ isFavoriteGame, _body });\n\t\t\t\t\tsetIsFavoriteGame(isFavoriteGame);\n\t\t\t\t})\n\t\t\t\t.catch((e) => {\n\t\t\t\t\tsetLoaded(true);\n\t\t\t\t\tconsole.log(e);\n\t\t\t\t});\n\t\t}\n\t}, [fetchApi, _body]);\n\n\tconst checkFavoriteGame = useCallback(async () => {\n\t\tif (_body.gameId && _body.uuid && _body.operatorId && _body.gameSlug) {\n\t\t\tsetLoaded(false);\n\t\t\tawait fetchApi({\n\t\t\t\turl: `${generateGetIsFavoriteGameUrl()}?t=${getTimestamp()}`,\n\t\t\t\tparameters: {\n\t\t\t\t\tAuthorization: true,\n\t\t\t\t\tbody: _body,\n\t\t\t\t},\n\t\t\t\tdisableErrorHandler: true,\n\t\t\t\tmethod: 'POST',\n\t\t\t})\n\t\t\t\t.then(({ isFavoriteGame }) => {\n\t\t\t\t\tsetIsFavoriteGame(isFavoriteGame);\n\t\t\t\t\tsetLoaded(true);\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tsetLoaded(true);\n\t\t\t\t\tsetIsFavoriteGame(false);\n\t\t\t\t});\n\t\t}\n\t}, [fetchApi, _body]);\n\n\tuseEffect(() => {\n\t\tcheckFavoriteGame();\n\t}, [checkFavoriteGame]);\n\n\tuseEffect(() => {\n\t\tconst newBody = {\n\t\t\tuuid,\n\t\t\tgameId,\n\t\t\toperatorId,\n\t\t\tgameSlug,\n\t\t};\n\t\tif (!transactionService.isDuplicate(_body, newBody, Object.keys(newBody))) {\n\t\t\tsetBody(newBody);\n\t\t}\n\t}, [uuid, gameId, operatorId, gameSlug, _body]);\n\n\treturn {\n\t\tloaded,\n\t\taddToFavoriteGames,\n\t\tremoveFromFavoriteGames,\n\t\tisFavoriteGame,\n\t};\n};\n","import { FC, PropsWithChildren } from 'react';\n// eslint-disable-next-line import/named\nimport {\n\tFullScreen as FullScreenLib,\n\t// eslint-disable-next-line import/named\n\tFullScreenProps as FullScreenPropsLib,\n} from 'react-full-screen';\n\nexport const Fullscreen: FC<PropsWithChildren<FullScreenPropsLib>> = (\n\tprops,\n) => {\n\treturn <FullScreenLib {...props} />;\n};\n","import { FC, useContext } from 'react';\nimport styled from 'styled-components';\nimport { Trans } from '@legacyApp/client/modules/translation/translate';\nimport { SlotsGameContext } from '../context/SlotsGameContext';\n\nexport const SlotDetails: FC = () => {\n\tconst { game } = useContext(SlotsGameContext);\n\tconst { limit, rtp_value } = game || {};\n\n\treturn (\n\t\t<SlotDetailsStyled className=\"text-style-xs-regular\">\n\t\t\t{!!limit && (\n\t\t\t\t<div>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<Trans label=\"Max bet\" />:\n\t\t\t\t\t</span>{' '}\n\t\t\t\t\t<span>${limit}</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div>\n\t\t\t\t<span>RTP:</span>{' '}\n\t\t\t\t<span>{Number(rtp_value) ? `${rtp_value}%` : '-'}</span>\n\t\t\t</div>\n\t\t</SlotDetailsStyled>\n\t);\n};\n\nexport const SlotDetailsStyled = styled.div`\n\t> div {\n\t\t> span {\n\t\t\t&:first-of-type {\n\t\t\t\tcolor: var(--color-dark-100);\n\t\t\t}\n\n\t\t\t&:last-of-type {\n\t\t\t\tcolor: var(--color-dark-50);\n\t\t\t}\n\t\t}\n\t}\n`;\n","import { createUseStyles } from 'react-jss';\nimport styled from 'styled-components';\nimport { useFullScreenHandle } from 'react-full-screen';\nimport { FC, useCallback, useContext, useEffect, useState } from 'react';\nimport { WideIcon } from '@icons/slots/WideIcon';\nimport { FullScreenIcon } from '@icons/slots/FullScreenIcon';\nimport {\n\tStyledAspectRatioInner,\n\tStyledAspectRatioWrapper,\n} from 'src/common/components/AspectRatioWrapper/AspectRatioWrapper.styled';\nimport { GameDetailsDTO, GameMode } from 'src/modules/slots/store/slots.types';\nimport { transSlots } from 'src/LegacyApp/client/modules/translation/translate';\nimport { SlotsGameContext } from 'src/modules/slots/context/SlotsGameContext';\nimport { useAppDispatch } from 'src/LegacyApp/hooks/store/useAppDispatch';\nimport { chatActions } from 'src/modules/chat/store/chat.actions';\nimport { Button } from 'src/LegacyApp/client/components/button';\nimport { useUserTokenValue } from 'src/common/selectors/user.selectors';\nimport { openModal } from 'src/modules/modals/store/modal.actions';\nimport { MODAL_ID } from 'src/common/constants/modal/ids.modal.constants';\nimport { AuthActionButton } from 'src/common/components/auth/AuthActionButton';\nimport { useAppInitialized } from 'src/common/selectors/app.selectors';\nimport {\n\tSlotInfo,\n\tStyledSlotInfo,\n} from 'src/modules/slots/components/SlotInfo';\nimport { FavoriteSlot } from 'src/modules/slots/components/FavoriteSlot';\nimport { GameWindowWrapper } from 'src/modules/slots/components/GameWindowWrapper';\nimport { StyledPlayContainer } from 'src/modules/slots/components/PlayContainer.styled';\nimport { Fullscreen } from 'src/modules/slots/components/Fullscreen';\nimport { SlotDetails } from 'src/modules/slots/components/SlotDetails';\nimport { useSupportToggle } from '@modules/support/hooks/useSupportToggle';\nimport { lsSet } from '@modules/localStorage/methods/lsSet';\nimport { LocalStorageKeys } from '@modules/localStorage/types/localStorageKeys.type';\n\nconst useStyles = createUseStyles({\n\tgameContainer: {\n\t\tdisplay: 'flex',\n\t\tflexDirection: 'column',\n\t\tflexGrow: 1,\n\t\tminHeight: 373,\n\t},\n\trealPlayButton: {\n\t\tmargin: '5px',\n\t\tborderRadius: '2px',\n\t\tpadding: '12px',\n\t\tbackground: '#1DBB2F',\n\t\tcursor: 'pointer',\n\t\tzIndex: 1,\n\t\t'&:hover': {\n\t\t\topacity: 0.7,\n\t\t},\n\t},\n\tfunPlayButton: {\n\t\tmargin: '5px',\n\t\tborderRadius: '2px',\n\t\tpadding: '12px',\n\t\tbackground: '#0A58B9',\n\t\tcursor: 'pointer',\n\t\tzIndex: 1,\n\t\t'&:hover': {\n\t\t\topacity: 0.7,\n\t\t},\n\t},\n\ttitle: {\n\t\tfontSize: 22,\n\t\tmarginBottom: 20,\n\t},\n\tdescription: {\n\t\tfontFamily: 'RegularFont',\n\t},\n\tgameWindowControl: {\n\t\tdisplay: 'flex',\n\t\talignItems: 'center',\n\t},\n\tgameControlButton: {\n\t\tdisplay: 'flex',\n\t\tpadding: '0 8px',\n\t\tcursor: 'pointer',\n\t\t'&:hover': {\n\t\t\topacity: 0.7,\n\t\t},\n\t},\n\tfullScreenWrapper: {\n\t\tflexGrow: 1,\n\t},\n});\n\nconst getInitialGameMode = (token: any, game: GameDetailsDTO): GameMode => {\n\tif (game && !game?.has_demo && !!token) {\n\t\treturn GameMode.REAL;\n\t}\n\tif (game?.has_demo && !token) {\n\t\treturn GameMode.DEMO;\n\t}\n\treturn null;\n};\n\nexport const GameDesktop: FC = () => {\n\tconst { game } = useContext(SlotsGameContext);\n\tconst { name, provider, provider_name, provider_slug, has_demo } = game || {};\n\tconst dispatch = useAppDispatch();\n\tconst token = useUserTokenValue();\n\tconst appInitialized = useAppInitialized();\n\tconst fullScreenHandle = useFullScreenHandle();\n\tconst { toggle } = useSupportToggle();\n\n\tconst [_gameMode, setGameMode] = useState(null);\n\n\tconst wideHandle = useCallback(() => {\n\t\tdispatch(chatActions.setVisible({ isVisible: false }));\n\t\ttoggle(false);\n\t}, [dispatch, toggle]);\n\n\tconst setGameMode_ = useCallback(\n\t\t(mode: GameMode) => {\n\t\t\tif (mode !== _gameMode) {\n\t\t\t\tlsSet(LocalStorageKeys.SLOT_MODE, mode);\n\t\t\t\tsetGameMode(mode);\n\t\t\t}\n\t\t},\n\t\t[_gameMode],\n\t);\n\n\tconst onRealModeClick = useCallback(() => {\n\t\tif (!token) {\n\t\t\treturn dispatch(openModal(MODAL_ID.NEW_ACCOUNT, 'useGameHTML'));\n\t\t}\n\t\tsetGameMode_(GameMode.REAL);\n\t}, [dispatch, setGameMode_, token]);\n\n\tconst classes = useStyles();\n\n\tuseEffect(() => {\n\t\tif (!_gameMode && appInitialized) {\n\t\t\tsetGameMode(getInitialGameMode(token, game));\n\t\t}\n\t}, [token, _gameMode, setGameMode_, game, appInitialized]);\n\n\treturn (\n\t\t<div className={classes.gameContainer}>\n\t\t\t<Fullscreen\n\t\t\t\tclassName={classes.fullScreenWrapper}\n\t\t\t\thandle={fullScreenHandle}\n\t\t\t>\n\t\t\t\t<StyledGameAspectRationWrapper\n\t\t\t\t\theight={fullScreenHandle.active ? '100vh' : 'auto'}\n\t\t\t\t\toverflow={'hidden'}\n\t\t\t\t\tmaxHeight={fullScreenHandle.active ? '100%' : null}\n\t\t\t\t\tratio={16 / 9}\n\t\t\t\t>\n\t\t\t\t\t<StyledAspectRatioInner>\n\t\t\t\t\t\t<StyledPlayContainer>\n\t\t\t\t\t\t\t{_gameMode === null && (\n\t\t\t\t\t\t\t\t<StyledGameStartButtons>\n\t\t\t\t\t\t\t\t\t<AuthActionButton labelText={{ label: 'Login to real play' }}>\n\t\t\t\t\t\t\t\t\t\t<StyledButtonReal\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!game}\n\t\t\t\t\t\t\t\t\t\t\tonClick={onRealModeClick}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-capitalize\">\n\t\t\t\t\t\t\t\t\t\t\t\t{transSlots({ label: 'real play' })}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</StyledButtonReal>\n\t\t\t\t\t\t\t\t\t</AuthActionButton>\n\t\t\t\t\t\t\t\t\t{has_demo && (\n\t\t\t\t\t\t\t\t\t\t<StyledButton\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!has_demo}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => setGameMode_(GameMode.DEMO)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-capitalize\">\n\t\t\t\t\t\t\t\t\t\t\t\t{transSlots({ label: 'fun play' })}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</StyledButton>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</StyledGameStartButtons>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{name && <GameWindowWrapper mode={_gameMode} />}\n\t\t\t\t\t\t</StyledPlayContainer>\n\t\t\t\t\t</StyledAspectRatioInner>\n\t\t\t\t</StyledGameAspectRationWrapper>\n\t\t\t</Fullscreen>\n\t\t\t<StyledInfoBar>\n\t\t\t\t<div>\n\t\t\t\t\t<FavoriteSlot game={game} />\n\t\t\t\t\t{name &&\n\t\t\t\t\t\t(provider_slug || provider?.slug) &&\n\t\t\t\t\t\t(provider_name || provider?.name) && (\n\t\t\t\t\t\t\t<SlotInfo\n\t\t\t\t\t\t\t\tslotName={name}\n\t\t\t\t\t\t\t\tproviderSlug={provider_slug ?? provider?.slug}\n\t\t\t\t\t\t\t\tproviderName={provider_name ?? provider?.name}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t<StyledInfoBarSeparator />\n\t\t\t\t\t<SlotDetails />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t{has_demo && _gameMode && (\n\t\t\t\t\t\t<StyledGameModeSwitch>\n\t\t\t\t\t\t\t<StyledGameModeSwitchButton\n\t\t\t\t\t\t\t\tname={'real-game-mode-switch'}\n\t\t\t\t\t\t\t\tactive={GameMode.REAL === _gameMode}\n\t\t\t\t\t\t\t\tonClick={onRealModeClick}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{transSlots({ label: 'real' })}\n\t\t\t\t\t\t\t</StyledGameModeSwitchButton>\n\t\t\t\t\t\t\t<StyledGameModeSwitchButton\n\t\t\t\t\t\t\t\tname={'demo-game-mode-switch'}\n\t\t\t\t\t\t\t\tdisabled={!has_demo}\n\t\t\t\t\t\t\t\tactive={GameMode.DEMO === _gameMode}\n\t\t\t\t\t\t\t\tonClick={() => setGameMode_(GameMode.DEMO)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{transSlots({ label: 'fun' })}\n\t\t\t\t\t\t\t</StyledGameModeSwitchButton>\n\t\t\t\t\t\t</StyledGameModeSwitch>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className={classes.gameWindowControl}>\n\t\t\t\t\t\t<div className={classes.gameControlButton} onClick={wideHandle}>\n\t\t\t\t\t\t\t<WideIcon />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={classes.gameControlButton}\n\t\t\t\t\t\t\tonClick={fullScreenHandle.enter}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<FullScreenIcon />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</StyledInfoBar>\n\t\t</div>\n\t);\n};\n\nconst StyledInfoBarSeparator = styled.div`\n\tbackground: var(--color-misc-border);\n\theight: 30px;\n\tmargin: 0 8px;\n\twidth: 1px;\n`;\n\nconst StyledInfoBar = styled.div`\n\talign-items: center;\n\tbackground: ${(props) => props.theme.colors.darkActive};\n\tborder-radius: 0 0 8px 8px;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tpadding: 8px 24px;\n\tvertical-align: center;\n\n\t${StyledSlotInfo} {\n\t\tmargin-top: 0;\n\t}\n\n\t> div {\n\t\talign-items: center;\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tgap: 12px;\n\t\tjustify-content: space-between;\n\t}\n`;\n\nconst StyledGameAspectRationWrapper = styled(StyledAspectRatioWrapper)`\n\tmax-height: ${(props) =>\n\t\tprops.maxHeight ? props.maxHeight : 'calc(100vh - 190px)'};\n\tmin-height: 320px;\n\n\t@media (max-height: 700px) {\n\t\tmax-height: calc(100vh - 110px);\n\t}\n`;\n\nconst StyledButton = styled.button`\n\tbackground: #0a58b9;\n\tborder-radius: 4px;\n\tcursor: pointer;\n\tgrid-column: 2 / 2;\n\tgrid-row: 2;\n\tpadding: 12px;\n\t@media (min-width: ${(props) => props.theme.media.minWidthDesktop}) {\n\t\tmargin: 8px;\n\t}\n\t&:hover,\n\t&:disabled {\n\t\topacity: 0.7;\n\t}\n`;\n\nexport const StyledButtonReal = styled(StyledButton)`\n\tbackground: #1dbb2f;\n\tgrid-column: 1 / 2;\n`;\n\nexport const StyledGameModeSwitch = styled.div`\n\tdisplay: flex;\n\tmargin-right: 8px;\n`;\n\nconst StyledGameStartButtons = styled.div`\n\talign-items: center;\n\tbackground: #051c36f0;\n\tborder-radius: inherit;\n\tdisplay: flex;\n\theight: 100%;\n\tjustify-content: center;\n\tleft: 50%;\n\tposition: absolute;\n\ttop: 50%;\n\ttransform: translate(-50%, -50%);\n\twidth: 100%;\n\tz-index: 1;\n`;\n\nconst StyledGameModeSwitchButton = styled(Button)<{\n\tactive: boolean;\n}>`\n\tbackground-color: ${(props) =>\n\t\tprops.active ? props.theme.colors.active : '#061B38'};\n\tfont-family: ${(props) => props.theme.text.fonts.Regular};\n\tfont-size: 11px;\n\tmargin: 0;\n\tpadding: 6px 10px;\n\ttext-transform: uppercase;\n\t&:first-child {\n\t\tborder-radius: 4px 0 0 4px;\n\t}\n\t&:last-child {\n\t\tborder-radius: 0 4px 4px 0;\n\t}\n`;\n","import { FC, useContext } from 'react';\nimport styled from 'styled-components';\nimport { LinkTo } from '@common/components/default/LinkTo/LinkTo';\nimport { transSlots } from '@legacyApp/client/modules/translation/translate';\nimport { useUserIsLogged } from '@common/selectors/user.selectors';\nimport { ROUTING_ID } from '@common/constants/routing/ids.routing.constants';\nimport { Redirect } from '@common/components/default/Redirect/Redirect';\nimport { generatePlaySlotMobilePageUrl } from '../services/Slots.service';\nimport { GameMode } from '../store/slots.types';\nimport { SlotsGameContext } from '../context/SlotsGameContext';\nimport { StyledButton } from '../../sports/components/Menu/Menu.styled';\nimport routingService from '../../../LegacyApp/client/modules/app/routingService';\nimport { StyledButtonReal } from './GameDesktop';\nimport { FavoriteSlot } from './FavoriteSlot';\nimport { SlotDropsAndWinsWatermark } from './SlotDropsAndWinsWatermark';\nimport { StyledSlotTileFeatured } from './SlotTile';\nimport { GameImage, GameImageStyled } from './GameImage';\nimport { ProviderLogoStyled } from './ProviderLogo';\nimport { SlotDetails } from './SlotDetails';\n\nexport const GameMobile: FC = () => {\n\tconst { game } = useContext(SlotsGameContext);\n\tconst isLogged = useUserIsLogged();\n\n\tconst { name, provider, has_demo } = game || {};\n\n\treturn (\n\t\t<StyledGameWrapper>\n\t\t\t<StyledGameInfo>\n\t\t\t\t<FavoriteSlot game={game} />\n\t\t\t\t<h1 className=\"text-style-h-6 margin-top-8 margin-bottom-0\">{name}</h1>\n\t\t\t\t<StyledGameInfoProvider className=\"text-style-sm-medium margin-bottom-8\">\n\t\t\t\t\t{provider?.name}\n\t\t\t\t</StyledGameInfoProvider>\n\t\t\t\t<SlotDetails />\n\t\t\t</StyledGameInfo>\n\t\t\t<StyledSlotTileFeatured>\n\t\t\t\t<SlotDropsAndWinsWatermark {...game} />\n\t\t\t\t<StyledGameImage>\n\t\t\t\t\t<GameImage {...game} />\n\t\t\t\t</StyledGameImage>\n\t\t\t</StyledSlotTileFeatured>\n\t\t\t{isLogged && game?.slug ? (\n\t\t\t\t<LinkTo href={generatePlaySlotMobilePageUrl(game, GameMode.REAL)}>\n\t\t\t\t\t<StyledButtonReal>\n\t\t\t\t\t\t<span className=\"text-style-md-semibold text-capitalize\">\n\t\t\t\t\t\t\t{transSlots({ label: 'real play' })}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</StyledButtonReal>\n\t\t\t\t</LinkTo>\n\t\t\t) : (\n\t\t\t\t<Redirect href={routingService.to(ROUTING_ID.LOGIN)}>\n\t\t\t\t\t<StyledRealMobileButton>\n\t\t\t\t\t\t<span className=\"text-style-md-semibold text-capitalize\">\n\t\t\t\t\t\t\t{transSlots({ label: 'Login to real play' })}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</StyledRealMobileButton>\n\t\t\t\t</Redirect>\n\t\t\t)}\n\t\t\t{has_demo && (\n\t\t\t\t<LinkTo href={generatePlaySlotMobilePageUrl(game, GameMode.DEMO)}>\n\t\t\t\t\t<StyledButton disabled={!has_demo}>\n\t\t\t\t\t\t<span className=\"text-style-md-semibold text-capitalize\">\n\t\t\t\t\t\t\t{transSlots({ label: 'fun play' })}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</StyledButton>\n\t\t\t\t</LinkTo>\n\t\t\t)}\n\t\t</StyledGameWrapper>\n\t);\n};\n\nconst StyledGameWrapper = styled.div`\n\tbackground: ${(props) => props.theme.colors.darkActive};\n\tborder-radius: 8px;\n\tdisplay: grid;\n\tgap: 10px 10px;\n\tgrid: max-content min-content / 1fr 1fr;\n\theight: max-content;\n\tpadding: 20px;\n`;\n\nconst StyledGameImage = styled.div`\n\tborder-radius: 4px;\n\tdisplay: grid;\n\tgrid-area: game-image;\n\tgrid-column: 1 / 2;\n\tgrid-row: 1;\n\twidth: 100%;\n\n\t${GameImageStyled} {\n\t\theight: 100%;\n\t\twidth: 100%;\n\t}\n\n\t${ProviderLogoStyled} {\n\t\talign-items: center;\n\t\tdisplay: flex;\n\t\theight: 120px;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\n\t\timg,\n\t\tsvg {\n\t\t\twidth: 80%;\n\t\t}\n\t}\n`;\n\nconst StyledGameInfoProvider = styled.div`\n\tcolor: var(--color-dark-100);\n`;\n\nconst StyledGameInfo = styled.div`\n\talign-self: center;\n\tgrid-column: 2 / 2;\n\tgrid-row: 1;\n\t> h1 {\n\t\tcolor: white;\n\t}\n`;\n\nconst StyledRealMobileButton = styled(StyledButtonReal)`\n\twidth: 100%;\n`;\n","import { FC, useContext } from 'react';\nimport styled from 'styled-components';\nimport { borderRadius } from '@legacyApp/client/modules/style/defaults';\nimport { LinkTo } from '@common/components/default/LinkTo/LinkTo';\nimport { transSlots } from '@legacyApp/client/modules/translation/translate';\nimport { fontSize } from '@legacyApp/client/modules/style/mixins/fontSize';\nimport { SlotsGameContext } from '@modules/slots/context/SlotsGameContext';\nimport { GameDetailsDTO } from '../store/slots.types';\n\nconst StyledCategoryTiles = styled.section`\n\tdisplay: flex;\n\tflex-direction: row;\n\tpadding: 1rem 0 0;\n`;\n\nconst StyledCategoryTile = styled.a`\n\tbackground-color: ${(props) => props.theme.colors.darkActive};\n\tfont-family: ${(props) => props.theme.text.fonts.Regular};\n\tmargin-right: 0.5rem;\n\tpadding: 0.5rem 1rem;\n\t${fontSize({\n\t\timportant: true,\n\t\tsizeDiff: -2,\n\t\tsizeDesktopDiff: -2,\n\t\tsizeBigScreenDiff: -2,\n\t})};\n\t${borderRadius};\n`;\n\nexport const CategoryTiles: FC<{\n\tcategories: GameDetailsDTO['categories'];\n}> = ({ categories }) => {\n\tconst { groups } = useContext(SlotsGameContext);\n\n\tif (!groups?.length && (!categories?.length || categories?.length < 2)) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<StyledCategoryTiles>\n\t\t\t{!!categories?.length &&\n\t\t\t\tcategories\n\t\t\t\t\t.filter((category) => !!category?.slug)\n\t\t\t\t\t.map((category) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<LinkTo\n\t\t\t\t\t\t\t\tkey={category.slug}\n\t\t\t\t\t\t\t\thref={`/slots/${category.slug}`}\n\t\t\t\t\t\t\t\tpassHref\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<StyledCategoryTile>\n\t\t\t\t\t\t\t\t\t{transSlots({ label: category.name })}\n\t\t\t\t\t\t\t\t</StyledCategoryTile>\n\t\t\t\t\t\t\t</LinkTo>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t{!!groups?.length &&\n\t\t\t\tgroups\n\t\t\t\t\t.filter((group) => !!group?.slug)\n\t\t\t\t\t.map((group) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<LinkTo\n\t\t\t\t\t\t\t\tkey={group.slug}\n\t\t\t\t\t\t\t\thref={`/slots/group/${group.slug}`}\n\t\t\t\t\t\t\t\tpassHref\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<StyledCategoryTile>{group.name}</StyledCategoryTile>\n\t\t\t\t\t\t\t</LinkTo>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t</StyledCategoryTiles>\n\t);\n};\n","import { FC, useCallback, useRef } from 'react';\nimport styled from 'styled-components';\nimport { useAppMobile } from '@common/selectors/app.selectors';\nimport { useGetDataJSON } from '@legacyApp/hooks/fetch/useGetDataJSON';\nimport { useNoSleep } from '@legacyApp/hooks/app/useNoSleep';\nimport { RecommendedSlotsSection } from '../components/RecommendedSlotsSection';\nimport { SlotsBreadcrumbs } from '../components/SlotsBreadcrumbs';\nimport { ProvidersSection } from '../components/ProvidersSection';\nimport { GameMobile } from '../components/GameMobile';\nimport { GameDesktop } from '../components/GameDesktop';\nimport { useFetchGame } from '../hooks/useFetchGame';\nimport { CategoryTiles } from '../components/CategoryTiles';\nimport { StyledSlotContainer } from './SlotCategory.layout';\n\nexport const SlotLayout: FC<{ slug: string; isAdminGame?: boolean }> = ({\n\tslug,\n\tisAdminGame,\n}) => {\n\tconst buttonRef = useRef(null);\n\tuseNoSleep(buttonRef.current);\n\n\tconst { callback, options } = useFetchGame();\n\tconst gamesCallback = useCallback(\n\t\t() =>\n\t\t\tcallback({\n\t\t\t\tslug,\n\t\t\t\tisAdminGame,\n\t\t\t}),\n\t\t[callback, isAdminGame, slug],\n\t);\n\tconst { data: game } = useGetDataJSON(slug, gamesCallback, options);\n\n\tconst { name, category, provider, categories } = game || {};\n\n\tconst isMobile = useAppMobile();\n\n\treturn (\n\t\t<StyledSlotContainer ref={buttonRef}>\n\t\t\t<SlotsBreadcrumbs title={name} category={category} provider={provider} />\n\t\t\t{isMobile ? <GameMobile /> : <GameDesktop />}\n\t\t\t<CategoryTiles categories={categories} />\n\t\t\t<OtherGamesStyled>\n\t\t\t\t{!!category && <RecommendedSlotsSection />}\n\t\t\t\t<ProvidersSection />\n\t\t\t</OtherGamesStyled>\n\t\t</StyledSlotContainer>\n\t);\n};\n\nexport const OtherGamesStyled = styled.div`\n\tmargin-top: 40px;\n`;\n"],"names":["useNoSleep","element","noSleep","useMemo","NoSleep","toggle","useCallback","enabled","enable","useEffect","addEventListener","removeEventListener","disable","AuthActionButton","labelText","children","props","isLogged","useUserIsLogged","dispatch","useAppDispatch","label","onClick","openModal","MODAL_ID","name","enhanceComponent","SlotsStoreController","FullScreenIcon","Svg","content","id","transform","d","fill","width","height","WideIcon","isActive","color","viewBox","stroke","strokeMiterlimit","strokeWidth","useUserGameWebsockets","eventName","eventCallback","useContext","SlotsGameContext","game","game_id","operator_id","currency","useUserActiveCurrency","token","useUserTokenValue","userId","jwtDecoded","jwt_decode","sub","getUserIdFromAuth","channel","bindSocketChannelEventThunk","unbindSocketChannel","GameIframe","code","style","showAlert","WEBSOCKET_EVENTS","srcDoc","SessionExpiredContainer","styled","theme","colors","darkActive","borderRadius","IDLE_TIME","minute","IDLE_BACKGROUND_TIME","SessionExpired","router","useRouter","useState","sessionExpired","setSessionExpired","getTimestamp","lastSeenApp","setLastSeenApp","reset","useIdleTimer","timeout","onIdle","onAction","event","type","document","visibilityState","events","debounce","trans","reload","GameWindow","downloadedMode","userMode","active","style_","GameError","GameWindowWrapper","mode","useGameHTML","gameHTML","GameIframeStyles","css","StyledPlayContainer","StyledSlotPageInfo","SlotPageInfo","description","className","RecommendedSlotsSection","isMobile","useAppMobile","category","slug","categorySlug","callback","useFetchGames","gamesCallback","categoryId","gameSlugToOmit","count","useGetDataArray","list","data","loaded","RecommendedSlotsSectionStyled","transSlots","href","map","slot","index","component","SlotTile","ScrollCardsWithTitle","StyledMenuSection","text","fonts","Black","fontSize","sizeDiff","sizeDesktopDiff","sizeBigScreenDiff","important","StyledButton","$id","chatViewport","viewportPadding","calcStyle","a","media","maxWidthTablet","b","dashboard","padding","Button","Bold","StyledFavoriteStarButton","FavoriteSlot","operatorId","gameId","gameSlug","fetchApi","useFetchApiPromise","uuid","useUserId","setLoaded","isFavoriteGame","setIsFavoriteGame","_body","setBody","addToFavoriteGames","url","generatePostFavoriteGameUrl","parameters","Authorization","body","method","then","e","removeFromFavoriteGames","checkFavoriteGame","generateGetIsFavoriteGameUrl","disableErrorHandler","newBody","transactionService","Object","keys","useIsFavoriteGame","Fullscreen","SlotDetails","limit","rtp_value","SlotDetailsStyled","Number","useStyles","createUseStyles","gameContainer","display","flexDirection","flexGrow","minHeight","realPlayButton","margin","background","cursor","zIndex","opacity","funPlayButton","title","marginBottom","fontFamily","gameWindowControl","alignItems","gameControlButton","fullScreenWrapper","GameDesktop","provider","provider_name","provider_slug","has_demo","appInitialized","useAppInitialized","fullScreenHandle","useFullScreenHandle","useSupportToggle","_gameMode","setGameMode","wideHandle","chatActions","isVisible","setGameMode_","lsSet","LocalStorageKeys","onRealModeClick","GameMode","classes","getInitialGameMode","handle","StyledGameAspectRationWrapper","overflow","maxHeight","ratio","StyledGameStartButtons","StyledButtonReal","disabled","StyledInfoBar","SlotInfo","slotName","providerSlug","providerName","StyledInfoBarSeparator","StyledGameModeSwitch","StyledGameModeSwitchButton","enter","StyledSlotInfo","StyledAspectRatioWrapper","minWidthDesktop","Regular","GameMobile","StyledGameWrapper","StyledGameInfo","StyledGameInfoProvider","SlotDropsAndWinsWatermark","StyledGameImage","GameImage","LinkTo","generatePlaySlotMobilePageUrl","Redirect","routingService","ROUTING_ID","StyledRealMobileButton","GameImageStyled","ProviderLogoStyled","StyledCategoryTiles","StyledCategoryTile","CategoryTiles","categories","groups","length","filter","passHref","group","SlotLayout","isAdminGame","buttonRef","useRef","current","useFetchGame","options","useGetDataJSON","ref","SlotsBreadcrumbs","OtherGamesStyled","ProvidersSection"],"mappings":"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","debug_id":"722b9098-cfae-5256-91e1-6b8e56eab0b4"}