1(()=>{const MODAL_SELECTOR="[data-patchouli-delivery-modal]",REQUIRED_SELECTOR="[data-patchouli-required]",DRINK_SELECTOR="[data-patchouli-wine-variant]",OPEN_CLASS="is-open",BODY_CLASS="patchouli-modal-open",APPROVED_FLAG="patchouliDeliveryApproved";let activeModal=null,previouslyFocused=null;function getFormModal(form){if(!(form instanceof HTMLFormElement))return null;const modalInsideForm=form.querySelector(MODAL_SELECTOR);return modalInsideForm?(modalInsideForm.dataset.patchouliFormId=form.id,modalInsideForm):form.id?document.querySelector(`${MODAL_SELECTOR}[data-patchouli-form-id="${CSS.escape(form.id)}"]`):null}function getFocusable(modal){return modal?Array.from(modal.querySelectorAll(["button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","[href]",'[tabindex]:not([tabindex="-1"])'].join(","))).filter(element=>element.offsetParent!==null&&!element.hasAttribute("hidden")):[]}function localDateString(date=new Date){const year=date.getFullYear(),month=String(date.getMonth()+1).padStart(2,"0"),day=String(date.getDate()).padStart(2,"0");return`${year}-${month}-${day}`}function prepareModal(modal){if(!modal)return;const date=modal.querySelector("[data-patchouli-delivery-date]");date&&(date.min=localDateString());const message=modal.querySelector("[data-patchouli-message]"),counter=modal.querySelector("[data-patchouli-message-count]");message&&counter&&(counter.textContent=String(message.value.length)),updateDrinkSelection(modal)}function moveModalToBody(modal){if(!modal||modal.parentElement===document.body)return;const parent=modal.parentElement;parent&&(modal.__patchouliOriginalParent=parent,modal.__patchouliOriginalNextSibling=modal.nextSibling,document.body.appendChild(modal))}function restoreModalPosition(modal){if(!modal)return;const parent=modal.__patchouliOriginalParent,nextSibling=modal.__patchouliOriginalNextSibling;parent instanceof HTMLElement&&(nextSibling&&nextSibling.parentNode===parent?parent.insertBefore(modal,nextSibling):parent.appendChild(modal),modal.__patchouliOriginalParent=null,modal.__patchouliOriginalNextSibling=null)}function showStep(modal,step){if(!modal)return;const stepNumber=String(step);modal.querySelectorAll("[data-patchouli-step]").forEach(panel=>{panel.hidden=panel.dataset.patchouliStep!==stepNumber}),modal.querySelectorAll("[data-patchouli-progress]").forEach(item=>{const number=Number(item.dataset.patchouliProgress),current=Number(step);item.classList.toggle("is-active",number===current),item.classList.toggle("is-complete",number<current)}),modal.dataset.patchouliCurrentStep=stepNumber;const dialog=modal.querySelector(".patchouli-delivery-modal__dialog");dialog&&dialog.scrollTo({top:0,behavior:"smooth"}),window.requestAnimationFrame(()=>
1{modal.querySelector(`[data-patchouli-step="${stepNumber}"]:not([hidden])`)?.querySelector('input:not([type="checkbox"]):not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled])')?.focus()})}function openModal(modal){!modal||modal.classList.contains(OPEN_CLASS)||(activeModal=modal,previouslyFocused=document.activeElement,prepareModal(modal),showStep(modal,1),moveModalToBody(modal),modal.classList.add(OPEN_CLASS),modal.setAttribute("aria-hidden","false"),document.body.classList.add(BODY_CLASS),window.requestAnimationFrame(()=>{const firstField=modal.querySelector('[data-patchouli-step="1"] input:not([disabled]), [data-patchouli-step="1"] select:not([disabled]), [data-patchouli-step="1"] textarea:not([disabled])'),dialog=modal.querySelector(".patchouli-delivery-modal__dialog");(firstField||dialog)?.focus()}))}function closeModal(modal,restoreFocus=!0){modal&&(modal.classList.remove(OPEN_CLASS),modal.setAttribute("aria-hidden","true"),document.body.classList.remove(BODY_CLASS),hideValidationError(modal),hideCartError(modal),restoreModalPosition(modal),restoreFocus&&previouslyFocused instanceof HTMLElement&&previouslyFocused.focus(),activeModal=null)}function hideValidationError(modal){const error=modal?.querySelector("[data-patchouli-modal-error]");error&&(error.hidden=!0)}function showCartError(modal,message){const error=modal?.querySelector("[data-patchouli-cart-error]");error&&(message&&(error.textContent=message),error.hidden=!1)}function hideCartError(modal){const error=modal?.querySelector("[data-patchouli-cart-error]");error&&(error.hidden=!0)}function markField(field,invalid){field&&(field.classList.toggle("is-invalid",invalid),invalid?field.setAttribute("aria-invalid","true"):field.removeAttribute("aria-invalid"))}function validateStepOne(modal){if(!modal)return!1;const stepOne=modal.querySelector('[data-patchouli-step="1"]');if(!stepOne)return!1;let firstInvalid=null,valid=!0;stepOne.querySelectorAll(REQUIRED_SELECTOR).forEach(field=>{const empty=!String(field.value||"").trim();markField(field,empty),empty&&(valid=!1,firstInvalid||(firstInvalid=field))});const phone=stepOne.querySelector('input[name="properties[Telefon destinatar]"]');phone&&phone.value.trim()&&phone.value.replace(/\D/g,"").length<10&&(markField(phone,!0),valid=!1,firstInvalid||(firstInvalid=phone));const date=stepOne.querySelector("[data-patchouli-delivery-date]");date&&date.value&&date.value<localDateString()&&(markField(date,!0),valid=!1,firstInvalid||(firstInvalid=date));const error=modal.querySelector("[data-patchouli-modal-error]");return error&&(error.hidden=valid),firstInvalid&&(firstInvalid.focus(),firstInvalid.scrollIntoView({behavior:"smooth",block:"center"})),valid}function getSelectedDrinks(modal){return modal?Array.from(modal.querySelectorAll(`${DRINK_SELECTOR}:checked`)).map(input=>{const id=Number(input.value);return!Number.isFinite(id)||id<=0?null:{id,quantity:1}}).filter(Boolean):[]}function updateDrinkSelection(modal){if(!modal)return;const count=modal.querySelectorAll(`${DRINK_SELECTOR}:checked`).length,selection=modal.querySelector("[data-patchouli-wine-selection]"),countElement=modal.querySelector("[data-patchouli-wine-count]");countElement&&(countElement.textContent=String(count)),selection&&(selection.hidden=count===0),modal.querySelectorAll("[data-patchouli-wine-card]").forEach(card=>{const input=card.querySelector(DRINK_SELECTOR);card.classList.toggle("is-selected",!!input?.checked)})}async function addDrinksToCart(drinks){if(!drinks.length)return!0;const response=await fetch(window.routes?.cart_add_url||"/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify({items:drinks})});let data=null;try{data=await response.json()}catch{data=null}if(!response.ok)throw new Error(data?.description||data?.message||"Nu am putut ad\u0103uga b\u0103uturile selectate \xEEn co\u0219.");return!0}function setConfirmLoading(modal,loading){const button=modal?.querySelector("[data-patchouli-modal-confirm]"),normalText=modal?.querySelector("[data-patchouli-confirm-text]"),loadingText=modal?.querySelector("[data-patchouli-confirm-loading]");button&&(button.disabled=loading,button.classList.toggle("is-loading",loading),button.setAttribute("aria-busy",loading?"true":"false")),normalText&&(normalText.hidden=loading),loadingText&&(loadingText.hidden=!loading)}function resetModal(modal){if(!modal)return;modal.querySelectorAll("input, select, textarea").forEach(field=>{if(field.matches(DRINK_SELECTOR)){field.checked=!1;return}field.type==="hidden"||field.name==="id"||(field.value="",field.classList.remove("is-invalid"),field.removeAttribute("aria-invalid"))});const counter=modal.querySelector("[data-patchouli-message-count]");counter&&(counter.textContent="0"),hideValidationError(modal),hideCartError(modal),updateDrinkSelection(modal),showStep(modal,1),prepareModal(modal)}async function approveAndSubmit(modal){if(!modal)return;if(!validateStepOne(modal)){showStep(modal,1);return}hideCartError(modal);const formId=modal.dataset.patchouliFormId;let form=formId?document.getElementById(formId):null;if(!form){const originalParent=modal.__patchouliOriginalParent;form=originalParent instanceof HTMLElement?originalParent.closest('form[data-type="add-to-cart-form"]'):null}if(!(form instanceof HTMLFormElement)){showCartError(modal,"Nu am putut identifica produsul. Re\xEEncarc\u0103 pagina \u0219i \xEEncearc\u0103 din nou.");return}const drinks=getSelectedDrinks(modal);setConfirmLoading(modal,!0);try{drinks.length>0&&await addDrinksToCart(drinks),closeModal(modal,!1),form.dataset[APPROVED_FLAG]="true",typeof form.requestSubmit=="function"?form.requestSubmit():form.querySelector('[type="submit"]')?.click(),window.setTimeout(()=>{resetModal(modal),setConfirmLoading(modal,!1)},100)}catch(error){console.error("FreshFlowers add-to-cart error:",error),setConfirmLoading(modal,!1),showCartError(modal,error?.message||"A ap\u0103rut o problem\u0103 la ad\u0103ugarea produselor. Te rug\u0103m s\u0103 \xEEncerci din nou.")}}document.addEventListener("submit",event=>{const form=event.target;if(!(form instanceof HTMLFormElement)||form.dataset.type!=="add-to-cart-form")return;if(form.dataset[APPROVED_FLAG]==="true"){delete form.dataset[APPROVED_FLAG];return}const modal=getFormModal(form);modal&&(form.id&&(modal.dataset.patchouliFormId=form.id),event.preventDefault(),event.stopImmediatePropagation(),openModal(modal))},!0),document.addEventListener("click",event=>{if(!(event.target instanceof Element))return;const close=event.target.closest("[data-patchouli-modal-close]");if(close){const modal=close.closest(MODAL_SELECTOR);modal?.classList.contains(OPEN_CLASS)&&closeModal(modal);return}const next=event.target.closest("[data-patchouli-next-step]");if(next){const modal=next.closest(MODAL_SELECTOR);if(!validateStepOne(modal))return;showStep(modal,2);return}const previous=event.target.closest("[data-patchouli-prev-step]");if(previous){const modal=previous.closest(MODAL_SELECTOR);showStep(modal,1);return}const confirm=event.target.closest("[data-patchouli-modal-confirm]");confirm&&approveAndSubmit(confirm.closest(MODAL_SELECTOR))}),document.addEventListener("input",event=>{const target=event.target;if(!(target instanceof HTMLInputElement)&&!(target instanceof HTMLTextAreaElement)&&!(target instanceof HTMLSelectElement))return;const modal=target.closest(MODAL_SELECTOR);if(modal&&(target.classList.remove("is-invalid"),target.removeAttribute("aria-invalid"),hideValidationError(modal),hideCartError(modal),target.matches("[data-patchouli-message]"))){const counter=modal.querySelector("[data-patchouli-message-count]");counter&&(counter.textContent=String(target.value.length))}}),document.addEventListener("change",event=>{const target=event.target;if(!(target instanceof Element))return;const modal=target.closest(MODAL_SELECTOR);modal&&(target.classList.remove("is-invalid"),target.removeAttribute("aria-invalid"),hideValidationError(modal),hideCartError(modal),target.matches(DRINK_SELECTOR)&&updateDrinkSelection(modal))}),document.addEventListener("keydown",event=>{if(!activeModal)return;if(event.key==="Escape"){event.preventDefault(),closeModal(activeModal);return}if(event.key!=="Tab")return;const focusable=getFocusable(activeModal);
1if(!focusable.length)return;const first=focusable[0],last=focusable[focusable.length-1];if(event.shiftKey&&document.activeElement===first){event.preventDefault(),last.focus();return}!event.shiftKey&&document.activeElement===last&&(event.preventDefault(),first.focus())});function initializeModals(root=document){root.querySelectorAll?.(MODAL_SELECTOR).forEach(modal=>{prepareModal(modal);const form=modal.closest('form[data-type="add-to-cart-form"]');form instanceof HTMLFormElement&&form.id&&(modal.dataset.patchouliFormId=form.id)})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{initializeModals()}):initializeModals(),document.addEventListener("shopify:section:load",event=>{initializeModals(event.target)}),document.addEventListener("product-info:loaded",event=>{initializeModals(event.target||document)})})(); 2//# sourceMappingURL=/cdn/shop/t/9/assets/patchouli-delivery-modal.js.map?v=124287552407857344841787822758
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.