PageSourceSearch

https://static.varus.ua/azgwc-blob-static-varus-prod-01/vsf/dist/0928-vb859d25f/app-1914f9a7.js

js varus.ua collected 2026-10-02 07:28:13 UTC 50,739 bytes, 1,491 lines download raw bytes

1"use strict";(self.webpackChunkvue_storefront=self.webpackChunkvue_storefront||[]).push([[2783],{10862:function(M,I,o){o.r(I),o.d(I,{ElasticsearchProductAdapter:function(){return n}});let c=null;async function y(){return c||(c=(await Promise.resolve().then(o.bind(o,70531))).ProductService),c}class n{async getProducts(u){return(await y()).getProducts(u)}async getProductByKey(u){return(await y()).getProductByKey(u)}async getProductRenderList(u){return(await y()).getProductRenderList(u)}}},11093:function(M,I,o){o.d(I,{n_:function(){return R},tv:function(){return $}});var c=o(50314);function y(e){if("option"in e&&e.option?.label)return("enumRaw"in e?e.enumRaw:null)==="0"&&e.option.label==="0"?void 0:e.option.label;if("options"in e&&e.options?.length>0)return e.options.map(i=>i.label).join(", ");if("boolValue"in e&&e.boolValue!==null&&e.boolValue!==void 0)return String(e.boolValue);if("textValue"in e&&e.textValue!==null&&e.textValue!==void 0)return String(e.textValue);if("numberValue"in e&&e.numberValue!==null&&e.numberValue!==void 0&&e.numberValue!==0)return String(e.numberValue);if("dateValue"in e&&e.dateValue!==null&&e.dateValue!==void 0)return String(e.dateValue);if("value"in e&&e.value!==null&&e.value!==void 0)return String(e.value)}function n(e){if(!e||e.length===0)return!1;const i=e[0];return"boolValue"in i&&i.boolValue!==null&&i.boolValue!==void 0?!!i.boolValue:"numberValue"in i&&i.numberValue!==null&&i.numberValue!==void 0?Number(i.numberValue)===1:"textValue"in i&&i.textValue!==null&&i.textValue!==void 0?i.textValue==="true"||i.textValue==="1":!1}function E(e){if(!e||e.length===0)return[];const i=e[0];return"multiEnumRaw"in i&&Array.isArray(i.multiEnumRaw)?i.multiEnumRaw:[]}function u(e){if(!e||e.length===0)return;const i=e[0];if("textValue"in i&&i.textValue!==null&&i.textValue!==void 0)return String(i.textValue);if("numberValue"in i&&i.numberValue!==null&&i.numberValue!==void 0)return String(i.numberValue);if("boolValue"in i&&i.boolValue!==null&&i.boolValue!==void 0)return String(i.boolValue);if("dateValue"in i&&i.dateValue!==null&&i.dateValue!==void 0)return String(i.dateValue)}function S(e){if(!e||e.length===0)return;const i=e[0];if("numberValue"in i&&i.numberValue!==null&&i.numberValue!==void 0)return Number(i.numberValue);if("textValue"in i&&i.textValue!==null&&i.textValue!==void 0){const a=Number(i.textValue);return isNaN(a)?void 0:a}}function C(e){return{NONE:1,CATALOG:2,SEARCH:3,CATALOG_SEARCH:4}[e]||4}function l(e){return e==="ENABLED"?1:2}function f(e){return{SIMPLE:"simple",MARKDOWN:"markdown"}[e]||"simple"}function w(e){return e?e.map(i=>{const a=i.shop;return{id:parseInt(String(a.id),10),name:a.name||`Shop #${a.id}`,product_in_stock:i.availability?.inStock??!1,price:i.priceInfo?.price??null,special_price:i.priceInfo?.specialPrice??null,discount_percent:i.priceInfo?.discountPercent??null,address:a.address||"",city_id:parseInt(String(a.cityId||a.city?.id||0),10),city_name:a.city?.name||"",city_lat:a.city?.lat||null,city_long:a.city?.long||null,phone:a.phone||"",work_time:a.workTime||"",lat:a.lat||"0",long:a.long||"0",tms_id:a.tmsId?parseInt(String(a.tmsId),10):parseInt(String(a.id),10),has_cafe:a.hasCafe?"1":"0",has_drive:a.hasDrive?"1":"0",has_fresh_fish:a.hasFreshFish?"1":"0",has_home_basket:a.hasHomeBasket?"1":"0",has_own_production:a.hasOwnProduction?"1":"0",has_own_meat_production:a.hasOwnMeatProduction?"1":"0",has_wifi:a.hasWifi?"1":"0",has_bomb_shelter:a.hasBombShelter?"1":"0",has_generator:a.hasGenerator?"1":"0",square:a.square||null,is_enabled:a.isEnabled===!1?"0":"1",inactive_reason:a.inactiveReason||null,delivery_methods:[]}}):[]}function A(e){return(e?.edges||[]).map(a=>
1a?.node).filter(Boolean).map(a=>({id:a.id,nickname:a.nickname||"Anonymous",summary:a.summary||null,content:a.content||"",rating:a.rating||0,upvotes:String(a.upvotes||0),downvotes:String(a.downvotes||0),created_at:a.createdAt,comments:(a.comments||[]).map(d=>({id:d.id,nickname:d.nickname||"",content:d.content||"",type:d.type||null,status:d.status||null,created_at:d.createdAt}))}))}function b(e,i,a=!1){const{qtyStep:d,brand:h,gallery:B,reviewSummary:x}=e,p=a&&e.regionalAvailability||e.availability,m=a&&e.regionalPriceInfo||e.priceInfo,Q={is_in_stock:p?.inStock??!1,qty:p?.qty||(p?.inStock?1:0),manage_stock:!0,is_qty_decimal:d?.isDecimal||!1,min_sale_qty:d?.minSale||0},U={in_stock:p?.inStock??!1,available:p?.available??!1,qty:p?.qty||(p?.inStock?1:0),price:m?.price,special_price:m?.specialPrice,sort_price:m?.specialPrice||m?.price,special_price_discount:m?.discountPercent,special_price_from_date:m?.specialFrom,special_price_to_date:m?.specialTo,wholesale_price:m?.wholesalePrice||null,wholesale_price_threshold:m?.wholesalePriceThreshold||null,promo_price:m?.promoPrice||null,promo_price_threshold:m?.promoPriceThreshold||null,special_promo_type:m?.specialPromoType??null,availability:{delivery:p?.delivery??!1,shipping:p?.shipping??!1,pickup:p?.pickup??!1,other_regions:p?.otherRegions??!1,other_market:p?.otherMarket??!1,today:p?.today??!1}},W={sqpp:U,stock:Q,displayPricePer100g:!1},Y=(0,c.X_)(W),z=h?{id:h.id,brand_id:h.id,name:h.name,url_key:h.urlKey&&!h.urlKey.startsWith("brands/")?`brands/${h.urlKey}`:h.urlKey}:void 0,O=e.primaryCategory?{category_id:Number(e.primaryCategory.id),id:e.primaryCategory.id,name:e.primaryCategory.name,url_key:e.primaryCategory.urlKey}:null,K=e.promotions?.map(s=>({id:s.id,name:s.name,label:s.label}))||[],r=K.filter(s=>s.label?.text||s.label?.icon).map(s=>({text:s.label?.text,color:s.label?.color,icon:s.label?.icon}));return{id:parseInt(e.id,10),sku:e.sku,name:e.name,slug:e.urlKey,url_key:e.urlKey,url_path:e.urlKey,type_id:f(e.type),status:l(e.status),visibility:C(e.visibility),price:Y,regular_price:m?.price,final_price:m?.specialPrice||m?.price,special_price:m?.specialPrice,special_price_discount:m?.discountPercent,special_price_from_date:m?.specialFrom,special_price_to_date:m?.specialTo,stock:Q,sqpp:U,is_new:e.isNew,is_18_plus:e.is18Plus,is_tobacco:e.isTobacco,isRichActive:e.isRichActive,forNewPost:e.isShippingAllowed,weight:e.weight||(d?.isDecimal?d.minSale||1:0),volume:e.volume,wghweigh:e.wghweigh,packingtype:d?.isDecimal?1:void 0,productquantityunit:d?.unit,productquantityunitstep:d?.recommended||d?.minSale||1,productminsalablequantity:d?.minSale,productquantitysteprecommended:d?.recommended,category:O?[O]:[],category_ids:O?[O.id]:[],image:B?.mainImageTimestamp?`/product/${e.sku}/main.jpg?t=${B.mainImageTimestamp}`:"",fv_image_timestamp:B?.mainImageTimestamp,brand_data:z,aw_review_count:x?.count||0,aw_review_rating:x?.averageRating||0,promotions:K,product_label:r,...i?{[`sqpp_data_${i}`]:U}:{}}}function $(e,i,a=!1){const{qtyStep:d,brand:h,gallery:B,reviewSummary:x}=e,p=a&&e.regionalPriceInfo?e.regionalPriceInfo:e.priceInfo,m=a&&e.regionalAvailability?e.regionalAvailability:e.availability,Q=n(e.newProductItem),U=e.categories?.some(t=>t.name==="\u041D\u043E\u0432\u0438\u043D\u043A\u0438")||!1,W=e.isNew||Q||U,Y=E(e.onlinePromotionInStores),z=Y.length?Y:e.isOnlinePromotionInRegion||e.isOnlinePromotionInStore?[1]:[],O={is_in_stock:m.inStock,qty:m.qty||(m.inStock?1:0),manage_stock:!0,is_qty_decimal:d?.isDecimal||!1,min_sale_qty:d?.minSale||0},K={in_stock:m.inStock,available:m.available,qty:m.qty||(m.inStock?1:0),price:p.price,special_price:p.specialPrice,sort_price:p.specialPrice||p.price,special_price_discount:p.discountPercent,special_price_from_date:p.specialFrom,special_price_to_date:p.specialTo,wholesale_price:p.wholesalePrice||null,wholesale_price_threshold:p.wholesalePriceThreshold||null,promo_price:p.promoPrice||null,promo_price_threshold:p.promoPriceThreshold||null,special_promo_type:p.specialPromoType??null,availability:{delivery:m.delivery,shipping:m.shipping,pickup:m.pickup,other_regions:m.otherRegions,other_market:m.otherMarket,today:m.today}},r={sqpp:K,stock:O,displayPricePer100g:e.isDisplayPricePer100g},s=(0,c.X_)(r),v=e.categories?.map(t=>({category_id:Number(t.id),id:t.id,name:t.name,slug:t.urlKey,url_key:t.urlKey,url_path:t.urlKey,level:t.level,is_product_category:t.isProductCategory,position:t.position,meta_title:t.meta?.title,meta_description:t.meta?.description}))||[],P=e.categories?.map(t=>
1t.id)||[],_=B?.carouselImages?.map((t,L)=>({image:`/product/${e.sku}/${t.index}.jpg?t=${t.timestamp}`,pos:L,lab:""}))||[],F=h?{id:h.id,brand_id:h.id,name:h.name,url_key:h.urlKey&&!h.urlKey.startsWith("brands/")?`brands/${h.urlKey}`:h.urlKey,category_id:h.categoryId,subcategories:h.subcategories?.map(t=>({pim_brand_id:h.id,category_id:t.id,name:t.name,url_key:t.urlKey}))}:void 0,V=e.topAttributes?.map(t=>({code:t.code,label:t.label,group:t.group,value:y(t)}))||[],k={};for(const t of V)t.value!==void 0&&(k[t.code]=t.value);const G=e.allAttributes?.map(t=>({code:t.code,label:t.label,value:y(t)}))||[],T={};for(const t of G)t.value!==void 0&&(T[t.code]=t.value);const H=e.promotions?.map(t=>({id:t.id,name:t.name,url_key:t.urlKey&&!t.urlKey.startsWith("promotion/")?`promotion/${t.urlKey}`:t.urlKey,short_description:t.shortDescription,desktop_image:t.desktopImage,mobile_image:t.mobileImage,date_from:t.dateFrom,date_to:t.dateTo,label:t.label}))||[],N=e.productLabels?.filter(t=>t.text||t.icon).map(t=>({text:t.text,color:t.color,icon:t.icon,date_from:t.dateFrom,date_to:t.dateTo,add_countdown:t.addCountdown,add_date:t.addDate}))||[],X=e.promotions?.filter(t=>t.label?.text||t.label?.icon).map(t=>({text:t.label?.text,color:t.label?.color,icon:t.label?.icon,date_from:t.dateFrom,date_to:t.dateTo}))||[],Z=N.length?N:X,J=e.shopAvailability?.filter(t=>t.availability?.inStock).map(t=>parseInt(String(t.shop.id),10))||[],q=w(e.shopAvailability),j=e.propertyData?.map(t=>({label:t.label,options:t.options?.map(L=>({is_current:L.isCurrent?"1":"0",label:L.label,product_id:L.productId,property_id:L.propertyId,url:L.url}))||[]}))||[],ee=A(e.reviews);return{id:parseInt(e.id,10),sku:e.sku,name:e.name,description:e.description||"",slug:e.urlKey,url_key:e.urlKey,url_path:e.urlKey,type_id:f(e.type),status:l(e.status),visibility:C(e.visibility),price:s,priceRaw:{regular:Number(p.price)||0,special:Number(p.specialPrice)||0},regular_price:p.price,final_price:p.specialPrice||p.price,special_price:p.specialPrice,special_price_discount:p.discountPercent,special_price_from_date:p.specialFrom,special_price_to_date:p.specialTo,stock:O,sqpp:K,stock_shop:J,shop_availability_list:q,weight:e.weight||(d?.isDecimal?d.minSale||1:0),volume:e.volume,is_new:W,is_18_plus:e.is18Plus,is_tobacco:e.isTobacco,is_certificate:e.isCertificate,forNewPost:e.isShippingAllowed,boardProduct:e.isBoardProduct,boardProductTop:e.isBoardProductTop,online_promotion_in_stores:z,varus_perfect:e.isVarusPerfect,winter_support:e.isWinterSupport,newProductItem:W,isRichActive:e.isRichActive,news_from_date:u(e.newsFromDate),news_to_date:u(e.newsToDate),displayPricePer100g:e.isDisplayPricePer100g,wghweigh:e.wghweigh,packingtype:parseInt(u(e.packingtype))||(d?.isDecimal?1:void 0),ratingVivino:S(e.ratingVivino),is_markdown:e.isMarkdown??!1,markdown_id:e.markdownData?parseInt(String(e.markdownData.markdownId),10)||void 0:S(e.markdownId),markdown_title:e.markdownData?.title??u(e.markdownTitle),markdown_discount:e.markdownData?.discountPercent??S(e.markdownDiscount),markdown_description:e.markdownData?.description??u(e.markdownDescription),markdown_shops:e.markdownData?.shops||[],markdown_original_product:e.markdownData?.originalProduct?{id:parseInt(String(e.markdownData.originalProduct.id),10),url_path:e.markdownData.originalProduct.urlPath}:void 0,productquantityunit:d?.unit,productquantityunitstep:d?.recommended||d?.minSale||1,productminsalablequantity:d?.minSale,productquantitysteprecommended:d?.recommended,category:v,category_ids:P,image:B?.mainImageTimestamp?`/product/${e.sku}/main.jpg?t=${B.mainImageTimestamp}`:"",fv_image_timestamp:B?.mainImageTimestamp,media_gallery:_,fv_index:B?.carouselImages?.map(t=>({index:t.index,timestamp:t.timestamp}))||[],brand_data:F,pim_brand_id:h?.id||void 0,aw_review_count:x?.count||0,aw_review_rating:x?.averageRating||0,graphql_reviews:ee,top_attributes_list:k,top_attributes_list_extended:V,all_attributes_list:T,all_attributes_list_extended:G,promotions:H,product_label:Z,promotion_page_id:e.promotions?.map(t=>parseInt(t.id,10))||[],promotion_banner_ids:e.banners?.map(t=>String(t.id))||[],promotion_banners:(()=>{const t=e.banners?.map(g=>({id:String(g.id),title:g.title,subtitle:g.subtitle,link:g.link,target:g.target,image_desktop:g.imageDesktop,image_mobile:g.imageMobile,position:g.position,sort_order:g.sortOrder,status:g.status,datetime_from:g.dateFrom,datetime_to:g.dateTo,show_title:g.showTitle,show_subtitle:g.showSubtitle,show_button:g.showButton,allow_hide_button:g.allowHideButton,button_text:g.buttonText,background_color:g.backgroundColor,title_color:g.titleColor,subtitle_color:g.subtitleColor,button_color:g.buttonColor,button_text_color:g.buttonTextColor,regi
1onal_link:g.regionalLink}))||[],L=Date.now();return t.filter(g=>{const te=g.status===!0||String(g.status)==="1",oe=g.datetime_to?new Date(g.datetime_to).getTime()>L:!1,ie=g.datetime_from?new Date(g.datetime_from).getTime()<=L:!0;return te&&oe&&ie})})(),category_seo_description:e.categorySeoDescription,icons_data:e.icons?.map(t=>({label:t.label||"",value:t.value||""}))||[],property_data:j,property_variant_ids:j.flatMap(t=>t.options.map(L=>Number(L.product_id))).filter(t=>t>0),...i?{[`sqpp_data_${i}`]:K}:{},newProducts:(e.newProducts||[]).map(t=>b(t,i,a)),topProducts:(e.topProducts||[]).map(t=>b(t,i,a)),recommendedProducts:(e.recommendedProducts||[]).map(L=>b(L,i,a))}}function R(e,i,a=!1){if(!e?.route?.resolved)return null;const d=e.route.resolved;return d.__typename!=="Product"?null:$(d,i,a)}function D(e,i=0,a=50,d){const{products:h}=e;return{items:h.items.map(B=>$(B,d)),total:h.totalCount||h.items.length,perPage:a,start:i,aggregations:[]}}},13977:function(M,I,o){o.d(I,{w0:function(){return u},oS:function(){return E},wr:function(){return n},gU:function(){return y},se:function(){return l},MV:function(){return S},R3:function(){return C},kO:function(){return f}});var c=o(35960);const y=(0,c.UG)(`
2  query CategoryProducts(
3    $id: ID!
4    $shopId: Int
5    $regionId: Int
6    $locale: String
7    $deliveryMethod: DeliveryMethod
8    $page: Int
9    $pageSize: Int
10    $filters: [CategoryProductFilterInput!]
11    $sort: CategoryProductSortInput
12    $quickFilters: [CategoryQuickFilterInput!]
13  ) {
14    category(
15      id: $id
16      shopId: $shopId
17      regionId: $regionId
18      locale: $locale
19      deliveryMethod: $deliveryMethod
20    ) {
21      id
22      name
23      urlKey
24      level
25      parentId
26      description
27      childrenTotal
28      productsTotal
29      kind
30      is18Plus
31      isProductCategory
32      meta {
33        h1
34        title
35        description
36        noIndex
37        noFollow
38      }
39      seoBlocks {
40        title
41        position
42        items {
43          title
44          url
45          position
46        }
47      }
48      children {
49        ...CategoryChildBaseFields
50        children {
51          ...CategoryChildBaseFields
52          children {
53            ...CategoryChildBaseFields
54          }
55        }
56      }
57      products(
58        page: $page
59        pageSize: $pageSize
60        filters: $filters
61        sort: $sort
62        quickFilters: $quickFilters
63      ) {
64        items {
65          ...CategoryProductListItemFields
66        }
67        total
68        page
69        pageSize
70        totalPages
71        availableFilters {
72          ...CategoryProductFilterFields
73        }
74        availableSorts {
75          ...CategoryProductSortOptionFields
76        }
77      }
78    }
79  }
80`),n=(0,c.UG)(`
81  query CategoryFilters(
82    $id: ID!
83    $shopId: Int
84    $regionId: Int
85    $locale: String
86    $deliveryMethod: DeliveryMethod
87  ) {
88    category(
89      id: $id
90      shopId: $shopId
91      regionId: $regionId
92      locale: $locale
93      deliveryMethod: $deliveryMethod
94    ) {
95      products(pageSize: 0) {
96        availableFilters {
97          ...CategoryProductFilterFields
98        }
99      }
100    }
101  }
102`),E=(0,c.UG)(`
103  query CategoryEntity(
104    $id: ID!
105    $shopId: Int
106    $regionId: Int
107    $locale: String
108    $deliveryMethod: DeliveryMethod
109  ) {
110    category(
111      id: $id
112      shopId: $shopId
113      regionId: $regionId
114      locale: $locale
115      deliveryMethod: $deliveryMethod
116    ) {
117      id
118      pimcoreId
119      name
120      urlKey
121      level
122      parentId
123      description
124      childrenTotal
125      productsTotal
126      kind
127      is18Plus
128      isProductCategory
129      meta {
130        h1
131        title
132        description
133        noIndex
134        noFollow
135      }
136      seoBlocks {
137        title
138        position
139        items {
140          title
141          url
142          position
143        }
144      }
145      children {
146        ...CategoryChildBaseFields
147        children {
148          ...CategoryChildBaseFields
149          children {
150            ...CategoryChildBaseFields
151          }
152        }
153      }
154    }
155  }
156`),u=(0,c.UG)(`
157  query CategoryByRoute(
158    $path: String!
159    $shopId: Int
160    $regionId: Int
161    $locale: String
162    $deliveryMethod: DeliveryMethod
163  ) {
164    route(
165      path: $path
166      shopId: $shopId
167      regionId: $regionId
168      locale: $locale
169      deliveryMethod: $deliveryMethod
170    ) {
171      notFound
172      resolved {
173        __typename
174        ... on Category {
175          id
176          name
177          urlKey
178          level
179          parentId
180          description
181          childrenTotal
182          productsTotal
183          brandCategory
184          is18Plus
185          isProductCategory
186          meta {
187            h1
188            title
189            description
190            noIndex
191            noFollow
192          }
193          seoBlocks {
194            title
195            position
196            items {
197              title
198              url
199              position
200            }
201          }
202          children {
203            ...CategoryChildBaseFields
204            children {
205              ...CategoryChildBaseFields
206              children {
207                ...CategoryChildBaseFields
208              }
209            }
210          }
211        }
212      }
213    }
214  }
215`),S=(0,c.UG)(`
216  query CategoryPageByRoute(
217    $path: String!
218    $shopId: Int
219    $regionId: Int
220    $locale: String
221    $deliveryMethod: DeliveryMethod
222    $page: Int
223    $pageSize: Int
224    $filters: [CategoryProductFilterInput!]
225    $sort: CategoryProductSortInput
226    $quickFilters: [CategoryQuickFilterInput!]
227    $loadBrandPromo: Boolean = false
228  ) {
229    route(
230      path: $path
231      shopId: $shopId
232      regionId: $regionId
233      locale: $locale
234      deliveryMethod: $deliveryMethod
235    ) {
236      canonicalPath
237      notFound
238      redirect {
239        code
240        to
241      }
242      resolved {
243        __typename
244        ... on Category {
245          ...CategoryPageRouteFields
246        }
247      }
248    }
249  }
250`),C=(0,c.UG)(`
251  query CategoryPageByRouteDual(
252    $filteredPath: String!
253    $cleanPath: String!
254    $shopId: Int
255    $regionId: Int
256    $locale: String
257    $deliveryMethod: DeliveryMethod
258    $page: Int
259    $pageSize: Int
260    $filters: [CategoryProductFilterInput!]
261    $sort: CategoryProductSortInput
262    $quickFilters: [CategoryQuickFilterInput!]
263    $loadBrandPromo: Boolean = false
264  ) {
265    filtered: route(
266      path: $filteredPath
267      shopId: $shopId
268      regionId: $regionId
269      locale: $locale
270      deliveryMethod: $deliveryMethod
271    ) {
272      canonicalPath
273      notFound
274      redirect {
275        code
276        to
277      }
278      resolved {
279        __typename
280        ... on Category {
281          ...CategoryPageRouteFields
282        }
283      }
284    }
285    unfiltered: route(
286      path: $cleanPath
287      shopId: $shopId
288      regionId: $regionId
289      locale: $locale
290      deliveryMethod: $deliveryMethod
291    ) {
292      notFound
293      resolved {
294        __typename
295        ... on Category {
296          id
297          products(page: 1, pageSize: 1, filters: $filters) {
298            availableFilters {
299              ...CategoryProductFilterAggFields
300            }
301          }
302        }
303      }
304    }
305  }
306`),l=(0,c.UG)(`
307  query CategoryPageById(
308    $id: ID!
309    $shopId: Int
310    $regionId: Int
311    $locale: String
312    $deliveryMethod: DeliveryMethod
313    $page: Int
314    $pageSize: Int
315    $filters: [CategoryProductFilterInput!]
316    $sort: CategoryProductSortInput
317    $quickFilters: [CategoryQuickFilterInput!]
318    $loadBrandPromo: Boolean = false
319  ) {
320    category(
321      id: $id
322      shopId: $shopId
323      regionId: $regionId
324      locale: $locale
325      deliveryMethod: $deliveryMethod
326    ) {
327      id
328      pimcoreId
329      name
330      urlKey
331      level
332      parentId
333      description
334      childrenTotal
335      productsTotal
336      kind
337      is18Plus
338      isProductCategory
339      friendlyFilter {
340        id
341        name
342        url
343        singleOption
344        meta {
345          h1
346          title
347          keywords
348          description
349          noIndex
350          noFollow
351        }
352        faq {
353          key
354          value
355        }
356      }
357      meta {
358        h1
359        title
360        description
361        noIndex
362        noFollow
363      }
364      seoBlocks {
365        title
366        position
367        items {
368          title
369          url
370          position
371        }
372      }
373      children {
374        ...CategoryChildBaseFields
375        children {
376          ...CategoryChildBaseFields
377          children {
378            ...CategoryChildBaseFields
379          }
380        }
381      }
382      banners {
383        id
384        title
385        titleColor
386        subtitle
387        subtitleColor
388        showTitle
389        showSubtitle
390        showButton
391        allowHideButton
392        buttonText
393        buttonTextColor
394        buttonColor
395        backgroundColor
396        imageDesktop
397        imageMobile
398        link
399        target
400        sortOrder
401        status
402        position
403        categoryIds
404        dateFrom
405        dateTo
406        regionalLink
407      }
408      topCategories {
409        id
410        title
411        url
412        icon
413        isNew
414        position
415      }
416      products(
417        page: $page
418        pageSize: $pageSize
419        filters: $filters
420        sort: $sort
421        quickFilters: $quickFilters
422        quickFilterCounts: [TODAY, PROMO]
423      ) {
424        items {
425          ...CategoryProductListItemFields
426        }
427        total
428        page
429        pageSize
430        totalPages
431        availableFilters {
432          ...CategoryProductFilterFields
433        }
434        availableSorts {
435          ...CategoryProductSortOptionFields
436        }
437        quickFilters {
438          code
439          label
440          selected
441          count
442        }
443        categoryNavigation {
444          mode
445          selectedCategoryId
446          expandedPathIds
447          items {
448            id
449            name
450            urlKey
451            level
452            parentId
453            productsTotal
454            selected
455            expanded
456            hasChildren
457            children {
458              id
459              name
460              urlKey
461              level
462              parentId
463              productsTotal
464              selected
465              expanded
466              hasChildren
467              children {
468                id
469                name
470                urlKey
471                level
472                parentId
473                productsTotal
474                selected
475                expanded
476                hasChildren
477              }
478            }
479          }
480        }
481      }
482      productList(listId: BRAND_PROMO, limit: 12) @include(if: $loadBrandPromo) {
483        ...CategoryProductListItemFields
484      }
485    }
486  }
487`),f=(0,c.UG)(`
488  query RouteInfo(
489    $path: String!
490    $shopId: Int
491    $regionId: Int
492    $locale: String
493    $deliveryMethod: DeliveryMethod
494  ) {
495    route(
496      path: $path
497      shopId: $shopId
498      regionId: $regionId
499      locale: $locale
500      deliveryMethod: $deliveryMethod
501    ) {
502      canonicalPath
503      notFound
504      redirect {
505        code
506        to
507      }
508      resolved {
509        __typename
510        ... on Category {
511          id
512        }
513      }
514    }
515  }
516`)},31937:function(M,I,o){o.d(I,{De:function(){return E},Z5:function(){return S},h1:function(){return l}});var c=o(35960),y=o(56517);const{gql:n}=o(11057),E=(0,c.UG)(`
517  query Product($id: ID!) {
518    product(id: $id) {
519      ...ProductCoreFields
520      ...ProductContentFields
521      ...ProductPhysicalFields
522      ...ProductFlagsFields
523      brand {
524        ...BrandFields
525      }
526    }
527  }
528`),u=n`
529  query ProductById($id: ID!, $shopId: Int, $regionId: Int, $deliveryMethod: DeliveryMethod) {
530    product(id: $id, shopId: $shopId, regionId: $regionId, deliveryMethod: $deliveryMethod) {
531      ...ProductFullFields
532      reviews(first: 50) {
533        totalCount
534        edges {
535          node {
536            id
537            nickname
538            summary
539            content
540            rating
541            upvotes
542            downvotes
543            createdAt
544            comments {
545              id
546              nickname
547              content
548              type
549              status
550              createdAt
551            }
552          }
553        }
554      }
555    }
556  }
557`,S={...u,definitions:[...u.definitions,...y.O3.definitions]},C=n`
558  query ProductByRoute($path: String!, $shopId: Int, $regionId: Int, $deliveryMethod: DeliveryMethod) {
559    route(path: $path, shopId: $shopId, regionId: $regionId, deliveryMethod: $deliveryMethod) {
560      canonicalPath
561      notFound
562      redirect {
563        code
564        to
565      }
566      resolved {
567        ... on Product {
568          ...ProductFullFields
569          reviews(first: 50) {
570            totalCount
571            edges {
572              node {
573                id
574                nickname
575                summary
576                content
577                rating
578                upvotes
579                downvotes
580                createdAt
581                comments {
582                  id
583                  nickname
584                  content
585                  type
586                  status
587                  createdAt
588                }
589              }
590            }
591          }
592        }
593      }
594    }
595  }
596`,l={...C,definitions:[...C.definitions,...y.O3.definitions]}},35763:function(M,I,o){o.d(I,{vh:function(){return u}});var c=o(3312),y=o(73712),n=o(10862),E=o(58438);function u(){const S=(0,y.getDataSourceForEntity)(c.$W.dataSource,"product"),C=`product-${S}`;return(0,y.getCachedAdapter)(C,()=>{if(S==="graphql"){const{GraphQLProductAdapter:l}=o(58438);return new l}else{const{ElasticsearchProductAdapter:l}=o(10862);return new l}})}},57162:function(M,I,o){o.d(I,{D3:function(){return z},ln:function(){return O},qX:function(){return K}});var c=o(3312),y=o(95283),n=o(79665),E=o(45383),u=o(98192),S=o(78575),C=o(65606);const l=new Map;let f=null,w=null,A=null,b=null,$=null,R=null;async function D(){if(f!==null)return f;try{const r=await Promise.all([o.e(1953),o.e(142),o.e(5140),o.e(1582),o.e(7148),o.e(8795),o.e(2373),o.e(945),o.e(5155),o.e(1924),o.e(2067),o.e(4470),o.e(666),o.e(140),o.e(9937)]).then(o.bind(o,21659)),s=await Promise.all([o.e(1953),o.e(142),o.e(5140),o.e(1582),o.e(7148),o.e(8795),o.e(2373),o.e(945),o.e(5155),o.e(1924),o.e(2067),o.e(4470),o.e(666),o.e(140),o.e(9937)]).then(o.bind(o,82081));w=r.ApolloClient,A=r.InMemoryCache,b=r.HttpLink,$=r.from,R=s.onError,f=!0,n.V.info("Apollo Client is available","data-layer:graphql")()}catch{f=!1,n.V.warn("Apollo Client is not installed. GraphQL adapters will not work. Install with: npm install @apollo/client graphql","data-layer:graphql")()}return f}let e=null;function i(){if(e===null){const r=c.$W.apollo?.ssrDebug;r===!0||String(r)==="true"?e=!0:r===!1||String(r)==="false"?e=!1:e=C.env.VSF_X_ENV==="uat"||!1}return e}function a(r){if(i()){const s=o.g;s.__SSR_GQL_DEBUG||(s.__SSR_GQL_DEBUG=[]),s.__SSR_GQL_DEBUG.push(r),s.__SSR_GQL_DEBUG.length>40&&s.__SSR_GQL_DEBUG.shift()}console.error("[SSR-GQL-DEBUG]",r)}function d(){return R(({graphQLErrors:r,networkError:s})=>{r&&r.forEach(({message:v,locations:P,path:_})=>{n.V.error(`[GraphQL error]: Message: ${v}, Location: ${JSON.stringify(P)}, Path: ${_}`,"data-layer:graphql")()}),s&&n.V.error(`[Network error]: ${s.message}`,"data-layer:graphql")()})}function h(){if(y.S$){if(typeof globalThis.fetch=="function")return globalThis.fetch;try{const r=o(75797);return r.default||r}catch{n.V.warn("No fetch implementation found for SSR. Ensure Node.js 18+ or install node-fetch.","data-layer:graphql")();return}}}function B(){if(!y.S$)return(0,u.EZ)(document.cookie,window.location.href);const r=(0,S.jS)();return r?(0,u.EZ)(r.cookie,r.pageUrl,r.userAgent):{}}function x(r,s){let v=h();if(v&&s&&s!==r){const F=v;v=async(V,k)=>{let G;try{const T=await F(V,k);if(T.status<500&&T.status!==404)return T;G=`HTTP ${T.status}`}catch(T){G=String(T?.cause?.code||T?.code||T?.message||T).slice(0,200)}return a({ts:new Date().toISOString(),fallback:!0,from:r,to:s,reason:G}),F(s,k)}}const P=v||((F,V)=>fetch(F,V)),_=(F,V)=>P(F,{...V,headers:{...V?.headers||{},...B()}});return new b({uri:r,credentials:"include",headers:{"Content-Type":"application/json"},fetch:_})}function p(){try{const r=o(76863);return r.possibleTypes||r}catch{return n.V.warn('possibleTypes.json not found. Run "npm run codegen" to generate it.',"data-layer:graphql")(),{}}}function m(){const r={typePolicies:{Product:{keyFields:["id"]},Query:{fields:{products:{keyArgs:["filter","sort"],merge(v,P,{args:_}){return!_?.currentPage||_.currentPage===1?P:{...P,items:[...v?.items||[],...P.items]}}}}}}},s=p();return Object.keys(s).length>0&&(r.possibleTypes=s),new A(r)}function Q(r){try{return(r?.definitions||[]).find(v=>v.kind==="OperationDefinition")?.name?.value||"anonymous"}catch{return"anonymous"}}function U(r){const s={};try{if(!r||typeof r!="object")return s;for(const v of Object.keys(r)){const P=r[v];if(!P||typeof P!="object"||!("resolved"in P||"notFound"in P))continue;if(P.notFound){s[v]="notFound";continue}const _=P.resolved;if(_?.__typename!=="Category"){s[v]=_?.__typename??"\u2205";continue}const F=_.products,V=Array.isArray(F?.availableFilters)?F.availableFilters.map(k=>`${k?.code??k?.uriName??"?"}:${k?.options?.length??0}`):[];s[v]={id:_.id,total:F?.total,facets:V}}}catch{}return s}function W(r,s){if(!(c.$W.apollo?.logCalls??!1))return r;const v=(P,_)=>async F=>{const V=Q(F?.query||F?.mutation),k=`[GraphQL:${P}] ${V}`,G=Date.now();y.S$?console.log(`\x1B[36m\u2192 ${k}\x1B[0m \x1B[90m${s}\x1B[0m`,F?.variables||{}):console.log(`%c\u2192 ${k}%c ${s}`,"color:#00bcd4;font-weight:bold","color:#888",F?.variables||{});try{const T=await _(F),H=Date.now()-G,N=U(T?.data);return y.S$?console.log(`\x1B[32m\u2713 ${k}\x1B[0m \x1B[90m${H}ms\x1B[0m`,N):console.log(`%c\u2713 ${k}%c ${H}ms`,"color:#4caf50;font-weight:bold","color:#888",N),T}catch(T){const H=Date.now()-G,N=T?.message||String(T);throw y.S$?console.log(`\x1B[31m\u2717 ${k}\x1B[0m \x1B[90m${H}ms\x1B[0m \x1B[31m${N}\x1B[0m`):console.log(`%c\u2717 ${k}%c ${H}ms \u2014 ${N}`,"color:#f44336;font-weight:bold","color:#888"),T}};return r.query=v("query",r.query.bind(r)),r.mutate=v("mutate",r.mutate.bind(r)),r}function Y(r,s){const v=m(),P=!y.S$&&(c.$W.apollo?.devTools??!1),_=new w({link:$([d(),x(r,s)]),cache:v,ssrMode:y.S$,defaultOptions:{watchQuery:{fetchPolicy:"cache-and-network",errorPolicy:"all"},query:{fetchPolicy:y.S$?"network-only":"cache-first",errorPolicy:"all"},mutate:{errorPolicy:"all"}},devtools:{enabled:P}});return W(_,r)}async function z(r){if(!await D())throw new Error("Apollo Client is not installed. Run: npm install @apollo/client graphql");const v=(0,E.getGraphQLEndpoint)(c.$W.dataSource,r,{isServer:y.S$}),P=v;if(y.S$){const _=(0,E.getGraphQLEndpoint)(c.$W.dataSource,r,{isServer:!1});return Y(v,_)}return l.has(P)||l.set(P,Y(v)),l.get(P)}function O(){l.forEach(r=>
596{r.cache.evict({fieldName:"product"}),r.cache.evict({fieldName:"route"}),r.cache.gc()})}function K(){l.forEach(r=>{r.cache.evict({fieldName:"category"}),r.cache.gc()})}},58438:function(M,I,o){o.r(I),o.d(I,{GET_PRODUCT:function(){return n.De},GET_PRODUCT_BY_ID:function(){return n.Z5},GET_PRODUCT_BY_ROUTE:function(){return n.h1},GraphQLProductAdapter:function(){return S}});var c=o(29438),y=o(84309),n=o(31937),E=o(89239),u=o(79665);class S{async getProducts(l){const{size:f=50,start:w=0}=l;return u.V.warn("GraphQL getProducts is not implemented - no bulk products query available. Falling back to empty response. Use Elasticsearch adapter for product listings.","data-layer:graphql")(),{items:[],total:0,perPage:f,start:w}}async getProductByKey(l){const{options:f,key:w="slug",skipCache:A}=l;try{const b=(0,y.d5)(),$=await b.getShopId(),R=b.isRegionalMode(),D=R?b.getRegionId():void 0,e=b.getDeliveryMethod();u.V.debug("GraphQL getProductByKey context resolved","data-layer:graphql",{shopId:$,isRegional:R,regionId:D,key:w,deliveryMethod:e})();const i=f[w];return i?w==="id"?this.getProductById(i,$,A,R,D,e):this.getProductBySlug(i,$,A,R,D,e):(u.V.warn("getProductByKey called without value","data-layer:graphql")(),null)}catch(b){throw u.V.error("GraphQL getProductByKey failed","data-layer:graphql",b)(),b}}async getProductById(l,f,w=!1,A=!1,b,$){const R=await(0,c.D3)("product");u.V.debug("GraphQL getProductById","data-layer:graphql",{id:l,shopId:f,regionId:b,deliveryMethod:$})();const D={id:l};A?(D.shopId=null,D.regionId=b||0):(D.shopId=f||null,D.regionId=null),D.deliveryMethod=$??null;const{data:e,errors:i}=await R.query({query:n.Z5,variables:D,fetchPolicy:w?"network-only":"cache-first"});return i?.length&&u.V.warn("GraphQL product by ID query errors","data-layer:graphql",i)(),e?.product?(0,E.tv)(e.product,f,A):(u.V.debug("GraphQL getProductById: product not found","data-layer:graphql",{id:l})(),null)}async getProductBySlug(l,f,w=!1,A=!1,b,$){const R=await(0,c.D3)("product"),D=l.startsWith("/")?l:`/${l}`;u.V.debug("GraphQL getProductBySlug via route resolver","data-layer:graphql",{slug:l,path:D,shopId:f,regionId:b,deliveryMethod:$})();const e={path:D};A?(e.shopId=null,e.regionId=b||0):(e.shopId=f||null,e.regionId=null),e.deliveryMethod=$??null;const{data:i,errors:a}=await R.query({query:n.h1,variables:e,fetchPolicy:w?"network-only":"cache-first"});a?.length&&u.V.warn("GraphQL route query errors","data-layer:graphql",a)();const d=i?.route;if(!d)return u.V.debug("GraphQL getProductBySlug: no route data returned","data-layer:graphql",{slug:l})(),null;if(d.notFound)return u.V.debug("GraphQL getProductBySlug: route not found","data-layer:graphql",{slug:l})(),null;d.redirect&&u.V.warn("GraphQL getProductBySlug: route has redirect","data-layer:graphql",{slug:l,redirectCode:d.redirect.code,redirectTo:d.redirect.to})();const h=(0,E.n_)(i,f,A);return h||(u.V.debug("GraphQL getProductBySlug: resolved entity is not a Product","data-layer:graphql",{slug:l,resolved:d.resolved})(),null)}async getProductRenderList(l){const{skus:f}=l;return!f||f.length===0?{items:[],total:0,perPage:0,start:0}:(u.V.warn("GraphQL getProductRenderList is not implemented - no render list query available. Falling back to empty response. Use Elasticsearch adapter for cart/checkout products.","data-layer:graphql",{skuCount:f.length})(),{items:[],total:0,perPage:0,start:0})}}},78575:function(M,I,o){o.d(I,{jS:function(){return S}});var c=o(65606);const y="__VSF_SSR_REQUEST_CONTEXT__";function n(){const C=c;if(!c[y]){const{AsyncLocalStorage:l}=o(88136);c[y]=new l}return c[y]}function E(C){const l=C?.headers||{},f=String(l["x-forwarded-proto"]||C?.protocol||"https").split(",")[0].trim(),w=l["x-forwarded-host"]||l.host||"";return{cookie:l.cookie,pageUrl:w?`${f}://${w}${C?.url||""}`:"",userAgent:l["user-agent"]}}function u(C,l){return n().run(C,l)}function S(){return n().getStore()}},80220:function(M,I,o){o.d(I,{D3:function(){return c.D3}});var c=o(57162),y=o(31937),n=o(35960);const E=(0,n.UG)(`
597  fragment ProductCoreFields on Product {
598    id
599    sku
600    name
601    type
602    status
603    visibility
604    urlKey
605  }
606`),u=(0,n.UG)(`
607  fragment ProductContentFields on Product {
608    description
609    categorySeoDescription
610  }
611`),S=(0,n.UG)(`
612  fragment ProductPhysicalFields on Product {
613    weight
614    volume
615  }
616`),C=(0,n.UG)(`
617  fragment ProductFlagsFields on Product {
618    isNew
619    is18Plus
620    isTobacco
621    isBoardProduct
622    isBoardProductTop
623    isDisplayPricePer100g
624    isVarusPerfect
625    isWinterSupport
626    isOnlinePromotionInRegion
627    isOnlinePromotionInStore
628    isRichActive
629  }
630`),l=(0,n.UG)(`
631  fragment BrandFields on Brand {
632    id
633    name
634    urlKey
635    categoryId
636    subcategories {
637      id
638      name
639      urlKey
640      level
641      isProductCategory
642      position
643    }
644  }
645`),f=(0,n.UG)(`
646  fragment PriceInfoFields on PriceInfo {
647    price
648    specialPrice
649    specialPromoType
650    discountPercent
651    specialFrom
652    specialTo
653    wholesalePrice
654    wholesalePriceThreshold
655    promoPrice
656    promoPriceThreshold
657  }
658`),w=(0,n.UG)(`
659  fragment AvailabilityFields on Availability {
660    inStock
661    available
662    delivery
663    pickup
664    shipping
665    today
666    qty
667    otherMarket
668    otherRegions
669  }
670`),A=(0,n.UG)(`
671  fragment CategoryMetaFields on CategoryMeta {
672    title
673    description
674    h1
675  }
676`),b=(0,n.UG)(`
677  fragment CategoryLinkFields on CategoryLink {
678    id
679    name
680    urlKey
681    level
682    isProductCategory
683    position
684    meta {
685      title
686      description
687      h1
688    }
689  }
690`),$=(0,n.UG)(`
691  fragment ProductImageFields on ProductImage {
692    index
693    timestamp
694  }
695`),R=(0,n.UG)(`
696  fragment ProductImageGalleryFields on ProductImageGallery {
697    mainImageTimestamp
698    carouselImages {
699      index
700      timestamp
701    }
702  }
703`),D=(0,n.UG)(`
704  fragment ReviewSummaryFields on ReviewSummary {
705    averageRating
706    count
707  }
708`),e=(0,n.UG)(`
709  fragment ReviewFields on Review {
710    id
711    nickname
712    summary
713    content
714    rating
715    upvotes
716    downvotes
717    createdAt
718    comments {
719      id
720      nickname
721      content
722      type
723      status
724      createdAt
725    }
726  }
727`),i=(0,n.UG)(`
728  fragment PromotionLabelFields on PromotionLabel {
729    text
730    color
731    icon
732  }
733`),a=(0,n.UG)(`
734  fragment PromotionPageFields on PromotionPage {
735    id
736    name
737    urlKey
738    description
739    shortDescription
740    isActive
741    dateFrom
742    dateTo
743    desktopImage
744    mobileImage
745    label {
746      text
747      color
748      icon
749    }
750  }
751`),d=(0,n.UG)(`
752  fragment BannerFields on Banner {
753    id
754    title
755    subtitle
756    link
757    target
758    imageDesktop
759    imageMobile
760    position
761    sortOrder
762    status
763    dateFrom
764    dateTo
765    showTitle
766    showSubtitle
767    showButton
768    allowHideButton
769    buttonText
770    backgroundColor
771    titleColor
772    subtitleColor
773    buttonColor
774    buttonTextColor
775    regionalLink
776  }
777`),h=(0,n.UG)(`
778  fragment ShopFields on Shop {
779    id
780    name
781    address
782    phone
783    workTime
784    lat
785    long
786    hasCafe
787    hasDrive
788    hasDelivery
789    hasFreshFish
790    hasHomeBasket
791    hasOwnProduction
792    hasOwnMeatProduction
793    hasWifi
794    hasGenerator
795    hasBombShelter
796    isDarkstore
797    isEnabled
798    inactiveReason
799    tmsId
800    square
801    cityId
802    city {
803      id
804      name
805      lat
806      long
807    }
808  }
809`),B=(0,n.UG)(`
810  fragment ShopAvailabilityFields on ShopAvailability {
811    shop {
812      id
813      name
814    }
815    availability {
816      inStock
817      available
818      delivery
819      pickup
820      shipping
821      today
822      qty
823      otherMarket
824      otherRegions
825    }
826    priceInfo {
827      price
828      specialPrice
829      discountPercent
830      specialFrom
831      specialTo
832      wholesalePrice
833      wholesalePriceThreshold
834      promoPrice
835      promoPriceThreshold
836    }
837  }
838`),x=(0,n.UG)(`
839  fragment QuantityStepFields on QuantityStep {
840    isDecimal
841    minSale
842    recommended
843    unit
844  }
845`),p=(0,n.UG)(`
846  fragment AttributeOptionFields on AttributeOption {
847    id
848    label
849  }
850`),m=(0,n.UG)(`
851  fragment AttributeValueFields on AttributeValue {
852    code
853    label
854    group
855    valueType
856    ... on BooleanAttributeValue {
857      boolValue: value
858    }
859    ... on DateTimeAttributeValue {
860      dateValue: value
861    }
862    ... on NumberAttributeValue {
863      numberValue: value
864    }
865    ... on EnumAttributeValue {
866      option {
867        ...AttributeOptionFields
868      }
869      enumRaw: raw
870    }
871    ... on MultiEnumAttributeValue {
872      options {
873        ...AttributeOptionFields
874      }
875      multiEnumRaw: raw
876    }
877    ... on TextAttributeValue {
878      textValue: value
879    }
880  }
881`),Q=(0,n.UG)(`
882  fragment ProductFullFields on Product {
883    # Core identification
884    id
885    sku
886    name
887    type
888    status
889    visibility
890    urlKey
891
892    # Content
893    description
894    categorySeoDescription
895
896    # Physical attributes
897    weight
898    volume
899
900    # Flags
901    isNew
902    is18Plus
903    isTobacco
904    isCertificate
905    isShippingAllowed
906    isBoardProduct
907    isBoardProductTop
908    isDisplayPricePer100g
909    isVarusPerfect
910    isWinterSupport
911    isOnlinePromotionInRegion
912    isOnlinePromotionInStore
913    isRichActive
914
915    # Price information
916    priceInfo {
917      price
918      specialPrice
919      specialPromoType
920      discountPercent
921      specialFrom
922      specialTo
923      wholesalePrice
924      wholesalePriceThreshold
925      promoPrice
926      promoPriceThreshold
927    }
928
929    # Regional price information
930    regionalPriceInfo {
931      price
932      specialPrice
933      specialPromoType
934      discountPercent
935      specialFrom
936      specialTo
937      wholesalePrice
938      wholesalePriceThreshold
939      promoPrice
940      promoPriceThreshold
941    }
942
943    # Availability
944    availability {
945      inStock
946      available
947      delivery
948      pickup
949      shipping
950      today
951      qty
952      otherMarket
953      otherRegions
954    }
955
956    # Regional availability
957    regionalAvailability {
958      inStock
959      available
960      delivery
961      pickup
962      shipping
963      today
964      qty
965      otherMarket
966      otherRegions
967    }
968
969    # Quantity step
970    qtyStep {
971      isDecimal
972      minSale
973      recommended
974      unit
975    }
976
977    # Brand
978    brand {
979      id
980      name
981      urlKey
982      categoryId
983      subcategories {
984        id
985        name
986        urlKey
987        level
988        isProductCategory
989        position
990      }
991    }
992
993    # Categories
994    categories {
995      id
996      name
997      urlKey
998      level
999      isProductCategory
1000      position
1001      meta {
1002        title
1003        description
1004        h1
1005      }
1006    }
1007
1008    # Primary category
1009    primaryCategory {
1010      id
1011      name
1012      urlKey
1013      level
1014      isProductCategory
1015      position
1016      meta {
1017        title
1018        description
1019        h1
1020      }
1021    }
1022
1023    # Image gallery
1024    gallery {
1025      mainImageTimestamp
1026      carouselImages {
1027        index
1028        timestamp
1029      }
1030    }
1031
1032    # Review summary
1033    reviewSummary {
1034      averageRating
1035      count
1036    }
1037    reviews(first: 50) {
1038      totalCount
1039      edges {
1040        node {
1041          id
1042          nickname
1043          summary
1044          content
1045          rating
1046          upvotes
1047          downvotes
1048          createdAt
1049          comments {
1050            id
1051            nickname
1052            content
1053            type
1054            status
1055            createdAt
1056          }
1057        }
1058      }
1059    }
1060
1061    # Promotions
1062    promotions {
1063      id
1064      name
1065      urlKey
1066      description
1067      shortDescription
1068      isActive
1069      dateFrom
1070      dateTo
1071      desktopImage
1072      mobileImage
1073      label {
1074        text
1075        color
1076        icon
1077      }
1078    }
1079
1080    # Banners
1081    banners {
1082      id
1083      title
1084      subtitle
1085      link
1086      target
1087      imageDesktop
1088      imageMobile
1089      position
1090      sortOrder
1091      status
1092      dateFrom
1093      dateTo
1094      showTitle
1095      showSubtitle
1096      showButton
1097      allowHideButton
1098      buttonText
1099      backgroundColor
1100      titleColor
1101      subtitleColor
1102      buttonColor
1103      buttonTextColor
1104      regionalLink
1105    }
1106
1107    # Product icons (attribute images)
1108    icons {
1109      label
1110      value
1111    }
1112
1113    # Markdown flag
1114    isMarkdown
1115
1116    # Markdown data (structured, replaces attribute-based markdown fields)
1117    markdownData {
1118      markdownId
1119      title
1120      description
1121      discountPercent
1122      shops
1123      originalProduct {
1124        id
1125        urlPath
1126      }
1127    }
1128
1129    # Product labels (native labels from backend)
1130    productLabels {
1131      text
1132      color
1133      icon
1134      dateFrom
1135      dateTo
1136      addCountdown
1137      addDate
1138    }
1139
1140    # Property data (product variants/options)
1141    propertyData {
1142      label
1143      options {
1144        isCurrent
1145        label
1146        productId
1147        propertyId
1148        url
1149      }
1150    }
1151
1152    # Shop availability
1153    shopAvailability {
1154      shop {
1155        id
1156        name
1157        address
1158        phone
1159        workTime
1160        lat
1161        long
1162        hasCafe
1163        hasDrive
1164        hasDelivery
1165        hasFreshFish
1166        hasHomeBasket
1167        hasOwnProduction
1168        hasOwnMeatProduction
1169        hasWifi
1170        hasGenerator
1171        hasBombShelter
1172        isDarkstore
1173        isEnabled
1174        inactiveReason
1175        tmsId
1176        square
1177        cityId
1178        city {
1179          id
1180          name
1181          lat
1182          long
1183        }
1184      }
1185      availability {
1186        inStock
1187        available
1188        delivery
1189        pickup
1190        shipping
1191        today
1192        qty
1193        otherMarket
1194        otherRegions
1195      }
1196      priceInfo {
1197        price
1198        specialPrice
1199        specialPromoType
1200        discountPercent
1201        specialFrom
1202        specialTo
1203        wholesalePrice
1204        wholesalePriceThreshold
1205        promoPrice
1206        promoPriceThreshold
1207      }
1208    }
1209
1210    # Product attributes
1211    topAttributes {
1212      ...AttributeValueFields
1213    }
1214
1215    allAttributes {
1216      ...AttributeValueFields
1217    }
1218
1219    filterAttributes {
1220      ...AttributeValueFields
1221    }
1222
1223    onlinePromotionInStores: attributes(keys: ["online_promotion_in_stores"]) {
1224      ...AttributeValueFields
1225    }
1226
1227    newProductItem: attributes(keys: ["newProductItem"]) {
1228      ...AttributeValueFields
1229    }
1230
1231    newsFromDate: attributes(keys: ["news_from_date"]) {
1232      ...AttributeValueFields
1233    }
1234
1235    newsToDate: attributes(keys: ["news_to_date"]) {
1236      ...AttributeValueFields
1237    }
1238
1239    wghweigh
1240
1241    packingtype: attributes(keys: ["packingtype"]) {
1242      ...AttributeValueFields
1243    }
1244
1245    ratingVivino: attributes(keys: ["ratingVivino"]) {
1246      ...AttributeValueFields
1247    }
1248
1249    markdownId: attributes(keys: ["markdown_id"]) {
1250      ...AttributeValueFields
1251    }
1252
1253    markdownTitle: attributes(keys: ["markdown_title"]) {
1254      ...AttributeValueFields
1255    }
1256
1257    markdownDiscount: attributes(keys: ["markdown_discount"]) {
1258      ...AttributeValueFields
1259    }
1260
1261    markdownDescription: attributes(keys: ["markdown_description"]) {
1262      ...AttributeValueFields
1263    }
1264
1265    # Product lists for carousels (PDP sliders)
1266    newProducts: productList(listId: PDP_NEW, limit: 12) {
1267      ...ProductListItemFields
1268    }
1269    topProducts: productList(listId: PDP_MORE_FROM_CATEGORY, limit: 12) {
1270      ...ProductListItemFields
1271    }
1272    recommendedProducts: productList(listId: PDP_RECOMMENDED_TO_VIEW, limit: 12) {
1273      ...ProductListItemFields
1274    }
1275  }
1276`),U=(0,n.UG)(`
1277  fragment CategoryProductListItemFields on Product {
1278    ...ProductListItemFields
1279
1280    # Extra flags
1281    isBoardProduct
1282    isBoardProductTop
1283    isOnlinePromotionInRegion
1284    isOnlinePromotionInStore
1285    isWinterSupport
1286    isShippingAllowed
1287    isMarkdown
1288    isDisplayPricePer100g
1289
1290    # Content / physical
1291    description
1292    weight
1293    volume
1294
1295    # Full categories list (the baseline only ships primaryCategory)
1296    categories {
1297      id
1298      name
1299      urlKey
1300      level
1301      isProductCategory
1302      position
1303    }
1304
1305    # Extend promotions with the badge countdown window
1306    # (merges with ProductListItemFields.promotions per GraphQL spec)
1307    promotions {
1308      dateFrom
1309      dateTo
1310    }
1311
1312    # Native badge labels
1313    productLabels {
1314      text
1315      color
1316      icon
1317      dateFrom
1318      dateTo
1319      addCountdown
1320      addDate
1321    }
1322
1323    # Markdown product overlay
1324    markdownData {
1325      markdownId
1326      title
1327      description
1328      discountPercent
1329      shops
1330      originalProduct {
1331        id
1332        urlPath
1333      }
1334    }
1335
1336    # Attribute aliases used by category card renderers
1337    newsFromDate: attributes(keys: ["news_from_date"]) {
1338      ...AttributeValueFields
1339    }
1340    newsToDate: attributes(keys: ["news_to_date"]) {
1341      ...AttributeValueFields
1342    }
1343    packingtype: attributes(keys: ["packingtype"]) {
1344      ...AttributeValueFields
1345    }
1346    onlinePromotionInStores: attributes(keys: ["online_promotion_in_stores"]) {
1347      ...AttributeValueFields
1348    }
1349    varusPerfect: attributes(keys: ["varus_perfect"]) {
1350      ...AttributeValueFields
1351    }
1352
1353    sponsorship {
1354      slot
1355      globalSlot
1356      placementId
1357      adSpotId
1358      creativeId
1359      sessionId
1360      labelHtml
1361      labelCss
1362      tracking {
1363        impression
1364        click
1365        viewability
1366        engagement
1367      }
1368    }
1369  }
1370`),W=(0,n.UG)(`
1371  fragment ProductListItemFields on Product {
1372    # Core identification
1373    id
1374    sku
1375    name
1376    type
1377    status
1378    visibility
1379    urlKey
1380
1381    # Flags
1382    isNew
1383    is18Plus
1384    isTobacco
1385    isRichActive
1386    isShippingAllowed
1387
1388    # Physical
1389    weight
1390    volume
1391    wghweigh
1392
1393    # Price information
1394    priceInfo {
1395      price
1396      specialPrice
1397      specialPromoType
1398      discountPercent
1399      specialFrom
1400      specialTo
1401      wholesalePrice
1402      wholesalePriceThreshold
1403      promoPrice
1404      promoPriceThreshold
1405    }
1406
1407    # Availability (shop-specific)
1408    availability {
1409      inStock
1410      available
1411      delivery
1412      pickup
1413      shipping
1414      today
1415      qty
1416      otherMarket
1417      otherRegions
1418    }
1419
1420    # Regional availability (for regional mode without shop)
1421    regionalAvailability {
1422      inStock
1423      available
1424      delivery
1425      pickup
1426      shipping
1427      today
1428      qty
1429      otherMarket
1430      otherRegions
1431    }
1432
1433    # Regional price information
1434    regionalPriceInfo {
1435      price
1436      specialPrice
1437      specialPromoType
1438      discountPercent
1439      specialFrom
1440      specialTo
1441      wholesalePrice
1442      wholesalePriceThreshold
1443      promoPrice
1444      promoPriceThreshold
1445    }
1446
1447    # Quantity step
1448    qtyStep {
1449      isDecimal
1450      minSale
1451      recommended
1452      unit
1453    }
1454
1455    # Brand (minimal)
1456    brand {
1457      id
1458      name
1459      urlKey
1460    }
1461
1462    # Primary category
1463    primaryCategory {
1464      id
1465      name
1466      urlKey
1467    }
1468
1469    # Image gallery (main image only)
1470    gallery {
1471      mainImageTimestamp
1472    }
1473
1474    # Review summary
1475    reviewSummary {
1476      averageRating
1477      count
1478    }
1479
1480    # Promotions (only labels for badges)
1481    promotions {
1482      id
1483      name
1484      label {
1485        text
1486        color
1487        icon
1488      }
1489    }
1490  }
1491`)},89239:function(M,I,o){o.d(I,{n_:function(){return c.n_},tv:function(){return c.tv}});var c=o(11093)}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.