{"version":3,"file":"js/8419.1dd73858afe139ea.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?a348","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?99e5","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-header.vue?d90a","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?5403","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-etickets.vue?4594","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?1385","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-games.vue?6dcc","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?9046","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer-dealer.vue?4ce5","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?b76a","webpack://@sazka/web/./js/app/casino/ng-casino/components/casino-game-footer.vue?a623","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?8d54","webpack://@sazka/web/./js/app/casino/ng-casino/casino-game-layer.vue?d82b","webpack://@sazka/web/./js/app/casino/ng-casino/casino-game-layer.vue","webpack://@sazka/web/./js/app/casino/ng-casino/casino-game-layer.vue?78d7","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?d6af","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 { ngFrameworkLoaded } from \"@sazka/ng/ng-integration\";\r\nimport { 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 const startDeposit = async () => {\r\n await ngFrameworkLoaded();\r\n ng_fw.showDeposit();\r\n };\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 startDeposit,\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, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, Fragment as _Fragment } 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 { debounce } from \"@sazka/utils/debounce\";\r\nimport { useNgCasinoUtils } from \"../ng-casino-utils\";\r\nimport DsButton from \"@sazka/design-system/src/button/ds-button.vue\";\r\nimport PanicButton from \"@/shared/components/panic-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 } = useNgCasinoUtils();\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 (_unref(isMobile))\n ? (_openBlock(), _createBlock(PanicButton, {\n key: 0,\n class: \"panic-button--in-game-header\",\n \"game-name\": _ctx.gameData.codeName\n }, null, 8, [\"game-name\"]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\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[2] || (_cache[2] = _createElementVNode(\"span\", { class: \"left\" }, \"Pro zábavu\", -1)),\n _cache[3] || (_cache[3] = _createElementVNode(\"span\", { class: \"right\" }, \"Za peníze\", -1))\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(DsButton, {\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[4] || (_cache[4] = [\n _createTextVNode(\" Zavřít \")\n ])),\n _: 1\n })\n ], 64))\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, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createBlock as _createBlock, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"casino-game-footer-etickets\" }\nconst _hoisted_2 = { class: \"casino-game-footer__row\" }\nconst _hoisted_3 = { class: \"casino-game-footer__section casino-game-footer__section--etickets\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"casino-game-footer__login-time\"\n}\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = {\n key: 0,\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\nimport DsButton from \"@sazka/design-system/src/button/ds-button.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-footer-etickets',\n props: {\n gameData: {}\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, startDeposit } = useNgCasinoUtils();\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))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" Přihlášen \" + _toDisplayString(_unref(loginDurationFormatted)), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"a\", {\n href: _ctx.gameData.infoUrl,\n target: \"_blank\",\n class: \"casino-game-footer__ticket-info\"\n }, \"Informace k losu\", 8, _hoisted_5)\n ]),\n (!_unref(isMobile))\n ? (_openBlock(), _createBlock(PanicButton, {\n key: 0,\n class: \"panic-button--in-game-footer casino-game-footer__panic-button\",\n \"game-name\": _ctx.gameData.codeName\n }, null, 8, [\"game-name\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isMobile) && _unref(isLoggedIn) && !_unref(isInAppView))\n ? (_openBlock(), _createBlock(DsButton, {\n key: 1,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_unref(startDeposit)())),\n size: \"sm\",\n type: \"secondary\",\n \"icon-left\": \"plus-circle\",\n theme: \"dark\",\n class: \"casino-game-footer__deposit\"\n }, {\n default: _withCtx(() => _cache[1] || (_cache[1] = [\n _createTextVNode(\"VKLAD\")\n ])),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]),\n (!_unref(isInAppView) && !_unref(isMobile))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, _cache[2] || (_cache[2] = [\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, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createBlock as _createBlock, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"casino-game-footer-games\" }\nconst _hoisted_2 = { class: \"casino-game-footer__row\" }\nconst _hoisted_3 = { class: \"casino-game-footer__section casino-game-footer__section--games\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"casino-game-footer__login-time\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"casino-game-footer__balance\"\n}\nconst _hoisted_6 = {\n key: 2,\n class: \"casino-game-footer__legal\"\n}\nconst _hoisted_7 = {\n key: 0,\n class: \"casino-game-footer__row\"\n}\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\nimport DsButton from \"@sazka/design-system/src/button/ds-button.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-footer-games',\n props: {\n gameData: {}\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, startDeposit } = useNgCasinoUtils();\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))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" Přihlášen \" + _toDisplayString(_unref(loginDurationFormatted)), 1))\n : _createCommentVNode(\"\", true),\n (_unref(netLoss) && _unref(isLoggedIn))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, \"Bilance: \" + _toDisplayString(balanceValue.value), 1))\n : _createCommentVNode(\"\", true),\n (_unref(isMobile))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, \"Účast na hazardní hře může být škodlivá. | 18+\"))\n : _createCommentVNode(\"\", true)\n ]),\n (!_unref(isMobile))\n ? (_openBlock(), _createBlock(PanicButton, {\n key: 0,\n class: \"panic-button--in-game-footer casino-game-footer__panic-button\",\n \"game-name\": _ctx.gameData.codeName\n }, null, 8, [\"game-name\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isMobile) && _unref(isLoggedIn) && !_unref(isInAppView))\n ? (_openBlock(), _createBlock(DsButton, {\n key: 1,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_unref(startDeposit)())),\n size: \"sm\",\n type: \"secondary\",\n \"icon-left\": \"plus-circle\",\n theme: \"dark\",\n class: \"casino-game-footer__deposit\"\n }, {\n default: _withCtx(() => _cache[1] || (_cache[1] = [\n _createTextVNode(\"VKLAD\")\n ])),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]),\n (!_unref(isInAppView) && !_unref(isMobile))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _cache[2] || (_cache[2] = [\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-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, withCtx as _withCtx, createBlock as _createBlock, 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: 3,\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\nimport DsButton from \"@sazka/design-system/src/button/ds-button.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-footer-dealer',\n props: {\n gameData: {}\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 { isMobile, startDeposit } = 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[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 : _createCommentVNode(\"\", true),\n (!_unref(isMdOrLarger))\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString(_ctx.gameData.studioAddress), 1))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(isMobile) && _unref(isLoggedIn) && !_unref(isInAppView))\n ? (_openBlock(), _createBlock(DsButton, {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_unref(startDeposit)())),\n size: \"sm\",\n type: \"secondary\",\n \"icon-left\": \"plus-circle\",\n theme: \"dark\",\n class: \"casino-game-footer__deposit\"\n }, {\n default: _withCtx(() => _cache[2] || (_cache[2] = [\n _createTextVNode(\"VKLAD\")\n ])),\n _: 1\n }))\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[3] || (_cache[3] = [\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-footer 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, useTemplateRef } 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 },\n setup(__props: any, { expose: __expose }) {\n\r\nconst props = __props;\r\n\r\nconst wrapper = useTemplateRef(\"wrapper\");\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({ '--info-color': _ctx.gameData.infoColor || '' })\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(footerComponent.value), { \"game-data\": _ctx.gameData }, null, 8, [\"game-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 { 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\nimport { useHeader } from \"@/shared/components/master-page/header\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'casino-game-layer',\n setup(__props) {\n\r\nconst { disableHeader, setHeaderState, resetHeader } = useHeader();\r\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 setHeaderState({ active: true, transparent: false, animated: false });\r\n }\r\n};\r\n\r\nconst onGameStart = () => {\r\n document.body.classList.add(\"casino-open\");\r\n\r\n if (!isInAppView) {\r\n handleHeaderVisibility();\r\n }\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 if (!isInAppView) {\r\n resetHeader();\r\n }\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\", [\r\n { 'inner-container--mobile': _unref(isResponsiveMobile) },\r\n { 'inner-container--app': _unref(isInAppView) },\r\n ]])\n }, [\n (!_unref(isInAppView))\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 }, null, 8, [\"game-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","startDeposit","ngFrameworkLoaded","showDeposit","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","closeGame","toggleMoneyMode","isLiveDealer","_props$gameData","moneyTogglerEnabled","updateHeight","clientHeight","debouncedUpdateHeight","ref_key","_createBlock","PanicButton","codeName","_createElementVNode","checked","onClick","args","_createCommentVNode","_createVNode","DsButton","theme","$event","default","_withCtx","_createTextVNode","_","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_environment$isInAppV","isInAppView","environment","loginDurationFormatted","isLoggedIn","useNgSession","_toDisplayString","infoUrl","target","size","_hoisted_7","netLoss","balanceValue","StringUtils","formatCurrency","_hoisted_8","_hoisted_9","_hoisted_10","isMdOrLarger","useBreakpoints","studioAddress","useTemplateRef","footerHeight","footerComponent","CasinoGameFooterEtickets","CasinoGameFooterGames","CasinoGameFooterDealer","style","_normalizeStyle","infoColor","_resolveDynamicComponent","_window$environment","disableHeader","setHeaderState","resetHeader","useHeader","sessionStart","currentGameServerData","currentGameId","transparentGame","interval","casinoGameHeader","casinoGameFooter","ngGameContainer","ngGameContainerStyle","container","innerContainer","playingTime","isResponsiveMobile","_gameData$value","isMobileOnPageLoad","ResponsiveUtils","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","active","transparent","animated","onGameStart","document","body","classList","add","querySelector","gameContainerElement","getElementById","appendChild","onGameEnd","remove","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","hide","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":""}