PageSourceSearch

https://www.creativecrafthouse.com/cdn/shop/t/39/assets/cc-personalization.js?v=20283548781425592861790360662

js creativecrafthouse.com collected 2026-09-25 18:47:32 UTC 26,510 bytes, 8 lines download raw bytes

1(function(global){"use strict";const normalize=value=>String(value??"").trim().toLowerCase();function findVariant(product,variantId){return(product.variants||[]).find(variant=>String(variant.id)===String(variantId))}function isNativePersonalizationSelected(product,variantId){if(!Number.isInteger(product.nativeOptionIndex))return!1;const variant=findVariant(product,variantId);return!!(variant&&Array.isArray(variant.options)&&normalize(variant.options[product.nativeOptionIndex])==="yes")}function resolveNativeFeeMode(product,variantId){if(!Number.isInteger(product.nativeOptionIndex))return"separate";const selected=findVariant(product,variantId),optionIndex=product.nativeOptionIndex;if(!selected||!Array.isArray(selected.options))return"ambiguous";if(normalize(selected.options[optionIndex])!=="yes")return"none";const matchingNoVariants=(product.variants||[]).filter(candidate=>!Array.isArray(candidate.options)||normalize(candidate.options[optionIndex])!=="no"?!1:selected.options.every((value,index)=>index===optionIndex||value===candidate.options[index]));if(matchingNoVariants.length===0)return"ambiguous";const noPrices=[...new Set(matchingNoVariants.map(variant=>Number(variant.price)))];if(noPrices.length!==1||!Number.isFinite(noPrices[0]))return"ambiguous";const yesPrice=Number(selected.price);return Number.isFinite(yesPrice)&&yesPrice===noPrices[0]?"separate":"ambiguous"}function propertiesFromEntries(entries){const properties={};return entries.forEach(([name,value])=>{const match=/^properties\[(.+)]$/.exec(name);match&&String(value).trim()&&(properties[match[1]]=String(value))}),properties}const CARD_LIMITS=Object.freeze({to:20,message:180,closing:60,closingLines:2}),CARD_EMOJI=/[\u{1F000}-\u{1FAFF}\u{2600}-\u{27BF}\u{2B00}-\u{2BFF}\u{1F1E6}-\u{1F1FF}\u{FE0F}\u{200D}]/u;function cleanCardText(value){return String(value??"").replace(/\r\n?/g,`
2`).split(`
3`).map(line=>line.replace(/[ \t]+/g," ").trim()).join(`
4`).replace(/\n{3,}/g,`
5
6`).trim()}function cleanCard(card){return{to:cleanCardText(card&&card.to).replace(/\n+/g," "),message:cleanCardText(card&&card.message),closing:cleanCardText(card&&card.closing)}}function validateCard(card){const clean=cleanCard(card);return clean.message?clean.to.length>CARD_LIMITS.to?`The To line can be up to ${CARD_LIMITS.to} characters.`:clean.message.length>CARD_LIMITS.message?`Your card message is ${clean.message.length} characters. Please shorten it to ${CARD_LIMITS.message}.`:clean.closing.length>CARD_LIMITS.closing?`The closing can be up to ${CARD_LIMITS.closing} characters.`:clean.closing.split(`
7`).length>CARD_LIMITS.closingLines?"The closing can be up to 2 lines.":[clean.to,clean.message,clean.closing].some(text=>CARD_EMOJI.test(text))?"We can engrave letters, numbers and punctuation. Emoji can't be engraved.":"":"Enter your card message before adding it to your cart."}function buildCardProperties(card){const clean=cleanCard(card),properties={};return clean.to&&(properties.To=clean.to),properties.Message=clean.message,clean.closing&&(properties.Closing=clean.closing),card.goesWith&&(properties["Goes with"]=String(card.goesWith)),card.goesWithVariant&&(properties["_Goes with variant"]=String(card.goesWithVariant)),card.ideaId&&(properties["_Card idea"]=String(card.ideaId)),properties}function buildCartPayload(config){const quantity=Math.max(1,Number.parseInt(config.quantity,10)||1),engravingText=String(config.engravingText||"").trim(),properties={...propertiesFromEntries(config.formEntries||[])};config.standaloneCard&&config.card?Object.assign(properties,buildCardProperties(config.card)):engravingText&&(properties["Engraving text"]=engravingText);const productItem={id:String(config.variantId),quantity,properties};config.sellingPlan&&(productItem.selling_plan=String(config.sellingPlan));const items=[productItem];return config.feeMode==="separate"&&items.push({id:String(config.feeVariantId),quantity:1,properties:{"_Related to":String(config.productTitle||"Product"),"_Engraving text":engravingText}}),config.card&&!config.standaloneCard&&items.push({id:String(config.card.variantId),quantity:1,properties:buildCardProperties(config.card)}),{items}}function variantLabel(product,variantId,fallbackTitle){const title=product&&product.title||fallbackTitle||"Product",variant=product?findVariant(product,variantId):null;if(!variant||!Array.isArray(variant.options))return title;const options=variant.options.filter((value,index)=>index!==product.nativeOptionIndex&&normalize(value)!=="default title");return options.length?`${title} (${options.join(" / ")})`:title}function selectIdeas(library,setKey,family,context){if(!library)return[];const has=tag=>context.has(tag);let ideas=[];if(setKey==="family"){const own=library.families&&library.families[family];ideas=own?own.ideas.slice():[];const personalized=library.families&&library.families.personalized;family!=="personalized"&&has("engraved")&&personalized&&(ideas=ideas.concat(personalized.ideas))}else{const occasion=(library.occasions||[]).find(entry=>entry.key===setKey);ideas=occasion?occasion.ideas.slice():[]}return ideas.filter(idea=>(idea.tags||[]).every(has))}const api={CARD_LIMITS,buildCardProperties,buildCartPayload,cleanCardText,findVariant,isNativePersonalizationSelected,propertiesFromEntries,resolveNativeFeeMode,selectIdeas,validateCard,variantLabel};if(typeof module<"u"&&module.exports&&(module.exports=api),global&&(global.CCPersonalization=api),!global||!global.customElements)return;
7const PT_TO_MM=25.4/72,CARD_MM={width:101.6,left:12,right:9.6,top:14.2,bottom:8.7,nameGap:3,messageGap:4},CARD_TIERS=[[12,15],[11,13],[10,11],[10,10]];let ideasPromise=null;function loadIdeas(url){return url?(ideasPromise||(ideasPromise=fetch(url,{credentials:"same-origin"}).then(response=>response.ok?response.json():null).catch(()=>null)),ideasPromise):Promise.resolve(null)}function loadPreviewFont(){if(!global.document||global.document.querySelector("link[data-cc-card-font]"))return;const link=global.document.createElement("link");link.rel="stylesheet",link.href="https://fonts.googleapis.com/css2?family=Gelasio:wght@400;700&display=swap",link.dataset.ccCardFont="true",global.document.head.appendChild(link)}class CCPersonalizationElement extends HTMLElement{connectedCallback(){try{this.hasEngraving=this.dataset.engraving!=="false",this.toggle=this.querySelector("[data-personalization-toggle]"),this.fields=this.querySelector("[data-personalization-fields]"),this.textInput=this.querySelector("[data-engraving-text]"),this.error=this.querySelector("[data-personalization-error]"),this.initializationStatus=this.querySelector("[data-initialization-status]"),this.initializationMessage=this.querySelector("[data-initialization-message]"),this.separateFeeNote=this.querySelector("[data-fee-separate]"),this.product=this.readProductData(),this.card=this.querySelector("[data-message-card]"),this.hasCard=!!this.card,this.cardStandalone=this.hasCard&&this.dataset.cardStandalone==="true",this.hasCard&&(this.cardToggle=this.card.querySelector("[data-card-toggle]"),this.cardFields=this.card.querySelector("[data-card-fields]"),this.cardTo=this.card.querySelector("[data-card-to]"),this.cardMessage=this.card.querySelector("[data-card-message]"),this.cardClosing=this.card.querySelector("[data-card-closing]"),this.cardCount=this.card.querySelector("[data-card-count]"),this.cardFit=this.card.querySelector("[data-card-fit]"),this.cardIdeas=this.card.querySelector("[data-card-ideas]"),this.cardPills=this.card.querySelector("[data-card-pills]"),this.cardIdeaList=this.card.querySelector("[data-card-idea-list]"),this.cardPreview=this.card.querySelector("[data-card-preview]"),this.cardPreviewText=this.card.querySelector("[data-card-preview-text]"),this.previewTo=this.card.querySelector("[data-preview-to]"),this.previewMessage=this.card.querySelector("[data-preview-message]"),this.previewClosing=this.card.querySelector("[data-preview-closing]"),this.cardFitState="standard",this.ideaSet=null,this.ideasExpanded=!1,this.chosenIdea=null);const section=this.closest(".shopify-section");this.productScope=this.closest(".js-product")||section,this.form=this.productScope?this.productScope.querySelector(".js-product-form-main"):null;const variantInput=this.form&&this.form.querySelector('[name="id"]'),missingEngraving=this.hasEngraving&&(!this.fields||!this.textInput||!this.usesNativeOption&&!this.toggle),missingCard=this.hasCard&&(!this.cardFields||!this.cardMessage||!this.cardTo||!this.cardClosing||!this.cardStandalone&&!this.cardToggle);if(!this.form||!variantInput||!this.product||missingEngraving||missingCard||!this.hasEngraving&&!this.hasCard){this.showInitializationFailure();return}this.handleSubmit=this.handleSubmit.bind(this),this.sync=this.sync.bind(this),this.handlePageShow=this.handlePageShow.bind(this),this.handleCardInput=this.handleCardInput.bind(this),this.handleResize=this.handleResize.bind(this),this.formShell=this.form.closest("product-form")||this.form,this.acceleratedCheckoutState=new Map,this.lockedControlState=new Map,this.acceleratedCheckoutObserver=new MutationObserver(()=>{(this.anyActive||this.busy)&&this.setAcceleratedCheckoutHidden(!0)}),this.acceleratedCheckoutObserver.observe(this.formShell,{childList:!0,subtree:!0}),this.form.addEventListener("submit",this.handleSubmit,!0),this.form.addEventListener("change",this.sync),this.toggle&&this.toggle.addEventListener("change",this.sync),this.hasCard&&(this.cardToggle&&this.cardToggle.addEventListener("change",this.sync),[this.cardTo,this.cardMessage,this.cardClosing].forEach(input=>{input.addEventListener("input",this.handleCardInput)}),global.addEventListener("resize",this.handleResize),this.cardToggle&&global.location&&global.location.hash==="#cc-message-card"&&(this.cardToggle.checked=!0)),global.addEventListener("pageshow",this.handlePageShow),this.sync(),this.toggle&&(this.toggle.disabled=!1),this.cardToggle&&(this.cardToggle.disabled=!1),this.dataset.ready="true",this.initialized=!0}catch{this.cleanupListeners(),this.showInitializationFailure()}}disconnectedCallback(){this.cleanupListeners(),this.restoreInteractionControls(),this.acceleratedCheckoutObserver&&this.acceleratedCheckoutObserver.disconnect(),this.setAcceleratedCheckoutHidden(!1)}cleanupListeners(){this.handlePageShow&&global.removeEventListener("pageshow",this.handlePageShow),this.handleResize&&global.removeEventListener("resize",this.handleResize),this.hasCard&&this.handleCardInput&&([this.cardTo,this.cardMessage,this.cardClosing].forEach(input=>{input&&input.removeEventListener("input",this.handleCardInput)}),this.cardToggle&&this.sync&&this.cardToggle.removeEventListener("change",this.sync)),this.form&&(this.handleSubmit&&this.form.removeEventListener("submit",this.handleSubmit,!0),this.sync&&this.form.removeEventListener("change",this.sync),this.toggle&&this.sync&&this.toggle.removeEventListener("change",this.sync))}handlePageShow(event){!event.persisted||!this.awaitingCartNavigation||(this.setBusy(!1),this.sync())}readProductData(){try{return JSON.parse(this.querySelector("[data-personalization-product]").textContent)}catch{return null}}get selectedVariantId(){return new FormData(this.form).get("id")}get usesNativeOption(){return!!(this.hasEngraving&&this.product&&Number.isInteger(this.product.nativeOptionIndex))}get active(){return this.hasEngraving?this.usesNativeOption?isNativePersonalizationSelected(this.product,this.selectedVariantId):!!(this.toggle&&this.toggle.checked):!1}get cardActive(){return this.hasCard?this.cardStandalone||!!(this.cardToggle&&this.cardToggle.checked):!1}get anyActive(){return this.active||this.cardActive}get feeMode(){return this.usesNativeOption?resolveNativeFeeMode(this.product,this.selectedVariantId):this.active?"separate":"none"}sync(){if(this.busy){this.setAcceleratedCheckoutHidden(!0);return}if(this.hasEngraving){const active=this.active,feeMode=this.feeMode;this.fields.hidden=!active,this.textInput.disabled=!active,this.textInput.required=active,active||(this.textInput.value=""),this.separateFeeNote&&(this.separateFeeNote.hidden=feeMode!=="separate")}if(this.hasCard){const cardActive=this.cardActive;this.cardFields.hidden=!cardActive,[this.cardTo,this.cardMessage,this.cardClosing].forEach(input=>{input.disabled=!cardActive}),this.cardMessage.required=cardActive,cardActive&&this.activateCard()}this.setAcceleratedCheckoutHidden(this.anyActive),this.clearError()}activateCard(){loadPreviewFont(),global.document&&global.document.fonts&&!this.fontWatch&&(this.fontWatch=!0,global.document.fonts.ready.then(()=>this.updateCardPreview()),global.setTimeout(()=>this.updateCardPreview(),1500)),this.cardIdeas&&!this.ideasRequested?(this.ideasRequested=!0,loadIdeas(this.dataset.cardIdeasUrl).then(library=>{this.ideaLibrary=library,this.renderIdeas()})):this.renderIdeas(),this.updateCardPreview()}handleCardInput(event){event&&event.target===this.cardMessage&&this.chosenIdea&&this.cardMessage.value!==this.chosenIdea.text&&(this.chosenIdea.edited=!0),this.clearError(),this.updateCardPreview()}handleResize(){this.cardActive&&this.updateCardPreview()}readCardValues(){return{to:this.cardTo.value,message:this.cardMessage.value,closing:this.cardClosing.value}}currentIdeaId(){return this.chosenIdea?this.chosenIdea.edited?`${this.chosenIdea.id} (edited)`:this.chosenIdea.id:""}renderIdeas(){if(!this.cardIdeas||!this.cardPills||!this.cardIdeaList)return;const library=this.ideaLibrary;if(!library){this.cardIdeas.hidden=!0;return}const family=this.dataset.cardFamily||"",context=new Set((this.dataset.cardContext||"").split(/\s+/).filter(
7Boolean));this.active&&context.add("engraved");const sets=[];if(family&&library.families&&library.families[family]&&sets.push({key:"family",label:"For this gift"}),(library.occasions||[]).forEach(occasion=>sets.push({key:occasion.key,label:occasion.label})),!sets.length){this.cardIdeas.hidden=!0;return}(!this.ideaSet||!sets.some(set=>set.key===this.ideaSet))&&(this.ideaSet=sets[0].key),this.cardPills.replaceChildren(...sets.map(set=>{const pill=global.document.createElement("button");return pill.type="button",pill.className="cc-card__pill",pill.textContent=set.label,pill.setAttribute("aria-pressed",String(set.key===this.ideaSet)),pill.addEventListener("click",()=>{this.ideaSet=set.key,this.ideasExpanded=!1,this.renderIdeas()}),pill}));const ideas=selectIdeas(library,this.ideaSet,family,context),visible=this.ideasExpanded?ideas:ideas.slice(0,3),nodes=visible.map(idea=>{const button=global.document.createElement("button");if(button.type="button",button.className="cc-card__idea",button.textContent=idea.text,(idea.tags||[]).includes("filled")&&library.filledNote){const note=global.document.createElement("small");note.textContent=library.filledNote,button.appendChild(note)}return button.addEventListener("click",()=>this.applyIdea(idea)),button});if(!this.ideasExpanded&&ideas.length>visible.length){const more=global.document.createElement("button");more.type="button",more.className="cc-card__more",more.textContent=`More ideas (${ideas.length-visible.length})`,more.addEventListener("click",()=>{this.ideasExpanded=!0,this.renderIdeas()}),nodes.push(more)}this.cardIdeaList.replaceChildren(...nodes),this.cardIdeas.hidden=ideas.length===0&&sets.length<=1}applyIdea(idea){this.busy||(this.cardMessage.value=idea.text.slice(0,CARD_LIMITS.message),this.chosenIdea={id:idea.id,text:this.cardMessage.value,edited:!1},this.clearError(),this.updateCardPreview(),this.cardMessage.focus())}updateCardPreview(){if(!this.hasCard||!this.cardActive)return;const values=this.readCardValues(),clean=cleanCard(values),length=clean.message.length;if(this.cardCount&&(this.cardCount.textContent=`${length}/${CARD_LIMITS.message}`,length>CARD_LIMITS.message?this.cardCount.dataset.state="over":delete this.cardCount.dataset.state),!this.cardPreview||!this.cardPreviewText)return;this.previewTo.textContent=clean.to||"Mom,",this.previewMessage.textContent=clean.message||"Your message appears here, engraved exactly as you type it.",this.previewClosing.textContent=clean.closing||"Love, Emma",[this.previewTo,this.previewMessage,this.previewClosing].forEach((node,index)=>{const isEmpty=[clean.to,clean.message,clean.closing][index]==="";node.style.opacity=isEmpty?"0.45":"1"});const width=this.cardPreview.clientWidth;if(!width)return;const mm=width/CARD_MM.width,text=this.cardPreviewText;text.style.padding=`${CARD_MM.top*mm}px ${CARD_MM.right*mm}px ${CARD_MM.bottom*mm}px ${CARD_MM.left*mm}px`,this.previewTo.style.marginBottom=`${CARD_MM.nameGap*mm}px`,this.previewMessage.style.marginBottom=`${CARD_MM.messageGap*mm}px`;const available=width-(CARD_MM.left+CARD_MM.right)*mm;let nameSize=29;for(this.previewTo.style.whiteSpace="nowrap",this.previewTo.style.fontSize=`${nameSize*PT_TO_MM*mm}px`;nameSize>18&&this.previewTo.scrollWidth>available;)nameSize-=1,this.previewTo.style.fontSize=`${nameSize*PT_TO_MM*mm}px`;this.previewTo.scrollWidth>available&&(this.previewTo.style.whiteSpace="normal");let state="overflow";for(let tier=0;tier<CARD_TIERS.length;tier+=1){const[messageSize,closingSize]=CARD_TIERS[tier];if(this.previewMessage.style.fontSize=`${messageSize*PT_TO_MM*mm}px`,this.previewClosing.style.fontSize=`${closingSize*PT_TO_MM*mm}px`,text.scrollHeight<=text.clientHeight+1){state=tier===0?"standard":"smaller";break}}this.cardFitState=clean.message?state:"standard",this.cardFit&&(this.cardFit.dataset.state=this.cardFitState,clean.message?this.cardFitState==="standard"?this.cardFit.textContent="Fits at our standard size.":this.cardFitState==="smaller"?this.cardFit.textContent="A little long, so we'll engrave it in slightly smaller type.":this.cardFit.textContent="Too long to fit on the card. Please shorten it or remove a line break.":this.cardFit.textContent="")}showInitializationFailure(){delete this.dataset.ready,this.dataset.initializationFailed="true",this.toggle&&(this.toggle.disabled=!0),this.cardToggle&&(this.cardToggle.disabled=!0),this.initializationMessage&&(this.initializationMessage.textContent="Personalization controls could not be loaded."),this.initializationStatus&&(this.initializationStatus.hidden=!1),this.showError("Personalization is temporarily unavailable. Please contact us for help.")}
7setAcceleratedCheckoutHidden(hidden){if(!(!this.formShell||!this.acceleratedCheckoutState)){if(hidden){this.formShell.querySelectorAll(".shopify-payment-button, shopify-accelerated-checkout").forEach(element=>{this.acceleratedCheckoutState.has(element)||this.acceleratedCheckoutState.set(element,{hidden:element.hidden,ariaHidden:element.getAttribute("aria-hidden")}),element.hidden=!0,element.setAttribute("aria-hidden","true")});return}this.acceleratedCheckoutState.forEach((state,element)=>{element.hidden=state.hidden,state.ariaHidden==null?element.removeAttribute("aria-hidden"):element.setAttribute("aria-hidden",state.ariaHidden)}),this.acceleratedCheckoutState.clear()}}async handleSubmit(event){if(this.busy){event.preventDefault(),event.stopImmediatePropagation(),this.setAcceleratedCheckoutHidden(!0);return}const engravingActive=this.active,cardActive=this.cardActive;if(!engravingActive&&!cardActive)return;event.preventDefault(),event.stopImmediatePropagation();let engravingText="";if(engravingActive&&(engravingText=this.textInput.value.trim(),!engravingText)){this.showError("Enter the engraving text before adding this item to your cart."),this.textInput.focus();return}const formData=new FormData(this.form),variantId=formData.get("id");let feeMode="none";if(engravingActive&&(feeMode=this.usesNativeOption?resolveNativeFeeMode(this.product,variantId):"separate",feeMode==="ambiguous")){this.showError("Personalization pricing could not be verified. Please refresh the page or contact us for help.");return}const feeVariantId=this.dataset.feeVariantId;if(feeMode==="separate"&&(!feeVariantId||this.dataset.feeAvailable!=="true")){this.showError("Engraving is temporarily unavailable. Please contact us for help.");return}if(!variantId){this.showError("Choose an available product option before adding this item.");return}let card=null;if(cardActive){const values=this.readCardValues();this.updateCardPreview();const problem=validateCard(values)||(this.cardFitState==="overflow"?"Your card text is too long to fit on the card. Please shorten it or remove a line break.":"");if(problem){this.showError(problem),this.cardMessage.focus();return}if(!this.cardStandalone&&(!this.dataset.cardVariantId||this.dataset.cardAvailable!=="true")){this.showError("The wood message card is temporarily unavailable. Please contact us for help.");return}card={...values,variantId:this.dataset.cardVariantId,goesWith:this.cardStandalone?"":variantLabel(this.product,variantId,this.dataset.productTitle),goesWithVariant:this.cardStandalone?"":variantId,ideaId:this.currentIdeaId()}}const payload=buildCartPayload({variantId,quantity:formData.get("quantity"),sellingPlan:formData.get("selling_plan"),formEntries:Array.from(formData.entries()),engravingText,feeMode,feeVariantId,productTitle:this.dataset.productTitle||this.product.title,card,standaloneCard:this.cardStandalone});this.setBusy(!0),this.clearError();try{const response=await fetch(this.dataset.cartAddUrl,{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(payload)}),data=await response.json();if(!response.ok)throw new Error(data.description||data.message||"The item could not be added.");this.awaitingCartNavigation=!0,global.location.assign(this.dataset.cartUrl||"/cart")}catch(error){this.showError(error.message||"There was an error adding this item. Please try again."),this.setBusy(!1)}}setBusy(busy){this.busy=busy,this.awaitingCartNavigation=!1;const button=this.form.querySelector('[name="add"]');if(busy){this.lockInteractionControls(),this.setAcceleratedCheckoutHidden(!0),button&&button.classList.add("is-loading");return}if(this.restoreInteractionControls(),button){const variant=findVariant(this.product,this.selectedVariantId);(!variant||!variant.available)&&(button.disabled=!0,button.setAttribute("aria-disabled","true")),button.classList.remove("is-loading")}this.setAcceleratedCheckoutHidden(this.anyActive)}lockInteractionControls(){if(!this.productScope||!this.lockedControlState)return;new Set([...this.form.querySelectorAll("button, input, select, textarea"),...this.productScope.querySelectorAll("variant-picker button, variant-picker input, variant-picker select, quantity-input button"),this.toggle,this.textInput,this.cardToggle,this.cardTo,this.cardMessage,this.cardClosing]).forEac
7h(control=>{!control||this.lockedControlState.has(control)||(this.lockedControlState.set(control,{disabled:control.disabled,ariaDisabled:control.getAttribute("aria-disabled")}),control.disabled=!0,control.setAttribute("aria-disabled","true"))})}restoreInteractionControls(){this.lockedControlState&&(this.lockedControlState.forEach((state,control)=>{control.disabled=state.disabled,state.ariaDisabled==null?control.removeAttribute("aria-disabled"):control.setAttribute("aria-disabled",state.ariaDisabled)}),this.lockedControlState.clear())}showError(message){this.error&&(this.error.textContent=message,this.error.hidden=!1)}clearError(){this.error&&(this.error.textContent="",this.error.hidden=!0)}}class CCMessageCardCartElement extends HTMLElement{connectedCallback(){this.button=this.querySelector("[data-card-add]"),this.select=this.querySelector("[data-card-goes-with]"),this.to=this.querySelector("[data-card-to]"),this.message=this.querySelector("[data-card-message]"),this.closing=this.querySelector("[data-card-closing]"),this.count=this.querySelector("[data-card-count]"),this.error=this.querySelector("[data-card-error]"),!(!this.button||!this.select||!this.message||!this.to||!this.closing)&&(this.handleAdd=this.handleAdd.bind(this),this.handleInput=this.handleInput.bind(this),this.button.addEventListener("click",this.handleAdd),this.message.addEventListener("input",this.handleInput))}disconnectedCallback(){this.button&&this.handleAdd&&this.button.removeEventListener("click",this.handleAdd),this.message&&this.handleInput&&this.message.removeEventListener("input",this.handleInput)}handleInput(){this.count&&(this.count.textContent=`${cleanCardText(this.message.value).length}/${CARD_LIMITS.message}`),this.showError("")}showError(message){this.error&&(this.error.textContent=message,this.error.hidden=!message)}async handleAdd(){if(this.busy)return;const values={to:this.to.value,message:this.message.value,closing:this.closing.value},problem=validateCard(values);if(problem){this.showError(problem),this.message.focus();return}const option=this.select.options?this.select.options[this.select.selectedIndex]:null,goesWithVariant=this.select.value,goesWith=option&&option.dataset.label||this.select.dataset.label||"";if(!goesWithVariant||!this.dataset.cardVariantId){this.showError("The wood message card is temporarily unavailable. Please contact us for help.");return}this.busy=!0,this.button.disabled=!0,this.button.classList.add("is-loading");try{if(!((await fetch(`${this.dataset.cartUrl||"/cart"}.js`,{credentials:"same-origin"}).then(response2=>response2.json())).items||[]).some(item=>String(item.variant_id)===String(goesWithVariant)))throw new Error("That item is no longer in your cart.");const response=await fetch(this.dataset.cartAddUrl,{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify({items:[{id:String(this.dataset.cardVariantId),quantity:1,properties:buildCardProperties({...values,goesWith,goesWithVariant})}]})}),data=await response.json();if(!response.ok)throw new Error(data.description||data.message||"The card could not be added.");this.closest("cart-drawer")?global.document.dispatchEvent(new CustomEvent("dispatch:cart-drawer:refresh",{bubbles:!0})):global.location.reload()}catch(error){this.showError(error.message||"There was an error adding the card. Please try again.")}finally{this.busy=!1,this.button.disabled=!1,this.button.classList.remove("is-loading")}}}global.customElements.get("cc-personalization")||global.customElements.define("cc-personalization",CCPersonalizationElement),global.customElements.get("cc-message-card-cart")||global.customElements.define("cc-message-card-cart",CCMessageCardCartElement)})(typeof window<"u"?window:null);
8//# sourceMappingURL=/cdn/shop/t/39/assets/cc-personalization.js.map?v=20283548781425592861790360662

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.