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.