1"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[2436],{22436(e,t,a){a.r(t),a.d(t,{default:()=>Ye});var s=a(89379),r=a(65043),l=a(45685),i=a(56328),n=a(4980),d=a(42489),o=a(9493),c=a(7118),x=a(56099),m=a(5077),h=a(98142),p=a(71751),u=a(56790),b=a(20073),f=a(35327),w=a(84669),g=a(78384),v=a(75088),j=a(72629),N=a(44919),y=a(39292),_=a(92382),k=a(7104),A=a(55731),C=a(70764),S=a(79442),L=a(51833),z=a(22024),E=a(73062),P=a(76833),R=a(50516),T=a(38326),I=a(30380),D=a(53639),U=a(65505),F=a(19340),M=a(64830),B=a(37475),O=a(35746),V=a(50781),$=a(5656),G=a(8829),W=a(70579);const q={active:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",paused:"bg-amber-500/10 text-amber-400 border-amber-500/20",revoked:"bg-red-500/10 text-red-400 border-red-500/20",pending_payment:"bg-zinc-500/10 text-zinc-400 border-zinc-500/20"},H={aspire:{label:"Aspire",cls:"bg-blue-500/10 text-blue-400 border-blue-500/20"},aspire_pro:{label:"Aspire Pro",cls:"bg-cyan-500/10 text-cyan-400 border-cyan-500/20"},arc:{label:"ARC",cls:"bg-fuchsia-500/10 text-fuchsia-400 border-fuchsia-500/20"},bluecoast:{label:"Bluecoast",cls:"bg-teal-500/10 text-teal-400 border-teal-500/20"},platinum:{label:"Platinum",cls:"bg-amber-500/10 text-amber-400 border-amber-500/20"},veluro:{label:"Veluro Partner",cls:"bg-violet-500/10 text-violet-400 border-violet-500/20"}},K=e=>H[e.partner_type]||{label:e.partner_type||"\u2014",cls:"bg-zinc-500/10 text-zinc-400 border-zinc-500/20"},Q=e=>{let{icon:t,label:a,value:s,color:r,testId:l}=e;return(0,W.jsxs)("div",{className:"rounded-xl bg-white/[0.03] border border-white/[0.07] p-4","data-testid":l,children:[(0,W.jsxs)("div",{className:"flex items-center gap-2 mb-1.5",children:[(0,W.jsx)(t,{className:"h-4 w-4 ".concat(r)}),(0,W.jsx)("p",{className:"text-[11px] text-white/40 uppercase tracking-wider",children:a})]}),(0,W.jsx)("p",{className:"text-xl font-bold text-white",children:s})]})};function X(e){let{adminToken:t}=e;const[a,l]=(0,r.useState)(null),[d,o]=(0,r.useState)([]),[x,m]=(0,r.useState)([]),[h,p]=(0,r.useState)(null),[u,b]=(0,r.useState)(!0),[f,w]=(0,r.useState)(null),[g,j]=(0,r.useState)(null),[y,_]=(0,r.useState)(null),[A,C]=(0,r.useState)(null),[S,H]=(0,r.useState)(null),[X,Y]=(0,r.useState)("resellers"),[J,Z]=(0,r.useState)(null),[ee,te]=(0,r.useState)([]),[ae,se]=(0,r.useState)({title:"",category:"email_script",content:"",file:null}),[re,le]=(0,r.useState)(!1),[ie,ne]=(0,r.useState)({email:"",partner_type:"bluecoast",plan:"growth"}),[de,oe]=(0,r.useState)(!1),[ce,xe]=(0,r.useState)(!1),[me,he]=(0,r.useState)(!1),pe={Authorization:"Bearer ".concat(t)},ue=(0,r.useCallback)(async()=>{b(!0);try{const[e,t,a,s,r]=await Promise.all([n.default.get("/admin/referrals/overview",{headers:pe}),n.default.get("/admin/referrals/partners",{headers:pe}),n.default.get("/admin/referrals/customers",{headers:pe}),n.default.get("/admin/referrals/payouts",{headers:pe}),n.default.get("/admin/referrals/materials",{headers:pe})]);l(e.data),o(t.data.partners),m(a.data.customers),p(s.data),te(r.data.materials)}catch(e){i.toast.error("Failed to load referral data")}finally{b(!1)}},[t]);(0,r.useEffect)(()=>{ue()},[ue]);const be=async(e,t)=>{try{await n.default.patch("/admin/referrals/partners/".concat(e),t,{headers:pe}),i.toast.success("Partner updated"),ue()}catch(r){var a,s;i.toast.error((null===(a=r.response)||void 0===a||null===(s=a.data)||void 0===s?void 0:s.detail)||"Update failed")}};return u?(0,W.jsx)("div",{className:"py-20 flex justify-center",children:(0,W.jsx)(z.A,{className:"h-7 w-7 text-violet-400 animate-spin"})}):(0,W.jsxs)("div",{"data-testid":"admin-referrals-tab",children:[(0,W.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-3 mb-6",children:[(0,W.jsx)(Q,{icon:c.A,label:"Partners",value:"".concat(a.active_partners,"/").concat(a.total_partners),color:"text-violet-400",testId:"ref-stat-partners"}),(0,W.jsx)(Q,{icon:N.A,label:"Referral Revenue",value:"$".concat(a.total_referral_revenue.toLocaleString()),color:"text-cyan-400",testId:"ref-stat-revenue"}),(0,W.jsx)(Q,{icon:E.A,label:"Total Commissions",value:"$".concat(a.total_commissions.toLocaleStr
1ing()),color:"text-fuchsia-400",testId:"ref-stat-commissions"}),(0,W.jsx)(Q,{icon:v.A,label:"Pending Payouts",value:"$".concat(a.pending_payouts.toLocaleString()),color:"text-amber-400",testId:"ref-stat-pending"}),(0,W.jsx)(Q,{icon:P.A,label:"Paid Payouts",value:"$".concat(a.paid_payouts.toLocaleString()),color:"text-emerald-400",testId:"ref-stat-paid"}),(0,W.jsx)(Q,{icon:c.A,label:"New Referrals (30d)",value:a.new_referrals_30d,color:"text-blue-400",testId:"ref-stat-new"})]}),(0,W.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 mb-4",children:[(0,W.jsxs)("div",{className:"flex gap-1 bg-white/[0.03] rounded-lg p-1",children:[[["resellers","Resellers"],["partners","Partners"],["customers","Customers"],["payouts","Payouts"],["materials","Materials"]].map(e=>{let[t,a]=e;return(0,W.jsx)("button",{onClick:()=>Y(t),"data-testid":"ref-subtab-".concat(t),className:"px-4 py-1.5 rounded-md text-sm font-medium transition-all ".concat(X===t?"bg-white/[0.08] text-white":"text-white/40 hover:text-white/70"),children:a},t)}),(0,W.jsx)("button",{onClick:()=>xe(!ce),"data-testid":"show-provision-btn",className:"px-4 py-1.5 rounded-md text-sm font-medium text-emerald-300 hover:text-emerald-200",children:"+ Provision Partner"})]}),(0,W.jsxs)("div",{className:"flex items-center gap-2",children:[(0,W.jsxs)("button",{onClick:async()=>{he(!0);try{const e=await n.default.post("/admin/reconcile-payments",{},{headers:pe}),{checked:t,fixed:a}=e.data;i.toast.success(a>0?"Fixed ".concat(a," paid signup").concat(1===a?"":"s"," \u2014 plan + partner status restored from Stripe"):"Checked ".concat(t," pending checkout").concat(1===t?"":"s"," \u2014 none had a completed payment")),a>0&&ue()}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Reconcile failed")}he(!1)},disabled:me,"data-testid":"ref-reconcile-btn",className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-amber-500/10 border border-amber-500/25 text-xs text-amber-300 hover:text-amber-200 disabled:opacity-60",children:[(0,W.jsx)(R.A,{className:"h-3.5 w-3.5 ".concat(me?"animate-spin":"")})," ",me?"Checking Stripe\u2026":"Reconcile Payments"]}),(0,W.jsxs)("button",{onClick:async()=>{try{const e=await fetch("".concat("https://veluro.ai","/api/admin/referrals/export"),{headers:pe}),t=await e.blob(),a=document.createElement("a");a.href=URL.createObjectURL(t),a.download="veluro-commissions-".concat((new Date).toISOString().slice(0,10),".csv"),a.click(),URL.revokeObjectURL(a.href),i.toast.success("CSV downloaded")}catch(e){i.toast.error("Export failed")}},"data-testid":"ref-export-csv-btn",className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-white/[0.05] border border-white/[0.08] text-xs text-white/70 hover:text-white",children:[(0,W.jsx)(k.A,{className:"h-3.5 w-3.5"})," Export Commissions CSV"]})]})]}),ce&&(0,W.jsxs)("div",{className:"rounded-xl bg-emerald-500/[0.05] border border-emerald-500/25 p-4 mb-4 flex flex-wrap items-end gap-3","data-testid":"provision-form",children:[(0,W.jsxs)("div",{className:"flex-1 min-w-[220px]",children:[(0,W.jsx)("p",{className:"text-[11px] text-white/40 mb-1",children:"User email (must have a Veluro account)"}),(0,W.jsx)("input",{value:ie.email,onChange:e=>ne((0,s.A)((0,s.A)({},ie),{},{email:e.target.value})),placeholder:"[email protected]","data-testid":"provision-email",className:"w-full bg-black/40 border border-white/10 rounded-lg px-3 py-2 text-sm text-white outline-none focus:border-emerald-500/50"})]}),(0,W.jsxs)("div",{children:[(0,W.jsx)("p",{className:"text-[11px] text-white/40 mb-1",children:"Partner type"}),(0,W.jsx)("select",{value:ie.partner_type,onChange:e=>ne((0,s.A)((0,s.A)({},ie),{},{partner_type:e.target.value})),"data-testid":"provision-type",className:"bg-black/40 border border-white/10 rounded-lg px-3 py-2 text-sm text-white outline-none",children:[["bluecoast","Bluecoast"],["propartner","Pro Partners"],["aspire","Aspire"],["aspire_pro","Aspire Pro"],["arc","ARC"],["veluro","Veluro Partner"],["resell","Reseller"],["platinum","Platinum"]].map(e=>
1{let[t,a]=e;return(0,W.jsx)("option",{value:t,children:a},t)})})]}),(0,W.jsxs)("div",{children:[(0,W.jsx)("p",{className:"text-[11px] text-white/40 mb-1",children:"Plan"}),(0,W.jsx)("select",{value:ie.plan,onChange:e=>ne((0,s.A)((0,s.A)({},ie),{},{plan:e.target.value})),"data-testid":"provision-plan",className:"bg-black/40 border border-white/10 rounded-lg px-3 py-2 text-sm text-white outline-none",children:[["free","Free (50 credits)"],["starter","Starter (1,250 credits)"],["growth","Growth (3,500 credits)"],["command","Command (8,000 credits)"],["scale","Scale (20,000 credits)"],["enterprise","Enterprise (50,000 credits)"]].map(e=>{let[t,a]=e;return(0,W.jsx)("option",{value:t,children:a},t)})})]}),(0,W.jsx)("button",{onClick:async()=>{if(ie.email){oe(!0);try{const e=await n.default.post("/admin/referrals/partners/provision",ie,{headers:pe});i.toast.success("Partner active \u2014 link: ".concat(e.data.referral_url)),xe(!1),ne({email:"",partner_type:"bluecoast",plan:"growth"}),ue()}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Provisioning failed")}oe(!1)}else i.toast.error("Enter the user email")},disabled:de,"data-testid":"provision-submit-btn",className:"px-4 py-2 rounded-lg bg-emerald-600 hover:bg-emerald-500 text-sm font-bold text-white disabled:opacity-60",children:de?"Provisioning\u2026":"Make Partner"}),(0,W.jsx)("p",{className:"w-full text-[11px] text-white/35",children:"Activates instantly (no payment), sends the welcome email with their referral link, and unlocks the Partner Dashboard + Marketing Library."})]}),"resellers"===X&&(0,W.jsxs)("div",{className:"space-y-3","data-testid":"ref-resellers-panel",children:[[...d].sort((e,t)=>(t.lifetime_referrals||0)-(e.lifetime_referrals||0)).map(e=>{const t=K(e),a=x.filter(t=>t.referred_by_partner_id===e.partner_id),s=d.filter(t=>t.parent_partner_id===e.partner_id),r=J===e.partner_id;return(0,W.jsxs)("div",{className:"rounded-xl bg-white/[0.02] border border-white/[0.07] overflow-hidden",children:[(0,W.jsxs)("button",{"data-testid":"reseller-row-".concat(e.referral_code),onClick:()=>Z(r?null:e.partner_id),className:"w-full flex items-center gap-4 px-4 py-3.5 text-left hover:bg-white/[0.02] transition-colors",children:[(0,W.jsx)(T.A,{className:"h-4 w-4 text-white/30 shrink-0 transition-transform ".concat(r?"rotate-90":"")}),(0,W.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,W.jsxs)("p",{className:"font-medium text-white/90 truncate",children:[e.first_name," ",e.last_name,(0,W.jsx)("span",{className:"text-white/35 text-xs ml-2",children:e.company_name||e.email})]}),(0,W.jsxs)("p",{className:"text-[11px] text-white/35",children:["Code: ",(0,W.jsx)("span",{className:"text-violet-300 font-semibold",children:e.referral_code})]})]}),(0,W.jsx)("span",{className:"text-[11px] px-2 py-0.5 rounded-full border shrink-0 whitespace-nowrap ".concat(t.cls),children:t.label}),(0,W.jsx)("span",{className:"text-[11px] px-2 py-0.5 rounded-full border shrink-0 hidden sm:inline ".concat(q[e.status]||q.pending_payment),children:(e.status||"").replace("_"," ")}),(0,W.jsxs)("div",{className:"text-right shrink-0 w-20",children:[(0,W.jsx)("p",{className:"text-sm font-bold text-white",children:a.length}),(0,W.jsx)("p",{className:"text-[10px] text-white/35 uppercase tracking-wider",children:"businesses"})]}),s.length>0&&(0,W.jsxs)("div",{className:"text-right shrink-0 w-20 hidden md:block",children:[(0,W.jsx)("p",{className:"text-sm font-bold text-cyan-400",children:s.length}),(0,W.jsx)("p",{className:"text-[10px] text-white/35 uppercase tracking-wider",children:"resellers"})]}),(0,W.jsxs)("div",{className:"text-right shrink-0 w-24 hidden md:block",children:[(0,W.jsxs)("p",{className:"text-sm font-bold text-emerald-400",children:["$",(e.lifetime_commissions||0).toLocaleString()]}),(0,W.jsx)("p",{className:"text-[10px] text-white/35 uppercase tracking-wider",children:"earned"})]})]}),r&&(0,W.jsxs)("div",{className:"border-t border-white/[0.06] px-5 py-4 space-y-5","data-testid":"reseller-downline-".concat(e.referral_code),children:[s.length>0&&(0,W.jsxs)("div",{children:[(0,W.jsxs)("p",{className:"text-[11px] uppercase tracking-wider text-white/40 mb-2 flex items-center gap-1.5",children:[(0,W.jsx)(I.A,{className:"h-3.5 w-3.5 text-cyan-400"})," Sub-resellers invited (",s.length,")"]}),(0,W.jsx)("div",{className:"flex flex-wrap gap-2",children:s.map(e=>(0,W.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-white/[0.04] border border-white/[0.08] text-xs text-white/75",children:[e.first_name," ",e.last_name,(0,W.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded-full border ".concat(K(e).cls),children:K(e).label}),(0,W.jsxs)("span",{className:"text-white/35",children:[e.lifetime_referrals||0," referrals"]})]},e.partner_id))})]}),(0,W.jsxs)("div",{children:[(0,W.jsxs)("p",{className:"text-[11px] uppercase tracking-wider text-white/40 mb-2 flex items-center gap-1.5",children:[(0,W.jsx)(D.A,{className:"h-3.5 w-3.5 text-violet-400"})," Businesses signed up (",a.length,")"]}),0===a.length?(0,W.jsx)("p",{className:"text-sm text-white/30",children:"No businesses referred yet."}):(0,W.jsx)("div",{className:"rounded-lg border border-white/[0.06] overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"text-left text-white/35 text-[11px] uppercase tracking-wider border-b border-white/[0.06]",children:[(0,W.jsx)("th",{className:"px-3 py-2 font-medium",children:"Business"}),(0,W.jsx)("th",{className:"px-3 py-2 font-medium",children:"Plan"}),(0,W.jsx)("th",{className:"px-3 py-2 font-medium",children:"Monthly"}),(0,W.jsx)("th",{className:"px-3 py-2 font-medium",children:"Status"}),(0,W.jsx)("th",{className:"px-3 py-2 font-medium",children:"Signed up"})]})}),(0,W.jsx)("tbody",{children:a.map(e=>(0,W.jsxs)("tr",{className:"border-b border-white/[0.04] last:border-0",children:[(0,W.jsx)("td",{className:"px-3 py-2 text-white/85",children:e.email}),(0,W.jsx)("td",{className:"px-3 py-2 text-white/60",children:e.subscription_plan?e.subscription_plan.charAt(0).toUpperCase()+e.subscription_plan.slice(1):"\u2014"}),(0,W.jsx)("td",{className:"px-3 py-2 text-white/60",children:e.monthly_price>
10?"$".concat(e.monthly_price.toLocaleString()):"\u2014"}),(0,W.jsx)("td",{className:"px-3 py-2",children:(0,W.jsx)("span",{className:"text-[11px] px-2 py-0.5 rounded-full border ".concat("active"===e.status?q.active:"bg-blue-500/10 text-blue-400 border-blue-500/20"),children:(e.status||"").replace("_"," ")})}),(0,W.jsx)("td",{className:"px-3 py-2 text-white/45",children:e.signup_date?new Date(e.signup_date).toLocaleDateString():"\u2014"})]},e.customer_id))})]})})]})]})]},e.partner_id)}),0===d.length&&(0,W.jsx)("p",{className:"py-14 text-center text-white/30 text-sm rounded-xl bg-white/[0.02] border border-white/[0.07]",children:"No resellers yet."})]}),"partners"===X&&(0,W.jsx)("div",{className:"rounded-xl bg-white/[0.02] border border-white/[0.07] overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm","data-testid":"ref-partners-table",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"text-left text-white/35 text-xs uppercase tracking-wider border-b border-white/[0.06]",children:[(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Partner"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Tier"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Code"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Rate"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Referrals"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Revenue"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Commissions"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Status"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Actions"})]})}),(0,W.jsxs)("tbody",{children:[d.map(e=>(0,W.jsxs)("tr",{className:"border-b border-white/[0.04] hover:bg-white/[0.02]",children:[(0,W.jsxs)("td",{className:"px-4 py-3",children:[(0,W.jsxs)("p",{className:"font-medium text-white/90",children:[e.first_name," ",e.last_name]}),(0,W.jsx)("p",{className:"text-[11px] text-white/35",children:e.company_name||e.email})]}),(0,W.jsx)("td",{className:"px-3 py-3",children:(null===g||void 0===g?void 0:g.partner_id)===e.partner_id?(0,W.jsxs)("div",{className:"flex items-center gap-1",children:[(0,W.jsx)("select",{autoFocus:!0,value:g.partner_type,onChange:e=>j((0,s.A)((0,s.A)({},g),{},{partner_type:e.target.value})),className:"h-7 rounded bg-black/40 border border-violet-500/40 px-1.5 text-xs text-white","data-testid":"ref-type-select",children:[["bluecoast","Bluecoast"],["aspire","Aspire"],["aspire_pro","Aspire Pro"],["arc","ARC"],["propartner","Pro Partners"],["veluro","Veluro Partner"],["resell","Reseller"],["platinum","Platinum"],["diamond","Diamond"]].map(e=>{let[t,a]=e;return(0,W.jsx)("option",{value:t,children:a},t)})}),(0,W.jsx)("button",{onClick:()=>{be(e.partner_id,{partner_type:g.partner_type}),j(null)},className:"text-emerald-400 text-xs","data-testid":"ref-type-save",title:"Switch channel (sets that tier's standard rate)",children:"\u2713"}),(0,W.jsx)("button",{onClick:()=>j(null),className:"text-white/40 text-xs",children:"\u2715"})]}):(0,W.jsxs)("button",{onClick:()=>j({partner_id:e.partner_id,partner_type:e.partner_type||"bluecoast"}),className:"inline-flex items-center gap-1 group","data-testid":"ref-type-edit-".concat(e.referral_code),title:"Change reseller channel / tier",children:[(0,W.jsx)("span",{className:"text-[11px] px-2 py-0.5 rounded-full border whitespace-nowrap ".concat(K(e).cls),children:K(e).label}),(0,W.jsx)(U.A,{className:"h-3 w-3 text-white/30 group-hover:text-white/60"})]})}),(0,W.jsx)("td",{className:"px-3 py-3 text-violet-300 font-semibold",children:e.referral_code}),(0,W.jsx)("td",{className:"px-3 py-3",children:(null===f||void 0===f?void 0:f.partner_id)===e.partner_id?(0,W.jsxs)("div",{className:"flex items-center gap-1",children:[(0,W.jsx)("input",{autoFocus:!0,t
1ype:"number",min:"0",max:"100",value:f.rate,onChange:e=>w((0,s.A)((0,s.A)({},f),{},{rate:e.target.value})),className:"w-14 h-7 rounded bg-black/40 border border-violet-500/40 px-1.5 text-xs text-white","data-testid":"ref-rate-input"}),(0,W.jsx)("button",{onClick:()=>{be(e.partner_id,{commission_rate:parseFloat(f.rate)/100}),w(null)},className:"text-emerald-400 text-xs","data-testid":"ref-rate-save",children:"\u2713"}),(0,W.jsx)("button",{onClick:()=>w(null),className:"text-white/40 text-xs",children:"\u2715"})]}):(0,W.jsxs)("button",{onClick:()=>w({partner_id:e.partner_id,rate:Math.round(100*e.commission_rate)}),className:"flex items-center gap-1 text-white/70 hover:text-white","data-testid":"ref-rate-edit-".concat(e.referral_code),children:[Math.round(100*e.commission_rate),"% ",(0,W.jsx)(U.A,{className:"h-3 w-3 text-white/30"})]})}),(0,W.jsx)("td",{className:"px-3 py-3 text-white/60",children:e.lifetime_referrals||0}),(0,W.jsxs)("td",{className:"px-3 py-3 text-white/60",children:["$",(e.lifetime_revenue||0).toLocaleString()]}),(0,W.jsxs)("td",{className:"px-3 py-3 text-emerald-400",children:["$",(e.lifetime_commissions||0).toLocaleString()]}),(0,W.jsx)("td",{className:"px-3 py-3",children:(0,W.jsx)("span",{className:"text-[11px] px-2 py-0.5 rounded-full border ".concat(q[e.status]||q.pending_payment),children:e.status.replace("_"," ")})}),(0,W.jsx)("td",{className:"px-3 py-3",children:(0,W.jsxs)("div",{className:"flex items-center gap-1.5",children:["active"===e.status&&(0,W.jsx)("button",{title:"Pause",onClick:()=>be(e.partner_id,{status:"paused"}),"data-testid":"ref-pause-".concat(e.referral_code),className:"p-1.5 rounded bg-amber-500/10 text-amber-400 hover:bg-amber-500/20",children:(0,W.jsx)(F.A,{className:"h-3.5 w-3.5"})}),"paused"===e.status&&(0,W.jsx)("button",{title:"Reactivate",onClick:()=>be(e.partner_id,{status:"active"}),"data-testid":"ref-activate-".concat(e.referral_code),className:"p-1.5 rounded bg-emerald-500/10 text-emerald-400 hover:bg-emerald-500/20",children:(0,W.jsx)(M.A,{className:"h-3.5 w-3.5"})}),"revoked"!==e.status&&(0,W.jsx)("button",{title:"Revoke",onClick:()=>C(e),"data-testid":"ref-revoke-".concat(e.referral_code),className:"p-1.5 rounded bg-red-500/10 text-red-400 hover:bg-red-500/20",children:(0,W.jsx)(B.A,{className:"h-3.5 w-3.5"})}),(0,W.jsx)("button",{title:"Resend referral link",onClick:()=>(async e=>{try{const t=await n.default.post("/admin/referrals/partners/".concat(e,"/resend-link"),{},{headers:pe});navigator.clipboard.writeText(t.data.referral_url),i.toast.success("Link sent to partner & copied to clipboard")}catch(t){i.toast.error("Failed")}})(e.partner_id),"data-testid":"ref-resend-".concat(e.referral_code),className:"p-1.5 rounded bg-white/[0.05] text-white/60 hover:text-white",children:(0,W.jsx)(O.A,{className:"h-3.5 w-3.5"})})]})})]},e.partner_id)),0===d.length&&(0,W.jsx)("tr",{children:(0,W.jsx)("td",{colSpan:9,className:"px-4 py-10 text-center text-white/30 text-sm",children:"No referral partners yet."})})]})]})}),"customers"===X&&(0,W.jsx)("div",{className:"rounded-xl bg-white/[0.02] border border-white/[0.07] overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm","data-testid":"ref-customers-table",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"text-left text-white/35 text-xs uppercase tracking-wider border-b border-white/[0.06]",children:[(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Customer"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Referred By"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Plan"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Monthly"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Status"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Signup Date"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Actions"})]})}),(0,W.jsxs)("tbody",{children:[x.map(e=>(0,W.jsxs)("tr",{className:"border-b border-white/[0.04] hover:bg-white/[0.02]",children:[(0,W.jsx)("td",{className:"px-4 py-3 text-white/90",children:e.email}),(0,W.jsxs)("td",{className:"px-3 py-3 text-white/60",children:[e.partner_name," ",(0,W.jsxs)("span",{className:"text-violet-300/70 text-xs",children:["(",e.referral_code,")"]})]}),(0,W.jsx)("td",{className:"px-3 py-3 text-white/60",children:e.subscription_plan?e.subscription_plan.charAt(0).toUpperCase()+e.subscription_plan.slice(1):"\u2014"}),(0,W.jsx)("td",{className:"px-3 py-3 text-white/60",children:e.monthly_price>
10?"$".concat(e.monthly_price.toLocaleString()):"\u2014"}),(0,W.jsx)("td",{className:"px-3 py-3",children:(0,W.jsx)("span",{className:"text-[11px] px-2 py-0.5 rounded-full border ".concat("active"===e.status?q.active:"bg-blue-500/10 text-blue-400 border-blue-500/20"),children:e.status.replace("_"," ")})}),(0,W.jsx)("td",{className:"px-3 py-3 text-white/45",children:e.signup_date?new Date(e.signup_date).toLocaleDateString():"\u2014"}),(0,W.jsx)("td",{className:"px-3 py-3",children:(0,W.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,W.jsx)("button",{title:"Record paid invoice (generate commission)",onClick:()=>H({customer_id:e.customer_id,amount:e.monthly_price||""}),"data-testid":"ref-record-invoice-".concat(e.customer_id),className:"p-1.5 rounded bg-emerald-500/10 text-emerald-400 hover:bg-emerald-500/20",children:(0,W.jsx)(V.A,{className:"h-3.5 w-3.5"})}),(0,W.jsx)("button",{title:"Transfer to another partner",onClick:()=>_({customer_id:e.customer_id,new_partner_id:""}),"data-testid":"ref-transfer-".concat(e.customer_id),className:"p-1.5 rounded bg-white/[0.05] text-white/60 hover:text-white",children:(0,W.jsx)($.A,{className:"h-3.5 w-3.5"})})]})})]},e.customer_id)),0===x.length&&(0,W.jsx)("tr",{children:(0,W.jsx)("td",{colSpan:7,className:"px-4 py-10 text-center text-white/30 text-sm",children:"No referred customers yet."})})]})]})}),"payouts"===X&&(0,W.jsxs)("div",{children:[(0,W.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,W.jsxs)("p",{className:"text-sm text-white/50",children:["Total pending: ",(0,W.jsxs)("span",{className:"text-amber-400 font-bold text-base",children:["$",h.total_pending.toLocaleString()]})]}),h.payouts.length>0&&(0,W.jsxs)("button",{onClick:async()=>{try{const e=await n.default.post("/admin/referrals/payouts/approve",{},{headers:pe});i.toast.success("Approved ".concat(e.data.approved," commissions \u2014 $").concat(e.data.total_paid.toLocaleString()," marked paid")),ue()}catch(e){i.toast.error("Approval failed")}},"data-testid":"ref-approve-all-btn",className:"flex items-center gap-2 px-4 py-2 rounded-lg bg-emerald-600 hover:bg-emerald-500 text-sm font-semibold text-white",children:[(0,W.jsx)(P.A,{className:"h-4 w-4"})," Approve All Payouts"]})]}),(0,W.jsx)("div",{className:"rounded-xl bg-white/[0.02] border border-white/[0.07] overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm","data-testid":"ref-payouts-table",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"text-left text-white/35 text-xs uppercase tracking-wider border-b border-white/[0.06]",children:[(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Partner"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Payout Email"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Method"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Commissions"}),(0,W.jsx)("th",{className:"px-3 py-3 font-medium",children:"Total Payout"})]})}),(0,W.jsxs)("tbody",{children:[h.payouts.map(e=>(0,W.jsxs)("tr",{className:"border-b border-white/[0.04]",children:[(0,W.jsx)("td",{className:"px-4 py-3 text-white/90 font-medium",children:e.partner_name}),(0,W.jsx)("td",{className:"px-3 py-3 text-white/60",children:e.payout_email}),(0,W.jsx)("td",{className:"px-3 py-3 text-white/60",children:(e.payment_method||"").replace("_"," ")}),(0,W.jsx)("td",{className:"px-3 py-3 text-white/60",children:e.commission_count}),(0,W.jsxs)("td",{className:"px-3 py-3 text-amber-400 font-bold",children:["$",e.total_payout.toLocaleString()]})]},e.partner_id)),0===h.payouts.length&&(0,W.jsx)("tr",{children:(0,W.jsx)("td",{colSpan:5,className:"px-4 py-10 text-center text-white/30 text-sm",children:"No pending payouts. All commissions settled."})})]})]})}),(0,W.jsxs)("p",{className:"text-[11px] text-white/30 mt-3 flex items-center gap-1.5",children:[(0,W.jsx)(G.A,{className:"h-3 w-3"})," Refund a customer? Reverse the commission from the ledger via API \u2014 reversals create immutable negative entries."]})]}),"materials"===X&&(0,W.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-[380px_1fr] gap-5",children:[(0,W.jsxs)("div",{className:"rounded-xl bg-white/[0.02] border border-white/[0.07] p-5 h-fit","data-testid":"material-upload-form",children:[(0,W.jsx)("h3",{className:"font-semibold text-white mb-4",children:"Add Marketing Material"}),(0,W.jsx)("input",{value:ae.title,onChange:e=>se((0,s.A)((0,s.A)({},ae),{},{title:e.target.value})),placeholder:"Title (e.g. Cold Email #1)","data-testid":"mat-title",className:"w-full h-10 rounded-lg bg-black/30 border border-white/[0.1] px-3 text-sm text-white mb-3"}),(0,W.jsxs)("select",{value:ae.category,onChange:e=>se((0,s.A)((0,s.A)({},ae),{},{category:e.target.value})),"data-testid":"mat-category",className:"w-full h-10 rounded-lg bg-black/30 border border-white/[0.1] px-3 text-sm text-white/80 mb-3",children:[(0,W.jsx)("option",{value:"email_script",children:"Email Script"}
1),(0,W.jsx)("option",{value:"linkedin_script",children:"LinkedIn Script"}),(0,W.jsx)("option",{value:"text_script",children:"Text / SMS Script"}),(0,W.jsx)("option",{value:"image_ad",children:"Image Ad"}),(0,W.jsx)("option",{value:"video_ad",children:"Video Ad"}),(0,W.jsx)("option",{value:"ad_script",children:"Ad Script"})]}),(0,W.jsx)("textarea",{value:ae.content,onChange:e=>se((0,s.A)((0,s.A)({},ae),{},{content:e.target.value})),placeholder:"Script / copy text (partners can copy this)",rows:6,"data-testid":"mat-content",className:"w-full rounded-lg bg-black/30 border border-white/[0.1] px-3 py-2 text-sm text-white mb-3"}),(0,W.jsx)("input",{type:"file",onChange:e=>{var t;return se((0,s.A)((0,s.A)({},ae),{},{file:(null===(t=e.target.files)||void 0===t?void 0:t[0])||null}))},"data-testid":"mat-file",className:"w-full text-xs text-white/50 mb-4 file:mr-3 file:px-3 file:py-1.5 file:rounded-lg file:border-0 file:bg-white/[0.08] file:text-white/70 file:text-xs"}),(0,W.jsx)("button",{onClick:async()=>{if(ae.title&&(ae.content||ae.file)){le(!0);try{let e={title:ae.title,category:ae.category,content:ae.content};if(ae.file){const t=await new Promise((e,t)=>{const a=new FileReader;a.onload=()=>e(a.result),a.onerror=t,a.readAsDataURL(ae.file)});e=(0,s.A)((0,s.A)({},e),{},{file_base64:t,file_name:ae.file.name,content_type:ae.file.type})}await n.default.post("/admin/referrals/materials",e,{headers:pe}),i.toast.success("Material added"),se({title:"",category:"email_script",content:"",file:null}),ue()}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Upload failed")}finally{le(!1)}}else i.toast.error("Title and content or file required")},disabled:re,"data-testid":"mat-submit",className:"w-full h-10 rounded-lg bg-violet-600 hover:bg-violet-500 text-sm font-semibold text-white disabled:opacity-50",children:re?"Uploading\u2026":"Add Material"})]}),(0,W.jsxs)("div",{className:"rounded-xl bg-white/[0.02] border border-white/[0.07] overflow-hidden",children:[(0,W.jsxs)("div",{className:"px-5 py-3 border-b border-white/[0.06] text-sm font-semibold text-white",children:["Uploaded Materials (",ee.length,")"]}),0===ee.length?(0,W.jsx)("p",{className:"p-8 text-center text-white/30 text-sm",children:"No materials yet. Add scripts and ad creatives for your partners."}):(0,W.jsx)("div",{className:"divide-y divide-white/[0.04]",children:ee.map(e=>(0,W.jsxs)("div",{className:"px-5 py-3 flex items-center justify-between gap-3",children:[(0,W.jsxs)("div",{className:"min-w-0",children:[(0,W.jsx)("p",{className:"text-sm text-white/90 font-medium truncate",children:e.title}),(0,W.jsxs)("p",{className:"text-[11px] text-white/35",children:[e.category.replace("_"," ")," ",e.file_name?"\xb7 ".concat(e.file_name):""]})]}),(0,W.jsx)("button",{onClick:()=>(async e=>{try{await n.default.delete("/admin/referrals/materials/".concat(e),{headers:pe}),i.toast.success("Deleted"),te(t=>t.filter(t=>t.material_id!==e))}catch(t){i.toast.error("Delete failed")}})(e.material_id),"data-testid":"mat-delete-".concat(e.material_id),className:"text-xs text-red-400/70 hover:text-red-400 shrink-0",children:"Delete"})]},e.material_id))})]})]}),y&&(0,W.jsx)("div",{className:"fixed inset-0 z-50 bg-black/70 flex items-center justify-center px-4",onClick:()=>_(null),children:(0,W.jsxs)("div",{className:"bg-[#0d0d12] border border-white/[0.1] rounded-2xl p-6 w-full max-w-sm",onClick:e=>e.stopPropagation(),"data-testid":"ref-transfer-modal",children:[(0,W.jsx)("h3",{className:"font-semibold text-white mb-4",children:"Transfer customer to another partner"}),(0,W.jsxs)("select",{value:y.new_partner_id,onChange:e=>_((0,s.A)((0,s.A)({},y),{},{new_partner_id:e.target.value})),className:"w-full h-11 rounded-xl bg-black/40 border border-white/[0.1] px-3 text-sm text-white mb-4","data-testid":"ref-transfer-select",children:[(0,W.jsx)("option",{value:"",children:"Select partner\u2026"}),d.filter(e=>"active"===e.status).map(e=>(0,W.jsxs)("option",{value:e.partner_id,children:[e.first_name," ",e.last_name," (",e.referral_code,")"]},e.partner_id))]}),(0,W.jsxs)("div",{className:"flex gap-2 justify-end",children:[(0,W.jsx)("button",{onClick:()=>_(null),className:"px-4 py-2 rounded-lg text-sm text-white/50 hover:text-white",children:"Cancel"}),(0,W.jsx)("button",{disabled:!y.new_partner_id,onClick:async()=>{try{await n.default.post("/admin/referrals/customers/".concat(y.customer_id,"/transfer"),{new_partner_id:y.new_partner_id},{headers:pe}),i.toast.success("Customer transferred"),_(null),ue()}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Transfer failed")}},"data-testid":"ref-transfer-confirm",className:"px-4 py-2 rounded-lg bg-violet-600 hover:bg-violet-500 text-sm font-medium text-white disabled:opacity-40",children:"Transfer"})]})]})}),S&&(0,W.jsx)("div",{className:"fixed inset-0 z-50 bg-black/70 flex items-center justify-center px-4",onClick:()=>H(null),children:(0,W.jsxs)("div",{className:"bg-[#0d0d12] border border-white/[0.1] rounded-2xl p-6 w-full max-w-sm",onClick:e=>e.stopPropagation(),"data-testid":"ref-invoice-modal",children:[(0,W.jsx)("h3",{className:"font-semibold text-white mb-1",children:"Record paid invoice"}),(0,W.jsx)("p",{className:"text-xs text-white/40 mb-4",children:"Generates a commission ledger entry for this customer's partner."}),(0,W.jsx)("input",{type:"number",min:"1",step:"0.01",placeholder:"Invoice amount ($)",value:S.amount,onChange:e=>H((0,s.A)((0,s.A)({},S),{},{amount:e.target.value})),className:"w-full h-11 rounded-xl bg-black/40 border border-white/[0.1] px-4 text-sm text-white mb-4","data-testid":"ref-invoice-amount"}),(0,W.jsxs)("div",{className:"flex gap-2 justify-end",children:[(0,W.jsx)("button",{onClick:()=>H(null),className:"px-4 py-2 rounded-lg text-sm text-white/50 hover:text-white",children:"Cancel"}),(0,W.jsx)("button",{disabled:!S.amount,onClick:async()=>{try{await n.default.post("/admin/referrals/commissions/record",{customer_id:S.customer_id,amount:parseFloat(S.amount)},{headers:pe}),i.toast.success("Invoice recorded \u2014 commission generated"),H(null),ue()}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Failed to record invoice")}},"data-testid":"ref-invoice-confirm",className:"px-4 py-2 rounded-lg bg-emerald-600 hover:bg-emerald-500 text-sm font-medium text-white disabled:opacity-40",children:"Record & Generate Commission"})]})]})}),(0,W.jsx)(L.T,{open:!!A,title:"Revoke ".concat(null===A||void 0===A?void 0:A.first_name,"'s partner status?"),message:"They will stop earning commissions and their referral link will be deactivated.",confirmLabel:"Revoke",onCancel:()=>C(null),onConfirm:()=>{const e=A;C(null),be(e.partner_id,{status:"revoked"})}})]})}var Y=a(23946);const J={free:"text-zinc-400 bg-zinc-500/10 border-zinc-500/20",starter:"text-cyan-300 bg-cyan-500/10 border-cyan-500/20",growth:"text-violet-300 bg-vi
1olet-500/10 border-violet-500/20",command:"text-amber-300 bg-amber-500/10 border-amber-500/20",scale:"text-emerald-300 bg-emerald-500/10 border-emerald-500/20",enterprise:"text-rose-300 bg-rose-500/10 border-rose-500/20"};function Z(e){let{adminToken:t}=e;const[a,s]=(0,r.useState)(null),[l,d]=(0,r.useState)(""),[o,c]=(0,r.useState)(null),[x,m]=(0,r.useState)("500"),[h,p]=(0,r.useState)(!1),[u,f]=(0,r.useState)("veluro"),w={Authorization:"Bearer ".concat(t)},g=(0,r.useCallback)(()=>{n.default.get("/admin/credits",{headers:w}).then(e=>s(e.data)).catch(()=>i.toast.error("Could not load credits"))},[t]);(0,r.useEffect)(()=>{g()},[g]);if(!a)return(0,W.jsx)("div",{className:"flex justify-center py-16",children:(0,W.jsx)(z.A,{className:"h-6 w-6 animate-spin text-white/40"})});const v=a.rows.filter(e=>!l||(e.email||"").toLowerCase().includes(l.toLowerCase())||(e.name||"").toLowerCase().includes(l.toLowerCase()));return(0,W.jsxs)("div",{"data-testid":"admin-credits-tab",children:[(0,W.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4 mb-6",children:[(0,W.jsxs)("div",{className:"rounded-xl bg-white/[0.03] border border-white/[0.06] p-4",children:[(0,W.jsx)("p",{className:"text-xs text-white/40",children:"Credits used this cycle (all users)"}),(0,W.jsx)("p",{className:"text-2xl font-bold text-white",children:a.total_used_this_cycle.toLocaleString()})]}),(0,W.jsxs)("div",{className:"rounded-xl bg-white/[0.03] border border-white/[0.06] p-4",children:[(0,W.jsx)("p",{className:"text-xs text-white/40",children:"Est. LLM cost this cycle"}),(0,W.jsxs)("p",{className:"text-2xl font-bold text-amber-300",children:["$",a.est_cost_usd.toLocaleString()]})]}),(0,W.jsxs)("div",{className:"relative col-span-2 md:col-span-1",children:[(0,W.jsx)(y.A,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-white/30"}),(0,W.jsx)("input",{value:l,onChange:e=>d(e.target.value),placeholder:"Search users\u2026","data-testid":"admin-credits-search",className:"w-full h-full min-h-[52px] bg-white/[0.03] border border-white/[0.06] rounded-xl pl-9 pr-3 text-sm text-white outline-none focus:border-violet-500/40"})]})]}),(0,W.jsx)("div",{className:"rounded-xl border border-white/[0.06] overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"text-left text-xs text-white/40 bg-white/[0.02]",children:[(0,W.jsx)("th",{className:"px-4 py-3",children:"User"}),(0,W.jsx)("th",{className:"px-3 py-3",children:"Plan"}),(0,W.jsx)("th",{className:"px-3 py-3 text-right",children:"Balance"}),(0,W.jsx)("th",{className:"px-3 py-3 text-right",children:"Purchased"}),(0,W.jsx)("th",{className:"px-3 py-3",children:"Used this cycle"}),(0,W.jsx)("th",{className:"px-3 py-3 text-right",children:"Lifetime"}),(0,W.jsx)("th",{className:"px-3 py-3 text-right",children:"High-Intent leads/mo"}),(0,W.jsx)("th",{className:"px-3 py-3"})]})}),(0,W.jsx)("tbody",{children:v.map(e=>{const t=e.monthly_allowance?Math.min(Math.round(e.used_this_cycle/e.monthly_allowance*100),100):0;return(0,W.jsxs)("tr",{className:"border-t border-white/[0.04] hover:bg-white/[0.02]","data-testid":"credits-row-".concat(e.user_id),children:[(0,W.jsxs)("td",{className:"px-4 py-2.5",children:[(0,W.jsx)("p",{className:"text-white/85",children:e.name||"\u2014"}),(0,W.jsx)("p",{className:"text-[11px] text-white/35",children:e.email})]}),(0,W.jsx)("td",{className:"px-3 py-2.5",children:(0,W.jsx)("span",{className:"px-2 py-0.5 rounded-md text-[11px] font-semibold border ".concat(J[(e.plan_level||"free").replace("partner_","")]||J.free),children:e.plan_level})}),(0,W.jsx)("td",{className:"px-3 py-2.5 text-right font-bold text-white",children:e.total.toLocaleString()}),(0,W.jsx)("td",{className:"px-3 py-2.5 text-right text-violet-300",children:e.purchased_bank.toLocaleString()}),(0,W.jsx)("td",{className:"px-3 py-2.5 min-w-[140px]",children:(0,W.jsxs)("div",{className:"flex items-center gap-2",children:[(0,W.jsx)("div",{className:"flex-1 h-1.5 rounded-full bg-white/[0.06] overflow-hidden",children:(0,W.jsx)("div",{className:"h-full ".concat(t>=80?"bg-amber-500":"bg-emerald-500"),style:{width:"".concat(t,"%")}})}),(0,W.jsxs)("span",{className:"text-[11px] text-white/45 w-20 text-right",children:[e.used_this_cycle.toLocaleStr
1ing()," / ",e.monthly_allowance.toLocaleString()]})]})}),(0,W.jsx)("td",{className:"px-3 py-2.5 text-right text-white/45",children:e.lifetime_used.toLocaleString()}),(0,W.jsx)("td",{className:"px-3 py-2.5 text-right","data-testid":"lead-cap-".concat(e.user_id),children:null===e.lead_cap_total||void 0===e.lead_cap_total?(0,W.jsx)("span",{className:"text-emerald-300 text-[11px] font-semibold",children:"Unlimited"}):(0,W.jsxs)("span",{className:"text-white/80",children:[(e.leads_used||0).toLocaleString()," / ",e.lead_cap_total.toLocaleString(),e.lead_bonus>0&&(0,W.jsxs)("span",{className:"ml-1 text-emerald-300 text-[10.5px]",children:["(+",e.lead_bonus.toLocaleString(),")"]})]})}),(0,W.jsx)("td",{className:"px-3 py-2.5 text-right",children:(0,W.jsxs)("button",{onClick:()=>{c(e),f("veluro"),m("500")},"data-testid":"grant-btn-".concat(e.user_id),className:"inline-flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-xs font-semibold text-violet-300 bg-violet-500/10 border border-violet-500/25 hover:bg-violet-500/20 transition-colors",children:[(0,W.jsx)(Y.A,{className:"h-3.5 w-3.5"})," Grant"]})})]},e.user_id)})})]})}),o&&(0,W.jsx)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center p-4 bg-black/70 backdrop-blur-sm","data-testid":"grant-modal",children:(0,W.jsxs)("div",{className:"w-full max-w-sm rounded-2xl bg-zinc-900 border border-violet-500/25 p-6",children:[(0,W.jsxs)("div",{className:"flex items-center gap-2.5 mb-3",children:[(0,W.jsx)(b.A,{className:"h-5 w-5 text-violet-400"}),(0,W.jsx)("h3",{className:"text-base font-bold text-white",children:"leads"===u?"Grant high-intent leads":"Grant AI credits"})]}),(0,W.jsxs)("p",{className:"text-sm text-white/55 mb-4",children:["To ",(0,W.jsx)("span",{className:"text-white",children:o.email})," \u2014 ","leads"===u?"a permanent bonus added to their monthly high-intent lead cap (every month).":"added as purchased credits (never expire)."]}),(0,W.jsx)("div",{className:"grid grid-cols-3 gap-2 mb-3","data-testid":"grant-type-toggle",children:[["veluro","Veluro AI"],["creative","Creative AI"],["leads","High-Intent leads"]].map(e=>{let[t,a]=e;return(0,W.jsx)("button",{"data-testid":"grant-type-".concat(t),onClick:()=>{f(t),m("leads"===t?"25000":"500")},className:"py-2 rounded-xl text-[11px] font-semibold border ".concat(u===t?"bg-violet-500/20 border-violet-500/40 text-violet-300":"bg-white/[0.04] border-white/10 text-white/50 hover:text-white/80"),children:a},t)})}),(0,W.jsx)("input",{type:"number",value:x,onChange:e=>m(e.target.value),"data-testid":"grant-amount-input",className:"w-full bg-white/[0.05] border border-white/10 rounded-xl px-3 py-2.5 text-sm text-white mb-3 outline-none focus:border-violet-500/50"}),(0,W.jsx)("div",{className:"flex gap-2 mb-3",children:("leads"===u?[25e3,5e4,15e4]:[500,1500,5e3]).map(e=>(0,W.jsx)("button",{onClick:()=>m(String(e)),className:"px-3 py-1 rounded-lg text-xs text-white/60 bg-white/[0.05] hover:bg-white/[0.1]",children:e.toLocaleString()},e))}),(0,W.jsxs)("div",{className:"flex gap-2",children:[(0,W.jsx)("button",{onClick:()=>c(null),className:"flex-1 py-2.5 rounded-xl text-sm text-white/60 bg-white/[0.05] hover:bg-white/[0.1]",children:"Cancel"}),(0,W.jsx)("button",{onClick:async()=>{const e=parseInt(x,10);if(!e||e<=0)return i.toast.error("Enter a valid amount");p(!0);try{const t=await n.default.post("/admin/credits/grant",{user_id:o.user_id,credits:e,credit_type:u},{headers:w}),a="creative"===u?"Creative AI credits":"leads"===u?"high-intent leads/mo":"Veluro AI credits";i.toast.success("Granted ".concat(e.toLocaleString()," ").concat(a," to ").concat(o.email," \u2014 new total ").concat(t.data.new_total.toLocaleString())),c(null),g()}catch(s){var t,a;i.toast.error((null===(t=s.response)||void 0===t||null===(a=t.data)||void 0===a?void 0:a.detail)||"Grant failed")}p(!1)},disabled:h,"data-testid":"grant-confirm-btn",className:"flex-1 py-2.5 rounded-xl text-sm font-semibold text-white bg-violet-600 hover:bg-violet-500 disabled:opacity-50",children:h?(0,W.jsx)(z.A,{className:"h-4 w-4 animate-spin mx-auto"}):"leads"===u?"Grant leads":"Grant credits"})]})]})})]})}var ee=a(37719),te=a(62029);const ae={ready:"bg-emerald-500/10 text-emerald-300 border-emerald-500/20",connected:"bg-amber-500/10 text-amber-300 border-amber-500/20",not_connected:"bg-rose-500/10 text-rose-300 border-rose-500/20"},se={ready:"Bank ready",connected:"Verifying",not_connected:"No bank"},re=e=>
1"$".concat((e||0).toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})),le=e=>{let{icon:t,label:a,value:s,sub:r,color:l}=e;return(0,W.jsxs)("div",{className:"rounded-xl border border-white/[0.07] bg-white/[0.02] p-4",children:[(0,W.jsxs)("p",{className:"text-[11px] uppercase tracking-wider text-white/35 font-semibold flex items-center gap-1.5",children:[(0,W.jsx)(t,{className:"h-3.5 w-3.5 ".concat(l)})," ",a]}),(0,W.jsx)("p",{className:"text-2xl font-bold mt-1 ".concat(l),children:s}),r&&(0,W.jsx)("p",{className:"text-[11px] text-white/35 mt-0.5",children:r})]})},ie=e=>{let{adminToken:t}=e;const[a,s]=(0,r.useState)(null),[l,i]=(0,r.useState)(!0),d=(0,r.useCallback)(()=>{n.default.get("/admin/payouts-overview",{headers:{Authorization:"Bearer ".concat(t)}}).then(e=>s(e.data)).catch(()=>{}).finally(()=>i(!1))},[t]);if((0,r.useEffect)(()=>{d()},[d]),l)return(0,W.jsx)("div",{className:"py-20 flex justify-center",children:(0,W.jsx)(z.A,{className:"h-6 w-6 text-amber-400 animate-spin"})});if(!a)return(0,W.jsx)("p",{className:"text-sm text-white/40 py-10 text-center",children:"Failed to load payouts overview."});const{summary:o,partners:c}=a;return(0,W.jsxs)("div",{"data-testid":"admin-payouts-tab",children:[(0,W.jsxs)("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-6",children:[(0,W.jsx)(le,{icon:u.A,label:"Due on the 1st",value:re(o.total_due_next_run),sub:"Cleared, bank connected",color:"text-emerald-300"}),(0,W.jsx)(le,{icon:ee.A,label:"Held \u2014 no bank",value:re(o.held_awaiting_bank),sub:"".concat(o.not_connected," partner(s) without bank"),color:"text-rose-300"}),(0,W.jsx)(le,{icon:te.A,label:"Paid in ".concat(o.month_label),value:re(o.paid_this_month),color:"text-white/80"}),(0,W.jsx)(le,{icon:P.A,label:"Banks connected",value:"".concat(o.connected,"/").concat(o.connected+o.not_connected),sub:"of active partners",color:"text-cyan-300"})]}),(0,W.jsx)("div",{className:"rounded-2xl bg-white/[0.02] border border-white/[0.07] overflow-hidden",children:(0,W.jsx)("div",{className:"overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"border-b border-white/[0.06] text-left text-[11px] uppercase tracking-wider text-white/35",children:[(0,W.jsx)("th",{className:"px-4 py-3 font-semibold",children:"Partner"}),(0,W.jsx)("th",{className:"px-4 py-3 font-semibold",children:"Bank"}),(0,W.jsx)("th",{className:"px-4 py-3 font-semibold",children:"Auto-payout"}),(0,W.jsx)("th",{className:"px-4 py-3 font-semibold text-right",children:"Cleared (due)"}),(0,W.jsx)("th",{className:"px-4 py-3 font-semibold text-right",children:"Clearing"}),(0,W.jsx)("th",{className:"px-4 py-3 font-semibold text-right",children:"Paid this month"}),(0,W.jsx)("th",{className:"px-4 py-3 font-semibold text-right",children:"Paid all-time"}),(0,W.jsx)("th",{className:"px-4 py-3 font-semibold",children:"Last payout"})]})}),(0,W.jsxs)("tbody",{children:[c.map(e=>{return(0,W.jsxs)("tr",{"data-testid":"payout-row-".concat(e.partner_id),className:"border-b border-white/[0.04] hover:bg-white/[0.02]",children:[(0,W.jsxs)("td",{className:"px-4 py-3",children:[(0,W.jsx)("p",{className:"font-medium text-white/85",children:e.name||e.email}),(0,W.jsxs)("p",{className:"text-[11px] text-white/35",children:[e.email,e.company?" \xb7 ".concat(e.company):""]})]}),(0,W.jsx)("td",{className:"px-4 py-3",children:(0,W.jsx)("span",{className:"inline-flex px-2 py-0.5 rounded-full border text-[11px] font-semibold ".concat(ae[e.bank_status]),children:se[e.bank_status]})}),(0,W.jsx)("td",{className:"px-4 py-3 text-white/60",children:e.auto_payout?"On":"Off"}),(0,W.jsx)("td",{className:"px-4 py-3 text-right font-semibold ".concat(e.cleared_due>0?"text-emerald-300":"text-white/40"),children:re(e.cleared_due)}),(0,W.jsx)("td",{className:"px-4 py-3 text-right text-white/50",children:re(e.clearing)}),(0,W.jsx)("td",{className:"px-4 py-3 text-right text-white/60",children:re(e.paid_this_month)}),(0,W.jsx)("td",{className:"px-4 py-3 text-right text-white/60",children:re(e.total_paid)}),(0,W.jsx)("td",{className:"px-4 py-3 text-white/50",children:(t=e.last_payout_at,t?new Date(t).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"\u2014")}
1)]},e.partner_id);var t}),!c.length&&(0,W.jsx)("tr",{children:(0,W.jsx)("td",{colSpan:"8",className:"px-4 py-10 text-center text-white/35 text-sm",children:"No active partners yet."})})]})]})})}),(0,W.jsx)("p",{className:"text-[11px] text-white/30 mt-3",children:"Auto-payouts run on the 1st for cleared commissions. Partners without a connected bank get reminder emails and their commissions stay pending. A pre-flight balance check emails you if your Stripe balance won't cover the run."})]})};var ne=a(76245),de=a(3308),oe=a(20930),ce=a(72313);const xe=e=>{let{ok:t,yes:a,no:s}=e;return(0,W.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px] font-semibold border ".concat(t?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-red-500/10 text-red-400 border-red-500/20"),children:[t?(0,W.jsx)(P.A,{className:"h-3 w-3"}):(0,W.jsx)(ne.A,{className:"h-3 w-3"}),t?a:s]})};function me(e){let{adminToken:t,initialEmail:a}=e;const[l,d]=(0,r.useState)(a||""),[o,c]=(0,r.useState)(!1),[x,m]=(0,r.useState)(null),[h,p]=(0,r.useState)(null),[u,b]=(0,r.useState)(""),[f,w]=(0,r.useState)(""),v={Authorization:"Bearer ".concat(t)},j=async()=>{if(l.trim()){c(!0),m(null),p(null);try{const e=await n.default.get("/admin/account-lookup?email=".concat(encodeURIComponent(l.trim())),{headers:v});m(e.data)}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Lookup failed")}finally{c(!1)}}},N=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};w(e);try{const a=await n.default.post("/admin/account-rescue",(0,s.A)({email:l.trim(),action:e,origin_url:window.location.origin},t),{headers:v});"reset_link"===e?(p(a.data),i.toast.success(a.data.emailed?"Reset link created + emailed":"Reset link created \u2014 copy and send it to the user")):(i.toast.success(a.data.message),j())}catch(d){var a,r;i.toast.error((null===(a=d.response)||void 0===a||null===(r=a.data)||void 0===r?void 0:r.detail)||"Action failed")}finally{w("")}};(0,r.useEffect)(()=>{a&&j()},[]);const _=null===x||void 0===x?void 0:x.user;return(0,W.jsxs)("div",{"data-testid":"admin-rescue-tab",className:"max-w-3xl",children:[(0,W.jsx)("h2",{className:"text-lg font-semibold text-white mb-1",children:"Account Rescue"}),(0,W.jsx)("p",{className:"text-sm text-white/45 mb-5",children:"Diagnose login problems for any user \u2014 see exactly why they can't get in, then fix it in one click."}),(0,W.jsxs)("div",{className:"flex gap-2 mb-6",children:[(0,W.jsx)("input",{"data-testid":"rescue-email-input",value:l,onChange:e=>d(e.target.value),onKeyDown:e=>"Enter"===e.key&&j(),placeholder:"[email protected]",className:"flex-1 bg-white/[0.04] border border-white/[0.08] rounded-lg px-4 py-2.5 text-sm text-white placeholder:text-white/30 focus:outline-none focus:border-violet-500/50"}),(0,W.jsxs)("button",{"data-testid":"rescue-lookup-btn",onClick:j,disabled:o,className:"flex items-center gap-2 px-5 py-2.5 rounded-lg bg-violet-600 hover:bg-violet-500 text-white text-sm font-semibold transition-colors disabled:opacity-50",children:[o?(0,W.jsx)(z.A,{className:"h-4 w-4 animate-spin"}):(0,W.jsx)(y.A,{className:"h-4 w-4"})," Look up"]})]}),x&&!x.found&&(0,W.jsxs)("div",{"data-testid":"rescue-not-found",className:"p-5 rounded-xl bg-red-500/[0.06] border border-red-500/20 mb-6",children:[(0,W.jsxs)("div",{className:"flex items-center gap-2 text-red-400 font-semibold text-sm mb-1",children:[(0,W.jsx)(ee.A,{className:"h-4 w-4"})," No account exists for this email"]}),(0,W.jsx)("p",{className:"text-sm text-white/50",children:"This person never completed signup (or used a different email). Check the Referrals tab for a stuck pending-payment record, or ask them which email they registered with."})]}),_&&(0,W.jsxs)("div",{"data-testid":"rescue-result",className:"space-y-4",children:[(0,W.jsxs)("div",{className:"p-5 rounded-xl bg-white/[0.03] border border-white/[0.07]",children:[(0,W.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,W.jsxs)("div",{children:[(0,W.jsx)("div",{className:"text-white font-semibold",children:_.name||"(no name)"}),(0,W.jsxs)("div",{className:"text-sm text-white/50",children:[_.email," \xb7 joined ",_.created_at?new Date(_.created_at).toLocaleDateString():"\u2014"]})]}),(0,W.jsxs)("div",{className:"text-xs text-white/40 uppercase tracking-wide",children:[_.plan_level||"free","admin"===_.role?" \xb7 ADMIN":""]})]}),(0,W.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,W.jsx)(xe,{ok:_.has_password,yes:"Has password",no:"NO password set"}),(0,W.jsx)(xe,{ok:!1!==_.email_verified,yes:"Email verified",no:"Email NOT verified (login blocked)"}),x.partner&&(0,W.jsx)(xe,{ok:"active"===x.partner.status,yes:"Partner active (".concat(x.partner.partner_type,")"),no:"Partner: ".concat(x.partner.status)}),"suspended"===_.status&&(0,W.jsx)(xe,{ok:!1,yes:"",no:"Account SUSPENDED"})]})]}),(0,W.jsxs)("div",{className:"p-5 rounded-xl bg-white/[0.03] border border-white/[0.07]",children:[(0,W.jsx)("div",{className:"text-sm font-semibold text-white mb-3",children:"Fix it"}),(0,W.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,W.jsxs)("button",{"data-testid":"rescue-reset-link-btn",onClick:()=>N("reset_link"),disabled:!!f,className:"flex items-center gap-2 px-4 py-2 rounded-lg bg-violet-600 hover:bg-violet-500 text-white text-sm font-semibold transition-colors disabled:opacity-50",children:[(0,W.jsx)(de.A,{className:"h-4 w-4"})," ","reset_link"===f?"Creating\u2026":"Generate reset link"]}),(0,W.jsxs)("button",{"data-testid":"rescue-reset-email-btn",onClick:()=>N("reset_link",{send_email:!0}),disabled:!!f,className:"flex items-center gap-2 px-4 py-2 rounded-lg bg-white/[0.06] hover:bg-white/[0.1] text-white/80 text-sm font-medium border border-white/[0.08] transition-colors disabled:opacity-50",children:[(0,W.jsx)(oe.A,{className:"h-4 w-4"})," Create + email it"]}),!1===_.email_verified&&(0,W.jsxs)("button",{"data-testid":"rescue-verify-btn",onClick:()=>N("verify_email"),disabled:!!f,className:"flex items-center gap-2 px-4 py-2 rounded-lg bg-emerald-600/80 hover:bg-emerald-500 text-white text-sm font-semibold transition-colors disabled:opacity-50",children:[(0,W.jsx)(g.A,{className:"h-4 w-4"})," Mark email verified"]}),(0,W.jsxs)("button",{"data-testid":"rescue-make-partner-btn",onClick:()=>N("make_partner"),disabled:!!f,className:"flex items-center gap-2 px-4 py-2 rounded-lg bg-white/[0.06] hover:bg-white/[0.1] text-violet-300 text-sm font-semibold border border-violet-500/30 transition-colors disabled:opacity-50",children:[(0,W.jsx)(g.A,{className:"h-4 w-4"})," ","make_partner"===f?"Fixing\u2026":"Grant partner access"]})]}),(0,W.jsxs)("div",{className:"flex gap-2 mt-3",children:[(0,W.jsx)("input",{"data-testid":"rescue-temp-pw-input",value:u,onChange:e=>b(e.target.value),placeholder:"Temp password (8+ chars)",className:"flex-1 max-w-xs bg-white/[0.04] border border-white/[0.08] rounded-lg px-3 py-2 text-sm text-white placeholder:text-white/30 focus:outline-none focus:border-violet-500/50"}),(0,W.jsx)("button",{"data-testid":"rescue-set-pw-btn",onClick:()=>N("set_password",{password:u}),disabled:!!f||u.length<8,className:"px-4 py-2 rounded-lg bg-white/[0.06] hover:bg-white/[0.1] text-white/80 text-sm font-medium border border-white/[0.08] transition-colors disabled:opacity-40",children:"Set temp password"})]}),h&&(0,W.jsxs)("div",{"data-testid":"rescue-reset-link",className:"mt-4 p-3 rounded-lg bg-violet-500/[0.08] border border-violet-500/25",children:[(0,W.jsxs)("div",{className:"text-xs text-violet-300 font-semibold mb-1.5",children:["Reset link (valid ",h.expires_hours,"h",h.emailed?" \xb7 also emailed":" \xb7 email NOT sent \u2014 send this to the user yourself","):"]}),(0,W.jsxs)("div",{className:"flex items-center gap-2",children:[(0,W.jsx)("code",{className:"flex-1 text-xs text-white/70 break-all",children:h.link}),(0,W.jsx)("button",{"data-testid":"rescue-copy-link-btn",onClick:()=>{navigator.clipboard.writeText(h.link),i.toast.success("Link copied")},className:"p-2 rounded-md bg-white/[0.08] hover:bg-white/[0.14] text-white/70",children:(0,W.jsx)(ce.A,{className:"h-3.5 w-3.5"})})]})]})]}),x.partner_stats&&(0,W.jsxs)("div",{"data-testid":"rescue-partner-stats",className:"p-5 rounded-xl bg-white/[0.03] border border-white/[0.07]",children:[(0,W.jsx)("div",{className:"text-sm font-semibold text-white mb-3",children:"Partner performance"}),(0,W.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-5 ga
1p-3 mb-4",children:[["Signups",x.partner_stats.signups],["Active",x.partner_stats.active_customers],["Pending comm.","$".concat(x.partner_stats.commissions.pending.toFixed(2))],["Paid comm.","$".concat(x.partner_stats.commissions.paid.toFixed(2))],["Lifetime","$".concat(x.partner_stats.commissions.lifetime.toFixed(2))]].map(e=>{let[t,a]=e;return(0,W.jsxs)("div",{className:"p-2.5 rounded-lg bg-white/[0.03] border border-white/[0.06]",children:[(0,W.jsx)("div",{className:"text-[10px] text-white/40 uppercase tracking-wide",children:t}),(0,W.jsx)("div",{className:"text-sm font-bold text-white mt-0.5",children:a})]},t)})}),(x.partner_stats.customers||[]).length>0?(0,W.jsx)("div",{className:"space-y-1.5",children:x.partner_stats.customers.slice(0,15).map((e,t)=>(0,W.jsxs)("div",{className:"flex items-center gap-2 text-xs py-1 border-b border-white/[0.05] last:border-0",children:[(0,W.jsx)("span",{className:"text-white/70 flex-1 truncate",children:e.name||e.email}),(0,W.jsx)("span",{className:"text-violet-300/80 capitalize",children:e.subscription_plan||"no plan"}),e.monthly_price?(0,W.jsxs)("span",{className:"text-white/40",children:["$",e.monthly_price,"/mo"]}):null,(0,W.jsx)("span",{className:"active"===e.status?"text-emerald-400":"text-amber-400",children:e.status}),(0,W.jsx)("span",{className:"text-white/30",children:e.signup_date?new Date(e.signup_date).toLocaleDateString():""})]},t))}):(0,W.jsx)("p",{className:"text-xs text-white/40",children:"No referred businesses yet."})]}),(0,W.jsxs)("div",{className:"p-5 rounded-xl bg-white/[0.03] border border-white/[0.07]",children:[(0,W.jsx)("div",{className:"text-sm font-semibold text-white mb-3",children:"Email delivery log (last 10)"}),0===(x.email_log||[]).length?(0,W.jsx)("p",{className:"text-sm text-white/40",children:"No system emails have been attempted to this address \u2014 if they requested a password reset and nothing shows here, the account email didn't match."}):(0,W.jsx)("div",{className:"space-y-1.5",children:x.email_log.map((e,t)=>(0,W.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,W.jsx)("span",{className:"sent"===e.status?"text-emerald-400":"text-red-400",children:"sent"===e.status?"\u2713":"\u2717"}),(0,W.jsx)("span",{className:"text-white/60 flex-1 truncate",children:e.subject}),(0,W.jsx)("span",{className:"text-white/35",children:e.via}),e.error&&(0,W.jsx)("span",{className:"text-red-400/70 truncate max-w-[200px]",title:e.error,children:e.error}),(0,W.jsx)("span",{className:"text-white/30",children:e.created_at?new Date(e.created_at).toLocaleString():""})]},t))}),(x.reset_requests||[]).length>0&&(0,W.jsxs)("div",{className:"mt-3 text-xs text-white/40",children:["Password reset requests: ",x.reset_requests.length," (latest ",new Date(x.reset_requests[0].created_at).toLocaleString(),")"]})]})]})]})}var he=a(13773);const pe=[{key:"all",label:"All users"},{key:"beta",label:"Beta signups"},{key:"partners",label:"Reseller partners"}];function ue(e){let{adminToken:t}=e;const a={Authorization:"Bearer ".concat(t)},[s,l]=(0,r.useState)(null),[d,o]=(0,r.useState)("all"),[c,x]=(0,r.useState)(""),[m,h]=(0,r.useState)(""),[p,u]=(0,r.useState)(""),[b,w]=(0,r.useState)([]),g=(0,r.useCallback)(async()=>{try{const[e,t]=await Promise.all([n.default.get("/admin/broadcast/audiences",{headers:a}),n.default.get("/admin/broadcasts",{headers:a})]);l(e.data),w(t.data)}catch(e){}},[t]);(0,r.useEffect)(()=>{g()},[g]);return(0,W.jsxs)("div",{"data-testid":"admin-email-tab",className:"max-w-3xl",children:[(0,W.jsxs)("h2",{className:"text-lg font-semibold text-white mb-1 flex items-center gap-2",children:[(0,W.jsx)(f.A,{className:"h-5 w-5 text-violet-400"})," Email your users"]}),(0,W.jsx)("p",{className:"text-sm text-white/45 mb-5",children:"Send an announcement to everyone, beta signups, or your reseller partners. Emails go out branded, one at a time, in the background."}),(0,W.jsxs)("div",{className:"p-5 rounded-xl bg-white/[0.03] border border-white/[0.07] space-y-4 mb-6",children:[(0,W.jsxs)("div",{children:[(0,W.jsx)("label",{className:"text-xs text-white/50 font-semibold uppercase tracking-wide",children:"Audience"}),(0,W.jsx)("div",{className:"flex flex-wrap gap-2 mt-2",children:pe.map(e=>(0,W.jsxs)("button",{"data-testid":"broadcast-audience-".concat(e.key),onClick:()=>
1o(e.key),className:"px-4 py-2 rounded-lg text-sm font-medium border transition-colors ".concat(d===e.key?"bg-violet-600 border-violet-500 text-white":"bg-white/[0.04] border-white/[0.08] text-white/60 hover:text-white"),children:[e.label,s?" \xb7 ".concat(s[e.key]):""]},e.key))})]}),(0,W.jsxs)("div",{children:[(0,W.jsx)("label",{className:"text-xs text-white/50 font-semibold uppercase tracking-wide",children:"Subject"}),(0,W.jsx)("input",{"data-testid":"broadcast-subject-input",value:c,onChange:e=>x(e.target.value),placeholder:"Big news from Veluro\u2026",className:"w-full mt-2 bg-white/[0.04] border border-white/[0.08] rounded-lg px-4 py-2.5 text-sm text-white placeholder:text-white/30 focus:outline-none focus:border-violet-500/50"})]}),(0,W.jsxs)("div",{children:[(0,W.jsx)("label",{className:"text-xs text-white/50 font-semibold uppercase tracking-wide",children:"Message"}),(0,W.jsx)("textarea",{"data-testid":"broadcast-message-input",value:m,onChange:e=>h(e.target.value),rows:8,placeholder:"Hi there,\n\nWrite your announcement here \u2014 line breaks are kept.",className:"w-full mt-2 bg-white/[0.04] border border-white/[0.08] rounded-lg px-4 py-3 text-sm text-white placeholder:text-white/30 focus:outline-none focus:border-violet-500/50 resize-y"})]}),(0,W.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,W.jsxs)("button",{"data-testid":"broadcast-test-btn",onClick:async()=>{if(!c.trim()||!m.trim())return i.toast.error("Add a subject and message first");u("test");try{const e=await n.default.post("/admin/broadcast",{subject:c,message:m,test_only:!0},{headers:a});i.toast.success(e.data.ok?"Test sent to ".concat(e.data.sent_to):"Test send failed \u2014 check email delivery log")}catch(s){var e,t;i.toast.error((null===(e=s.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Test failed")}finally{u("")}},disabled:!!p,className:"flex items-center gap-2 px-4 py-2 rounded-lg bg-white/[0.06] hover:bg-white/[0.1] text-white/80 text-sm font-medium border border-white/[0.08] transition-colors disabled:opacity-50",children:["test"===p?(0,W.jsx)(z.A,{className:"h-4 w-4 animate-spin"}):(0,W.jsx)(he.A,{className:"h-4 w-4"})," Send test to me"]}),(0,W.jsxs)("button",{"data-testid":"broadcast-send-btn",onClick:async()=>{var e;const t=null!==(e=null===s||void 0===s?void 0:s[d])&&void 0!==e?e:"?";if(!c.trim()||!m.trim())return i.toast.error("Add a subject and message first");
1if(window.confirm("Send this email to ".concat(t," ").concat(pe.find(e=>e.key===d).label.toLowerCase(),"?"))){u("send");try{const e=await n.default.post("/admin/broadcast",{audience:d,subject:c,message:m},{headers:a});i.toast.success("Sending to ".concat(e.data.total," recipients \u2014 progress shows below")),x(""),h(""),g()}catch(o){var r,l;i.toast.error((null===(r=o.response)||void 0===r||null===(l=r.data)||void 0===l?void 0:l.detail)||"Send failed")}finally{u("")}}},disabled:!!p,className:"flex items-center gap-2 px-5 py-2 rounded-lg bg-violet-600 hover:bg-violet-500 text-white text-sm font-semibold transition-colors disabled:opacity-50",children:["send"===p?(0,W.jsx)(z.A,{className:"h-4 w-4 animate-spin"}):(0,W.jsx)(O.A,{className:"h-4 w-4"}),"Send to ",s?s[d]:"\u2026"," recipients"]})]})]}),(0,W.jsxs)("div",{className:"p-5 rounded-xl bg-white/[0.03] border border-white/[0.07]",children:[(0,W.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,W.jsx)("div",{className:"text-sm font-semibold text-white",children:"Sent broadcasts"}),(0,W.jsx)("button",{"data-testid":"broadcast-refresh-btn",onClick:g,className:"p-1.5 rounded-md text-white/40 hover:text-white/80",children:(0,W.jsx)(R.A,{className:"h-3.5 w-3.5"})})]}),0===b.length?(0,W.jsx)("p",{className:"text-sm text-white/40",children:"No broadcasts sent yet."}):(0,W.jsx)("div",{className:"space-y-2",children:b.map(e=>(0,W.jsxs)("div",{className:"flex items-center gap-3 text-xs py-1.5 border-b border-white/[0.05] last:border-0",children:[(0,W.jsx)("span",{className:"px-2 py-0.5 rounded-full font-semibold ".concat("done"===e.status?"bg-emerald-500/10 text-emerald-400":"bg-amber-500/10 text-amber-400"),children:"done"===e.status?"Done":"Sending\u2026"}),(0,W.jsx)("span",{className:"text-white/70 flex-1 truncate",children:e.subject}),(0,W.jsx)("span",{className:"text-white/40 capitalize",children:e.audience}),(0,W.jsxs)("span",{className:"text-emerald-400/80",children:[e.sent,"/",e.total," sent"]}),e.failed>0&&(0,W.jsxs)("span",{className:"text-red-400/80",children:[e.failed," failed"]}),(0,W.jsx)("span",{className:"text-white/30",children:e.created_at?new Date(e.created_at).toLocaleString():""})]},e.broadcast_id))})]})]})}var be=a(14459),fe=a(65469);const we=e=>e?new Date(e).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}):"\u2014";function ge(e){let{adminToken:t}=e;const a={Authorization:"Bearer ".concat(t)},[s,l]=(0,r.useState)(""),[d,o]=(0,r.useState)(!1),[c,m]=(0,r.useState)(null),[h,p]=(0,r.useState)(null),[u,b]=(0,r.useState)(null),[f,g]=(0,r.useState)(null),[v,j]=(0,r.useState)(null);return(0,W.jsxs)("div",{"data-testid":"admin-chats-tab",children:[(0,W.jsxs)("div",{className:"mb-5",children:[(0,W.jsxs)("h2",{className:"text-lg font-bold text-white flex items-center gap-2",children:[(0,W.jsx)(w.A,{className:"h-5 w-5 text-violet-400"})," Chat Viewer"]}),(0,W.jsx)("p",{className:"text-sm text-white/45",children:"Search any user and read their full Veluro Agent conversations \u2014 verify complaints in seconds. Read-only."})]}),(0,W.jsxs)("form",{onSubmit:async e=>{if(null===e||void 0===e||e.preventDefault(),s.trim().length<2)return i.toast.error("Type at least 2 characters");o(!0),p(null),b(null),g(null);try{const e=await n.default.get("/admin/chats/search?q=".concat(encodeURIComponent(s.trim())),{headers:a});m(e.data.users)}catch(l){var t,r;i.toast.error((null===(t=l.response)||void 0===t||null===(r=t.data)||void 0===r?void 0:r.detail)||"Search failed")}o(!1)},className:"flex gap-2 mb-6 max-w-xl",children:[(0,W.jsxs)("div",{className:"relative flex-1",children:[(0,W.jsx)(y.A,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-white/30"}),(0,W.jsx)("input",{value:s,onChange:e=>l(e.target.value),placeholder:"Search by email or name\u2026","data-testid":"chat-search-input",className:"w-full bg-white/[0.03] border border-white/[0.08] rounded-xl pl-9 pr-3 py-2.5 text-sm text-white outline-none focus:border-violet-500/40"})]}),(0,W.jsx)("button",{type:"submit",disabled:d,"data-testid":"chat-search-btn",className:"px-5 rounded-xl text-sm font-semibold text-white bg-violet-600 hover:bg-violet-500 disabled:opacity-50",children:d?(0,W.jsx)(z.A,{className:"h-4 w-4 animate-spin"}):"Search"})]}),c&&!h&&(0,W.jsxs)("div",{className:"rounded-xl border border-white/[0.06] overflow-hidden max-w-3xl","data-testid":"chat-user-results",children:[0===c.length&&(0,W.jsxs)("p",{className:"p-5 text-sm text-white/40",children:['No users match "',s,'".']}),c.map(e=>(0,W.jsxs)("button",{onClick:()=>(async e=>{p(e),b(null),g(null);try{const t=await n.default.get("/admin/chats/user/".concat(e.user_id,"/sessions"),{headers:a});b(t.data.sessions)}catch(t){i.toast.error("Could not load sessions")}})(e),"data-testid":"chat-user-".concat(e.user_id),className:"w-full flex items-center justify-between px-4 py-3 border-b border-white/[0.04] last:border-0 hover:bg-white/[0.04] text-left transition-colors",children:[(0,W.jsxs)("div",{className:"flex items-center gap-3",children:[(0,W.jsx)("div",{className:"h-8 w-8 rounded-full bg-violet-500/15 border border-violet-500/25 flex items-center justify-center",children:(0,W.jsx)(be.A,{className:"h-4 w-4 text-violet-300"})}),(0,W.jsxs)("div",{children:[(0,W.jsxs)("p",{className:"text-sm text-white/90",children:[e.name||"\u2014"," ",(0,W.jsx)("span",{className:"text-white/35 text-xs ml-1",children:e.email})]}),(0,W.jsxs)("p",{className:"text-[11px] text-white/35",children:[e.plan_level||"free"," \xb7 last chat ",we(e.last_chat)]})]})]}),(0,W.jsxs)("span",{className:"text-xs font-semibold text-violet-300 bg-vi
1olet-500/10 border border-violet-500/20 rounded-full px-2.5 py-1",children:[e.session_count," chat",1===e.session_count?"":"s"]})]},e.user_id))]}),h&&(0,W.jsxs)("div",{children:[(0,W.jsxs)("button",{onClick:()=>{p(null),g(null)},"data-testid":"chat-back-to-users",className:"flex items-center gap-1.5 text-xs text-white/45 hover:text-white/80 mb-3",children:[(0,W.jsx)(fe.A,{className:"h-3.5 w-3.5"})," Back to results"]}),(0,W.jsxs)("div",{className:"grid lg:grid-cols-[340px_1fr] gap-4",children:[(0,W.jsxs)("div",{className:"rounded-xl border border-white/[0.06] overflow-hidden self-start max-h-[70vh] overflow-y-auto","data-testid":"chat-session-list",children:[(0,W.jsxs)("div",{className:"px-4 py-3 bg-white/[0.03] border-b border-white/[0.05]",children:[(0,W.jsx)("p",{className:"text-sm font-semibold text-white/90",children:h.name||h.email}),(0,W.jsx)("p",{className:"text-[11px] text-white/35",children:h.email})]}),!u&&(0,W.jsx)("div",{className:"flex justify-center py-8",children:(0,W.jsx)(z.A,{className:"h-5 w-5 animate-spin text-white/30"})}),0===(null===u||void 0===u?void 0:u.length)&&(0,W.jsx)("p",{className:"p-4 text-sm text-white/40",children:"No chat sessions yet."}),null===u||void 0===u?void 0:u.map(e=>(0,W.jsxs)("button",{onClick:()=>(async e=>{j(e);try{const t=await n.default.get("/admin/chats/session/".concat(e),{headers:a});g(t.data)}catch(t){i.toast.error("Could not load conversation")}j(null)})(e.session_id),"data-testid":"chat-session-".concat(e.session_id),className:"w-full text-left px-4 py-3 border-b border-white/[0.04] last:border-0 hover:bg-white/[0.04] transition-colors ".concat((null===f||void 0===f?void 0:f.session_id)===e.session_id?"bg-violet-500/[0.08]":""),children:[(0,W.jsx)("p",{className:"text-[13px] text-white/85 line-clamp-2",children:e.title}),(0,W.jsxs)("p",{className:"text-[11px] text-white/35 mt-0.5",children:["welcome"===e.kind&&(0,W.jsx)("span",{className:"text-amber-300/80 mr-1.5",children:"onboarding \xb7"}),e.message_count," msgs \xb7 ",we(e.last_activity),v===e.session_id&&(0,W.jsx)(z.A,{className:"inline h-3 w-3 animate-spin ml-1.5"})]})]},e.session_id))]}),(0,W.jsx)("div",{className:"rounded-xl border border-white/[0.06] bg-white/[0.015] min-h-[300px] max-h-[70vh] overflow-y-auto","data-testid":"chat-thread-panel",children:f?(0,W.jsx)("div",{className:"p-5 space-y-4",children:f.messages.map((e,t)=>{var a;return(0,W.jsx)("div",{className:"flex ".concat("user"===e.role?"justify-end":"justify-start"),children:(0,W.jsxs)("div",{className:"max-w-[82%] rounded-2xl px-4 py-2.5 text-[13px] leading-relaxed whitespace-pre-wrap ".concat("user"===e.role?"bg-violet-600/25 border border-violet-500/25 text-white/95":"bg-white/[0.05] border border-white/[0.07] text-white/80"),children:[(0,W.jsxs)("p",{className:"text-[10px] uppercase tracking-wide mb-1 flex items-center gap-1 ".concat("user"===e.role?"text-violet-300/70":"text-white/35"),children:["user"===e.role?(0,W.jsx)(be.A,{className:"h-3 w-3"}):(0,W.jsx)(x.A,{className:"h-3 w-3"}),"user"===e.role?(null===(a=f.user)||void 0===a?void 0:a.name)||"User":"Veluro Agent"," \xb7 ",we(e.created_at)]}),e.text]})},t)})}):(0,W.jsxs)("div",{className:"flex flex-col items-center justify-center h-full py-16 text-white/30 text-sm gap-2",children:[(0,W.jsx)(w.A,{className:"h-7 w-7"})," Select a conversation to read it"]})})]})]})]})}var ve=a(69022),je=a(15711);const Ne=e=>e?new Date(e).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}):"\u2014";function ye(e){let{label:t,value:a,tone:s="text-white"}=e;return(0,W.jsxs)("div",{className:"rounded-xl border border-white/[0.07] bg-white/[0.02] px-4 py-3","data-testid":"accuracy-stat-".concat(t.toLowerCase().replace(/\s+/g,"-")),children:[(0,W.jsx)("p",{className:"text-[10px] uppercase tracking-wider text-white/40 font-bold",children:t}),(0,W.jsx)("p",{className:"text-xl font-bold mt-0.5 ".concat(s),children:a})]})}function _e(e){let{ev:t}=e;const[a,s]=(0,r.useState)(!1),l="served_table"===t.outcome;return(0,W.jsxs)("li",{className:"rounded-xl border border-white/[0.07] bg-white/[0.02]","data-testid":"accuracy-event-".concat(t.id),children:[(0,W.jsxs)("button",{type:"button",onClick:()=>s(e=>!e),className:"w-full text-left px-4 py-3 flex items-start gap-3",children:[(0,W.jsx)(ve.A,{className:"h-4 w-4 mt-0.5 shrink-0 ".concat(l?"text-rose-300":"text-amber-300")}),(0,W.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,W.jsxs)("div",{className:"flex items-center gap-2 flex-wrap text-[11px] text-white/45",children:[(0,W.jsx)("span",{children:Ne(t.ts)}),(0,W.jsx)("span",{className:"px-1.5 py-0.5 rounded-full bg-white/[0.06] uppercase font-bold text-[9px]",children:"public"===t.channel?"website chat":"in-app chat"}),t.email&&(0,W.jsx)("span",{className:"text-white/60",children:t.email}),t.plan_level&&(0,W.jsxs)("span",{children:["\xb7 ",t.plan_level]}),(0,W.jsx)("span",{className:"px-1.5 py-0.5 rounded-full font-bold text-[9px] uppercase ".concat(l?"bg-rose-500/10 text-rose-300":"bg-emerald-500/10 text-emerald-300"),"data-testid":"accuracy-event-outcome",children:l?"served verified table":"regenerated correctly"})]}),(0,W.jsxs)("p",{className:"text-sm text-white/85 mt-1 line-clamp-2",children:["\u201c",t.question,"\u201d"]}),(0,W.jsxs)("p",{className:"text-[12px] text-rose-200/90 mt-1","data-testid":"accuracy-event-violations",children:["Caught: ",(t.violations||[]).join(" \xb7 ")]})]}),a?(0,W.jsx)(je.A,{className:"h-4 w-4 text-white/40 shrink-0"}):(0,W.jsx)(_.A,{className:"h-4 w-4 text-white/40 shrink-0"})]}),a&&(0,W.jsxs)("div",{className:"px-4 pb-4 grid md:grid-cols-2 gap-3",children:[(0,W.jsxs)("div",{className:"rounded-lg border border-rose-500/20 bg-rose-500/[0.05] p-3",children:[(0,W.jsx)("p",{className:"text-[10px] uppercase tracking-wider font-bold text-rose-300 mb-1",children:"Wrong draft (never shown)"}),(0,W.jsx)("pre",{className:"text-[11.5px] text-white/70 whitespace-pre-wrap font-sans max-h-72 overflow-y-auto",children:t.draft_reply}),t.second_draft&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)("p",{className:"text-[10px] uppercase tracking-wider font-bold text-rose-300 mt-3 mb-1",children:["Second draft \u2014 still wrong: ",(t.second_violations||[]).join(" \xb7 ")]}),(0,W.jsx)("pre",{className:"text-[11.5px] text-white/70 whitespace-pre-wrap font-sans max-h-72 overflow-y-auto",children:t.second_draft})]})]}),(0,W.jsxs)("div",{className:"rounded-lg border border-emerald-500/20 bg-emerald-500/[0.05] p-3",children:[(0,W.jsx)("p",{className:"text-[10px] uppercase tracking-wider font-bold text-emerald-300 mb-1",children:"What the user actually saw"}),(0,W.jsx)("pre",{className:"text-[11.5px] text-white/80 whitespace-pre-wrap font-sans max-h-72 overflow-y-auto",children:t.final_reply})]})]})]})}function ke(e){var t,a,s,l,d;let{adminToken:o}=e;const c={Authorization:"Bearer ".concat(o)},[x,m]=(0,r.useState)(null),[h,p]=(0,r.useState)(""),[u,b]=(0,r.useState)(!1),[f,w]=(0,r.useState)(!1),v=(0,r.useCallback)(async()=>{b(!0);try{const e=await n.default.get("/admin/plan-fact-guard?limit=200".concat(h?"&channel=".concat(h):""),{headers:c});m(e.data)}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Could not load the accuracy log")}b(!1)}
1,[h]);(0,r.useEffect)(()=>{v()},[v]);const j=(null===x||void 0===x?void 0:x.totals)||{},N=j.checked?Math.round((j.checked-j.caught)/j.checked*100):null;return(0,W.jsxs)("div",{className:"space-y-5","data-testid":"admin-accuracy-tab",children:[(0,W.jsxs)("div",{className:"flex items-start justify-between gap-3 flex-wrap",children:[(0,W.jsxs)("div",{children:[(0,W.jsxs)("h2",{className:"text-lg font-bold text-white flex items-center gap-2",children:[(0,W.jsx)(g.A,{className:"h-5 w-5 text-emerald-300"})," AI Accuracy \u2014 plan-fact guard"]}),(0,W.jsx)("p",{className:"text-[12px] text-white/50 max-w-2xl mt-1",children:"Every plan or pricing answer from the in-app chat and the website chat is checked number-by-number against the billing code before it's shown. Wrong drafts are regenerated; if the model still gets it wrong, the verified table is served instead. Every catch lands here."})]}),(0,W.jsxs)("div",{className:"flex items-center gap-2",children:[(0,W.jsxs)("select",{value:h,onChange:e=>p(e.target.value),"data-testid":"accuracy-channel-filter",className:"h-9 rounded-lg bg-white/[0.05] border border-white/10 text-xs text-white/80 px-2",children:[(0,W.jsx)("option",{value:"",children:"All channels"}),(0,W.jsx)("option",{value:"app",children:"In-app chat"}),(0,W.jsx)("option",{value:"public",children:"Website chat"})]}),(0,W.jsxs)("button",{type:"button",onClick:async()=>{try{const e=await n.default.post("/admin/plan-fact-guard/selftest",{},{headers:c});i.toast[e.data.ok?"success":"error"](e.data.ok?"Guard is alive \u2014 caught ".concat(e.data.violations.length," wrong numbers in the test sample"):"Guard did NOT catch the test sample")}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Self-test failed")}},"data-testid":"accuracy-selftest",className:"h-9 px-3 rounded-lg bg-white/[0.05] border border-white/10 text-xs font-bold text-white/80 hover:text-white inline-flex items-center gap-1.5",children:[(0,W.jsx)(he.A,{className:"h-3.5 w-3.5"})," Self-test"]}),(0,W.jsxs)("button",{type:"button",onClick:v,disabled:u,"data-testid":"accuracy-refresh",className:"h-9 px-3 rounded-lg bg-white/[0.05] border border-white/10 text-xs font-bold text-white/80 hover:text-white inline-flex items-center gap-1.5 disabled:opacity-50",children:[u?(0,W.jsx)(z.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,W.jsx)(R.A,{className:"h-3.5 w-3.5"})," Refresh"]})]})]}),(0,W.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-3",children:[(0,W.jsx)(ye,{label:"Answers checked",value:null!==(t=j.checked)&&void 0!==t?t:0}),(0,W.jsx)(ye,{label:"Caught",value:null!==(a=j.caught)&&void 0!==a?a:0,tone:j.caught?"text-amber-300":"text-emerald-300"}),(0,W.jsx)(ye,{label:"Regenerated OK",value:null!==(s=j.regenerated)&&void 0!==s?s:0,tone:"text-emerald-300"}),(0,W.jsx)(ye,{label:"Served table",value:null!==(l=j.served_table)&&void 0!==l?l:0,tone:j.served_table?"text-rose-300":"text-white"}),(0,W.jsx)(ye,{label:"Clean rate",value:null===N?"\u2014":"".concat(N,"%"),tone:"text-emerald-300"})]}),(0,W.jsxs)("p",{className:"text-[11px] text-white/40",children:["Last check ",Ne(j.last_checked_at)," \xb7 last catch ",Ne(j.last_caught_at)," \xb7 ",null!==(d=j.caught_7d)&&void 0!==d?d:0," caught in the last 7 days"]}),(0,W.jsxs)("button",{type:"button",onClick:()=>w(e=>!e),"data-testid":"accuracy-show-facts",className:"text-[12px] font-bold text-violet-300 hover:text-violet-200",children:[f?"Hide":"Show"," the exact plan facts the agent is held to"]}),f&&(0,W.jsx)("pre",{className:"rounded-xl border border-white/[0.07] bg-black/30 p-4 text-[11.5px] text-white/75 whitespace-pre-wrap font-sans","data-testid":"accuracy-plan-facts",children:((null===x||void 0===x?void 0:x.plan_facts)||"").replace(/\*\*/g,"")}),x&&0===x.events.length?(0,W.jsxs)("div",{className:"rounded-xl border border-emerald-500/20 bg-emerald-500/[0.05] p-6 text-center","data-testid":"accuracy-empty",children:[(0,W.jsx)(g.A,{className:"h-6 w-6 text-emerald-300 mx-auto mb-2"}),(0,W.jsx)("p",{className:"text-sm font-semibold text-white",children:"No catches yet"}),(0,W.jsx)("p",{className:"text-[12px] text-white/50",children:j.checked?"".concat(j.checked," plan answers checked, all clean."):"The guard runs on the next plan or pricing question."})]}):(0,W.jsx)("ul",{className:"space-y-2","data-testid":"accuracy-events",children:((null===x||void 0===x?void 0:x.events)||[]).map(e=>(0,W.jsx)(_e,{ev:e},e.id))})]})}
1var Ae=a(14939),Ce=a(51401);const Se=[["opened","Assistant opened"],["first_message","Sent a first message"],["personalized","Got a personalized reply"],["cta_clicks","Clicked a next step"],["signups","Signed up (attributed)"]],Le=e=>{var t,a,s,l;let{adminToken:i}=e;const[d,o]=(0,r.useState)(null);if((0,r.useEffect)(()=>{n.default.get("/visitor-assistant/admin/summary?days=30",{headers:{Authorization:"Bearer ".concat(i)}}).then(e=>o(e.data)).catch(()=>o({error:!0}))},[i]),!d||d.error)return null;const c=d.funnel;return(0,W.jsxs)("div",{className:"rounded-2xl bg-white/[0.03] border border-white/[0.08] p-6","data-testid":"admin-bot-stats",children:[(0,W.jsxs)("h3",{className:"text-sm font-bold text-white mb-1 flex items-center gap-2",children:[(0,W.jsx)(Ae.A,{className:"h-4 w-4 text-cyan-300"})," Homepage Assistant (voice + text) \u2014 last 30 days"]}),(0,W.jsxs)("p",{className:"text-[12px] text-white/40 mb-5",children:["Voice sessions ",c.voice," \xb7 Text sessions ",c.text," \xb7 Signup rate ",null===c.signup_rate?"\u2014":"".concat((100*c.signup_rate).toFixed(1),"%")," \xb7 Errors ",(null===(t=d.counts)||void 0===t||null===(a=t.error)||void 0===a?void 0:a.events)||0," \xb7 Mic denied ",(null===(s=d.counts)||void 0===s||null===(l=s.mic_denied)||void 0===l?void 0:l.events)||0]}),(0,W.jsx)("div",{className:"grid sm:grid-cols-5 gap-2.5",children:Se.map(e=>{let[t,a]=e;return(0,W.jsxs)("div",{className:"rounded-xl bg-white/[0.03] border border-white/[0.06] px-3.5 py-3","data-testid":"admin-bot-".concat(t),children:[(0,W.jsx)("p",{className:"text-[11px] text-white/45",children:a}),(0,W.jsx)("p",{className:"text-lg font-bold text-white mt-0.5",children:(c[t]||0).toLocaleString()})]},t)})}),Object.keys(d.cta_by_kind||{}).length>0&&(0,W.jsxs)("p",{className:"mt-3 text-[12px] text-white/50",children:["Next-step clicks: ",Object.entries(d.cta_by_kind).map(e=>{let[t,a]=e;return"".concat(t," ").concat(a)}).join(" \xb7 ")]})]})},ze=e=>{let{adminToken:t}=e;const[a,s]=(0,r.useState)(null);if((0,r.useEffect)(()=>{n.default.get("/admin/funnel-stats",{headers:{Authorization:"Bearer ".concat(t)}}).then(e=>s(e.data)).catch(()=>{})},[t]),!a)return(0,W.jsx)("p",{className:"text-white/40 text-sm py-10 text-center",children:"Loading funnel\u2026"});const l=Math.max(1,...a.steps.map(e=>e.count));return(0,W.jsxs)("div",{"data-testid":"admin-funnel-tab",className:"space-y-8",children:[(0,W.jsx)(Le,{adminToken:t}),(0,W.jsxs)("div",{className:"rounded-2xl bg-white/[0.03] border border-white/[0.08] p-6",children:[(0,W.jsx)("h3",{className:"text-sm font-bold text-white mb-1",children:"Homepage \u2192 Trial Conversion Funnel"}),(0,W.jsx)("p",{className:"text-[12px] text-white/40 mb-6",children:"From tracked site events and demand-analyzer sessions (all time)"}),(0,W.jsx)("div",{className:"space-y-3",children:a.steps.map((e,t)=>(0,W.jsxs)("div",{className:"flex items-center gap-4",children:[(0,W.jsx)("span",{className:"w-52 shrink-0 text-[13px] text-white/65",children:e.label}),(0,W.jsx)("div",{className:"flex-1 h-7 rounded-lg bg-white/[0.04] overflow-hidden",children:(0,W.jsx)("div",{className:"h-full rounded-lg bg-gradient-to-r from-violet-600 to-cyan-500 flex items-center px-2.5 transition-[width] duration-700",style:{width:"".concat(Math.max(4,e.count/l*100),"%")},children:(0,W.jsx)("span",{className:"text-[12px] font-bold text-white whitespace-nowrap",children:e.count.toLocaleString()})})}),(0,W.jsx)("span",{className:"w-20 shrink-0 text-right text-[12px] font-semibold text-cyan-300",children:null!==e.rate&&void 0!==e.rate?"".concat(e.rate,"%"):"\u2014"})]},e.label))})]}),(0,W.jsxs)("div",{className:"rounded-2xl bg-white/[0.03] border border-white/[0.08] p-6",children:[(0,W.jsxs)("h3",{className:"text-sm font-bold text-white mb-4 flex items-center gap-2",children:[(0,W.jsx)(Ce.A,{className:"h-4 w-4 text-violet-300"})," Top Tracked Events"]}),(0,W.jsx)("div",{className:"grid sm:grid-cols-3 gap-2.5",children:a.events.map(e=>(0,W.jsxs)("div",{className:"flex items-center justify-between rounded-xl bg-white/[0.03] border border-white/[0.06] px-3.5 py-2.5",children:[(0,W.jsx)("span",{className:"text-[12.5px] text-white/60 truncate",children:e.event}),(0,W.jsx)("span",{className:"text-[13px] font-bold text-white ml-2",children:e.count.toLocaleStr
1ing()})]},e.event))})]})]})};var Ee=a(94615);const Pe=[{key:"all",label:"All"},{key:"active_trials",label:"Active trials"},{key:"expiring_3days",label:"Expiring \u22643d"},{key:"expiring_today",label:"Expiring today"},{key:"expired_trials",label:"Expired"},{key:"converted_trials",label:"Converted"},{key:"paying",label:"Paying"},{key:"canceled",label:"Canceled"}],Re={TRIAL_ACTIVE:"text-emerald-300 bg-emerald-500/10 border-emerald-500/20",TRIAL_EXPIRED:"text-amber-300 bg-amber-500/10 border-amber-500/20",PAID_ACTIVE:"text-violet-300 bg-violet-500/10 border-violet-500/20",PAYMENT_PAST_DUE:"text-orange-300 bg-orange-500/10 border-orange-500/20",SUBSCRIPTION_CANCELED:"text-rose-300 bg-rose-500/10 border-rose-500/20",ADMIN_ACCESS:"text-cyan-300 bg-cyan-500/10 border-cyan-500/20"},Te=e=>Object.values(e.trial_usage||{}).reduce((e,t)=>e+(Number(t)||0),0);function Ie(e){var t,a,l;let{adminToken:d}=e;const o={Authorization:"Bearer ".concat(d)},[c,x]=(0,r.useState)(null),[m,h]=(0,r.useState)({}),[p,u]=(0,r.useState)("active_trials"),[b,f]=(0,r.useState)([]),[w,g]=(0,r.useState)(!1),[v,j]=(0,r.useState)(!1),[N,y]=(0,r.useState)(""),[_,k]=(0,r.useState)({}),[A,C]=(0,r.useState)(null),S=(0,r.useCallback)(()=>{n.default.get("/admin/trials/funnel",{headers:o}).then(e=>x(e.data)).catch(()=>{}),n.default.get("/admin/trials/counts",{headers:o}).then(e=>h(e.data.counts||{})).catch(()=>{})},[d]),L=(0,r.useCallback)(()=>{g(!0),n.default.get("/admin/trials?filter=".concat(p),{headers:o}).then(e=>f(e.data.trials||[])).catch(()=>i.toast.error("Could not load trials")).finally(()=>g(!1))},[d,p]);(0,r.useEffect)(()=>{S()},[S]),(0,r.useEffect)(()=>{L()},[L]);const E=N.trim().toLowerCase(),P=E?b.filter(e=>[e.email,e.name,e.company].some(e=>(e||"").toLowerCase().includes(E))):b;return(0,W.jsxs)("div",{"data-testid":"admin-trials-tab",children:[(0,W.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3 mb-6",children:((null===c||void 0===c?void 0:c.steps)||[]).map(e=>(0,W.jsxs)("div",{className:"rounded-2xl border border-white/[0.06] bg-white/[0.02] p-4","data-testid":"funnel-step-".concat(e.key),children:[(0,W.jsx)("p",{className:"text-2xl font-bold text-white",children:e.count.toLocaleString()}),(0,W.jsx)("p",{className:"text-xs text-white/55 mt-1",children:e.label}),(0,W.jsx)("div",{className:"h-1 rounded-full bg-white/[0.06] mt-2 overflow-hidden",children:(0,W.jsx)("div",{className:"h-full bg-gradient-to-r from-violet-500 to-fuchsia-500",style:{width:"".concat(e.pct_of_top,"%")}})}),(0,W.jsxs)("p",{className:"text-[11px] text-violet-300 mt-1",children:[e.pct_of_top,"% of signups"]})]},e.key))}),(0,W.jsxs)("div",{className:"flex flex-wrap items-center gap-3 mb-6",children:[(0,W.jsxs)("div",{className:"rounded-xl border border-white/[0.06] bg-white/[0.02] px-4 py-2.5 text-sm",children:[(0,W.jsx)("span",{className:"text-white/50",children:"Overall conversion "}),(0,W.jsxs)("span",{className:"font-bold text-emerald-300",children:[null!==(t=null===c||void 0===c?void 0:c.overall_conversion)&&void 0!==t?t:0,"%"]})]}),(0,W.jsxs)("div",{className:"rounded-xl border border-white/[0.06] bg-white/[0.02] px-4 py-2.5 text-sm",children:[(0,W.jsx)("span",{className:"text-white/50",children:"Checkout \u2192 convert "}),(0,W.jsxs)("span",{className:"font-bold text-violet-300",children:[null!==(a=null===c||void 0===c?void 0:c.checkout_to_convert)&&void 0!==a?a:0,"%"]})]}),(0,W.jsxs)("div",{className:"rounded-xl border border-white/[0.06] bg-white/[0.02] px-4 py-2.5 text-sm inline-flex items-center gap-1.5",children:[(0,W.jsx)(Ce.A,{className:"h-3.5 w-3.5 text-amber-300"}),(0,W.jsx)("span",{className:"text-white/50",children:"Expired "}),(0,W.jsx)("span",{className:"font-bold text-amber-300",children:null!==(l=null===c||void 0===c?void 0:c.expired)&&void 0!==l?l:0})]}),(0,W.jsx)("div",{className:"flex-1"}),(0,W.jsxs)("button",{onClick:async()=>{j(!0);try{const e=await n.default.post("/admin/trial-lifecycle/run-now",{},{headers:o});i.toast.success("Lifecycle run: ".concat(e.data.reminders_3day," reminders \xb7 ").concat(e.data.expired," expired \xb7 ").concat(e.data.emails_sent," emails sent")),S(),L()}catch(e){i.toast.error("Run failed")}j(!1)},disabled:v,"data-testid":"run-lifecycle-btn",className:"inline-flex items-center gap-1.5 px-4 py-2.5 rounded-xl bg-violet-600/20 border border-violet-500/30 text-violet-200 text-sm font-semibold hover:bg-violet-600/30 disabled:opacity-50",children:[v?(0,W.jsx)(z.A,{className:"h-4 w-4 animate-spin"}):(0,W.jsx)(O.A,{className:"h-4 w-4"})," Run nurture now"]}),(0,W.jsxs)("button",{onClick:()=>{S(),L()},className:"inline-flex items-center gap-1.5 px-3 py-2.5 rounded-xl bg-white/[0.05] border border-white/[0.08] text-white/70 text-sm hover:text-white",children:[(0,W.jsx)(R.A,{className:"h-4 w-4"})," Refresh"]})]}),(0,W.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 mb-4","data-testid":"trial-filters",children:[Pe.map(e=>(0,W.jsxs)("button",{onClick:()=>u(e.key),"data-testid":"trial-filter-".concat(e.key),className:"px-3 py-1.5 rounded-lg text-sm font-medium transition-all ".concat(p===e.key?"bg-white/[0.1] text-white":"text-white/45 hover:text-white/80 bg-white/[0.02]"),children:[e.label,null!=m[e.key]?" \xb7 ".concat(m[e.key]):""]},e.key)),(0,W.jsx)("div",{className:"flex-1"}),(0,W.jsx)("input",{"data-testid":"trial-search",value:N,onChange:e=>y(e.target.value),placeholder:"Search email or company\u2026",className:"w-64 bg-white/[0.04] border border-white/10 rounded-lg px-3 py-1.5 text-sm text-white placeholder:text-white/30 focus:outline-none focus:ring-1 focus:ring-violet-500/40"})]}),(0,W.jsx)("div",{className:"rounded-2xl border border-white/[0.06] overflow-hidden bg-white/[0.02]","data-testid":"trials-table",children:w?(0,W.jsx)("div",{className:"p-10 flex justify-center",children:(0,W.jsx)(z.A,{className:"h-6 w-6 animate-spin text-violet-400"})}):0===P.length?(0,W.jsx)("div",{className:"p-10 text-center text-white/40 text-sm",children:E?"No users match your search.":"No users in this segment."}):(0,W.jsxs)("table",{className:"w-full text-sm",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"text-left text-white/40 text-xs border-b border-white/[0.06]",children:[(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"User"}),(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Status"}),(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Days left"}),(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Plan"}),(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Features used"}),(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Converted"}),(0,W.jsx)("th",{className:"px-4 py-3 font-medium",children:"Extend trial"})]})}),(0,W.jsx)("tbody",{children:P.map(e=>{var t;return(0,W.jsxs)("tr",{className:"border-b border-white/[0.04] hover:bg-white/[0.02]","data-testid":"trial-row-".concat(e.user_id),children:[(0,W.jsxs)("td",{className:"px-4 py-3",children:[(0,W.jsx)("a",{href:"mailto:".concat(e.email),className:"text-white/90 hover:text-violet-300",children:e.email}),(0,W.jsx)("div",{className:"text-[11px] text-white/40",children:e.company||e.name||"\u2014"})]}),(0,W.jsx)("td",{className:"px-4 py-3",children:(0,W.jsx)("span",{className:"px-2 py-0.5 rounded-full text-[11px] border ".concat(Re[e.account_status]||"text-white/50 bg-white/5 border-white/10"),children:(e.account_status||"").replace("_"," ").toLowerCase()})}),(0,W.jsx)("td",{className:"px-4 py-3 text-white/70",children:"TRIAL_ACTIVE"===e.account_status?"".concat(e.days_remaining,"d"):"\u2014"}),(0,W.jsx)("td",{className:"px-4 py-3 text-white/70",children:e.plan_level||"free"}),(0,W.jsx)("td",{className:"px-4 py-3 text-white/70",children:Te(e)}),(0,W.jsx)("td",{className:"px-4 py-3 text-white/60",children:e.converted?(0,W.jsx)("span",{className:"text-emerald-300",children:(e.conversion_date||"").slice(0,10)||"yes"}):"\u2014"}),(0,W.jsx)("td",{className:"px-4 py-3",children:(0,W.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,W.jsx)("input",{type:"number",min:"1",max:"90","data-testid":"extend-days-".concat(e.user_id),value:null!==(t=_[e.user_id])&&void 0!==t?t:3,onChange:t=>k(a=>(0,s.A)((0,s.A)({},a),{},{[e.user_id]:t.target.value})),className:"w-14 bg-white/[0.05] border border-white/10 rounded-md px-2 py-1 text-xs text-white focus:outline-none focus:ring-1 focus:ring-violet-500/40"}),(0,W.jsxs)("button",{"data-testid":"extend-btn-".concat(e.user_id),onClick:()=>{var t;return(async(e,t)=>{C(e.user_id);try{const a=await n.default.post("/admin/trials/extend",{user_id:e.user_id,days:t},{headers:o});i.toast.success("Added ".concat(t," day").concat(1!==t?"s":""," to ").concat(a.data.email," \u2014 now ").concat(a.data.days_remaining," day(s) left")),S(),L()}catch(r){var a,s;i.toast.error((null===(a=r.response)||void 0===a||null===(s=a.data)||void 0===s?void 0:s.detail)||"Could not extend trial")}C(null)})(e,Math.max(1,Math.min(90,parseInt(null!==(t=_[e.user_id])&&void 0!==t?t:3,10)||3)))},disabled:A===e.user_id,className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-md bg-emerald-500/15 border border-emerald-500/30 text-emerald-200 text-xs font-semibold hover:bg-emerald-500/25 disabled:opacity-50",children:[A===e.user_id?(0,W.jsx)(z.A,{className:"h-3 w-3 animate-spin"}):(0,W.jsx)(Ee.A,{className:"h-3 w-3"})," Add days"]})]})})]},e.user_id)})})]})})]})}var De=a(41180),Ue=a(877),Fe=a(87734),Me=a(52185),Be=a(6026),Oe=a(63670),Ve=a(35963),$e=a(28592);const Ge={free:"bg-zinc-500/10 text-zinc-400 border-zinc-500/20",starter:"bg-blue-500/10 text-blue-400 border-blue-500/20",growth:"bg-violet-500/10 text-violet-400 border-violet-500/20",command:"bg-fuchsia-500/10 text-fuchsia-400 border-fuchsia-500/20",scale:"bg-cyan-500/10 text-cyan-400 border-cyan-500/20",enterprise:"bg-amber-500/10 text-amber-400 border-amber-500/20",partner_free:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",partner_starter:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",partner_growth:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",partner_command:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",partner_scale:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",partner_enterprise:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20"},We={active:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",suspended:"bg-red-500/10 text-red-400 border-red-500/20"},qe=[["free","Free"],["starter","Starter"],["growth","Growth"],["command","Command"],["scale","Scale"],["enterprise","Enterprise"],["partner_free","Partner \u2014 Free"],["partner_starter","Partner \u2014 Starter"],["partner_growth","Partner \u2014 Growth"],["partner_command","Partner \u2014 Command"],["partner_scale","Partner \u2014 Scale"],["partner_enterprise","Partner \u2014 Enterprise"]],He=Object.fromEntries(qe),Ke=(0,s.A)((0,s.A)({},He),{},{free_trial:"Free trial"}),Qe=e=>{const t=e.plan_level||"free";if("admin"===e.role)return{kind:"none",label:"\u2014"};if(t.startsWith("partner_")||e.is_referral_partner)return{kind:"none",label:"Partner \u2014 no trial"};if("PAID_ACTIVE"===e.account_status||"PAYMENT_PAST_DUE"===e.account_status||"free"!==t&&"trialing"!==e.subscription_status)return{kind:"converted",label:"Converted",tone:"bg-emerald-500/10 border-emerald-500/25 text-emerald-400"};
1if(!e.trial_end_effective)return"TRIAL_EXPIRED"===e.account_status?{kind:"pending",label:"Starts on next login",tone:"bg-white/[0.04] border-white/[0.1] text-white/50"}:{kind:"none",label:"No trial on record"};const a=e.trial_days_left;if(null===a||void 0===a)return{kind:"none",label:"\u2014"};if(a<=0){var s;const t=null!==(s=e.trial_days_since_expiry)&&void 0!==s?s:0;return{kind:"expired",label:0===t?"Expired today":"Expired ".concat(t,"d ago"),tone:"bg-red-500/10 border-red-500/25 text-red-400"}}return 1===a?{kind:"active",label:"Ends today",tone:"bg-amber-500/15 border-amber-500/40 text-amber-300",urgent:!0}:{kind:"active",label:"".concat(a,"d left"),tone:a<=3?"bg-amber-500/10 border-amber-500/25 text-amber-400":"bg-violet-500/10 border-violet-500/25 text-violet-300",urgent:a<=3}},Xe=[["all","Everyone"],["expiring","Trial expiring \u22643d"],["expired","Expired, not converted"],["active","On trial"],["converted","Converted"]];function Ye(){var e,t;const[a,s]=(0,r.useState)([]),[k,A]=(0,r.useState)(null),[C,L]=(0,r.useState)(null),[z,E]=(0,r.useState)(""),[P,R]=(0,r.useState)("all"),[T,I]=(0,r.useState)("all"),[D,U]=(0,r.useState)(!0),[F,M]=(0,r.useState)(null),[B,O]=(0,r.useState)("users"),[V,$]=(0,r.useState)(""),[G,q]=(0,r.useState)(null),[H,K]=(0,r.useState)([]),[Q,Y]=(0,r.useState)("all"),[J,ee]=(0,r.useState)(!1),[te,ae]=(0,r.useState)(null),[se,re]=(0,r.useState)(!1),le=(0,l.Zp)(),ne=localStorage.getItem("admin_token"),de=JSON.parse(localStorage.getItem("admin_user")||"{}"),oe=(0,r.useCallback)(async()=>{try{const e={Authorization:"Bearer ".concat(ne)},[t,a]=await Promise.all([n.default.get("/admin/users",{headers:e}),n.default.get("/admin/stats",{headers:e})]);s(t.data),A(a.data),n.default.get("/admin/revenue-trend",{headers:e}).then(e=>L(e.data)).catch(()=>{})}catch(a){var e,t;401!==(null===(e=a.response)||void 0===e?void 0:e.status)&&403!==(null===(t=a.response)||void 0===t?void 0:t.status)||(localStorage.removeItem("admin_token"),localStorage.removeItem("admin_user"),le("/admin"))}finally{U(!1)}},[ne,le]);(0,r.useEffect)(()=>{ne?oe():le("/admin")},[ne,le,oe]);const ce=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all";ee(!0);try{const t={Authorization:"Bearer ".concat(ne)},[a,s]=await Promise.all([n.default.get("/admin/beta-signups/stats",{headers:t}),n.default.get("/admin/beta-signups?limit=500".concat("all"!==e?"&source=".concat(encodeURIComponent(e)):""),{headers:t})]);q(a.data),K(s.data.signups||[])}catch(s){var t,a;i.toast.error((null===(t=s.response)||void 0===t||null===(a=t.data)||void 0===a?void 0:a.detail)||"Failed to load beta signups")}finally{ee(!1)}},[ne]);(0,r.useEffect)(()=>{"beta"===B&&ne&&ce(Q)},[B,Q,ne,ce]);const xe=(0,r.useCallback)(async()=>{re(!0);try{const e={Authorization:"Bearer ".concat(ne)},t=await n.default.get("/admin/hot-leads",{headers:e});ae(t.data)}catch(a){var e,t;i.toast.error((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Failed to load hot leads")}finally{re(!1)}},[ne]);(0,r.useEffect)(()=>{"hotleads"===B&&ne&&xe()},[B,ne,xe]);const he=a.filter(e=>{var t,a;const s=!z||(null===(t=e.name)||void 0===t?void 0:t.toLowerCase().includes(z.toLowerCase()))||(null===(a=e.email)||void 0===a?void 0:a.toLowerCase().includes(z.toLowerCase())),r="all"===P||(e.plan_level||"free")===P,l=Qe(e),i="all"===T||"expiring"===T&&"active"===l.kind&&l.urgent||"expired"===T&&"expired"===l.kind||"active"===T&&"active"===l.kind||"converted"===T&&"converted"===l.kind;return s&&r&&i}),pe=a.reduce((e,t)=>{const a=Qe(t);return"active"===a.kind&&a.urgent&&(e.expiring+=1),"expired"===a.kind&&(e.expired+=1),"active"===a.kind&&(e.active+=1),"converted"===a.kind&&(e.converted+=1),e},{expiring:0,expired:0,active:0,converted:0}),be=e=>e?new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"\u2014";return D?(0,W.jsx)("div",{className:"min-h-screen bg-[#07070a] flex items-center justify-center",children:(0,W.jsx)("div",{className:"h-8 w-8 border-2 border-amber-500 border-t-transparent rounded-full animate-spin"})}):(0,W.jsxs)("div",{"data-testid":"admin-dashboard",className:"min-h-screen bg-[#07070a] text-white",style:{fontFamily:"'Outfit', sans-serif"},children:[(0,W.jsx)("div",{className:"fixed inset-0 opacity-[0.02]",style:{backgroundImage:"radial-gradient(circle at 1px 1px, white 1px, transparent 0)",backgroundSize:"32px 32px"}}),(0,W.jsx)("header",{className:"sticky top-0 z-40 bg-[#07070a]/80 backdrop-blur-xl border-b border-white/[0.06]",children:(0,W.jsxs)("div",{className:"max-w-7xl mx-auto px-6 py-4 flex items-center justify-between",children:[(0,W.jsxs)("div",{className:"flex items-center gap-4",children:[(0,W.jsx)("img",{src:"/veluro-logo.png",alt:"
1Veluro",className:"h-9 object-contain"}),(0,W.jsxs)("div",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-amber-500/10 border border-amber-500/20 text-amber-400 text-xs font-semibold",children:[(0,W.jsx)(d.A,{className:"h-3 w-3"}),"Admin"]})]}),(0,W.jsxs)("div",{className:"flex items-center gap-4",children:[(0,W.jsx)($e.U,{}),(0,W.jsx)("span",{className:"text-sm text-white/40",children:de.email}),(0,W.jsxs)("button",{"data-testid":"admin-logout-btn",onClick:()=>{localStorage.removeItem("admin_token"),localStorage.removeItem("admin_user"),le("/admin")},className:"flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm text-zinc-400 hover:text-red-400 hover:bg-red-500/5 transition-colors",children:[(0,W.jsx)(o.A,{className:"h-4 w-4"}),"Sign Out"]})]})]})}),(0,W.jsxs)("main",{className:"relative max-w-7xl mx-auto px-6 py-8",children:[(0,W.jsxs)("div",{"data-testid":"admin-tabs",className:"flex items-center gap-1 mb-6 p-1 rounded-xl bg-white/[0.03] border border-white/[0.06] w-fit",children:[(0,W.jsxs)("button",{"data-testid":"admin-tab-users",onClick:()=>O("users"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("users"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(c.A,{className:"h-4 w-4"})," Users"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-beta",onClick:()=>O("beta"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("beta"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(x.A,{className:"h-4 w-4"})," Beta Signups",null!==G&&void 0!==G&&G.total?(0,W.jsx)("span",{className:"ml-1 inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 rounded-full bg-violet-500/20 text-violet-300 text-[10px] font-bold",children:G.total}):null]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-hotleads",onClick:()=>O("hotleads"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("hotleads"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(m.A,{className:"h-4 w-4"}
1)," Hot Leads",null!==te&&void 0!==te&&te.total?(0,W.jsx)("span",{className:"ml-1 inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 rounded-full bg-orange-500/20 text-orange-300 text-[10px] font-bold",children:te.total}):null]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-reportleads",onClick:()=>O("reportleads"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("reportleads"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(h.A,{className:"h-4 w-4"})," Report Leads"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-referrals",onClick:()=>O("referrals"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("referrals"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(p.A,{className:"h-4 w-4"})," Referrals"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-payouts",onClick:()=>O("payouts"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("payouts"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(u.A,{className:"h-4 w-4"})," Payouts"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-credits",onClick:()=>O("credits"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("credits"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(b.A,{className:"h-4 w-4"})," AI Credits"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-rescue",onClick:()=>O("rescue"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("rescue"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(d.A,{className:"h-4 w-4"})," Rescue"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-email",onClick:()=>O("email"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("email"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(f.A,{className:"h-4 w-4"})," Email Blast"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-chats",onClick:()=>O("chats"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("chats"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(w.A,{className:"h-4 w-4"})," Chats"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-funnel",onClick:()=>O("funnel"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("funnel"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(b.A,{className:"h-4 w-4"})," Funnel"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-accuracy",onClick:()=>O("accuracy"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("accuracy"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(g.A,{className:"h-4 w-4"})," AI Accuracy"]}),(0,W.jsxs)("button",{"data-testid":"admin-tab-trials",onClick:()=>O("trials"),className:"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all ".concat("trials"===B?"bg-white/[0.08] text-white shadow-sm":"text-white/45 hover:text-white/80"),children:[(0,W.jsx)(v.A,{className:"h-4 w-4"})," Trials"]})]}),"trials"===B&&(0,W.jsx)(Ie,{adminToken:ne}),"accuracy"===B&&(0,W.jsx)(ke,{adminToken:ne}),"funnel"===B&&(0,W.jsx)(ze,{adminToken:ne}),"chats"===B&&(0,W.jsx)(ge,{adminToken:ne}),"email"===B&&(0,W.jsx)(ue,{adminToken:ne}),"rescue"===B&&(0,W.jsx)(me,{adminToken:ne,initialEmail:V}),"credits"===B&&(0,W.jsx)(Z,{adminToken:ne}),"payouts"===B&&(0,W.jsx)(ie,{adminToken:ne}),"referrals"===B&&(0,W.jsx)(X,{adminToken:ne}),"users"===B&&(0,W.jsxs)(W.Fragment,{children:[k&&(0,W.jsxs)("div",{"data-testid":"admin-stats",className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-8",children:[(0,W.jsx)(Je,{icon:c.A,label:"Total Users",value:k.total_users,color:"text-cyan-400",bg:"bg-cyan-500/10",border:"border-cyan-500/20"}),(0,W.jsx)(Je,{icon:j.A,label:"Free",value:(null===(e=k.by_plan)||void 0===e?void 0:e.free)||0,color:"text-zinc-400",bg:"bg-zinc-500/10",border:"border-zinc-500/20"}),(0,W.jsx)(Je,{icon:j.A,label:"Paid Plans",value:k.paid_users||0,color:"text-violet-400",bg:"bg-violet-500/10",border:"border-violet-500/20"}),(0,W.jsx)(Je,{icon:p.A,label:"Partner Accounts",value:k.partner_users||0,color:"text-emerald-400",bg:"bg-emerald-500/10",border:"border-emerald-500/20"})]}),(null===k||void 0===k?void 0:k.revenue_by_plan)&&(0,W.jsxs)("div",{"data-testid":"admin-revenue",className:"rounded-2xl bg-white/[0.02] border border-white/[0.07] p-5 mb-8",children:[(0,W.jsxs)("div",{className:"flex flex-wrap items-center gap-4 mb-4",children:[(0,W.jsxs)("p",{className:"text-sm font-bold text-white flex items-center gap-2",children:[(0,W.jsx)(N.A,{className:"h-4 w-4 text-emerald-400"})," Revenue"]}),(0,W.jsxs)("div",{className:"flex gap-4 ml-auto",children:[(0,W.jsxs)("div",{className:"text-right",children:[(0,W.jsx)("p",{className:"text-[10px] uppercase tracking-wider text-white/35 font-semibold",children:"MRR"}),(0,W.jsxs)("p",{"data-testid":"admin-mrr",className:"text-xl font-bold text-emerald-300",children:["$",(k.mrr||0).toLocaleStr
1ing()]})]}),(0,W.jsxs)("div",{className:"text-right",children:[(0,W.jsx)("p",{className:"text-[10px] uppercase tracking-wider text-white/35 font-semibold",children:"Annual run-rate"}),(0,W.jsxs)("p",{"data-testid":"admin-arr",className:"text-xl font-bold text-white/80",children:["$",(k.arr||0).toLocaleString()]})]})]})]}),(0,W.jsxs)("div",{className:"grid sm:grid-cols-2 lg:grid-cols-4 gap-2.5",children:[["starter","growth","command","scale","enterprise","partner_starter","partner_growth","partner_command","partner_scale","partner_enterprise"].filter(e=>{var t;return(null===(t=k.revenue_by_plan[e])||void 0===t?void 0:t.users)>0}).map(e=>{const t=k.revenue_by_plan[e];return(0,W.jsxs)("button",{"data-testid":"admin-revenue-".concat(e),onClick:()=>{R(e),setTimeout(()=>{var e;return null===(e=document.querySelector('[data-testid="admin-search-input"]'))||void 0===e?void 0:e.scrollIntoView({behavior:"smooth",block:"center"})},50)},className:"rounded-xl border px-3.5 py-2.5 text-left transition-colors cursor-pointer ".concat(P===e?"border-violet-500/60 bg-violet-500/[0.08]":"border-white/[0.07] bg-white/[0.02] hover:border-violet-500/40"),children:[(0,W.jsx)("p",{className:"text-xs font-semibold text-white/70",children:He[e]||e}),(0,W.jsxs)("p",{className:"text-base font-bold text-emerald-300",children:["$",(t.revenue||0).toLocaleString(),(0,W.jsx)("span",{className:"text-[11px] text-white/35 font-medium",children:"/mo"})]}),(0,W.jsxs)("p",{className:"text-[11px] text-white/35",children:[t.users," user",1!==t.users?"s":""," \xd7 $",t.price.toLocaleString()," \xb7 ",(0,W.jsx)("span",{className:"text-violet-300",children:"view users \u2192"})]})]},e)}),0===(k.mrr||0)&&(0,W.jsx)("p",{className:"text-xs text-white/35 col-span-full",children:"No paying users yet \u2014 revenue appears here once plans are sold."})]}),(null===C||void 0===C||null===(t=C.trend)||void 0===t?void 0:t.length)>1&&(0,W.jsxs)("div",{className:"mt-5","data-testid":"admin-mrr-trend",children:[(0,W.jsxs)("div",{className:"flex items-center gap-3 mb-2",children:[(0,W.jsx)("p",{className:"text-xs font-semibold text-white/50",children:"MRR trend \u2014 last 12 months"}),null!==C.mom_growth_pct&&void 0!==C.mom_growth_pct&&(0,W.jsxs)("span",{className:"text-[11px] font-bold px-2 py-0.5 rounded-full border ".concat(C.mom_growth_pct>=0?"bg-emerald-500/10 text-emerald-300 border-emerald-500/20":"bg-rose-500/10 text-rose-300 border-rose-500/20"),children:[C.mom_growth_pct>=0?"+":"",C.mom_growth_pct,"% MoM"]})]}),(0,W.jsx)("div",{className:"h-44",children:(0,W.jsx)(De.u,{width:"100%",height:"100%",children:(0,W.jsxs)(Ue.Q,{data:C.trend,margin:{top:5,right:5,bottom:0,left:0},children:[(0,W.jsx)("defs",{children:(0,W.jsxs)("linearGradient",{id:"mrrGrad",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,W.jsx)("stop",{offset:"0%",stopColor:"#34d399",stopOpacity:.25}),(0,W.jsx)("stop",{offset:"100%",stopColor:"#34d399",stopOpacity:0})]})}),(0,W.jsx)(Fe.d,{strokeDasharray:"3 3",stroke:"rgba(255,255,255,0.05)",vertical:!1}),(0,W.jsx)(Me.W,{dataKey:"month",tick:{fill:"rgba(255,255,255,0.35)",fontSize:10},tickFormatter:e=>e.slice(2),axisLine:!1,tickLine:!1}),(0,W.jsx)(Be.h,{tick:{fill:"rgba(255,255,255,0.35)",fontSize:10},tickFormatter:e=>e>=1e3?"$".concat(Math.round(e/1e3),"k"):"$".concat(e),width:42,axisLine:!1,tickLine:!1}),(0,W.jsx)(Oe.m,{contentStyle:{background:"#141420",border:"1px solid rgba(255,255,255,0.1)",borderRadius:10,fontSize:12,color:"#fff"},formatter:(e,t,a)=>{var s;return["$".concat(e.toLocaleString()).concat(null!==a&&void 0!==a&&null!==(s=a.payload)&&void 0!==s&&s.estimated?" (est.)":""),"MRR"]}}),(0,W.jsx)(Ve.Gk,{type:"monotone",dataKey:"mrr",stroke:"#34d399",strokeWidth:2,fill:"url(#mrrGrad)"})]})})})]})]}),(0,W.jsxs)("div",{className:"flex flex-col sm:flex-row gap-3 mb-6",children:[(0,W.jsxs)("div",{className:"relative flex-1",children:[(0,W.jsx)(y.A,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-white/30"}),(0,W.jsx)("input",{"data-testid":"admin-search-input",type:"text",placeholder:"Search by name or email...",value:z,onChange:e=>E(e.target.value),className:"w-full bg-white/[0.03] border border-white/10 rounded-xl pl-10 pr-4 py-2.5 text-sm text-white placeholder:text-white/20 focu
1s:outline-none focus:ring-2 focus:ring-amber-500/30"})]}),(0,W.jsxs)("select",{"data-testid":"admin-plan-filter",value:P,onChange:e=>R(e.target.value),className:"bg-white/[0.03] border border-white/10 rounded-xl px-4 py-2.5 text-sm text-white focus:outline-none focus:ring-2 focus:ring-amber-500/30 appearance-none cursor-pointer",children:[(0,W.jsx)("option",{value:"all",className:"bg-zinc-900",children:"All Plans"}),qe.map(e=>{let[t,a]=e;return(0,W.jsx)("option",{value:t,className:"bg-zinc-900",children:a},t)})]})]}),(0,W.jsx)("div",{className:"flex flex-wrap gap-2 mb-5","data-testid":"admin-trial-filters",children:Xe.map(e=>{let[t,s]=e;const r="all"===t?a.length:pe[t],l=T===t;return(0,W.jsxs)("button",{type:"button","data-testid":"admin-trial-filter-".concat(t),onClick:()=>I(t),className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border text-xs font-semibold transition-colors ".concat(l?"border-amber-500/60 bg-amber-500/10 text-amber-300":"border-white/[0.08] bg-white/[0.02] text-white/55 hover:text-white hover:border-white/20"),children:[s,(0,W.jsx)("span",{className:"px-1.5 py-0.5 rounded-full text-[10px] ".concat(l?"bg-amber-500/20 text-amber-200":"bg-white/[0.06] text-white/50"),children:r})]},t)})}),(0,W.jsx)("div",{"data-testid":"admin-users-table",className:"bg-white/[0.02] border border-white/[0.06] rounded-2xl overflow-hidden",children:(0,W.jsx)("div",{className:"overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"border-b border-white/[0.06] text-white/40 text-xs uppercase tracking-wider",children:[(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Name"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Email"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Plan"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Signup Date"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Trial"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Status"}),(0,W.jsx)("th",{className:"text-right px-6 py-4 font-semibold",children:"Actions"})]})}),(0,W.jsxs)("tbody",{children:[he.map(e=>{var t,a;const s=e.plan_level||"free",r=e.status||"active",l="admin"===e.role,o=Qe(e),c=e.signup_plan&&"free_trial"!==e.signup_plan&&e.signup_plan!==s?e.signup_plan:null;return(0,W.jsxs)("tr",{"data-testid":"admin-user-row-".concat(e.user_id),className:"border-b border-white/[0.04] hover:bg-white/[0.02] transition-colors",children:[(0,W.jsx)("td",{className:"px-6 py-4",children:(0,W.jsxs)("div",{"data-testid":"admin-user-open-".concat(e.user_id),className:"flex items-center gap-3 cursor-pointer group",title:"View full details",onClick:()=>{$(e.email),O("rescue")},children:[(0,W.jsx)("div",{className:"h-8 w-8 rounded-full bg-gradient-to-br from-violet-500/20 to-fuchsia-500/20 flex items-center justify-center text-white/60 text-sm font-semibold shrink-0",children:(null===(t=e.name)||void 0===t||null===(a=t[0])||void 0===a?void 0:a.toUpperCase())||"?"}),(0,W.jsx)("div",{children:(0,W.jsxs)("p",{className:"text-white font-medium flex items-center gap-2 group-hover:text-violet-300 transition-colors",children:[e.name||"Unnamed",l&&(0,W.jsx)(d.A,{className:"h-3.5 w-3.5 text-amber-400"})]})})]})}),(0,W.jsxs)("td",{className:"px-6 py-4 text-white/60",children:[e.email,!1===e.email_verified&&(0,W.jsx)("span",{"data-testid":"unverified-badge-".concat(e.user_id),className:"ml-2 inline-flex px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/25 text-[10px] font-medium text-amber-400",children:"unverified"})]}),(0,W.jsx)("td",{className:"px-6 py-4",children:F===e.user_id?(0,W.jsxs)("div",{className:"flex items-center gap-2",children:[(0,W.jsx)("select",{"data-testid":"plan-select-".concat(e.user_id),defaultValue:s,onChange:t=>(async(e,t)=>{try{const a={Authorization:"Bearer ".concat(ne)};await n.default.put("/admin/users/".concat(e,"/plan"),{plan_level:t},{headers:a}),i.toast.success("Plan updated to ".concat(t)),M(null),oe()}catch(r){var a,s;i.toast.error((null===(a=r.response)||void 0===a||null===(s=a.data)||void 0===s?void 0:s.detail)||"Failed to update plan")}})(e.user_id,t.target.value),className:"bg-zinc-900 border border-white/10 rounded-lg px-2 py-1 text-xs text-white focus:outline-none",children:qe.map(e=>
1{let[t,a]=e;return(0,W.jsx)("option",{value:t,children:a},t)})}),(0,W.jsx)("button",{onClick:()=>M(null),className:"text-xs text-white/30 hover:text-white/60",children:"Cancel"})]}):(0,W.jsxs)("div",{className:"flex flex-col items-start gap-1",children:[(0,W.jsxs)("button",{"data-testid":"plan-badge-".concat(e.user_id),onClick:()=>M(e.user_id),className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-full border text-xs font-medium hover:opacity-80 transition-opacity ".concat(Ge[s]||Ge.free),children:[He[s]||s,"active"===o.kind&&"free"===s?" \xb7 Trial":"",(0,W.jsx)(_.A,{className:"h-3 w-3 opacity-50"})]}),c&&(0,W.jsxs)("span",{"data-testid":"signup-plan-".concat(e.user_id),title:"Plan they clicked on the pricing page before signing up",className:"text-[10px] text-white/45",children:["Signed up for: ",(0,W.jsx)("span",{className:"text-violet-300 font-semibold",children:Ke[c]||c})]}),e.signup_source&&(0,W.jsxs)("span",{"data-testid":"signup-source-".concat(e.user_id),className:"text-[10px] text-white/30 capitalize",children:["via ",e.signup_source]})]})}),(0,W.jsx)("td",{className:"px-6 py-4 text-white/40",children:be(e.created_at)}),(0,W.jsx)("td",{className:"px-6 py-4","data-testid":"trial-cell-".concat(e.user_id),children:"none"===o.kind?(0,W.jsx)("span",{className:"text-white/30 text-xs",children:o.label}):(0,W.jsxs)("div",{className:"flex flex-col items-start gap-1",children:[(0,W.jsxs)("span",{"data-testid":"trial-badge-".concat(e.user_id),className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full border text-[11px] font-bold whitespace-nowrap ".concat(o.tone),children:["active"===o.kind&&(0,W.jsx)(v.A,{className:"h-3 w-3"}),o.label]}),e.trial_end_effective&&"converted"!==o.kind&&(0,W.jsxs)("span",{"data-testid":"trial-end-".concat(e.user_id),className:"text-[10px] text-white/40",children:["expired"===o.kind?"Ended":"Ends"," ",be(e.trial_end_effective)]})]})}),(0,W.jsxs)("td",{className:"px-6 py-4",children:[(0,W.jsx)("span",{className:"inline-flex px-2.5 py-1 rounded-full border text-xs font-medium capitalize ".concat(We[r]||We.active),children:r}),"active"===r&&"TRIAL_EXPIRED"===e.account_status&&e.trial_end_effective&&(0,W.jsx)("span",{"data-testid":"locked-badge-".concat(e.user_id),title:"Trial ended \u2014 they can log in and view, but every create/edit action is paywalled until they pick a plan",className:"ml-2 inline-flex px-2 py-0.5 rounded-full bg-red-500/10 border border-red-500/25 text-[10px] font-bold text-red-400",children:"Locked"}),(()=>{if(["free","partner_free"].includes(s)||"active"!==r)return null;const t=e.last_active_at||e.created_at;if(!t)return null;const a=Math.floor((Date.now()-new Date(t).getTime())/864e5);return a<14?null:(0,W.jsxs)("span",{"data-testid":"churn-badge-".concat(e.user_id),className:"ml-2 inline-flex px-2 py-0.5 rounded-full bg-rose-500/10 border border-rose-500/25 text-[10px] font-bold text-rose-400",children:["Quiet ",a,"d"]})})()]}),(0,W.jsx)("td",{className:"px-6 py-4 text-right",children:!l&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)("button",{"data-testid":"status-toggle-".concat(e.user_id),onClick:()=>(async(e,t)=>{const a="active"===t?"suspended":"active";try{const t={Authorization:"Bearer ".concat(ne)};await n.default.put("/admin/users/".concat(e,"/status"),{status:a},{headers:t}),i.toast.success("User ".concat(a)),oe()}catch(l){var s,r;i.toast.error((null===(s=l.response)||void 0===s||null===(r=s.data)||void 0===r?void 0:r.detail)||"Failed to update status")}})(e.user_id,r),className:"text-xs font-medium px-3 py-1.5 rounded-lg transition-colors ".concat("active"===r?"text-red-400 hover:bg-red-500/10":"text-emerald-400 hover:bg-emerald-500/10"),children:"active"===r?"Suspend":"Activate"}),e.is_referral_partner&&(0,W.jsx)("button",{"data-testid":"set-partner-plan-".concat(e.user_id),onClick:async()=>{const t=window.prompt("Set partner plan for ".concat(e.email,"\n\nType one of: free, starter, growth, command, scale, enterprise"));if(!t)return;const a=async a=>{const s=await n.default.post("/admin/partners/change-plan",{email:e.email,plan:t.trim().toLowerCase(),force:a},{headers:{Authorization:"Bearer ".concat(ne)},timeout:6e4});i.toast.success(s.data.message),oe()};try{await a(!1)}catch(o){var s,r;const e="string"===typeof(null===(s=o.response)||void 0===s||null===(r=s.data)||void 0===r?void 0:r.detail)?o.response.data.detail:"The billing update failed (server did not respond cleanly
1)";if(window.confirm("".concat(e,"\n\nUpdate Veluro's records anyway? Their access changes immediately, but you'll need to adjust their subscription price in the Stripe dashboard yourself.")))try{await a(!0)}catch(c){var l,d;i.toast.error("string"===typeof(null===(l=c.response)||void 0===l||null===(d=l.data)||void 0===d?void 0:d.detail)?c.response.data.detail:"Could not change plan")}}},className:"ml-1 text-xs font-medium px-3 py-1.5 rounded-lg text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:"Set plan"}),(0,W.jsx)("button",{"data-testid":"reset-link-".concat(e.user_id),onClick:async()=>{try{const t=await n.default.post("/admin/users/".concat(e.user_id,"/reset-link"),{origin_url:window.location.origin},{headers:{Authorization:"Bearer ".concat(ne)}});try{await navigator.clipboard.writeText(t.data.link),i.toast.success("Reset link copied \u2014 valid 24h, lockouts cleared. Send it to ".concat(e.email))}catch(s){window.prompt("Copy this reset link (valid 24h):",t.data.link)}}catch(r){var t,a;i.toast.error((null===(t=r.response)||void 0===t||null===(a=t.data)||void 0===a?void 0:a.detail)||"Could not generate link")}},className:"ml-1 text-xs font-medium px-3 py-1.5 rounded-lg text-violet-300 hover:bg-violet-500/10 transition-colors",children:"Reset link"}),(0,W.jsx)("button",{"data-testid":"delete-user-".concat(e.user_id),onClick:async()=>{if(window.confirm("Permanently delete ".concat(e.email,"? This removes their account, partner record and sessions. This cannot be undone.")))try{await n.default.delete("/admin/users/".concat(e.user_id),{headers:{Authorization:"Bearer ".concat(ne)}}),i.toast.success("".concat(e.email," deleted")),oe()}catch(s){var t,a;i.toast.error((null===(t=s.response)||void 0===t||null===(a=t.data)||void 0===a?void 0:a.detail)||"Delete failed")}},className:"ml-1 text-xs font-bold px-3 py-1.5 rounded-lg text-white/35 hover:text-red-400 hover:bg-red-500/10 transition-colors",children:"Delete"})]})})]},e.user_id)}),0===he.length&&(0,W.jsx)("tr",{children:(0,W.jsx)("td",{colSpan:6,className:"px-6 py-12 text-center text-white/30",children:"No users found matching your criteria."})})]})]})})}),(0,W.jsxs)("p",{className:"mt-4 text-xs text-white/20 text-right",children:[he.length," of ",a.length," users"]})]}),"beta"===B&&(0,W.jsx)(tt,{stats:G,signups:H,loading:J,sourceFilter:Q,onSourceFilterChange:Y,onExport:async()=>{try{const e="".concat("https://veluro.ai","/api/admin/beta-signups/export").concat("all"!==Q?"?source=".concat(encodeURIComponent(Q)):""),t=await fetch(e,{headers:{Authorization:"Bearer ".concat(ne)}});if(!t.ok)throw new Error("Export failed");const a=await t.blob(),s=document.createElement("a");s.href=URL.createObjectURL(a),s.download="veluro-beta-signups-".concat((new Date).toISOString().slice(0,10),".csv"),s.click(),URL.revokeObjectURL(s.href),i.toast.success("CSV downloaded")}catch(e){i.toast.error("Failed to export CSV")}},formatDate:be}),"hotleads"===B&&(0,W.jsx)(at,{data:te,loading:se,onExport:async()=>{try{const e=await fetch("".concat("https://veluro.ai","/api/admin/hot-leads/export"),{headers:{Authorization:"Bearer ".concat(ne)}});if(!e.ok)throw new Error("Export failed");const t=await e.blob(),a=document.createElement("a");a.href=URL.createObjectURL(t),a.download="veluro-hot-leads-".concat((new Date).toISOString().slice(0,10),".csv"),a.click(),URL.revokeObjectURL(a.href),i.toast.success("CSV downloaded")}catch(e){i.toast.error("Failed to export CSV")}},formatDate:be}),"reportleads"===B&&(0,W.jsxs)("div",{"data-testid":"admin-reportleads-panel",className:"space-y-4",children:[(0,W.jsxs)("div",{children:[(0,W.jsx)("h3",{className:"text-sm font-semibold text-white",children:"Report Leads Inbox"}),(0,W.jsx)("p",{className:"text-xs text-white/40 mt-0.5",children:"Everyone who unlocked the free demand report on veluro.ai \u2014 reply from your mail app with an AI-drafted note, track the conversation, add the good ones to Leads."})]}),(0,W.jsx)(S.Q,{})]})]})]})}function Je(e){let{icon:t,label:a,value:s,color:r,bg:l,border:i}=e;return(0,W.jsxs)("div",{className:"".concat(l," border ").concat(i," rounded-xl p-4"),children:[(0,W.jsxs)("div",{className:"flex items-center gap-2 mb-2",children:[(0,W.jsx)(t,{className:"h-4 w-4 ".concat(r)}),(0,W.jsx)("span",{className:"text-xs text-white/40 font-medium",children:a})]}),(0,W.jsx)("p",{className:"text-2xl font-bold ".concat(r),children:s})]})}const Ze={"pricing-pilot":{dot:"bg-blue-400",bar:"bg-blue-500/70",label:"text-blue-300"},"pricing-operator":{dot:"bg-violet-400",bar:"bg-violet-500/80",label:"text-violet-300"},"pricing-command":{dot:"bg-fuchsia-400",bar:"bg-fuchsia-500/80",label:"text-fuchsia-300"},"pricing-nav":{dot:"bg-cyan-400",bar:"bg-cyan-500/70",label:"text-cyan-300"},"pricing-final":{dot:"bg-emerald-400",bar:"bg-emerald-500/70",label:"text-emerald-300"},pricing:{dot:"bg-indigo-400",bar:"bg-indigo-500/70",label:"text-indigo-300"}
1,landing:{dot:"bg-amber-400",bar:"bg-amber-500/70",label:"text-amber-300"},"landing-hero":{dot:"bg-amber-400",bar:"bg-amber-500/70",label:"text-amber-300"},unknown:{dot:"bg-zinc-400",bar:"bg-zinc-500/60",label:"text-zinc-300"}},et=e=>Ze[e]||{dot:"bg-white/40",bar:"bg-white/30",label:"text-white/70"};function tt(e){var t,a,s,r,l,i,n,d;let{stats:o,signups:c,loading:m,sourceFilter:h,onSourceFilterChange:p,onExport:u,formatDate:b}=e;if(m&&!o)return(0,W.jsx)("div",{className:"flex items-center justify-center py-20",children:(0,W.jsx)("div",{className:"h-8 w-8 border-2 border-violet-500 border-t-transparent rounded-full animate-spin"})});const w=(null===o||void 0===o||null===(t=o.by_source)||void 0===t?void 0:t.reduce((e,t)=>e+t.count,0))||1,g=(null===o||void 0===o||null===(a=o.by_source)||void 0===a||null===(s=a[0])||void 0===s?void 0:s.source)||"\u2014";return(0,W.jsxs)("div",{"data-testid":"admin-beta-panel",className:"space-y-6",children:[(0,W.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[(0,W.jsx)(Je,{icon:x.A,label:"Total Signups",value:null!==(r=null===o||void 0===o?void 0:o.total)&&void 0!==r?r:0,color:"text-violet-300",bg:"bg-violet-500/10",border:"border-violet-500/20"}),(0,W.jsx)(Je,{icon:v.A,label:"Last 24h",value:null!==(l=null===o||void 0===o?void 0:o.last_24h)&&void 0!==l?l:0,color:"text-cyan-300",bg:"bg-cyan-500/10",border:"border-cyan-500/20"}),(0,W.jsx)(Je,{icon:N.A,label:"Last 7 days",value:null!==(i=null===o||void 0===o?void 0:o.last_7d)&&void 0!==i?i:0,color:"text-emerald-300",bg:"bg-emerald-500/10",border:"border-emerald-500/20"}),(0,W.jsx)(Je,{icon:f.A,label:"Top Source",value:g,color:"text-fuchsia-300",bg:"bg-fuchsia-500/10",border:"border-fuchsia-500/20"})]}),(0,W.jsxs)("div",{"data-testid":"beta-source-breakdown",className:"bg-white/[0.02] border border-white/[0.06] rounded-2xl p-6",children:[(0,W.jsx)("div",{className:"flex items-center justify-between mb-5",children:(0,W.jsxs)("div",{children:[(0,W.jsx)("h3",{className:"text-sm font-semibold text-white",children:"Signups by Source"}),(0,W.jsx)("p",{className:"text-xs text-white/40 mt-0.5",children:"Where your beta leads are coming from"})]})}),null!==o&&void 0!==o&&null!==(n=o.by_source)&&void 0!==n&&n.length?(0,W.jsx)("div",{className:"space-y-3",children:o.by_source.map(e=>{const t=Math.round(e.count/w*100),a=et(e.source);return(0,W.jsxs)("button",{"data-testid":"beta-source-row-".concat(e.source),onClick:()=>p(h===e.source?"all":e.source),className:"w-full text-left group rounded-lg p-2 -mx-2 transition-colors ".concat(h===e.source?"bg-white/[0.04]":"hover:bg-white/[0.02]"),children:[(0,W.jsxs)("div",{className:"flex items-center justify-between mb-1.5",children:[(0,W.jsxs)("div",{className:"flex items-center gap-2",children:[(0,W.jsx)("span",{className:"h-2 w-2 rounded-full ".concat(a.dot)}),(0,W.jsx)("span",{className:"text-sm font-medium ".concat(a.label),children:e.source}),h===e.source&&(0,W.jsx)("span",{className:"text-[10px] uppercase tracking-wider text-white/40 ml-1",children:"filtered"})]}),(0,W.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,W.jsx)("span",{className:"text-sm font-bold text-white",children:e.count}),(0,W.jsxs)("span",{className:"text-[11px] text-white/35",children:[t,"%"]})]})]}),(0,W.jsx)("div",{className:"h-1.5 w-full rounded-full bg-white/[0.04] overflow-hidden",children:(0,W.jsx)("div",{className:"h-full ".concat(a.bar," rounded-full transition-all duration-700"),style:{width:"".concat(t,"%")}})})]},e.source)})}):(0,W.jsx)("p",{className:"text-center py-8 text-white/30 text-sm",children:"No signups yet."})]}),(null===o||void 0===o||null===(d=o.top_referrals)||void 0===d?void 0:d.length)>0&&(0,W.jsxs)("div",{"data-testid":"beta-top-referrals",className:"bg-white/[0.02] border border-white/[0.06] rounded-2xl p-6",children:[(0,W.jsx)("h3",{className:"text-sm font-semibold text-white mb-1",children:"Top Referral Sources"}),(0,W.jsx)("p",{className:"text-xs text-white/40 mb-4",children:"Where signups heard about Veluro"}),(0,W.jsx)("div",{className:"flex flex-wrap gap-2",children:o.top_referrals.map(e=>(0,W.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-white/[0.04] border border-white/[0.08] text-xs text-white/75",children:[e.referral,(0,W.jsxs)("span",{className:"text-white/40 font-semibold",children:["\xb7 ",e.count]})]},e.referral))})]}),(0,W.jsxs)("div",{className:"flex flex-col sm:flex-row gap-3 items-stretch sm:items-center justify-between",children:[(0,W.jsxs)("select",{"data-testid":"beta-source-filter",value:h,onChange:e=>p(e.target.value),className:"bg-white/[0.03] border border-white/10 rounded-xl px-4 py-2.5 text-sm text-white focus:outline-none focus:ring-2 focus:ring-violet-500/30 appearance-none cursor-pointer min-w-[200px]",children:[(0,W.jsx)("option",{value:"all",className:"bg-zinc-900",children:"All sources"}),((null===o||void 0===o?void 0:o.by_source)||[]).map(e=>(0,W.jsxs)("option",{value:e.source,className:"bg-zinc-900",children:[e.source," (",e.count,")"]},e.source))]}),(0,W.jsxs)("button",{"data-testid":"beta-export-csv",onClick:u,className:"inline-flex items-center justify-center gap-2 px-4 py-2.5 rounded-xl bg-gradient-to-r from-violet-600 to-fuchsia-600 hover:opacity-90 text-white text-sm font-semibold transition-all hover:scale-[1.02]",children:[(0,W.jsx)(k.A,{className:"h-4 w-4"})," Export CSV"]})]}),(0,W.jsx)("div",{"data-testid":"beta-signups-table",className:"bg-white/[0.02] border border-white/[0.06] rounded-2xl overflow-hidden",children:(0,W.jsx)("div",{className:"overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"border-b border-white/[0.06] text-white/40 text-xs uppercase tracking-wider",children:[(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Position"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Email"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Name"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Company"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Source"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Date"})]})}),(0,W.jsxs)("tbody",{children:[c.map(e=>{const t=et(e.source||"unknown");return(0,W.jsxs)("tr",{"data-testid":"beta-signup-row-".concat(e.signup_id),className:"border-b border-white/[0.04] hover:bg-white/[0.02] transition-colors",children:[(0,W.jsxs)("td",{className:"px-6 py-3.5 text-white/45 text-xs font-mono",children:["#",e.position||"\u2014"]}),(0,W.jsx)("td",{className:"px-6 py-3.5",children:(0,W.jsx)("a",{href:"mailto:".concat(e.email),className:"text-white hover:text-violet-300 transition-colors",children:e.email})}),(0,W.jsx)("td",{className:"px-6 py-3.5 text-white/70",children:e.name||"\u2014"}),(0,W.jsx)("td",{className:"px-6 py-3.5 text-white/70",children:e.company||"\u2014"}),(0,W.jsx)("td",{className:"px-6 py-3.5",children:(0,W.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-md bg-white/[0.04] border border-white/[0.06] text-[11px] font-medium ".concat(t.label),children:[(0,W.jsx)("span",{className:"h-1.5 w-1.5 rounded-full ".concat(t.dot)}),e.source||"unknown"]})}),(0,W.jsx)("td",{className:"px-6 py-3.5 text-white/45 text-xs",children:b(e.created_at)})]},e.signup_id)}),0===c.length&&!m&&(0,W.jsx)("tr",{children:(0,W.jsx)("td",{colSpan:6,className:"px-6 py-12 text-center text-white/30",children:"No signups yet."})})]})]})})}),(0,W.jsxs)("p",{className:"mt-2 text-xs text-white/20 text-right",children:[c.length," signups shown"]})]})}function at(e){var t,a,s;let{data:r,loading:l,onExport:i,formatDate:n}=e;if(l&&!r)return(0,W.jsx)("div",{className:"flex items-center justify-center py-20",children:(0,W.jsx)("div",{className:"h-8 w-8 border-2 border-orange-500 border-t-transparent roun
1ded-full animate-spin"})});const d=(null===r||void 0===r?void 0:r.leads)||[];return(0,W.jsxs)("div",{"data-testid":"admin-hotleads-panel",className:"space-y-6",children:[(0,W.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[(0,W.jsx)(Je,{icon:m.A,label:"Websites Analyzed",value:null!==(t=null===r||void 0===r?void 0:r.total)&&void 0!==t?t:0,color:"text-orange-300",bg:"bg-orange-500/10",border:"border-orange-500/20"}),(0,W.jsx)(Je,{icon:f.A,label:"With Email",value:null!==(a=null===r||void 0===r?void 0:r.with_email)&&void 0!==a?a:0,color:"text-emerald-300",bg:"bg-emerald-500/10",border:"border-emerald-500/20"}),(0,W.jsx)(Je,{icon:v.A,label:"Last 7 days",value:null!==(s=null===r||void 0===r?void 0:r.last_7d)&&void 0!==s?s:0,color:"text-cyan-300",bg:"bg-cyan-500/10",border:"border-cyan-500/20"}),(0,W.jsx)(Je,{icon:w.A,label:"Avg Chat Turns",value:d.length?Math.round(d.reduce((e,t)=>e+(t.user_turns||0),0)/d.length):0,color:"text-violet-300",bg:"bg-violet-500/10",border:"border-violet-500/20"})]}),(0,W.jsxs)("div",{className:"flex items-center justify-between",children:[(0,W.jsxs)("div",{children:[(0,W.jsx)("h3",{className:"text-sm font-semibold text-white",children:"Prospects who ran a free marketing plan"}),(0,W.jsx)("p",{className:"text-xs text-white/40 mt-0.5",children:'Each row is a website analyzed via the public "Talk with Veluro" chat \u2014 email shows when they saved a beta spot mid-chat.'})]}),(0,W.jsxs)("button",{"data-testid":"hotleads-export-csv",onClick:i,className:"inline-flex items-center justify-center gap-2 px-4 py-2.5 rounded-xl bg-gradient-to-r from-orange-600 to-fuchsia-600 hover:opacity-90 text-white text-sm font-semibold transition-all hover:scale-[1.02]",children:[(0,W.jsx)(k.A,{className:"h-4 w-4"})," Export CSV"]})]}),(0,W.jsx)("div",{"data-testid":"hotleads-table",className:"bg-white/[0.02] border border-white/[0.06] rounded-2xl overflow-hidden",children:(0,W.jsx)("div",{className:"overflow-x-auto",children:(0,W.jsxs)("table",{className:"w-full text-sm",children:[(0,W.jsx)("thead",{children:(0,W.jsxs)("tr",{className:"border-b border-white/[0.06] text-white/40 text-xs uppercase tracking-wider",children:[(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Website"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Email"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Chat Turns"}),(0,W.jsx)("th",{className:"text-left px-6 py-4 font-semibold",children:"Analyzed"})]})}),(0,W.jsxs)("tbody",{children:[d.map(e=>(0,W.jsxs)("tr",{"data-testid":"hotlead-row-".concat(e.session_id),className:"border-b border-white/[0.04] hover:bg-white/[0.02] transition-colors",children:[(0,W.jsx)("td",{className:"px-6 py-3.5",children:(0,W.jsxs)("a",{href:e.website,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1.5 text-white hover:text-orange-300 transition-colors",children:[(0,W.jsx)(A.A,{className:"h-3.5 w-3.5 text-white/30"}),e.website.replace(/^https?:\/\//,""),(0,W.jsx)(C.A,{className:"h-3 w-3 text-white/25"})]})}),(0,W.jsx)("td",{className:"px-6 py-3.5",children:e.email?(0,W.jsxs)("a",{href:"mailto:".concat(e.email),className:"inline-flex items-center gap-1.5 text-emerald-300 hover:text-emerald-200 transition-colors",children:[(0,W.jsx)(f.A,{className:"h-3.5 w-3.5"})," ",e.email]}):(0,W.jsx)("span",{className:"text-white/30 text-xs",children:"not captured"})}),(0,W.jsx)("td",{className:"px-6 py-3.5 text-white/60 text-xs font-mono",children:e.user_turns}),(0,W.jsx)("td",{className:"px-6 py-3.5 text-white/45 text-xs",children:n(e.analyzed_at)})]},e.session_id)),0===d.length&&!l&&(0,W.jsx)("tr",{children:(0,W.jsx)("td",{colSpan:4,className:"px-6 py-12 text-center text-white/30",children:'No websites analyzed yet \u2014 leads will appear here as prospects use the "Analyze my site" tool on the home page.'})})]})]})})}),(0,W.jsxs)("p",{className:"mt-2 text-xs text-white/20 text-right",children:[d.length," hot leads shown"]})]})}},28592(e,t,a){a.d(t,{U:()=>n});var s=a(65043),r=a(8393),l=a(27940),i=a(70579);const n=e=>{let{className:t=""}=e;
1const[a,n]=(0,s.useState)(()=>!document.documentElement.classList.contains("dark"));return(0,i.jsx)("button",{"data-testid":"theme-toggle-btn",onClick:()=>{const e=!1===document.documentElement.classList.toggle("dark");localStorage.setItem("veluro_theme",e?"light":"dark"),n(e)},title:a?"Switch to dark mode":"Switch to light mode",className:"h-9 w-9 rounded-lg bg-zinc-900/50 border border-zinc-800 flex items-center justify-center text-zinc-400 hover:text-amber-300 hover:border-amber-500/40 transition-colors ".concat(t),children:a?(0,i.jsx)(r.A,{className:"h-4 w-4"}):(0,i.jsx)(l.A,{className:"h-4 w-4"})})}},51833(e,t,a){a.d(t,{T:()=>n});var s=a(97950),r=a(22024),l=a(37719),i=a(70579);function n(e){let{open:t,title:a,message:n,confirmLabel:d="Delete",danger:o=!0,busy:c=!1,onConfirm:x,onCancel:m}=e;return t?(0,s.createPortal)((0,i.jsxs)("div",{className:"fixed inset-0 z-[95] flex items-center justify-center p-4",children:[(0,i.jsx)("div",{className:"absolute inset-0 bg-black/70 backdrop-blur-sm",onClick:c?void 0:m}),(0,i.jsxs)("div",{"data-testid":"confirm-dialog",className:"relative w-full max-w-md rounded-2xl border border-white/10 bg-zinc-950 p-6 shadow-2xl",children:[(0,i.jsxs)("div",{className:"flex items-start gap-3.5",children:[(0,i.jsx)("div",{className:"h-11 w-11 shrink-0 rounded-full flex items-center justify-center ".concat(o?"bg-red-500/15":"bg-amber-500/15"),children:(0,i.jsx)(l.A,{className:"h-5 w-5 ".concat(o?"text-red-400":"text-amber-400")})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsx)("h3",{className:"text-lg font-bold text-white leading-snug",children:a}),n&&(0,i.jsx)("p",{className:"text-sm text-white/60 mt-1.5 leading-relaxed",children:n})]})]}),(0,i.jsxs)("div",{className:"flex gap-3 mt-6",children:[(0,i.jsx)("button",{"data-testid":"confirm-dialog-cancel",onClick:m,disabled:c,className:"flex-1 py-2.5 rounded-xl border border-white/10 text-white/70 hover:text-white hover:bg-white/[0.04] text-sm font-semibold disabled:opacity-50",children:"Cancel"}),(0,i.jsxs)("button",{"data-testid":"confirm-dialog-confirm",onClick:x,disabled:c,className:"flex-1 py-2.5 rounded-xl text-sm font-bold text-white disabled:opacity-50 flex items-center justify-center gap-2 ".concat(o?"bg-red-600 hover:bg-red-500":"bg-amber-600 hover:bg-amber-500"),children:[c&&(0,i.jsx)(r.A,{className:"h-4 w-4 animate-spin"})," ",d]})]})]})]}),document.body):null}},79442(e,t,a){a.d(t,{Q:()=>_});var s=a(89379),r=a(65043),l=a(22024),i=a(56099),n=a(36210),d=a(72313),o=a(70764),c=a(55731),x=a(98142),m=a(35327),h=a(28006),p=a(50516),u=a(39292),b=a(51884),f=a(7118),w=a(40614),g=a(56328),v=a(4980),j=a(70579);const N={new:{label:"New",cls:"bg-sky-500/15 text-sky-200 border-sky-400/30"},contacted:{label:"Contacted",cls:"bg-amber-500/15 text-amber-200 border-amber-400/30"},replied:{label:"Replied",cls:"bg-violet-500/15 text-violet-200 border-violet-400/30"},won:{label:"Won",cls:"bg-emerald-500/15 text-emerald-200 border-emerald-400/30"},not_a_fit:{label:"Not a fit",cls:"bg-white/[0.05] text-zinc-400 border-white/10"}},y=e=>{let{lead:t,onClose:a,onSent:n}=e;const[o,c]=(0,r.useState)(t.reply_draft||null),[x,h]=(0,r.useState)(!t.reply_draft),p=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];h(!0);try{const a=await v.default.post("/admin/report-leads/".concat(t.lead_id,"/reply-draft"),{force:e});c(a.data)}catch(a){g.toast.error("Could not draft a reply")}finally{h(!1)}},[t.lead_id]);(0,r.useEffect)(()=>{t.reply_draft||p(!1)},[t.reply_draft,p]);const u=o?"mailto:".concat(t.email,"?subject=").concat(encodeURIComponent(o.subject||""),"&body=").concat(encodeURIComponent(o.body||"")):"mailto:".concat(t.email);return(0,j.jsx)("div",{className:"fixed inset-0 z-[90] bg-black/70 backdrop-blur-sm flex items-end sm:items-center justify-center p-3",onClick:a,"data-testid":"report-lead-reply-modal",children:(0,j.jsxs)("div",{className:"w-full max-w-2xl rounded-2xl border border-white/10 bg-zinc-950 p-5 shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)("div",{className:"flex items-start justify-between gap-3 mb-4",children:[(0,j.jsxs)("div",{className:"min-w-0",children:[(0,j.jsx)("p",{className:"text-[11px] uppercase tracking-wider text-zinc-500",children:"Reply to"}),(0,j.jsxs)("p",{className:"text-white font-semibold truncate",children:[t.business||t.email," ",(0,j.jsxs)("span",{className:"text-zinc-400 font-normal",children:["\xb7 ",t.email]})]})]}),(0,j.jsx)("button",{type:"button",onClick:a,className:"h-8 w-8 rounded-lg text-zinc-400 hover:text-white hover:bg-white/[0.06] flex items-center justify-center","aria-label":"Close",children:(0,j.jsx)(w.A,{className:"h-4 w-4"})})]}),x?(0,j.jsxs)("div",{className:"h-40 flex items-center justify-center text-zinc-400 text-sm gap-2",children:[(0,j.jsx)(l.A,{className:"h-4 w-4 animate-spin"})," Drafting a reply from their report\u2026"]}):(0,j.jsxs)("div",{className:"space-y-3",children:[(0,j.jsx)("input",{value:(null===o||void 0===o?void 0:o.subject)||"",onChange:e=>c((0,s.A)((0,s.A)({},o),{},{subject:e.target.value})),"data-testid":"report-lead-reply-subject",className:"w-full h-10 rounded-xl bg-zinc-900/70 border border-white/10 px-3 text-sm text-white focus:outline-none focus:border-sky-400/50"}),(0,j.jsx)("textarea",{value:(null===o||void 0===o?void 0:o.body)||"",onChange:e=>c((0,s.A)((0,s.A)({},o),{},{body:e.target.value})),rows:9,"data-testid":"report-lead-reply-body",className:"w-full rounded-xl bg-zinc-900/70 border border-white/10 px-3 py-2.5 text-sm text-white leading-relaxed focus:outline-none focus:border-sky-400/50"})]}),(0,j.jsxs)("div",{className:"flex flex-wrap items-center gap-2 mt-4",children:[(0,j.jsxs)("a",{href:u,onClick:()=>null===n||void 0===n?void 0:n(),"data-testid":"report-lead-open-mail",className:"h-10 px-4 roun
1ded-xl bg-gradient-to-r from-sky-600 to-violet-600 hover:from-sky-500 hover:to-violet-500 text-white text-sm font-bold inline-flex items-center gap-2 ".concat(x?"pointer-events-none opacity-50":""),children:[(0,j.jsx)(m.A,{className:"h-4 w-4"})," Open in my mail app"]}),(0,j.jsxs)("button",{type:"button",onClick:async()=>{try{await navigator.clipboard.writeText("Subject: ".concat((null===o||void 0===o?void 0:o.subject)||"","\n\n").concat((null===o||void 0===o?void 0:o.body)||"")),g.toast.success("Reply copied")}catch(e){g.toast.error("Copy failed")}},disabled:x,"data-testid":"report-lead-copy-reply",className:"h-10 px-3.5 rounded-xl border border-white/10 text-zinc-200 hover:text-white text-sm font-semibold inline-flex items-center gap-2 disabled:opacity-50",children:[(0,j.jsx)(d.A,{className:"h-4 w-4"})," Copy"]}),(0,j.jsxs)("button",{type:"button",onClick:()=>p(!0),disabled:x,"data-testid":"report-lead-redraft",className:"h-10 px-3.5 rounded-xl border border-white/10 text-zinc-200 hover:text-white text-sm font-semibold inline-flex items-center gap-2 disabled:opacity-50",children:[(0,j.jsx)(i.A,{className:"h-4 w-4"})," Redraft"]}),(0,j.jsx)("span",{className:"text-[11px] text-zinc-500 ml-auto",children:"Opening your mail app marks this lead as Contacted."})]})]})})},_=e=>{var t;let{compact:a=!1}=e;const[i,d]=(0,r.useState)(null),[w,_]=(0,r.useState)(!0),[k,A]=(0,r.useState)("all"),[C,S]=(0,r.useState)("all"),[L,z]=(0,r.useState)(""),[E,P]=(0,r.useState)(null),[R,T]=(0,r.useState)(""),I=(0,r.useCallback)(async()=>{_(!0);try{const e=await v.default.get("/admin/report-leads",{params:{status:k,source:C,q:L}});d(e.data)}catch(e){d(e=>e||{leads:[],counts:{},sources:[]})}finally{_(!1)}},[k,C,L]);(0,r.useEffect)(()=>{const e=setTimeout(I,L?350:0);return()=>clearTimeout(e)},[I,L]);const D=(null===i||void 0===i?void 0:i.leads)||[],U=(null===i||void 0===i?void 0:i.counts)||{},F=async(e,t)=>{T(e.lead_id);try{const a=await v.default.patch("/admin/report-leads/".concat(e.lead_id),t);d(t=>(0,s.A)((0,s.A)({},t),{},{leads:((null===t||void 0===t?void 0:t.leads)||[]).map(t=>t.lead_id===e.lead_id?(0,s.A)((0,s.A)({},t),a.data):t)})),I()}catch(a){g.toast.error("Could not update lead")}finally{T("")}},M=(0,r.useMemo)(()=>Object.values(U).reduce((e,t)=>e+(t||0),0),[U]);return(0,j.jsxs)("div",{"data-testid":"report-leads-inbox",className:"space-y-4",children:[!a&&(0,j.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-3",children:[["Total",M,"text-white"],["New",U.new||0,"text-sky-300"],["Contacted",U.contacted||0,"text-amber-300"],["Replied",U.replied||0,"text-violet-300"],["Won",U.won||0,"text-emerald-300"]].map(e=>{let[t,a,s]=e;return(0,j.jsxs)("div",{className:"rounded-xl border border-white/10 bg-white/[0.03] px-4 py-3",children:[(0,j.jsx)("p",{className:"text-[11px] uppercase tracking-wider text-zinc-500",children:t}),(0,j.jsx)("p",{className:"text-xl font-bold ".concat(s),"data-testid":"report-leads-count-".concat(t.toLowerCase()),children:a})]},t)})}),(0,j.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,j.jsx)("div",{className:"flex items-center gap-1 rounded-xl border border-white/10 bg-white/[0.03] p-1","data-testid":"report-leads-status-filter",children:["all",...Object.keys(N)].map(e=>(0,j.jsxs)("button",{type:"button",onClick:()=>A(e),"data-testid":"report-leads-status-".concat(e),className:"h-8 px-3 rounded-lg text-xs font-semibold transition-colors ".concat(k===e?"bg-white/[0.1] text-white":"text-zinc-400 hover:text-white"),children:["all"===e?"All":N[e].label,"all"!==e&&U[e]?(0,j.jsx)("span",{className:"ml-1 text-[10px] text-zinc-500",children:U[e]}):null]},e))}),(0,j.jsxs)("select",{value:C,onChange:e=>S(e.target.value),"data-testid":"report-leads-source-filter",className:"h-10 rounded-xl bg-zinc-900/70 border border-white/10 px-3 text-sm text-white",children:[(0,j.jsx)("option",{value:"all",children:"All sources"}),((null===i||void 0===i?void 0:i.sources)||[]).map(e=>(0,j.jsx)("option",{value:e,children:e},e))]}),(0,j.jsxs)("div",{className:"relative flex-1 min-w-[200px]",children:[(0,j.jsx)(u.A,{className:"h-4 w-4 text-zinc-500 absolute left-3 top-1/2 -translate-y-1/2"}),(0,j.jsx)("input",{value:L,onChange:e=>z(e.target.value),placeholder:"Search business, email, city\u2026","data-testid":"report-leads-search",className:"w-full h-10 rounded-xl bg-zinc-900/70 border border-white/10 pl-9 pr-3 text-sm text-white placeholder:text-zinc-500 focus:outline-none focus:border-sky-400/50"})]}),(0,j.jsx)("button",{type:"button",onClick:I,"data-testid":"report-leads-refresh",className:"h-10 w-10 rounded-xl border border-white/10 text-zinc-300 hover:text-white flex items-center justify-center","aria-label":"Refresh",children:(0,j.jsx)(p.A,{className:"h-4 w-4 ".concat(w?"animate-spin":"")})})]}),w&&!i?(0,j.jsxs)("div",{className:"h-32 flex items-center justify-center text-zinc-400 text-sm gap-2",children:[(0,j.jsx)(l.A,{className:"h-4 w-4 animate-spin"})," Loading report leads\u2026"]}):0===D.length?(0,j.jsxs)("div",{className:"rounded-2xl border border-dashed border-white/10 p-10 text-center","data-testid":"report-leads-empty",children:[(0,j.jsx)(x.A,{className:"h-8 w-8 text-zinc-600 mx-auto mb-2"}),(0,j.jsxs)("p",{className:"text-sm text-zinc-300 font-semibold",children:["No report leads","all"!==k?" marked ".concat(null===(t=N[k])||void 0===t?void 0:t.label):""," yet"]}),(0,j.jsx)("p",{className:"text-xs text-zinc-500 mt-1",children:"Every visitor who unlocks the free demand report on veluro.ai lands here with their business, location and opportunity score."})]}):(0,j.jsx)("div",{className:"space-y-2",children:D.map(e=>{const t=N[e.status]||N.new;return(0,j.jsxs)("div",{className:"rounded-2xl border border-white/[0.08] bg-white/[0.02] p-4 flex flex-col lg:flex-row lg:items-center gap-3","data-testid":"report-lead-".concat(e.lead_id),children:[(0,j.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,j.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,j.jsx)("p",{className:"text-white font-semibold truncate","data-testid":"report-lead-name-".concat(e.lead_id),children:e.business||e.email}),(0,j.jsx)("span",{className:"px-2 py-0.5 rounded-full border text-[10.5px] font-semibold ".concat(t.cls),"data-testid":"report-lead-status-".concat(e.lead_id),children:t.label}),null!=e.opportunity_score&&(0,j.jsxs)("span",{className:"px-2 py-0.5 rounded-full bg-emerald-500/10 border border-emerald-400/20 text-[10.5px] font-semibold text-emerald-200",title:"Opportunity score from their report",children:["Score ",e.opportunity_score]}
1),e.crm_lead_id&&(0,j.jsxs)("span",{className:"px-2 py-0.5 rounded-full bg-white/[0.05] border border-white/10 text-[10.5px] text-zinc-300 inline-flex items-center gap-1",children:[(0,j.jsx)(n.A,{className:"h-3 w-3"})," In Leads"]})]}),(0,j.jsxs)("p",{className:"text-xs text-zinc-400 mt-1 flex items-center gap-x-3 gap-y-1 flex-wrap",children:[(0,j.jsxs)("a",{href:"mailto:".concat(e.email),className:"hover:text-white inline-flex items-center gap-1",children:[(0,j.jsx)(m.A,{className:"h-3 w-3"})," ",e.email]}),e.location&&(0,j.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,j.jsx)(h.A,{className:"h-3 w-3"})," ",e.location]}),e.website&&(0,j.jsxs)("a",{href:e.website.startsWith("http")?e.website:"https://".concat(e.website),target:"_blank",rel:"noreferrer",className:"hover:text-white inline-flex items-center gap-1",children:[(0,j.jsx)(c.A,{className:"h-3 w-3"})," ",e.website.replace(/^https?:\/\//,"")]}),null!=e.potential_buyers&&(0,j.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,j.jsx)(f.A,{className:"h-3 w-3"})," ",Number(e.potential_buyers).toLocaleString()," buyers"]}),(0,j.jsxs)("span",{className:"text-zinc-500",children:["\xb7 ",e.source," \xb7 ",(a=e.created_at,a?new Date(a).toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}):"\u2014")]})]}),(e.business_desc||e.customer)&&(0,j.jsxs)("p",{className:"text-xs text-zinc-500 mt-1 line-clamp-2",children:[e.business_desc,e.customer?" \u2014 sells to ".concat(e.customer):""]})]}),(0,j.jsxs)("div",{className:"flex items-center gap-2 flex-wrap lg:justify-end",children:[(0,j.jsx)("select",{value:e.status||"new",onChange:t=>F(e,{status:t.target.value}),disabled:R===e.lead_id,"data-testid":"report-lead-status-select-".concat(e.lead_id),className:"h-9 rounded-lg bg-zinc-900/70 border border-white/10 px-2.5 text-xs text-white",children:Object.keys(N).map(e=>(0,j.jsx)("option",{value:e,children:N[e].label},e))}),(0,j.jsxs)("button",{type:"button",onClick:()=>P(e),"data-testid":"report-lead-reply-".concat(e.lead_id),className:"h-9 px-3 rounded-lg bg-gradient-to-r from-sky-600/80 to-violet-600/80 hover:from-sky-500 hover:to-violet-500 text-white text-xs font-bold inline-flex items-center gap-1.5",children:[(0,j.jsx)(m.A,{className:"h-3.5 w-3.5"})," Reply"]}),!e.crm_lead_id&&(0,j.jsxs)("button",{type:"button",onClick:()=>(async e=>{T(e.lead_id);try{const t=await v.default.post("/admin/report-leads/".concat(e.lead_id,"/to-crm"));g.toast.success(t.data.existing?"Already in your Leads":"Added to your Leads CRM"),I()}catch(t){g.toast.error("Could not add to Leads")}finally{T("")}})(e),disabled:R===e.lead_id,"data-testid":"report-lead-to-crm-".concat(e.lead_id),className:"h-9 px-3 rounded-lg border border-white/10 text-zinc-200 hover:text-white text-xs font-semibold inline-flex items-center gap-1.5 disabled:opacity-50",children:[(0,j.jsx)(b.A,{className:"h-3.5 w-3.5"})," Add to Leads"]}),e.website&&(0,j.jsx)("a",{href:e.website.startsWith("http")?e.website:"https://".concat(e.website),target:"_blank",rel:"noreferrer",className:"h-9 w-9 rounded-lg border border-white/10 text-zinc-300 hover:text-white flex items-center justify-center","aria-label":"Open website",children:(0,j.jsx)(o.A,{className:"h-3.5 w-3.5"})})]})]},e.lead_id);var a})}),E&&(0,j.jsx)(y,{lead:E,onClose:()=>P(null),onSent:()=>{"new"===(E.status||"new")&&F(E,{status:"contacted"})}})]})}}}]); 2//# sourceMappingURL=2436.cf70653e.chunk.js.map
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.