1import{u as Le}from"./index-BUMrgcYM.js";import{u as ye}from"./index-BXKDi5BI.js";import{_ as W}from"./Title.vue_vue_type_script_setup_true_lang-CKC_SfhI.js";import{C as q}from"./Card-7Z6zyd7C.js";import{_ as i}from"./Label.vue_vue_type_script_setup_true_lang-DPhggLKj.js";import{S as Te}from"./Switch-CuxZuYQ6.js";import{_ as Se}from"./TextInput.vue_vue_type_script_setup_true_lang-CqOOGp57.js";import{S as ne}from"./Selector-B_zYM8qq.js";import{P as we,_ as O}from"./Button.vue_vue_type_script_setup_true_lang-Ckyg3Q5i.js";import{ar as k,az as g,aq as Ae,aS as _e,aT as ke,d as pe,r as H,o as u,c as A,i as b,a6 as K,a7 as J,n as v,a as t,w as e,u as s,h as r,t as p,b as w,g as C,j as Ce,as as Ee,I as R,D as fe,F as oe,aU as de,e as L,k as I,ad as he,p as ze}from"./index-Ds0GePR4.js";import{g as be}from"./API-DcTJhK_-.js";import{_ as Re}from"./Modal.vue_vue_type_script_setup_true_lang-DqtGYFMi.js";import"./index-C-Yl_KMw.js";import"./inputtext.esm-DvQ1XMsI.js";import"./dropdown.esm-C7rPhhkx.js";const Ie=`query GetCustomersOverview { 2 getCustomersOverview { 3 owner 4 email 5 tier 6 billingPeriod 7 subscribersCount 8 includedSubscribers 9 extraSubscribers 10 subscribersLimit 11 isActive 12 isTrial 13 createdAt 14 } 15} 16`,E=m=>{const _=m.extraSubscribers??0;return{email:null,isActive:!0,isTrial:!1,createdAt:null,extraSubscribers:_,subscribersLimit:m.includedSubscribers+_,...m}};E({owner:"mock-0001",email:"[email protected]",tier:g.PRO,billingPeriod:k.YEAR,subscribersCount:25e3,includedSubscribers:25e3,createdAt:"2025-02-11T09:24:00.000Z"}),E({owner:"mock-0002",email:"[email protected]",tier:g.GROWTH,billingPeriod:k.MONTH,subscribersCount:5210,includedSubscribers:5e3,createdAt:"2025-04-03T14:02:00.000Z"}),E({owner:"mock-0003",email:"[email protected]",tier:g.STARTER,billingPeriod:k.MONTH,subscribersCount:940,includedSubscribers:1e3,createdAt:"2025-05-19T07:48:00.000Z"}),E({owner:"mock-0004",email:"[email protected]",tier:g.GROWTH,billingPeriod:k.YEAR,subscribersCount:3870,includedSubscribers:5e3,extraSubscribers:2e3,createdAt:"2024-11-27T18:15:00.000Z"}),E({owner:"mock-0005",email:"[email protected]",tier:g.BETA,billingPeriod:k.LIFETIME,subscribersCount:1284,includedSubscribers:0,createdAt:"2024-08-01T10:00:00.000Z"}),E({owner:"mock-0006",email:"[email protected]",tier:g.STARTER,billingPeriod:k.MONTH,subscribersCount:812,includedSubscribers:1e3,isTrial:!0,createdAt:"2026-05-22T12:30:00.000Z"}),E({owner:"mock-0007",email:"[email protected]",tier:g.PRO,billingPeriod:k.MONTH,subscribersCount:19920,includedSubscribers:25e3,createdAt:"2025-01-09T16:41:00.000Z"}),E({owner:"mock-0008",email:"[email protected]",tier:g.LTD,billingPeriod:k.LIFETIME,subscribersCount:1015,includedSubscribers:1e3,createdAt:"2024-06-14T08:05:00.000Z"}),E({owner:"mock-0009",email:"[email protected]",tier:g.GROWTH,billingPeriod:k.MONTH,subscribersCount:4490,includedSubscribers:5e3,createdAt:"2025-03-30T21:12:00.000Z"}),E({owner:"mock-0010",email:"[email protected]",tier:g.STARTER,billingPeriod:k.YEAR,subscribersCount:120,includedSubscribers:1e3,createdAt:"2025-06-28T11:55:00.000Z"}),E({owner:"mock-0011",email:"[email protected]",tier:g.PRO,billingPeriod:k.YEAR,subscribersCount:26110,includedSubscribers:25e3,extraSubscribers:5e3,createdAt:"2024-12-02T09:09:00.000Z"}),E({owner:"mock-0012",email:"[email protected]",tier:g.CUSTOM,billingPeriod:k.YEAR,subscribersCount:41200,includedSubscribers:5e4,createdAt:"2025-02-26T13:37:00.000Z"}),E({owner:"mock-0013",email:"[email protected]",tier:g.GROWTH,billingPeriod:k.MONTH,subscribersCount:0,includedSubscribers:5e3,isActive:!1,createdAt:"2025-04-18T06:20:00.000Z"}),E({owner:"mock-0014",email:"[email protected]",tier:g.PREMIUM_LTD,billingPeriod:k.LIFETIME,subscribersCount:8650,includedSubscribers:1e4,createdAt:"2024-09-23T15:48:00.000Z"});const Pe=be();async function Oe(){try{return(await Pe.graphql({query:Ie})).data?.getCustomersOverview??[]}catch(m){return console.log("Failed to load customers overview",m),new Error(m?.errors?.[0]?.message||m.message)}}const Ne={[k.MONTH]:"Monthly",[k.YEAR]:"Yearly",[k.LIFETIME]:"Lifetime"};function $e(m){const _=Ae.find(z=>z.id===m.tier),h=!m.subscribersLimit||m.subscribersLimit<=0;return{...m,percent:ke(m.subscribersCount,m.subscribersLimit),level:_e(m.subscribersCount,m.subscribersLimit),unlimited:h,planLabel:Ne[m.billingPeriod]??m.billingPeriod,tierLabel:_?.label??m.tier}}const De={pill:"bg-slate-100 text-slate-600",dot:"bg-slate-400"},Ve={[g.STARTER]:{pill:"bg-blue-100 text-blue-700",dot:"bg-blue-500"},[g.GROWTH]:{pill:"bg-emerald-100 text-emerald-700",dot:"bg-emerald-500"},[g.PRO]:{pill:"bg-pink-100 text-pink-700",dot:"bg-pink-500"},[g.BETA]:{pill:"bg-violet-100 text-violet-700",dot:"bg-violet-500"}
16,[g.LTD]:{pill:"bg-amber-100 text-amber-700",dot:"bg-amber-500"},[g.PREMIUM_LTD]:{pill:"bg-indigo-100 text-indigo-700",dot:"bg-indigo-500"},[g.CUSTOM]:{pill:"bg-slate-200 text-slate-700",dot:"bg-slate-500"}},Me=[g.STARTER,g.GROWTH,g.PRO,g.BETA,g.LTD,g.PREMIUM_LTD,g.CUSTOM];function ee(m){return Ve[m]??De}const Ue={class:"customers-table w-full overflow-x-auto"},Fe={class:"w-full border-collapse text-left"},Ge={class:"border-b border-gray-200"},Be=["onClick"],He=["onClick"],Ye={class:"px-3 py-3"},je={class:"whitespace-nowrap px-3 py-3"},Ze={class:"whitespace-nowrap px-3 py-3"},qe={class:"whitespace-nowrap px-3 py-3 text-right"},We={class:"text-text-secondary"},Ke={class:"whitespace-nowrap px-3 py-3"},Je={key:0,class:"h-1 w-full overflow-hidden rounded-full bg-gray-100"},Xe={class:"whitespace-nowrap px-3 py-3"},Qe={key:0,class:"inline-block rounded-full bg-red-50 px-2.5 py-1 text-xs font-semibold text-red-600"},et={key:1,class:"inline-block rounded-full bg-blue-50 px-2.5 py-1 text-xs font-semibold text-blue-700"},tt={key:2,class:"inline-block rounded-full bg-emerald-50 px-2.5 py-1 text-xs font-semibold text-emerald-700"},lt={class:"px-3 py-3 text-right"},st=["aria-label","onClick"],at={key:0},rt={colspan:"7",class:"px-3 py-8 text-center"},it=pe({__name:"CustomersTable",props:{rows:{},sortKey:{},sortDir:{}},emits:["sort","select"],setup(m){const _=[{key:"email",label:"Customer"},{key:"tierLabel",label:"Tier"},{key:"planLabel",label:"Plan"},{key:"subscribersCount",label:"Leads this cycle",align:"right"},{key:"percent",label:"Used",align:"right"},{key:"isActive",label:"Status"}],h=z=>{switch(z.level){case"exceeded":case"critical":return"bg-red-500";case"warning":return"bg-orange-400";default:return"bg-brand-quaternary"}};return(z,N)=>{const n=H("Flex");return u(),A("div",Ue,[b("table",Fe,[b("thead",null,[b("tr",Ge,[(u(),A(K,null,J(_,c=>b("th",{key:c.key,class:v(["cursor-pointer select-none whitespace-nowrap px-3 py-3",c.align==="right"?"text-right":"text-left"]),onClick:y=>z.$emit("sort",c.key)},[t(n,{gap:"1",middle:"",right:c.align==="right"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase text-text-secondary"},{default:e(()=>[r(p(c.label),1)]),_:2},1024),m.sortKey===c.key?(u(),w(s(i),{key:0,size:"xs",class:"text-text-secondary"},{default:e(()=>[r(p(m.sortDir==="asc"?"â²":"â¼"),1)]),_:1})):C("",!0)]),_:2},1032,["right"])],10,Be)),64)),N[0]||(N[0]=b("th",{class:"w-px px-3 py-3"},[b("span",{class:"sr-only"},"Actions")],-1))])]),b("tbody",null,[(u(!0),A(K,null,J(m.rows,c=>(u(),A("tr",{key:c.owner,class:"cursor-pointer border-b border-gray-100 transition-colors hover:bg-gray-50",onClick:y=>z.$emit("select",c.owner)},[b("td",Ye,[t(n,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[r(p(c.email||"â"),1)]),_:2},1024),t(s(i),{size:"xs",class:"text-text-secondary"},{default:e(()=>[r(p(c.owner),1)]),_:2},1024)]),_:2},1024)]),b("td",je,[b("span",{class:v(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-semibold",s(ee)(c.tier).pill])},[b("span",{class:v(["inline-block h-1.5 w-1.5 rounded-full",s(ee)(c.tier).dot])},null,2),r(" "+p(c.tierLabel),1)],2)]),b("td",Ze,[t(s(i),{size:"sm"},{default:e(()=>[r(p(c.planLabel),1)]),_:2},1024)]),b("td",qe,[t(s(i),{size:"sm",medium:""},{default:e(()=>[r(p(c.subscribersCount.toLocaleString())+" ",1),b("span",We," / "+p(c.unlimited?"â":c.subscribersLimit.toLocaleString()),1)]),_:2},1024)]),b("td",Ke,[t(n,{vertical:"",gap:"1",right:"",class:"min-w-[88px]"},{default:e(()=>[t(n,{gap:"2",middle:"",right:""},{default:e(()=>[c.unlimited?C("",!0):(u(),A("span",{key:0,class:v(["inline-block h-2 w-2 rounded-full",h(c)])},null,2)),t(s(i),{size:"sm",medium:""},{default:e(()=>[r(p(c.unlimited?"â":`${c.percent}%`),1)]),_:2},1024)]),_:2},1024),c.unlimited?C("",!0):(u(),A("div",Je,[b("div",{class:v(["h-full rounded-full",h(c)]),style:Ce({width:`${c.percent}%`})},null,6)]))]),_:2},1024)]),b("td",Xe,[c.isActive?c.isTrial?(u(),A("span",et," Trial ")):(u(),A("span",tt," Active ")):(u(),A("span",Qe," Inactive "))]),b("td",lt,[b("button",{type:"button",class:"inline-flex h-8 w-8 items-center justify-center rounded-full text-text-secondary transition-colors hover:bg-gray-100 hover:text-brand-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-secondary/40","aria-label":`View details for ${c.email||c.owner}`,onClick:Ee(y=>z.$emit("select",c.owner),["stop"])},[t(s(R),{name:"eye-solid",width:"16px",height:"16px"})],8,st)])],8,He))),128)),m.rows.length?C("",!0):(u(),A("tr",at,[b("td",rt,[t(s(i),{size:"sm",class:"text-text-secondary"},{default:e(()=>[...N[1]||(N[1]=[r(" No customers match the current filters. ",-1)])]),_:1})])]))])])])}}}),nt=`query GetCustomerDetail($owner: String!) { 17 getCustomerDetail(owner: $owner) { 18 owner 19 email 20 name 21 accountEnabled 22 userCreatedAt 23 stripeCustomerId 24 tier 25 billingPeriod 26 price 27 subscribersCount 28 includedSubscribers 29 extraSubscribers 30 subscribersLimit 31 includedCampaigns 32 extraCampaigns 33 isActive 34 isTrial 35 trialEndDate 36 cancelsAt 37 createdAt 38 campaignsCount 39 activeCampaignsCount 40 campaigns { 41 id 42 title 43 type 44 archived 45 createdAt 46 } 47 integrations { 48 id 49 type 50 } 51 recentActions { 52 id 53 adminEmail 54 action 55 details 56 createdAt 57 } 58 } 59} 60`,ot=`mutation PerformAdminAction( 61 $action: AdminActionType! 62 $owner: String! 63 $amount: Int 64 $until: AWSDateTime 65) { 66 performAdminAction( 67 action: $action 68 owner: $owner 69 amount: $amount
70 until: $until 71 ) { 72 ok 73 message 74 owner 75 } 76} 77`,dt=be();async function ut(m){try{return(await dt.graphql({query:nt,variables:{owner:m}})).data?.getCustomerDetail??new Error("Customer not found.")}catch(_){return console.log("Failed to load customer detail",_),new Error(_?.errors?.[0]?.message||_.message)}}const ct=be();async function mt(m){try{return(await ct.graphql({query:ot,variables:{action:m.action,owner:m.owner,amount:m.amount??null,until:m.until??null}})).data?.performAdminAction??new Error("Action failed.")}catch(_){return console.log("Admin action failed",_),new Error(_?.errors?.[0]?.message||_.message)}}const pt={key:0,class:"inline-flex items-center rounded-full bg-amber-50 px-2.5 py-1 text-xs font-semibold text-amber-700"},bt={class:"rounded-2xl bg-gray-50 p-5"},ft={key:0,class:"text-text-tertiary"},gt={key:0,class:"h-2 w-full overflow-hidden rounded-full bg-gray-200"},vt=["href"],xt={key:0,class:"max-h-64 divide-y divide-gray-100 overflow-y-auto rounded-2xl border border-gray-200"},yt={class:"divide-y divide-gray-100 overflow-hidden rounded-2xl border border-gray-200"},wt={class:"rounded-2xl border border-red-200 bg-red-50/60 px-4 py-3"},At={class:"divide-y divide-gray-100 overflow-hidden rounded-2xl border border-gray-200"},_t="inline-flex h-9 items-center justify-center gap-1.5 rounded-full border border-gray-200 bg-white px-4 text-sm font-medium text-text-primary transition-colors hover:border-gray-300 hover:bg-gray-50",ue="inline-flex h-9 items-center justify-center gap-1.5 rounded-full border border-emerald-200 bg-emerald-50 px-4 text-sm font-medium text-emerald-700 transition-colors hover:bg-emerald-100",ge="inline-flex h-9 items-center justify-center gap-1.5 rounded-full border border-amber-200 bg-amber-50 px-4 text-sm font-medium text-amber-700 transition-colors hover:bg-amber-100",ve="inline-flex h-9 items-center justify-center gap-1.5 rounded-full border border-sky-200 bg-sky-50 px-4 text-sm font-medium text-sky-700 transition-colors hover:bg-sky-100",kt="inline-flex h-9 items-center justify-center gap-1.5 rounded-full bg-brand-secondary px-5 text-sm font-medium text-white transition-colors hover:bg-brand-secondary-dark",Ct="inline-flex h-9 items-center justify-center gap-1.5 rounded-full border border-red-200 bg-white px-4 text-sm font-medium text-red-600 transition-colors hover:bg-red-50",xe="inline-flex h-9 items-center justify-center gap-1.5 rounded-full bg-red-500 px-5 text-sm font-medium text-white transition-colors hover:bg-red-600",ce="h-9 rounded-full border border-gray-200 bg-white px-4 text-sm text-text-primary outline-none transition-colors focus:border-brand-secondary",Lt=pe({__name:"CustomerDetailDrawer",props:{modelValue:{type:Boolean},owner:{}},emits:["update:modelValue","changed"],setup(m,{emit:_}){const h=m,z=_,N=ye(),n=L(null),c=L(!1),y=L(!1),D=L(1e3),$=L(1),P=L(""),T=L(null),M=L(null),U={[k.MONTH]:"Monthly",[k.YEAR]:"Yearly",[k.LIFETIME]:"Lifetime"},te=I(()=>Ae.find(l=>l.id===n.value?.tier)?.label??n.value?.tier??"â"),le=I(()=>n.value?.billingPeriod?U[n.value.billingPeriod]??n.value.billingPeriod:"â"),X=I(()=>ke(n.value?.subscribersCount||0,n.value?.subscribersLimit||0)),se=I(()=>_e(n.value?.subscribersCount||0,n.value?.subscribersLimit||0)),ae=I(()=>{switch(se.value){case"exceeded":case"critical":return"bg-red-500";case"warning":return"bg-orange-400";default:return"bg-brand-quaternary"}}),G=I(()=>!n.value?.subscribersLimit),B=I(()=>n.value?.isActive===!1?{label:"Inactive",class:"bg-red-50 text-red-600"}:n.value?.isTrial?{label:"Trial",class:"bg-blue-50 text-blue-700"}:{label:"Active",class:"bg-emerald-50 text-emerald-700"}),Y=I(()=>n.value?.stripeCustomerId?`https://dashboard.stripe.com/customers/${n.value.stripeCustomerId}`:null),Q=async a=>{c.value=!0,n.value=null,T.value=null;const l=await ut(a);l instanceof Error?N.error(l.message||"Could not load customer."):n.value=l,c.value=!1};fe(()=>[h.modelValue,h.owner],([a,l])=>{a&&l&&Q(l)},{immediate:!0}),fe(T,async a=>{a&&(await he(),M.value?.scrollIntoView({block:"center"}))});const j=()=>z("update:modelValue",!1),V=async(a,l,o)=>{if(!h.owner)return;y.value=!0;const x=await mt({action:a,owner:h.owner,amount:l??null,until:o??null});if(y.value=!1,T.value=null,x instanceof Error){N.error(x.message||"Action failed.");return}if(N.success(x.message||"Done.",{timeout:6e3}),z("changed"),a==="DELETE_CUSTOMER"&&!x.message?.toLowerCase().startsWith("partial")){j();return}await Q(h.owner)},F=a=>{T.value=a},re=()=>{const a=T.value;a&&V(a.action,a.amount,a.until)},Z=a=>a?new Date(a).toLocaleDateString():"â",f=a=>{if(!a)return"";try{return JSON.parse(a).message||a}catch{return a}};return(a,l)=>{const o=H("Flex"),x=H("Grid");return u(),w(s(Re),{"model-value":m.modelValue,title:"Customer","close-on-overlay-click":"","onUpdate:modelValue":j},{default:e(()=>[c.value?(u(),w(o,{key:0,class:"py-16",center:"",middle:""},{default:e(()=>[t(s(we),{size:100})]),_:1})):n.value?(u(),w(o,{key:1,vertical:"",gap:"5"},{default:e(()=>[t(o,{vertical:"",gap:"2"},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(W),{size:"lg",level:"4","semi-bold":""},{default:e(()=>[r(p(n.value.email||n.value.owner),1)]),_:1}),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[r(p(n.value.owner),1)]),_:1})]),_:1}),t(o,{gap:"2",middle:"",wrap:""},{default:e(()=>[b("span",{class:v(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-semibold",s(ee)(n.value.tier||"").pill])},[b("span",{class:v(["inline-block h-1.5 w-1.5 rounded-full",s(ee)(n.value.tier||"").dot])},null,2),r(" "+p(te.value),1)],2),b("span",{class:v(["inline-flex items-center rounded-full px-2.5 py-1 text-xs font-semibold",B.value.class])},p(B.value.label),3),n.value.accountEnabled===!1?(u(),A("span",pt," Login suspended ")):C("",!0)]),_:1})]),_:1}),b("div",bt,[t(o,{vertical:"",gap:"4"},{default:e(()=>[t(o,{vertical:"",gap:"2"},{default:e(()=>[t(o,{between:"",middle:"",gap:"2",wrap:""},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[13]||(l[13]=[r(" Leads this cycle ",-1)])]),_:1}),t(s(i),{size:"sm","semi-bold":""},{default:e(()=>
77[r(p((n.value.subscribersCount||0).toLocaleString())+" / "+p(G.value?"â":(n.value.subscribersLimit||0).toLocaleString())+" ",1),G.value?C("",!0):(u(),A("span",ft," · "+p(X.value)+"% ",1))]),_:1})]),_:1}),G.value?C("",!0):(u(),A("div",gt,[b("div",{class:v(["h-full rounded-full transition-all duration-500",ae.value]),style:Ce({width:`${Math.max(X.value,2)}%`})},null,6)]))]),_:1}),l[18]||(l[18]=b("div",{class:"h-px w-full bg-gray-200"},null,-1)),t(x,{style:{"grid-template-columns":"repeat(2, minmax(0, 1fr))"},gap:"3"},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"xs",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[14]||(l[14]=[r(" Plan ",-1)])]),_:1}),t(s(i),{size:"sm",medium:""},{default:e(()=>[r(p(le.value),1)]),_:1})]),_:1}),t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"xs",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[15]||(l[15]=[r(" Signed up ",-1)])]),_:1}),t(s(i),{size:"sm",medium:""},{default:e(()=>[r(p(Z(n.value.userCreatedAt||n.value.createdAt)),1)]),_:1})]),_:1}),n.value.trialEndDate?(u(),w(o,{key:0,vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"xs",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[16]||(l[16]=[r(" Trial ends ",-1)])]),_:1}),t(s(i),{size:"sm",medium:""},{default:e(()=>[r(p(Z(n.value.trialEndDate)),1)]),_:1})]),_:1})):C("",!0),n.value.extraSubscribers?(u(),w(o,{key:1,vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"xs",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[17]||(l[17]=[r(" Bonus leads ",-1)])]),_:1}),t(s(i),{size:"sm",medium:""},{default:e(()=>[r(" +"+p((n.value.extraSubscribers||0).toLocaleString()),1)]),_:1})]),_:1})):C("",!0)]),_:1}),Y.value?(u(),A("a",{key:0,href:Y.value,target:"_blank",rel:"noopener",class:"text-xs font-semibold text-stripe hover:underline"}," Open in Stripe â ",8,vt)):C("",!0)]),_:1})]),n.value.campaigns?(u(),w(o,{key:0,vertical:"",gap:"3"},{default:e(()=>[t(o,{between:"",middle:"",gap:"2",wrap:""},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[19]||(l[19]=[r(" Campaigns ",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[r(p(n.value.activeCampaignsCount??0)+" active · "+p(n.value.campaignsCount??0)+" total ",1)]),_:1})]),_:1}),n.value.campaigns.length?(u(),A("div",xt,[(u(!0),A(K,null,J(n.value.campaigns,d=>(u(),w(o,{key:d.id,gap:"3",between:"",middle:"",class:"px-4 py-2.5"},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[r(p(d.title),1)]),_:2},1024),t(s(i),{size:"xs",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[r(p(d.type),1)]),_:2},1024)]),_:2},1024),b("span",{class:v(["inline-flex items-center rounded-full px-2.5 py-1 text-xs font-semibold",d.archived?"bg-gray-100 text-text-tertiary":"bg-emerald-50 text-emerald-700"])},p(d.archived?"Archived":"Active"),3)]),_:2},1024))),128))])):(u(),w(s(i),{key:1,size:"sm",class:"text-text-tertiary"},{default:e(()=>[...l[20]||(l[20]=[r(" No campaigns yet. ",-1)])]),_:1}))]),_:1})):C("",!0),n.value.integrations?(u(),w(o,{key:1,vertical:"",gap:"3"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[21]||(l[21]=[r(" Integrations ",-1)])]),_:1}),n.value.integrations.length?(u(),w(o,{key:0,gap:"2",wrap:"",middle:""},{default:e(()=>[(u(!0),A(K,null,J(n.value.integrations,d=>(u(),A("span",{key:d.id,class:"inline-flex items-center rounded-full border border-gray-200 bg-white px-3 py-1 text-xs font-semibold text-text-primary"},p(d.type),1))),128))]),_:1})):(u(),w(s(i),{key:1,size:"sm",class:"text-text-tertiary"},{default:e(()=>[...l[22]||(l[22]=[r(" No integrations connected. ",-1)])]),_:1}))]),_:1})):C("",!0),t(o,{vertical:"",gap:"3"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[23]||(l[23]=[r(" Actions ",-1)])]),_:1}),b("div",yt,[t(o,{class:"px-4 py-3",between:"",middle:"",gap:"3",wrap:""},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[...l[24]||(l[24]=[r("Grant leads",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[...l[25]||(l[25]=[r(" Add one-off leads to this cycle ",-1)])]),_:1})]),_:1}),t(o,{gap:"2",middle:""},{default:e(()=>[oe(b("input",{"onUpdate:modelValue":l[0]||(l[0]=d=>D.value=d),type:"number",min:"1",class:v([ce,"w-24"])},null,512),[[de,D.value,void 0,{number:!0}]]),t(s(O),{class:v(ue),disabled:y.value,onClick:l[1]||(l[1]=d=>V("GRANT_LEADS",D.value))},{default:e(()=>[t(s(R),{name:"plus",width:"14px",height:"14px"}),l[26]||(l[26]=r(" Grant ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1}),t(o,{class:"px-4 py-3",between:"",middle:"",gap:"3",wrap:""},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[...l[27]||(l[27]=[r("Grant campaigns",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[...l[28]||(l[28]=[r(" Increase the campaign allowance ",-1)])]),_:1})]),_:1}),t(o,{gap:"2",middle:""},{default:e(()=>[oe(b("input",{"onUpdate:modelValue":l[2]||(l[2]=d=>$.value=d),type:"number",min:"1",class:v([ce,"w-16"])},null,512),[[de,$.value,void 0,{number:!0}]]),t(s(O),{class:v(ue),disabled:y.value,onClick:l[3]||(l[3]=d=>V("GRANT_CAMPAIGNS",$.value))},{default:e(()=>[t(s(R),{name:"plus",width:"14px",height:"14px"}),l[29]||(l[29]=r(" Grant ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1}),t(o,{class:"px-4 py-3",between:"",middle:"",gap:"3",wrap:""},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[...l[30]||(l[30]=[r("Reset leads",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[...l[31]||(l[31]=[r(" Set this cycle's counter back to 0 ",-1)])]),_:1})]),_:1}),t(s(O),{class:v(ve),disabled:y.value,onClick:l[4]||(l[4]=d=>F({action:"RESET_LEADS",label:"Reset the leads counter to 0 for this cycle?"}))},{default:e(()=>[t(s(R),{name:"arrows-rotate",width:"14px",height:"14px"}),l[32]||(l[32]=r(" Reset ",-1))]),_:1},8,["disabled"])]),_:1}),t(o,{class:"px-4 py-3",between:"",middle:"",gap:"3",wrap:""},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[...l[33]||(l[33]=[r("Login access",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[r(p(n.value.accountEnabled===!1?"Sign-in is currently blocked":"Customer can sign in"),1)]),_:1})]),_:1}),n.value.accountEnabled!==!1?(u(),w(s(O),{key:0,class:v(ge),disabled:y.value,onClick:l[5]||(l[5]=d=>F({action:"SUSPEND_LOGIN",label:"Suspend login for this account?",destructive:!0}))},{default:e(()=>[t(s(R),{name:"lock",width:"14px",height:"14px"}),l[34]||(l[34]=r(" Suspend login ",-1))]),_:1},8,["disabled"])):(u(),w(s(O),{key:1,class:v(ue),disabled:y.value,onClick:l[6]||(l[6]=d=>V("ENABLE_LOGIN"))},{default:e(()=>[t(s(R),{name:"circle-check",width:"14px",height:"14px"}),l[35]||(l[35]=r(" Enable login ",-1))]),_:1},8,["disabled"]))]),_:1}),t(o,{class:"px-4 py-3",between:"",middle:"",gap:"3",wrap:""},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[...l[36]||(l[36]=[r("Active sessions",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[...l[37]||(l[37]=[r(" Sign this customer out everywhere ",-1)])]),_:1})]),_:1}),t(s(O),{class:v(ge),disabled:y.value,onClick:l[7]||(l[7]=d=>F({action:"FORCE_SIGN_OUT",label:"Sign this customer out of all sessions?"}))},{default:e(()=>[t(s(R),{name:"logout",width:"14px",height:"14px"}),l[38]||(l[38]=r(" Force sign out ",-1))]),_:1},8,["disabled"])]),_:1}),n.value.isTrial?(u(),w(o,{key:0,class:"px-4 py-3",between:"",middle:"",gap:"3",wrap:""},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[...l[39]||(l[39]=[r("Extend trial",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[...l[40]||(l[40]=[r(" Push the trial end date forward ",-1)])]),_:1})]),_:1}),t(o,{gap:"2",middle:""},{default:e(()=>[oe(b("input",{"onUpdate:modelValue":l[8]||(l[8]=d=>P.value=d),type:"date",class:v(ce)},null,512),[[de,P.value]]),t(s(O),{class:v(ve),disabled:y.value||!P.value,onClick:l[9]||(l[9]=d=>V("EXTEND_TRIAL",void 0,P.value))},{default:e(()=>[t(s(R),{name:"calendar",width:"14px",height:"14px"}),l[41]||(l[41]=r(" Extend ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})):C("",!0)]),T.value?(u(),A("div",{key:0,ref_key:"confirmRef",ref:M,class:v(["rounded-2xl border p-4",T.value.destructive?"border-red-200 bg-red-50":"border-gray-200 bg-gray-50"])},[t(o,{gap:"3",between:"",middle:"",wrap:""},{default:e(()=>[t(s(i),{size:"sm",medium:"",class:v(T.value.destructive?"text-red-700":"")},{default:e(()=>[r(p(T.value.label),1)]),_:1},8,["class"]),t(o,{gap:"2",middle:""},{default:e(()=>[t(s(O),{class:v(_t),disabled:y.value,onClick:l[10]||(l[10]=d=>T.value=null)},{default:e(()=>[t(s(R),{name:"xmark",width:"13px",height:"13px"}),l[42]||(l[42]=r(" Cancel ",-1))]),_:1},8,["disabled"]),t(s(O),{class:v(T.value.destructive?xe:kt),loading:y.value,onClick:re},{default:e(()=>[t(s(R),{name:"check",width:"14px",height:"14px"}),l[43]||(l[43]=r(" Confirm ",-1))]),_:1},8,["class","loading"])]),_:1})]),_:1})],2)):C("",!0)]),_:1}),t(o,{vertical:"",gap:"3"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase tracking-wide text-red-500"},{default:e(()=>[...l[44]||(l[44]=[r(" Danger zone ",-1)])]),_:1}),b("div",wt,[t(o,{vertical:"",gap:"3"},{default:e(()=>[t(o,{between:"",middle:"",gap:"3",wrap:""},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:"",class:"text-red-700"},{default:e(()=>[...l[45]||(l[45]=[r(" Cancel subscription ",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-red-600"},{default:e(()=>[...l[46]||(l[46]=[r(" Deactivates the membership immediately. ",-1)])]),_:1})]),_:1}),t(s(O),{class:v(Ct),disabled:y.value,onClick:l[11]||(l[11]=d=>F({action:"CANCEL_SUBSCRIPTION",label:"Cancel this subscription? This deactivates the membership.",destructive:!0}))},{default:e(()=>[t(s(R),{name:"circle-xmark",width:"14px",height:"14px"}),l[47]||(l[47]=r(" Cancel subscription ",-1))]),_:1},8,["disabled"])]),_:1}),l[51]||(l[51]=b("div",{class:"border-t border-red-200"},null,-1)),t(o,{between:"",middle:"",gap:"3",wrap:""},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:"",class:"text-red-700"},{default:e(()=>[...l[48]||(l[48]=[r(" Delete customer ",-1)])]),_:1}),t(s(i),{size:"xs",class:"text-red-600"},{default:e(()=>[...l[49]||(l[49]=[r(" Permanently removes their login and ALL data. Cannot be undone. ",-1)])]),_:1})]),_:1}),t(s(O),{class:v(xe),disabled:y.value,onClick:l[12]||(l[12]=d=>F({action:"DELETE_CUSTOMER",label:"Permanently delete this customer, their login and ALL their data (campaigns, leads, integrations)? This cannot be undone.",destructive:!0}))},{default:e(()=>[t(s(R),{name:"trash",width:"14px",height:"14px"}),l[50]||(l[50]=r(" Delete customer ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})])]),_:1}),n.value.recentActions&&n.value.recentActions.length?(u(),w(o,{key:2,vertical:"",gap:"3"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase tracking-wide text-text-tertiary"},{default:e(()=>[...l[52]||(l[52]=[r(" Recent admin activity ",-1)])]),_:1}),b("div",At,[(u(!0),A(K,null,J(n.value.recentActions,d=>(u(),w(o,{key:d.id,gap:"3",between:"",middle:"",class:"px-4 py-2.5"},{default:e(()=>[t(o,{vertical:"",gap:"0"},{default:e(()=>[t(s(i),{size:"sm",medium:""},{default:e(()=>[r(p(d.action),1)]),_:2},1024),t(s(i),{size:"xs",class:"text-text-tertiary"},{default:e(()=>[r(p(f(d.details)),1)]),_:2},1024)]),_:2},1024),t(s(i),{size:"xs",class:"text-text-tertiary","no-wrap":""},{default:e(()=>[r(p(Z(d.createdAt)),1)]),_:2},1024)]),_:2},1024))),128))])]),_:1})):C("",!0)]),_:1})):(u(),w(o,{key:2,class:"py-16",center:"",middle:""},{default:e(()=>[t(s(i),{size:"sm",class:"text-text-tertiary"},{default:e(()=>[...l[53]||(l[53]=[r("Customer not found.",-1)])]),_:1})]),_:1}))]),_:1},8,["model-value"])}}}),me=75,Ft=pe({__name:"AdminController",setup(m){const _=[{id:"ALL",label:"All plans"},{id:"MONTH",label:"Monthly"},{id:"YEAR",label:"Yearly"},{id:"LIFETIME",label:"Lifetime"}],h=[{id:"ALL",label:"All statuses"},{id:"ACTIVE",label:"Active"},{id:"TRIAL",label:"Trial"},{id:"INACTIVE",label:"Inactive"}],z=Le(),N=ye(),n=L([]),c=L(!1),y=L(""),D=L(!1),$=L("ALL"),P=L("ALL"),T=L("ALL"),M=L("percent"),U=L("desc"),te=["subscribersCount","percent"],le=I(()=>{const f=new Map;for(const a of n.value)f.has(a.tier)||f.set(a.tier,a.tierLabel);return[{id:"ALL",label:"All tiers"},...Me.filter(a=>f.has(a)).map(a=>({id:a,label:f.get(a)}))]}),X=f=>f.isActive?f.isTrial?"TRIAL":"ACTIVE":"INACTIVE",se=I(()=>!!y.value.trim()||D.value||$.value!=="ALL"||P.value!=="ALL"||T.value!=="ALL"),ae=()=>{y.value="",D.value=!1,$.value="ALL",P.value="ALL",T.value="ALL"},G=async()=>{const f=await Oe();f instanceof Error?N.error(f.message||"Could not load customers overview."):n.value=f.map($e),c.value=!0,z.toggle(!0)};G();const B=I(()=>{const f=n.value;return{customers:f.length,active:f.filter(a=>a.isActive).length,nearLimit:f.filter(a=>!a.unlimited&&a.percent>=me).length}}),Y=I(()=>{const f=y.value.trim().toLowerCase();let a=n.value;f&&(a=a.filter(x=>
77[x.email,x.owner].filter(Boolean).some(d=>String(d).toLowerCase().includes(f)))),$.value!=="ALL"&&(a=a.filter(x=>x.tier===$.value)),P.value!=="ALL"&&(a=a.filter(x=>x.billingPeriod===P.value)),T.value!=="ALL"&&(a=a.filter(x=>X(x)===T.value)),D.value&&(a=a.filter(x=>!x.unlimited&&x.percent>=me));const l=M.value,o=U.value==="asc"?1:-1;return[...a].sort((x,d)=>{const S=x[l],ie=d[l];return typeof S=="number"&&typeof ie=="number"?(S-ie)*o:String(S??"").localeCompare(String(ie??""))*o})}),Q=f=>{M.value===f?U.value=U.value==="asc"?"desc":"asc":(M.value=f,U.value=te.includes(f)?"desc":"asc")},j=L(null),V=L(!1),F=f=>{j.value=f,V.value=!0},re=f=>{const a=String(f??"");return/[",\n]/.test(a)?`"${a.replace(/"/g,'""')}"`:a},Z=()=>{const f=["Email","Owner","Tier","Plan","Leads this cycle","Limit","Used %","Status"],a=Y.value.map(S=>[S.email??"",S.owner,S.tierLabel,S.planLabel,S.subscribersCount,S.unlimited?"":S.subscribersLimit,S.unlimited?"":S.percent,S.isActive?S.isTrial?"Trial":"Active":"Inactive"]),l=[f,...a].map(S=>S.map(re).join(",")).join(` 78`),o=new Blob([l],{type:"text/csv;charset=utf-8;"}),x=URL.createObjectURL(o),d=document.createElement("a");d.href=x,d.download="customers-overview.csv",d.click(),URL.revokeObjectURL(x)};return(f,a)=>{const l=H("Flex"),o=H("FlexCell"),x=H("Grid");return u(),w(l,{class:"admin-controller relative mx-auto w-full max-w-[1400px] lg:pt-3",gap:"6",vertical:""},{default:e(()=>[t(l,{gap:"4",middle:"",between:"",wrap:""},{default:e(()=>[t(o,null,{default:e(()=>[t(l,{vertical:""},{default:e(()=>[t(s(W),{size:"2xl",level:"3","semi-bold":""},{default:e(()=>[...a[6]||(a[6]=[r("Customers",-1)])]),_:1}),t(s(i),{size:"sm",class:"text-text-secondary"},{default:e(()=>[...a[7]||(a[7]=[r(" Lead usage, tier and plan across all customers. ",-1)])]),_:1})]),_:1})]),_:1}),ze(f.$slots,"header")]),_:3}),c.value?C("",!0):(u(),w(s(q),{key:0},{default:e(()=>[t(l,{class:"w-full py-16",vertical:"",center:"",middle:"",gap:"4"},{default:e(()=>[t(s(we),{size:44}),t(s(i),{size:"sm",class:"text-text-secondary"},{default:e(()=>[...a[8]||(a[8]=[r(" Loading customers⦠",-1)])]),_:1})]),_:1})]),_:1})),c.value?(u(),w(x,{key:1,class:"appear-from-top w-full",style:{"grid-template-columns":"repeat(3, minmax(0, 1fr))"},gap:"4"},{default:e(()=>[t(s(q),{type:"gray"},{default:e(()=>[t(l,{vertical:"",gap:"1"},{default:e(()=>[t(s(i),{size:"xs",class:"uppercase text-text-secondary"},{default:e(()=>[...a[9]||(a[9]=[r(" Customers ",-1)])]),_:1}),t(s(W),{size:"xl",level:"4","semi-bold":""},{default:e(()=>[r(p(B.value.customers),1)]),_:1})]),_:1})]),_:1}),t(s(q),{type:"gray"},{default:e(()=>[t(l,{vertical:"",gap:"1"},{default:e(()=>[t(s(i),{size:"xs",class:"uppercase text-text-secondary"},{default:e(()=>[...a[10]||(a[10]=[r("Active",-1)])]),_:1}),t(s(W),{size:"xl",level:"4","semi-bold":""},{default:e(()=>[r(p(B.value.active),1)]),_:1})]),_:1})]),_:1}),t(s(q),{type:"gray"},{default:e(()=>[t(l,{vertical:"",gap:"1"},{default:e(()=>[t(s(i),{size:"xs",class:"uppercase text-text-secondary"},{default:e(()=>[r(" Near limit (â¥"+p(me)+"%) ")]),_:1}),t(s(W),{size:"xl",level:"4","semi-bold":""},{default:e(()=>[r(p(B.value.nearLimit),1)]),_:1})]),_:1})]),_:1})]),_:1})):C("",!0),c.value?(u(),w(s(q),{key:2},{default:e(()=>[t(l,{vertical:"",gap:"4"},{default:e(()=>[t(l,{gap:"4",between:"",bottom:"",wrap:""},{default:e(()=>[t(l,{gap:"4",bottom:"",wrap:""},{default:e(()=>[t(l,{vertical:"",gap:"1",class:"min-w-[200px] max-w-[300px] grow"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase text-text-secondary"},{default:e(()=>[...a[11]||(a[11]=[r(" Search ",-1)])]),_:1}),t(s(Se),{modelValue:y.value,"onUpdate:modelValue":a[0]||(a[0]=d=>y.value=d),placeholder:"Email or name"},null,8,["modelValue"])]),_:1}),t(l,{vertical:"",gap:"1",class:"w-[170px]"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase text-text-secondary"},{default:e(()=>[...a[12]||(a[12]=[r(" Tier ",-1)])]),_:1}),t(s(ne),{modelValue:$.value,"onUpdate:modelValue":a[1]||(a[1]=d=>$.value=d),options:le.value,"clear-hidden":"","limit-width":""},null,8,["modelValue","options"])]),_:1}),t(l,{vertical:"",gap:"1",class:"w-[170px]"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase text-text-secondary"},{default:e(()=>[...a[13]||(a[13]=[r(" Plan ",-1)])]),_:1}),t(s(ne),{modelValue:P.value,"onUpdate:modelValue":a[2]||(a[2]=d=>P.value=d),options:_,"clear-hidden":"","limit-width":""},null,8,["modelValue"])]),_:1}),t(l,{vertical:"",gap:"1",class:"w-[170px]"},{default:e(()=>[t(s(i),{size:"xs","semi-bold":"",class:"uppercase text-text-secondary"},{default:e(()=>[...a[14]||(a[14]=[r(" Status ",-1)])]),_:1}),t(s(ne),{modelValue:T.value,"onUpdate:modelValue":a[3]||(a[3]=d=>T.value=d),options:h,"clear-hidden":"","limit-width":""},null,8,["modelValue"])]),_:1})]),_:1}),t(l,{gap:"4",middle:"",wrap:"",class:"h-[48px]"},{default:e(()=>
78[se.value?(u(),A("button",{key:0,type:"button",class:"text-xs font-semibold text-text-secondary underline-offset-2 hover:text-brand-primary hover:underline",onClick:ae}," Clear filters ")):C("",!0),t(l,{gap:"3",middle:""},{default:e(()=>[t(s(Te),{modelValue:D.value,"onUpdate:modelValue":a[4]||(a[4]=d=>D.value=d)},null,8,["modelValue"]),t(s(i),{size:"sm",medium:"","no-wrap":""},{default:e(()=>[...a[15]||(a[15]=[r("Near limit only",-1)])]),_:1})]),_:1}),b("button",{type:"button",class:"rounded-full bg-gray-100 px-4 py-2 text-xs font-semibold text-text-primary transition-colors hover:bg-gray-200",onClick:Z}," Export CSV ")]),_:1})]),_:1}),t(it,{rows:Y.value,"sort-key":M.value,"sort-dir":U.value,onSort:Q,onSelect:F},null,8,["rows","sort-key","sort-dir"])]),_:1})]),_:1})):C("",!0),t(Lt,{modelValue:V.value,"onUpdate:modelValue":a[5]||(a[5]=d=>V.value=d),owner:j.value,onChanged:G},null,8,["modelValue","owner"])]),_:3})}}});export{Ft as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.