{"version":3,"file":"BxAODOUO.js","sources":["../../../../types/components/product-card.types.ts","../../../../components/Product/ProductTags/ProductTag.vue","../../../../components/Product/ProductTags/ProductTagRating.vue","../../../../composables/useProductImage.ts","../../../../types/store/category.ts"],"sourcesContent":["export const enum ProductDetailType {\n  Page = 'page',\n  Dialog = 'dialog',\n}\n\nexport const enum ProductType {\n  simple = 'simple',\n  selection = 'selection',\n}\n\nexport const enum ProductParentType {\n  card = 'card',\n  detail = 'detail',\n}\n\nexport type ProductTagSize = 'sm' | 'md'\n","<script setup lang=\"ts\">\nimport {\n  ProductParentType,\n  ProductTagSize,\n} from '@/types/components/product-card.types'\n\ntype Props = {\n  type: ProductParentType\n  size?: ProductTagSize\n  color?: string\n  backgroundColor?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  size: 'md',\n  color: '',\n  backgroundColor: '',\n})\n\nconst componentClasses = [\n  'product-tag',\n  `product-tag--type-${props.type}`,\n  `product-tag--size-${props.size}`,\n]\n\nconst componentStyles = {\n  color: props.color || 'var(--ui-white)',\n  background: props.backgroundColor || 'var(--ui-violet)',\n}\n</script>\n\n<template>\n  <div :class=\"componentClasses\" :style=\"componentStyles\">\n    <slot />\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.product-tag {\n  display: flex;\n  gap: 2px;\n  align-items: center;\n  justify-content: center;\n  white-space: nowrap;\n  border-radius: 50px;\n}\n\n.product-tag--size-sm {\n  padding: 2px 4px;\n\n  @include media('>=desktop-mini') {\n    padding: 2px 8px;\n  }\n}\n\n.product-tag--size-md {\n  padding: 4px 8px;\n}\n\n.product-tag--type-card {\n  font-size: 8px;\n  font-weight: 700;\n  line-height: 10px;\n\n  @include media('>=desktop-mini') {\n    font-size: 12px;\n    font-weight: 800;\n    line-height: 16px;\n  }\n}\n\n.product-tag--type-detail {\n  font-size: 12px;\n  font-weight: 800;\n  line-height: 16px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { NewProduct } from '@/types/api/api-v4/product'\nimport {\n  ProductParentType,\n  ProductTagSize,\n} from '@/types/components/product-card.types'\n\nimport ProductTag from '@/components/Product/ProductTags/ProductTag.vue'\n\nconst MIN_RATING = 4\n\ntype Props = {\n  product: NewProduct\n  type: ProductParentType\n  size?: ProductTagSize\n}\n\nconst props = defineProps<Props>()\n\nconst componentClasses = [\n  'product-tag-rating',\n  `product-tag-rating--type-${props.type}`,\n]\n\nconst isVisible = computed(() => {\n  return props.product?.rating && props.product?.rating >= MIN_RATING\n})\n</script>\n\n<template>\n  <product-tag\n    v-if=\"isVisible\"\n    :class=\"componentClasses\"\n    color=\"var(--ui-white)\"\n    background-color=\"rgba(var(--ui-secondary-rgb), 0.8)\"\n    :type=\"type\"\n    :size=\"size\"\n  >\n    <nuxt-img src=\"/product/rating-star.svg\" alt=\"Рейтинг\" />\n\n    <span>{{ product.rating }}</span>\n  </product-tag>\n</template>\n\n<style lang=\"scss\" scoped>\n.product-tag-rating {\n  img {\n    flex-shrink: 0;\n  }\n}\n\n.product-tag-rating--type-card {\n  img {\n    width: 10px;\n    height: 10px;\n\n    @include media('>=desktop-mini') {\n      width: 14px;\n      height: 14px;\n    }\n  }\n}\n\n.product-tag-rating--type-detail {\n  img {\n    width: 16px;\n    height: 16px;\n  }\n}\n</style>\n","import { useCityStore } from '@/store/city/city'\n\nimport { NewProduct, NewProductModification } from '@/types/api/api-v4/product'\n\ntype Props = {\n  product: NewProduct\n  currentModification: NewProductModification\n}\n\nexport const useProductImage = (props: Props) => {\n  const { cityInfo } = useCityStore()\n\n  const isError = ref(false)\n  const setError = (state: boolean) => (isError.value = state)\n\n  const productImage = computed(() => {\n    if (!props.product?.image || isError.value) {\n      return './no-image-product-card.webp'\n    }\n\n    return props.product.image\n  })\n\n  const productImageList = computed(() => {\n    // Если есть основое изображение, и есть дополнительные, то рисуем и основное и дополнительные изображения\n    if (props.product?.image && props.product.additional_images?.length) {\n      return [productImage.value, ...props.product.additional_images]\n    }\n\n    // Если нету основого изображения, но есть дополнительные, то рисуем дополнительные изображения\n    if (!props.product?.image && props.product.additional_images?.length) {\n      return props.product.additional_images\n    }\n\n    return []\n  })\n\n  const productTitle = computed(() => {\n    let name = `${props.product.name} ${props.currentModification.name}`\n\n    if (props.product.name === props.currentModification.name) {\n      name = props.product.name\n    }\n\n    return `Заказать \"${name}\" с доставкой в ${cityInfo?.padeg?.pred} от ресторана Farfor`\n  })\n\n  return { productImage, productImageList, productTitle, setError }\n}\n","import { AxiosError } from 'axios'\n\nimport { Category } from '@/types/api/api-v3/category'\nimport { LoadState } from '@/types/main'\nimport { ErrorData } from '@/types/api/api-v3/basket'\n\nexport type CategoryState = LoadState<Category[], AxiosError<ErrorData>>\n\nexport type SimpleCategoriesState = LoadState<Category[]>\n\n// Перечисление для определения типа ивента counter-а\nexport enum SetProductType {\n  INCREASE = 'INCREASE',\n  DECREASE = 'DECREASE',\n}\n\nexport type SetProductIncludeType = 'INCREASE' | 'DECREASE'\n"],"names":["ProductDetailType","ProductType","ProductParentType","props","__props","componentClasses","componentStyles","MIN_RATING","isVisible","computed","_a","_b","useProductImage","cityInfo","useCityStore","isError","ref","setError","state","productImage","productImageList","_c","_d","productTitle","name","SetProductType"],"mappings":";;4eAAkB,IAAAA,GAAAA,IAChBA,EAAA,KAAO,OACPA,EAAA,OAAS,SAFOA,IAAAA,GAAA,CAAA,CAAA,EAKAC,GAAAA,IAChBA,EAAA,OAAS,SACTA,EAAA,UAAY,YAFIA,IAAAA,GAAA,CAAA,CAAA,EAKAC,GAAAA,IAChBA,EAAA,KAAO,OACPA,EAAA,OAAS,SAFOA,IAAAA,GAAA,CAAA,CAAA,8HCGlB,MAAMC,EAAQC,EAMRC,EAAmB,CACvB,cACA,qBAAqBF,EAAM,IAAI,GAC/B,qBAAqBA,EAAM,IAAI,EACjC,EAEMG,EAAkB,CACtB,MAAOH,EAAM,OAAS,kBACtB,WAAYA,EAAM,iBAAmB,kBACvC,oICnBMI,EAAa,6EAQnB,MAAMJ,EAAQC,EAERC,EAAmB,CACvB,qBACA,4BAA4BF,EAAM,IAAI,EACxC,EAEMK,EAAYC,EAAS,IAAM,SAC/B,QAAOC,EAAAP,EAAM,UAAN,YAAAO,EAAe,WAAUC,EAAAR,EAAM,UAAN,YAAAQ,EAAe,SAAUJ,CAAA,CAC1D,oWCjBYK,EAAmBT,GAAiB,CACzC,KAAA,CAAE,SAAAU,CAAS,EAAIC,EAAa,EAE5BC,EAAUC,EAAI,EAAK,EACnBC,EAAYC,GAAoBH,EAAQ,MAAQG,EAEhDC,EAAeV,EAAS,IAAM,OAClC,MAAI,GAACC,EAAAP,EAAM,UAAN,MAAAO,EAAe,QAASK,EAAQ,MAC5B,+BAGFZ,EAAM,QAAQ,KAAA,CACtB,EAEKiB,EAAmBX,EAAS,IAAM,aAEtC,OAAIC,EAAAP,EAAM,UAAN,MAAAO,EAAe,SAASC,EAAAR,EAAM,QAAQ,oBAAd,MAAAQ,EAAiC,QACpD,CAACQ,EAAa,MAAO,GAAGhB,EAAM,QAAQ,iBAAiB,EAI5D,GAACkB,EAAAlB,EAAM,UAAN,MAAAkB,EAAe,UAASC,EAAAnB,EAAM,QAAQ,oBAAd,MAAAmB,EAAiC,QACrDnB,EAAM,QAAQ,kBAGhB,CAAC,CAAA,CACT,EAEKoB,EAAed,EAAS,IAAM,OAC9B,IAAAe,EAAO,GAAGrB,EAAM,QAAQ,IAAI,IAAIA,EAAM,oBAAoB,IAAI,GAElE,OAAIA,EAAM,QAAQ,OAASA,EAAM,oBAAoB,OACnDqB,EAAOrB,EAAM,QAAQ,MAGhB,aAAaqB,CAAI,oBAAmBd,EAAAG,GAAA,YAAAA,EAAU,QAAV,YAAAH,EAAiB,IAAI,sBAAA,CACjE,EAED,MAAO,CAAE,aAAAS,EAAc,iBAAAC,EAAkB,aAAAG,EAAc,SAAAN,CAAS,CAClE,ECrCY,IAAAQ,GAAAA,IACVA,EAAA,SAAW,WACXA,EAAA,SAAW,WAFDA,IAAAA,GAAA,CAAA,CAAA","debug_id":"dfbef8d4-723f-5517-8e99-8cb0b982ca02"}