{"version":3,"file":"C-tOQmeh.js","sources":["../../../../components/Bonus/BonusTable.vue","../../../../components/Bonus/BonusAnimation.vue","../../../../pages/bonus.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/* Stores */\nimport { useUserStore } from '@/store/user/user'\n\n/* Types */\nimport { Rank } from '@/api/modules/site/site.types'\n\ntype Props = {\n ranksList: Rank[]\n}\ndefineProps<Props>()\n\nconst userStore = useUserStore()\n\nconst currentUserRank = computed(() => userStore.statistics?.rank)\n</script>\n\n<template>\n <table class=\"bonus-table\">\n <tbody>\n <tr\n v-for=\"rank in ranksList\"\n :key=\"rank.rank\"\n class=\"bonus-table__row\"\n :class=\"{\n 'bonus-table__row--active': rank.rank === currentUserRank,\n }\"\n >\n <td class=\"bonus-table__cell\">{{ rank.rank }} ранг</td>\n <td class=\"bonus-table__cell\">{{ rank.description }}</td>\n <td class=\"bonus-table__cell\">{{ rank.value }}%</td>\n </tr>\n </tbody>\n </table>\n</template>\n\n<style lang=\"scss\" scoped>\n.bonus-table {\n width: 100%;\n font-size: 14px;\n font-weight: 600;\n line-height: 15px;\n border-spacing: 0 16px;\n\n &__row {\n &--active {\n color: var(--ui-primary);\n background: var(--ui-peach);\n :deep(td:first-child) {\n border-radius: 6px 0 0 6px;\n }\n :deep(td:last-child) {\n border-radius: 0 6px 6px 0;\n }\n }\n }\n\n &__cell {\n padding: 5px 10px;\n &:first-child {\n font-weight: 800;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\ntype Props = {\n name: 'pig' | 'hand'\n}\nconst props = defineProps<Props>()\n\nconst imagesList = {\n background: 'bonus/background.webp',\n foreground: `bonus/${props.name}/foreground.webp`,\n 'decor-left': `bonus/${props.name}/decor-left.webp`,\n 'decor-right': `bonus/${props.name}/decor-right.webp`,\n 'flash-left': `bonus/${props.name}/flash-left.webp`,\n 'flash-right': `bonus/${props.name}/flash-right.webp`,\n}\n\nconst imageAlt = computed(() => `Анимация изображения ${props.name}`)\n</script>\n\n<template>\n <div class=\"bonus-animation\">\n <nuxt-img\n v-for=\"(image, key) in imagesList\"\n :key=\"key\"\n class=\"bonus-animation__image\"\n :class=\"[`bonus-animation__image--${key}`]\"\n :src=\"image\"\n :alt=\"imageAlt\"\n width=\"156\"\n height=\"187\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.bonus-animation {\n position: relative;\n width: 156px;\n height: 187px;\n\n &__image {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n}\n\n// TODO: Не понял что за проблема, но с вложенными стилями модификаторы с анимацией не заработали в билде. Локально всё работает\n.bonus-animation__image--foreground {\n animation: foreground 5s linear infinite;\n}\n\n.bonus-animation__image--decor-left {\n animation: decor 5s linear infinite;\n}\n\n.bonus-animation__image--decor-right {\n animation: decor 5s linear infinite 2s;\n}\n\n.bonus-animation__image--flash-left {\n animation: flash 4s linear infinite;\n}\n\n.bonus-animation__image--flash-right {\n animation: flash 4s linear infinite reverse 1s;\n}\n\n@keyframes foreground {\n 0%,\n 100% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(5px);\n }\n}\n\n@keyframes decor {\n 0%,\n 100% {\n transform: translateY(0px) rotate(0);\n }\n 50% {\n transform: translateY(-5px) rotate(7deg);\n }\n}\n\n@keyframes flash {\n 0%,\n 100% {\n opacity: 1;\n }\n 20%,\n 40%,\n 60%,\n 80% {\n opacity: 0;\n }\n}\n</style>\n","<script setup lang=\"ts\">\n/* Stores */\nimport { useUserStore } from '@/store/user/user'\nimport { useAppStore } from '@/store/app/app'\nimport { useCityStore } from '@/store/city/city'\n\n/* Types */\nimport {\n NotFoundError,\n ServerError,\n HttpStatusCode,\n Success,\n} from '@/api/results'\n\n/* Components */\nimport BonusSectionSave from '@/components/Bonus/sections/BonusSectionSave.vue'\nimport BonusSectionApply from '@/components/Bonus/sections/BonusSectionApply.vue'\nimport BonusSectionSpend from '@/components/Bonus/sections/BonusSectionSpend.vue'\nimport BonusSectionInfo from '@/components/Bonus/sections/BonusSectionInfo.vue'\n\nconst userStore = useUserStore()\nconst appStore = useAppStore()\nconst { isDesktopOrTablet, isMobile } = useDevice()\n\nconst isWebview = computed(() => appStore.isWebview)\n\nconst showBreadcrumb = computed(\n () => page?.value?.breadcrumbs?.length !== 0 && !isWebview.value,\n)\n\nconst pageTitle = computed(() => {\n if (isMobile) return 'Бонусы'\n\n if (isDesktopOrTablet) return page?.value?.title\n\n return ''\n})\n\nconst {\n cityInfo: { domain },\n} = useCityStore()\n\nconst { data: page, error } = await useAsyncData(async (nuxtApp) => {\n const result = await nuxtApp?.$apiService.site.fetchBonusPage()\n\n if (result instanceof NotFoundError) {\n createError({\n statusCode: HttpStatusCode.NOT_FOUND,\n })\n }\n\n if (result instanceof ServerError) {\n throw createError({\n statusCode: HttpStatusCode.INTERNAL_SERVER_ERROR,\n })\n }\n\n if (result instanceof Success) {\n return result.data\n }\n})\n\nif (error.value) {\n showError(error.value)\n}\n\nonMounted(() => {\n if (userStore?.isAuthenticated) userStore.getStatistic()\n})\n</script>\n\n<template>\n <div class=\"bonus-page\">\n <app-head\n :title=\"page?.seo?.seo_title\"\n :seo=\"{\n title: page?.seo.seo_title,\n description: page?.seo.seo_description,\n keywords: page?.seo.seo_title,\n }\"\n />\n\n <the-breadcrumbs\n v-if=\"showBreadcrumb\"\n :breadcrumbs=\"page?.breadcrumbs\"\n :domain=\"domain\"\n />\n\n <h1 v-if=\"pageTitle\" class=\"bonus-page__title\">\n {{ pageTitle }}\n </h1>\n\n <bonus-section-info\n v-if=\"page?.bonus_info_text\"\n class=\"bonus-page__section\"\n :page=\"page\"\n />\n\n <bonus-section-save\n v-if=\"page?.howto_save_up_text\"\n class=\"bonus-page__section\"\n :page=\"page\"\n />\n\n <bonus-section-spend\n v-if=\"page?.howto_spend_text\"\n class=\"bonus-page__section\"\n :page=\"page\"\n />\n\n <bonus-section-apply\n v-if=\"page?.bonus_dont_apply_text\"\n class=\"bonus-page__section\"\n :page=\"page\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.bonus-page {\n padding-top: 0;\n margin: 24px 0 64px;\n\n @include media('>=desktop-mini') {\n padding-top: 30px;\n margin: 10px 0 90px;\n }\n\n &__title {\n margin: 20px 0 24px;\n font-size: 18px;\n line-height: 21px;\n\n @include media('>=desktop-mini') {\n margin-bottom: 48px;\n font-size: 28px;\n font-weight: 800;\n line-height: 56px;\n }\n }\n\n &__section {\n margin-bottom: 24px;\n\n @include media('>=desktop-mini') {\n display: flex;\n justify-content: space-between;\n margin-bottom: 56px;\n }\n }\n}\n</style>\n"],"names":["userStore","useUserStore","currentUserRank","computed","_a","props","__props","imagesList","imageAlt","appStore","useAppStore","isDesktopOrTablet","isMobile","useDevice","isWebview","showBreadcrumb","_b","page","pageTitle","domain","useCityStore","error","__temp","__restore","_withAsyncContext","useAsyncData","nuxtApp","result","NotFoundError","createError","HttpStatusCode","ServerError","Success","showError","onMounted"],"mappings":";;2hCAYA,MAAMA,EAAYC,EAAa,EAEzBC,EAAkBC,EAAS,IAAM,OAAA,OAAAC,EAAAJ,EAAU,aAAV,YAAAI,EAAsB,KAAI,6mCCVjE,MAAMC,EAAQC,EAERC,EAAa,CACjB,WAAY,wBACZ,WAAY,SAASF,EAAM,IAAI,mBAC/B,aAAc,SAASA,EAAM,IAAI,mBACjC,cAAe,SAASA,EAAM,IAAI,oBAClC,aAAc,SAASA,EAAM,IAAI,mBACjC,cAAe,SAASA,EAAM,IAAI,mBACpC,EAEMG,EAAWL,EAAS,IAAM,wBAAwBE,EAAM,IAAI,EAAE,sjCCKpE,MAAML,EAAYC,EAAa,EACzBQ,EAAWC,EAAY,EACvB,CAAE,kBAAAC,EAAmB,SAAAC,CAAS,EAAIC,EAAU,EAE5CC,EAAYX,EAAS,IAAMM,EAAS,SAAS,EAE7CM,EAAiBZ,EACrB,IAAM,SAAA,QAAAa,GAAAZ,EAAAa,GAAA,YAAAA,EAAM,QAAN,YAAAb,EAAa,cAAb,YAAAY,EAA0B,UAAW,GAAK,CAACF,EAAU,MAC7D,EAEMI,EAAYf,EAAS,IAAM,OAC/B,OAAIS,EAAiB,SAEjBD,GAA0BP,EAAAa,GAAA,YAAAA,EAAM,QAAN,YAAAb,EAAa,MAEpC,EAAA,CACR,EAEK,CACJ,SAAU,CAAE,OAAAe,CAAO,GACjBC,EAAa,EAEX,CAAE,KAAMH,EAAM,MAAAI,CAAU,GAAA,CAAAC,EAAAC,CAAA,EAAAC,EAAA,SAAMC,GAAa,MAAOC,GAAY,CAClE,MAAMC,EAAS,MAAMD,GAAA,YAAAA,EAAS,YAAY,KAAK,kBAQ/C,GANIC,aAAkBC,IACRC,EAAA,CACV,WAAYC,EAAe,SAAA,CAC5B,EAGCH,aAAkBI,GACpB,MAAMF,EAAY,CAChB,WAAYC,EAAe,qBAAA,CAC5B,EAGH,GAAIH,aAAkBK,GACpB,OAAOL,EAAO,IAChB,EACF,aAAC,CAAA,mBAED,OAAIN,EAAM,OACRY,EAAUZ,EAAM,KAAK,EAGvBa,GAAU,IAAM,CACVlC,GAAA,MAAAA,EAAW,iBAAiBA,EAAU,aAAa,CAAA,CACxD","debug_id":"91214fd8-e86e-5bbb-be82-cb31432139fe"}