1(self.webpackChunkvue_storefront=self.webpackChunkvue_storefront||[]).push([[938],{2248:function(S,C,s){"use strict";s.d(C,{CategoryServiceBridge:function(){return F},extractCategoryFiltersFromSearchQuery:function(){return O}});var P=s(38481),k=s(83546);let d=null;function i(){if(d)return d;const{GraphQLCategoryAdapter:r}=s(83546);return d=new r,d}var p=s(79665);async function w(r,_,R){const A=Date.now();let D=!0;try{return await R()}catch(L){throw D=!1,L}finally{p.V.debug(`CategoryServiceBridge.${r}`,"data-layer:category",{..._,ok:D,durationMs:Date.now()-A})()}}const F={async loadCategoryPage(r){return w("loadCategoryPage",{categoryId:r.categoryId,hasScope:!!r.scope},()=>i().loadCategoryPage(r))},async loadCategoryPageByPath(r){return w("loadCategoryPageByPath",{path:r.path,hasScope:!!r.scope},()=>i().loadCategoryPageByPath(r))},async loadCategoryPageByRouteDual(r){return w("loadCategoryPageByRouteDual",{filteredPath:r.filteredPath,cleanPath:r.cleanPath,hasScope:!!r.scope},()=>i().loadCategoryPageByRouteDual(r))},async loadCategoryPageById(r){return w("loadCategoryPageById",{categoryId:r.categoryId,hasScope:!!r.scope},()=>i().loadCategoryPageById(r))},async loadFiltersOnly(r,_){return w("loadFiltersOnly",{categoryId:r,hasScope:!!_},()=>i().loadFiltersOnly(r,_))},async loadCategoryEntity(r,_){return w("loadCategoryEntity",{categoryId:r,hasScope:!!_},()=>i().loadCategoryEntity(r,_))},async loadRouteInfo(r,_){return w("loadRouteInfo",{path:r,hasScope:!!_},()=>i().loadRouteInfo(r,_))}};var g=null;const l=/^sqpp_data_(?:region_)?(?:\d+|default)\.(price|sort_price)$/,m=new Set(["has_promotion_in_stores","has_promotion_in_region"]);function I(r){return!!r&&typeof r.getAppliedFilters=="function"}function T(r){if(r==null)return;const _=Number(r);return Number.isFinite(_)?_:void 0}function b(r){if(!r||typeof r!="object"||Array.isArray(r))return null;const _=T(r.gte??r.from),R=T(r.lte??r.to);if(_==null&&R==null)return null;const A={};return _!=null&&(A.from=_),R!=null&&(A.to=R),A}function $(r){if(Array.isArray(r))return r.map(String);if(r&&typeof r=="object"){if(Array.isArray(r.in))return r.in.map(String);if("eq"in r)return[String(r.eq)];if(Array.isArray(r.values))return r.values.map(String)}return r==null?[]:[String(r)]}function O(r,_){if(!I(r))return{};let R=[];try{R=r.getAppliedFilters()||[]}catch{return{}}const A={};for(const D of R){if(!D||typeof D.attribute!="string")continue;const L=D.attribute,V=D.value;if(L.match(l)){const K=b(V);K&&!A.priceRange&&(A.priceRange=K);continue}if(_.isPromotionUrl&&m.has(L)&&!A.promotion){$(V).length>0&&(A.promotion=!0);continue}}return A}},3312:function(S,C,s){"use strict";s.d(C,{$W:function(){return I}});var P=s(11127),k=s.n(P),d=s(65606);let F=typeof window>"u"?(()=>{try{return d.configModule||{}}catch{return{}}})():(()=>{try{return window.__INITIAL_STATE__.config||{}}catch{return{}}})(),g=null;function l(b){if(typeof b!="object"||b===null)return b;const $=Array.isArray(b)?[]:{};for(const O in b)b.hasOwnProperty(O)&&($[O]=l(b[O]));return Object.freeze($)}function m(){g=l(F)}m();const I=new Proxy({},{get(b,$){return $==="toJSON"?()=>g:$==="valueOf"?()=>g:$==="toString"?()=>JSON.stringify(g):g[$]},has(b,$){return $ in g},ownKeys(){return Object.keys(g)},getOwnPropertyDescriptor(b,$){if($ in g)return{enumerable:!0,configurable:!0,writable:!1,value:g[$]}},set(){return!1}});function T(b){return F=deepmerge()(F,b),m(),I}},4993:function(S,C,s){"use strict";var P=s(85471),k=s(95283),d=s(3312);function i(g){return(config.server?.cacheTagsMapping||{product:"P",category:"C",banner:"B",promotion_category:"PC",promotion_page:"PP",brand:"BR"})[g]||"P"}function p(g){if(!isServer||!config.server?.useOutputCacheTagging)return;const l=Vue.prototype.$cacheTags;l&&typeof l.add=="function"&&g.forEach(m=>{try{l.add(m)}catch{}})}function w(g,l){const m=i(g);return l.filter(I=>I.id!==void 0).map(I=>`${m}${I.id}`)}function F(g){if(!g||g.length===0)return;const l=w("product",g);p(l),p(["product"])}},29438:function(S,C,s){"use strict";s.d(C,{D3:function(){return P.D3}});var P=s(80220),k=s(35960)},29447:function(){},35960:function(S,C,s){"use strict";s.d(C,{UG:function(){return w}});function P(F,g){return g}function k(F,g){return F}function d(F,g,l){const m=F.__meta__?.deferredFields;if(!m)return!0;const T=g.definitions[0]?.name?.value,b=T&&m[T]||[];return b.length>0&&b.every($=>l&&$ in l)}var i=s(56517);const p={"\n fragment CategoryProductFilterFields on CategoryProductFilter {\n code\n label\n type\n isTop\n uriName\n options {\n value\n label\n uriName\n count\n selected\n noIndex\n }\n range {\n min\n max\n selectedMin\n selectedMax\n }\n }\n":i.je,"\n fragment CategoryProductFilterAggFields on CategoryProductFilter {\n code\n type\n uriName\n options {\n value\n label\n count\n uriName\n }\n range {\n min\n max\n }\n }\n":i.IT,"\n fragment CategoryProductSortOptionFields on CategoryProductSortOption {\n code\n label\n }\n":i.A6,"\n fragment CategoryBaseFields on Category {\n id\n name\n urlKey\n level\n parentId\n kind\n childrenTotal\n productsTotal\n }\n":i.x_,"\n fragment CategoryChildBaseFields on CategoryChild {\n id\n name\n urlKey\n level\n parentId\n kind\n childrenTotal\n productsTotal\n }\n":i.Lr,"\n fragment CategoryPageRouteFields on Category {\n id\n pimcoreId\n name\n urlKey\n level\n parentId\n description\n childrenTotal\n productsTotal\n kind\n is18Plus\n isProductCategory\n friendlyFilter {\n id\n name\n url\n singleOption\n meta {\n h1\n title\n keywords\n description\n noIndex\n noFollow\n }\n faq {\n key\n value\n }\n }\n meta {\n h1\n title\n description\n noIndex\n noFollow\n }\n seoBlocks {\n title\n position\n items {\n title\n url\n position\n }\n }\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n }\n }\n }\n banners {\n id\n title\n titleColor\n subtitle\n subtitleColor\n showTitle\n showSubtitle\n showButton\n allowHideButton\n buttonText\n buttonTextColor\n buttonColor\n backgroundColor\n imageDesktop\n imageMobile\n link\n target\n sortOrder\n status\n position\n categoryIds\n dateFrom\n dateTo\n regionalLink\n }\n topCategories {\n id\n title\n url\n icon\n isNew\n position\n }\n products(\n page: $page\n pageSize: $pageSize\n filters: $filters\n sort: $sort\n quickFilters: $quickFilters\n quickFilterCounts: [TODAY, PROMO]\n ) {\n items {\n ...CategoryProductListItemFields\n }\n total\n page\n pageSize\n totalPages\n availableFilters {\n ...CategoryProductFilterFields\n }\n availableSorts {\n ...CategoryProductSortOptionFields\n }\n quickFilters {\n code\n label\n selected\n count\n }\n categoryNavigation {\n mode\n selectedCategoryId\n expandedPathIds\n items {\n id\n name\n urlKey\n level\n parentId\n productsTotal\n selected\n expanded\n hasChildren\n children {\n id\n name\n urlKey\n level\n parentId\n productsTotal\n selected\n expanded\n hasChildren\n children {\n id\n name\n urlKey\n level\n parentId\n productsTotal\n selected\n expanded\n hasChildren\n }\n }\n }\n }\n }\n productList(listId: BRAND_PROMO, limit: 12) @include(if: $loadBrandPromo) {\n ...CategoryProductListItemFields\n }\n }\n":i._m,"\n fragment ProductCoreFields on Product {\n id\n sku\n name\n type\n status\n visibility\n urlKey\n }\n":i.qE,"\n fragment ProductContentFields on Product {\n description\n categorySeoDescription\n }\n":i.S1,"\n fragment ProductPhysicalFields on Product {\n weight\n volume\n }\n":i.oc,"\n fragment ProductFlagsFields on Product {\n isNew\n is18Plus\n isTobacco\n isBoardProduct\n isBoardProductTop\n isDisplayPricePer100g\
1n isVarusPerfect\n isWinterSupport\n isOnlinePromotionInRegion\n isOnlinePromotionInStore\n isRichActive\n }\n":i.QL,"\n fragment BrandFields on Brand {\n id\n name\n urlKey\n categoryId\n subcategories {\n id\n name\n urlKey\n level\n isProductCategory\n position\n }\n }\n":i.tR,"\n fragment PriceInfoFields on PriceInfo {\n price\n specialPrice\n specialPromoType\n discountPercent\n specialFrom\n specialTo\n wholesalePrice\n wholesalePriceThreshold\n promoPrice\n promoPriceThreshold\n }\n":i.xp,"\n fragment AvailabilityFields on Availability {\n inStock\n available\n delivery\n pickup\n shipping\n today\n qty\n otherMarket\n otherRegions\n }\n":i.JJ,"\n fragment CategoryMetaFields on CategoryMeta {\n title\n description\n h1\n }\n":i.lq,"\n fragment CategoryLinkFields on CategoryLink {\n id\n name\n urlKey\n level\n isProductCategory\n position\n meta {\n title\n description\n h1\n }\n }\n":i.gi,"\n fragment ProductImageFields on ProductImage {\n index\n timestamp\n }\n":i.Kj,"\n fragment ProductImageGalleryFields on ProductImageGallery {\n mainImageTimestamp\n carouselImages {\n index\n timestamp\n }\n }\n":i.eP,"\n fragment ReviewSummaryFields on ReviewSummary {\n averageRating\n count\n }\n":i.k1,"\n fragment ReviewFields on Review {\n id\n nickname\n summary\n content\n rating\n upvotes\n downvotes\n createdAt\n comments {\n id\n nickname\n content\n type\n status\n createdAt\n }\n }\n":i.cy,"\n fragment PromotionLabelFields on PromotionLabel {\n text\n color\n icon\n }\n":i.bf,"\n fragment PromotionPageFields on PromotionPage {\n id\n name\n urlKey\n description\n shortDescription\n isActive\n dateFrom\n dateTo\n desktopImage\n mobileImage\n label {\n text\n color\n icon\n }\n }\n":i.vG,"\n fragment BannerFields on Banner {\n id\n title\n subtitle\n link\n target\n imageDesktop\n imageMobile\n position\n sortOrder\n status\n dateFrom\n dateTo\n showTitle\n showSubtitle\n showButton\n allowHideButton\n buttonText\n backgroundColor\n titleColor\n subtitleColor\n buttonColor\n buttonTextColor\n regionalLink\n }\n":i.mA,"\n fragment ShopFields on Shop {\n id\n name\n address\n phone\n workTime\n lat\n long\n hasCafe\n hasDrive\n hasDelivery\n hasFreshFish\n hasHomeBasket\n hasOwnProduction\n hasOwnMeatProduction\n hasWifi\n hasGenerator\n hasBombShelter\n isDarkstore\n isEnabled\n inactiveReason\n tmsId\n square\n cityId\n city {\n id\n name\n lat\n long\n }\n }\n":i.k,"\n fragment ShopAvailabilityFields on ShopAvailability {\n shop {\n id\n name\n }\n availability {\n inStock\n available\n delivery\n pickup\n shipping\n today\n qty\n otherMarket\n otherRegions\n }\n priceInfo {\n price\n specialPrice\n discountPercent\n specialFrom\n specialTo\n wholesalePrice\n wholesalePriceThreshold\n promoPrice\n promoPriceThreshold\n }\n }\n":i.$w,"\n fragment QuantityStepFields on QuantityStep {\n isDecimal\n minSale\n recommended\n unit\n }\n":i.vw,"\n fragment AttributeOptionFields on AttributeOption {\n id\n label\n }\n":i.db,"\n fragment AttributeValueFields on AttributeValue {\n code\n label\n group\n valueType\n ... on BooleanAttributeValue {\n boolValue: value\n }\n ... on DateTimeAttributeValue {\n dateValue: value\n }\n ... on NumberAttributeValue {\n numberValue: value\n }\n ... on EnumAttributeValue {\n option {\n ...AttributeOptionFields\n }\n enumRaw: raw\n }\n ... on MultiEnumAttributeValue {\n options {\n ...AttributeOptionFields\n }\n multiEnumRaw: raw\n }\n ... on TextAttributeValue {\n textValue: value\n }\n }\n":i.P3,'\n fragment ProductFullFields on Product {\n # Core identification\n id\n sku\n name\n type\n status\n visibility\n urlKey\n\n # Content\n description\n categorySeoDescription\n\n # Physical attributes\n weight\n volume\n\n # Flags\n isNew\n is18Plus\n isTobacco\n isCertificate\n isShippingAllowed\n isBoardProduct\n isBoardProductTop\n isDisplayPricePer100g\
1n isVarusPerfect\n isWinterSupport\n isOnlinePromotionInRegion\n isOnlinePromotionInStore\n isRichActive\n\n # Price information\n priceInfo {\n price\n specialPrice\n specialPromoType\n discountPercent\n specialFrom\n specialTo\n wholesalePrice\n wholesalePriceThreshold\n promoPrice\n promoPriceThreshold\n }\n\n # Regional price information\n regionalPriceInfo {\n price\n specialPrice\n specialPromoType\n discountPercent\n specialFrom\n specialTo\n wholesalePrice\n wholesalePriceThreshold\n promoPrice\n promoPriceThreshold\n }\n\n # Availability\n availability {\n inStock\n available\n delivery\n pickup\n shipping\n today\n qty\n otherMarket\n otherRegions\n }\n\n # Regional availability\n regionalAvailability {\n inStock\n available\n delivery\n pickup\n shipping\n today\n qty\n otherMarket\n otherRegions\n }\n\n # Quantity step\n qtyStep {\n isDecimal\n minSale\n recommended\n unit\n }\n\n # Brand\n brand {\n id\n name\n urlKey\n categoryId\n subcategories {\n id\n name\n urlKey\n level\n isProductCategory\n position\n }\n }\n\n # Categories\n categories {\n id\n name\n urlKey\n level\n isProductCategory\n position\n meta {\n title\n description\n h1\n }\n }\n\n # Primary category\n primaryCategory {\n id\n name\n urlKey\n level\n isProductCategory\n position\n meta {\n title\n description\n h1\n }\n }\n\n # Image gallery\n gallery {\n mainImageTimestamp\n carouselImages {\n index\n timestamp\n }\n }\n\n # Review summary\n reviewSummary {\n averageRating\n count\n }\n reviews(first: 50) {\n totalCount\n edges {\n node {\n id\n nickname\n summary\n content\n rating\n upvotes\n downvotes\n createdAt\n comments {\n id\n nickname\n content\n type\n status\n createdAt\n }\n }\n }\n }\n\n # Promotions\n promotions {\n id\n name\n urlKey\n description\n shortDescription\n isActive\n dateFrom\n dateTo\n desktopImage\n mobileImage\n label {\n text\n color\n icon\n }\n }\n\n # Banners\n banners {\n id\n title\n subtitle\n link\n target\n imageDesktop\n imageMobile\n position\n sortOrder\n status\n dateFrom\n dateTo\n showTitle\n showSubtitle\n showButton\n allowHideButton\n buttonText\n backgroundColor\n titleColor\n subtitleColor\n buttonColor\n buttonTextColor\n regionalLink\n }\n\n # Product icons (attribute images)\n icons {\n label\n value\n }\n\n # Markdown flag\n isMarkdown\n\n # Markdown data (structured, replaces attribute-based markdown fields)\n markdownData {\n markdownId\n title\n description\n discountPercent\n shops\n originalProduct {\n id\n urlPath\n }\n }\n\n # Product labels (native labels from backend)\n productLabels {\n text\n color\n icon\n dateFrom\n dateTo\n addCountdown\n addDate\n }\n\n # Property data (product variants/options)\n propertyData {\n label\n options {\n isCurrent\n label\n productId\n propertyId\n url\n }\n }\n\n # Shop availability\n shopAvailability {\n shop {\n id\n name\n address\n phone\n workTime\n lat\n long\n hasCafe\n hasDrive\n hasDelivery\n hasFreshFish\n hasHomeBasket\n hasOwnProduction\n hasOwnMeatProduction\n hasWifi\n hasGenerator\n hasBombShelter\n isDarkstore\n isEnabled\n inactiveReason\n tmsId\n square\n cityId\n city {\n id\n name\n lat\n long\n }\n }\n availability {\n inStock\n available\n delivery\n pickup\n shipping\n today\n qty\n otherMarket\n otherRegions\n }\n priceInfo {\n price\n specialPrice\n specialPromoType\n discountPercent\n specialFrom\n specialTo\n wholesalePrice\n wholesalePriceThreshold\n promoPrice\n promoPriceThreshold\n }\n }\n\n # Product attributes\n topAttributes {\n ...AttributeValueFields\n }\n\n allAttributes {\n ...AttributeValueFields\n }\n\n filterAttributes {\n ...AttributeValueFields\n }\n\n onlinePromotionInStores: attributes(keys: ["online_promotion_in_stores"]) {\n ...AttributeValueFields\n }\n\n newProductItem: attributes(keys: ["newProductItem"]) {\n ...AttributeValueFields\n }\n\n newsFromDate: attributes(keys: ["news_from_date"]) {\n ...AttributeValueFields\n }\n\n newsToDate: attributes(keys: ["news_to_date"]) {\n ...AttributeValueFields\n }\n\n wghweigh\n\n packingtype: attributes(keys: ["packingtype"]) {\
1n ...AttributeValueFields\n }\n\n ratingVivino: attributes(keys: ["ratingVivino"]) {\n ...AttributeValueFields\n }\n\n markdownId: attributes(keys: ["markdown_id"]) {\n ...AttributeValueFields\n }\n\n markdownTitle: attributes(keys: ["markdown_title"]) {\n ...AttributeValueFields\n }\n\n markdownDiscount: attributes(keys: ["markdown_discount"]) {\n ...AttributeValueFields\n }\n\n markdownDescription: attributes(keys: ["markdown_description"]) {\n ...AttributeValueFields\n }\n\n # Product lists for carousels (PDP sliders)\n newProducts: productList(listId: PDP_NEW, limit: 12) {\n ...ProductListItemFields\n }\n topProducts: productList(listId: PDP_MORE_FROM_CATEGORY, limit: 12) {\n ...ProductListItemFields\n }\n recommendedProducts: productList(listId: PDP_RECOMMENDED_TO_VIEW, limit: 12) {\n ...ProductListItemFields\n }\n }\n':i.O3,'\n fragment CategoryProductListItemFields on Product {\n ...ProductListItemFields\n\n # Extra flags\n isBoardProduct\n isBoardProductTop\n isOnlinePromotionInRegion\n isOnlinePromotionInStore\n isWinterSupport\n isShippingAllowed\n isMarkdown\n isDisplayPricePer100g\n\n # Content / physical\n description\n weight\n volume\n\n # Full categories list (the baseline only ships primaryCategory)\n categories {\n id\n name\n urlKey\n level\n isProductCategory\n position\n }\n\n # Extend promotions with the badge countdown window\n # (merges with ProductListItemFields.promotions per GraphQL spec)\n promotions {\n dateFrom\n dateTo\n }\n\n # Native badge labels\n productLabels {\n text\n color\n icon\n dateFrom\n dateTo\n addCountdown\n addDate\n }\n\n # Markdown product overlay\n markdownData {\n markdownId\n title\n description\n discountPercent\n shops\n originalProduct {\n id\n urlPath\n }\n }\n\n # Attribute aliases used by category card renderers\n newsFromDate: attributes(keys: ["news_from_date"]) {\n ...AttributeValueFields\n }\n newsToDate: attributes(keys: ["news_to_date"]) {\n ...AttributeValueFields\n }\n packingtype: attributes(keys: ["packingtype"]) {\n ...AttributeValueFields\n }\n onlinePromotionInStores: attributes(keys: ["online_promotion_in_stores"]) {\n ...AttributeValueFields\n }\n varusPerfect: attributes(keys: ["varus_perfect"]) {\n ...AttributeValueFields\n }\n\n sponsorship {\n slot\n globalSlot\n placementId\n adSpotId\n creativeId\n sessionId\n labelHtml\n labelCss\n tracking {\n impression\n click\n viewability\n engagement\n }\n }\n }\n':i.aW,"\n fragment ProductListItemFields on Product {\n # Core identification\n id\n sku\n name\n type\n status\n visibility\n urlKey\n\n # Flags\n isNew\n is18Plus\n isTobacco\n isRichActive\n isShippingAllowed\n\n # Physical\n weight\n volume\n wghweigh\n\n # Price information\n priceInfo {\n price\n specialPrice\n specialPromoType\n discountPercent\n specialFrom\n specialTo\n wholesalePrice\n wholesalePriceThreshold\n promoPrice\n promoPriceThreshold\n }\n\n # Availability (shop-specific)\n availability {\n inStock\n available\n delivery\n pickup\n shipping\n today\n qty\n otherMarket\n otherRegions\n }\n\n # Regional availability (for regional mode without shop)\n regionalAvailability {\n inStock\n available\n delivery\n pickup\n shipping\n today\n qty\n otherMarket\n otherRegions\n }\n\n # Regional price information\n regionalPriceInfo {\n price\n specialPrice\n specialPromoType\n discountPercent\n specialFrom\n specialTo\n wholesalePrice\n wholesalePriceThreshold\n promoPrice\n promoPriceThreshold\n }
1\n\n # Quantity step\n qtyStep {\n isDecimal\n minSale\n recommended\n unit\n }\n\n # Brand (minimal)\n brand {\n id\n name\n urlKey\n }\n\n # Primary category\n primaryCategory {\n id\n name\n urlKey\n }\n\n # Image gallery (main image only)\n gallery {\n mainImageTimestamp\n }\n\n # Review summary\n reviewSummary {\n averageRating\n count\n }\n\n # Promotions (only labels for badges)\n promotions {\n id\n name\n label {\n text\n color\n icon\n }\n }\n }\n":i.yc,"\n query CategoryEntity(\n $id: ID!\n $shopId: Int\n $regionId: Int\n $locale: String\n $deliveryMethod: DeliveryMethod\n ) {\n category(\n id: $id\n shopId: $shopId\n regionId: $regionId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n id\n pimcoreId\n name\n urlKey\n level\n parentId\n description\n childrenTotal\n productsTotal\n kind\n is18Plus\n isProductCategory\n meta {\n h1\n title\n description\n noIndex\n noFollow\n }\n seoBlocks {\n title\n position\n items {\n title\n url\n position\n }\n }\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n }\n }\n }\n }\n }\n":i.n_,"\n query CategoryByRoute(\n $path: String!\n $shopId: Int\n $regionId: Int\n $locale: String\n $deliveryMethod: DeliveryMethod\n ) {\n route(\n path: $path\n shopId: $shopId\n regionId: $regi
1onId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n notFound\n resolved {\n __typename\n ... on Category {\n id\n name\n urlKey\n level\n parentId\n description\n childrenTotal\n productsTotal\n brandCategory\n is18Plus\n isProductCategory\n meta {\n h1\n title\n description\n noIndex\n noFollow\n }\n seoBlocks {\n title\n position\n items {\n title\n url\n position\n }\n }\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n }\n }\n }\n }\n }\n }\n }\n":i.Ur,"\n query CategoryProducts(\n $id: ID!\n $shopId: Int\n $regionId: Int\n $locale: String\n $deliveryMethod: DeliveryMethod\n $page: Int\n $pageSize: Int\n $filters: [CategoryProductFilterInput!]\n $sort: CategoryProductSortInput\n $quickFilters: [CategoryQuickFilterInput!]\n ) {\n category(\n id: $id\n shopId: $shopId\n regionId: $regi
1onId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n id\n name\n urlKey\n level\n parentId\n description\n childrenTotal\n productsTotal\n kind\n is18Plus\n isProductCategory\n meta {\n h1\n title\n description\n noIndex\n noFollow\n }\n seoBlocks {\n title\n position\n items {\n title\n url\n position\n }\n }\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n }\n }\n }\n products(\n page: $page\n pageSize: $pageSize\n filters: $filters\n sort: $sort\n quickFilters: $quickFilters\n ) {\n items {\n ...CategoryProductListItemFields\n }\n total\n page\n pageSize\n totalPages\n availableFilters {\n ...CategoryProductFilterFields\n }\n availableSorts {\n ...CategoryProductSortOptionFields\n }\n }\n }\n }\n":i.Y1,"\n query CategoryFilters(\n $id: ID!\n $shopId: Int\n $regionId: Int\n $locale: String\n $deliveryMethod: DeliveryMethod\n ) {\n category(\n id: $id\n shopId: $shopId\n regionId: $regi
1onId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n products(pageSize: 0) {\n availableFilters {\n ...CategoryProductFilterFields\n }\n }\n }\n }\n":i.pA,"\n query CategoryPageById(\n $id: ID!\n $shopId: Int\n $regionId: Int\n $locale: String\n $deliveryMethod: DeliveryMethod\n $page: Int\n $pageSize: Int\n $filters: [CategoryProductFilterInput!]\n $sort: CategoryProductSortInput\n $quickFilters: [CategoryQuickFilterInput!]\n $loadBrandPromo: Boolean = false\n ) {\n category(\n id: $id\n shopId: $shopId\n regionId: $regionId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n id\n pimcoreId\n name\n urlKey\n level\n parentId\n description\n childrenTotal\n productsTotal\n kind\n is18Plus\n isProductCategory\n friendlyFilter {\n id\n name\n url\n singleOption\n meta {\n h1\n title\n keywords\n description\n noIndex\n noFollow\n }\n faq {\n key\n value\n }\n }\n meta {\n h1\n title\n description\n noIndex\n noFollow\n }\n seoBlocks {\n title\n position\n items {\n title\n url\n position\n }\n }\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n children {\n ...CategoryChildBaseFields\n }\n }\n }\n banners {\n id\n title\n titleColor\n subtitle\n subtitleColor\n showTitle\n showSubtitle\n showButton\n allowHideButton\n buttonText\n buttonTextColor\n buttonColor\n backgroundColor\n imageDesktop\n imageMobile\n link\n target\n sortOrder\n status\n position\n categoryIds\n dateFrom\n dateTo\n regionalLink\n }\n topCategories {\n id\n title\n url\n icon\n isNew\n position\n }\n products(\n page: $page\n pageSize: $pageSize\n filters: $filters\n sort: $sort\n quickFilters: $quickFilters\n quickFilterCounts: [TODAY, PROMO]\n ) {\n items {\n ...CategoryProductListItemFields\n }\n total\n page\n pageSize\n totalPages\n availableFilters {\n ...CategoryProductFilterFields\n }\n availableSorts {\n ...CategoryProductSortOptionFields\n }\n quickFilters {\n code\n label\n selected\n count\n }\n categoryNavigation {\n mode\n selectedCategoryId\n expandedPathIds\n items {\n id\n name\n urlKey\n level\n parentId\n productsTotal\n selected\n expanded\n hasChildren\n children {\n id\n name\n urlKey\n level\n parentId\n productsTotal\n selected\n expanded\n hasChildren\n children {\n id\n name\n urlKey\n level\n parentId\n productsTotal\n selected\n expanded\n hasChildren\n }\n }\n }\n }\n }\n productList(listId: BRAND_PROMO, limit: 12) @include(if: $loadBrandPromo) {\n ...CategoryProductListItemFields\n }\n }\n }\n":i.T2,"\n query CategoryPageByRoute(\n $path: String!\n $shopId: Int\n $regionId: Int\n $locale: String\n $deliveryMethod: DeliveryMethod\n $page: Int\n $pageSize: Int\n $filters: [CategoryProductFilterInput!]\n $sort: CategoryProductSortInput\n $quickFilters: [CategoryQuickFilterInput!]\n $loadBrandPromo: Boolean = false\n ) {\n route(\n path: $path\n shopId: $shopId\n regionId: $regi
1onId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n canonicalPath\n notFound\n redirect {\n code\n to\n }\n resolved {\n __typename\n ... on Category {\n ...CategoryPageRouteFields\n }\n }\n }\n }\n":i.Bu,"\n query CategoryPageByRouteDual(\n $filteredPath: String!\n $cleanPath: String!\n $shopId: Int\n $regionId: Int\n $locale: String\n $deliveryMethod: DeliveryMethod\n $page: Int\n $pageSize: Int\n $filters: [CategoryProductFilterInput!]\n $sort: CategoryProductSortInput\n $quickFilters: [CategoryQuickFilterInput!]\n $loadBrandPromo: Boolean = false\n ) {\n filtered: route(\n path: $filteredPath\n shopId: $shopId\n regionId: $regionId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n canonicalPath\n notFound\n redirect {\n code\n to\n }\n resolved {\n __typename\n ... on Category {\n ...CategoryPageRouteFields\n }\n }\n }\n unfiltered: route(\n path: $cleanPath\n shopId: $shopId\n regionId: $regi
1onId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n notFound\n resolved {\n __typename\n ... on Category {\n id\n products(page: 1, pageSize: 1, filters: $filters) {\n availableFilters {\n ...CategoryProductFilterAggFields\n }\n }\n }\n }\n }\n }\n":i.ns,"\n query RouteInfo(\n $path: String!\n $shopId: Int\n $regionId: Int\n $locale: String\n $deliveryMethod: DeliveryMethod\n ) {\n route(\n path: $path\n shopId: $shopId\n regionId: $regionId\n locale: $locale\n deliveryMethod: $deliveryMethod\n ) {\n canonicalPath\n notFound\n redirect {\n code\n to\n }\n resolved {\n __typename\n ... on Category {\n id\n }\n }\n }\n }\n":i.tb,"\n query Product($id: ID!) {\n product(id: $id) {\n ...ProductCoreFields\n ...ProductContentFields\n ...ProductPhysicalFields\n ...ProductFlagsFields\n brand {\n ...BrandFields\n }\n }\n }\n":i.xq,"\n query ProductById($id: ID!, $shopId: Int, $regionId: Int, $deliveryMethod: DeliveryMethod) {\n product(id: $id, shopId: $shopId, regionId: $regi
1onId, deliveryMethod: $deliveryMethod) {\n ...ProductFullFields\n reviews(first: 50) {\n totalCount\n edges {\n node {\n id\n nickname\n summary\n content\n rating\n upvotes\n downvotes\n createdAt\n comments {\n id\n nickname\n content\n type\n status\n createdAt\n }\n }\n }\n }\n }\n }\n":i.TV,"\n query ProductByRoute($path: String!, $shopId: Int, $regionId: Int, $deliveryMethod: DeliveryMethod) {\n route(path: $path, shopId: $shopId, regionId: $regionId, deliveryMethod: $deliveryMethod) {\n canonicalPath\n notFound\n redirect {\n code\n to\n }\n resolved {\n ... on Product {\n ...ProductFullFields\n reviews(first: 50) {\n totalCount\n edges {\n node {\n id\n nickname\n summary\n content\n rating\n upvotes\n downvotes\n createdAt\n comments {\n id\n nickname\n content\n type\n status\n createdAt\n }\n }\n }\n }\n }\n }\n }\n }\n":i.J7};function w(F){return p[F]??{}}},38481:function(){},45383:function(S,C,s){"use strict";s.d(C,{getDataSourceForEntity:function(){return P},getGraphQLEndpoint:function(){return k}});function P(p,w){return p?.enabled&&(p.entities[w]||p.default)||"elasticsearch"}function k(p,w,F){if(!p?.graphql)return"/graphql";if(F){const T=F.isServer?p.graphql.url_ssr_graphql:p.graphql.url_client_graphql;if(T)return T}const{host:g,port:l,endpoints:m}=p.graphql,I=m?.[w]||"/graphql";if(g){const T="https",b=l?`:${l}`:"";return`${T}://${g}${b}${I}`}return I}var d=s(99077),i=s(29447)},50477:function(){},62501:function(S,C,s){"use strict";s.d(C,{CS:function(){return d}});const P=new Map;function k(){P.clear()}function d(g,l){if(P.has(g))return P.get(g);const m=l();return P.set(g,m),m}const i={product:{entityType:"product",primary:"elasticsearch",fallback:"graphql",enableFallback:!0,timeout:3e3,retryOnTimeout:!0},category:{entityType:"category",primary:"graphql",fallback:null,enableFallback:!1,timeout:3e3,retryOnTimeout:!0}};function p(g){const l=i[g];if(!l)throw new Error(`Unknown entity type: ${g}. Available: ${Object.keys(i).join(", ")}`);return l}function w(g){const l=p(g);return l.enableFallback&&l.fallback!==null}class F{constructor(l,m,I,T){this.entityType=l,this.primaryAdapter=m,this.fallbackAdapter=I,this.logger=T,this.strategy=getStrategy(l),this.logger.info("CompositeAdapter",`Initialized for ${l}`,{primary:this.strategy.primary,fallback:this.strategy.fallback,enableFallback:this.strategy.enableFallback,timeout:this.strategy.timeout})}async get(l){try{return await this.executeWithTimeout(()=>this.primaryAdapter.get(l),this.strategy.timeout,"primary")}catch(m){if(this.logger.error(`${this.entityType}/get:primary-failed`,m,{id:l,adapter:this.strategy.primary}),!hasFallback(this.entityType)||!this.fallbackAdapter)throw m;try{return this.logger.info(`${this.entityType}/get:attempting-fallback`,"Primary adapter failed, attempting fallback",{id:l}),await this.executeWithTimeout(()=>this.fallbackAdapter.get(l),this.strategy.timeout,"fallback")}catch(I){throw this.logger.error(`${this.entityType}/get:fallback-failed`,I,{id:l,adapter:this.strategy.fallback}),new Error(`Both ${this.strategy.primary} and ${this.strategy.fallback} adapters failed for ${this.entityType}/get(${l}). Primary error: ${m.message}. Fallback error: ${I.message}`)}}}async getMultiple(l){try{return await this.executeWithTimeout(()=>this.primaryAdapter.getMultiple(l),this.strategy.timeout,"primary")}catch(m){if(this.logger.error(`${this.entityType}/getMultiple:primary-failed`,m,{idsCount:l.length,adapter:this.strategy.primary}),!hasFallback(this.entityType)||!this.fallbackAdapter)throw m;try{return this.logger.info(`${this.entityType}/getMultiple:attempting-fallback`,"Primary adapter failed, attempting fallback",{idsCount:l.length}),await this.executeWithTimeout(()=>this.fallbackAdapter.getMultiple(l),this.strategy.timeout,"fallback")}catch(I){throw this.logger.error(`${this.entityType}/getMultiple:fallback-failed`,I,{idsCount:l.length,adapter:this.strategy.fallback}),new Error(`Both ${this.strategy.primary} and ${this.strategy.fallback} adapters failed for ${this.entityType}/getMultiple(${l.length} ids). Primary error: ${m.message}. Fallback error: ${I.message}`)}}}async search(l){try{return await this.executeWithTimeout(()=>this.primaryAdapter.search(l),this.strategy.timeout,"primary")}catch(m){if(this.logger.error(`${this.entityType}/search:primary-failed`,m,{queryType:typeof l,adapter:this.strategy.primary}),!hasFallback(this.entityType)||!this.fallbackAdapter)throw m;try{return this.logger.info(`${this.entityType}/search:attempting-fallback`,"Primary adapter failed, attempting fallback",{queryType:typeof l}),await this.executeWithTimeout(()=>this.fallbackAdapter.search(l),this.strategy.timeout,"fallback")}catch(I){throw this.logger.error(`${this.entityType}/search:fallback-failed`,I,{queryType:typeof l,adapter:this.strategy.fallback}),new Error(`Both ${this.strategy.primary} and ${this.strategy.fallback} adapters failed for ${this.entityType}/search. Primary error: ${m.message}. Fallback error: ${I.message}`)}}}executeWithTimeout(l,m=5e3,I){return Promise.race([l(),new Promise((T,b)=>setTimeout(()=>b(new Error(`${I}
1 adapter timeout after ${m}ms for ${this.entityType}`)),m))])}}},73712:function(S,C,s){"use strict";s.d(C,{getCachedAdapter:function(){return p.CS},getDataSourceForEntity:function(){return P.getDataSourceForEntity}});var P=s(45383),k=s(4993),d=s(29438),i=s(84309),p=s(62501)},75797:function(S,C,s){var P=s(65606);const{AbortController:k}=s(94441);S.exports=function(){const d=new k,i=setTimeout(()=>{d.abort()},3e4);arguments[1]=arguments?.[1]?{...arguments?.[1],signal:d.signal}:{signal:d.signal};try{return P.nativeFetch.apply(null,arguments)}catch(p){throw new Error(p)}finally{clearTimeout(i)}}},76863:function(S){"use strict";S.exports=JSON.parse('{"possibleTypes":{"AttributeValue":["BooleanAttributeValue","DateTimeAttributeValue","EnumAttributeValue","MultiEnumAttributeValue","NumberAttributeValue","TextAttributeValue"],"Routable":["Category","Product"]}}')},78047:function(S,C,s){"use strict";s.d(C,{G:function(){return k}});function P(d){const i=Array.isArray(d.children)?d.children.map(P):[],p=Number(d.id),w=Number.isFinite(p)?p:d.id,F=Number(d.parentId),g=d.parentId==null?0:Number.isFinite(F)?F:d.parentId;return{id:w,name:d.name,slug:d.urlKey,url_key:d.urlKey,url_path:d.urlKey,path:d.urlKey,level:d.level,parent_id:g,is_active:!0,include_in_menu:!0,custom_url:void 0,countProduct:d.productsTotal??0,product_count:d.productsTotal??0,selected:!!d.selected,children_data:i}}function k(d){return!d||!Array.isArray(d.items)?[]:d.items.map(P)}},83546:function(S,C,s){"use strict";s.r(C),s.d(C,{GraphQLCategoryAdapter:function(){return sn}});var P=s(29438),k=s(84309),d=s(13977),i=s(89239),p=s(79665);const w=new Set(["promotion_banner_ids"]);function F(n){return{doc_count_error_upper_bound:0,sum_other_doc_count:0,buckets:n.map(e=>({key:String(e.value),doc_count:e.count,label:e.label}))}}function g(n){const e={};if(!n||!n.length)return e;for(const t of n){if(!t||!t.code)continue;const o=t.code;if(t.type==="RANGE"&&o==="price"){const y=t.range?.min!=null?Number(t.range.min):NaN,h=t.range?.max!=null?Number(t.range.max):NaN;!isNaN(y)&&!isNaN(h)&&(e.agg_price={filter:{price_min:{value:y},price_max:{value:h}}});continue}if(!Array.isArray(t.options))continue;const c=F(t.options);e[`agg_terms_${o}`]=c,e[`agg_terms_${o}_options`]=c,w.has(o)&&(e[`agg_terms_${o}.keyword`]=c)}return e}function l(n){return Array.isArray(n)?n.filter(e=>e&&e.code&&e.type!=="RANGE").map(e=>({attribute_code:e.code,attribute_id:e.code,frontend_label:e.label,default_frontend_label:e.label,uri_name:e.uriName||void 0,options:Array.isArray(e.options)?e.options.map(t=>({value:t?.value!=null?String(t.value):void 0,label:t?.label,uri_name:t?.uriName||void 0})):[]})):[]}function m(n){const e={};if(!Array.isArray(n))return e;for(const t of n){if(!t?.uriName||!Array.isArray(t.options))continue;const o=t.options.filter(c=>c?.uriName&&c.noIndex===!0).map(c=>c.uriName);o.length&&(e[t.uriName]=o)}return e}function I(n,e=0,t,o=!1){const c=n?.category;if(!c)return p.V.warn("CategoryMapper: empty category response","data-layer:category")(),{items:[],total:0,perPage:0,totalPages:0,start:e,aggregations:{},attributeMetadata:[],noindexFilterOptions:{}};const y=c.products,u=(Array.isArray(y?.items)?y.items:[]).map(v=>{try{const f=(0,i.tv)(v,t??void 0,o);return f.sponsorship=v?.sponsorship??null,f}catch(f){return p.V.warn(`CategoryMapper: failed to map product ${v?.id??"?"}: ${f?.message}`,"data-layer:category")(),v}}),a=y?.availableFilters||[];return{items:u,total:y?.total||0,perPage:y?.pageSize||u.length,totalPages:y?.totalPages||0,start:e,aggregations:g(a),attributeMetadata:l(a),noindexFilterOptions:m(a)}}function T(n){return n?{id:n.id,name:n.name,slug:n.urlKey||"",url_key:n.urlKey||"",url_path:n.urlKey||"",level:n.level??0,parent_id:n.parentId??0,is_active:!0,product_count:n.productsTotal??0,children_count:String(n.childrenTotal??0),children_data:b(n.children),include_in_menu:!0,position:0}:{}}function b(n){return Array.isArray(n)?n.map(T):[]}function $(){return{id:0,name:"",slug:"",url_key:"",url_path:"",level:0,parent_id:null,path:"",is_active:!1,product_count:0,children_count:"0",children_data:[],include_in_menu:!1,position:0,noindex_filters:[],custom_url:"",brand_category:"",is_18_plus:!1,description:"",h_1:"",meta_title:"",meta_description:"",is_noindex:!1,is_nofollow:!1,seo_block:null}}function O(n){if(!n)return null;const e=n.meta||{};return{id:n.id,name:n.name??null,url:n.url,single_option:!!n.singleOption,meta_h1:e.h1??null,meta_title:e.title??null,meta_keywords:e.keywords??null,meta_description:e.description??null,index:e.noIndex?"NOINDEX":"INDEX",follow:e.noFollow?"NOFOLLOW":"FOLLOW",faq:Array.isArray(n.faq)?n.faq:[]}}function r(n,e){if(!n)return $();const t=Number(n.id),o=Number.isFinite(t)?t:0,c=n.level??1,y=n.parentId??null,h=n.meta||{}
1,u={id:o,name:n.name||"",slug:n.urlKey||"",url_key:n.urlKey||"",url_path:n.urlKey||"",level:c,parent_id:y,is_active:!0,product_count:n.productsTotal??0,children_count:String(n.childrenTotal??0),children_data:b(n.children),include_in_menu:!0};if(n.pimcoreId!=null&&(u.pimcore_id=n.pimcoreId),n.kind!=null&&(u.kind=n.kind),n.is18Plus!=null&&(u.is_18_plus=n.is18Plus),Array.isArray(n.banners)&&n.banners.length&&(u.banners=n.banners.map(a=>({id:a.id,title:a.title,title_color:a.titleColor,subtitle:a.subtitle,subtitle_color:a.subtitleColor,show_title:a.showTitle,show_subtitle:a.showSubtitle,show_button:a.showButton,allow_hide_button:a.allowHideButton,button_text:a.buttonText,button_text_color:a.buttonTextColor,button_color:a.buttonColor,background_color:a.backgroundColor,image_desktop:a.imageDesktop,image_mobile:a.imageMobile,link:a.link,target:a.target,sort_order:a.sortOrder,status:a.status,position:a.position,category_ids:a.categoryIds,datetime_from:a.dateFrom,datetime_to:a.dateTo,regional_link:a.regionalLink}))),Array.isArray(n.topCategories)&&n.topCategories.length&&(u.top_category=n.topCategories.map(a=>({id:a.id,title:a.title,url:a.url,icon:a.icon,is_new:a.isNew,position:a.position}))),n.description!=null&&(u.description=n.description),h.h1!=null&&(u.h_1=h.h1),h.title!=null&&(u.meta_title=h.title),h.description!=null&&(u.meta_description=h.description),h.noIndex!=null&&(u.is_noindex=h.noIndex),h.noFollow!=null&&(u.is_nofollow=h.noFollow),Array.isArray(n.seoBlocks)&&n.seoBlocks.length&&(u.seo_block=n.seoBlocks.map(a=>({title:a.title||"",position:a.position??0,items:Array.isArray(a.items)?a.items:[]}))),Array.isArray(e)&&e.length){const a=[],v=[];for(const f of e)!f||!f.code||f.type==="RANGE"||(a.push(f.code),f.isTop&&v.push(f.code));a.length&&(u.filterattributes=a.join(",")),v.length&&(u.filter_top_attributes=v)}return u.friendlyFilter=n.friendlyFilter??null,u.humanFilterMeta=O(n.friendlyFilter),u}var _=s(11093);function R(n){return{items:[],total:0,perPage:0,totalPages:0,start:n,aggregations:{},attributeMetadata:[],noindexFilterOptions:{}}}function A(n,e,t){return{...R(n),category:r(null),canonicalPath:e?.canonicalPath??null,redirect:e?.redirect??null,notFound:!0,promotionProductsTotal:0,categoryNavigation:null,...t==="typeMismatch"?{}:{}}}function D(n){const e=n?.products?.quickFilters;if(!Array.isArray(e))return 0;const t=e.find(o=>o?.code==="PROMO");return typeof t?.count=="number"?t.count:0}function L(n){const e=n?.products?.categoryNavigation;return!e||e.mode!=="FILTER"&&e.mode!=="LINK"?null:{mode:e.mode,selectedCategoryId:e.selectedCategoryId??null,items:Array.isArray(e.items)?e.items:[],expandedPathIds:Array.isArray(e.expandedPathIds)?e.expandedPathIds:[]}}function V(n,e,t){const o=I({category:n},e.start,e.shopId,e.isRegional),c=r(n,n.products?.availableFilters),y=Array.isArray(n.productList)?n.productList:[],h=y.length?y.map(u=>{try{return(0,_.tv)(u,e.shopId??void 0,e.isRegional)}catch(a){return p.V.warn(`RouteResultMapper: brand-promo product ${u?.id??"?"} map failed: ${a?.message}`,"data-layer:category")(),u}}):void 0;return{...o,category:c,canonicalPath:t.canonicalPath,redirect:t.redirect,notFound:!1,promotionProductsTotal:D(n),brandPromoItems:h,categoryNavigation:L(n)}}function W(n,e){if(!n||n.notFound)return p.V.debug("RouteResultMapper: route notFound","data-layer:category",{path:e.path})(),A(e.start,n,"notFound");const t=n.resolved;return!t||t.__typename!=="Category"?(p.V.debug("RouteResultMapper: resolved is not Category","data-layer:category",{path:e.path,typename:t?.__typename})(),A(e.start,n,"typeMismatch")):V(t,e,{canonicalPath:n.canonicalPath??null,redirect:n.redirect??null})}function K(n,e){return!n||n.id==null?(p.V.debug("RouteResultMapper: category(id) returned no node","data-layer:category",{path:e.path})(),A(e.start,null,"notFound")):V(n,e,{canonicalPath:null,redirect:null})}var gn=s(78047),q=s(56517),tn=s(60083);async function x(){const n=(0,k.d5)(),e=await n.getShopId(),t=n.isRegionalMode(),o=n.getRegionId(),c=n.getDeliveryMethod()??null,y=n.hasUserShopSelection(),h=!t||y,u=h&&e||null,a=h?null:o||0,v=(typeof n.getStoreCode=="function"?n.getStoreCode():null)||null;return{shopId:u,regionId:a,isRegional:t,deliveryMethod:c,locale:v}}function rn(n){return n!=null&&typeof n=="object"&&n.id!=null?String(n.id):String(n)}function Q(n){const e=(0,tn.CC)(n);return e.startsWith("/")?e:`/${e}`}const on=new Set(["sort","available_today","markdown","price"]),H=new Set(["has_promotion_in_stores","has_promotion_in_region"]);
1function j(n){if(!n)return[];const e=[];for(const[t,o]of Object.entries(n))if(o!=null&&!on.has(t)&&!H.has(t)){if(!Array.isArray(o)){p.V.warn(`buildFilterInputs: unexpected non-array shape for "${t}" \u2014 dropping filter`,"data-layer:category",{rawType:typeof o})();continue}e.push({code:t,values:o.map(rn)})}return e}function J(n){if(!n)return[];const e=[];if(n.priceRange&&(n.priceRange.from!=null||n.priceRange.to!=null)){const t={code:"price"};n.priceRange.from!=null&&(t.from=String(n.priceRange.from)),n.priceRange.to!=null&&(t.to=String(n.priceRange.to)),e.push(t)}return e}function Y(n,e){const t=new Set(n.map(o=>o.code));return[...n,...e.filter(o=>!t.has(o.code))]}const an={"popularity:desc":"POPULARITY","created_at:desc":"NEWEST","final_price:asc":"PRICE_LOW","final_price:desc":"PRICE_HIGH"},ln="WEEK_PRICE";function X(n,e,t){const o=[];return n&&o.push({code:q.Fb.Today,selected:!0}),e&&o.push({code:q.Fb.Promo,selected:!0}),t&&o.push({code:ln,selected:!0}),o.length?o:void 0}function Z(n){if(!n)return;const e=an[n];if(e)return{code:e}}function nn(n,e){if(e?.promotion)return!0;if(n){for(const[t,o]of Object.entries(n))if(o!=null&&H.has(t))return!0}return!1}function U(n,e){const{appliedFilters:t,sort:o,start:c=0,size:y=50,availableToday:h,weekPrice:u}=n,a=y>0?Math.floor(c/y)+1:1,v=Y(j(t),J(n.systemFilters)),f=X(h,nn(t,n.systemFilters),u);return{shopId:e.shopId,regionId:e.regionId,locale:e.locale,deliveryMethod:e.deliveryMethod,filters:v,sort:Z(o),page:a,pageSize:y,quickFilters:f,loadBrandPromo:!!n.loadBrandPromo}}function B(n,e,t){const o=n.errors;if(!o||o.length===0)return!0;const c=o.map(y=>y.message);if(t==="throw")throw p.V.error(`${e} GraphQL errors`,"data-layer:category",{errors:c})(),new Error(`${e} GraphQL errors: ${c.join("; ")}`);return p.V.warn(`${e} GraphQL errors`,"data-layer:category",{errors:c})(),!1}class sn{async loadCategoryPage(e){const{categoryId:t,appliedFilters:o,sort:c,start:y=0,size:h=50,availableToday:u,weekPrice:a}=e;if(!t)throw new Error("GraphQLCategoryAdapter: `categoryId` is required");const{shopId:v,regionId:f,isRegional:M,deliveryMethod:E,locale:G}=e.scope??await x(),N=h>0?Math.floor(y/h)+1:1,z=j(o),dn=J(e.systemFilters),cn=Y(z,dn),un=X(u,nn(o,e.systemFilters),a),pn={id:String(t),shopId:v,regionId:f,locale:G,deliveryMethod:E,filters:cn,sort:Z(c),page:N,pageSize:h,quickFilters:un},en=await(await(0,P.D3)("category")).query({query:d.gU,variables:pn,fetchPolicy:"no-cache"});return B(en,"categoryPage","throw"),I(en.data,y,v,M)}async loadCategoryPageByPath(e){const{path:t,start:o=0}=e;if(!t)throw new Error("GraphQLCategoryAdapter: `path` is required for loadCategoryPageByPath");const c=e.scope??await x(),y=Q(t),h={path:y,...U(e,c)},a=await(await(0,P.D3)("category")).query({query:d.MV,variables:h,fetchPolicy:"no-cache"});return B(a,"categoryPageByRoute","throw"),W(a.data?.route,{start:o,shopId:c.shopId,isRegional:c.isRegional,path:y})}async loadCategoryPageByRouteDual(e){const{filteredPath:t,cleanPath:o,start:c=0}=e;if(!t||!o)throw new Error("GraphQLCategoryAdapter: `filteredPath` and `cleanPath` are required for loadCategoryPageByRouteDual");const y=e.scope??await x(),h=Q(t),u=Q(o),a={filteredPath:h,cleanPath:u,...U(e,y)},f=await(await(0,P.D3)("category")).query({query:d.R3,variables:a,fetchPolicy:"no-cache"});B(f,"categoryPageByRouteDual","throw");const M=W(f.data?.filtered,{start:c,shopId:y.shopId,isRegional:y.isRegional,path:h}),E=W(f.data?.unfiltered,{start:c,shopId:y.shopId,isRegional:y.isRegional,path:u});return{...M,unfilteredAggregations:E.aggregations,unfilteredAttributeMetadata:E.attributeMetadata}}async loadCategoryPageById(e){const{categoryId:t,start:o=0}=e;if(!t)throw new Error("GraphQLCategoryAdapter: `categoryId` is required for loadCategoryPageById");const c=e.scope??await x(),y={id:String(t),...U(e,c)},u=await(await(0,P.D3)("category")).query({query:d.se,variables:y,fetchPolicy:"no-cache"});return B(u,"categoryPageById","throw"),K(u.data?.category,{start:o,shopId:c.shopId,isRegional:c.isRegional,path:`id:${t}`})}async loadFiltersOnly(e,t){const o={aggregations:{},attributeMetadata:[]};
1try{const{shopId:c,regionId:y,deliveryMethod:h,locale:u}=t??await x(),v=await(await(0,P.D3)("category")).query({query:d.wr,variables:{id:String(e),shopId:c,regionId:y,locale:u,deliveryMethod:h},fetchPolicy:"no-cache"});if(!B(v,"categoryFilters","graceful"))return o;const f=v.data?.category?.products?.availableFilters||[];return{aggregations:g(f),attributeMetadata:l(f)}}catch(c){return p.V.warn("categoryFilters exception","data-layer:category",{categoryId:e,message:c?.message})(),o}}async loadCategoryEntity(e,t){if(!e)throw new Error("GraphQLCategoryAdapter: `categoryId` is required for loadCategoryEntity");try{return await this._loadCategoryEntityInner(e,t)}catch(o){return p.V.warn("categoryEntity exception","data-layer:category",{categoryId:e,message:o?.message})(),r(null)}}async _loadCategoryEntityInner(e,t){const{shopId:o,regionId:c,isRegional:y,deliveryMethod:h,locale:u}=t??await x(),a=await(0,P.D3)("category");if(/^\d+$/.test(String(e))){p.V.debug("GraphQL loadCategoryEntity by id","data-layer:category",{id:String(e),shopId:o,regionId:c,isRegional:y,deliveryMethod:h})();const z=await a.query({query:d.oS,variables:{id:String(e),shopId:o,regionId:c,locale:u,deliveryMethod:h},fetchPolicy:"no-cache"});return B(z,"categoryEntity","graceful")?r(z.data?.category):r(null)}const f=String(e),M=Q(f);p.V.debug("GraphQL loadCategoryEntity by route","data-layer:category",{slug:f,path:M,shopId:o,regionId:c,isRegional:y,deliveryMethod:h})();const E=await a.query({query:d.w0,variables:{path:M,shopId:o,regionId:c,locale:u,deliveryMethod:h??null},fetchPolicy:"no-cache"});if(!B(E,"categoryByRoute","graceful"))return r(null);const G=E.data?.route;if(!G||G.notFound)return p.V.debug("GraphQL loadCategoryEntity: route notFound","data-layer:category",{slug:f,path:M})(),r(null);const N=G.resolved;return!N||N.__typename!=="Category"?(p.V.debug("GraphQL loadCategoryEntity: resolved
1is not Category","data-layer:category",{slug:f,path:M,typename:N?.__typename})(),r(null)):r(N)}async loadRouteInfo(e,t){const o={canonicalPath:null,notFound:!0,redirect:null,categoryId:null};if(!e)return o;const{shopId:c,regionId:y,deliveryMethod:h,locale:u}=t??await x(),a=await(0,P.D3)("category");try{const v=await a.query({query:d.kO,variables:{path:Q(e),shopId:c,regionId:y,locale:u,deliveryMethod:h??null},fetchPolicy:"no-cache"});if(!B(v,"routeInfo","graceful"))return o;const f=v.data?.route;if(!f)return o;const M=f.resolved,E=M&&M.__typename==="Category"&&M.id!=null?Number(M.id):null;return{canonicalPath:f.canonicalPath??null,notFound:!!f.notFound,redirect:f.redirect?{code:f.redirect.code??null,to:f.redirect.to??null}:null,categoryId:E}}catch(v){return p.V.warn("routeInfo GraphQL exception","data-layer:category",{message:v?.message})(),o}}}},84309:function(S,C,s){"use strict";s.d(C,{d5:function(){return i},Vv:function(){return d}});const P={getShopId:async()=>{},isRegionalMode:()=>!0,getStoreCode:()=>{},getLocale:()=>"uk-UA",getCurrency:()=>"UAH",getRegionId:()=>{},getDeliveryMethod:()=>{},hasUserShopSelection:()=>!1};let k=P;function d(F){k={...P,...F}}function i(){return k}function p(){k=P}function w(){return k!==P}},88136:function(){},99077:function(){}}]);
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.