1(function(){const CONFIG_EL=document.getElementById("jkl-storefront-card-variations");if(!CONFIG_EL)return;let config;try{config=JSON.parse(CONFIG_EL.textContent)}catch{return}if(!config.token||!config.domain)return;const API_URL="https://"+config.domain+"/api/"+config.apiVersion+"/graphql.json",lang=typeof config.language=="string"&&config.language.trim()?config.language.trim():"",inContextArgs=lang?"country: "+config.country+", language: "+lang:"country: "+config.country,variationProductFields=` 2 id 3 handle 4 title 5 availableForSale 6 onlineStoreUrl 7 featuredImage { 8 url(transform: { maxWidth: 1200, maxHeight: 1200 }) 9 altText 10 width 11 height 12 } 13 images(first: 2) { 14 edges { 15 node { 16 url(transform: { maxWidth: 1200, maxHeight: 1200 }) 17 altText 18 width 19 height 20 } 21 } 22 } 23 hexColor: metafield(namespace: "custom", key: "hex_color") { value } 24 codColore: metafield(namespace: "custom", key: "cod_colore") { value } 25 ucbColore: metafield(namespace: "custom", key: "ucb_colore") { value } 26 priceRange { 27 minVariantPrice { amount currencyCode } 28 } 29 compareAtPriceRange { 30 minVariantPrice { amount currencyCode } 31 } 32 `,QUERY_BY_PRODUCT_ID=` 33 query JklCardVariationRefs($id: ID!) @inContext(`+inContextArgs+`) { 34 node(id: $id) { 35 ... on Product { 36 id 37 handle 38 metafield(namespace: "custom", key: "variation_products") { 39 references(first: 30) { 40 nodes { 41 ... on Product { 42`+variationProductFields+` 43 } 44 } 45 } 46 } 47 } 48 } 49 } 50 `,QUERY_BY_HANDLE=` 51 query JklCardVariationRefs($handle: String!) @inContext(`+inContextArgs+`) { 52 product(handle: $handle) { 53 handle 54 metafield(namespace: "custom", key: "variation_products") { 55 references(first: 30) { 56 nodes { 57 ... on Product { 58`+variationProductFields+` 59 } 60 } 61 } 62 } 63 } 64 } 65 `,cache=new Map;function money(amountStr,currencyCode){const amount=parseFloat(amountStr,10);if(Number.isNaN(amount))return"";const opts={style:"currency",currency:currencyCode||config.currency,minimumFractionDigits:2,maximumFractionDigits:2};config.currencyCodeEnabled===!1&&(opts.currencyDisplay="narrowSymbol");try{return new Intl.NumberFormat(config.locale||void 0,opts).format(amount)}catch{return amountStr}}function formatColorCount(n){const ph=String(config.colorCountPlaceholder||"999888"),tpl=config.colorCountTemplate||"";return tpl.indexOf(ph)!==-1?tpl.split(ph).join(String(n)):String(n)+" colors"}function buildPriceListHtml(node){const price=parseFloat(node.priceRange?.minVariantPrice?.amount||"0",10),cur=node.priceRange?.minVariantPrice?.currencyCode||config.currency,cmpNode=node.compareAtPriceRange?.minVariantPrice,cmpAmount=cmpNode?.amount!=null?parseFloat(cmpNode.amount,10):0,cmpCur=cmpNode?.currencyCode||cur,onSale=cmpAmount>price&&cmpAmount>0,saleCls=onSale?"text-on-sale":"text-subdued",compareCls="text-subdued line-through";let inner='<sale-price class="'+saleCls+'"><span class="sr-only">'+escapeHtml(config.priceSaleLabel||"")+"</span>"+escapeHtml(money(String(price),cur))+"</sale-price>";return onSale&&(inner+='<compare-at-price class="'+compareCls+'"><span class="sr-only">'+escapeHtml(config.priceRegularLabel||"")+"</span>"+escapeHtml(money(String(cmpAmount),cmpCur))+"</compare-at-price>"),'<price-list class="price-list">'+inner+"</price-list>"}function escapeHtml(s){return String(s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}
65function hexBrightness(hex){if(!hex||typeof hex!="string"||!hex.startsWith("#"))return 0;const h=hex.slice(1),full=h.length===3?h.split("").map(function(c){return c+c}).join(""):h;if(full.length!==6)return 0;const r=parseInt(full.slice(0,2),16),g=parseInt(full.slice(2,4),16),b=parseInt(full.slice(4,6),16);return(r*299+g*587+b*114)/1e3}function swatchLabel(node){const u=node.ucbColore?.value,c=node.codColore?.value;return String(u||c||node.title||"").trim()}function swatchSrOnly(node){const u=node.ucbColore?.value,c=node.codColore?.value,t=String(u||c||"").trim();if(t)return t;const h=node.handle;return h?h.replace(/-/g," "):"Color"}function productUrl(node){return node.onlineStoreUrl?node.onlineStoreUrl:(config.storeRoot||"/")+"products/"+encodeURIComponent(node.handle)}function primaryImageUrl(node){return node.featuredImage?.url||""}function secondaryImage(node){const edges=node.images?.edges||[];return edges.length<2?null:edges[1]?.node||null}function normalizeProductFromData(data){if(!data)return null;if(data.product)return data.product;const n=data.node;return n&&(n.metafield!==void 0||n.id||n.handle)?n:null}async function fetchVariations(cacheKey,query,variables){if(cache.has(cacheKey))return cache.get(cacheKey);const p=(async function(){const json=await(await fetch(API_URL,{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":config.token},body:JSON.stringify({query,variables})})).json();if(json.errors&&json.errors.length)throw new Error(json.errors[0].message);return json.data})();return cache.set(cacheKey,p),p}function renderCard(card){if(card.getAttribute("data-variations-hydrated")==="true")return;const mount=card.querySelector("[data-variations-mount]");if(!mount)return;const productIdRaw=(card.getAttribute("data-variations-product-id")||"").trim(),handle=(card.getAttribute("handle")||"").trim(),rootProductUrl=(card.getAttribute("data-variations-root-product-url")||"").trim();if(!productIdRaw&&!handle)return;card.setAttribute("data-variations-hydrated","true");const showAlways=card.getAttribute("data-show-variation-picker-always")==="true",rootHandle=handle,rootGid=productIdRaw?"gid://shopify/Product/"+productIdRaw:"",cacheKey=productIdRaw?"id:"+productIdRaw:"handle:"+handle;fetchVariations(cacheKey,productIdRaw?QUERY_BY_PRODUCT_ID:QUERY_BY_HANDLE,productIdRaw?{id:rootGid}:{handle}).then(function(data){const product=normalizeProductFromData(data),refs=product&&product.metafield&&product.metafield.references&&product.metafield.references.nodes?product.metafield.references.nodes:[],available=refs.filter(function(n){return n&&n.availableForSale&&n.onlineStoreUrl}),ordered=[];for(let i=0;i<Math.min(4,refs.length);i++){const n=refs[i];n&&n.availableForSale&&n.onlineStoreUrl&&ordered.push(n)}if(!available.length){mount.remove();return}const parts=[];let countHtml="";showAlways||(countHtml='<p class="product-card__variation-count">'+escapeHtml(formatColorCount(available.length))+"</p>");for(let i=0;i<ordered.length;i++){const node=ordered[i],vhandle=node.handle,title=node.title||"",primaryUrl=primaryImageUrl(node),sec=secondaryImage(node),secUrl=sec?.url||"",fi=node.featuredImage,cod=node.codColore?.value||"",hex=node.hexColor?.value||"",selected=rootGid?node.id===rootGid:vhandle===rootHandle,href=productUrl(node),swatchStyle=hex?"--swatch-background: linear-gradient(to right, "+hex+", "+hex+");":primaryUrl?"--swatch-background: url("+primaryUrl+");":"",bright=hex&&hexBrightness(hex)>200,whiteLabels=config.whiteLabels||[],downLabel=String(swatchLabel(node)).toLowerCase().trim(),ringInset=whiteLabels.indexOf(downLabel)!==-1?"ring-inset":"",rect=config.colorSwatchStyle==="rectangle"?"color-swatch--rectangle":"",round=config.colorSwatchStyle==="round"?"rounded-full":"",borderBright=bright?"color-swatch-border":"";parts.push('<template data-price-for="'+escapeHtml(vhandle)+'">'+buildPriceListHtml(node)+"</template>"),parts.push('<span data-variation-handle="'+escapeHtml(vhandle)+'" data-variation-url="'+escapeHtml(href)+'" data-variation-title="'+escapeHtml(title)+'" data-variation-color="'+escapeHtml(cod)+'" data-variation-image="'+escapeHtml(primaryUrl)+'" data-variation-image-alt="'+escapeHtml(fi?.altText||title)+'" data-variation-image-width="'+escapeHtml(String(fi?.width||""))+'" data-variation-image-height="'+escapeHtml(String(fi?.height||""))+'" data-variation-secondary-image="'+escapeHtml(secUrl)+'" data-variation-secondary-image-alt="'+escapeHtml(sec?.altText||title)+'" data-variation-secondary-image-width="'+escapeHtml(String(sec?.width||""))+'" data-variation-secondary-image-height="'+escapeHtml(String(sec?.height||""))+'"><div class="color-swatch-container"><a class="color-swatch '+rect+" color-swatch--sm "+ringInset+" "+round+" "+borderBright+(selected?" is-selected":"")+'" href="'+escapeHtml(href)+'" style="'+escapeHtml(swatchStyle)+'"'+(cod?' data-color="'+escapeHtml(cod)+'"':"")+'><span class="sr-only">'+escapeHtml(swatchSrOnly(node))+"</span></a></div></span>")}
65const hoverClass=showAlways?"":" product-card__variation-picker--hover-only",secondColClass=showAlways?"":"product-card__variation-picker--hover-only";let moreCol="";if(available.length>4){const rootUrl=rootProductUrl||(config.storeRoot||"/")+"products/"+encodeURIComponent(rootHandle);moreCol='<div class="'+secondColClass+'"><a href="'+escapeHtml(rootUrl)+'" data-instant target="_blank" class="product-card__variation-more"><span>+'+String(available.length-4)+"</span></a></div>"}mount.outerHTML=countHtml+'<div class="product-card__variants"><div class="product-card__variation-picker'+hoverClass+'"><div class="variant-picker"><fieldset class="variant-picker__option"><div class="variant-picker__option-values wrap gap-2">'+parts.join("")+"</div></fieldset></div></div>"+moreCol+"</div>"}).catch(function(){card.removeAttribute("data-variations-hydrated"),mount.remove()})}function boot(){document.querySelectorAll("product-card[data-variations-client]").forEach(function(card){card.getAttribute("data-variations-hydrated")!=="true"&&renderCard(card)})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",boot):boot(),document.addEventListener("shopify:section:load",boot),document.addEventListener("facet:updated",function(e){e.detail&&e.detail.success===!1||requestAnimationFrame(boot)}),document.addEventListener("collection:load-more",function(){requestAnimationFrame(boot)})})(); 66//# sourceMappingURL=/cdn/shop/t/2/assets/jkl-product-card-variations.js.map?v=166314112193535872691778160730
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.