1class SiteSubnav extends CustomElement{parentIndex=null;data={title:"",url:""};get refs(){const siteNav=document.querySelector("site-nav");return{$subNavItems:this.$el.find("site-subnav-item"),siteNav,mainNavigationMenu:JSON.parse(document.getElementById("main-navigation-menu").textContent)}}beforeMount(){super.beforeMount(),this.getActiveNavLink()}mounted(){super.mounted()}refresh(){const{siteNav}=this.refs;siteNav.activeIndex!==this.parentIndex&&(this.getActiveNavLink(),this.render())}render(){this.innerHTML=this.template()}template(){if(!this.data)return null;const{title}=this.data;return` 2 <div class="subnav-container ${title}" data-name="${title}"> 3 <nav-sidebar :parentIndex="${this.parentIndex}"></nav-sidebar> 4 </div> 5 6 <nav-spotlight class="spotlight" :parentIndex="${this.parentIndex}"></nav-spotlight> 7 `}getActiveNavLink(){const{siteNav,mainNavigationMenu}=this.refs;this.parentIndex=siteNav.activeIndex,this.data=mainNavigationMenu[this.parentIndex]}}customElements.define("site-subnav",SiteSubnav);class SiteSubavItem extends CustomElement{props={path:"",index:0};data={};get refs(){return{navSpotlight:this.$el.closest("site-subnav").find("nav-spotlight").get(0),mainNavigationMenu:JSON.parse(document.getElementById("main-navigation-menu").textContent)}}constructor(){super()}setup(){}mounted(){super.mounted(),this.$el.on("mouseover",this.renderSpotLight)}beforeMount(){super.beforeMount();const{mainNavigationMenu}=this.refs,{path}=this.props;this.data=_.get(mainNavigationMenu,path)}renderSpotLight=debounce(()=>{const{index}=this.props,{object,featuredImage,url,accentuate}=this.data,{navSpotlight}=this.refs;index!==navSpotlight.activeIndex&&(navSpotlight.activeIndex=index,navSpotlight?.refresh({name:object.title,price:object.price,originalPrice:object.compare_at_price,url,featuredImage,accentuate}))},200)}customElements.define("site-subnav-item",SiteSubavItem);class NavSidebar extends CustomElement{props={parentIndex:0};get refs(){const siteNav=document.querySelector("site-nav");return{$subNavItems:this.$el.find("site-subnav-item"),siteNav,$navSpotlight:this.$el.find("nav-spotlight"),mainNavigationMenu:JSON.parse(document.getElementById("main-navigation-menu").textContent)}}async render(){isTabletViewport()||(this.innerHTML="<loading-overlay></loading-overlay>"),this.innerHTML=await this.template(),this.populateSpotlight()}populateSpotlight(){const{$subNavItems,$navSpotlight}=this.refs,firstSubNavItem=$subNavItems.first().get(0);$navSpotlight.get(0)?.mounted?firstSubNavItem?.renderSpotLight():$navSpotlight.on("mounted",()=>{firstSubNavItem?.renderSpotLight()})}async template(){const{mainNavigationMenu}=this.refs,{parentIndex}=this.props;if(this.data=mainNavigationMenu[parentIndex],!this.data)return null;const{title,url}=this.data,btnText=title==="Mattresses"?"Compare ":"Shop "+title,[i18nTitle,i18nBtnText]=await translateWeglot([title,btnText]),navItems=await this.renderSubnavItems();return` 8 <p class="subnav-container__title paragraph-20 font-semibold">${i18nTitle}</p> 9 10 <ul 11 class="subnav-container__links" 12 > 13 ${navItems.join("")} 14 </ul> 15 16 <a href="${url}" class="compare-btn btn btn--secondary btn--compact"> 17 ${i18nBtnText} 18 </a> 19 `}async renderSubnavItems(){const{children}=this.data,{parentIndex}=this.props;return Promise.all(children.map(async(childlink,i)=>{const[i18nTitle]=await translateWeglot([childlink.title]);return`<site-subnav-item 20 :path="[${parentIndex}].children[${i}]" 21 :index="${i}" 22 class="site-subnav__item" 23 > 24 <a 25 href="${childlink.url}" 26 class="site-subnav__link" 27 ${childlink.active?'aria-current="page"':""} 28 tabindex="-1" 29 abtasty-tracker="PDP_CTR" 30 > 31 <p class="subnav-container__badge">${childlink.promotionCapsule}</p> 32 <div class="sub-item-content"> 33 <div class="subnav__title"> 34 <p> 35 ${i18nTitle} 36 </p> 37 <div class="weglot-tr"> 38 ${childlink.subnavHtmlContent} 39 </div> 40 </div> 41 <img src="${childlink.submenuThumbImage}&transform=resize=600" class="spotlight__image w-full h-full object-contain" loading="lazy" /> 42 </div> 43 </a> 44 </site-subnav-item>`}))}}customElements.define("nav-sidebar",NavSidebar);class NavSpotlight extends CustomElement{props={parentIndex:0};activeIndex=0;
44data={name:"",price:"",originalPrice:"",imageUrl:null,url:"#",badgeText:""};get refs(){return{mainNavigationMenu:JSON.parse(document.getElementById("main-navigation-menu").textContent)}}constructor(){super()}async connectedCallback(){this.extractProps(),this.init(),this.beforeMount(),await this.render(),setTimeout(()=>{$(this).ready(this.mounted.bind(this))},0)}init(){super.init()}async render(){this.$el.css("opacity",0),await wait(250),this.innerHTML=await this.template(),this.$el.css("opacity",1)}async mounted(){super.mounted();const{parentIndex}=this.props,path=`[${parentIndex}].children[0]`,{mainNavigationMenu}=this.refs,data=_.get(mainNavigationMenu,path),{object,featuredImage,url,accentuate}=data;await this.refresh({name:object.title,price:object.price,originalPrice:object.compare_at_price,url,featuredImage,accentuate})}async template(){if(!this.data.name)return;const{name,price,originalPrice,url,imageUrl,badgeText}=this.data,[i18nBadge=badgeText,i18nName=name,i18nFromText="From"]=await translateWeglot([badgeText,name,"From"]);return` 45 <div class="spotlight-media bg-wild-sand"> 46 ${badgeText?`<p class="spotlight__badge absolute top-5 left-4 text-[13px]">${i18nBadge}</p>`:""} 47 <a href="${url}" class="spotlight__link" abtasty-tracker="PDP_CTR"> 48 <img src="${imageUrl}" class="spotlight__image w-full h-full rounded-lg object-cover" loading="lazy" /> 49 </a> 50 </div> 51 52 <div class="spotlight-body"> 53 <a href="${url}" class="spotlight__link"> 54 <p class="spotlight__name text-xl font-semibold">${i18nName}</p> 55 </a> 56 <div class="flex items-center gap-2 text-md"> 57 ${originalPrice?`<p class="inline">${i18nFromText}</p> `:""}<span class="spotlight__price ${originalPrice?"text-[var(--color-negative-500)]":"text-[var(--color-neutral-900)]"} font-bold">${price}</span> 58 ${originalPrice?`<span class="spotlight__original-price line-through text-xs">${originalPrice}</span>`:""} 59 </div> 60 </div> 61 `}async refresh({name,price,url,originalPrice,featuredImage,accentuate}){const isShowFreeBundle=$("#nav-show-free-bundle").val(),useABTestImg=url==="/products/emma-original-a"&&!!isShowFreeBundle;this.data.name=name,this.data.price=currencyFormatter.format(price/100),this.data.originalPrice=originalPrice?currencyFormatter.format(originalPrice/100):null,this.data.imageUrl=accentuate.navigation_spotlight_image?`${accentuate.navigation_spotlight_image[0].src}&transform=resize=600`:featuredImage,this.data.url=url;const discountedAmount=originalPrice-price,discountedPrice=accentuate.upto_discount||(100*discountedAmount/originalPrice).toFixed(0);this.data.badgeText=discountedPrice>0?`Up to ${discountedPrice}% off`:"",await this.render()}}customElements.define("nav-spotlight",NavSpotlight); 62//# sourceMappingURL=/cdn/shop/t/384/assets/site-subnav.js.map?v=5462986883953855701775103981
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.