{"version":3,"file":"js/9102.83ea09bfcd4bbe85.js","mappings":"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","sources":["webpack://@sazka/web/../../libs/design-system/src/segmented-picker/ds-segmented-injected-key.ts","webpack://@sazka/web/../../libs/utils/composables/use-breakpoints.ts","webpack://@sazka/web/../../node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.13_vue@3.5.13_typescript@5.7.3__webpack@5.95.0_@swc+c_34j4td3qllqrpsyknfjyyfkdq4/node_modules/vue-loader/dist/exportHelper.js","webpack://@sazka/web/./js/standalone-pages/champs/champs-content.ts","webpack://@sazka/web/./js/standalone-pages/champs/composables/use-champs-content.ts","webpack://@sazka/web/./js/standalone-pages/champs/analytics/analytics-champs.ts","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-video.vue?e130","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-video.vue","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-video.vue?8830","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-socials.vue?be6c","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-socials.vue","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-socials.vue?6694","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-athlete-list-row.vue?26cc","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-athlete-list-row.vue","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-athlete-list-row.vue?d753","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-athlete-list.vue?1eae","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-athlete-list.vue","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-athlete-list.vue?6c05","webpack://@sazka/web/./js/standalone-pages/champs/page/champs-homepage.vue?205d","webpack://@sazka/web/./js/standalone-pages/champs/page/champs-homepage.vue","webpack://@sazka/web/./js/standalone-pages/champs/page/champs-homepage.vue?09ed","webpack://@sazka/web/./js/app/shared/design-system/photogallery-lightbox/photoswipe-dynamic-caption-plugin.js","webpack://@sazka/web/./js/standalone-pages/champs/page/champs-athlete.vue?bfec","webpack://@sazka/web/./js/standalone-pages/champs/page/champs-athlete.vue","webpack://@sazka/web/./js/standalone-pages/champs/page/champs-athlete.vue?1a7a","webpack://@sazka/web/./js/standalone-pages/champs/champs-router.ts","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-header.vue?28f8","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-header.vue","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-footer.vue","webpack://@sazka/web/./js/standalone-pages/champs/components/champs-footer.vue?32a4","webpack://@sazka/web/./js/standalone-pages/champs/_champs.vue?4f5a","webpack://@sazka/web/./js/standalone-pages/champs/_champs.vue","webpack://@sazka/web/./js/standalone-pages/champs/_champs.vue?f686","webpack://@sazka/web/../../libs/design-system/src/segmented-picker-item/ds-segmented-picker-item.vue?d892","webpack://@sazka/web/../../libs/design-system/src/segmented-picker-item/ds-segmented-picker-item.vue","webpack://@sazka/web/../../libs/design-system/src/segmented-picker-item/ds-segmented-picker-item.vue?a8e6","webpack://@sazka/web/../../libs/design-system/src/segmented-picker/ds-segmented-picker.vue?4683","webpack://@sazka/web/../../libs/design-system/src/segmented-picker/ds-segmented-picker.vue","webpack://@sazka/web/../../libs/design-system/src/segmented-picker/ds-segmented-picker.vue?0b49"],"sourcesContent":["import { ComputedRef, InjectionKey } from \"vue\";\r\n\r\nexport const dsSegmentedInjectedKey = Symbol() as InjectionKey<ComputedRef<string>>;\r\n","import { Ref, ref } from \"vue\";\r\nimport { ResponsiveUtils } from \"../responsive-utils\";\r\n\r\ntype BreakpointType = keyof Omit<typeof ResponsiveUtils.breakpoints, \"xs\">;\r\ntype ReactiveBreakpoint = {\r\n    key: BreakpointType;\r\n    minSize: (typeof ResponsiveUtils.breakpoints)[BreakpointType];\r\n    isInUse: boolean;\r\n    value: Ref<boolean>;\r\n};\r\n\r\nlet initialized = false;\r\nlet reactiveBreakpoints: ReactiveBreakpoint[] = null;\r\n\r\n/**\r\n * Returns ref with boolean value, which means, current breakpoint is same or bigger\r\n * eg. media min-width: x\r\n * since its breakpoint up, it doesnt make sense for 'xs' which would be always true, so its omited\r\n * @param breakpoints breakpoint name eg. 'xs2' or 'xl'\r\n * @returns boolean\r\n */\r\nexport function useBreakpoints(breakpoints: BreakpointType): Ref<boolean>;\r\n\r\n/**\r\n * Returns object, with keys same as parameter value, their value is ref with boolean value, which means, current breakpoint is same or bigger\r\n * eg. media min-width: x\r\n * Example of return value: { sm: ref(true), md: ref(false) }\r\n * Returns only value passed in parametrs,\r\n * since its breakpoint up, it doesnt make sense for 'xs' which would be always true, so its omited\r\n * @param breakpoints all breakpoint names eg. 'xs2' or 'xl'\r\n */\r\nexport function useBreakpoints(...breakpoints: BreakpointType[]): { [key in BreakpointType]: Ref<boolean> };\r\n\r\nexport function useBreakpoints(...breakpoints: BreakpointType[]) {\r\n    if (breakpoints?.length == 0) return;\r\n\r\n    initialize();\r\n\r\n    if (breakpoints.length > 1) {\r\n        return breakpoints.reduce((acc, x) => {\r\n            acc[x] = reactiveBreakpoint(x);\r\n            return acc;\r\n        }, {});\r\n    } else {\r\n        return reactiveBreakpoint(breakpoints[0]);\r\n    }\r\n}\r\n\r\nfunction initialize() {\r\n    if (initialized) return;\r\n    reactiveBreakpoints = Object.keys(ResponsiveUtils.breakpoints)\r\n        .filter((x) => x !== \"xs\")\r\n        .map((x) => ({\r\n            isInUse: false,\r\n            key: x as BreakpointType,\r\n            minSize: ResponsiveUtils.breakpoints[x] as (typeof ResponsiveUtils.breakpoints)[BreakpointType],\r\n            value: ref(false),\r\n        }));\r\n\r\n    initialized = true;\r\n}\r\n\r\nfunction reactiveBreakpoint(breakpoint: BreakpointType) {\r\n    const brkpnt = reactiveBreakpoints.find((x) => x.key === breakpoint);\r\n    if (!brkpnt.isInUse) {\r\n        brkpnt.isInUse = true;\r\n        const media = window.matchMedia(`(min-width: ${brkpnt.minSize}px)`);\r\n        brkpnt.value.value = media.matches;\r\n        media.onchange = (e) => {\r\n            brkpnt.value.value = e.matches;\r\n        };\r\n    }\r\n    return brkpnt.value;\r\n}\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// runtime helper for setting properties on components\n// in a tree-shakable way\nexports.default = (sfc, props) => {\n    const target = sfc.__vccOpts || sfc;\n    for (const [key, val] of props) {\n        target[key] = val;\n    }\n    return target;\n};\n","const configuration = window.champsConfiguration;\r\nexport const { athletes: champsAthletes, homepage: champsHomepage } = configuration;\r\n","import { computed } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\n\r\nconst configuration = window.champsConfiguration;\r\nconst { athletes } = configuration;\r\n\r\nexport const useCurrentAthlete = () => {\r\n    const route = useRoute();\r\n    return computed(() => {\r\n        let name = route.params.name;\r\n        if (Array.isArray(name)) {\r\n            name = name[0];\r\n        }\r\n\r\n        return athletes.find((athlete) => athlete.urlSlug === name);\r\n    });\r\n};\r\n","import { Analytics } from \"@/shared/utils/analytics/analytics\";\r\n\r\nexport namespace ChampsAnalytics {\r\n    // DL1.10\r\n    export const pushChampsPage = () => {\r\n        setTimeout(() => {\r\n            window.dataLayer.push({\r\n                page: {\r\n                    type: \"sazkaChamps\",\r\n                    kind: \"sazkaChamps\",\r\n                    verticalCode: \"no_vertical\",\r\n                    verticalCodeStrict: \"no_vertical\",\r\n                    gameCode: \"no_game\",\r\n                    gameCodeStrict: \"no_game\",\r\n                },\r\n            });\r\n\r\n            Analytics.pageReady();\r\n        }, 0);\r\n    };\r\n\r\n    // DL1.20\r\n    export const pushPlayVideo = () => {\r\n        setTimeout(() => {\r\n            window.dataLayer.push({ event: \"action.play.video\" });\r\n        }, 0);\r\n    };\r\n\r\n    // DL1.30\r\n    export const pushClickDetail = (text: string) => {\r\n        setTimeout(() => {\r\n            window.dataLayer.push({\r\n                event: \"action.click.sazkaChamps\",\r\n                action: {\r\n                    click: {\r\n                        eventProperty1: text,\r\n                    },\r\n                },\r\n            });\r\n        }, 0);\r\n    };\r\n}\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"champs-video__name\"\n}\nconst _hoisted_2 = [\"controls\"]\nconst _hoisted_3 = [\"src\"]\n\nimport { ref } from \"vue\";\r\nimport { champsHomepage } from \"../champs-content\";\r\nimport { useCurrentAthlete } from \"../composables/use-champs-content\";\r\nimport { ChampsAnalytics } from \"../analytics/analytics-champs\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'champs-video',\n  setup(__props) {\n\r\nconst currentAthlete = useCurrentAthlete();\r\nconst video = currentAthlete.value ? currentAthlete.value.video : champsHomepage.video;\r\n\r\nconst champVideo = ref<HTMLVideoElement>();\r\nconst videoPlaying = ref(false);\r\n\r\nfunction playVideo() {\r\n    champVideo.value?.play();\r\n    videoPlaying.value = true;\r\n\r\n    if (!currentAthlete.value) {\r\n        ChampsAnalytics.pushPlayVideo();\r\n    }\r\n}\r\n\r\nfunction videoEnded() {\r\n    videoPlaying.value = false;\r\n    champVideo.value.load();\r\n}\r\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass(['champs-video', { 'champs-video--athlete': _unref(currentAthlete) }])\n  }, [\n    (_unref(currentAthlete))\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n          _createElementVNode(\"h2\", {\n            class: _normalizeClass([\r\n                    'champs-video__first-name',\r\n                    `champs-video__first-name--${_unref(currentAthlete).firstNamePlacement}`,\r\n                    { 'champs-video__first-name--gray': videoPlaying.value },\r\n                ])\n          }, _toDisplayString(_unref(currentAthlete).firstName), 3),\n          _createElementVNode(\"h2\", {\n            class: _normalizeClass(['champs-video__last-name', { 'champs-video__last-name--gray': videoPlaying.value }])\n          }, _toDisplayString(_unref(currentAthlete).lastName), 3)\n        ]))\n      : _createCommentVNode(\"\", true),\n    _createElementVNode(\"video\", {\n      controls: videoPlaying.value,\n      ref_key: \"champVideo\",\n      ref: champVideo,\n      class: _normalizeClass(['champs-video__video', { 'champs-video__video--playing': videoPlaying.value }]),\n      onEnded: videoEnded\n    }, [\n      _createElementVNode(\"source\", {\n        src: _unref(video),\n        type: \"video/webm\"\n      }, null, 8, _hoisted_3)\n    ], 42, _hoisted_2),\n    (!videoPlaying.value)\n      ? (_openBlock(), _createElementBlock(\"button\", {\n          key: 1,\n          class: \"paragraph-text champs-video__play\",\n          onClick: playVideo\n        }, \" ►PŘEHRÁT VIDEO \"))\n      : _createCommentVNode(\"\", true),\n    (_unref(currentAthlete))\n      ? (_openBlock(), _createElementBlock(\"h2\", {\n          key: 2,\n          class: _normalizeClass(['champs-video__sport', { 'champs-video__sport--gray': videoPlaying.value }])\n        }, _toDisplayString(_unref(currentAthlete).sport), 3))\n      : _createCommentVNode(\"\", true)\n  ], 2))\n}\n}\n\n})","<template>\r\n    <div :class=\"['champs-video', { 'champs-video--athlete': currentAthlete }]\">\r\n        <div v-if=\"currentAthlete\" class=\"champs-video__name\">\r\n            <h2\r\n                :class=\"[\r\n                    'champs-video__first-name',\r\n                    `champs-video__first-name--${currentAthlete.firstNamePlacement}`,\r\n                    { 'champs-video__first-name--gray': videoPlaying },\r\n                ]\"\r\n            >\r\n                {{ currentAthlete.firstName }}\r\n            </h2>\r\n            <h2 :class=\"['champs-video__last-name', { 'champs-video__last-name--gray': videoPlaying }]\">\r\n                {{ currentAthlete.lastName }}\r\n            </h2>\r\n        </div>\r\n        <video\r\n            :controls=\"videoPlaying\"\r\n            ref=\"champVideo\"\r\n            :class=\"['champs-video__video', { 'champs-video__video--playing': videoPlaying }]\"\r\n            @ended=\"videoEnded\"\r\n        >\r\n            <source :src=\"video\" type=\"video/webm\" />\r\n        </video>\r\n        <button v-if=\"!videoPlaying\" class=\"paragraph-text champs-video__play\" @click=\"playVideo\">\r\n            ►PŘEHRÁT VIDEO\r\n        </button>\r\n        <h2 v-if=\"currentAthlete\" :class=\"['champs-video__sport', { 'champs-video__sport--gray': videoPlaying }]\">\r\n            {{ currentAthlete.sport }}\r\n        </h2>\r\n    </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref } from \"vue\";\r\nimport { champsHomepage } from \"../champs-content\";\r\nimport { useCurrentAthlete } from \"../composables/use-champs-content\";\r\nimport { ChampsAnalytics } from \"../analytics/analytics-champs\";\r\n\r\nconst currentAthlete = useCurrentAthlete();\r\nconst video = currentAthlete.value ? currentAthlete.value.video : champsHomepage.video;\r\n\r\nconst champVideo = ref<HTMLVideoElement>();\r\nconst videoPlaying = ref(false);\r\n\r\nfunction playVideo() {\r\n    champVideo.value?.play();\r\n    videoPlaying.value = true;\r\n\r\n    if (!currentAthlete.value) {\r\n        ChampsAnalytics.pushPlayVideo();\r\n    }\r\n}\r\n\r\nfunction videoEnded() {\r\n    videoPlaying.value = false;\r\n    champVideo.value.load();\r\n}\r\n</script>\r\n","import script from \"./champs-video.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./champs-video.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"champs-socials__follow\"\n}\nconst _hoisted_2 = { class: \"champs-socials__links\" }\nconst _hoisted_3 = { class: \"champs-socials__links-inner\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"paragraph-text champs-socials__name\"\n}\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = [\"href\"]\nconst _hoisted_7 = [\"href\"]\nconst _hoisted_8 = [\"href\"]\nconst _hoisted_9 = [\"href\"]\n\nimport { computed } from \"vue\";\r\nimport { champsHomepage } from \"../champs-content\";\r\nimport { useCurrentAthlete } from \"../composables/use-champs-content\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'champs-socials',\n  emits: [\"handleBack\"],\n  setup(__props, { emit: __emit }) {\n\r\nconst emit = __emit;\r\nconst handleGoBack = () => emit(\"handleBack\");\r\n\r\nconst currentAthlete = useCurrentAthlete();\r\nconst isHomepage = !currentAthlete.value;\r\n\r\nconst { facebook, x: twitter, instagram, linkedIn, youTube } = isHomepage ? champsHomepage : currentAthlete.value;\r\n\r\nconst allSocialsAreEmpty = computed(() => ![facebook, twitter, instagram, linkedIn, youTube].some((val) => val));\r\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"champs-socials\", { 'champs-socials--detail': !isHomepage }])\n  }, [\n    isHomepage\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _cache[0] || (_cache[0] = [\n          _createElementVNode(\"h2\", { class: \"champs-socials__follow--text\" }, \"FOLLOW\", -1),\n          _createElementVNode(\"h2\", { class: \"champs-socials__follow--text\" }, \"#SAZKACHAMPS\", -1)\n        ])))\n      : _createCommentVNode(\"\", true),\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        (!isHomepage && !allSocialsAreEmpty.value)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \"FOLLOW \" + _toDisplayString(_unref(currentAthlete).firstName), 1))\n          : _createCommentVNode(\"\", true),\n        _createElementVNode(\"div\", {\n          class: _normalizeClass([\"champs-socials__icons\", { 'champs-socials__icons--detail': !isHomepage }])\n        }, [\n          (_unref(facebook))\n            ? (_openBlock(), _createElementBlock(\"a\", {\n                key: 0,\n                href: _unref(facebook),\n                target: \"_blank\"\n              }, _cache[1] || (_cache[1] = [\n                _createElementVNode(\"img\", {\n                  src: \"/frontend/web/img/sazka-champs/facebook.svg\",\n                  alt: \"facebook\",\n                  width: \"24\",\n                  height: \"24\"\n                }, null, -1)\n              ]), 8, _hoisted_5))\n            : _createCommentVNode(\"\", true),\n          (_unref(twitter))\n            ? (_openBlock(), _createElementBlock(\"a\", {\n                key: 1,\n                href: _unref(twitter),\n                target: \"_blank\"\n              }, _cache[2] || (_cache[2] = [\n                _createElementVNode(\"img\", {\n                  src: \"/frontend/web/img/sazka-champs/twitter-x.svg\",\n                  alt: \"x\",\n                  width: \"24\",\n                  height: \"24\"\n                }, null, -1)\n              ]), 8, _hoisted_6))\n            : _createCommentVNode(\"\", true),\n          (_unref(instagram))\n            ? (_openBlock(), _createElementBlock(\"a\", {\n                key: 2,\n                href: _unref(instagram),\n                target: \"_blank\"\n              }, _cache[3] || (_cache[3] = [\n                _createElementVNode(\"img\", {\n                  src: \"/frontend/web/img/sazka-champs/instagram.svg\",\n                  alt: \"instagram\",\n                  width: \"24\",\n                  height: \"24\"\n                }, null, -1)\n              ]), 8, _hoisted_7))\n            : _createCommentVNode(\"\", true),\n          (_unref(linkedIn))\n            ? (_openBlock(), _createElementBlock(\"a\", {\n                key: 3,\n                href: _unref(linkedIn),\n                target: \"_blank\"\n              }, _cache[4] || (_cache[4] = [\n                _createElementVNode(\"img\", {\n                  src: \"/frontend/web/img/sazka-champs/linkedin.svg\",\n                  alt: \"linkedin\",\n                  width: \"24\",\n                  height: \"24\"\n                }, null, -1)\n              ]), 8, _hoisted_8))\n            : _createCommentVNode(\"\", true),\n          (_unref(youTube))\n            ? (_openBlock(), _createElementBlock(\"a\", {\n                key: 4,\n                href: _unref(youTube),\n                target: \"_blank\"\n              }, _cache[5] || (_cache[5] = [\n                _createElementVNode(\"img\", {\n                  src: \"/frontend/web/img/sazka-champs/ytb.svg\",\n                  alt: \"youtube\",\n                  width: \"24\",\n                  height: \"24\"\n                }, null, -1)\n              ]), 8, _hoisted_9))\n            : _createCommentVNode(\"\", true)\n        ], 2)\n      ]),\n      (!isHomepage)\n        ? (_openBlock(), _createElementBlock(\"p\", {\n            key: 0,\n            class: _normalizeClass([\"champs-socials__btn-wrap\", { 'champs-socials__btn-wrap--empty': allSocialsAreEmpty.value }])\n          }, [\n            _createElementVNode(\"button\", {\n              class: \"champs-socials__back-btn\",\n              onClick: handleGoBack\n            }, \"Zpět\")\n          ], 2))\n        : _createCommentVNode(\"\", true)\n    ])\n  ], 2))\n}\n}\n\n})","<template>\r\n    <div class=\"champs-socials\" :class=\"{ 'champs-socials--detail': !isHomepage }\">\r\n        <div v-if=\"isHomepage\" class=\"champs-socials__follow\">\r\n            <h2 class=\"champs-socials__follow--text\">FOLLOW</h2>\r\n            <h2 class=\"champs-socials__follow--text\">#SAZKACHAMPS</h2>\r\n        </div>\r\n        <div class=\"champs-socials__links\">\r\n            <div class=\"champs-socials__links-inner\">\r\n                <span v-if=\"!isHomepage && !allSocialsAreEmpty\" class=\"paragraph-text champs-socials__name\"\r\n                    >FOLLOW {{ currentAthlete.firstName }}</span\r\n                >\r\n                <div class=\"champs-socials__icons\" :class=\"{ 'champs-socials__icons--detail': !isHomepage }\">\r\n                    <a v-if=\"facebook\" :href=\"facebook\" target=\"_blank\">\r\n                        <img src=\"/frontend/web/img/sazka-champs/facebook.svg\" alt=\"facebook\" width=\"24\" height=\"24\" />\r\n                    </a>\r\n                    <a v-if=\"twitter\" :href=\"twitter\" target=\"_blank\">\r\n                        <img src=\"/frontend/web/img/sazka-champs/twitter-x.svg\" alt=\"x\" width=\"24\" height=\"24\" />\r\n                    </a>\r\n                    <a v-if=\"instagram\" :href=\"instagram\" target=\"_blank\">\r\n                        <img\r\n                            src=\"/frontend/web/img/sazka-champs/instagram.svg\"\r\n                            alt=\"instagram\"\r\n                            width=\"24\"\r\n                            height=\"24\"\r\n                        />\r\n                    </a>\r\n                    <a v-if=\"linkedIn\" :href=\"linkedIn\" target=\"_blank\">\r\n                        <img src=\"/frontend/web/img/sazka-champs/linkedin.svg\" alt=\"linkedin\" width=\"24\" height=\"24\" />\r\n                    </a>\r\n                    <a v-if=\"youTube\" :href=\"youTube\" target=\"_blank\">\r\n                        <img src=\"/frontend/web/img/sazka-champs/ytb.svg\" alt=\"youtube\" width=\"24\" height=\"24\" />\r\n                    </a>\r\n                </div>\r\n            </div>\r\n            <p\r\n                class=\"champs-socials__btn-wrap\"\r\n                :class=\"{ 'champs-socials__btn-wrap--empty': allSocialsAreEmpty }\"\r\n                v-if=\"!isHomepage\"\r\n            >\r\n                <button class=\"champs-socials__back-btn\" @click=\"handleGoBack\">Zpět</button>\r\n            </p>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from \"vue\";\r\nimport { champsHomepage } from \"../champs-content\";\r\nimport { useCurrentAthlete } from \"../composables/use-champs-content\";\r\n\r\nconst emit = defineEmits([\"handleBack\"]);\r\nconst handleGoBack = () => emit(\"handleBack\");\r\n\r\nconst currentAthlete = useCurrentAthlete();\r\nconst isHomepage = !currentAthlete.value;\r\n\r\nconst { facebook, x: twitter, instagram, linkedIn, youTube } = isHomepage ? champsHomepage : currentAthlete.value;\r\n\r\nconst allSocialsAreEmpty = computed(() => ![facebook, twitter, instagram, linkedIn, youTube].some((val) => val));\r\n</script>\r\n","import script from \"./champs-socials.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./champs-socials.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"champs-athlete-list-row__last-name-left\" }\nconst _hoisted_2 = { class: \"champs-athlete-list-row__last-name-right\" }\nconst _hoisted_3 = [\"src\"]\n\nimport { ChampsAthlete } from \"../types/champs-models\";\r\nimport { computed, onMounted, ref } from \"vue\";\r\nimport router, { CHAMPS_ROUTES } from \"../champs-router\";\r\nimport { useBreakpoints } from \"@sazka/utils/composables/use-breakpoints\";\r\nimport { ChampsAnalytics } from \"../analytics/analytics-champs\";\r\n\r\nconst DESKTOP_OFFSET = 432.3999938964844;\r\nconst TABLET_OFFSET = 272.3999938964844;\r\nconst MOBILE_OFFSET = 179.9250030517578;\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'champs-athlete-list-row',\n  props: {\n    athlete: {},\n    zIndex: {}\n  },\n  setup(__props: any) {\n\r\nconst props = __props;\r\n\r\nconst isAnimating = ref(false);\r\nconst imgRef = ref<HTMLImageElement>();\r\nconst listRef = ref<HTMLDivElement>();\r\nconst innerRef = ref<HTMLDivElement>();\r\nconst isTablet = useBreakpoints(\"sm\");\r\nconst isDesktop = useBreakpoints(\"lg\");\r\n\r\nconst BACKGROUND: HTMLDivElement = document.querySelector(\".champs__background\");\r\nconst targetOffset = computed(() => {\r\n    if (isDesktop.value) {\r\n        return DESKTOP_OFFSET;\r\n    } else if (isTablet.value) {\r\n        return TABLET_OFFSET;\r\n    } else {\r\n        return MOBILE_OFFSET;\r\n    }\r\n});\r\n\r\nconst getFirstHalf = computed(() => {\r\n    const midpoint = Math.ceil(props.athlete.lastName.length / 2);\r\n\r\n    return props.athlete.lastName.substring(0, midpoint).toUpperCase();\r\n});\r\n\r\nconst getSecondsHalf = computed(() => {\r\n    const midpoint = Math.floor(props.athlete.lastName.length / 2) + (props.athlete.lastName.length % 2 === 1 ? 1 : 0);\r\n\r\n    return props.athlete.lastName.substring(midpoint).toUpperCase();\r\n});\r\n\r\nconst getNameAlignment = () => {\r\n    return props.athlete.firstNamePlacement;\r\n};\r\n\r\nconst calculateScale = (elementWidth: number, maxWidth = 1600): number => {\r\n    const targetWidth = Math.min(window.innerWidth, maxWidth);\r\n    return targetWidth / elementWidth;\r\n};\r\n\r\nconst applyTransformations = (element: HTMLImageElement, translateY: number, scale: number): void => {\r\n    element.setAttribute(\r\n        \"style\",\r\n        `--width: ${window.innerWidth}px; transform: translate(-50%, ${translateY}px) scale(${scale})`\r\n    );\r\n    element.style.pointerEvents = \"none\";\r\n};\r\n\r\nconst updateRowsZIndex = (rows: NodeListOf<HTMLDivElement>, activeIndex: number): void => {\r\n    rows.forEach((row, index) => {\r\n        row.style.zIndex = index === activeIndex ? \"20\" : \"0\";\r\n    });\r\n};\r\n\r\nconst calculateScaleAndPosition = () => {\r\n    const imgWidth = imgRef.value.clientWidth;\r\n    const imgHeight = imgRef.value.clientHeight;\r\n    const topOffset = imgRef.value.getBoundingClientRect().top;\r\n    const imgCenterY = topOffset + imgHeight / 2;\r\n    const calculatedHeight = window.innerWidth * (9 / 16);\r\n\r\n    const scale = isTablet.value ? calculateScale(imgWidth) : 1;\r\n    const targetHeight = imgHeight * scale;\r\n\r\n    const targetCenterY = isTablet.value\r\n        ? targetOffset.value + targetHeight / 2\r\n        : targetOffset.value + calculatedHeight / 2;\r\n\r\n    const translateY = isTablet.value\r\n        ? -imgHeight / 2 - (imgCenterY - targetCenterY)\r\n        : -calculatedHeight / 2 - (imgCenterY - targetCenterY);\r\n\r\n    applyTransformations(imgRef.value, translateY, scale);\r\n    if (!isTablet.value) {\r\n        imgRef.value.style.height = `${calculatedHeight}px`;\r\n    }\r\n\r\n    BACKGROUND.classList.add(\"champs__background--animate\");\r\n    listRef.value.style.pointerEvents = \"none\";\r\n\r\n    const rows = document.querySelectorAll<HTMLDivElement>(\".champs-athlete-list-row\");\r\n    updateRowsZIndex(rows, props.zIndex);\r\n};\r\n\r\nconst redirect = () => {\r\n    if (isAnimating.value) return;\r\n\r\n    document.documentElement.style.overflowX = \"hidden\";\r\n    isAnimating.value = true;\r\n    calculateScaleAndPosition();\r\n    setTimeout(() => {\r\n        router.push({ name: CHAMPS_ROUTES.detail.name, params: { name: props.athlete.urlSlug } });\r\n\r\n        isAnimating.value = false;\r\n        BACKGROUND.classList.remove(\"champs__background--animate\");\r\n        document.documentElement.removeAttribute(\"style\");\r\n    }, 1000);\r\n\r\n    ChampsAnalytics.pushClickDetail(`${props.athlete.firstName} ${props.athlete.lastName} ${props.athlete.sport}`);\r\n};\r\n\r\nonMounted(() => {\r\n    listRef.value.style.zIndex = props.zIndex.toString();\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"li\", {\n    onClick: redirect,\n    ref_key: \"listRef\",\n    ref: listRef,\n    class: _normalizeClass(['champs-athlete-list-row', { 'champs-athlete-list-row--animate': isAnimating.value }])\n  }, [\n    _createElementVNode(\"div\", {\n      ref_key: \"innerRef\",\n      ref: innerRef,\n      class: \"champs-athlete-list-row__inner\"\n    }, [\n      _createElementVNode(\"p\", {\n        class: _normalizeClass([\r\n                    'champs-athlete-list-row__first-name',\r\n                    `champs-athlete-list-row__first-name--${getNameAlignment()}`,\r\n                    { 'champs-athlete-list-row__first-name--animate': isAnimating.value },\r\n                ])\n      }, _toDisplayString(_ctx.athlete.firstName.toUpperCase()), 3),\n      _createElementVNode(\"p\", {\n        class: _normalizeClass([\r\n                    'champs-athlete-list-row__last-name',\r\n                    { 'champs-athlete-list-row__last-name--animate': isAnimating.value },\r\n                ])\n      }, [\n        _createElementVNode(\"span\", _hoisted_1, _toDisplayString(getFirstHalf.value), 1),\n        _createElementVNode(\"span\", _hoisted_2, _toDisplayString(getSecondsHalf.value), 1)\n      ], 2),\n      _createElementVNode(\"p\", {\n        class: _normalizeClass(['champs-athlete-list-row__sport', { 'champs-athlete-list-row__sport--animate': isAnimating.value }])\n      }, _toDisplayString(_ctx.athlete.sport.toUpperCase()), 3),\n      _createElementVNode(\"img\", {\n        ref_key: \"imgRef\",\n        ref: imgRef,\n        src: _ctx.athlete.image,\n        alt: \"\",\n        class: _normalizeClass(['champs-athlete-list-row__img', { 'champs-athlete-list-row__img--animate': isAnimating.value }])\n      }, null, 10, _hoisted_3)\n    ], 512)\n  ], 2))\n}\n}\n\n})","<template>\r\n    <li\r\n        @click=\"redirect\"\r\n        ref=\"listRef\"\r\n        :class=\"['champs-athlete-list-row', { 'champs-athlete-list-row--animate': isAnimating }]\"\r\n    >\r\n        <div ref=\"innerRef\" class=\"champs-athlete-list-row__inner\">\r\n            <p\r\n                :class=\"[\r\n                    'champs-athlete-list-row__first-name',\r\n                    `champs-athlete-list-row__first-name--${getNameAlignment()}`,\r\n                    { 'champs-athlete-list-row__first-name--animate': isAnimating },\r\n                ]\"\r\n            >\r\n                {{ athlete.firstName.toUpperCase() }}\r\n            </p>\r\n            <p\r\n                :class=\"[\r\n                    'champs-athlete-list-row__last-name',\r\n                    { 'champs-athlete-list-row__last-name--animate': isAnimating },\r\n                ]\"\r\n            >\r\n                <span class=\"champs-athlete-list-row__last-name-left\">{{ getFirstHalf }}</span\r\n                ><span class=\"champs-athlete-list-row__last-name-right\">{{ getSecondsHalf }}</span>\r\n            </p>\r\n            <p :class=\"['champs-athlete-list-row__sport', { 'champs-athlete-list-row__sport--animate': isAnimating }]\">\r\n                {{ athlete.sport.toUpperCase() }}\r\n            </p>\r\n            <img\r\n                ref=\"imgRef\"\r\n                :src=\"athlete.image\"\r\n                alt=\"\"\r\n                :class=\"['champs-athlete-list-row__img', { 'champs-athlete-list-row__img--animate': isAnimating }]\"\r\n            />\r\n        </div>\r\n    </li>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ChampsAthlete } from \"../types/champs-models\";\r\nimport { computed, onMounted, ref } from \"vue\";\r\nimport router, { CHAMPS_ROUTES } from \"../champs-router\";\r\nimport { useBreakpoints } from \"@sazka/utils/composables/use-breakpoints\";\r\nimport { ChampsAnalytics } from \"../analytics/analytics-champs\";\r\n\r\nconst props = defineProps<{\r\n    athlete: ChampsAthlete;\r\n    zIndex: number;\r\n}>();\r\n\r\nconst isAnimating = ref(false);\r\nconst imgRef = ref<HTMLImageElement>();\r\nconst listRef = ref<HTMLDivElement>();\r\nconst innerRef = ref<HTMLDivElement>();\r\nconst isTablet = useBreakpoints(\"sm\");\r\nconst isDesktop = useBreakpoints(\"lg\");\r\n\r\nconst BACKGROUND: HTMLDivElement = document.querySelector(\".champs__background\");\r\nconst DESKTOP_OFFSET = 432.3999938964844;\r\nconst TABLET_OFFSET = 272.3999938964844;\r\nconst MOBILE_OFFSET = 179.9250030517578;\r\n\r\nconst targetOffset = computed(() => {\r\n    if (isDesktop.value) {\r\n        return DESKTOP_OFFSET;\r\n    } else if (isTablet.value) {\r\n        return TABLET_OFFSET;\r\n    } else {\r\n        return MOBILE_OFFSET;\r\n    }\r\n});\r\n\r\nconst getFirstHalf = computed(() => {\r\n    const midpoint = Math.ceil(props.athlete.lastName.length / 2);\r\n\r\n    return props.athlete.lastName.substring(0, midpoint).toUpperCase();\r\n});\r\n\r\nconst getSecondsHalf = computed(() => {\r\n    const midpoint = Math.floor(props.athlete.lastName.length / 2) + (props.athlete.lastName.length % 2 === 1 ? 1 : 0);\r\n\r\n    return props.athlete.lastName.substring(midpoint).toUpperCase();\r\n});\r\n\r\nconst getNameAlignment = () => {\r\n    return props.athlete.firstNamePlacement;\r\n};\r\n\r\nconst calculateScale = (elementWidth: number, maxWidth = 1600): number => {\r\n    const targetWidth = Math.min(window.innerWidth, maxWidth);\r\n    return targetWidth / elementWidth;\r\n};\r\n\r\nconst applyTransformations = (element: HTMLImageElement, translateY: number, scale: number): void => {\r\n    element.setAttribute(\r\n        \"style\",\r\n        `--width: ${window.innerWidth}px; transform: translate(-50%, ${translateY}px) scale(${scale})`\r\n    );\r\n    element.style.pointerEvents = \"none\";\r\n};\r\n\r\nconst updateRowsZIndex = (rows: NodeListOf<HTMLDivElement>, activeIndex: number): void => {\r\n    rows.forEach((row, index) => {\r\n        row.style.zIndex = index === activeIndex ? \"20\" : \"0\";\r\n    });\r\n};\r\n\r\nconst calculateScaleAndPosition = () => {\r\n    const imgWidth = imgRef.value.clientWidth;\r\n    const imgHeight = imgRef.value.clientHeight;\r\n    const topOffset = imgRef.value.getBoundingClientRect().top;\r\n    const imgCenterY = topOffset + imgHeight / 2;\r\n    const calculatedHeight = window.innerWidth * (9 / 16);\r\n\r\n    const scale = isTablet.value ? calculateScale(imgWidth) : 1;\r\n    const targetHeight = imgHeight * scale;\r\n\r\n    const targetCenterY = isTablet.value\r\n        ? targetOffset.value + targetHeight / 2\r\n        : targetOffset.value + calculatedHeight / 2;\r\n\r\n    const translateY = isTablet.value\r\n        ? -imgHeight / 2 - (imgCenterY - targetCenterY)\r\n        : -calculatedHeight / 2 - (imgCenterY - targetCenterY);\r\n\r\n    applyTransformations(imgRef.value, translateY, scale);\r\n    if (!isTablet.value) {\r\n        imgRef.value.style.height = `${calculatedHeight}px`;\r\n    }\r\n\r\n    BACKGROUND.classList.add(\"champs__background--animate\");\r\n    listRef.value.style.pointerEvents = \"none\";\r\n\r\n    const rows = document.querySelectorAll<HTMLDivElement>(\".champs-athlete-list-row\");\r\n    updateRowsZIndex(rows, props.zIndex);\r\n};\r\n\r\nconst redirect = () => {\r\n    if (isAnimating.value) return;\r\n\r\n    document.documentElement.style.overflowX = \"hidden\";\r\n    isAnimating.value = true;\r\n    calculateScaleAndPosition();\r\n    setTimeout(() => {\r\n        router.push({ name: CHAMPS_ROUTES.detail.name, params: { name: props.athlete.urlSlug } });\r\n\r\n        isAnimating.value = false;\r\n        BACKGROUND.classList.remove(\"champs__background--animate\");\r\n        document.documentElement.removeAttribute(\"style\");\r\n    }, 1000);\r\n\r\n    ChampsAnalytics.pushClickDetail(`${props.athlete.firstName} ${props.athlete.lastName} ${props.athlete.sport}`);\r\n};\r\n\r\nonMounted(() => {\r\n    listRef.value.style.zIndex = props.zIndex.toString();\r\n});\r\n</script>\r\n","import script from \"./champs-athlete-list-row.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./champs-athlete-list-row.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, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"champs-athlete-list\" }\n\nimport { champsAthletes } from \"../champs-content\";\r\nimport ChampsAthleteListRow from \"./champs-athlete-list-row.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'champs-athlete-list',\n  setup(__props) {\n\r\nconst athletes = champsAthletes;\r\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"nav\", null, [\n    _createElementVNode(\"ul\", _hoisted_1, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(athletes), (athlete, index) => {\n        return (_openBlock(), _createBlock(ChampsAthleteListRow, {\n          key: athlete.firstName + '-' + athlete.lastName,\n          athlete: athlete,\n          \"z-index\": index\n        }, null, 8, [\"athlete\", \"z-index\"]))\n      }), 128))\n    ])\n  ]))\n}\n}\n\n})","<template>\r\n    <nav>\r\n        <ul class=\"champs-athlete-list\">\r\n            <ChampsAthleteListRow\r\n                v-for=\"(athlete, index) in athletes\"\r\n                :key=\"athlete.firstName + '-' + athlete.lastName\"\r\n                :athlete=\"athlete\"\r\n                :z-index=\"index\"\r\n            />\r\n        </ul>\r\n    </nav>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { champsAthletes } from \"../champs-content\";\r\nimport ChampsAthleteListRow from \"./champs-athlete-list-row.vue\";\r\n\r\nconst athletes = champsAthletes;\r\n</script>\r\n","import script from \"./champs-athlete-list.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./champs-athlete-list.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, createElementVNode as _createElementVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"champs-homepage\" }\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport ChampsVideo from \"../components/champs-video.vue\";\r\nimport ChampsSocials from \"../components/champs-socials.vue\";\r\nimport { champsHomepage } from \"../champs-content\";\r\nimport ChampsAthleteList from \"../components/champs-athlete-list.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'champs-homepage',\n  setup(__props) {\n\r\nconst title = champsHomepage.text;\r\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"h2\", {\n      class: \"champs-homepage__title paragraph-text\",\n      innerHTML: _unref(title)\n    }, null, 8, _hoisted_2),\n    _createVNode(ChampsVideo),\n    _createVNode(ChampsAthleteList),\n    _createVNode(ChampsSocials)\n  ]))\n}\n}\n\n})","<template>\r\n    <div class=\"champs-homepage\">\r\n        <h2 class=\"champs-homepage__title paragraph-text\" v-html=\"title\"></h2>\r\n        <ChampsVideo />\r\n        <ChampsAthleteList />\r\n        <ChampsSocials />\r\n    </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport ChampsVideo from \"../components/champs-video.vue\";\r\nimport ChampsSocials from \"../components/champs-socials.vue\";\r\nimport { champsHomepage } from \"../champs-content\";\r\nimport ChampsAthleteList from \"../components/champs-athlete-list.vue\";\r\n\r\nconst title = champsHomepage.text;\r\n</script>\r\n","import script from \"./champs-homepage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./champs-homepage.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","/**\r\n * PhotoSwipe Dynamic Caption plugin v1.2.7\r\n * https://github.com/dimsemenov/photoswipe-dynamic-caption-plugin\r\n *\r\n * By https://dimsemenov.com\r\n */\r\n\r\n/**\r\n * Default options for the plugin.\r\n * @type {Object}\r\n * @property {string} captionContent - The CSS selector of the caption content element.\r\n * @property {boolean} selectNextSibling - Whether to select the next sibling element when the caption is not found.\r\n * @property {string} type - The type of the caption. Can be \"auto\", \"vertical\", or \"horizontal\".\r\n * @property {number} horizontalEdgeThreshold - The threshold for the horizontal edge of the image.\r\n * @property {number} mobileCaptionOverlapRatio - The ratio of the mobile caption overlap.\r\n * @property {number} mobileLayoutBreakpoint - The breakpoint for mobile layout.\r\n * @property {boolean} verticallyCenterImage - Whether to vertically center the image.\r\n */\r\nconst defaultOptions = {\r\n    captionContent: \".pswp-caption-content\",\r\n    selectNextSibling: false,\r\n    type: \"auto\",\r\n    horizontalEdgeThreshold: 20,\r\n    mobileCaptionOverlapRatio: 0.3,\r\n    mobileLayoutBreakpoint: 600,\r\n    verticallyCenterImage: false,\r\n};\r\n\r\nclass PhotoSwipeDynamicCaption {\r\n    constructor(lightbox, options) {\r\n        this.options = {\r\n            ...defaultOptions,\r\n            ...options,\r\n        };\r\n\r\n        this.lightbox = lightbox;\r\n\r\n        this.lightbox.on(\"init\", () => {\r\n            this.pswp = this.lightbox.pswp;\r\n            this.initCaption();\r\n        });\r\n    }\r\n\r\n    initCaption() {\r\n        const { pswp } = this;\r\n\r\n        pswp.on(\"change\", () => {\r\n            // make sure caption is displayed after slides are switched\r\n            this.showCaption(this.pswp.currSlide);\r\n        });\r\n\r\n        pswp.on(\"calcSlideSize\", (e) => this.onCalcSlideSize(e));\r\n\r\n        pswp.on(\"slideDestroy\", (e) => {\r\n            if (e.slide.dynamicCaption) {\r\n                if (e.slide.dynamicCaption.element) {\r\n                    e.slide.dynamicCaption.element.remove();\r\n                }\r\n                delete e.slide.dynamicCaption;\r\n            }\r\n        });\r\n\r\n        // hide caption if zoomed\r\n        pswp.on(\"zoomPanUpdate\", ({ slide }) => {\r\n            if (pswp.opener.isOpen && slide.dynamicCaption) {\r\n                if (slide.currZoomLevel > slide.zoomLevels.initial) {\r\n                    this.hideCaption(slide);\r\n                } else {\r\n                    this.showCaption(slide);\r\n                }\r\n\r\n                // move caption on vertical drag\r\n                if (slide.dynamicCaption.element) {\r\n                    let captionYOffset = 0;\r\n                    if (slide.currZoomLevel <= slide.zoomLevels.initial) {\r\n                        const shiftedAmount = slide.pan.y - slide.bounds.center.y;\r\n                        if (Math.abs(shiftedAmount) > 1) {\r\n                            captionYOffset = shiftedAmount;\r\n                        }\r\n                    }\r\n\r\n                    this.setCaptionYOffset(slide.dynamicCaption.element, captionYOffset);\r\n                }\r\n\r\n                this.adjustPanArea(slide, slide.currZoomLevel);\r\n            }\r\n        });\r\n\r\n        pswp.on(\"beforeZoomTo\", (e) => {\r\n            this.adjustPanArea(pswp.currSlide, e.destZoomLevel);\r\n        });\r\n\r\n        // Stop default action of tap when tapping on the caption\r\n        pswp.on(\"tapAction\", (e) => {\r\n            if (e.originalEvent.target.closest(\".pswp__dynamic-caption\")) {\r\n                e.preventDefault();\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Adjusts the pan area size of a slide based on the zoom level.\r\n     *\r\n     * @param {Object} slide - The slide object containing the dynamic caption and pan area sizes.\r\n     * @param {number} zoomLevel - The current zoom level.\r\n     */\r\n    adjustPanArea(slide, zoomLevel) {\r\n        if (slide.dynamicCaption && slide.dynamicCaption.adjustedPanAreaSize) {\r\n            if (zoomLevel > slide.zoomLevels.initial) {\r\n                slide.panAreaSize.x = slide.dynamicCaption.originalPanAreaSize.x;\r\n                slide.panAreaSize.y = slide.dynamicCaption.originalPanAreaSize.y;\r\n            } else {\r\n                // Restore panAreaSize after we zoom back to initial position\r\n                slide.panAreaSize.x = slide.dynamicCaption.adjustedPanAreaSize.x;\r\n                slide.panAreaSize.y = slide.dynamicCaption.adjustedPanAreaSize.y;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Determines if the current layout should be considered mobile based on the provided breakpoint.\r\n     *\r\n     * @return {boolean} Returns true if the current layout should be considered mobile, false otherwise.\r\n     */\r\n    useMobileLayout() {\r\n        const { mobileLayoutBreakpoint } = this.options;\r\n\r\n        if (typeof mobileLayoutBreakpoint === \"function\") {\r\n            return mobileLayoutBreakpoint.call(this);\r\n        } else if (typeof mobileLayoutBreakpoint === \"number\") {\r\n            if (window.innerWidth < mobileLayoutBreakpoint) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Hides the caption for a given slide.\r\n     *\r\n     * @param {Object} slide - The slide object containing the caption.\r\n     */\r\n    hideCaption(slide) {\r\n        if (slide.dynamicCaption && !slide.dynamicCaption.hidden) {\r\n            const captionElement = slide.dynamicCaption.element;\r\n\r\n            if (!captionElement) {\r\n                return;\r\n            }\r\n\r\n            slide.dynamicCaption.hidden = true;\r\n            captionElement.classList.add(\"pswp__dynamic-caption--faded\");\r\n\r\n            // Disable caption visibility with the delay, so it's not interactable\r\n            if (slide.captionFadeTimeout) {\r\n                clearTimeout(slide.captionFadeTimeout);\r\n            }\r\n            slide.captionFadeTimeout = setTimeout(() => {\r\n                captionElement.style.visibility = \"hidden\";\r\n                delete slide.captionFadeTimeout;\r\n            }, 400);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets the vertical offset of the element using CSS transform property.\r\n     *\r\n     * @param {HTMLElement} el - The element to set the offset for.\r\n     * @param {number} y - The vertical offset in pixels.\r\n     */\r\n    setCaptionYOffset(el, y) {\r\n        el.style.transform = `translateY(${y}px)`;\r\n    }\r\n\r\n    /**\r\n     * Shows the caption for a given slide.\r\n     *\r\n     * @param {Object} slide - The slide object containing the caption.\r\n     */\r\n    showCaption(slide) {\r\n        if (slide.dynamicCaption && slide.dynamicCaption.hidden) {\r\n            const captionElement = slide.dynamicCaption.element;\r\n\r\n            if (!captionElement) {\r\n                return;\r\n            }\r\n\r\n            slide.dynamicCaption.hidden = false;\r\n            captionElement.style.visibility = \"visible\";\r\n\r\n            clearTimeout(slide.captionFadeTimeout);\r\n            slide.captionFadeTimeout = setTimeout(() => {\r\n                captionElement.classList.remove(\"pswp__dynamic-caption--faded\");\r\n                delete slide.captionFadeTimeout;\r\n            }, 50);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets the position of the caption element based on the provided x and y coordinates.\r\n     *\r\n     * @param {Element} captionEl - The caption element to position.\r\n     * @param {number} x - The x-coordinate for the caption element.\r\n     * @param {number} y - The y-coordinate for the caption element.\r\n     */\r\n    setCaptionPosition(captionEl, x, y) {\r\n        const isOnHorizontalEdge = x <= this.options.horizontalEdgeThreshold;\r\n        captionEl.classList[isOnHorizontalEdge ? \"add\" : \"remove\"](\"pswp__dynamic-caption--on-hor-edge\");\r\n\r\n        const styles = `left: ${x}px; top: ${y}px; --left: ${x}px; --top: ${y}px;`;\r\n        captionEl.style.cssText = styles;\r\n    }\r\n\r\n    /**\r\n     * Sets the width of the caption element.\r\n     *\r\n     * @param {Element} captionEl - The caption element to set the width for.\r\n     * @param {number} width - The width value to set. If null or undefined, the width property will be removed.\r\n     */\r\n    setCaptionWidth(captionEl, width) {\r\n        if (!width) {\r\n            captionEl.style.removeProperty(\"width\");\r\n        } else {\r\n            captionEl.style.width = width + \"px\";\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets the type of the caption element and updates its class and dataset accordingly.\r\n     *\r\n     * @param {Element} captionEl - The caption element to update.\r\n     * @param {string} type - The new type of the caption element.\r\n     */\r\n    setCaptionType(captionEl, type) {\r\n        const prevType = captionEl.dataset.pswpCaptionType;\r\n        if (type !== prevType) {\r\n            captionEl.classList.add(\"pswp__dynamic-caption--\" + type);\r\n            captionEl.classList.remove(\"pswp__dynamic-caption--\" + prevType);\r\n            captionEl.dataset.pswpCaptionType = type;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the position of the caption element based on the slide's properties.\r\n     *\r\n     * @param {Object} slide - The slide object containing dynamicCaption information.\r\n     */\r\n    updateCaptionPosition(slide) {\r\n        if (!slide.dynamicCaption || !slide.dynamicCaption.type || !slide.dynamicCaption.element) {\r\n            return;\r\n        }\r\n\r\n        if (slide.dynamicCaption.type === \"mobile\") {\r\n            this.setCaptionType(slide.dynamicCaption.element, slide.dynamicCaption.type);\r\n\r\n            slide.dynamicCaption.element.style.removeProperty(\"left\");\r\n            slide.dynamicCaption.element.style.removeProperty(\"top\");\r\n            this.setCaptionWidth(slide.dynamicCaption.element, false);\r\n            return;\r\n        }\r\n\r\n        const zoomLevel = slide.zoomLevels.initial;\r\n        const imageWidth = Math.ceil(slide.width * zoomLevel);\r\n        const imageHeight = Math.ceil(slide.height * zoomLevel);\r\n\r\n        this.setCaptionType(slide.dynamicCaption.element, slide.dynamicCaption.type);\r\n        if (slide.dynamicCaption.type === \"aside\") {\r\n            this.setCaptionPosition(\r\n                slide.dynamicCaption.element,\r\n                slide.bounds.center.x + imageWidth,\r\n                slide.bounds.center.y\r\n            );\r\n            this.setCaptionWidth(slide.dynamicCaption.element, false);\r\n        } else if (slide.dynamicCaption.type === \"below\") {\r\n            this.setCaptionPosition(\r\n                slide.dynamicCaption.element,\r\n                slide.bounds.center.x,\r\n                slide.bounds.center.y + imageHeight\r\n            );\r\n            this.setCaptionWidth(slide.dynamicCaption.element, imageWidth);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Calculates the slide size based on the provided event.\r\n     *\r\n     * @param {Object} e - The event object containing information about the slide.\r\n     */\r\n    onCalcSlideSize(e) {\r\n        const { slide } = e;\r\n        let captionSize;\r\n        let useMobileVersion;\r\n\r\n        if (!slide.dynamicCaption) {\r\n            slide.dynamicCaption = {\r\n                element: undefined,\r\n                type: false,\r\n                hidden: false,\r\n            };\r\n\r\n            const captionHTML = this.getCaptionHTML(slide);\r\n\r\n            if (!captionHTML) {\r\n                return;\r\n            }\r\n\r\n            slide.dynamicCaption.element = document.createElement(\"div\");\r\n            slide.dynamicCaption.element.className = \"pswp__dynamic-caption pswp__hide-on-close\";\r\n            slide.dynamicCaption.element.innerHTML = captionHTML;\r\n\r\n            this.pswp.dispatch(\"dynamicCaptionUpdateHTML\", {\r\n                captionElement: slide.dynamicCaption.element,\r\n                slide,\r\n            });\r\n\r\n            slide.holderElement.appendChild(slide.dynamicCaption.element);\r\n        }\r\n\r\n        if (!slide.dynamicCaption.element) {\r\n            return;\r\n        }\r\n\r\n        this.storeOriginalPanAreaSize(slide);\r\n\r\n        slide.bounds.update(slide.zoomLevels.initial);\r\n\r\n        if (this.useMobileLayout()) {\r\n            slide.dynamicCaption.type = \"mobile\";\r\n            useMobileVersion = true;\r\n        } else {\r\n            if (this.options.type === \"auto\") {\r\n                if (slide.bounds.center.x > slide.bounds.center.y) {\r\n                    slide.dynamicCaption.type = \"aside\";\r\n                } else {\r\n                    slide.dynamicCaption.type = \"below\";\r\n                }\r\n            } else {\r\n                slide.dynamicCaption.type = this.options.type;\r\n            }\r\n        }\r\n\r\n        const imageWidth = Math.ceil(slide.width * slide.zoomLevels.initial);\r\n        const imageHeight = Math.ceil(slide.height * slide.zoomLevels.initial);\r\n\r\n        this.setCaptionType(slide.dynamicCaption.element, slide.dynamicCaption.type);\r\n\r\n        if (slide.dynamicCaption.type === \"aside\") {\r\n            this.setCaptionWidth(slide.dynamicCaption.element, false);\r\n            captionSize = this.measureCaptionSize(slide.dynamicCaption.element, e.slide);\r\n\r\n            const captionWidth = captionSize.x;\r\n\r\n            const horizontalEnding = imageWidth + slide.bounds.center.x;\r\n            const horizontalLeftover = slide.panAreaSize.x - horizontalEnding;\r\n\r\n            if (horizontalLeftover <= captionWidth) {\r\n                slide.panAreaSize.x -= captionWidth;\r\n                this.recalculateZoomLevelAndBounds(slide);\r\n            } else {\r\n                // do nothing, caption will fit aside without any adjustments\r\n            }\r\n        } else if (slide.dynamicCaption.type === \"below\" || useMobileVersion) {\r\n            this.setCaptionWidth(\r\n                slide.dynamicCaption.element,\r\n                useMobileVersion ? this.pswp.viewportSize.x : imageWidth\r\n            );\r\n\r\n            captionSize = this.measureCaptionSize(slide.dynamicCaption.element, e.slide);\r\n            const captionHeight = captionSize.y;\r\n\r\n            if (this.options.verticallyCenterImage) {\r\n                slide.panAreaSize.y -= captionHeight;\r\n                this.recalculateZoomLevelAndBounds(slide);\r\n            } else {\r\n                // Lift up the image only by caption height\r\n\r\n                // vertical ending of the image\r\n                const verticalEnding = imageHeight + slide.bounds.center.y;\r\n\r\n                // height between bottom of the screen and ending of the image\r\n                // (before any adjustments applied)\r\n                const verticalLeftover = slide.panAreaSize.y - verticalEnding;\r\n                const initialPanAreaHeight = slide.panAreaSize.y;\r\n\r\n                if (verticalLeftover <= captionHeight) {\r\n                    // lift up the image to give more space for caption\r\n                    slide.panAreaSize.y -= Math.min((captionHeight - verticalLeftover) * 2, captionHeight);\r\n\r\n                    // we reduce viewport size, thus we need to update zoom level and pan bounds\r\n                    this.recalculateZoomLevelAndBounds(slide);\r\n\r\n                    const maxPositionX = (slide.panAreaSize.x * this.options.mobileCaptionOverlapRatio) / 2;\r\n\r\n                    // Do not reduce viewport height if too few space available\r\n                    if (useMobileVersion && slide.bounds.center.x > maxPositionX) {\r\n                        // Restore the default position\r\n                        slide.panAreaSize.y = initialPanAreaHeight;\r\n                        this.recalculateZoomLevelAndBounds(slide);\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            // mobile\r\n        }\r\n\r\n        this.storeAdjustedPanAreaSize(slide);\r\n        this.updateCaptionPosition(slide);\r\n    }\r\n\r\n    /**\r\n     * Measures the size of the caption element.\r\n     *\r\n     * @param {HTMLElement} captionEl - The caption element to measure.\r\n     * @param {Object} slide - The slide object containing information about the caption.\r\n     * @return {Object} The size of the caption element.\r\n     */\r\n    measureCaptionSize(captionEl, slide) {\r\n        const rect = captionEl.getBoundingClientRect();\r\n        const event = this.pswp.dispatch(\"dynamicCaptionMeasureSize\", {\r\n            captionEl,\r\n            slide,\r\n            captionSize: {\r\n                x: rect.width,\r\n                y: rect.height,\r\n            },\r\n        });\r\n        return event.captionSize;\r\n    }\r\n\r\n    /**\r\n     * Recalculates the zoom level and bounds for a given slide.\r\n     *\r\n     * @param {Object} slide - The slide object to recalculate for.\r\n     */\r\n    recalculateZoomLevelAndBounds(slide) {\r\n        slide.zoomLevels.update(slide.width, slide.height, slide.panAreaSize);\r\n        slide.bounds.update(slide.zoomLevels.initial);\r\n    }\r\n\r\n    /**\r\n     * Stores the adjusted pan area size of a slide in the dynamicCaption object.\r\n     *\r\n     * @param {Object} slide - The slide object to store the adjusted pan area size for.\r\n     */\r\n    storeAdjustedPanAreaSize(slide) {\r\n        if (slide.dynamicCaption) {\r\n            if (!slide.dynamicCaption.adjustedPanAreaSize) {\r\n                slide.dynamicCaption.adjustedPanAreaSize = {};\r\n            }\r\n            slide.dynamicCaption.adjustedPanAreaSize.x = slide.panAreaSize.x;\r\n            slide.dynamicCaption.adjustedPanAreaSize.y = slide.panAreaSize.y;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Stores the original pan area size of a slide in the dynamicCaption object.\r\n     *\r\n     * @param {Object} slide - The slide object to store the original pan area size for.\r\n     */\r\n    storeOriginalPanAreaSize(slide) {\r\n        if (slide.dynamicCaption) {\r\n            if (!slide.dynamicCaption.originalPanAreaSize) {\r\n                slide.dynamicCaption.originalPanAreaSize = {};\r\n            }\r\n            slide.dynamicCaption.originalPanAreaSize.x = slide.panAreaSize.x;\r\n            slide.dynamicCaption.originalPanAreaSize.y = slide.panAreaSize.y;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieves the HTML content of the caption for a given slide.\r\n     *\r\n     * @param {Object} slide - The slide object containing the caption.\r\n     * @return {string} The HTML content of the caption, or an empty string if no caption is found.\r\n     */\r\n    getCaptionHTML(slide) {\r\n        if (typeof this.options.captionContent === \"function\") {\r\n            return this.options.captionContent.call(this, slide);\r\n        }\r\n\r\n        const currSlideElement = slide.data.element;\r\n        let captionHTML = \"\";\r\n        if (currSlideElement) {\r\n            const hiddenCaption = this.options.selectNextSibling\r\n                ? currSlideElement.nextSibling\r\n                : currSlideElement.querySelector(this.options.captionContent);\r\n            if (hiddenCaption) {\r\n                // get caption from element with class pswp-caption-content\r\n                captionHTML = hiddenCaption.innerHTML;\r\n            } else {\r\n                const img = currSlideElement.querySelector(\"img\");\r\n                if (img) {\r\n                    // get caption from alt attribute\r\n                    captionHTML = img.getAttribute(\"alt\");\r\n                }\r\n            }\r\n        }\r\n        return captionHTML;\r\n    }\r\n}\r\n\r\nexport default PhotoSwipeDynamicCaption;\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"champs-athlete\" }\nconst _hoisted_2 = { class: \"champs-main champs-container champs-container--narrow\" }\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = {\n  class: \"champs-gallery\",\n  id: \"champs-gallery\"\n}\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = [\"src\", \"alt\"]\nconst _hoisted_7 = [\"innerHTML\"]\nconst _hoisted_8 = {\n  key: 0,\n  class: \"champs-gallery-show-all paragraph-text\"\n}\n\nimport { useRouter } from \"vue-router\";\r\nimport { computed, onMounted, ref } from \"vue\";\r\nimport PhotoSwipeLightbox from \"photoswipe/lightbox\";\r\nimport PhotoSwipeDynamicCaption from \"../../../app/shared/design-system/photogallery-lightbox/photoswipe-dynamic-caption-plugin\";\r\nimport DsSegmentedPicker from \"@sazka/design-system/src/segmented-picker/ds-segmented-picker.vue\";\r\nimport PickerItem from \"@sazka/design-system/src/segmented-picker-item/ds-segmented-picker-item.vue\";\r\nimport ChampsVideo from \"../components/champs-video.vue\";\r\nimport ChampsSocials from \"../components/champs-socials.vue\";\r\nimport { useCurrentAthlete } from \"../composables/use-champs-content\";\r\nimport { CHAMPS_ROUTES } from \"../champs-router\";\r\nimport \"photoswipe/style.css\";\r\n\r\nconst HIDE_AMOUNT = 4;\r\nconst CONTAINER_WIDTH = 600;\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'champs-athlete',\n  setup(__props) {\n\r\nconst currentAthlete = useCurrentAthlete();\r\nconst router = useRouter();\r\n\r\nconst goBack = () => router.push({ name: CHAMPS_ROUTES.home.name });\r\n\r\nconst allImages = computed(() => currentAthlete.value.tabs.find((item) => item.gallery.length > 0).gallery.length);\r\n\r\nconst lightbox = new PhotoSwipeLightbox({\r\n    gallery: \"#champs-gallery\",\r\n    children: \"a\",\r\n    zoom: false,\r\n    showHideAnimationType: \"fade\",\r\n    tapAction: () => {\r\n        return;\r\n    },\r\n    bgOpacity: 1,\r\n    loop: false,\r\n    preload: [1, 4],\r\n    pswpModule: () => import(\"photoswipe\"),\r\n});\r\n\r\nconst handleShowAllPhotos = () => {\r\n    lightbox.loadAndOpen(0, {\r\n        gallery: document.getElementById(\"champs-gallery\"),\r\n    });\r\n};\r\n\r\nconst onImgLoaded = (e: Event) => {\r\n    const target = e.target as HTMLImageElement;\r\n    if (!target) return;\r\n\r\n    // We need to wait for images to be complete, or lightbox will set wrong inline styles for images\r\n    if (target.complete && target.naturalWidth > 0 && target.naturalHeight > 0) {\r\n        target.parentElement.setAttribute(\"data-pswp-width\", target.naturalWidth.toString());\r\n        target.parentElement.setAttribute(\"data-pswp-height\", target.naturalHeight.toString());\r\n    }\r\n};\r\n\r\nconst picker = ref<InstanceType<typeof DsSegmentedPicker>>();\r\nconst setAlignment = () => {\r\n    if (!picker.value.navEl) return;\r\n\r\n    if (picker.value.navEl.scrollWidth > CONTAINER_WIDTH) {\r\n        picker.value.navEl.classList.add(\"ds-segmented-picker__nav--left\");\r\n    }\r\n};\r\n\r\nonMounted(() => {\r\n    new PhotoSwipeDynamicCaption(lightbox, {\r\n        selectNextSibling: true,\r\n        type: \"aside\",\r\n        mobileLayoutBreakpoint: 1200,\r\n    });\r\n\r\n    lightbox.init();\r\n\r\n    setAlignment();\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"main\", _hoisted_1, [\n    _createVNode(ChampsVideo),\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createVNode(DsSegmentedPicker, {\n        \"use-for\": \"\",\n        align: \"center\",\n        ref_key: \"picker\",\n        ref: picker\n      }, {\n        default: _withCtx(() => [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(currentAthlete).tabs, (athlete) => {\n            return (_openBlock(), _createBlock(PickerItem, {\n              title: athlete.title,\n              name: athlete.title,\n              key: athlete.title,\n              ref_for: true,\n              ref_key: \"picker\",\n              ref: picker\n            }, {\n              default: _withCtx(() => [\n                (athlete.text)\n                  ? (_openBlock(), _createElementBlock(\"div\", {\n                      key: 0,\n                      innerHTML: athlete.text\n                    }, null, 8, _hoisted_3))\n                  : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                      _createElementVNode(\"div\", _hoisted_4, [\n                        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(athlete.gallery, (galleryItem, index) => {\n                          return (_openBlock(), _createElementBlock(\"figure\", {\n                            key: galleryItem.name,\n                            class: _normalizeClass([\"champs-gallery__figure\", {\r\n                                    'champs-gallery__figure--hidden': index >= HIDE_AMOUNT,\r\n                                }])\n                          }, [\n                            _createElementVNode(\"a\", {\n                              class: \"champs-gallery__link\",\n                              href: galleryItem.image,\n                              target: \"_blank\"\n                            }, [\n                              _createElementVNode(\"img\", {\n                                class: \"champs-gallery__img\",\n                                src: galleryItem.image,\n                                alt: galleryItem.name,\n                                onLoad: _cache[0] || (_cache[0] = ($event: any) => (onImgLoaded($event)))\n                              }, null, 40, _hoisted_6)\n                            ], 8, _hoisted_5),\n                            _createElementVNode(\"figcaption\", {\n                              class: \"champs-gallery__figcaption champs-gallery__figcaption--hidden\",\n                              innerHTML: galleryItem.description\n                            }, null, 8, _hoisted_7)\n                          ], 2))\n                        }), 128))\n                      ]),\n                      (allImages.value > HIDE_AMOUNT)\n                        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_8, [\n                            _createElementVNode(\"button\", {\n                              class: \"champs-gallery-show-all__link\",\n                              onClick: handleShowAllPhotos\n                            }, [\n                              _cache[1] || (_cache[1] = _createElementVNode(\"span\", { class: \"champs-gallery-show-all__inner\" }, \"Celá galerie\", -1)),\n                              _createTextVNode(\" (\" + _toDisplayString(allImages.value) + \" fotek) \", 1)\n                            ])\n                          ]))\n                        : _createCommentVNode(\"\", true)\n                    ], 64))\n              ]),\n              _: 2\n            }, 1032, [\"title\", \"name\"]))\n          }), 128))\n        ]),\n        _: 1\n      }, 512),\n      _createVNode(ChampsSocials, { onHandleBack: goBack })\n    ])\n  ]))\n}\n}\n\n})","<template>\r\n    <main class=\"champs-athlete\">\r\n        <ChampsVideo />\r\n\r\n        <div class=\"champs-main champs-container champs-container--narrow\">\r\n            <DsSegmentedPicker use-for align=\"center\" ref=\"picker\">\r\n                <PickerItem\r\n                    v-for=\"athlete in currentAthlete.tabs\"\r\n                    :title=\"athlete.title\"\r\n                    :name=\"athlete.title\"\r\n                    :key=\"athlete.title\"\r\n                    ref=\"picker\"\r\n                >\r\n                    <template v-if=\"athlete.text\">\r\n                        <div v-html=\"athlete.text\"></div>\r\n                    </template>\r\n                    <template v-else>\r\n                        <div class=\"champs-gallery\" id=\"champs-gallery\">\r\n                            <figure\r\n                                v-for=\"(galleryItem, index) in athlete.gallery\"\r\n                                :key=\"galleryItem.name\"\r\n                                class=\"champs-gallery__figure\"\r\n                                :class=\"{\r\n                                    'champs-gallery__figure--hidden': index >= HIDE_AMOUNT,\r\n                                }\"\r\n                            >\r\n                                <a class=\"champs-gallery__link\" :href=\"galleryItem.image\" target=\"_blank\">\r\n                                    <img\r\n                                        class=\"champs-gallery__img\"\r\n                                        :src=\"galleryItem.image\"\r\n                                        :alt=\"galleryItem.name\"\r\n                                        @load=\"onImgLoaded($event)\"\r\n                                    />\r\n                                </a>\r\n                                <figcaption\r\n                                    class=\"champs-gallery__figcaption champs-gallery__figcaption--hidden\"\r\n                                    v-html=\"galleryItem.description\"\r\n                                ></figcaption>\r\n                            </figure>\r\n                        </div>\r\n                        <p class=\"champs-gallery-show-all paragraph-text\" v-if=\"allImages > HIDE_AMOUNT\">\r\n                            <button class=\"champs-gallery-show-all__link\" @click=\"handleShowAllPhotos\">\r\n                                <span class=\"champs-gallery-show-all__inner\">Celá galerie</span> ({{ allImages }}\r\n                                fotek)\r\n                            </button>\r\n                        </p>\r\n                    </template>\r\n                </PickerItem>\r\n            </DsSegmentedPicker>\r\n\r\n            <ChampsSocials @handle-back=\"goBack\" />\r\n        </div>\r\n    </main>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useRouter } from \"vue-router\";\r\nimport { computed, onMounted, ref } from \"vue\";\r\nimport PhotoSwipeLightbox from \"photoswipe/lightbox\";\r\nimport PhotoSwipeDynamicCaption from \"../../../app/shared/design-system/photogallery-lightbox/photoswipe-dynamic-caption-plugin\";\r\nimport DsSegmentedPicker from \"@sazka/design-system/src/segmented-picker/ds-segmented-picker.vue\";\r\nimport PickerItem from \"@sazka/design-system/src/segmented-picker-item/ds-segmented-picker-item.vue\";\r\nimport ChampsVideo from \"../components/champs-video.vue\";\r\nimport ChampsSocials from \"../components/champs-socials.vue\";\r\nimport { useCurrentAthlete } from \"../composables/use-champs-content\";\r\nimport { CHAMPS_ROUTES } from \"../champs-router\";\r\nimport \"photoswipe/style.css\";\r\n\r\nconst currentAthlete = useCurrentAthlete();\r\nconst router = useRouter();\r\n\r\nconst goBack = () => router.push({ name: CHAMPS_ROUTES.home.name });\r\n\r\nconst HIDE_AMOUNT = 4;\r\nconst allImages = computed(() => currentAthlete.value.tabs.find((item) => item.gallery.length > 0).gallery.length);\r\n\r\nconst lightbox = new PhotoSwipeLightbox({\r\n    gallery: \"#champs-gallery\",\r\n    children: \"a\",\r\n    zoom: false,\r\n    showHideAnimationType: \"fade\",\r\n    tapAction: () => {\r\n        return;\r\n    },\r\n    bgOpacity: 1,\r\n    loop: false,\r\n    preload: [1, 4],\r\n    pswpModule: () => import(\"photoswipe\"),\r\n});\r\n\r\nconst handleShowAllPhotos = () => {\r\n    lightbox.loadAndOpen(0, {\r\n        gallery: document.getElementById(\"champs-gallery\"),\r\n    });\r\n};\r\n\r\nconst onImgLoaded = (e: Event) => {\r\n    const target = e.target as HTMLImageElement;\r\n    if (!target) return;\r\n\r\n    // We need to wait for images to be complete, or lightbox will set wrong inline styles for images\r\n    if (target.complete && target.naturalWidth > 0 && target.naturalHeight > 0) {\r\n        target.parentElement.setAttribute(\"data-pswp-width\", target.naturalWidth.toString());\r\n        target.parentElement.setAttribute(\"data-pswp-height\", target.naturalHeight.toString());\r\n    }\r\n};\r\n\r\nconst picker = ref<InstanceType<typeof DsSegmentedPicker>>();\r\nconst CONTAINER_WIDTH = 600;\r\nconst setAlignment = () => {\r\n    if (!picker.value.navEl) return;\r\n\r\n    if (picker.value.navEl.scrollWidth > CONTAINER_WIDTH) {\r\n        picker.value.navEl.classList.add(\"ds-segmented-picker__nav--left\");\r\n    }\r\n};\r\n\r\nonMounted(() => {\r\n    new PhotoSwipeDynamicCaption(lightbox, {\r\n        selectNextSibling: true,\r\n        type: \"aside\",\r\n        mobileLayoutBreakpoint: 1200,\r\n    });\r\n\r\n    lightbox.init();\r\n\r\n    setAlignment();\r\n});\r\n</script>\r\n","import script from \"./champs-athlete.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./champs-athlete.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { createRouter, createWebHistory } from \"vue-router\";\r\nimport ChampsHomepage from \"./page/champs-homepage.vue\";\r\nimport ChampsAthlete from \"./page/champs-athlete.vue\";\r\n\r\nconst rootPath = \"/sazka-champs\";\r\n\r\nexport const CHAMPS_ROUTES = {\r\n    home: { name: \"home\", path: `${rootPath}`, component: ChampsHomepage },\r\n    detail: { name: \"detail\", path: `${rootPath}/:name`, component: ChampsAthlete },\r\n};\r\n\r\nconst router = createRouter({\r\n    history: createWebHistory(),\r\n    routes: Object.values(CHAMPS_ROUTES),\r\n    scrollBehavior() {\r\n        return { top: 0 };\r\n    },\r\n});\r\n\r\nexport default router;\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"champs-header\" }\nconst _hoisted_2 = { class: \"champs-container\" }\n\nimport { CHAMPS_ROUTES } from \"../champs-router\";\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'champs-header',\n  setup(__props) {\n\r\n\nreturn (_ctx: any,_cache: any) => {\n  const _component_RouterLink = _resolveComponent(\"RouterLink\")!\n\n  return (_openBlock(), _createElementBlock(\"header\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"h1\", null, [\n        _createVNode(_component_RouterLink, {\n          to: _unref(CHAMPS_ROUTES).home.path\n        }, {\n          default: _withCtx(() => _cache[0] || (_cache[0] = [\n            _createElementVNode(\"img\", {\n              class: \"champs-header__img\",\n              src: \"/frontend/web/img/sazka-champs/sazka-champs-logo.svg\",\n              alt: \"Champs Logo\",\n              width: \"720\",\n              height: \"50\"\n            }, null, -1)\n          ])),\n          _: 1\n        }, 8, [\"to\"])\n      ])\n    ])\n  ]))\n}\n}\n\n})","import script from \"./champs-header.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./champs-header.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\r\n    <footer class=\"champs-footer\">\r\n        <div class=\"champs-container\">\r\n            <div class=\"champs-footer__inner\">\r\n                <a\r\n                    href=\"https://www.sazka.cz/\"\r\n                    class=\"champs-footer__link champs-footer__link--logo champs-footer__link--hide-mobile\"\r\n                    >SAZKA.CZ</a\r\n                >\r\n\r\n                <p class=\"champs-footer__text\">\r\n                    <span>&copy; SAZKA A.S.</span>\r\n                    <span>EVROPSKÁ 866/69, VOKOVICE, 160 00 PRAHA 6</span>\r\n                </p>\r\n\r\n                <div class=\"champs-footer__text champs-footer__text--space\">\r\n                    <a href=\"tel:+420266121212\" class=\"champs-footer__tel\">+420&nbsp;266&nbsp;12&nbsp;12&nbsp;12</a>\r\n                    <a href=\"mailto:champs@sazka.cz\" class=\"champs-footer__mail\">CHAMPS@SAZKA.CZ</a>\r\n                </div>\r\n\r\n                <p class=\"champs-footer__text champs-footer__text--last\">\r\n                    <a href=\"https://www.sazka.cz/zpracovani-osobnich-udaju\" class=\"champs-footer__gdpr\">\r\n                        OCHRANA OSOBNÍCH ÚDAJŮ\r\n                    </a>\r\n                </p>\r\n            </div>\r\n\r\n            <p\r\n                class=\"champs-footer__text champs-footer__text--center champs-footer__text--last champs-footer__text--logo\"\r\n            >\r\n                <a href=\"https://www.sazka.cz/\" class=\"champs-footer__link\">SAZKA.CZ</a>\r\n            </p>\r\n        </div>\r\n    </footer>\r\n</template>\r\n","import { render } from \"./champs-footer.vue?vue&type=template&id=22e111da\"\nconst script = {}\n\nimport exportComponent from \"../../../../../../node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.13_vue@3.5.13_typescript@5.7.3__webpack@5.95.0_@swc+c_34j4td3qllqrpsyknfjyyfkdq4/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport { getCurrentInstance } from \"vue\";\r\nimport router from \"./champs-router\";\r\nimport ChampsHeader from \"./components/champs-header.vue\";\r\nimport ChampsFooter from \"./components/champs-footer.vue\";\r\nimport { ChampsAnalytics } from \"./analytics/analytics-champs\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: '_champs',\n  setup(__props) {\n\r\nconst app = getCurrentInstance();\r\n\r\napp.appContext.app.use(router);\r\n\r\nChampsAnalytics.pushChampsPage();\r\n\nreturn (_ctx: any,_cache: any) => {\n  const _component_router_view = _resolveComponent(\"router-view\")!\n\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode(ChampsHeader),\n    _createVNode(_component_router_view),\n    _createVNode(ChampsFooter),\n    _cache[0] || (_cache[0] = _createElementVNode(\"div\", { class: \"champs__background\" }, null, -1))\n  ], 64))\n}\n}\n\n})","<template>\r\n    <ChampsHeader />\r\n    <router-view />\r\n    <ChampsFooter />\r\n    <div class=\"champs__background\"></div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { getCurrentInstance } from \"vue\";\r\nimport router from \"./champs-router\";\r\nimport ChampsHeader from \"./components/champs-header.vue\";\r\nimport ChampsFooter from \"./components/champs-footer.vue\";\r\nimport { ChampsAnalytics } from \"./analytics/analytics-champs\";\r\n\r\nconst app = getCurrentInstance();\r\n\r\napp.appContext.app.use(router);\r\n\r\nChampsAnalytics.pushChampsPage();\r\n</script>\r\n","import script from \"./_champs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./_champs.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, renderSlot as _renderSlot, vShow as _vShow, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"ds-segmented-picker__widget\"\n}\n\nimport { inject } from \"vue\";\r\nimport { dsSegmentedInjectedKey } from \"../segmented-picker/ds-segmented-injected-key\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'ds-segmented-picker-item',\n  props: {\n    title: {},\n    name: {}\n  },\n  setup(__props: any) {\n\r\n\r\n\r\nconst selectedTabName = inject(dsSegmentedInjectedKey);\r\n\nreturn (_ctx: any,_cache: any) => {\n  return (_ctx.$slots.default)\n    ? _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n        _renderSlot(_ctx.$slots, \"default\")\n      ], 512)), [\n        [_vShow, _ctx.name === _unref(selectedTabName)]\n      ])\n    : _createCommentVNode(\"\", true)\n}\n}\n\n})","<template>\r\n    <div class=\"ds-segmented-picker__widget\" v-if=\"$slots.default\" v-show=\"name === selectedTabName\">\r\n        <slot></slot>\r\n    </div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { inject } from \"vue\";\r\nimport { dsSegmentedInjectedKey } from \"../segmented-picker/ds-segmented-injected-key\";\r\n\r\ndefineProps<{\r\n    /** Title of the tab */\r\n    title: string;\r\n    /** CodeName for unique identification */\r\n    name: string;\r\n}>();\r\n\r\nconst selectedTabName = inject(dsSegmentedInjectedKey);\r\n</script>\r\n","import script from \"./ds-segmented-picker-item.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./ds-segmented-picker-item.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { useModel as _useModel, mergeModels as _mergeModels, defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = [\"onClick\", \"data-test\"]\nconst _hoisted_2 = [\"data-title\"]\nconst _hoisted_3 = {\n  class: \"ds-segmented-picker__text-inner\",\n  \"aria-hidden\": \"true\",\n  \"data-test\": \"segmented-picker-text\"\n}\n\nimport { useSlots, ref, provide, watch, useTemplateRef, onMounted, onBeforeUnmount, computed } from \"vue\";\r\nimport type { Theme } from \"../types/theme\";\r\nimport { dsSegmentedInjectedKey } from \"./ds-segmented-injected-key\";\r\nimport { CustomEaseDurations, CustomEaseNames, useGsap } from \"@sazka/utils/gsap-register\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'ds-segmented-picker',\n  props: /*@__PURE__*/_mergeModels({\n    theme: {},\n    isFullWidth: { type: Boolean, default: false },\n    align: { default: \"left\" },\n    useFor: { type: Boolean, default: false },\n    size: { default: \"sm\" },\n    dataTestValue: {}\n  }, {\n    \"modelValue\": { required: false },\n    \"modelModifiers\": {},\n  }),\n  emits: /*@__PURE__*/_mergeModels([\"toggleClick\"], [\"update:modelValue\"]),\n  setup(__props: any, { expose: __expose, emit: __emit }) {\n\r\nconst navEl = useTemplateRef(\"navEl\");\r\nconst pickerSlider = useTemplateRef(\"pickerSlider\");\r\nconst segmentButtons = ref<HTMLElement[]>([]);\r\n\r\n__expose({\r\n    navEl,\r\n});\r\n\r\nconst props = __props;\r\n\r\nconst modelValue = _useModel<string>(__props, \"modelValue\");\r\n\r\nconst emit = __emit;\r\n\r\nconst slots = useSlots();\r\n\r\nconst tabTitles = computed<string[]>(() => {\r\n    // https://stackoverflow.com/questions/70727383/using-v-for-inside-component-that-uses-slot\r\n    return props.useFor\r\n        ? (slots.default()[0].children as any).map((tab) => tab.props.title)\r\n        : slots.default().map((tab) => tab.props.title);\r\n});\r\n\r\nconst tabNames = computed<string[]>(() => {\r\n    // https://stackoverflow.com/questions/70727383/using-v-for-inside-component-that-uses-slot\r\n    return props.useFor\r\n        ? (slots.default()[0].children as any).map((tab) => tab.props.name)\r\n        : slots.default().map((tab) => tab.props.name);\r\n});\r\n\r\nconst activeIndex = ref(0);\r\nconst selectedTabKey = computed(() => tabNames.value[activeIndex.value]);\r\n\r\nprovide(dsSegmentedInjectedKey, selectedTabKey);\r\n\r\nlet buttonWidthsCache: number[] = [];\r\nconst calculateWidths = (entries: ResizeObserverEntry[]) => {\r\n    buttonWidthsCache = entries.map((entry) => entry.borderBoxSize[0].inlineSize);\r\n};\r\n\r\nconst toggleClick = (index: number) => {\r\n    activeIndex.value = index;\r\n    emit(\"toggleClick\");\r\n};\r\n\r\nconst { gsap } = useGsap();\r\nlet sliderTweenAnimation: gsap.core.Tween = null;\r\nconst moveSegment = async (index: number, withoutAnimation = false) => {\r\n    const currentButton = segmentButtons.value[index];\r\n    if (!currentButton) {\r\n        return;\r\n    }\r\n\r\n    const currentWidth = buttonWidthsCache[index];\r\n    pickerSlider.value.style.width = `${currentWidth}px`;\r\n\r\n    // Calculate total width using pre-calculated widths\r\n    const totalWidth = buttonWidthsCache.slice(0, index).reduce((acc, width) => acc + width, 0);\r\n\r\n    let duration = CustomEaseDurations.MOTION_DURATION_250;\r\n    if (withoutAnimation) {\r\n        duration = 0;\r\n    }\r\n    if (sliderTweenAnimation) {\r\n        sliderTweenAnimation.kill();\r\n    }\r\n\r\n    sliderTweenAnimation = gsap.to(pickerSlider.value, {\r\n        translateX: totalWidth,\r\n        duration: duration,\r\n        ease: CustomEaseNames.MOTION_EASE_OUT,\r\n        onComplete: () => {\r\n            sliderTweenAnimation = null;\r\n        },\r\n    });\r\n};\r\n\r\nif (modelValue?.value) {\r\n    watch(\r\n        modelValue,\r\n        (newModelValue) => {\r\n            if (newModelValue) {\r\n                const currentIndex = tabNames.value.indexOf(newModelValue);\r\n                if (currentIndex !== -1) {\r\n                    activeIndex.value = currentIndex;\r\n                    return;\r\n                }\r\n            } else {\r\n                // Reset to the first available tab if modelValue is invalid\r\n                activeIndex.value = 0;\r\n            }\r\n        },\r\n        { immediate: true }\r\n    );\r\n}\r\n\r\nconst normalizeText = (text: string): string => {\r\n    return text\r\n        .toLowerCase()\r\n        .normalize(\"NFKD\")\r\n        .replace(/[\\u0300-\\u036f]/g, \"\")\r\n        .replace(/\\s+/g, \"-\")\r\n        .replace(/[^a-z0-9-]/g, \"\");\r\n};\r\n\r\nlet resizeObserver: ResizeObserver = null;\r\nonMounted(async () => {\r\n    // Resize observer will setup initial values\r\n    resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\r\n        calculateWidths(entries);\r\n        moveSegment(activeIndex.value, true);\r\n    });\r\n\r\n    segmentButtons.value.forEach((segmentButton) => resizeObserver.observe(segmentButton));\r\n\r\n    watch(activeIndex, (newActiveIndex) => {\r\n        moveSegment(newActiveIndex);\r\n        modelValue.value = tabNames.value[newActiveIndex];\r\n    });\r\n});\r\n\r\nonBeforeUnmount(() => {\r\n    if (resizeObserver) resizeObserver.disconnect();\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"ds-segmented-picker\", [`ds-segmented-picker--align-${_ctx.align}`, `ds-segmented-picker--${_ctx.size}`]])\n  }, [\n    _createElementVNode(\"nav\", {\n      class: _normalizeClass([\"ds-segmented-picker__nav\", { 'is-dark': _ctx.theme === 'dark', 'is-full': _ctx.isFullWidth }]),\n      ref_key: \"navEl\",\n      ref: navEl\n    }, [\n      _createElementVNode(\"div\", {\n        class: \"ds-segmented-picker__slider\",\n        ref_key: \"pickerSlider\",\n        ref: pickerSlider\n      }, null, 512),\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(tabTitles.value, (title, index) => {\n        return (_openBlock(), _createElementBlock(\"button\", {\n          class: _normalizeClass([\"ds-segmented-picker__toggle\", {\r\n                    'is-active': index === activeIndex.value,\r\n                    'is-dark': _ctx.theme === 'dark',\r\n                }]),\n          key: title,\n          onClick: ($event: any) => (toggleClick(index)),\n          ref_for: true,\n          ref_key: \"segmentButtons\",\n          ref: segmentButtons,\n          \"data-test\": _ctx.dataTestValue ? `${_ctx.dataTestValue}-${normalizeText(title)}` : null\n        }, [\n          _createElementVNode(\"span\", {\n            class: \"ds-segmented-picker__text\",\n            \"data-title\": title\n          }, [\n            _createElementVNode(\"span\", _hoisted_3, _toDisplayString(title), 1)\n          ], 8, _hoisted_2)\n        ], 10, _hoisted_1))\n      }), 128))\n    ], 2),\n    _renderSlot(_ctx.$slots, \"default\")\n  ], 2))\n}\n}\n\n})","<template>\r\n    <div class=\"ds-segmented-picker\" :class=\"[`ds-segmented-picker--align-${align}`, `ds-segmented-picker--${size}`]\">\r\n        <nav\r\n            class=\"ds-segmented-picker__nav\"\r\n            :class=\"{ 'is-dark': theme === 'dark', 'is-full': isFullWidth }\"\r\n            ref=\"navEl\"\r\n        >\r\n            <div class=\"ds-segmented-picker__slider\" ref=\"pickerSlider\"></div>\r\n            <button\r\n                class=\"ds-segmented-picker__toggle\"\r\n                :class=\"{\r\n                    'is-active': index === activeIndex,\r\n                    'is-dark': theme === 'dark',\r\n                }\"\r\n                v-for=\"(title, index) in tabTitles\"\r\n                :key=\"title\"\r\n                @click=\"toggleClick(index)\"\r\n                ref=\"segmentButtons\"\r\n                :data-test=\"dataTestValue ? `${dataTestValue}-${normalizeText(title)}` : null\"\r\n            >\r\n                <span class=\"ds-segmented-picker__text\" :data-title=\"title\">\r\n                    <span\r\n                        class=\"ds-segmented-picker__text-inner\"\r\n                        aria-hidden=\"true\"\r\n                        data-test=\"segmented-picker-text\"\r\n                        >{{ title }}</span\r\n                    >\r\n                </span>\r\n            </button>\r\n        </nav>\r\n        <slot></slot>\r\n    </div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { useSlots, ref, provide, watch, useTemplateRef, onMounted, onBeforeUnmount, computed } from \"vue\";\r\nimport type { Theme } from \"../types/theme\";\r\nimport { dsSegmentedInjectedKey } from \"./ds-segmented-injected-key\";\r\nimport { CustomEaseDurations, CustomEaseNames, useGsap } from \"@sazka/utils/gsap-register\";\r\n\r\nconst navEl = useTemplateRef(\"navEl\");\r\nconst pickerSlider = useTemplateRef(\"pickerSlider\");\r\nconst segmentButtons = ref<HTMLElement[]>([]);\r\n\r\ndefineExpose({\r\n    navEl,\r\n});\r\n\r\nconst props = withDefaults(\r\n    defineProps<{\r\n        /**\r\n         * Set theme\r\n         */\r\n        theme?: Theme;\r\n        /**\r\n         * Set full width of picker\r\n         */\r\n        isFullWidth?: boolean;\r\n        /**\r\n         * Set alignment of picker\r\n         */\r\n        align?: \"left\" | \"center\" | \"right\";\r\n        /**\r\n         * Enable to use v-for inside slots\r\n         */\r\n        useFor?: boolean;\r\n        /**\r\n         * Size of picker\r\n         */\r\n        size?: \"sm\" | \"lg\";\r\n        /**\r\n         * Enables data-test attribute for SIT testing\r\n         */\r\n        dataTestValue?: string;\r\n    }>(),\r\n    {\r\n        isFullWidth: false,\r\n        align: \"left\",\r\n        useFor: false,\r\n        size: \"sm\",\r\n        enabledDataTest: false,\r\n    }\r\n);\r\n\r\nconst modelValue = defineModel<string>({ required: false });\r\n\r\nconst emit = defineEmits([\"toggleClick\"]);\r\n\r\nconst slots = useSlots();\r\n\r\nconst tabTitles = computed<string[]>(() => {\r\n    // https://stackoverflow.com/questions/70727383/using-v-for-inside-component-that-uses-slot\r\n    return props.useFor\r\n        ? (slots.default()[0].children as any).map((tab) => tab.props.title)\r\n        : slots.default().map((tab) => tab.props.title);\r\n});\r\n\r\nconst tabNames = computed<string[]>(() => {\r\n    // https://stackoverflow.com/questions/70727383/using-v-for-inside-component-that-uses-slot\r\n    return props.useFor\r\n        ? (slots.default()[0].children as any).map((tab) => tab.props.name)\r\n        : slots.default().map((tab) => tab.props.name);\r\n});\r\n\r\nconst activeIndex = ref(0);\r\nconst selectedTabKey = computed(() => tabNames.value[activeIndex.value]);\r\n\r\nprovide(dsSegmentedInjectedKey, selectedTabKey);\r\n\r\nlet buttonWidthsCache: number[] = [];\r\nconst calculateWidths = (entries: ResizeObserverEntry[]) => {\r\n    buttonWidthsCache = entries.map((entry) => entry.borderBoxSize[0].inlineSize);\r\n};\r\n\r\nconst toggleClick = (index: number) => {\r\n    activeIndex.value = index;\r\n    emit(\"toggleClick\");\r\n};\r\n\r\nconst { gsap } = useGsap();\r\nlet sliderTweenAnimation: gsap.core.Tween = null;\r\nconst moveSegment = async (index: number, withoutAnimation = false) => {\r\n    const currentButton = segmentButtons.value[index];\r\n    if (!currentButton) {\r\n        return;\r\n    }\r\n\r\n    const currentWidth = buttonWidthsCache[index];\r\n    pickerSlider.value.style.width = `${currentWidth}px`;\r\n\r\n    // Calculate total width using pre-calculated widths\r\n    const totalWidth = buttonWidthsCache.slice(0, index).reduce((acc, width) => acc + width, 0);\r\n\r\n    let duration = CustomEaseDurations.MOTION_DURATION_250;\r\n    if (withoutAnimation) {\r\n        duration = 0;\r\n    }\r\n    if (sliderTweenAnimation) {\r\n        sliderTweenAnimation.kill();\r\n    }\r\n\r\n    sliderTweenAnimation = gsap.to(pickerSlider.value, {\r\n        translateX: totalWidth,\r\n        duration: duration,\r\n        ease: CustomEaseNames.MOTION_EASE_OUT,\r\n        onComplete: () => {\r\n            sliderTweenAnimation = null;\r\n        },\r\n    });\r\n};\r\n\r\nif (modelValue?.value) {\r\n    watch(\r\n        modelValue,\r\n        (newModelValue) => {\r\n            if (newModelValue) {\r\n                const currentIndex = tabNames.value.indexOf(newModelValue);\r\n                if (currentIndex !== -1) {\r\n                    activeIndex.value = currentIndex;\r\n                    return;\r\n                }\r\n            } else {\r\n                // Reset to the first available tab if modelValue is invalid\r\n                activeIndex.value = 0;\r\n            }\r\n        },\r\n        { immediate: true }\r\n    );\r\n}\r\n\r\nconst normalizeText = (text: string): string => {\r\n    return text\r\n        .toLowerCase()\r\n        .normalize(\"NFKD\")\r\n        .replace(/[\\u0300-\\u036f]/g, \"\")\r\n        .replace(/\\s+/g, \"-\")\r\n        .replace(/[^a-z0-9-]/g, \"\");\r\n};\r\n\r\nlet resizeObserver: ResizeObserver = null;\r\nonMounted(async () => {\r\n    // Resize observer will setup initial values\r\n    resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\r\n        calculateWidths(entries);\r\n        moveSegment(activeIndex.value, true);\r\n    });\r\n\r\n    segmentButtons.value.forEach((segmentButton) => resizeObserver.observe(segmentButton));\r\n\r\n    watch(activeIndex, (newActiveIndex) => {\r\n        moveSegment(newActiveIndex);\r\n        modelValue.value = tabNames.value[newActiveIndex];\r\n    });\r\n});\r\n\r\nonBeforeUnmount(() => {\r\n    if (resizeObserver) resizeObserver.disconnect();\r\n});\r\n</script>\r\n","import script from \"./ds-segmented-picker.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./ds-segmented-picker.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__"],"names":["dsSegmentedInjectedKey","Symbol","initialized","reactiveBreakpoints","useBreakpoints","breakpoints","length","initialize","reduce","acc","x","reactiveBreakpoint","Object","keys","ResponsiveUtils","filter","map","isInUse","key","minSize","value","ref","breakpoint","brkpnt","find","media","window","matchMedia","matches","onchange","e","exports","sfc","props","target","__vccOpts","val","configuration","champsConfiguration","athletes","champsAthletes","homepage","champsHomepage","useCurrentAthlete","route","useRoute","computed","name","params","Array","isArray","athlete","urlSlug","ChampsAnalytics","pushChampsPage","setTimeout","dataLayer","push","page","type","kind","verticalCode","verticalCodeStrict","gameCode","gameCodeStrict","Analytics","pageReady","pushPlayVideo","event","pushClickDetail","text","action","click","eventProperty1","_hoisted_1","class","_hoisted_2","_hoisted_3","_defineComponent","__name","setup","__props","currentAthlete","video","champVideo","videoPlaying","playVideo","_champVideo$value","play","videoEnded","load","_ctx","_cache","_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","firstNamePlacement","_toDisplayString","firstName","lastName","_createCommentVNode","controls","ref_key","onEnded","src","onClick","sport","__exports__","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","emits","emit","__emit","handleGoBack","isHomepage","facebook","twitter","instagram","linkedIn","youTube","allSocialsAreEmpty","some","href","alt","width","height","DESKTOP_OFFSET","TABLET_OFFSET","MOBILE_OFFSET","zIndex","isAnimating","imgRef","listRef","innerRef","isTablet","isDesktop","BACKGROUND","document","querySelector","targetOffset","getFirstHalf","midpoint","Math","ceil","substring","toUpperCase","getSecondsHalf","floor","getNameAlignment","calculateScale","elementWidth","maxWidth","targetWidth","min","innerWidth","applyTransformations","element","translateY","scale","setAttribute","style","pointerEvents","updateRowsZIndex","rows","activeIndex","forEach","row","index","calculateScaleAndPosition","imgWidth","clientWidth","imgHeight","clientHeight","topOffset","getBoundingClientRect","top","imgCenterY","calculatedHeight","targetHeight","targetCenterY","classList","add","querySelectorAll","redirect","documentElement","overflowX","router","CHAMPS_ROUTES","detail","remove","removeAttribute","onMounted","toString","image","_Fragment","_renderList","_createBlock","ChampsAthleteListRow","title","innerHTML","_createVNode","ChampsVideo","ChampsAthleteList","ChampsSocials","defaultOptions","captionContent","selectNextSibling","horizontalEdgeThreshold","mobileCaptionOverlapRatio","mobileLayoutBreakpoint","verticallyCenterImage","PhotoSwipeDynamicCaption","constructor","lightbox","options","this","on","pswp","initCaption","showCaption","currSlide","onCalcSlideSize","slide","dynamicCaption","opener","isOpen","currZoomLevel","zoomLevels","initial","hideCaption","captionYOffset","shiftedAmount","pan","y","bounds","center","abs","setCaptionYOffset","adjustPanArea","destZoomLevel","originalEvent","closest","preventDefault","zoomLevel","adjustedPanAreaSize","panAreaSize","originalPanAreaSize","useMobileLayout","call","hidden","captionElement","captionFadeTimeout","clearTimeout","visibility","el","transform","setCaptionPosition","captionEl","isOnHorizontalEdge","styles","cssText","setCaptionWidth","removeProperty","setCaptionType","prevType","dataset","pswpCaptionType","updateCaptionPosition","imageWidth","imageHeight","captionSize","useMobileVersion","undefined","captionHTML","getCaptionHTML","createElement","className","dispatch","holderElement","appendChild","storeOriginalPanAreaSize","update","measureCaptionSize","captionWidth","horizontalEnding","horizontalLeftover","recalculateZoomLevelAndBounds","viewportSize","captionHeight","verticalEnding","verticalLeftover","initialPanAreaHeight","maxPositionX","storeAdjustedPanAreaSize","rect","currSlideElement","data","hiddenCaption","nextSibling","img","getAttribute","id","HIDE_AMOUNT","CONTAINER_WIDTH","useRouter","goBack","home","allImages","tabs","item","gallery","PhotoSwipeLightbox","children","zoom","showHideAnimationType","tapAction","bgOpacity","loop","preload","pswpModule","handleShowAllPhotos","loadAndOpen","getElementById","onImgLoaded","complete","naturalWidth","naturalHeight","parentElement","picker","setAlignment","navEl","scrollWidth","init","DsSegmentedPicker","align","default","_withCtx","PickerItem","ref_for","galleryItem","onLoad","$event","description","_createTextVNode","_","onHandleBack","rootPath","path","component","ChampsHomepage","ChampsAthlete","createRouter","history","createWebHistory","routes","values","scrollBehavior","_component_RouterLink","_resolveComponent","to","_createStaticVNode","script","render","app","getCurrentInstance","appContext","use","_component_router_view","ChampsHeader","ChampsFooter","selectedTabName","inject","$slots","_withDirectives","_renderSlot","_vShow","_mergeModels","theme","isFullWidth","Boolean","useFor","size","dataTestValue","required","expose","__expose","useTemplateRef","pickerSlider","segmentButtons","modelValue","_useModel","slots","useSlots","tabTitles","tab","tabNames","selectedTabKey","provide","buttonWidthsCache","calculateWidths","entries","entry","borderBoxSize","inlineSize","toggleClick","gsap","useGsap","sliderTweenAnimation","moveSegment","async","withoutAnimation","currentButton","currentWidth","totalWidth","slice","duration","CustomEaseDurations","MOTION_DURATION_250","kill","translateX","ease","CustomEaseNames","MOTION_EASE_OUT","onComplete","watch","newModelValue","currentIndex","indexOf","immediate","normalizeText","toLowerCase","normalize","replace","resizeObserver","ResizeObserver","segmentButton","observe","newActiveIndex","onBeforeUnmount","disconnect"],"sourceRoot":""}