1import{a as e,o as t}from"./N3CA111N.js";import{Ht as n,On as r,Qn as i,_ as a,_n as o,b as s,ct as c,k as l,mt as u,nr as d,tt as f,v as p,vn as m,y as h}from"./DgB56D7c.js";import{t as g}from"./BDNMzG2s.js";import{r as _}from"./OPi0QrAY.js";var v=()=>{let{$i18n:n}=e(),r=t(),i=m(!1),a=m(!1),s=m(null),c=m(null),l=m(null),u=()=>new Promise((e,t)=>{if(window.grecaptcha&&typeof window.grecaptcha.render==`function`){i.value=!0,e();return}let r=document.createElement(`script`);r.src=`https://www.google.com/recaptcha/api.js?onload=onRecaptchaLoad&render=explicit&hl=`+(n.localeProperties.value.langCode||`en`),r.async=!0,r.defer=!0,window.onRecaptchaLoad=()=>{window.grecaptcha&&typeof window.grecaptcha.render==`function`?(i.value=!0,e()):t(Error(`reCAPTCHA failed to initialize`))},r.onerror=()=>{t(Error(`Failed to load reCAPTCHA script`))},document.head.appendChild(r)}),d=async e=>{try{if(i.value||await u(),!window.grecaptcha)throw Error(`reCAPTCHA not available`);l.value=window.grecaptcha.render(e,{sitekey:r.public.recaptchaSiteKey,callback:e=>{s.value=e,a.value=!0,c.value=null},"expired-callback":()=>{f()},"error-callback":()=>{c.value=`reCAPTCHA error occurred`,a.value=!1}})}catch(e){throw c.value=e instanceof Error?e.message:`Failed to render reCAPTCHA`,e}},f=()=>{window.grecaptcha&&l.value!==null&&window.grecaptcha.reset(l.value),s.value=null,a.value=!1,c.value=null},p=()=>!window.grecaptcha||l.value===null?``:window.grecaptcha.getResponse(l.value);return{isLoaded:o(i),isVerified:o(a),token:o(s),error:o(c),render:d,reset:f,getResponse:p,verify:async()=>{let e=s.value||p();if(!e)return c.value=`No reCAPTCHA token found`,!1;try{let t=await $fetch(`/api/recaptcha/verify`,{method:`POST`,body:{token:e}});return t.success?(c.value=null,!0):(c.value=t.errors?.join(`, `)||`Verification failed`,!1)}catch{return c.value=`Verification request failed`,!1}}}},y={class:`recaptcha-widget`},b={key:0,class:`error-message`},x={"aria-live":`polite`},S=Object.assign(g(l({__name:`RecaptchaWidget.client`,emits:[`verified`,`error`,`expired`],setup(e,{expose:t,emit:o}){let l=o,g=m(),{isLoaded:S,isVerified:C,token:w,error:T,render:E,reset:D,verify:O,getResponse:k}=v(),A=m(!1);c(async()=>{if(await f(),g.value)try{await E(g.value)}catch{l(`error`,`Failed to load reCAPTCHA`)}}),n(w,e=>{e&&l(`verified`,e)}),n(T,e=>{e&&l(`error`,e)}),n(C,(e,t)=>{e&&(A.value=!1),t&&!e&&l(`expired`)});let j=()=>(A.value=!C.value,C.value),M=async()=>{if(g.value){D();try{await E(g.value)}catch{l(`error`,`Failed to reload reCAPTCHA`)}}};return t({reset:D,verify:O,getToken:()=>w.value,getResponse:k,isVerified:()=>C.value,validate:j}),(e,t)=>{let n=_;return u(),s(`div`,y,[a(`div`,{ref_key:`recaptchaContainer`,ref:g,class:i([`recaptcha-container`,{loading:!r(S)&&!r(T)}])},null,2),r(T)?(u(),s(`div`,b,[a(`span`,null,d(r(T)),1),a(`button`,{class:`retry-button`,onClick:M},` Retry `)])):h(``,!0),a(`div`,x,[A.value?(u(),p(n,{key:0,class:`input-help-text`,msg:e.$t(`input.validations.recaptcha`),error:A.value},null,8,[`msg`,`error`])):h(``,!0)])])}}}),[[`__scopeId`,`data-v-e28a4824`]]),{__name:`RecaptchaWidget`});export{S as t};
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.