1import{b as P,d as L,r as o,j as e,c as z,aD as v}from"./index-ZTKXnuWg.js";import{D as M,U as B}from"./DashboardLayout-D-qKat3z.js";import{L as l}from"./loader-circle-Bfh5fL0C.js";import{U as D}from"./users-CekchVG1.js";import{M as U}from"./mail-DkW48tUY.js";import{C as Y}from"./check-BDrUUT-M.js";import{c as O}from"./createLucideIcon-AdDZRUB7.js";import{T as J}from"./trash-2-erBZzA_f.js";import{X as _}from"./x-BQ-Kmscr.js";import{U as K}from"./user-C178H2kq.js";import{C as V}from"./crown-92AZMHFx.js";import"./loader-DDkoJHaP.js";import"./posthog-events-Dg9_NgYm.js";import"./module-BUp-8uxv.js";import"./client-ChWXwN-d.js";import"./index-DfmnHrSS.js";import"./external-link-T-ZN83aK.js";import"./message-square-DECgXha8.js";import"./linkedin-CWhHvBEJ.js";import"./copy-BbL3Z8B8.js";import"./circle-check-CX_VML0B.js";import"./lock-o4ZalupH.js";import"./sparkles-WFVkg8PB.js";import"./arrow-right-Bg3y25F4.js";const X=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],S=O("shield",X);function ge(){const{user:r,loading:s}=P(),n=L(),[i,u]=o.useState(null),[R,E]=o.useState(!0),[b,g]=o.useState(""),[N,T]=o.useState("member"),[a,y]=o.useState(null),h=o.useCallback(async()=>{const t=z();if(t)try{const m=await fetch("/api/team",{headers:{Authorization:`Bearer ${t}`}}),k=await m.json();m.ok&&u(k)}catch{}finally{E(!1)}},[]);o.useEffect(()=>{r&&h()},[r,h]);const c=async(t,m,k)=>{const I=z();if(!I)return!1;y(k);try{const $=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${I}`},body:JSON.stringify(m)}),q=await $.json().catch(()=>({}));return $.ok?(await h(),!0):(v.error(q?.error??(n?"Action failed":"Action échouée")),!1)}catch{return v.error(n?"Network error":"Erreur réseau"),!1}finally{y(null)}},w=async()=>{const t=b.trim();if(!t)return;await c("/api/team/invite",{email:t,role:N},"invite")&&(g(""),v.success(n?"Invitation sent":"Invitation envoyée"))};if(s||R)return e.jsx(M,{active:"composer",children:e.jsx("div",{className:"flex h-64 items-center justify-center",children:e.jsx(l,{className:"animate-spin text-ink/40"})})});const x=i?.monRole??null,f=x==="owner"||x==="admin",C=i?.seats??1,F=i?.seatsUtilises??i?.membres?.length??0,d=Math.max(0,C-F-(i?.invitations?.length??0)),j=i?.invitationsRecues??[];return e.jsx(M,{active:"composer",children:e.jsxs("div",{className:"mx-auto w-full max-w-[900px] px-3 py-8 sm:px-6 md:px-10 md:py-12",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"flex h-11 w-11 items-center justify-center rounded-[12px] bg-[#FF4419]/10 text-[#FF4419]",children:e.jsx(D,{size:22})}),e.jsxs("div",{children:[e.jsx("h1",{className:"font-display text-2xl font-bold text-ink",children:n?"Your team":"Ton équipe"}),e.jsx("p",{className:"text-[13px] text-ink/65",children:n?"One subscription, one plan for everyone. Each member keeps their own account and quotas.":"Un abonnement, un plan pour tous. Chaque membre garde son compte et ses quotas."})]})]}),j.length>0&&e.jsx("div",{className:"mt-6 space-y-2",children:j.map(t=>e.jsxs("div",{className:"flex flex-wrap items-center gap-3 rounded-[12px] border border-[#FF4419]/30 bg-[#FF4419]/5 px-4 py-3",children:[e.jsx(U,{size:18,className:"text-[#FF4419]"}),e.jsxs("span",{className:"flex-1 text-[13.5px] text-ink",children:[n?`${t.ownerNom||"A team"} invited you to join their team`:`${t.ownerNom||(n?"A team":"Une équipe")} t'invite à rejoindre son équipe`,e.jsx("span",{className:"ml-1.5 rounded-full bg-ink/8 px-2 py-0.5 text-[11px] font-semibold text-ink/64",children:G(t.role,n)})]}),e.jsxs("button",{onClick:()=>c("/api/team/accept",{invitationId:t.id},`accept:${t.id}`),disabled:a===`accept:${t.id}`,className:"inline-flex items-center gap-1.5 rounded-[10px] bg-[#FF4419] px-3.5 py-2 text-[13px] font-bold text-on-accent transition hover:brightness-110 disabled:opacity-50",children:[a===`accept:${t.id}`?e.jsx(l,{size:15,className:"animate-spin"}):e.jsx(Y,{size:15})," ",n?"Join":"Rejoindre"]})]},t.id))}),!i?.existe&&j.length===0&&e.jsx("div",{className:"mt-6 rounded-[14px] border border-ink/8 bg-ink/[0.02] px-5 py-8 text-center",children:e.jsx("p",{className:"text-[14px] text-ink/64",children:n?"You're not in a team yet. Subscribe with more than one seat to invite your team, or wait to be invited.":"Tu n'es dans aucune équipe. Prends un abonnement avec plusieurs sièges pour inviter ton équipe, ou attends une invitation."})}),i?.existe&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mt-6 flex flex-wrap gap-3",children:[e.jsx(p,{label:n?"Seats":"Sièges",value:String(C)}),e.jsx(p,{label:n?"Used":"Utilisés",value:String(F)}),e.jsx(p,{label:n?"Available":"Disponibles",value:String(d),accent:d>0}),i.plan&&e.jsx(p,{label:"Plan",value:i.plan.toUpperCase()})]}),f&&e.jsxs("div",{className:"mt-6 rounded-[14px] border border-ink/8 bg-ink/[0.02] p-5",children:[e.jsx("label",{className:"text-[12.5px] font-semibold text-ink/83",children:n?"Invite a member":"Inviter un membre"}),e.jsx("p",{className:"mt-1 text-[12px] text-ink/65",children:n?"They must already have a Makelead account with a completed profile.":"La personne doit déjà avoir un compte Makelead avec un profil rempli."}),e.jsxs("div",{className:"mt-3 flex flex-col gap-2 sm:flex-row",children:[e.jsx("input",{type:"email",value:b,onChange:t=>g(t.target.value),onKeyDown:t=>{t.key==="Enter"&&d>0&&w()},placeholder:n?"[email protected]":"[email protected]",className:"flex-1 rounded-[10px] border border-ink/12 bg-ink/[0.04] px-4 py-2.5 text-[14px] text-ink placeholder:text-ink/32 outline-none focus:border-[#FF4419]/50"}),e.jsx("div",{className:"inline-flex shrink-0 rounded-[10px] border border-ink/12 bg-ink/[0.04] p-1",children:["member","admin"].map(t=>e.jsx("button",{type:"button",onClick:()=>T(t),className:`rounded-[7px] px-3 py-1.5 text-[13px] font-semibold transition ${N===t?"bg-[#FF4419] text-on-accent":"text-ink/64 hover:text-ink"}`,children:t==="admin"?"Admin":n?"Member":"Membre"},t))}),e.jsxs("button",{onClick:w,disabled:a==="invite"||d<=0||!b.trim(),className:"inline-flex items-center justify-center gap-2 rounded-[10px] bg-[#FF4419] px-5 py-2.5 text-[14px] font-bold text-on-accent transition hover:brightness-110 disabled:opacity-50",children:[a==="invite"?e.jsx(l,{size:16,className:"animate-spin"}):e.jsx(B,{size:16})," ",n?"Invite":"Inviter"]})]}),d<=0&&e.jsx("p",{className:"mt-2 text-[12px] font-semibold text-[#FF4419]",children:n?"No seat left. Add seats from Billing to invite more.":"Plus de siège. Ajoute des sièges depuis Billing pour inviter davantage."})]}),e.jsxs("div",{className:"mt-6 overflow-hidden rounded-[14px] border border-ink/8",children:[e.jsx("div",{className:"border-b border-ink/8 bg-ink/[0.02] px-4 py-2.5 text-[11px] font-semibold uppercase tracking-wide text-ink/65",children:n?"Members":"Membres"}),(i.membres??[]).map(t=>e.jsxs("div",{className:"flex flex-wrap items-center gap-3 border-b border-ink/5 px-4 py-3 last:border-0",children:[e.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-ink/8 text-[12px] font-bold text-ink",children:H(t.nom)}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[13.5px] font-semibold text-ink",children:t.nom}),e.jsx("div",{className:"truncate text-[12px] text-ink/65",children:t.email})]}
1),e.jsx(A,{role:t.role,isEn:n}),t.role!=="owner"&&f&&e.jsxs("div",{className:"flex items-center gap-1.5",children:[x==="owner"&&e.jsx("button",{onClick:()=>c("/api/team/member",{action:"role",targetUserId:t.userId,role:t.role==="admin"?"member":"admin"},`role:${t.userId}`),disabled:a===`role:${t.userId}`,title:t.role==="admin"?n?"Make member":"Passer membre":n?"Make admin":"Passer admin",className:"inline-flex h-8 w-8 items-center justify-center rounded-lg border border-ink/10 text-ink/64 transition hover:border-ink/25 hover:text-ink disabled:opacity-50",children:a===`role:${t.userId}`?e.jsx(l,{size:14,className:"animate-spin"}):e.jsx(S,{size:14})}),e.jsx("button",{onClick:()=>{confirm(n?`Remove ${t.nom} from the team?`:`Retirer ${t.nom} de l'équipe ?`)&&c("/api/team/member",{action:"remove",targetUserId:t.userId},`remove:${t.userId}`)},disabled:a===`remove:${t.userId}`,title:n?"Remove":"Retirer",className:"inline-flex h-8 w-8 items-center justify-center rounded-lg border border-ink/10 text-rose-400 transition hover:border-rose-400/40 hover:bg-rose-500/10 disabled:opacity-50",children:a===`remove:${t.userId}`?e.jsx(l,{size:14,className:"animate-spin"}):e.jsx(J,{size:14})})]})]},t.userId))]}),f&&(i.invitations??[]).length>0&&e.jsxs("div",{className:"mt-4 overflow-hidden rounded-[14px] border border-ink/8",children:[e.jsx("div",{className:"border-b border-ink/8 bg-ink/[0.02] px-4 py-2.5 text-[11px] font-semibold uppercase tracking-wide text-ink/65",children:n?"Pending invitations":"Invitations en attente"}),(i.invitations??[]).map(t=>e.jsxs("div",{className:"flex flex-wrap items-center gap-3 border-b border-ink/5 px-4 py-3 last:border-0",children:[e.jsx(U,{size:16,className:"text-ink/40"}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-[13px] text-ink/83",children:t.email}),e.jsx(A,{role:t.role,isEn:n}),e.jsx("button",{onClick:()=>c("/api/team/cancel-invite",{invitationId:t.id},`cancel:${t.id}`),disabled:a===`cancel:${t.id}`,title:n?"Cancel":"Annuler",className:"inline-flex h-8 w-8 items-center justify-center rounded-lg border border-ink/10 text-ink/64 transition hover:border-rose-400/40 hover:text-rose-400 disabled:opacity-50",children:a===`cancel:${t.id}`?e.jsx(l,{size:14,className:"animate-spin"}):e.jsx(_,{size:14})})]},t.id))]}),x==="member"&&e.jsx("p",{className:"mt-6 text-center text-[12.5px] text-ink/65",children:n?"You're a member of this team. Your plan comes from the team captain.":"Tu es membre de cette équipe. Ton plan vient du capitaine."})]})]})})}function p({label:r,value:s,accent:n}){return e.jsxs("div",{className:"rounded-[12px] border border-ink/8 bg-ink/[0.02] px-4 py-3",children:[e.jsx("div",{className:`text-xl font-bold tabular-nums ${n?"text-[#FF4419]":"text-ink"}`,children:s}),e.jsx("div",{className:"text-[11px] text-ink/65",children:r})]})}function A({role:r,isEn:s}){const n={owner:{icon:V,cls:"bg-[#FF4419]/15 text-[#FF4419]",label:s?"Captain":"Capitaine"},admin:{icon:S,cls:"bg-blue-500/15 text-blue-400",label:"Admin"},member:{icon:K,cls:"bg-ink/10 text-ink/64",label:s?"Member":"Membre"}},i=n[r]??n.member,u=i.icon;return e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-[11.5px] font-semibold ${i.cls}`,children:[e.jsx(u,{size:11})," ",i.label]})}function G(r,s){return r==="admin"?"Admin":s?"Member":"Membre"}function H(r){const s=r.trim().split(/\s+/).filter(Boolean);return s.length?s.length===1?s[0].slice(0,2).toUpperCase():(s[0][0]+s[s.length-1][0]).toUpperCase():"?"}export{ge as component};
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.