PageSourceSearch

https://quizlab-ia.com/assets/LoginView-BUmV2nqh.js

js quizlab-ia.com collected 2026-10-04 17:43:48 UTC 13,027 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DjMwR59M.js","assets/index-aYPm0apf.css"])))=>i.map(i=>d[i]);
2import{_ as W,H as G,I as R,J,f as n,h as a,i as r,D as k,k as P,K as A,T,y as C,C as O,j as x,L as M,x as L,w as K,M as Y,N as p,O as X,P as Z,o as l,R as ee}from"./index-DjMwR59M.js";import{_ as ae}from"./logo-Ft4BtHHg.js";const te={class:"login-root"},se={class:"login-card"},oe={key:0,class:"tagline"},ie={key:1,class:"mode-header"},ne={key:2,class:"mode-header"},le={key:3,class:"mode-header"},re={key:4,class:"mode-header"},ue={key:0,class:"alert alert-success"},de={key:0,class:"alert alert-success"},ve={key:0,class:"alert alert-error"},ce={key:0,class:"field"},pe=["disabled"],me={key:1,class:"field"},fe={for:"password"},ge={class:"password-wrap"},we=["type","disabled"],ye=["aria-label"],he={key:2,class:"field"},be=["disabled"],_e={key:3,class:"field"},ke={for:"newPassword"},Ce={class:"password-wrap"},xe=["type","disabled"],Le=["aria-label"],Ee={key:4,class:"field"},Se=["type","disabled"],Re=["disabled"],Ve={key:0,class:"btn-spinner"},Pe={key:1},Ae={key:6,class:"oauth-block"},Te=["disabled"],Me={key:7,class:"magic-switch"},qe={__name:"LoginView",setup(De){const q=Z(),h=Y(),{signInWithEmail:I,signInWithMagicLink:N}=ee(),y=p(""),u=p(""),E=p(""),S=p(""),t=p("login"),v=p(!1),d=p(!1),i=p(""),c=p(!1),f=p(!1);let b=null;const z=X(()=>t.value==="forgot"?"Réinitialiser mon mot de passe":t.value==="recovery"?"Enregistrer mon nouveau mot de passe":t.value==="invite"?"Activer mon compte":t.value==="magic"?"Recevoir mon lien de connexion":"Se connecter");G(async()=>{const o=window.location.hash||"",e=h.query.recovery==="1",s=h.query.invite==="1";(e||o.includes("type=recovery"))&&(t.value="recovery",i.value="",c.value=!1),(s||o.includes("type=invite"))&&(t.value="invite",i.value="",c.value=!1);const _=h.query.token_hash,H=h.query.type;if(_&&H==="invite"){const{supabase:m}=await R(async()=>{const{supabase:w}=await import("./index-DjMwR59M.js").then(j=>j.a9);return{supabase:w}},__vite__mapDeps([0,1])),{error:g}=await m.auth.verifyOtp({token_hash:String(_),type:"invite"});if(g){const w=g.message||"";w.toLowerCase().includes("expired")||w.toLowerCase().includes("invalid")?i.value="Le lien d'invitation a expiré ou a déjà été utilisé. Contacte Ornella ([email protected]) pour recevoir une nouvelle invitation.":i.value="Une erreur est survenue lors de la vérification du lien. Contacte Ornella si le problème persiste.",t.value="login"}else t.value="invite",i.value="";window.history.replaceState&&window.history.replaceState({},"","/login?invite=1")}if(o.includes("error=")){const m=new URLSearchParams(o.replace(/^#/,"")),g=m.get("error_code"),w=m.get("error_description");g==="otp_expired"?i.value="Le lien a expiré. Demande un nouveau lien (mot de passe oublié, ou contacte Ornella si tu attendais une invitation).":g==="access_denied"?i.value="Lien invalide ou déjà utilisé. Demande un nouveau lien si besoin.":w&&(i.value=decodeURIComponent(w.replace(/\+/g," "))),window.history.replaceState&&window.history.replaceState({},"",window.location.pathname+window.location.search)}const{supabase:$}=await R(async()=>{const{supabase:m}=await import("./index-DjMwR59M.js").then(g=>g.a9);return{supabase:m}},__vite__mapDeps([0,1]));b=$.auth.onAuthStateChange(m=>{m==="PASSWORD_RECOVERY"&&(t.value="recovery",i.value="",c.value=!1)})}),J(()=>{var o;(o=b==null?void 0:b.data)!=null&&o.subscription&&b.data.subscription.unsubscribe()});function U(){t.value="forgot",i.value="",c.value=!1,f.value=!1,u.value=""}function V(){t.value="login",i.value="",c.value=!1,f.value=!1,u.value="",E.value=""}function B(){t.value="magic",i.value="",c.value=!1,f.value=!1,u.value=""}async function Q(){i.value="",d.value=!0;try{const{supabase:o}=await R(async()=>{const{supabase:s}=await import("./index-DjMwR59M.js").then(_=>_.a9);return{supabase:s}},__vite__mapDeps([0,1])),{error:e}=await o.auth.signInWithOAuth({provider:"google",options:{redirectTo:`${window.location.origin}/auth/callback`}});if(e)throw e}catch(o){i.value=D(o==null?void 0:o.message),d.value=!1}}async function F(){if(i.value="",t.value!=="recovery"&&t.value!=="invite"&&!y.value){i.value="Entre ton adresse email.";return}d.value=!0;try{const{supabase:o}=await R(async()=>{const{supabase:e}=await import("./index-DjMwR59M.js").then(s=>s.a9);return{supabase:e}},__vite__mapDeps([0,1]));if(t.value==="forgot"){const{error:e}=await o.auth.resetPasswordForEmail(y.value,{redirectTo:`${window.location.origin}/login?recovery=1`});if(e)throw e;c.value=!0,i.value=""}else if(t.value==="recovery"||t.value==="invite"){if(t.value==="invite"){const s=S.value.trim();if(!s){i.value="Entre ton prénom pour activer ton compte.";return}if(s.length>60){i.value="Prénom trop long (60 caractères max).";return}}if(!u.value||u.value.length<6){i.value="Le mot de passe doit contenir au moins 6 caractères.";return}if(u.value!==E.value){i.value="Les deux mots de passe ne correspondent pas.";return}const{error:e}=await o.auth.updateUser({password:u.value});if(e)throw e;if(t.value==="invite")try{const{data:{session:s}}=await o.auth.getSession();s!=null&&s.access_token&&await fetch("/api/account/profile",{method:"POST",headers:{Authorization:`Bearer ${s.access_token}`,"Content-Type":"application/json"},body:JSON.stringify({full_name:S.value.trim()})})}catch(s){console.warn("[LoginView] saveProfile failed:",s)}q.push("/dashboard")}else if(t.value==="magic"){const{error:e}=await N(y.value);if(e){const s=(e.message||"").toLowerCase();if(s.includes("rate limit")||s.includes("too many")||s.includes("security purposes")||s.includes("seconds")){i.value="Tu viens de demander un lien. Patiente une minute avant de réessayer.";return}console.warn("[LoginView] magic link:",e.message)}f.value=!0,i.value=""}else{if(!u.value){i.value="Entre ton mot de passe.";return}const{error:e}=await I(y.value,u.value);if(e)throw e;const s=h.query.redirect||"/dashboard";q.push(s)}}catch(o){i.value=D(o==null?void 0:o.message)}finally{d.value=!1}}function D(o=""){return o.includes("Invalid login")?"Email ou mot de passe incorrect.":o.includes("Email not confirmed")?"Confirme ton email avant de te connecter.":o.includes("Password should be")?"Le mot de passe doit contenir au moins 6 caractères.":o.includes("rate limit")?"Trop de tentatives. Réessaie dans quelques minutes.":o.includes("same as the old")?"Ce mot de passe est identique à l'ancien. Choisis-en un nouveau.":o.includes("Auth session missing")?"Session expirée. Redemande un lien de réinitialisation.":o||"Une erreur est survenue. Réessaie."}return(o,e)=>(l(),n("div",te,[e[24]||(e[24]=a("div",{class:"bg-glow bg-glow-1","aria-hidden":"true"},null,-1)),e[25]||(e[25]=a("div",{class:"bg-glow bg-glow-2","aria-hidden":"true"},null,-1)),e[26]||(e[26]=a("div",{class:"bg-glow bg-glow-3","aria-hidden":"true"},null,-1)),a("div",se,[e[23]||(e[23]=a("div",{class:"logo"},[a("img",{src:ae,alt:"QuizLab",class:"logo-img"})],-1)),t.value==="login"?(l(),n("p",oe," Quiz funnels intelligents pour entrepreneurs ambitieux ")):r("",!0),t.value==="forgot"?(l(),n("div",ie,[a("a",{href:"#",class:"back-link",onClick:k(V,["prevent"])},"← Retour à la connexion"),e[7]||(e[7]=a("h2",{class:"mode-title"},"Mot de passe oublié ?",-1)),e[8]||(e[8]=a("p",{class:"mode-explain"},"Entre ton email, on t'envoie un lien pour le réinitialiser.",-1))])):r("",!0),t.value==="recovery"?(l(),n("div",ne,[...e[9]||(e[9]=[a("h2",{class:"mode-title"},"Définis ton nouveau mot de passe",-1),a("p",{class:"mode-explain"},"Choisis un mot de passe d'au moins 6 caractères.",-1)])])):r("",!0),t.value==="invite"?(l(),n("div",le,[...e[10]||(e[10]=[a("h2",{class:"mode-title"},"Bienvenue sur QuizLab 🎉",-1),a("p",{class:"mode-explain"},"Définis ton mot de passe pour activer ton compte. Au moins 6 caractères.",-1)])])):r("",!0),t.value==="magic"?(l(),n("div",re,[a("a",{href:"#",class:"back-link",onClick:k(V,["prevent"])},"← Retour à la connexion"),e[11]||(e[11]=a("h2",{class:"mode-title"},"Connexion sans mot de passe",-1)),e[12]||(e[12]=a("p",{class:"mode-explain"},"Entre ton email, on t'envoie un lien de connexion. Pas besoin de mot de passe.",-1))])):r("",!0),P(T,{name:"fade"},{default:A(()=>[c.value?(l(),n("div",ue,[...e[13]||(e[13]=[a("span",null,"📬",-1),a("div",null,[a("strong",null,"Email envoyé !"),a("br"),x(" Vérifie ta boîte mail (et tes spams au cas où) et clique sur le lien pour définir ton nouveau mot de passe. ")],-1)])])):r("",!0)]),_:1}),P(T,{name:"fade"},{default:A(()=>[f.value?(l(),n("div",de,[...e[14]||(e[14]=[a("span",null,"📬",-1),a("div",null,[a("strong",null,"C'est parti !"),a("br"),x(" Si ton adresse est reconnue, tu reçois un lien de connexion dans une minute. Pense à vérifier tes spams. ")],-1)])])):r("",!0)]),_:1}),P(T,{name:"fade"},{default:A(()=>[i.value?(l(),n("div",ve,[e[15]||(e[15]=a("span",null,"⚠️",-1)),a("div",null,L(i.value),1)])):r("",!0)]),_:1}),!c.value&&!f.value?(l(),n("form",{key:5,onSubmit:k(F,["prevent"]),novalidate:""},[t.value==="login"||t.value==="forgot"||t.value==="magic"?(l(),n("div",ce,[e[16]||(e[16]=a("label",{for:"email"},"Adresse email",-1)),C(a("input",{id:"email","onUpdate:modelValue":e[0]||(e[0]=s=>y.value=s),type:"email",placeholder:"[email protected]",autocomplete:"email",required:"",disabled:d.value},null,8,pe),[[O,y.value]])])):r("",!0),t.value==="login"?(l(),n("div",me,[a("label",fe,[e[17]||(e[17]=x(" Mot de passe ",-1)),a("a",{href:"#",class:"label-link",onClick:k(U,["prevent"])}," Mot de passe oublié ? ")]),a("div",ge,[C(a("input",{id:"password","onUpdate:modelValue":e[1]||(e[1]=s=>u.value=s),type:v.value?"text":"password",placeholder:"••••••••",autocomplete:"current-password",required:"",disabled:d.value},null,8,we),[[M,u.value]]),a("button",{type:"button",class:"pwd-toggle","aria-label":v.value?"Masquer le mot de passe":"Afficher le mot de passe",onClick:e[2]||(e[2]=s=>v.value=!v.value)},L(v.value?"🙈":"👁️"),9,ye)])])):r("",!0),t.value==="invite"?(l(),n("div",he,[e[18]||(e[18]=a("label",{for:"firstName"},"Ton prénom",-1)),C(a("input",{id:"firstName","onUpdate:modelValue":e[3]||(e[3]=s=>S.value=s),type:"text",placeholder:"Marie",maxlength:"60",autocomplete:"given-name",required:"",disabled:d.value},null,8,be),[[O,S.value]]),e[19]||(e[19]=a("p",{class:"field-hint"},"Pour personnaliser ton expérience QuizLab.",-1))])):r("",!0),t.value==="recovery"||t.value==="invite"?(l(),n("div",_e,[a("label",ke,L(t.value==="invite"?"Choisis ton mot de passe":"Nouveau mot de passe"),1),a("div",Ce,[C(a("input",{id:"newPassword","onUpdate:modelValue":e[4]||(e[4]=s=>u.value=s),type:v.value?"text":"password",placeholder:"••••••••",autocomplete:"new-password",required:"",disabled:d.value},null,8,xe),[[M,u.value]]),a("button",{type:"button",class:"pwd-toggle","aria-label":v.value?"Masquer le mot de passe":"Afficher le mot de passe",onClick:e[5]||(e[5]=s=>v.value=!v.value)},L(v.value?"🙈":"👁️"),9,Le)])])):r("",!0),t.value==="recovery"||t.value==="invite"?(l(),n("div",Ee,[e[20]||(e[20]=a("label",{for:"passwordConfirm"},"Confirme ton mot de passe",-1)),C(a("input",{id:"passwordConfirm","onUpdate:modelValue":e[6]||(e[6]=s=>E.value=s),type:v.value?"text":"password",placeholder:"••••••••",autocomplete:"new-password",required:"",disabled:d.value},null,8,Se),[[M,E.value]])])):r("",!0),a("button",{type:"submit",class:"btn-primary",disabled:d.value},[d.value?(l(),n("span",Ve)):(l(),n("span",Pe,L(z.value),1))],8,Re)],32)):r("",!0),t.value==="login"&&!c.value&&!f.value?(l(),n("div",Ae,[e[22]||(e[22]=a("div",{class:"oauth-divider"},[a("span",null,"ou")],-1)),a("button",{type:"button",class:"btn-google",disabled:d.value,onClick:Q}
2,[...e[21]||(e[21]=[K('<svg class="g-icon" viewBox="0 0 18 18" aria-hidden="true" data-v-6da8d6d2><path fill="#4285F4" d="M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.8 2.72v2.26h2.92c1.7-1.57 2.68-3.88 2.68-6.62z" data-v-6da8d6d2></path><path fill="#34A853" d="M9 18c2.43 0 4.47-.8 5.96-2.18l-2.92-2.26c-.8.54-1.83.86-3.04.86-2.34 0-4.32-1.58-5.03-3.7H.96v2.33A9 9 0 0 0 9 18z" data-v-6da8d6d2></path><path fill="#FBBC05" d="M3.97 10.72a5.4 5.4 0 0 1 0-3.44V4.95H.96a9 9 0 0 0 0 8.1l3-2.33z" data-v-6da8d6d2></path><path fill="#EA4335" d="M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58C13.47.9 11.43 0 9 0A9 9 0 0 0 .96 4.95l3 2.33C4.68 5.16 6.66 3.58 9 3.58z" data-v-6da8d6d2></path></svg><span data-v-6da8d6d2>Continuer avec Google</span>',2)])],8,Te)])):r("",!0),t.value==="login"?(l(),n("p",Me,[a("a",{href:"#",class:"magic-link",onClick:k(B,["prevent"])},"Se connecter sans mot de passe")])):r("",!0),c.value?(l(),n("button",{key:8,type:"button",class:"btn-secondary",onClick:V}," Retour à la connexion ")):r("",!0)]),e[27]||(e[27]=a("p",{class:"footer-note"},[x(" QuizLab · Développé avec "),a("span",{class:"heart"},"♥"),x(" par "),a("strong",null,"Ornella Falk")],-1))]))}},Ne=W(qe,[["__scopeId","data-v-6da8d6d2"]]);export{Ne as default};

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.