{"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>© 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 266 12 12 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":""}