PageSourceSearch

https://tavola.ru/local/templates/main/js/catalog-section-BDzkYRvd.js

js tavola.ru collected 2026-10-05 00:02:58 UTC 25,532 bytes, 9 lines download raw bytes

1import{C as x,f as V,l as E,r as Q,u as b,g as q,d as U,e as p,i as M,B as A,a as k}from"./common-BzuL1Yyu.js";import{C as G}from"./checkbox-BfwY0J9b.js";import{F as $}from"./filters-CoD8iXxZ.js";import{p as n,f as D,d as w,c as j,e as W}from"./vendors-BG2hTxUn.js";import{c as Y,r as X}from"./component-generator-Tg4Iyu2P.js";import _ from"./tooltip-BfzBgfTE.js";import{S as O}from"./selector-Ctd2KIVc.js";import{S as J}from"./select-BJF6PxNS.js";import{P as C,b as K}from"./variables-7odryFyN.js";import Z from"./notification-Bf3IVQFI.js";import"./spoiler-BGjr4g9O.js";const y=class y extends x{constructor(t,e){super(t),this.header=V.root,this.headerTop=parseFloat(getComputedStyle(this.header).top),this.isFixed=!1,this.isRelative=!0,this.isInit=!1,this.offsetBottom=32,this.lastScrollTop=0,this.stickyElement=this.root.querySelector("[data-sticky-element]")||this.root,this.stickyCalculateSizeElement=this.root.querySelector("[data-sticky-calculate-element]")||this.stickyElement,this.init=()=>{this.isInit||(this.scrollHandler(),window.addEventListener("scroll",this.scrollHandler),E(y.Events.CALCULATE,this.recalculate),this.resizeSubscription=Q(this.resizeHandler),this.isInit=!0,this.resizeObserver=new ResizeObserver(()=>{requestAnimationFrame(()=>{this.changePosition(!0)})}),this.resizeObserver.observe(this.root.firstElementChild))},this.recalculate=i=>{if(i?.detail?.optional){const o=this.stickyCalculateSizeElement.getBoundingClientRect().bottom,s=this.parent.getBoundingClientRect().bottom;if(o<=s)return}window.scrollBy({top:-1}),requestAnimationFrame(()=>{requestAnimationFrame(()=>{window.scrollBy({top:1}),this.changePosition(!0)})})},this.scrollHandler=()=>{this.changePosition()},this.changePosition=(i=!1)=>{let a=1;const o=window.pageYOffset||document.documentElement.scrollTop;o>this.lastScrollTop?a=1:o<this.lastScrollTop&&(a=-1),this.lastScrollTop=o<=0?0:o;const{top:s,bottom:r}=this.stickyCalculateSizeElement.getBoundingClientRect(),h=this.parent.getBoundingClientRect(),m=h.top,l=h.bottom,c=this.stickyCalculateSizeElement.clientHeight,u=this.header.clientHeight+(this.headerTop||0),d=window.innerHeight,T=this.parent.clientHeight;if(a===1){const R=Math.max(this.offsetBottom,d-u-c),N=d-R;this.isFixed?l<=r?this.setPosition("relative",T-c):s===u&&this.setPosition("relative",Math.abs(m)+u):r<=N&&l>N&&this.setPosition("fixed",0,R)}a===-1&&(this.isFixed?Math.round(s)<Math.round(u)?this.setPosition("relative",Math.abs(m)-Math.abs(s)):m>=s&&this.setPosition("relative",0):s>=u&&m<=u&&this.setPosition("fixed",null,null,u)),i&&(l<=r?this.setPosition("relative",T-c):window.screenTop>l&&this.setPosition("relative",T-c)),window.scrollY===0&&this.resetPosition()},this.resetPosition=()=>{this.animationFrameId=requestAnimationFrame(()=>{this.root.style.cssText=`
2                position: unset;
3                transform: unset;
4            `,this.isFixed=!1,this.isRelative=!0})},this.setPosition=(i,a,o,s)=>{this.animationFrameId&&cancelAnimationFrame(this.animationFrameId),this.animationFrameId=requestAnimationFrame(()=>{this.root.style.cssText=`
5                position: ${i};
6                transform: translate3d(0px, ${a}px, 0px);
7                top: ${s}px;
8                bottom: ${o}px;
9            `,this.isFixed=!this.isFixed,this.isRelative=!this.isRelative})},this.resizeHandler=()=>{this.headerTop=parseFloat(getComputedStyle(this.header).top),this.changePosition(!0)},this.parent=e?.parent||this.root.parentElement}destroy(){this.resizeSubscription?.unsubscribe(),window.removeEventListener("scroll",this.scrollHandler),b(y.Events.CALCULATE,this.recalculate),this.stickyElement.style.cssText="",this.isRelative=!0,this.isInit=!1,this.resizeObserver?.unobserve(this.root.firstElementChild)}};y.Events={CALCULATE:"calculate"};let L=y;function tt(H){var t="",e={},i,a=H||{};return function(o){e.svg=i=function(s){this&&this.block;var r=this&&this.attributes||{};t=t+"<svg"+n.attrs(n.merge([{focusable:"false"},r]),!1)+"><use"+n.attr("xlink:href",`#${s}`,!0,!1)+"></use></svg>"},e["control-tag"]=i=function(s){this&&this.block;var r=this&&this.attributes||{};
9t=t+"<button"+n.attrs(n.merge([{class:"control-tag",type:"button","data-filter-remove":"true","data-filter-name":n.escape(s.name),"data-filter-value":n.escape(s.value)},r]),!1)+'><span class="control-tag__label">'+((i=s.label)==null?"":i)+"</span>",e.svg(s.icon),t=t+"</button>"},e["control-tag"](o)}.call(this,"props"in a?a.props:typeof props<"u"?props:void 0),t}const F=class F extends x{constructor(t,{productFilters:e}){super(t),this.onFiltersChange=()=>{this.syncUi()},this.onTagsClick=i=>{const o=i.target.closest("[data-filter-remove]");if(!o||!this.productFilters)return;const s=o.dataset.filterName,r=o.dataset.filterValue;!s||!r||this.productFilters.resetFields(s,r)},this.onResetClick=()=>{this.productFilters&&this.productFilters.resetFields()},this.syncUi=()=>{const i=this.productFilters.getSelectedFilters();this.renderTags(i),this.toggleReset(i.length>1),this.root.classList.toggle("hidden",!i.length)},this.productFilters=e,this.form=this.productFilters.form,this.cardsContainer=this.root.closest(".catalog-section")?.querySelector(".catalog-list__cards")||null,this.root.querySelector("[data-count]"),this.tagsElement=this.root.querySelector("[data-tags]"),this.resetButton=this.root.querySelector("[data-reset]"),this.init()}init(){!this.form||!this.cardsContainer||(E(F.Events.syncUI,this.syncUi),this.form.addEventListener("change",this.onFiltersChange),this.tagsElement?.addEventListener("click",this.onTagsClick),this.resetButton?.addEventListener("click",this.onResetClick),this.syncUi())}renderTags(t){if(!this.tagsElement)return;const e=document.createDocumentFragment();t.forEach(i=>{const a=Y({label:`${i.groupTitle}: ${i.optionLabel.toLowerCase()}`,name:i.name,value:i.value,icon:"cross"},tt);e.append(a)}),this.tagsElement.replaceChildren(e),t.length&&this.resetButton&&(q()?this.tagsElement.appendChild(this.resetButton):this.tagsElement.parentElement?.prepend(this.resetButton))}toggleReset(t){this.resetButton&&(this.resetButton.hidden=!t)}destroy(){b(F.Events.syncUI,this.syncUi),this.form?.removeEventListener("change",this.onFiltersChange),this.tagsElement?.removeEventListener("click",this.onTagsClick),this.resetButton?.removeEventListener("click",this.onResetClick)}};F.Events={syncUI:"catalog-controls-sync-ui"};let P=F;const g=class g extends ${constructor(t,e={}){super(t),this.closeBtn=this.getElement("close-btn"),this.checkboxes=Array.from(this.form.querySelectorAll('input[type="checkbox"][name]')),this.checkboxesDataStorage=new Map,this.controls=this.getElement("controls"),this.submitBtn=this.getElement("submit-btn"),this.isModalOpen=!1,this.openModalHandler=()=>{this.timerId&&clearTimeout(this.timerId),this.root.classList.remove(g.ClassNames.hidden),requestAnimationFrame(()=>{requestAnimationFrame(()=>{document.body.classList.add(U.classNames.bodyClass),this.root.classList.add(g.ClassNames.open),this.isModalOpen=!0})})},this.closeModalHandler=()=>{this.root.classList.remove(g.ClassNames.open),document.body.classList.remove(U.classNames.bodyClass),this.isModalOpen=!1,this.timerId&&clearTimeout(this.timerId),this.timerId=setTimeout(()=>{this.root.classList.add(g.ClassNames.hidden)},600)},this.onDesktop=()=>{this.form.addEventListener("change",this.onSubmit),this.submitBtn?.removeEventListener("click",this.submitBtnClickHandler),this.closeModalHandler(),b(_.Events.isOpened,this.tooltipOpenHandler)},this.onMobile=()=>{this.form.removeEventListener("change",this.onSubmit),this.submitBtn?.addEventListener("click",this.submitBtnClickHandler),E(_.Events.isOpened,this.tooltipOpenHandler)},this.tooltipOpenHandler=()=>{this.isModalOpen&&this.root?.addEventListener("scroll",()=>p(_.Events.close),{once:!0})},this.submitBtnClickHandler=i=>{i.preventDefault(),this.onSubmit(i,!0),requestAnimationFrame(()=>{requestAnimationFrame(this.closeModalHandler)})},this.resetFields=(i,a)=>{if(!i&&!a){this.getSelectedFields().forEach(r=>{r.checked=!1}),this.form.dispatchEvent(new Event("change",{bubbles:!0}));return}const o=this.form.querySelector(`input[name="${i}"][value="${a}"]`);o&&(o.checked=!1,o.dispatchEvent(new Event("change",{bubbles:!0})))},this.moveControls=i=>{i&&this.controls?.appendChild(i)},this.onCheckboxChange=this.onCheckboxChange.bind(this),this.onSubmit=this.onSubmit.bind(this),this.closeBtn?.addEventListener("click",this.closeModalHandler),E(g.Events.open,this.openModalHandler),this.init(),this.applyAvailableFilters(e)}init(){this.collectCheckboxData(),this.checkUrlParams(),this.initResizeSubscription()}initResizeSubscription(){const t=M(A.XL),e=i=>{const a=i;(a?a.matches:t.matches)?this.onDesktop():this.onMobile()};e(),this.resizeSubscription=D(t,"change").pipe(w(300)).subscribe(e)}async onSubmit(t,e){t?.preventDefault(),this.collectFields(),this.addParamsToHistory(),p(g.Events.change,{immediately:e},this.root,{bubbles:!0}),this.setState("idle")}checkUrlParams(){const t=new URLSearchParams(window.location.search);let e=!1;
9this.checkboxes.forEach(i=>{t.getAll(i.name).includes(i.value)&&(i.checked=!0,e=!0)}),e&&this.form.dispatchEvent(new Event("change",{bubbles:!0}))}getSelectedFields(){return this.checkboxes.filter(t=>t.checked)}getSearchParams(){return this.collectFields(),new URLSearchParams(this.searchParams?.toString())}applyAvailableFilters(t={}){const e=new Map(Object.entries(t).map(([a,o])=>[a,new Set(o)]));let i=!1;this.checkboxes.forEach(a=>{const o=a.closest(".filter-checkbox"),s=e.get(a.name),r=!s||s.has(a.value);!r&&a.checked&&(a.checked=!1,i=!0),a.disabled=!r,o?.classList.toggle(G.classNames.disabled,!r)}),i&&(this.collectFields(),this.addParamsToHistory(),p(P.Events.syncUI,void 0,this.root,{bubbles:!0}))}collectCheckboxData(){this.checkboxes.map(e=>{const a=e.closest(".product-filters__group")?.querySelector(".product-spoiler__title > span")?.textContent?.trim()||e.name,o=e.closest(".filter-checkbox")?.querySelector(".filter-checkbox__label")?.textContent?.trim()||e.value;return{name:e.name,value:e.value,groupTitle:a,optionLabel:o}}).forEach(e=>{this.checkboxesDataStorage.set(`${e.name}-${e.value}`,e)})}getSelectedFilters(){return this.getSelectedFields().map(e=>this.checkboxesDataStorage.get(`${e.name}-${e.value}`)).filter(Boolean)}collectFields(){this.searchParams=new URLSearchParams(window.location.search),Array.from(new Set(this.checkboxes.map(e=>e.name))).forEach(e=>this.searchParams?.delete(e)),this.checkboxes.forEach(e=>{e.checked&&this.searchParams?.append(e.name,e.value)})}onLoading(){}onSuccess(){}onError(){}onCheckboxChange(){this.onSubmit()}destroy(){this.closeBtn?.removeEventListener("click",this.closeModalHandler),this.form.removeEventListener("change",this.onSubmit),b(g.Events.open,this.openModalHandler),b(_.Events.isOpened,this.tooltipOpenHandler),this.resizeSubscription?.unsubscribe(),this.timerId&&clearTimeout(this.timerId),this.submitBtn?.removeEventListener("click",this.submitBtnClickHandler),this.checkboxesDataStorage.clear(),this.checkboxes=[],super.destroy()}};g.ClassNames={...$.ClassNames,open:"_open",hidden:"_hidden"},g.Events={open:"product-filters-open",resetFields:"product-filters-reset-fields",change:"product-filters-change"};let v=g;const et="sort-by-price",B=class B extends x{constructor(t){super(t),this.select=this.getElement("select"),this.sortParamName=this.select?.dataset.name||et,this.onSortChange=()=>{const i=new URLSearchParams(location.search),a=this.getSortValue();a?i.set(this.sortParamName,a.value):i.delete(this.sortParamName);const o=i.toString();j.history.add(`${location.origin}${location.pathname}${o?`?${o}`:""}`,"popstate"),p(B.Events.change,a,this.root,{bubbles:!0})},this.select?.addEventListener(O.Events.change,this.onSortChange);const e=k("select",this.root);e&&(this.selectComponent=new J(e)),this.checkUrlParams()}getSortValue(){const t=this.select?.querySelector("input:checked");return!t||!t.name?null:{name:t.name,value:t.value}}checkUrlParams(){const e=new URLSearchParams(window.location.search).get(this.sortParamName);if(!e||!this.select)return;const i=this.select.querySelector(`input[value="${e}"]`);if(i){i.checked=!0;const a=this.root.querySelector(".select__title"),o=i.parentElement?.querySelector(".select__text");a&&o&&(a.textContent=o.textContent)}}destroy(){this.select?.removeEventListener(O.Events.change,this.onSortChange),this.selectComponent?.destroy()}};B.Events={change:"product-sort-change"};let S=B;function I(H){var t="",e={},i,a=H||{};return function(o){e.svg=i=function(s){this&&this.block;var r=this&&this.attributes||{};t=t+"<svg"+n.attrs(n.merge([{focusable:"false"},r]),!1)+"><use"+n.attr("xlink:href",`#${s}`,!0,!1)+"></use></svg>"},e.picture=i=function(s,r){this&&this.block;var h=this&&this.attributes||{};if(s.sources){var m=s.sources[s.sources.length-1];t=t+"<picture"+n.attrs(n.merge([{class:n.classes(["picture",r==="lozad"?"lozad":""],[!1,!0])},h]),!1)+">",(function(){var l=s.sources;if(typeof l.length=="number")for(var c=0,u=l.length;c<u;c++){var d=l[c];t=t+"<source"+(n.attr("srcset",d.srcset,!0,!1)+n.attr("media",d.breakpoint?"(min-width: "+d.breakpoint+"px)":null,!0,!1)+n.attr("type",d.type?d.type:null,!0,!1))+"/>"}else{var u=0;for(var c in l){u++;var d=l[c];t=t+"<source"+(n.attr("srcset",d.srcset,!0,!1)+n.attr("media",d.breakpoint?"(min-width: "+d.breakpoint+"px)":null,!0,!1)+n.attr("type",d.type?d.type:null,!0,!1))+"/>"}}}).call(this),t=t+"<img"+(n.attr("class",n.classes([r==="lozad"?"lozad":""],[!0]),!1,!1)+n.attr("src",r==="lozad"?null:m.srcset,!0,!1)+n.attr("data-src",r==="lozad"?m.srcset:null,!0,!1)+n.attr("alt",s.alt||" ",!0,!1)+n.attr("loading",r==="lozad"?null:r,!0,!1))+"/></picture>"}},e["product-banner"]=i=function(s){this&&this.block;var r=this&&this.attributes||{};const h=s&&s.href?s.href:null;
9t=t+"<"+(h?"a":"div")+n.attrs(n.merge([{class:"product-banner",href:n.escape(h)},r]),!1)+'><div class="product-banner__background">',s&&s.picture&&e.picture.call({attributes:{class:"image-bg"}},s.picture,"lazy"),t=t+'<span class="product-banner__overlay" aria-hidden="true"></span></div><div class="product-banner__content">',s&&s.label&&(t=t+'<span class="product-banner__label text-t-4-caps">'+((i=s.label)==null?"":i)+"</span>"),s&&(s.title||s.description)&&(t=t+'<div class="product-banner__text">',s.title&&(t=t+'<h2 class="product-banner__title">'+((i=s.title)==null?"":i)+"</h2>"),s.description&&(t=t+'<p class="product-banner__description">'+((i=s.description)==null?"":i)+"</p>"),t=t+"</div>"),t=t+"</div></"+(h?"a":"div")+">"},e["goods-card"]=i=function(s){this&&this.block;var r=this&&this.attributes||{};const h=s&&s.href?s.href:null,m=h?"a":"div",l=h?{href:h}:{},c=s&&s.slides?s.slides:[],u=c&&c[0]?c[0]:null,d=c&&c[1]?c[1]:null;t=t+"<"+m+n.attrs(n.merge([{class:"goods-card"},r,l]),!1)+'><div class="goods-card__media"><div class="goods-card__badges">',s&&s.badgeLeft&&s.badgeLeft.label?t=t+"<span"+n.attr("class",n.classes(["goods-card__badge",s.badgeLeft.tone==="sale"?"goods-card__badge--sale":""],[!1,!0]),!1,!1)+">"+n.escape((i=s.badgeLeft.label)==null?"":i)+"</span>":t=t+'<span class="goods-card__badge-spacer" aria-hidden="true"></span>',s&&s.badgeRight&&s.badgeRight.label&&(t=t+'<span class="goods-card__badge">'+n.escape((i=s.badgeRight.label)==null?"":i)+"</span>"),t=t+'</div><div class="goods-card__picture">',u&&e.picture.call({attributes:{class:"goods-card__image goods-card__image--primary image-bg"}},u,"lazy"),d&&e.picture.call({attributes:{class:"goods-card__image goods-card__image--secondary image-bg"}},d,"lazy"),t=t+'</div></div><div class="goods-card__content"><div class="goods-card__meta">',s&&s.category&&(t=t+'<span class="goods-card__category">'+n.escape((i=s.category)==null?"":i)+"</span>"),s&&s.sku&&(t=t+'<span class="goods-card__sku">'+n.escape((i=s.sku)==null?"":i)+"</span>"),t=t+"</div>",s&&s.title&&(t=t+'<h3 class="goods-card__title">'+((i=s.title)==null?"":i)+"</h3>"),s&&s.price&&(t=t+'<div class="goods-card__prices">',s.price.current&&(t=t+'<div class="goods-card__price-current">'+((i=s.price.current)==null?"":i)+"</div>"),s.price.old&&(t=t+'<div class="goods-card__price-old">'+((i=s.price.old)==null?"":i)+"</div>"),t=t+"</div>"),t=t+"</div></"+m+">"},e["catalog-list"]=i=function(s){this&&this.block;var r=this&&this.attributes||{};const h=s&&s.sectionClass?s.sectionClass:null;t=t+"<div"+n.attrs(n.merge([{class:n.classes(["catalog-list",h],[!1,!0])},r]),!1)+'><div class="catalog-list__cards">',s&&s.cards&&(function(){var m=s.cards;if(typeof m.length=="number")for(var l=0,c=m.length;l<c;l++){var u=m[l];e["goods-card"].call({attributes:{class:"catalog-list__card","data-index":n.escape(l)}},u),s.banners&&s.banners[0]&&(l===3&&e["product-banner"].call({attributes:{class:"catalog-list__banner _mobile"}},s.banners[0]),l===5&&e["product-banner"].call({attributes:{class:"catalog-list__banner _desktop"}},s.banners[0])),s.banners&&s.banners[1]&&(l===7&&e["product-banner"].call({attributes:{class:"catalog-list__banner _mobile"}},s.banners[1]),l===11&&e["product-banner"].call({attributes:{class:"catalog-list__banner _desktop"}},s.banners[1]))}else{var c=0;for(var l in m){c++;var u=m[l];e["goods-card"].call({attributes:{class:"catalog-list__card","data-index":n.escape(l)}},u),s.banners&&s.banners[0]&&(l===3&&e["product-banner"].call({attributes:{class:"catalog-list__banner _mobile"}},s.banners[0]),l===5&&e["product-banner"].call({attributes:{class:"catalog-list__banner _desktop"}},s.banners[0])),s.banners&&s.banners[1]&&(l===7&&e["product-banner"].call({attributes:{class:"catalog-list__banner _mobile"}},s.banners[1]),l===11&&e["product-banner"].call({attributes:{class:"catalog-list__banner _desktop"}},s.banners[1]))}}}).call(this),t=t+"</div></div>"},e["catalog-list"]({...o,sectionClass:"catalog-section__list"})}.call(this,"props"in a?a.props:typeof props<"u"?props:void 0),t}const st=750,f=class f extends x{constructor(t){super(t),this.openBtn=this.getElement("open-btn"),this.controlsWrapper=this.getElement("controls-wrapper"),this.countElement=this.getElement("count"),this.showMoreButton=this.getElement("more"),this.rightHead=this.getElement("right-head"),this.rightAnchor=this.getElement("right-anchor"),this.catalogListContainer=this.getElement("list-container"),this.lastScrollY=0,this.scrollTicking=!1,this.rightHeadNaturalTop=0,this.countSuffix="",this.currentPage=1,this.hasMore=!!this.showMoreButton,this.isLoading=!1,this.limitCards=18,this.requestDebounceSubject=ne
9w W,this.openBtnText=this.openBtn?.firstElementChild?.textContent||"",this.action=this.options.action||window.location.pathname,this.componentCode=this.options.componentCode,this.onScroll=()=>{this.scrollTicking||(this.scrollTicking=!0,requestAnimationFrame(()=>{const e=window.scrollY,i=e-this.lastScrollY,a=this.rightHead.offsetHeight,o=V.root.offsetHeight,s=this.rightHead.classList.contains("_sticky");if(Math.abs(i)<12){this.scrollTicking=!1;return}const r=s?-(o+a):o,h=e+o-(s?0:2*a)>this.rightHeadNaturalTop+(i>0?a-5:r);this.rightHead.classList.toggle(f.ClassNames.sticky,h),i<0&&h?this.rightHead.classList.add(f.ClassNames.animated):h||this.rightHead.classList.remove(f.ClassNames.animated),this.rightHead.classList.toggle(f.ClassNames.hidden,i>0&&e>this.rightHeadNaturalTop-(s?40:16)),this.lastScrollY=e,this.scrollTicking=!1}))},this.onTablet=()=>{this.stickyContainer?.isInit&&(this.stickyContainer.resetPosition(),this.stickyContainer.destroy()),this.openBtn?.addEventListener("click",this.openModalHandler),this.productFilters?.moveControls(this.catalogControls?.root),this.catalogControls?.syncUi(),this.initScrollBehavior(),this.setOpenBtnState()},this.onDesktop=()=>{this.stickyContainer?.isInit||this.stickyContainer?.init(),this.openBtn?.removeEventListener("click",this.openModalHandler),this.catalogControls&&(this.controlsWrapper?.appendChild(this.catalogControls.root),this.catalogControls.syncUi()),this.destroyScrollBehavior()},this.openModalHandler=()=>{p(v.Events.open)},this.onFiltersChange=e=>{if(e?.detail?.immediately){this.requestCatalogData({page:1,append:!1}),this.setOpenBtnState();return}this.requestDebounceSubject.next({page:1,append:!1})},this.onSortChange=()=>{this.requestCatalogData({page:1,append:!1})},this.onShowMoreClick=e=>{e.preventDefault(),!(!this.hasMore||this.isLoading)&&this.requestCatalogData({page:++this.currentPage,append:!0})},this.init()}init(){this.addDesktopChangeHandler(),this.addMobileChangeHandler(),this.initRequestDebounce(),this.initInnerComponents(),this.showMoreButton?.addEventListener("click",this.onShowMoreClick),this.currentPage=this.getPageFromUrl()}initRequestDebounce(){this.requestDebounceSubscription=this.requestDebounceSubject.pipe(w(st)).subscribe(t=>{this.requestCatalogData(t)})}getPageFromUrl(){const t=new URLSearchParams(window.location.search),e=Number(t.get(C.PAGE));return!Number.isFinite(e)||e<1?1:Math.floor(e)}initInnerComponents(){const t=k("sticky-container",this.root);t&&(this.stickyContainer=new L(t));const e=k("product-filters",this.root);if(e){const o=JSON.parse(this.options.availableFilters??"{}");this.productFilters=new v(e,o),E(v.Events.change,this.onFiltersChange,this.productFilters.root)}const i=k("catalog-controls",this.root);i&&this.productFilters&&(this.catalogControls=new P(i,{productFilters:this.productFilters}));const a=k("product-sort",this.root);a&&(this.productSort=new S(a),E(S.Events.change,this.onSortChange,this.productSort.root))}initScrollBehavior(){this.lastScrollY=window.scrollY,this.rightHeadNaturalTop=this.rightAnchor.getBoundingClientRect().bottom+window.scrollY,window.addEventListener("scroll",this.onScroll,{passive:!0})}destroyScrollBehavior(){this.rightHead?.classList.remove(f.ClassNames.sticky,f.ClassNames.hidden,f.ClassNames.animated),window.removeEventListener("scroll",this.onScroll)}addDesktopChangeHandler(){const t=M(A.XL),e=i=>{const a=i,o=a?a.matches:t.matches;requestAnimationFrame(o?this.onDesktop:this.onTablet)};e(),this.resizeSubscriptionOnTablet=D(t,"change").pipe(w(300)).subscribe(e)}addMobileChangeHandler(){const t=M(A.MD),e=i=>{const a=i,s=(a?a.matches:t.matches)?18:12;this.limitCards=s,i&&this.requestCatalogData({page:this.currentPage,append:!1})};e(),this.resizeSubscriptionOnMobile=D(t,"change").pipe(w(300)).subscribe(e)}setOpenBtnState(){if(!q()&&this.openBtn?.firstElementChild){const t=this.productFilters?.getSelectedFilters().length||"";this.openBtn.firstElementChild.textContent=`${this.openBtnText} ${t?`(${t})`:""}`,this.openBtn?.classList.toggle(f.ClassNames.btnActive,!!t)}}addPageToUrl(t){const e=new URLSearchParams(location.search);t>=2?e.set(C.PAGE,String(t)):e.delete(C.PAGE);const i=e.toString();j.history.add(`${location.origin}${location.pathname}${i?`?${i}`:""}`,"popstate")}async requestCatalogData({page:t,append:e}){this.requestController?.abort();const i=new AbortController;this.requestController=i,this.setCatalogLoading(!0);try{const a=await fetch(this.buildRequestUrl(t).toString(),{headers:K,signal:i.signal});if(!a.ok)throw new Error(`Catalog request failed with ${a.status}`);const o=await a.json();if(this.requestController!==i)return;this.currentPage=t,this.hasMore=!!o.hasMore,this.showMoreButton?.classList.toggle("hidden",!this.hasMore),this.updateProductCount(o.productC
9ount,o.countSuffix),this.productFilters?.applyAvailableFilters(o.availableFilters),this.renderCatalogList(o,e),this.addPageToUrl(t)}catch(a){if(this.requestController!==i||a instanceof DOMException&&a.name==="AbortError")return;p(Z.Actions.show,{id:"catalog-section-notification"})}finally{this.requestController===i&&(this.requestController=void 0,this.setCatalogLoading(!1))}}buildRequestUrl(t){const e=new URL(this.action,window.location.origin),i=this.productFilters?.getSearchParams(),a=this.productSort?.getSortValue();return i&&i.forEach((o,s)=>{e.searchParams.append(s,o)}),a&&e.searchParams.set(a.name,a.value),e.searchParams.set(C.LIMIT,String(this.limitCards)),e.searchParams.set(C.PAGE,String(t)),e.searchParams.set(C.COMPONENT_CODE,this.componentCode),e}renderCatalogList(t,e){if(!this.catalogListContainer)return;const i={cards:t.cards||[],banners:t.banners||[]};if(e){const a=Y(i,I);this.catalogListContainer.insertAdjacentElement("beforeend",a)}else X(this.catalogListContainer,[i],I);this.setCatalogLoading(this.isLoading),p(L.Events.CALCULATE),!(e||q())&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{const a=this.root.getBoundingClientRect();window.scrollTo({top:window.scrollY+a.top,behavior:"smooth"})})})}updateProductCount(t,e){typeof t!="number"||!this.countElement||(e&&(this.countSuffix=e),this.countElement.textContent=`${t} ${this.countSuffix}`.trim())}setCatalogLoading(t){this.isLoading=t,this.root.classList.toggle("_loading",t),this.showMoreButton&&(this.showMoreButton.disabled=t)}destroy(){this.requestDebounceSubscription?.unsubscribe(),this.requestDebounceSubject.complete(),this.requestController?.abort(),this.requestController=void 0,this.showMoreButton?.removeEventListener("click",this.onShowMoreClick),this.openBtn?.removeEventListener("click",this.openModalHandler),this.destroyScrollBehavior(),b(v.Events.change,this.onFiltersChange,this.productFilters?.root),b(S.Events.change,this.onSortChange,this.productSort?.root),this.stickyContainer?.destroy(),this.catalogControls?.destroy(),this.productFilters?.destroy(),this.productSort?.destroy(),this.resizeSubscriptionOnTablet?.unsubscribe(),this.resizeSubscriptionOnMobile?.unsubscribe()}};f.ClassNames={btnActive:"_btn-active",sticky:"_sticky",hidden:"_hidden",animated:"_is-animated"};let z=f;export{z as default};

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.