1(function(){"use strict";const modal=document.getElementById("login-otp-modal");if(!modal)return;const backendUrl=(modal.dataset.backendUrl||"").replace(/\/+$/,""),verifyPath=modal.dataset.verifyPath||"/login/verify",stepPhone=modal.querySelector('[data-otp-step="phone"]'),stepRegister=modal.querySelector('[data-otp-step="register"]'),phoneForm=modal.querySelector('[data-otp-form="phone"]'),registerForm=modal.querySelector('[data-otp-form="register"]'),phoneInput=phoneForm.querySelector("#otp-phone"),phoneDisplay=registerForm.querySelector("[data-otp-phone-display]"),changePhoneBtn=registerForm.querySelector("[data-otp-change-phone]"),ERROR_MESSAGES={invalid_phone:"\u05DE\u05E1\u05E4\u05E8 \u05D8\u05DC\u05E4\u05D5\u05DF \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF",invalid_email:"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D3\u05D5\u05D0\u05F4\u05DC \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4",missing_name:"\u05D9\u05E9 \u05DC\u05DE\u05DC\u05D0 \u05E9\u05DD \u05E4\u05E8\u05D8\u05D9 \u05D5\u05E9\u05DD \u05DE\u05E9\u05E4\u05D7\u05D4",cooldown:"\u05E0\u05D0 \u05DC\u05D4\u05DE\u05EA\u05D9\u05DF \u05DE\u05E1\u05E4\u05E8 \u05E9\u05E0\u05D9\u05D5\u05EA \u05DC\u05E4\u05E0\u05D9 \u05E9\u05DC\u05D9\u05D7\u05D4 \u05E0\u05D5\u05E1\u05E4\u05EA",hourly_phone_limit:"\u05D7\u05E8\u05D2\u05EA \u05DE\u05DE\u05E1\u05E4\u05E8 \u05D4\u05E0\u05D9\u05E1\u05D9\u05D5\u05E0\u05D5\u05EA \u05DC\u05E9\u05E2\u05D4. \u05E0\u05E1\u05D4 \u05E9\u05D5\u05D1 \u05DE\u05D0\u05D5\u05D7\u05E8 \u05D9\u05D5\u05EA\u05E8",daily_phone_limit:"\u05D7\u05E8\u05D2\u05EA \u05DE\u05DE\u05E1\u05E4\u05E8 \u05D4\u05E0\u05D9\u05E1\u05D9\u05D5\u05E0\u05D5\u05EA \u05DC\u05D9\u05D5\u05DD. \u05E0\u05E1\u05D4 \u05E9\u05D5\u05D1 \u05DE\u05D7\u05E8",hourly_ip_limit:"\u05D9\u05D5\u05EA\u05E8 \u05DE\u05D3\u05D9 \u05D1\u05E7\u05E9\u05D5\u05EA \u05DE\u05D4\u05DB\u05EA\u05D5\u05D1\u05EA \u05D4\u05D6\u05D5. \u05E0\u05E1\u05D4 \u05E9\u05D5\u05D1 \u05DE\u05D0\u05D5\u05D7\u05E8 \u05D9\u05D5\u05EA\u05E8",sms_failed:"\u05E9\u05DC\u05D9\u05D7\u05EA \u05D4-SMS \u05E0\u05DB\u05E9\u05DC\u05D4. \u05E0\u05E1\u05D4 \u05E9\u05D5\u05D1",email_taken:"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D4\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC \u05DB\u05D1\u05E8 \u05D1\u05E9\u05D9\u05DE\u05D5\u05E9. \u05D0\u05E0\u05D0 \u05D4\u05D9\u05DB\u05E0\u05E1 \u05E2\u05DD \u05D4\u05DE\u05E1\u05E4\u05E8 \u05D4\u05E8\u05E9\u05D5\u05DD \u05D0\u05D5 \u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC \u05D0\u05D7\u05E8",network:"\u05EA\u05E7\u05DC\u05D4 \u05D1\u05E8\u05E9\u05EA. \u05E0\u05E1\u05D4 \u05E9\u05D5\u05D1",config:"\u05E9\u05D9\u05E8\u05D5\u05EA \u05D4\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05D0\u05D9\u05E0\u05D5 \u05DE\u05D5\u05D2\u05D3\u05E8. \u05E6\u05D5\u05E8 \u05E7\u05E9\u05E8 \u05E2\u05DD \u05D4\u05EA\u05DE\u05D9\u05DB\u05D4",generic:"\u05DE\u05E9\u05D4\u05D5 \u05D4\u05E9\u05EA\u05D1\u05E9. \u05E0\u05E1\u05D4 \u05E9\u05D5\u05D1"},panel=modal.querySelector(".otp-modal__panel");let currentTrigger=null;const BOTTOM_MARGIN=36;function viewportHeight(){return window.visualViewport?window.visualViewport.height:document.documentElement.clientHeight||window.innerHeight}function positionPanel(){if(!currentTrigger)return;const rect=currentTrigger.getBoundingClientRect(),top=Math.round(rect.bottom+20),startEdge=Math.max(8,Math.round(rect.left)-170);panel.style.top=top+"px",panel.style.left=startEdge+"px",panel.style.right="auto",panel.style.insetInlineStart="auto";const panelWidth=panel.offsetWidth;startEdge+panelWidth>window.innerWidth-8&&(panel.style.left=Math.max(8,window.innerWidth-panelWidth-8)+"px");const availableHeight=Math.max(0,viewportHeight()-top-BOTTOM_MARGIN);modal.style.setProperty("--otp-panel-height",availableHeight+"px")}function open(trigger){currentTrigger=trigger||null,modal.hidden=!1,modal.classList.add("is-open"),modal.setAttribute("aria-hidden","false"),currentTrigger&&positionPanel(),setTimeout(()=>phoneInput&&phoneInput.focus(),30)}function close(){modal.classList.remove("is-open"),modal.hidden=!0,modal.setAttribute("aria-hidden","true"),currentTrigger=null,showStep("phone"),clearErrors()}const reposition=()=>{modal.hidden||positionPanel()};window.addEventListener("resize",reposition),window.addEventListener("scroll",reposition,{passive:!0}
1),window.visualViewport&&(window.visualViewport.addEventListener("resize",reposition),window.visualViewport.addEventListener("scroll",reposition));function showStep(name){stepPhone.hidden=name!=="phone",stepRegister.hidden=name!=="register"}function clearErrors(){modal.querySelectorAll("[data-otp-error]").forEach(el=>{el.hidden=!0,el.textContent=""})}function showError(scope,code,fallbackMessage){const el=modal.querySelector(`[data-otp-error="${scope}"]`);el&&(el.textContent=ERROR_MESSAGES[code]||fallbackMessage||ERROR_MESSAGES.generic,el.hidden=!1)}function setLoading(form,loading){const btn=form.querySelector("[data-otp-submit]"),spinner=btn.querySelector(".otp-modal__spinner");btn.disabled=loading,spinner.hidden=!loading}async function apiPost(path,body){if(!backendUrl){const err=new Error("config");throw err.code="config",err}let res;try{res=await fetch(backendUrl+path,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(body)})}catch{const err=new Error("network");throw err.code="network",err}let data={};try{data=await res.json()}catch{}if(!res.ok){const err=new Error(data.error||"generic");throw err.code=data.error||"generic",err.status=res.status,err.serverMessage=data.message||"",err}return data}function redirectToVerify(phone){window.location.href="/customer_authentication/login?login_hint="+encodeURIComponent(phone)+"&return_to="+encodeURIComponent(window.location.pathname+window.location.search)}let pendingPhone="",pendingNormalizedPhone="";phoneForm.addEventListener("submit",async e=>{e.preventDefault(),clearErrors();const phone=phoneInput.value.trim();if(!phone){showError("phone","invalid_phone");return}setLoading(phoneForm,!0);try{const lookup=await apiPost("/api/storefront/phone-lookup",{phone});pendingPhone=phone,pendingNormalizedPhone=lookup.normalizedPhone||phone,lookup.exists?(await apiPost("/api/storefront/send-otp",{phone:pendingPhone}),redirectToVerify(pendingPhone)):(phoneDisplay.value=pendingPhone,showStep("register"))}catch(err){showError("phone",err.code,err.serverMessage)}finally{setLoading(phoneForm,!1)}}),registerForm.addEventListener("submit",async e=>{e.preventDefault(),clearErrors();const firstName=registerForm.firstName.value.trim(),lastName=registerForm.lastName.value.trim(),email=registerForm.email.value.trim(),petName=registerForm.petName.value.trim();if(!firstName||!lastName){showError("register","missing_name");return}if(!email){showError("register","invalid_email");return}setLoading(registerForm,!0);try{await apiPost("/api/storefront/send-otp",{phone:pendingPhone,register:{firstName,lastName,email,petName,privacyAccepted:!0,dataConsentAccepted:!0}});try{localStorage.setItem("anipet_pending_register","1")}catch{}redirectToVerify(pendingPhone)}catch(err){showError("register",err.code,err.serverMessage)}finally{setLoading(registerForm,!1)}}),changePhoneBtn.addEventListener("click",()=>{clearErrors(),showStep("phone"),setTimeout(()=>phoneInput&&phoneInput.focus(),30)}),modal.querySelectorAll("[data-otp-close]").forEach(el=>{el.addEventListener("click",close)}),document.addEventListener("keydown",e=>{e.key==="Escape"&&!modal.hidden&&close()}),document.addEventListener("click",e=>{const trigger=e.target.closest("[data-otp-login-trigger]");if(!trigger)return;e.preventDefault();const anchorSelector=trigger.getAttribute("data-otp-anchor-selector"),anchor=anchorSelector?document.querySelector(anchorSelector):trigger;open(anchor||trigger)})})(); 2//# sourceMappingURL=/cdn/shop/t/5/assets/login-otp-modal.js.map?v=97946274804421652291785235883
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.