{"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"}