{"version":3,"file":"js/4605.43056f52959b1397.js","mappings":"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","sources":["webpack://@sazka/web/./js/app/casino/ng-casino/casino-game-type.ts","webpack://@sazka/web/./js/app/casino/ng-casino/ng-casino-analytics.ts","webpack://@sazka/web/./js/app/casino/ng-casino/ng-casino-game-list.ts","webpack://@sazka/web/./js/app/casino/ng-casino/split-screen/splitscreen-game-types.ts","webpack://@sazka/web/./js/app/casino/ng-casino/split-screen/splitscreen.ts","webpack://@sazka/web/./js/app/casino/ng-casino/ng-casino-utils.ts","webpack://@sazka/web/./js/app/casino/ng-casino/split-screen/split-screen.vue?fa07","webpack://@sazka/web/./js/app/casino/ng-casino/split-screen/split-screen.vue","webpack://@sazka/web/./js/app/casino/ng-casino/split-screen/split-screen.vue?d784","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-header.vue?de6a","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-header.vue","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-header.vue?5cbc","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-etickets.vue?7277","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-etickets.vue","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-etickets.vue?8ebf","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-games.vue?2410","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-games.vue","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-games.vue?a4fe","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-dealer.vue?87ef","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-dealer.vue","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-dealer.vue?6499","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer.vue?ca88","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer.vue","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer.vue?de23","webpack://@sazka/web/./js/app/casino/ng-casino/casino-game-layer.vue?1992","webpack://@sazka/web/./js/app/casino/ng-casino/casino-game-layer.vue","webpack://@sazka/web/./js/app/casino/ng-casino/casino-game-layer.vue?60b7","webpack://@sazka/web/./js/app/shared/utils/age-confirmation.ts","webpack://@sazka/web/./js/app/casino/ng-casino/ng-casino-module.ts","webpack://@sazka/web/./js/app/floating/use-floating-preload.ts","webpack://@sazka/web/./js/app/shared/components/master-page/self-exclusion.ts","webpack://@sazka/web/../../libs/utils/string-utils.ts","webpack://@sazka/web/./js/app/shared/components/panic-button.vue?363a","webpack://@sazka/web/./js/app/shared/components/panic-button.vue"],"sourcesContent":["export enum CasinoGameType {\r\n eticket = \"Eticket\",\r\n game = \"Game\",\r\n livedealer = \"LiveDealer\",\r\n}\r\n","import { CasinoGameType } from \"./casino-game-type\";\r\n\r\n/**\r\n * Pushes game open event to datalayer,\r\n * @param type Type of game - scrapper or game\r\n * @param analyticsGameCode analytics game code from CMS\r\n * @param moneyMode flag if games is played for money or in demo mode\r\n */\r\nexport const analyticsCasinoGameDetail = (\r\n type: CasinoGameType,\r\n analyticsGameCode: string,\r\n moneyMode: boolean,\r\n gameId: number,\r\n manufacturer: string = null,\r\n placement: string = null,\r\n position = 0,\r\n ngGameDefinition: any = null\r\n): void => {\r\n let typeDl = \"\";\r\n if (type == CasinoGameType.game) {\r\n typeDl = \"hry\";\r\n } else if (type == CasinoGameType.eticket) {\r\n typeDl = \"elosy\";\r\n } else if (type == CasinoGameType.livedealer) {\r\n typeDl = \"hry-live\";\r\n }\r\n\r\n const page = {\r\n type: \"game.detail\",\r\n verticalCode: typeDl,\r\n verticalCodeStrict: typeDl,\r\n gameCode: analyticsGameCode,\r\n gameCodeStrict: analyticsGameCode,\r\n gameMode: moneyMode ? \"money\" : \"fun\",\r\n gameid: gameId,\r\n };\r\n\r\n if (type == CasinoGameType.eticket && ngGameDefinition) {\r\n page[\"externalGameProvider\"] = ngGameDefinition.externalGameProvider;\r\n page[\"externalGameSubProvider\"] = ngGameDefinition.externalGameSubProvider;\r\n }\r\n\r\n if (type == CasinoGameType.game && manufacturer) {\r\n page[\"supplier\"] = manufacturer;\r\n }\r\n\r\n if (placement) {\r\n page[\"placement\"] = placement;\r\n page[\"position\"] = position;\r\n }\r\n\r\n dataLayer.push({\r\n page: page,\r\n event: \"page\",\r\n });\r\n};\r\n\r\n/**\r\n * Pushes deposit button click to datalayer\r\n */\r\nexport const analyticsCasinoDepositClick = (): void => {\r\n dataLayer.push({\r\n event: \"action.click.hry\",\r\n action: {\r\n click: {\r\n type: \"inGameDeposit\",\r\n },\r\n },\r\n });\r\n};\r\n\r\n/**\r\n * Pushes analytics money mode toggle click to datalayer\r\n */\r\nexport const analyticsCasinoToggleMoneyMode = (playForMoney: boolean): void => {\r\n dataLayer.push({\r\n event: \"action.click.hry\",\r\n action: {\r\n click: {\r\n type: playForMoney ? \"money\" : \"fun\",\r\n },\r\n },\r\n });\r\n};\r\n","interface NgGameDefinition {\r\n PJPs: any;\r\n appealingForChildren: \"0\" | any;\r\n /** eg. \"1.641026\" */\r\n aspectRatio: string;\r\n /** eg. \"https://cdn-sazka.neogames.com/Brands/Generic/GameBackgroundImages/80.jpg\" sometimes url throws 404 - do not use */\r\n backgroundImageUrl: string;\r\n /** eg. [2, 5, 10, 20, 30, 50, 100, 200, 500] */\r\n betDenominations: number[];\r\n /** eg. \"iSoftBet\" */\r\n externalGameProvider: string;\r\n /** eg. \"Thunderkick\" */\r\n externalGameSubProvider: string;\r\n /** eg. \"5\" */\r\n externalProviderID: string;\r\n /** eg. \"72214\" */\r\n gameId: string;\r\n /** eg. [\"New\"], usually empty array */\r\n gameConfig: string[];\r\n /** eg. \"2010-12-01 00:00:00\" */\r\n gameReleaseDate: string;\r\n /** eg. 246 */\r\n gameVerticalId: number;\r\n /** eg. 80 */\r\n id: number;\r\n /** Pretty lame product card image, sometimes url throws 404 - do not use */\r\n images: { default?: string };\r\n /** 🤔🤐 - usually undefined */\r\n maxPrize: any;\r\n /** eg. \"Esqueleto Explosivo\" */\r\n name: string;\r\n /** Available play modes */\r\n playModes: (\"Money\" | \"Demo\")[];\r\n}\r\n\r\ninterface NgGameList {\r\n categories: any; // usesless\r\n games: {\r\n instant: NgGameDefinition[];\r\n };\r\n}\r\n\r\nlet gameList: NgGameDefinition[] = null;\r\nlet gameListReadyPromiseResolve: (value: NgGameDefinition[]) => void = null;\r\n\r\nconst loadGameList = () => {\r\n return new Promise((res) => {\r\n if (gameList) {\r\n res(gameList);\r\n } else {\r\n gameListReadyPromiseResolve = res;\r\n ng_fw.updateGamesList();\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Called by NG on game list ready\r\n */\r\nconst gameListReady = (list: NgGameList) => {\r\n gameList = list?.games?.instant || null;\r\n // NG sometimes fires game list updated, without our loadGameList being called\r\n // so in that case, promise is null\r\n if (gameListReadyPromiseResolve) {\r\n gameListReadyPromiseResolve(gameList);\r\n }\r\n};\r\n\r\n/**\r\n * Finds game by id in NG game list\r\n */\r\nconst getGameFromNgList = (id: number) => gameList.find((game) => game.id == id);\r\n\r\n/**\r\n * Fetches game definition from NG by id\r\n */\r\nconst fetchNgGameDefinition = async (id: number): Promise => {\r\n await loadGameList();\r\n return getGameFromNgList(id);\r\n};\r\n\r\nexport const useNgCasinoGameList = () => ({\r\n gameListReady,\r\n fetchNgGameDefinition,\r\n});\r\n","import { SplitScreenGame } from \"./split-screen-game\";\r\n\r\nexport const splitscreenGames: SplitScreenGame[] = [\r\n {\r\n cssClass: \"lumberjack\",\r\n id: -10,\r\n gameData: [\r\n { link: \"/hry/Lumberjack-5\", gameId: 2888 },\r\n { link: \"/hry/Lumberjack-7\", gameId: 2889 },\r\n { link: \"/hry/Lumberjack-20\", gameId: 2887 },\r\n ],\r\n },\r\n {\r\n cssClass: \"spacefruits\",\r\n id: -11,\r\n gameData: [\r\n { link: \"/hry/27-space-fruits\", gameId: 2875 },\r\n { link: \"/hry/81-space-fruits\", gameId: 2876 },\r\n { link: \"/hry/243-space-fruits\", gameId: 2877 },\r\n ],\r\n },\r\n {\r\n cssClass: \"cert-a-kaca\",\r\n id: -12,\r\n gameData: [\r\n { link: \"/hry/cert-a-kaca-game\", gameId: 2878 },\r\n { link: \"/hry/cert-a-kaca-cesta-z-pekla\", gameId: 2879 },\r\n ],\r\n },\r\n {\r\n cssClass: \"hot-wild\",\r\n id: -13,\r\n gameData: [\r\n { link: \"/hry/hot-wild-5\", gameId: 2880 },\r\n { link: \"/hry/hot-wild-10\", gameId: 2881 },\r\n { link: \"/hry/hot-wild-20\", gameId: 2882 },\r\n { link: \"/hry/hot-wild-40\", gameId: 2883 },\r\n ],\r\n },\r\n {\r\n cssClass: \"simply-ways\",\r\n id: -14,\r\n gameData: [\r\n { link: \"/hry/27-simply-ways\", gameId: 2884 },\r\n { link: \"/hry/81-simply-ways\", gameId: 2885 },\r\n { link: \"/hry/243-simply-ways\", gameId: 2886 },\r\n ],\r\n },\r\n {\r\n cssClass: \"book-of-adventure\",\r\n id: -15,\r\n gameData: [\r\n { link: \"/hry/book-of-adventure-death\", gameId: 2894 },\r\n { link: \"/hry/book-of-adventure-life\", gameId: 2893 },\r\n { link: \"/hry/book-of-adventure-classic\", gameId: 2892 },\r\n ],\r\n },\r\n {\r\n cssClass: \"wild-joker\",\r\n id: -16,\r\n gameData: [\r\n { link: \"/hry/wild-joker-25\", gameId: 2901 },\r\n { link: \"/hry/wild-joker-40\", gameId: 2902 },\r\n { link: \"/hry/wild-joker-50\", gameId: 2903 },\r\n ],\r\n },\r\n {\r\n cssClass: \"joker-crown\",\r\n id: -17,\r\n gameData: [\r\n { link: \"/hry/joker-crown-5\", gameId: 2890 },\r\n { link: \"/hry/joker-crown-10\", gameId: 2891 },\r\n ],\r\n },\r\n {\r\n cssClass: \"wild-diamonds\",\r\n id: -18,\r\n gameData: [\r\n { link: \"/hry/wild-diamonds-25\", gameId: 2897 },\r\n { link: \"/hry/wild-diamonds-40\", gameId: 2898 },\r\n { link: \"/hry/wild-diamonds-50\", gameId: 2899 },\r\n ],\r\n },\r\n {\r\n cssClass: \"fruit-hell\",\r\n id: -19,\r\n gameData: [\r\n { link: \"/hry/fruit-hell-classic\", gameId: 2895 },\r\n { link: \"/hry/fruit-hell-plus\", gameId: 2896 },\r\n ],\r\n },\r\n {\r\n cssClass: \"forest-fruit\",\r\n id: -20,\r\n gameData: [\r\n { link: \"/hry/forest-fruit-3\", gameId: 2912 },\r\n { link: \"/hry/forest-fruit-5\", gameId: 2913 },\r\n { link: \"/hry/forest-fruit-7\", gameId: 2911 },\r\n ],\r\n },\r\n {\r\n cssClass: \"diamonds\",\r\n id: -21,\r\n gameData: [\r\n { link: \"/hry/27-diamonds\", gameId: 2914 },\r\n { link: \"/hry/81-diamonds\", gameId: 2915 },\r\n { link: \"/hry/243-diamonds\", gameId: 2916 },\r\n ],\r\n },\r\n];\r\n","import { splitscreenGames } from \"./splitscreen-game-types\";\r\n\r\nexport const useSplitscreen = (id: number) => {\r\n const filtered = splitscreenGames.filter((x) => x.id == id);\r\n return filtered.length > 0 ? filtered[0] : null;\r\n};\r\n\r\nconst aspectRatioDesktop: number = 1920 / 1080;\r\nconst aspectRatioMobile: number = 1080 / 880;\r\n\r\nexport const splitscreenAspectRatio = () =>\r\n window.matchMedia(\"(max-width: 897px)\").matches ? aspectRatioMobile : aspectRatioDesktop;\r\n","import { debounce } from \"@sazka/utils/debounce\";\r\nimport { computed, onMounted, onUnmounted, ref } from \"vue\";\r\n\r\n// TODO: Remove after (or if) the official 1007px breakpoint gets added.\r\nconst MOBILE_BREAKPOINT = 1007;\r\n\r\nexport function useNgCasinoUtils() {\r\n const viewportWidth = ref(window.innerWidth);\r\n\r\n const isMobile = computed(() => {\r\n return viewportWidth.value < MOBILE_BREAKPOINT;\r\n });\r\n\r\n const updateSize = () => {\r\n viewportWidth.value = window.innerWidth;\r\n };\r\n\r\n const debouncedUpdateSize = debounce(updateSize, 50);\r\n\r\n onMounted(() => {\r\n updateSize();\r\n window.addEventListener(\"resize\", debouncedUpdateSize);\r\n });\r\n\r\n onUnmounted(() => {\r\n window.removeEventListener(\"resize\", debouncedUpdateSize);\r\n });\r\n\r\n return {\r\n isMobile,\r\n viewportWidth,\r\n };\r\n}\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"data-game-id\", \"href\"]\n\nimport { useNgCasino } from \"@/casino/ng-casino/ng-casino-module\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'split-screen',\n setup(__props) {\n\r\nconst { splitscreenData } = useNgCasino();\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"splitscreen__wrapper\", _unref(splitscreenData).cssClass]),\n id: \"splitscreen-wrapper\"\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(splitscreenData).gameData, (data, i) => {\n return (_openBlock(), _createElementBlock(\"a\", {\n class: _normalizeClass([\"casino game-launcher splitscreen__col\", `${_unref(splitscreenData).cssClass} v${i + 1}`]),\n \"data-game-id\": data.gameId,\n href: data.link,\n key: i\n }, null, 10, _hoisted_1))\n }), 128))\n ], 2))\n}\n}\n\n})","\r\n\r\n\r\n","import script from \"./split-screen.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./split-screen.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"toggler\"\n}\nconst _hoisted_2 = [\"checked\"]\n\nimport { computed, onMounted, onUnmounted, ref } from \"vue\";\r\nimport { CasinoGameType } from \"@/casino/ng-casino/casino-game-type\";\r\nimport { OnlineGameDetail } from \"@/casino/ng-casino/online-game-detail\";\r\nimport { useNgCasino } from \"../ng-casino-module\";\r\nimport { ResponsiveUtils } from \"@sazka/utils/responsive-utils\";\r\nimport { debounce } from \"@sazka/utils/debounce\";\r\nimport DsButton from \"@sazka/design-system/src/button/ds-button.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-header',\n props: {\n gameData: {}\n },\n setup(__props: any, { expose: __expose }) {\n\r\nconst props = __props;\r\n\r\nconst wrapper = ref();\r\nconst height = ref();\r\n\r\n__expose({\r\n height,\r\n});\r\n\r\nconst isMobile = ResponsiveUtils.isMobile();\r\n\r\nconst { playForMoney, closeGame, toggleMoneyMode, splitscreenData } = useNgCasino();\r\n\r\nconst isLiveDealer = computed(() => props.gameData?.type == CasinoGameType.livedealer);\r\n\r\nconst moneyTogglerEnabled = computed(() => {\r\n return !splitscreenData.value && !isLiveDealer.value;\r\n});\r\n\r\nconst updateHeight = () => {\r\n if (wrapper.value) {\r\n height.value = wrapper.value.clientHeight;\r\n }\r\n};\r\n\r\nconst debouncedUpdateHeight = debounce(updateHeight, 100);\r\n\r\nonMounted(() => {\r\n updateHeight();\r\n\r\n window.addEventListener(\"resize\", debouncedUpdateHeight);\r\n});\r\n\r\nonUnmounted(() => {\r\n window.removeEventListener(\"resize\", debouncedUpdateHeight);\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n ref_key: \"wrapper\",\n ref: wrapper,\n class: \"casino-game-header\"\n }, [\n (moneyTogglerEnabled.value)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_1, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: _unref(playForMoney),\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_unref(toggleMoneyMode) && _unref(toggleMoneyMode)(...args)))\n }, null, 8, _hoisted_2),\n _cache[3] || (_cache[3] = _createElementVNode(\"span\", { class: \"left\" }, \"Pro zábavu\", -1)),\n _cache[4] || (_cache[4] = _createElementVNode(\"span\", { class: \"right\" }, \"Za peníze\", -1))\n ]))\n : _createCommentVNode(\"\", true),\n (!_unref(isMobile))\n ? (_openBlock(), _createBlock(DsButton, {\n key: 1,\n class: \"casino-game-header__button-close\",\n type: \"text\",\n theme: \"dark\",\n id: \"casino-close\",\n \"icon-left\": \"cross\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_unref(closeGame)()))\n }, {\n default: _withCtx(() => _cache[5] || (_cache[5] = [\n _createTextVNode(\" Zavřít \")\n ])),\n _: 1\n }))\n : (_openBlock(), _createBlock(DsButton, {\n key: 2,\n class: \"casino-game-header__button-close\",\n type: \"text\",\n theme: \"dark\",\n id: \"casino-close\",\n \"icon-left\": \"cross\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_unref(closeGame)()))\n }))\n ], 512))\n}\n}\n\n})","\r\n\r\n\r\n","import script from \"./casino-game-header.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./casino-game-header.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"casino-game-footer-etickets\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"casino-game-footer__row\"\n}\nconst _hoisted_3 = { class: \"casino-game-footer__row-left\" }\nconst _hoisted_4 = { class: \"casino-game-footer__login-time\" }\nconst _hoisted_5 = { class: \"casino-game-footer__row casino-game-footer__row--info\" }\nconst _hoisted_6 = [\"href\"]\nconst _hoisted_7 = {\n key: 1,\n class: \"casino-game-footer__row\"\n}\n\nimport { OnlineGameDetail } from \"../online-game-detail\";\r\nimport { useNgCasinoUtils } from \"../ng-casino-utils\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport PanicButton from \"@/shared/components/panic-button.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-footer-etickets',\n props: {\n gameData: {},\n splitScreenData: { type: Boolean }\n },\n setup(__props: any) {\n\r\n\r\n\r\nconst isInAppView = environment.isInAppView ?? false;\r\n\r\nconst { loginDurationFormatted, isLoggedIn } = useNgSession();\r\n\r\nconst { isMobile } = useNgCasinoUtils();\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(isLoggedIn))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, \" Přihlášen \" + _toDisplayString(_unref(loginDurationFormatted)), 1)\n ]),\n (!_unref(isMobile))\n ? (_openBlock(), _createBlock(PanicButton, {\n key: 0,\n class: \"panic-button--in-game casino-game-footer__panic-button\",\n \"game-name\": _ctx.gameData.codeName\n }, null, 8, [\"game-name\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"a\", {\n href: _ctx.gameData.infoUrl,\n target: \"_blank\"\n }, \"Informace k losu\", 8, _hoisted_6)\n ]),\n (!_unref(isInAppView) && !_unref(isMobile))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _cache[0] || (_cache[0] = [\n _createElementVNode(\"a\", {\n class: \"casino-game-footer__section\",\n href: \"https://www.hrajsrozumem.cz/\",\n target: \"_blank\"\n }, \"Hraj s rozumem\", -1),\n _createElementVNode(\"a\", {\n class: \"casino-game-footer__section\",\n href: \"/zodpovedne-hrani/herni-limity\",\n target: \"_blank\"\n }, [\n _createElementVNode(\"strong\", null, \"Varování: \"),\n _createTextVNode(\"Účast na hazardní hře může být škodlivá. | 18+ \")\n ], -1)\n ])))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","\r\n\r\n\r\n","import script from \"./casino-game-footer-etickets.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./casino-game-footer-etickets.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"casino-game-footer-games\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"casino-game-footer__row\"\n}\nconst _hoisted_3 = { class: \"casino-game-footer__row-left\" }\nconst _hoisted_4 = { class: \"casino-game-footer__login-time\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"casino-game-footer__balance\"\n}\nconst _hoisted_6 = {\n key: 1,\n class: \"casino-game-footer__row\"\n}\nconst _hoisted_7 = {\n key: 0,\n class: \"casino-game-footer__section\",\n href: \"https://www.hrajsrozumem.cz/\",\n target: \"_blank\"\n}\nconst _hoisted_8 = {\n class: \"casino-game-footer__section\",\n href: \"/zodpovedne-hrani/herni-limity\",\n target: \"_blank\"\n}\nconst _hoisted_9 = { key: 0 }\n\nimport { useNgCasinoUtils } from \"../ng-casino-utils\";\r\nimport { OnlineGameDetail } from \"../online-game-detail\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport { useNgCasino } from \"../ng-casino-module\";\r\nimport { StringUtils } from \"@sazka/utils/string-utils\";\r\nimport { computed } from \"vue\";\r\nimport PanicButton from \"@/shared/components/panic-button.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-footer-games',\n props: {\n gameData: {},\n splitScreenData: { type: Boolean }\n },\n setup(__props: any) {\n\r\n\r\n\r\nconst isInAppView = environment.isInAppView ?? false;\r\n\r\nconst { loginDurationFormatted, isLoggedIn } = useNgSession();\r\nconst { netLoss } = useNgCasino();\r\n\r\nconst balanceValue = computed(() => {\r\n return StringUtils.formatCurrency(netLoss.value, false);\r\n});\r\n\r\nconst { isMobile } = useNgCasinoUtils();\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(isLoggedIn))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, \" Přihlášen \" + _toDisplayString(_unref(loginDurationFormatted)), 1),\n (_unref(netLoss))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, \"Bilance: \" + _toDisplayString(balanceValue.value), 1))\n : _createCommentVNode(\"\", true)\n ]),\n (!_unref(isMobile))\n ? (_openBlock(), _createBlock(PanicButton, {\n key: 0,\n class: \"panic-button--in-game casino-game-footer__panic-button\",\n \"game-name\": _ctx.gameData.codeName\n }, null, 8, [\"game-name\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (!_unref(isInAppView))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (!_unref(isMobile))\n ? (_openBlock(), _createElementBlock(\"a\", _hoisted_7, \"Hraj s rozumem\"))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"a\", _hoisted_8, [\n (!_unref(isMobile))\n ? (_openBlock(), _createElementBlock(\"strong\", _hoisted_9, \"Varování: \"))\n : _createCommentVNode(\"\", true),\n _cache[0] || (_cache[0] = _createTextVNode(\"Účast na hazardní hře může být škodlivá. | 18+ \"))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","\r\n\r\n\r\n","import script from \"./casino-game-footer-games.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./casino-game-footer-games.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"casino-game-footer-dealer\" }\nconst _hoisted_2 = { class: \"casino-game-footer__row\" }\nconst _hoisted_3 = { class: \"casino-game-footer__section casino-game-footer__section--dealer\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"casino-game-footer__login-time\"\n}\nconst _hoisted_5 = {\n key: 1,\n href: \"https://www.hrajsrozumem.cz/\",\n target: \"_blank\"\n}\nconst _hoisted_6 = {\n key: 2,\n href: \"/zodpovedne-hrani/herni-limity\",\n target: \"_blank\"\n}\nconst _hoisted_7 = {\n key: 0,\n class: \"casino-game-footer__address\"\n}\nconst _hoisted_8 = {\n key: 0,\n class: \"casino-game-footer__row casino-game-footer__row--dealer\"\n}\nconst _hoisted_9 = {\n key: 0,\n class: \"casino-game-footer__address\"\n}\nconst _hoisted_10 = {\n key: 1,\n href: \"/zodpovedne-hrani/herni-limity\",\n target: \"_blank\"\n}\n\nimport { OnlineGameDetail } from \"../online-game-detail\";\r\nimport { useNgCasinoUtils } from \"../ng-casino-utils\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport { useBreakpoints } from \"@sazka/utils/composables/use-breakpoints\";\r\nimport PanicButton from \"@/shared/components/panic-button.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-footer-dealer',\n props: {\n gameData: {},\n splitScreenData: { type: Boolean }\n },\n setup(__props: any) {\n\r\n\r\n\r\nconst isInAppView = environment.isInAppView ?? false;\r\nconst { loginDurationFormatted, isLoggedIn } = useNgSession();\r\nconst { isMobile } = useNgCasinoUtils();\r\nconst isMdOrLarger = useBreakpoints(\"md\");\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isLoggedIn) && !_unref(isInAppView))\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, [\n _createElementVNode(\"strong\", null, \"Přihlášen: \" + _toDisplayString(_unref(loginDurationFormatted)), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (!_unref(isMobile) && !_unref(isInAppView))\n ? (_openBlock(), _createElementBlock(\"a\", _hoisted_5, \"Hraj s rozumem\"))\n : _createCommentVNode(\"\", true),\n (_unref(isMdOrLarger))\n ? (_openBlock(), _createElementBlock(\"a\", _hoisted_6, _cache[0] || (_cache[0] = [\n _createElementVNode(\"strong\", null, \"Varování: \", -1),\n _createTextVNode(\"Účast na hazardní hře může být škodlivá. | 18+ \")\n ])))\n : _createCommentVNode(\"\", true)\n ]),\n (!_unref(isMdOrLarger))\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString(_ctx.gameData.studioAddress), 1))\n : _createCommentVNode(\"\", true)\n ]),\n (!_unref(isMobile) && !_unref(isInAppView))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n (_unref(isMdOrLarger))\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_9, _toDisplayString(_ctx.gameData.studioAddress), 1))\n : (_openBlock(), _createElementBlock(\"a\", _hoisted_10, _cache[1] || (_cache[1] = [\n _createElementVNode(\"strong\", null, \"Varování: \", -1),\n _createTextVNode(\"Účast na hazardní hře může být škodlivá. | 18+ \")\n ]))),\n _createVNode(PanicButton, {\n class: \"panic-button--in-game casino-game-footer__panic-button casino-game-footer__panic-button--dealer\",\n \"game-name\": _ctx.gameData.codeName\n }, null, 8, [\"game-name\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","\r\n\r\n\r\n","import script from \"./casino-game-footer-dealer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./casino-game-footer-dealer.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nimport { computed, onMounted, onUnmounted, ref } from \"vue\";\r\nimport { OnlineGameDetail } from \"../online-game-detail\";\r\nimport { CasinoGameType } from \"@/casino/ng-casino/casino-game-type\";\r\nimport { debounce } from \"@sazka/utils/debounce\";\r\nimport CasinoGameFooterEtickets from \"./casino-game-footer-etickets.vue\";\r\nimport CasinoGameFooterGames from \"./casino-game-footer-games.vue\";\r\nimport CasinoGameFooterDealer from \"./casino-game-footer-dealer.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-footer',\n props: {\n gameData: {},\n splitScreenData: { type: Boolean }\n },\n setup(__props: any, { expose: __expose }) {\n\r\nconst props = __props;\r\n\r\nconst wrapper = ref();\r\nconst footerHeight = ref();\r\n\r\nconst footerComponent = computed(() => {\r\n switch (props.gameData.type) {\r\n case CasinoGameType.eticket:\r\n return CasinoGameFooterEtickets;\r\n case CasinoGameType.game:\r\n return CasinoGameFooterGames;\r\n case CasinoGameType.livedealer:\r\n return CasinoGameFooterDealer;\r\n default:\r\n return null;\r\n }\r\n});\r\n\r\nconst updateSize = () => {\r\n if (wrapper.value) {\r\n footerHeight.value = wrapper.value.clientHeight;\r\n }\r\n};\r\n\r\nconst debouncedUpdateHeight = debounce(updateSize, 100);\r\n\r\n__expose({\r\n height: footerHeight,\r\n});\r\n\r\nonMounted(() => {\r\n updateSize();\r\n window.addEventListener(\"resize\", debouncedUpdateHeight);\r\n});\r\n\r\nonUnmounted(() => {\r\n window.removeEventListener(\"resize\", debouncedUpdateHeight);\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n ref_key: \"wrapper\",\n ref: wrapper,\n class: _normalizeClass(['casino-game-footer', { 'casino-game-footer--dealer': _ctx.gameData.type === _unref(CasinoGameType).livedealer }]),\n style: _normalizeStyle(_ctx.gameData.infoColor && `--info-color: ${_ctx.gameData.infoColor}`)\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(footerComponent.value), {\n \"game-data\": _ctx.gameData,\n \"split-screen-data\": _ctx.splitScreenData\n }, null, 8, [\"game-data\", \"split-screen-data\"]))\n ], 6))\n}\n}\n\n})","\r\n\r\n\r\n","import script from \"./casino-game-footer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./casino-game-footer.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"bs-container\" }\n\nimport { computed, CSSProperties, nextTick, onMounted, onUnmounted, ref, watch } from \"vue\";\r\nimport { disableHeader, resetHeader, showHeader } from \"@/shared/components/master-page/header\";\r\nimport { addLoginAbortedCallback } from \"@sazka/ng/ng-integration\";\r\nimport { ResponsiveUtils } from \"@sazka/utils/responsive-utils\";\r\nimport { DateTimeUtils } from \"@sazka/utils/date-time-utils\";\r\nimport { WebpHelper } from \"@sazka/utils/webp-helper\";\r\nimport { useNgCasinoUtils } from \"./ng-casino-utils\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport { CasinoGameType } from \"./casino-game-type\";\r\nimport { useNgCasino } from \"./ng-casino-module\";\r\nimport { debounce } from \"@sazka/utils/debounce\";\r\nimport SplitScreen from \"./split-screen/split-screen.vue\";\r\nimport CasinoGameHeader from \"./components/casino-game-header.vue\";\r\nimport CasinoGameFooter from \"./components/casino-game-footer.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-layer',\n setup(__props) {\n\r\nconst {\r\n playForMoney,\r\n closeGame,\r\n sessionStart,\r\n currentGameServerData: gameData,\r\n ngGameDefinition,\r\n currentGameId,\r\n transparentGame,\r\n splitscreenData,\r\n} = useNgCasino();\r\n\r\nlet interval: number | null = null;\r\n\r\nconst casinoGameHeader = ref>();\r\nconst casinoGameFooter = ref>();\r\nconst ngGameContainer = ref(null);\r\nconst ngGameContainerStyle = ref({});\r\nconst container = ref(null);\r\nconst innerContainer = ref();\r\nconst playingTime = ref(\"\");\r\n\r\nconst { isMobile: isResponsiveMobile } = useNgCasinoUtils();\r\nconst { isLoggedIn } = useNgSession();\r\n\r\nconst isLiveDealer = computed(() => gameData.value?.type == CasinoGameType.livedealer);\r\n\r\nconst isMobileOnPageLoad = ResponsiveUtils.isMobile();\r\nconst isInAppView = window.environment?.isInAppView || false;\r\n\r\nconst getAspectRatio = () => parseFloat(ngGameDefinition.value?.aspectRatio) || 16 / 9;\r\n\r\nconst clearNgGameContainerStyle = () => {\r\n if (ngGameContainer.value) {\r\n ngGameContainer.value.style.width = \"\";\r\n ngGameContainer.value.style.height = \"\";\r\n }\r\n ngGameContainerStyle.value = {};\r\n};\r\n\r\nconst updateNgGameContainerStyle = () => {\r\n clearNgGameContainerStyle();\r\n\r\n if (isResponsiveMobile.value) return;\r\n\r\n if (!ngGameContainer.value || !innerContainer.value || !casinoGameHeader.value || !casinoGameFooter.value) {\r\n console.error(\"Error while resizing iFrame, one or more elements not found on page:\", {\r\n ngGameContainer: !!ngGameContainer.value,\r\n innerContainer: !!innerContainer.value,\r\n gameHeader: !!casinoGameHeader.value,\r\n gameFooter: !!casinoGameFooter.value,\r\n });\r\n return;\r\n }\r\n\r\n const aspectRatio = getAspectRatio();\r\n\r\n const availableWidth = innerContainer.value.clientWidth;\r\n const headerHeight = isResponsiveMobile.value ? 0 : casinoGameHeader.value.height || 0;\r\n const footerHeight = casinoGameFooter.value.height || 0;\r\n const availableHeight = innerContainer.value.clientHeight - headerHeight - footerHeight;\r\n if (availableHeight > 0 && availableWidth > 0) {\r\n const containerHeightByWidth = availableWidth / aspectRatio;\r\n const containerWidthByHeight = availableHeight * aspectRatio;\r\n if (containerHeightByWidth <= availableHeight) {\r\n ngGameContainerStyle.value = {\r\n width: `${availableWidth}px`,\r\n height: `${containerHeightByWidth}px`,\r\n };\r\n } else {\r\n ngGameContainerStyle.value = {\r\n width: `${containerWidthByHeight}px`,\r\n height: `${availableHeight}px`,\r\n };\r\n }\r\n }\r\n};\r\n\r\nconst backgroundImageUrl = computed(() => {\r\n const url = gameData.value?.background || \"\";\r\n return WebpHelper.hasWebpSupport ? WebpHelper.webpUrl(url) : url;\r\n});\r\n\r\nconst handleLoginAborted = () => {\r\n if (isLiveDealer.value) {\r\n closeGame();\r\n } else {\r\n playForMoney.value = false;\r\n }\r\n};\r\naddLoginAbortedCallback(handleLoginAborted);\r\n\r\nconst handleHeaderVisibility = () => {\r\n if (isMobileOnPageLoad) {\r\n disableHeader();\r\n } else {\r\n showHeader();\r\n }\r\n};\r\n\r\nconst onGameStart = () => {\r\n document.body.classList.add(\"casino-open\");\r\n\r\n handleHeaderVisibility();\r\n\r\n if (ngGameContainer.value && !ngGameContainer.value.querySelector(\"#ng-game-container\")) {\r\n const gameContainerElement = document.getElementById(\"ng-game-container\");\r\n if (gameContainerElement) ngGameContainer.value.appendChild(gameContainerElement);\r\n }\r\n};\r\n\r\nconst onGameEnd = () => {\r\n document.body.classList.remove(\"casino-open\");\r\n resetHeader();\r\n};\r\n\r\nconst debouncedUpdate = debounce(updateNgGameContainerStyle, 100);\r\n\r\nconst updateScreenWidth = () => {\r\n if (gameData.value.type !== CasinoGameType.eticket) {\r\n debouncedUpdate();\r\n }\r\n};\r\n\r\nonMounted(() => {\r\n onGameStart();\r\n window.addEventListener(\"resize\", updateScreenWidth);\r\n if (gameData.value.type !== CasinoGameType.eticket) {\r\n updateNgGameContainerStyle();\r\n }\r\n});\r\n\r\nonUnmounted(() => {\r\n onGameEnd();\r\n window.removeEventListener(\"resize\", updateScreenWidth);\r\n});\r\n\r\nwatch([sessionStart, isLoggedIn], ([val, isLoggedIn]) => {\r\n if (val) {\r\n if (!interval) {\r\n interval = window.setInterval(() => {\r\n playingTime.value = DateTimeUtils.formatDuration(Date.now() - val);\r\n });\r\n\r\n if (!isLoggedIn) {\r\n clearInterval(interval);\r\n interval = null;\r\n }\r\n } else {\r\n clearInterval(interval);\r\n interval = null;\r\n }\r\n }\r\n});\r\n\r\nwatch([currentGameId, splitscreenData], ([newVal]) => {\r\n if (newVal == 0) {\r\n if (splitscreenData.value) {\r\n nextTick(() => onGameStart());\r\n }\r\n onGameEnd();\r\n } else {\r\n nextTick(() => onGameStart());\r\n }\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"game-detail\", {\r\n 'game-detail--splitscreen': _unref(splitscreenData),\r\n 'game-detail--mobile-on-load': _unref(isMobileOnPageLoad),\r\n 'game-detail--live-dealer': isLiveDealer.value,\r\n }]),\n ref_key: \"container\",\n ref: container\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"content\", { 'content--mobile': _unref(isResponsiveMobile) }]),\n style: _normalizeStyle(`background-image:url(${backgroundImageUrl.value});`)\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n ref_key: \"innerContainer\",\n ref: innerContainer,\n class: _normalizeClass([\"inner-container\", { 'inner-container--mobile': _unref(isResponsiveMobile) }])\n }, [\n (!_unref(isResponsiveMobile))\n ? (_openBlock(), _createBlock(CasinoGameHeader, {\n key: 0,\n ref_key: \"casinoGameHeader\",\n ref: casinoGameHeader,\n \"game-data\": _unref(gameData)\n }, null, 8, [\"game-data\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\r\n 'ng-game-container',\r\n { 'ng-game-container--centered': _unref(gameData).type !== _unref(CasinoGameType).eticket },\r\n ]),\n ref_key: \"ngGameContainer\",\n ref: ngGameContainer,\n style: _normalizeStyle(ngGameContainerStyle.value)\n }, [\n (_unref(splitscreenData))\n ? (_openBlock(), _createBlock(SplitScreen, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ], 6),\n (_unref(gameData) && (!_unref(isInAppView) || _unref(gameData).type === _unref(CasinoGameType).livedealer))\n ? (_openBlock(), _createBlock(CasinoGameFooter, {\n key: 1,\n ref_key: \"casinoGameFooter\",\n ref: casinoGameFooter,\n \"game-data\": _unref(gameData),\n \"split-screen-data\": Boolean(_unref(splitscreenData))\n }, null, 8, [\"game-data\", \"split-screen-data\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ], 6)\n ], 2)), [\n [_vShow, (_unref(currentGameId) != 0 && _unref(gameData) && !_unref(transparentGame)) || _unref(splitscreenData)]\n ])\n}\n}\n\n})","\r\n\r\n\r\n","import script from \"./casino-game-layer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./casino-game-layer.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { useLocalStorage } from \"@sazka/utils/use-storage\";\r\nconst storageName = \"has-confirmed-age\";\r\nconst store = useLocalStorage();\r\n\r\nexport const confirmAge = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n if (environment.isRegistered) {\r\n resolve();\r\n return;\r\n }\r\n\r\n const hasConfirmedAge = store.getItem(storageName);\r\n if (hasConfirmedAge) {\r\n resolve();\r\n return;\r\n }\r\n\r\n const template = `\r\n
\r\n
\r\n
\r\n
\r\n \r\n

Potvrďte nám, že
už vám bylo 18 let.

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
`;\r\n\r\n const $modal = $(template);\r\n $(\"body\").append($modal);\r\n $modal.modal(\"show\");\r\n $modal.find(\"#btn-confirm\").on(\"click\", () => {\r\n store.setItem(storageName, \"true\", \"essential\");\r\n resolve();\r\n $modal.modal(\"hide\");\r\n });\r\n $modal.find(\"#btn-cancel\").on(\"click\", () => {\r\n $modal.modal(\"hide\");\r\n });\r\n $modal.on(\"hidden.bs.modal\", () => {\r\n reject();\r\n $modal.modal(\"dispose\").remove();\r\n if ($(\".modal:visible\").length) {\r\n $(\"body\").addClass(\"modal-open\");\r\n }\r\n });\r\n });\r\n};\r\n","import { addLoginAbortedCallback, getNgTimeDuration, ngFrameworkLoaded } from \"@sazka/ng/ng-integration\";\r\nimport { ResponsiveUtils } from \"@sazka/utils/responsive-utils\";\r\nimport { sazkaAlert } from \"@sazka/utils/sazka-alert\";\r\nimport { computed, createApp, ref, watch } from \"vue\";\r\nimport { CasinoGameLoadParams } from \"./casino-game-load-params\";\r\nimport { analyticsCasinoGameDetail, analyticsCasinoToggleMoneyMode } from \"./ng-casino-analytics\";\r\nimport { useNgCasinoGameList } from \"./ng-casino-game-list\";\r\nimport { OnlineGameDetail } from \"./online-game-detail\";\r\nimport { useSplitscreen } from \"./split-screen/splitscreen\";\r\nimport CasinoGameDetail from \"@/casino/ng-casino/casino-game-layer.vue\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport { Loader } from \"@sazka/design-system/src/loader/loader\";\r\nimport { SplitScreenGame } from \"./split-screen/split-screen-game\";\r\nimport { httpClient } from \"@sazka/utils/http-clients/http-client\";\r\nimport useFloatingGamePreload from \"@/floating/use-floating-preload\";\r\nimport { confirmAge } from \"@/shared/utils/age-confirmation\";\r\nimport { checkPlayerRestrictions } from \"@sazka/ng/ng-player-restrictions\";\r\nimport { CasinoGameType } from \"./casino-game-type\";\r\n\r\n/** ID of currently opened game */\r\nconst currentGameId = ref(0);\r\n/** ID of the game that was successfully launched by NG */\r\nconst successfullyLaunchedGameId = ref(0);\r\n/** Flag if user plays for money */\r\nconst playForMoney = ref(false);\r\n/** Flag if transparent game is being opened */\r\nconst transparentGame = ref(false);\r\n\r\n// Revert changes from FE-4801 only for games\r\nconst netLoss = ref(null);\r\n\r\nconst sessionStart = ref(null);\r\nconst { isLoggedIn } = useNgSession();\r\n\r\nlet container = null;\r\n\r\nlet transparentGameMountModule: typeof import(\"./mount-casino-transparent-game-layer\") = null;\r\n\r\nconst casinoGameMobileMode = ResponsiveUtils.isMobile();\r\nconst ngGameDefinition = ref(null);\r\n\r\n/** Data received from server*/\r\nconst currentGameServerData = ref(null);\r\n\r\nconst splitscreenData = ref(null);\r\n\r\nlet gameLoadPromiseResolve: (data?: any) => void = null;\r\n\r\nconst { fetchNgGameDefinition, gameListReady } = useNgCasinoGameList();\r\n\r\nconst isLiveDealerGameOpen = computed(() => {\r\n return currentGameId.value !== 0 && currentGameServerData.value.type === CasinoGameType.livedealer;\r\n});\r\n\r\nfunction tryOpenPreloadedTransparentGame(gameId: number) {\r\n const { casinoFloatingGamePreloaded, casinoFloatingGamePreloading, emitGameLoad } = useFloatingGamePreload();\r\n\r\n if (currentGameId.value === gameId && (casinoFloatingGamePreloaded.value || casinoFloatingGamePreloading.value)) {\r\n emitGameLoad();\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nconst showGameDetail = () => {\r\n if (!container) {\r\n container = document.createElement(\"div\");\r\n document.body.append(container);\r\n const component = createApp(CasinoGameDetail);\r\n component.mount(container);\r\n }\r\n};\r\n\r\nconst showTransparentGameDetail = async (loadingFromQuery = false) => {\r\n if (loadingFromQuery && tryOpenPreloadedTransparentGame(currentGameId.value)) return;\r\n\r\n transparentGameMountModule ??= await import(\"./mount-casino-transparent-game-layer\");\r\n transparentGameMountModule.launchCasinoTransparentGameLayer(currentGameId.value.toString());\r\n};\r\n\r\n/**\r\n * Close game request to NG\r\n */\r\nconst closeGame = () => {\r\n // handle case when NG doesn't start loading of the game, because of widget or error (CDD verification for example)\r\n if (!successfullyLaunchedGameId.value) {\r\n currentGameId.value = 0;\r\n }\r\n successfullyLaunchedGameId.value = 0;\r\n\r\n if (currentGameId.value > 0) {\r\n ng_fw.closeGame();\r\n }\r\n if (splitscreenData.value) {\r\n currentGameId.value = 0;\r\n splitscreenData.value = null;\r\n }\r\n};\r\n\r\nconst loadGameFromMoneyModeToggle = () => {\r\n loadGame({\r\n gameId: currentGameId.value,\r\n moneyMode: playForMoney.value,\r\n loadSameGame: true,\r\n });\r\n analyticsCasinoToggleMoneyMode(playForMoney.value);\r\n};\r\n\r\n/**\r\n * Toggles money mode\r\n */\r\nconst toggleMoneyMode = () => {\r\n playForMoney.value = !playForMoney.value;\r\n\r\n if (playForMoney.value && !isLoggedIn.value) {\r\n ng_fw.showLogin();\r\n\r\n const stopWatch = watch(\r\n isLoggedIn,\r\n (val) => {\r\n if (val) {\r\n loadGameFromMoneyModeToggle();\r\n }\r\n },\r\n { once: true }\r\n );\r\n\r\n ng_hs.loginAborted(() => stopWatch());\r\n } else {\r\n loadGameFromMoneyModeToggle();\r\n }\r\n};\r\n\r\n/**\r\n * NG confirms that game started loading,\r\n * we can show iframe\r\n * @param gameId Game ID of currently started game, supplied by NG\r\n * @param playMode Play mode supplied by NG\r\n */\r\nconst ngGameReady = (gameId: number, playMode: \"M\" | \"D\") => {\r\n if (currentGameId.value == gameId && playForMoney.value === (playMode === \"M\")) {\r\n gameLoadPromiseResolve();\r\n gameLoadPromiseResolve = null;\r\n } else {\r\n loadGameInitiatedByNg(gameId, playMode === \"M\");\r\n }\r\n currentGameId.value = gameId;\r\n playForMoney.value = playMode === \"M\";\r\n successfullyLaunchedGameId.value = gameId;\r\n};\r\n\r\nconst ngLoadGame = (gameId: number, playForMoney: boolean) => {\r\n return new Promise((res) => {\r\n gameLoadPromiseResolve = res;\r\n ng_fw.loadGame({ gameId, playMode: playForMoney ? \"M\" : \"D\" });\r\n });\r\n};\r\n\r\nasync function loadTransparentGame(gameLoadParams: CasinoGameLoadParams) {\r\n transparentGame.value = true;\r\n playForMoney.value = true; // can be played in money mode only (may change for future transparent games)\r\n\r\n if (currentGameServerData.value?.gameId !== gameLoadParams.gameId) {\r\n await loadServerData(gameLoadParams.gameId);\r\n }\r\n\r\n currentGameId.value = currentGameServerData.value.gameId;\r\n\r\n return ngLoadGame(currentGameId.value, playForMoney.value);\r\n}\r\n\r\n/**\r\n * Initiates game load process\r\n * @param gameLoadParams game load params\r\n */\r\nasync function loadGame(\r\n gameLoadParams: CasinoGameLoadParams,\r\n loadingFromQuery = false,\r\n manufacturer = null,\r\n placement = null,\r\n position = 0,\r\n withAbTest = true\r\n) {\r\n if (\r\n gameLoadParams == null ||\r\n isNaN(gameLoadParams.gameId) ||\r\n (gameLoadParams.gameId === currentGameId.value && !gameLoadParams.loadSameGame)\r\n ) {\r\n return;\r\n }\r\n\r\n if (!environment.isInAppView) {\r\n try {\r\n await confirmAge();\r\n } catch {\r\n return;\r\n }\r\n }\r\n\r\n // Hard Splitscreen\r\n splitscreenData.value = useSplitscreen(gameLoadParams.gameId);\r\n\r\n Loader.showNow();\r\n\r\n try {\r\n await loadServerData(gameLoadParams.gameId, withAbTest);\r\n\r\n const mobileId = currentGameServerData.value.gameMobileId || currentGameServerData.value.gameId;\r\n const desktopId = currentGameServerData.value.gameId;\r\n\r\n transparentGame.value = currentGameServerData.value?.transparent ?? false;\r\n currentGameId.value = casinoGameMobileMode ? mobileId : desktopId; // needs to be set after transparentGame, because of watch trigger in casinoGameLayer\r\n\r\n if (splitscreenData.value) {\r\n Loader.hide();\r\n showGameDetail();\r\n return;\r\n }\r\n await ngFrameworkLoaded();\r\n\r\n ngGameDefinition.value = await fetchNgGameDefinition(currentGameId.value);\r\n if (!ngGameDefinition.value) {\r\n Loader.hide();\r\n gameNotFoundAlert();\r\n return;\r\n }\r\n\r\n playForMoney.value = gameLoadParams.moneyMode ?? isLoggedIn.value;\r\n // check if game is available in demo mode\r\n if (playForMoney.value === false && !ngGameDefinition.value.playModes.includes(\"Demo\")) {\r\n playForMoney.value = true;\r\n }\r\n\r\n analyticsCasinoGameDetail(\r\n currentGameServerData.value?.type,\r\n currentGameServerData.value?.codeName,\r\n playForMoney.value,\r\n currentGameId.value,\r\n manufacturer,\r\n placement,\r\n position\r\n );\r\n Loader.hide();\r\n\r\n if (transparentGame.value) {\r\n showTransparentGameDetail(loadingFromQuery);\r\n } else {\r\n const isRestricted = environment.isInAppView ? false : await checkPlayerRestrictions(true);\r\n\r\n //do not load game background in case of cool off\r\n if (!isRestricted) {\r\n showGameDetail();\r\n }\r\n ngLoadGame(currentGameId.value, playForMoney.value);\r\n }\r\n } catch (e) {\r\n gameLoadAlert();\r\n Loader.hide();\r\n }\r\n}\r\n\r\n// game can be initiated from NG widget\r\nasync function loadGameInitiatedByNg(gameId: number, moneyMode: boolean) {\r\n playForMoney.value = moneyMode;\r\n currentGameId.value = gameId;\r\n Loader.showNow();\r\n\r\n try {\r\n await loadServerData(currentGameId.value, false);\r\n transparentGame.value = currentGameServerData.value?.transparent ?? false;\r\n\r\n // TODO: switch to \"force\" money mode for transparent games?\r\n\r\n if (transparentGame.value) {\r\n showTransparentGameDetail();\r\n } else {\r\n showGameDetail();\r\n }\r\n\r\n ngGameDefinition.value = await fetchNgGameDefinition(currentGameId.value);\r\n if (!ngGameDefinition.value) {\r\n Loader.hide();\r\n gameNotFoundAlert();\r\n return;\r\n }\r\n\r\n analyticsCasinoGameDetail(\r\n currentGameServerData.value?.type,\r\n currentGameServerData.value?.codeName,\r\n playForMoney.value,\r\n currentGameId.value,\r\n null,\r\n null,\r\n 0\r\n );\r\n Loader.hide();\r\n } catch (e) {\r\n Loader.hide();\r\n gameLoadAlert();\r\n }\r\n}\r\n\r\nfunction gameLoadAlert() {\r\n sazkaAlert(\r\n \"Nastal problém při načítání hry\",\r\n \"Zkuste prosím obnovit stránku a hru znovu spustit.\",\r\n \"Obnovit stránku\",\r\n \"javascript:location.reload()\",\r\n \"Zavřít\"\r\n );\r\n}\r\n\r\nfunction gameNotFoundAlert() {\r\n sazkaAlert(\r\n \"Připravujeme pro vás novou hru\",\r\n \"Omlouváme se, ale hru není možné v tuto chvíli spustit. Připravujeme pro vás novou emisi. Mezitím vyzkoušejte další hry z naší nabídky.\"\r\n );\r\n}\r\n\r\n/**\r\n * Load game data from Kentico\r\n * @param gameId Game to load server data\r\n */\r\nasync function loadServerData(gameId: number, withAbTest = true): Promise {\r\n return await new Promise(async (res, rej) => {\r\n // is same game - for example on money mode change\r\n if (currentGameServerData.value?.gameId === gameId && !withAbTest) {\r\n res(true);\r\n return;\r\n }\r\n\r\n try {\r\n const response = await httpClient.get(\r\n `/api/casino/game/${gameId}?withAbTest=${withAbTest}`\r\n );\r\n currentGameServerData.value = response.data;\r\n res(true);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n}\r\n\r\nfunction ngSessionUpdate(totalNetLoss: string, playingSessionStart: string, ngServerTime: string) {\r\n netLoss.value = Number(totalNetLoss) * -1;\r\n\r\n if (playingSessionStart) {\r\n sessionStart.value = getNgTimeDuration(playingSessionStart, ngServerTime);\r\n } else {\r\n sessionStart.value = null;\r\n netLoss.value = null;\r\n }\r\n}\r\n\r\nfunction handleTransparentProductCardClick(gameId: any, gameLoadParams: any) {\r\n if (!tryOpenPreloadedTransparentGame(gameId)) {\r\n gameLoadParams.moneyMode = true;\r\n loadGame(gameLoadParams);\r\n }\r\n}\r\n\r\nngFrameworkLoaded().then(() => {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ng_hs.instantGame.gameClosed((gameId: number) => {\r\n // do not reset game id, when we are expecting next game to launch\r\n if (!gameLoadPromiseResolve) {\r\n currentGameId.value = 0;\r\n gameLoadPromiseResolve = null;\r\n }\r\n });\r\n ng_hs.onGamesListUpdated((gameList) => gameListReady(gameList));\r\n\r\n ng_hs.InstantGamesPlayingSessionUpdate((rgStatus) => {\r\n // Revert changes for FE-4801\r\n // to include net loss only for games only\r\n ngSessionUpdate(rgStatus.TotalNetLoss, rgStatus.PlayingSessionStartTime, rgStatus.ServerTime);\r\n });\r\n\r\n // when user toggles money mode and then closes login popup,\r\n // we need to forget, he wanted to change game mode\r\n addLoginAbortedCallback(() => {\r\n if (gameLoadPromiseResolve) {\r\n gameLoadPromiseResolve = null;\r\n }\r\n });\r\n});\r\n\r\n/*\r\n prevents user from pressing tab\r\n while game opened\r\n (header dissapears)\r\n*/\r\n$(\"body\").keydown(function (e) {\r\n if ($(\"body\").hasClass(\"casino-open\")) {\r\n if (e.keyCode === 9) {\r\n e.preventDefault();\r\n }\r\n }\r\n});\r\n\r\nexport const useNgCasino = () => ({\r\n loadGame,\r\n loadTransparentGame,\r\n ngGameReady,\r\n playForMoney,\r\n closeGame,\r\n sessionStart,\r\n netLoss,\r\n currentGameServerData,\r\n currentGameId,\r\n transparentGame,\r\n ngGameDefinition,\r\n toggleMoneyMode,\r\n splitscreenData,\r\n handleTransparentProductCardClick,\r\n isLiveDealerGameOpen,\r\n});\r\n","import { eventBus, GlobalEvents } from \"@sazka/utils/global-events\";\r\nimport { ref } from \"vue\";\r\n\r\nconst casinoFloatingGamePreloaded = ref(false);\r\nconst casinoFloatingGamePreloading = ref(false);\r\n\r\nexport default function useFloatingGamePreload() {\r\n const emitGameLoad = () => {\r\n eventBus.emit(GlobalEvents.LaunchCasinoFloating);\r\n };\r\n\r\n return {\r\n casinoFloatingGamePreloading,\r\n casinoFloatingGamePreloaded,\r\n emitGameLoad,\r\n };\r\n}\r\n","import { ngFrameworkLoaded } from \"@sazka/ng/ng-integration\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport { getPlayerSelfExclusion } from \"@/shared/http-clients/player-account-http-client\";\r\nimport { isTerminatedAccount } from \"./player-account\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nexport const isSelfExcludedAccount = ref(null);\r\n\r\nexport const startPanicButtonFlow = async (location: \"detail\" | \"footer\" | \"\" = \"\", game = \"\") => {\r\n const { usePanicButtonFlow } = await import(\"../panic-button/use-panic-button-flow\");\r\n const { showPopup } = usePanicButtonFlow();\r\n await showPopup(location, game);\r\n};\r\n\r\nexport const useSelfExclusion = async () => {\r\n const { isLoggedIn } = useNgSession();\r\n\r\n await ngFrameworkLoaded();\r\n watch(isLoggedIn, async (loggedIn) => {\r\n if (loggedIn) {\r\n let selfExclusion = null;\r\n try {\r\n selfExclusion = await getPlayerSelfExclusion();\r\n } catch {\r\n return;\r\n }\r\n\r\n if (selfExclusion?.Limits?.[0]?.DurationUnit === \"Permanent\") {\r\n isSelfExcludedAccount.value = true;\r\n\r\n watch(\r\n isTerminatedAccount,\r\n async () => {\r\n if (isTerminatedAccount.value === false) {\r\n const { usePanicButtonLoginNotification } = await import(\r\n \"../panic-button/use-panic-button-login-notification\"\r\n );\r\n const { showPermanentBlockPopup } = usePanicButtonLoginNotification();\r\n await showPermanentBlockPopup();\r\n }\r\n },\r\n { immediate: true }\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (selfExclusion?.Limits?.[0]?.EndDate) {\r\n isSelfExcludedAccount.value = true;\r\n\r\n watch(\r\n isTerminatedAccount,\r\n async () => {\r\n if (isTerminatedAccount.value === false) {\r\n const { usePanicButtonLoginNotification } = await import(\r\n \"../panic-button/use-panic-button-login-notification\"\r\n );\r\n const { showTemporaryBlockPopup } = usePanicButtonLoginNotification();\r\n await showTemporaryBlockPopup(new Date(selfExclusion.Limits[0].EndDate));\r\n }\r\n },\r\n { immediate: true }\r\n );\r\n\r\n return;\r\n }\r\n\r\n isSelfExcludedAccount.value = false;\r\n } else {\r\n isSelfExcludedAccount.value = null;\r\n }\r\n });\r\n\r\n document.getElementById(\"panic-button\")?.addEventListener(\"click\", () => startPanicButtonFlow(\"footer\"));\r\n};\r\n","export namespace StringUtils {\r\n /**\r\n * Formats a number by adding commas for thousands separator and truncating decimal places.\r\n *\r\n * @param {number} value - The number to format.\r\n * @param {boolean} useNbsp - Optional flag to use non-breaking space as a separator. Defaults to true.\r\n * @return {string} The formatted number with commas and optional non-breaking space separator.\r\n */\r\n export const formatNumber = (value: number, useNbsp = true): string => {\r\n if (typeof value !== \"number\") {\r\n return \"---\";\r\n }\r\n const ref = value.toFixed(2).split(\".\");\r\n let preComma = ref[0] || \"\";\r\n const postComma = ref[1];\r\n preComma = stringReverse((stringReverse(preComma).match(/.{1,3}/g) || [\"\"]).join(useNbsp ? \";psbn&\" : \" \"));\r\n\r\n return postComma != \"00\" ? preComma + \",\" + postComma : preComma;\r\n };\r\n\r\n /**\r\n * Formats a currency value by calling formatNumber and appending the currency symbol.\r\n *\r\n * @param {number} value - The value to format as currency.\r\n * @param {boolean} useNbsp - Optional flag to use non-breaking space as a separator. Defaults to true.\r\n * @return {string} The formatted currency value with the currency symbol.\r\n */\r\n export const formatCurrency = (value: number, useNbsp = true): string => {\r\n // this is also case for 0\r\n if (!value || isNaN(value)) {\r\n value = 0;\r\n }\r\n return `${formatNumber(value, useNbsp)}${useNbsp ? \" \" : \" \"}Kč`;\r\n };\r\n\r\n /**\r\n * Limits the length of the text if it exceeds the specified limit by truncating and adding ellipsis.\r\n *\r\n * @param {string} text - The input text to limit.\r\n * @param {number} limit - The maximum length of the text before truncation. Defaults to 50.\r\n * @return {string} The text with limited length, potentially truncated with ellipsis.\r\n */\r\n export const limitTextLength = (text: string, limit = 50) => {\r\n if (text && text.length > limit) {\r\n return text.substring(0, limit - 3) + \"...\";\r\n }\r\n return text;\r\n };\r\n\r\n /**\r\n * Reverses the given string.\r\n *\r\n * @param {string} str - The string to be reversed.\r\n * @return {string} The reversed string.\r\n */\r\n export function stringReverse(str: string): string {\r\n return str.split(\"\").reverse().join(\"\");\r\n }\r\n\r\n /**\r\n * Converts given HTML text to plain text.\r\n *\r\n * @param {string} htmlText - The HTML text to be converted to plain text.\r\n * @return {string} The plain text.\r\n */\r\n export function getPlainTextFromHtml(htmlText: string): string {\r\n const tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = htmlText;\r\n return tempDiv.textContent || tempDiv.innerText || \"\";\r\n }\r\n\r\n /**\r\n * Sanitizes a string by removing HTML tags and replacing multiple whitespaces/newlines with a single space.\r\n */\r\n export function sanitizeString(input: string): string {\r\n return input\r\n .replace(/<[^>]*>/g, \"\") // Remove HTML tags\r\n .replace(/\\s+/g, \" \") // Replace multiple whitespaces/newlines with a single space\r\n .trim(); // Remove leading and trailing spaces\r\n }\r\n}\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, unref as _unref, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport { startPanicButtonFlow } from \"@/shared/components/master-page/self-exclusion\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'panic-button',\n props: {\n gameName: {}\n },\n setup(__props: any) {\n\r\n\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"button\", {\n type: \"button\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_unref(startPanicButtonFlow)('detail', _ctx.gameName))),\n class: \"panic-button authenticated\"\n }, _cache[1] || (_cache[1] = [\n _createStaticVNode(\" Zablokovat hraní \", 2)\n ])))\n}\n}\n\n})","import script from \"./panic-button.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./panic-button.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__"],"names":["CasinoGameType","analyticsCasinoGameDetail","type","analyticsGameCode","moneyMode","gameId","manufacturer","placement","position","ngGameDefinition","typeDl","game","eticket","livedealer","page","verticalCode","verticalCodeStrict","gameCode","gameCodeStrict","gameMode","gameid","externalGameProvider","externalGameSubProvider","dataLayer","push","event","analyticsCasinoToggleMoneyMode","playForMoney","action","click","gameList","gameListReadyPromiseResolve","loadGameList","Promise","res","ng_fw","updateGamesList","gameListReady","list","_list$games","games","instant","getGameFromNgList","id","find","fetchNgGameDefinition","async","useNgCasinoGameList","splitscreenGames","cssClass","gameData","link","useSplitscreen","filtered","filter","x","length","MOBILE_BREAKPOINT","useNgCasinoUtils","viewportWidth","ref","window","innerWidth","isMobile","computed","value","updateSize","debouncedUpdateSize","debounce","onMounted","addEventListener","onUnmounted","removeEventListener","_hoisted_1","_defineComponent","__name","setup","__props","splitscreenData","useNgCasino","_ctx","_cache","_openBlock","_createElementBlock","class","_normalizeClass","_unref","_Fragment","_renderList","data","i","href","key","__exports__","_hoisted_2","props","expose","__expose","wrapper","height","ResponsiveUtils","closeGame","toggleMoneyMode","isLiveDealer","_props$gameData","moneyTogglerEnabled","updateHeight","clientHeight","debouncedUpdateHeight","ref_key","_createElementVNode","checked","onClick","args","_createCommentVNode","_createBlock","DsButton","theme","$event","default","_withCtx","_createTextVNode","_","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","splitScreenData","Boolean","_environment$isInAppV","isInAppView","environment","loginDurationFormatted","isLoggedIn","useNgSession","_toDisplayString","PanicButton","codeName","infoUrl","target","_hoisted_8","_hoisted_9","netLoss","balanceValue","StringUtils","formatCurrency","_hoisted_10","isMdOrLarger","useBreakpoints","studioAddress","_createVNode","footerHeight","footerComponent","CasinoGameFooterEtickets","CasinoGameFooterGames","CasinoGameFooterDealer","style","_normalizeStyle","infoColor","_resolveDynamicComponent","_window$environment","sessionStart","currentGameServerData","currentGameId","transparentGame","interval","casinoGameHeader","casinoGameFooter","ngGameContainer","ngGameContainerStyle","container","innerContainer","playingTime","isResponsiveMobile","_gameData$value","isMobileOnPageLoad","getAspectRatio","_ngGameDefinition$val","parseFloat","aspectRatio","clearNgGameContainerStyle","width","updateNgGameContainerStyle","console","error","gameHeader","gameFooter","availableWidth","clientWidth","headerHeight","availableHeight","containerHeightByWidth","containerWidthByHeight","backgroundImageUrl","_gameData$value2","url","background","WebpHelper","hasWebpSupport","webpUrl","handleLoginAborted","addLoginAbortedCallback","handleHeaderVisibility","disableHeader","showHeader","onGameStart","document","body","classList","add","querySelector","gameContainerElement","getElementById","appendChild","onGameEnd","remove","resetHeader","debouncedUpdate","updateScreenWidth","watch","val","clearInterval","setInterval","DateTimeUtils","formatDuration","Date","now","newVal","nextTick","_withDirectives","CasinoGameHeader","SplitScreen","CasinoGameFooter","_vShow","storageName","store","useLocalStorage","confirmAge","resolve","reject","isRegistered","hasConfirmedAge","getItem","template","$modal","$","append","modal","on","setItem","addClass","successfullyLaunchedGameId","transparentGameMountModule","casinoGameMobileMode","gameLoadPromiseResolve","isLiveDealerGameOpen","tryOpenPreloadedTransparentGame","casinoFloatingGamePreloaded","casinoFloatingGamePreloading","emitGameLoad","useFloatingGamePreload","showGameDetail","createElement","component","createApp","CasinoGameDetail","mount","showTransparentGameDetail","loadingFromQuery","_transparentGameMount","launchCasinoTransparentGameLayer","toString","loadGameFromMoneyModeToggle","loadGame","loadSameGame","showLogin","stopWatch","once","ng_hs","loginAborted","ngGameReady","playMode","loadGameInitiatedByNg","ngLoadGame","loadTransparentGame","gameLoadParams","_currentGameServerDat","loadServerData","withAbTest","isNaN","Loader","showNow","_currentGameServerDat2","_currentGameServerDat3","_gameLoadParams$money","_currentGameServerDat4","_currentGameServerDat5","mobileId","gameMobileId","desktopId","transparent","hide","ngFrameworkLoaded","gameNotFoundAlert","playModes","includes","isRestricted","checkPlayerRestrictions","e","gameLoadAlert","_currentGameServerDat6","_currentGameServerDat7","_currentGameServerDat8","_currentGameServerDat9","sazkaAlert","rej","_currentGameServerDat10","response","httpClient","get","err","ngSessionUpdate","totalNetLoss","playingSessionStart","ngServerTime","Number","getNgTimeDuration","handleTransparentProductCardClick","then","instantGame","gameClosed","onGamesListUpdated","InstantGamesPlayingSessionUpdate","rgStatus","TotalNetLoss","PlayingSessionStartTime","ServerTime","keydown","hasClass","keyCode","preventDefault","eventBus","emit","GlobalEvents","LaunchCasinoFloating","isSelfExcludedAccount","startPanicButtonFlow","location","usePanicButtonFlow","showPopup","useSelfExclusion","_document$getElementB","loggedIn","_selfExclusion","_selfExclusion2","selfExclusion","getPlayerSelfExclusion","Limits","DurationUnit","isTerminatedAccount","usePanicButtonLoginNotification","showPermanentBlockPopup","immediate","EndDate","showTemporaryBlockPopup","stringReverse","str","split","reverse","join","getPlainTextFromHtml","htmlText","tempDiv","innerHTML","textContent","innerText","sanitizeString","input","replace","trim","formatNumber","useNbsp","toFixed","preComma","postComma","match","limitTextLength","text","limit","substring","gameName","_createStaticVNode"],"sourceRoot":""}