PageSourceSearch

https://api.lmuai.com/assets/UsersView-DFI_dVdp.js

js lmuai.com collected 2026-10-09 22:20:19 UTC 134,274 bytes, 2 lines download raw bytes

1import{d as de,w as be,A as i,k as A,u as t,V as O,C as e,G as s,E as te,r as h,F as Z,Z as ae,Q as R,N as F,W as X,p as xe,_ as ze,R as Se,D as r,B as oe,c as j,L as ie,a8 as pa,o as Dt,a6 as fa,a as ms,M as ps,P as fs,n as va,a9 as ba,H as ya,a3 as ga,a2 as Lt}from"./vendor-vue-DCj14W3A.js";import{e as he}from"./apiError-KBFVzAD8.js";import{a as we,j as ke,_ as Q,m as W,ai as ha,b3 as _a,b4 as xa,aj as ka,b5 as Zt,u as vs,k as qe,T as wa,b6 as Xt}from"./index-C3h_jFbo.js";import{g as $a}from"./usePersistedPageSize-oR5BQYXM.js";import{u as Ca}from"./useTableSelection-CXC4RB9h.js";import{_ as Sa}from"./AppLayout.vue_vue_type_script_setup_true_lang-N3CJe6mc.js";import{T as Ua}from"./TablePageLayout-a8VBgtsI.js";import{D as Aa}from"./DataTable-DAcY0ZuN.js";import{P as Va}from"./Pagination-QSM9Zxbe.js";import{_ as zt}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang-B7T-OUTH.js";import{_ as Ea}from"./EmptyState.vue_vue_type_script_setup_true_lang-D1KWs108.js";import{_ as bs}from"./GroupBadge.vue_vue_type_script_setup_true_lang-D-ky-rSZ.js";import{S as Ue}from"./Select-B8psJQx2.js";import{c as Ma}from"./stableObjectKey-DullU5Fx.js";import{u as fe}from"./vendor-i18n-DMC1XGNs.js";import{_ as ys,u as gs,a as hs,i as _s,s as xs}from"./TotpStepUpDialog.vue_vue_type_script_setup_true_lang-eHy5JEgO.js";import{T as Ga}from"./TierMedal-DJ3R5fQB.js";import{u as Ra}from"./useClipboard-o87EjJvW.js";import{_ as es}from"./Toggle.vue_vue_type_script_setup_true_lang-C-6nRWf_.js";import{G as Ia}from"./GroupOptionItem-LtLSYGGX.js";import{_ as Pa}from"./KeyModelPicker.vue_vue_type_script_setup_true_lang-DuEmHp8h.js";import{c as La}from"./modelAllowlistCandidates-CCiXPAh8.js";import{_ as ts}from"./PlatformIcon.vue_vue_type_script_setup_true_lang-BDDnUXB7.js";import{_ as Na}from"./UserBalanceHistoryModal.vue_vue_type_script_setup_true_lang-CeDPPQxg.js";import{a as ss}from"./invoices-DlGF9rvq.js";import{b as za}from"./siteFilter-b5-AvZE7.js";import"./vendor-misc-kIRuuMdU.js";/* empty css                                                                  */import"./tierVisuals-DQsIJHNk.js";import"./balanceNotifyGuidance-CPjlLQsU.js";import"./peak-rate-qZGUWdry.js";import"./totp-B57fKs2x.js";import"./invoice_download-BFGG3G-H.js";import"./downloadBlob-ntjenI4P.js";function Da(w){const d=Array.isArray(w)?w[0]:w;return typeof d=="string"?d.trim():""}const Ta=-1,Oa=-2,Fa=-3,Ba=-4;function Ha(w,d){const u=[],z=[],a=[],I=[];for(const $ of w){const E={value:$.id,label:$.name};$.status!=="active"?I.push(E):$.subscription_type==="subscription"?a.push(E):$.is_exclusive?u.push(E):z.push(E)}const x=[{value:null,label:d.all}],v=[[d.exclusive,Ta,u],[d.public,Oa,z],[d.subscription,Fa,a],[d.disabled,Ba,I]];for(const[$,E,y]of v)y.length!==0&&(x.push({value:E,label:$,kind:"group",disabled:!0}),x.push(...y));return x}const ja={class:"space-y-4"},Ka={class:"flex items-center justify-between"},Qa={class:"text-sm text-gray-500 dark:text-dark-400"},qa={key:0,class:"flex justify-center py-12"},Wa={key:1,class:"py-12 text-center"},Ya={class:"mt-2 text-sm text-gray-500 dark:text-dark-400"},Ja={class:"text-xs text-gray-400 dark:text-dark-500"},Za={key:2,class:"max-h-96 space-y-2 overflow-y-auto"},Xa=["title"],el={class:"min-w-0 flex-1"},tl={class:"flex items-center gap-2"},sl={class:"font-medium text-gray-900 dark:text-white"},al={class:"rounded bg-gray-100 px-1.5 py-0.5 font-mono text-xs text-gray-500 dark:bg-dark-700 dark:text-dark-400"},ll={key:0,class:"badge badge-danger text-xs"},ol={key:1,class:"badge badge-gray text-xs"},rl={class:"mt-0.5 flex items-center gap-2 text-xs text-gray-500 dark:text-dark-400"},nl={class:"badge badge-gray"},il={key:0,class:"truncate"},ul={class:"flex items-center gap-1"},dl=["onClick","title"],cl=["onClick","title"],ml={class:"flex justify-end"},pl={class:"input-label"},fl=["placeholder","disabled"],vl={class:"input-hint"},bl={class:"input-label"},yl=["placeholder"],gl={class:"input-label"},hl={key:0,class:"space-y-2"},_l={class:"input-label"},xl=["onUpdate:modelValue","placeholder"],kl=["onUpdate:modelValue","placeholder"],wl=["onClick"],$l={class:"input-label"},Cl=["placeholder"],Sl={class:"input-label"},Ul=["placeholder"],Al={class:"flex items-center gap-6"},Vl={class:"flex items-center gap-2"},El={class:"text-sm text-gray-700 dark:text-gray-300"},Ml={class:"flex items-center gap-2"},Gl={class:"text-sm text-gray-700 dark:text-gray-300"},Rl={class:"flex justify-end gap-3"},Il=["disabled"],Pl={key:0,class:"-ml-1 mr-2 h-4 w-4 animate-spin",fill:"none",viewBox:"0 0 24 24"},Ll=de({__name:"UserAttributesConfigModal",props:{show:{type:Boolean}},emits:["close"],setup(w,{emit:d}){const{t:u}=fe(),z=we(),a=w,I=d,x=["text","textarea","number","email","url","date","select","multi_select"],v=h(!1),$=h(!1),E=h([]),y=h(!1),S=h(!1),b=h(null),f=h(null),M=Ma("user-attr-option"),m=xe({key:"",name:"",type:"text",description:"",placeholder:"",required:!1,enabled:!0,options:[]}),q=async()=>{v.value=!0;try{E.value=await W.userAttributes.listDefinitions()}catch(c){z.showError(he(c,u("admin.users.attributes.failedToLoad")))}finally{v.value=!1}},H=()=>{b.value=null,m.key="",m.name="",m.type="text",m.description="",m.placeholder="",m.required=!1,m.enabled=!0,m.options=[],y.value=!0},J=c=>{b.value=c,m.key=c.key,m.name=c.name,m.type=c.type,m.description=c.description||"",m.placeholder=c.placeholder||"",m.required=c.required,m.enabled=c.enabled,m.options=c.options?c.options.map(G=>({...G})):[],y.value=!0},ee=()=>{y.value=!1,b.value=null},K=()=>{m.options.push({value:"",label:""})},p=c=>{m.options.splice(c,1)},P=async()=>
1{if(!m.key.trim()){z.showError(u("admin.users.attributes.keyRequired"));return}if(!m.name.trim()){z.showError(u("admin.users.attributes.nameRequired"));return}if((m.type==="select"||m.type==="multi_select")&&m.options.length===0){z.showError(u("admin.users.attributes.optionsRequired"));return}$.value=!0;try{const c={key:m.key,name:m.name,type:m.type,description:m.description,placeholder:m.placeholder,required:m.required,enabled:m.enabled,options:m.type==="select"||m.type==="multi_select"?m.options:void 0};b.value?(await W.userAttributes.updateDefinition(b.value.id,c),z.showSuccess(u("admin.users.attributes.updated"))):(await W.userAttributes.createDefinition(c),z.showSuccess(u("admin.users.attributes.created"))),ee(),q()}catch(c){const G=b.value?u("admin.users.attributes.failedToUpdate"):u("admin.users.attributes.failedToCreate");z.showError(he(c,G))}finally{$.value=!1}},C=c=>{f.value=c,S.value=!0},g=async()=>{if(f.value)try{await W.userAttributes.deleteDefinition(f.value.id),z.showSuccess(u("admin.users.attributes.deleted")),S.value=!1,f.value=null,q()}catch(c){z.showError(he(c,u("admin.users.attributes.failedToDelete")))}};return be(()=>a.show,c=>{c&&q()}),(c,G)=>{var Y;return r(),i(Z,null,[A(ke,{show:w.show,title:t(u)("admin.users.attributes.title"),width:"wide",onClose:G[1]||(G[1]=D=>I("close"))},{footer:O(()=>[e("div",ml,[e("button",{onClick:G[0]||(G[0]=D=>I("close")),class:"btn btn-secondary"},s(t(u)("common.close")),1)])]),default:O(()=>[e("div",ja,[e("div",Ka,[e("p",Qa,s(t(u)("admin.users.attributes.description")),1),e("button",{onClick:H,class:"btn btn-primary btn-sm"},[A(Q,{name:"plus",size:"sm",class:"mr-1.5","stroke-width":2}),te(" "+s(t(u)("admin.users.attributes.addAttribute")),1)])]),v.value?(r(),i("div",qa,[...G[10]||(G[10]=[e("svg",{class:"h-8 w-8 animate-spin text-primary-500",fill:"none",viewBox:"0 0 24 24"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1)])])):E.value.length===0?(r(),i("div",Wa,[G[11]||(G[11]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.568 3H5.25A2.25 2.25 0 003 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 005.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 009.568 3z"}),e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 6h.008v.008H6V6z"})],-1)),e("p",Ya,s(t(u)("admin.users.attributes.noAttributes")),1),e("p",Ja,s(t(u)("admin.users.attributes.noAttributesHint")),1)])):(r(),i("div",Za,[(r(!0),i(Z,null,ae(E.value,D=>(r(),i("div",{key:D.id,class:"flex items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 dark:border-dark-600 dark:bg-dark-800"},[e("div",{class:"cursor-move text-gray-400 hover:text-gray-600 dark:hover:text-gray-300",title:t(u)("admin.users.attributes.dragToReorder")},[A(Q,{name:"menu",size:"md"})],8,Xa),e("div",el,[e("div",tl,[e("span",sl,s(D.name),1),e("span",al,s(D.key),1),D.required?(r(),i("span",ll,s(t(u)("admin.users.attributes.required")),1)):R("",!0),D.enabled?R("",!0):(r(),i("span",ol,s(t(u)("common.disabled")),1))]),e("div",rl,[e("span",nl,s(t(u)(`admin.users.attributes.types.${D.type}`)),1),D.description?(r(),i("span",il,s(D.description),1)):R("",!0)])]),e("div",ul,[e("button",{onClick:se=>J(D),class:"rounded-lg p-1.5 text-gray-500 hover:bg-gray-100 hover:text-primary-600 dark:hover:bg-dark-700 dark:hover:text-primary-400",title:t(u)("common.edit")},[A(Q,{name:"edit",size:"sm"})],8,dl),e("button",{onClick:se=>C(D),class:"rounded-lg p-1.5 text-gray-500 hover:bg-red-50 hover:text-red-600 dark:hover:bg-red-900/20 dark:hover:text-red-400",title:t(u)("common.delete")},[A(Q,{name:"trash",size:"sm"})],8,cl)])]))),128))]))])]),_:1},8,["show","title"]),A(ke,{show:y.value,title:b.value?t(u)("admin.users.attributes.editAttribute"):t(u)("admin.users.attributes.addAttribute"),width:"normal",onClose:ee},{footer:O(()=>[e("div",Rl,[e("button",{onClick:ee,type:"button",class:"btn btn-secondary"},s(t(u)("common.cancel")),1),e("button",{type:"submit",form:"attribute-form",disabled:$.value,class:"btn btn-primary"},[$.value?(r(),i("svg",Pl,[...G[12]||(G[12]=[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])])):R("",!0),te(" "+s($.value?t(u)("common.saving"):b.value?t(u)("common.update"):t(u)("common.create")),1)],8,Il)])]),default:O(()=>[e("form",{id:"attribute-form",onSubmit:Se(P,["prevent"]),class:"space-y-4"},[e("div",null,[e("label",pl,s(t(u)("admin.users.attributes.key")),1),F(e("input",{"onUpdate:modelValue":G[2]||(G[2]=D=>m.key=D),type:"text",required:"",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$",class:"input font-mono",placeholder:t(u)("admin.users.attributes.keyHint"),disabled:!!b.value},null,8,fl),[[X,m.key]]),e("p",vl,s(t(u)("admin.users.attributes.keyHint")),1)]),e("div",null,[e("label",bl,s(t(u)("admin.users.attributes.name")),1),F(e("input",{"onUpdate:modelValue":G[3]||(G[3]=D=>m.name=D),type:"text",required:"",class:"input",placeholder:t(u)("admin.users.attributes.nameHint")},null,8,yl),[[X,m.name]])]),e("div",null,[e("label",gl,s(t(u)("admin.users.attributes.type")),1),A(Ue,{modelValue:m.type,"onUpdate:modelValue":G[4]||(G[4]=D=>m.type=D),options:x.map(D=>({value:D,label:t(u)(`admin.users.attributes.types.${D}`)}))},null,8,["modelValue","options"])]),m.type==="select"||m.type==="multi_select"?(r(),i("div",hl,[e("label",_l,s(t(u)("admin.users.attributes.options")),1),(r(!0),i(Z,null,ae(m.options,
1(D,se)=>(r(),i("div",{key:t(M)(D),class:"flex items-center gap-2"},[F(e("input",{"onUpdate:modelValue":Ge=>D.value=Ge,type:"text",class:"input flex-1 font-mono text-sm",placeholder:t(u)("admin.users.attributes.optionValue"),required:""},null,8,xl),[[X,D.value]]),F(e("input",{"onUpdate:modelValue":Ge=>D.label=Ge,type:"text",class:"input flex-1 text-sm",placeholder:t(u)("admin.users.attributes.optionLabel"),required:""},null,8,kl),[[X,D.label]]),e("button",{type:"button",onClick:Ge=>p(se),class:"rounded-lg p-1.5 text-gray-500 hover:bg-red-50 hover:text-red-600"},[A(Q,{name:"x",size:"sm","stroke-width":2})],8,wl)]))),128)),e("button",{type:"button",onClick:K,class:"btn btn-secondary btn-sm"},[A(Q,{name:"plus",size:"sm",class:"mr-1","stroke-width":2}),te(" "+s(t(u)("admin.users.attributes.addOption")),1)])])):R("",!0),e("div",null,[e("label",$l,s(t(u)("admin.users.attributes.fieldDescription")),1),F(e("input",{"onUpdate:modelValue":G[5]||(G[5]=D=>m.description=D),type:"text",class:"input",placeholder:t(u)("admin.users.attributes.fieldDescriptionHint")},null,8,Cl),[[X,m.description]])]),e("div",null,[e("label",Sl,s(t(u)("admin.users.attributes.placeholder")),1),F(e("input",{"onUpdate:modelValue":G[6]||(G[6]=D=>m.placeholder=D),type:"text",class:"input",placeholder:t(u)("admin.users.attributes.placeholderHint")},null,8,Ul),[[X,m.placeholder]])]),e("div",Al,[e("label",Vl,[F(e("input",{"onUpdate:modelValue":G[7]||(G[7]=D=>m.required=D),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-primary-600"},null,512),[[ze,m.required]]),e("span",El,s(t(u)("admin.users.attributes.required")),1)]),e("label",Ml,[F(e("input",{"onUpdate:modelValue":G[8]||(G[8]=D=>m.enabled=D),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-primary-600"},null,512),[[ze,m.enabled]]),e("span",Gl,s(t(u)("admin.users.attributes.enabled")),1)])])],32)]),_:1},8,["show","title"]),A(zt,{show:S.value,title:t(u)("admin.users.attributes.deleteAttribute"),message:t(u)("admin.users.attributes.deleteConfirm",{name:(Y=f.value)==null?void 0:Y.name}),"confirm-text":t(u)("common.delete"),"cancel-text":t(u)("common.cancel"),danger:!0,onConfirm:g,onCancel:G[9]||(G[9]=D=>S.value=!1)},null,8,["show","title","message","confirm-text","cancel-text"])],64)}}}),Nl={class:"flex items-center"},zl={class:"font-mono"},Dl={class:"font-mono"},Tl=de({__name:"UserConcurrencyCell",props:{current:{},max:{}},setup(w){const d=w,u=j(()=>{const{current:z,max:a}=d;return z>=a&&a>0?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":z>0?"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400":"bg-gray-100 text-gray-600 dark:bg-gray-800 dark:text-gray-400"});return(z,a)=>(r(),i("div",Nl,[e("span",{class:oe(["inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-xs font-medium",u.value])},[a[0]||(a[0]=e("svg",{class:"h-3 w-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z"})],-1)),e("span",zl,s(w.current),1),a[1]||(a[1]=e("span",{class:"text-gray-400 dark:text-gray-500"},"/",-1)),e("span",Dl,s(w.max),1)],2)]))}}),Ol={class:"group/usage relative text-sm"},Fl={class:"flex items-center gap-1.5"},Bl={class:"text-gray-500 dark:text-gray-400"},Hl={class:"font-medium text-gray-900 dark:text-white"},jl={class:"mt-0.5 flex items-center gap-1.5"},Kl={class:"text-gray-500 dark:text-gray-400"},Ql={class:"font-medium text-gray-900 dark:text-white"},ql={key:0,class:"pointer-events-none absolute left-full top-0 z-50 ml-2 min-w-[220px] whitespace-nowrap rounded-md bg-gray-900 px-3 py-2 text-xs text-white opacity-0 shadow-xl transition-opacity duration-100 group-hover/usage:opacity-100 dark:bg-dark-600"},Wl={class:"mb-1.5 flex items-center justify-between gap-3 border-b border-white/10 pb-1 text-[11px] opacity-80"},Yl={class:"font-mono"},Jl={class:"capitalize"},Zl={class:"font-mono"},as=1e-4,Xl=de({__name:"PlatformUsageBreakdown",props:{today:{},total:{},byPlatform:{}},setup(w){const d=w,{t:u}=fe(),z=j(()=>{const $=[...d.byPlatform??[]].sort((f,M)=>M.total_actual_cost-f.total_actual_cost).map(f=>({...f})),E=$.reduce((f,M)=>f+M.total_actual_cost,0),y=$.reduce((f,M)=>f+M.today_actual_cost,0),S=Math.max(0,d.total-E),b=Math.max(0,d.today-y);return(S>as||b>as)&&$.push({platform:"__other__",today_actual_cost:b,total_actual_cost:S,isOther:!0}),$}),a=j(()=>z.value.length>0),I={anthropic:"Claude",openai:"OpenAI",gemini:"Gemini",antigravity:"Antigravity",grok:"Grok",kimi:"Kimi",zhipu:"Zhipu GLM",deepseek:"DeepSeek",minimax:"MiniMax"};function x(v){return I[v]??v}return(v,$)=>(r(),i("div",Ol,[e("div",Fl,[e("span",Bl,s(t(u)("admin.users.today"))+":",1),e("span",Hl,"$"+s(w.today.toFixed(4)),1),a.value?(r(),ie(Q,{key:0,name:"infoCircle",size:"xs",class:"text-gray-400 dark:text-gray-500"})):R("",!0)]),e("div",jl,[e("span",Kl,s(t(u)("admin.users.total"))+":",1),e("span",Ql,"$"+s(w.total.toFixed(4)),1)]),a.value?(r(),i("div",ql,[e("div",Wl,[e("span",null,s(t(u)("admin.users.platformBreakdown")),1),e("span",Yl,s(t(u)("admin.users.today"))+" / "+s(t(u)("admin.users.total")),1)]),(r(!0),i(Z,null,ae(z.value,E=>(r(),i("div",{key:E.platform,class:oe(["flex items-center justify-between gap-3 py-0.5",{"opacity-70 italic":E.isOther}])},[e("span",Jl,s(E.isOther?t(u)("admin.users.platformOther"):x(E.platform)),1
1),e("span",Zl,[te(" $"+s(E.today_actual_cost.toFixed(4))+" ",1),$[0]||($[0]=e("span",{class:"opacity-50"},"/",-1)),te(" $"+s(E.total_actual_cost.toFixed(4)),1)])],2))),128))])):R("",!0)]))}}),eo={key:0,class:"text-sm"},to={class:"flex items-center gap-1.5"},so={class:"text-gray-500 dark:text-gray-400"},ao={class:"font-medium text-gray-900 dark:text-white"},lo={class:"mt-0.5 flex items-center gap-1.5"},oo={class:"text-gray-500 dark:text-gray-400"},ro={class:"font-medium text-gray-900 dark:text-white"},no={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},nt=de({__name:"PlatformCostCell",props:{usage:{}},setup(w){const{t:d}=fe();return(u,z)=>w.usage?(r(),i("div",eo,[e("div",to,[e("span",so,s(t(d)("admin.users.today"))+":",1),e("span",ao,"$"+s(w.usage.today_actual_cost.toFixed(4)),1)]),e("div",lo,[e("span",oo,s(t(d)("admin.users.total"))+":",1),e("span",ro,"$"+s(w.usage.total_actual_cost.toFixed(4)),1)])])):(r(),i("span",no,"—"))}}),io={key:0,class:"text-xs text-gray-400 dark:text-gray-500"},uo={key:1,class:"text-xs text-gray-400 dark:text-gray-500"},co={key:2,class:"space-y-0.5 text-xs"},mo={class:"w-20 shrink-0 font-mono text-gray-700 dark:text-gray-300"},po={class:"text-gray-500 dark:text-gray-400"},fo={class:"text-gray-900 dark:text-white"},vo={class:"text-gray-500 dark:text-gray-400"},bo={class:"text-gray-900 dark:text-white"},yo={class:"text-gray-500 dark:text-gray-400"},go={class:"text-gray-900 dark:text-white"},ho=de({__name:"UserPlatformQuotaCell",props:{quotas:{}},setup(w){const d=w,{t:u}=fe();function z(v){const $=ha().indexOf(v);return $===-1?Number.MAX_SAFE_INTEGER:$}const a=j(()=>d.quotas?d.quotas.filter(v=>v.daily_limit_usd!=null||v.weekly_limit_usd!=null||v.monthly_limit_usd!=null).slice().sort((v,$)=>z(v.platform)-z($.platform)):[]);function I(v){return v==null||Number.isNaN(v)?"0":String(Math.round(v*100)/100)}function x(v){return v==null?"—":I(v)}return(v,$)=>d.quotas===void 0?(r(),i("span",io,"…")):a.value.length===0?(r(),i("span",uo,s(t(u)("admin.users.platformQuota.cellNotConfigured")),1)):(r(),i("div",co,[(r(!0),i(Z,null,ae(a.value,E=>(r(),i("div",{key:E.platform,class:"flex items-center gap-2 whitespace-nowrap"},[e("span",mo,s(E.platform),1),e("span",po,[te(s(t(u)("admin.users.platformQuota.windowDaily"))+" ",1),e("span",fo,s(I(E.daily_usage_usd))+"/"+s(x(E.daily_limit_usd)),1)]),e("span",vo,[te(s(t(u)("admin.users.platformQuota.windowWeekly"))+" ",1),e("span",bo,s(I(E.weekly_usage_usd))+"/"+s(x(E.weekly_limit_usd)),1)]),e("span",yo,[te(s(t(u)("admin.users.platformQuota.windowMonthly"))+" ",1),e("span",go,s(I(E.monthly_usage_usd))+"/"+s(x(E.monthly_limit_usd)),1)])]))),128))]))}}),_o={class:"input-label"},xo=["placeholder"],ko={class:"input-label"},wo={class:"flex gap-2"},$o={class:"relative flex-1"},Co=["placeholder"],So={class:"input-label"},Uo=["placeholder"],Ao={class:"input-label"},Vo={value:"user"},Eo={value:"staff"},Mo={value:"admin"},Go={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Ro={class:"input-label"},Io={class:"input-label"},Po={class:"input-label"},Lo=["placeholder"],No={class:"input-hint"},zo={class:"flex justify-end gap-3"},Do=["disabled"],To=de({__name:"UserCreateModal",props:{show:{type:Boolean}},emits:["close","success"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=xe({email:"",password:"",username:"",notes:"",role:"user",balance:"",concurrency:1,rpm_limit:0}),v=gs(),$=h(!1),E=async()=>{if(!$.value){$.value=!0;try{const{balance:S,...b}={...x},f=String(S).trim(),M={...b};f!==""&&(M.balance=Number(f)),await v.run(()=>W.users.create(M)),I.showSuccess(a("admin.users.userCreated")),z("success"),z("close")}catch(S){hs(S)||(_s(S)?I.showError(xs(S)==="STEP_UP_ADMIN_API_KEY_FORBIDDEN"?a("stepUp.adminApiKeyForbidden"):a("stepUp.notEnabled")):I.showError((S==null?void 0:S.message)||a("admin.users.failedToCreate")))}finally{$.value=!1}}};be(()=>u.show,S=>{S&&Object.assign(x,{email:"",password:"",username:"",notes:"",role:"user",balance:"",concurrency:1,rpm_limit:0})});const y=()=>{const S="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789!@#$%^&*";let b="";for(let f=0;f<16;f++)b+=S.charAt(Math.floor(Math.random()*S.length));x.password=b};return(S,b)=>(r(),i(Z,null,[A(ke,{show:w.show,title:t(a)("admin.users.createUser"),width:"normal",onClose:b[8]||(b[8]=f=>S.$emit("close"))},{footer:O(()=>[e("div",zo,[e("button",{onClick:b[7]||(b[7]=f=>S.$emit("close")),type:"button",class:"btn btn-secondary"},s(t(a)("common.cancel")),1),e("button",{type:"submit",form:"create-user-form",disabled:$.value,class:"btn btn-primary"},s($.value?t(a)("admin.users.creating"):t(a)("common.create")),9,Do)])]),default:O(()=>[e("form",{id:"create-user-form",onSubmit:Se(E,["prevent"]),class:"space-y-5"},[e("div",null,[e("label",_o,s(t(a)("admin.users.email")),1),F(e("input",{"onUpdate:modelValue":b[0]||(b[0]=f=>x.email=f),type:"email",required:"",class:"input",placeholder:t(a)("admin.users.enterEmail")},null,8,xo),[[X,x.email]])]),e("div",null,[e("label",ko,s(t(a)("admin.users.password")),1),e("div",w
1o,[e("div",$o,[F(e("input",{"onUpdate:modelValue":b[1]||(b[1]=f=>x.password=f),type:"text",required:"",class:"input pr-10",placeholder:t(a)("admin.users.enterPassword")},null,8,Co),[[X,x.password]])]),e("button",{type:"button",onClick:y,class:"btn btn-secondary px-3"},[A(Q,{name:"refresh",size:"md"})])])]),e("div",null,[e("label",So,s(t(a)("admin.users.username")),1),F(e("input",{"onUpdate:modelValue":b[2]||(b[2]=f=>x.username=f),type:"text",class:"input",placeholder:t(a)("admin.users.enterUsername")},null,8,Uo),[[X,x.username]])]),e("div",null,[e("label",Ao,s(t(a)("admin.users.form.roleLabel")),1),F(e("select",{"onUpdate:modelValue":b[3]||(b[3]=f=>x.role=f),class:"input"},[e("option",Vo,s(t(a)("admin.users.roles.user")),1),e("option",Eo,s(t(a)("admin.users.roles.staff")),1),e("option",Mo,s(t(a)("admin.users.roles.admin")),1)],512),[[pa,x.role]])]),e("div",Go,[e("div",null,[e("label",Ro,s(t(a)("admin.users.columns.balance")),1),F(e("input",{"onUpdate:modelValue":b[4]||(b[4]=f=>x.balance=f),type:"number",step:"any",class:"input"},null,512),[[X,x.balance]])]),e("div",null,[e("label",Io,s(t(a)("admin.users.columns.concurrency")),1),F(e("input",{"onUpdate:modelValue":b[5]||(b[5]=f=>x.concurrency=f),type:"number",class:"input"},null,512),[[X,x.concurrency,void 0,{number:!0}]])])]),e("div",null,[e("label",Po,s(t(a)("admin.users.form.rpmLimit")),1),F(e("input",{"onUpdate:modelValue":b[6]||(b[6]=f=>x.rpm_limit=f),type:"number",min:"0",step:"1",class:"input",placeholder:t(a)("admin.users.form.rpmLimitPlaceholder")},null,8,Lo),[[X,x.rpm_limit,void 0,{number:!0}]]),e("p",No,s(t(a)("admin.users.form.rpmLimitHint")),1)])],32)]),_:1},8,["show","title"]),A(ys,{controller:t(v)},null,8,["controller"])],64))}}),Oo={key:0,class:"space-y-4"},Fo={class:"input-label"},Bo={key:0,class:"text-red-500"},Ho=["onUpdate:modelValue","type","required","placeholder"],jo=["value","required","placeholder","min","max","onInput"],Ko=["onUpdate:modelValue","required"],Qo=["onUpdate:modelValue","required","placeholder"],qo={key:5,class:"space-y-2"},Wo=["value","checked","onChange"],Yo={class:"text-sm text-gray-700 dark:text-gray-300"},Jo={key:6,class:"input-hint"},Zo={key:1,class:"flex justify-center py-4"},Xo=de({__name:"UserAttributeForm",props:{userId:{},modelValue:{}},emits:["update:modelValue"],setup(w,{emit:d}){const u=w,z=d,a=h(!1),I=h([]),x=h({});let v=0;const $=async()=>{a.value=!0;try{I.value=await W.userAttributes.listEnabledDefinitions()}catch(f){console.error("Failed to load attributes:",f)}finally{a.value=!1}},E=async()=>{if(!u.userId)return;const f=++v;try{const M=await W.userAttributes.getUserAttributeValues(u.userId);if(f!==v)return;const m={};M.forEach(q=>{m[q.attribute_id]=q.value}),x.value={...m},z("update:modelValue",x.value)}catch(M){console.error("Failed to load user attribute values:",M)}},y=()=>{z("update:modelValue",{...x.value})},S=(f,M)=>{const m=x.value[f];if(!m)return!1;try{const q=JSON.parse(m);return Array.isArray(q)&&q.includes(M)}catch{return!1}},b=(f,M)=>{let m=[];const q=x.value[f];if(q)try{m=JSON.parse(q),Array.isArray(m)||(m=[])}catch{m=[]}const H=m.indexOf(M);H>-1?m.splice(H,1):m.push(M),x.value[f]=JSON.stringify(m),y()};return be(()=>u.modelValue,f=>{f&&Object.keys(f).length>0&&(x.value={...f})},{immediate:!0}),be(()=>u.userId,(f,M,m)=>{m(()=>{v++}),x.value={},f&&E()},{immediate:!0}),Dt(()=>{$()}),(f,M)=>I.value.length>0?(r(),i("div",Oo,[(r(!0),i(Z,null,ae(I.value,m=>{var q,H;return r(),i("div",{key:m.id},[e("label",Fo,[te(s(m.name)+" ",1),m.required?(r(),i("span",Bo,"*")):R("",!0)]),m.type==="text"||m.type==="email"||m.type==="url"?F((r(),i("input",{key:0,"onUpdate:modelValue":J=>x.value[m.id]=J,type:m.type==="text"?"text":m.type,required:m.required,placeholder:m.placeholder,class:"input",onInput:y},null,40,Ho)),[[fa,x.value[m.id]]]):m.type==="number"?(r(),i("input",{key:1,value:x.value[m.id],type:"number",required:m.required,placeholder:m.placeholder,min:(q=m.validation)==null?void 0:q.min,max:(H=m.validation)==null?void 0:H.max,class:"input",onInput:J=>{x.value[m.id]=J.target.value,y()}},null,40,jo)):m.type==="date"?F((r(),i("input",{key:2,"onUpdate:modelValue":J=>
1x.value[m.id]=J,type:"date",required:m.required,class:"input",onInput:y},null,40,Ko)),[[X,x.value[m.id]]]):m.type==="textarea"?F((r(),i("textarea",{key:3,"onUpdate:modelValue":J=>x.value[m.id]=J,required:m.required,placeholder:m.placeholder,rows:"3",class:"input",onInput:y},null,40,Qo)),[[X,x.value[m.id]]]):m.type==="select"?(r(),ie(Ue,{key:4,modelValue:x.value[m.id],"onUpdate:modelValue":J=>x.value[m.id]=J,options:m.options||[],onChange:y},null,8,["modelValue","onUpdate:modelValue","options"])):m.type==="multi_select"?(r(),i("div",qo,[(r(!0),i(Z,null,ae(m.options,J=>(r(),i("label",{key:J.value,class:"flex items-center gap-2"},[e("input",{type:"checkbox",value:J.value,checked:S(m.id,J.value),onChange:ee=>b(m.id,J.value),class:"h-4 w-4 rounded border-gray-300 text-primary-600"},null,40,Wo),e("span",Yo,s(J.label),1)]))),128))])):R("",!0),m.description?(r(),i("p",Jo,s(m.description),1)):R("",!0)])}),128))])):a.value?(r(),i("div",Zo,[...M[0]||(M[0]=[e("svg",{class:"h-5 w-5 animate-spin text-gray-400",fill:"none",viewBox:"0 0 24 24"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1)])])):R("",!0)}}),er={class:"input-label"},tr={class:"input-label"},sr={class:"flex gap-2"},ar={class:"relative flex-1"},lr=["placeholder"],or={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"2"},rr={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1.5"},nr={class:"input-label"},ir={class:"input-label"},ur={key:0,class:"rounded-xl border border-gray-200 p-4 dark:border-dark-600"},dr={class:"mb-3 flex items-center justify-between"},cr={class:"input-label mb-0"},mr={class:"input-hint mb-3"},pr={class:"space-y-2"},fr={class:"w-28 flex-shrink-0 text-sm text-gray-600 dark:text-gray-300"},vr=["checked","data-test","onChange"],br={class:"input-label"},yr={class:"input-label"},gr=["placeholder"],hr={class:"input-hint"},_r={class:"input-label"},xr=["placeholder"],kr={class:"input-hint"},wr={key:1,class:"rounded-xl border border-gray-200 p-4 dark:border-dark-600"},$r={class:"mb-2 flex items-center justify-between"},Cr={class:"input-label mb-0"},Sr={class:"text-xs tabular-nums text-gray-500 dark:text-gray-400"},Ur={class:"flex items-center gap-2"},Ar=["disabled"],Vr={class:"input-hint mt-2"},Er={class:"flex justify-end gap-3"},Mr=["disabled"],Gr=de({__name:"UserEditModal",props:{show:{type:Boolean},user:{}},emits:["close","success"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),{copyToClipboard:x}=Ra(),v=h(!1),$=h(!1),E=j(()=>[{value:"user",label:a("admin.users.roles.user")},{value:"staff",label:a("admin.users.roles.staff")},{value:"admin",label:a("admin.users.roles.admin")}]),y=xe({email:"",password:"",username:"",notes:"",role:"user",concurrency:1,rpm_limit:0,customAttributes:{}}),S=h(new Set);function b(g){const c=new Set(S.value);c.has(g)?c.delete(g):c.add(g),S.value=c}function f(){S.value=new Set(xa)}be(()=>u.user,g=>{g&&(Object.assign(y,{email:g.email,password:"",username:g.username||"",notes:g.notes||"",role:g.role||"user",concurrency:g.concurrency,rpm_limit:g.rpm_limit??0,customAttributes:{}}),$.value=!1,S.value=new Set(g.permissions??[]))},{immediate:!0});const M=()=>{const g="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789!@#$%^&*";let c="";for(let G=0;G<16;G++)c+=g.charAt(Math.floor(Math.random()*g.length));y.password=c},m=async()=>{y.password&&await x(y.password,a("admin.users.passwordCopied"))&&($.value=!0,setTimeout(()=>$.value=!1,2e3))},q=gs(),H=h(null),J=h(!1),ee=h(""),K=j(()=>[{value:"",label:a("admin.users.tierAuto")},...ka.map(g=>({value:g,label:g}))]),p=j(()=>J.value||!H.value?!1:ee.value!==(H.value.manual_tier_key??""));be(()=>{var g;return[u.show,(g=u.user)==null?void 0:g.id]},async([g,c])=>{if(!g||!c){H.value=null;return}try{const G=await W.consumptionTier.getUserTier(c);H.value=G,ee.value=G.manual_tier_key??""}catch{H.value=null}},{immediate:!0});async function P(){if(u.user){J.value=!0;try{const g=ee.value===""?null:ee.value;H.value=await W.consumptionTier.setUserManualTier(u.user.id,g),ee.value=H.value.manual_tier_key??"",I.showSuccess(a("admin.consumptionTier.saveSuccess"))}catch(g){I.showError((g==null?void 0:g.message)||a("admin.consumptionTier.saveFailed"))}finally{J.value=!1}}}const C=async()=>
1{if(!u.user)return;if(!y.email.trim()){I.showError(a("admin.users.emailRequired"));return}if(!Number.isInteger(y.concurrency)||y.concurrency<0){I.showError(a("admin.users.concurrencyNonNegative"));return}if(p.value){I.showError(a("admin.users.tierUnsavedGuard"));return}const g=u.user.id;v.value=!0;try{const c={email:y.email,username:y.username,notes:y.notes,role:y.role,concurrency:y.concurrency,rpm_limit:y.rpm_limit};y.password.trim()&&(c.password=y.password.trim()),await q.run(()=>W.users.update(g,c)),y.role==="staff"&&await q.run(()=>W.users.updatePermissions(g,Array.from(S.value))),Object.keys(y.customAttributes).length>0&&await W.userAttributes.updateUserAttributeValues(g,y.customAttributes),I.showSuccess(a("admin.users.userUpdated")),z("success"),z("close")}catch(c){hs(c)||(_s(c)?I.showError(xs(c)==="STEP_UP_ADMIN_API_KEY_FORBIDDEN"?a("stepUp.adminApiKeyForbidden"):a("stepUp.notEnabled")):I.showError((c==null?void 0:c.message)||a("admin.users.failedToUpdate")))}finally{v.value=!1}};return(g,c)=>(r(),i(Z,null,[A(ke,{show:w.show,title:t(a)("admin.users.editUser"),width:"normal",onClose:c[10]||(c[10]=G=>g.$emit("close"))},{footer:O(()=>[e("div",Er,[e("button",{onClick:c[9]||(c[9]=G=>g.$emit("close")),type:"button",class:"btn btn-secondary"},s(t(a)("common.cancel")),1),e("button",{type:"submit",form:"edit-user-form",disabled:v.value,class:"btn btn-primary"},s(v.value?t(a)("admin.users.updating"):t(a)("common.update")),9,Mr)])]),default:O(()=>{var G;return[w.user?(r(),i("form",{key:0,id:"edit-user-form",onSubmit:Se(C,["prevent"]),class:"space-y-5"},[e("div",null,[e("label",er,s(t(a)("admin.users.email")),1),F(e("input",{"onUpdate:modelValue":c[0]||(c[0]=Y=>y.email=Y),type:"email",class:"input"},null,512),[[X,y.email]])]),e("div",null,[e("label",tr,s(t(a)("admin.users.password")),1),e("div",sr,[e("div",ar,[F(e("input",{"onUpdate:modelValue":c[1]||(c[1]=Y=>y.password=Y),type:"text",class:"input pr-10",placeholder:t(a)("admin.users.enterNewPassword")},null,8,lr),[[X,y.password]]),y.password?(r(),i("button",{key:0,type:"button",onClick:m,class:oe(["absolute right-2 top-1/2 -translate-y-1/2 rounded-lg p-1 transition-colors hover:bg-gray-100 dark:hover:bg-dark-700",$.value?"text-green-500":"text-gray-400"])},[$.value?(r(),i("svg",or,[...c[11]||(c[11]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"},null,-1)])])):(r(),i("svg",rr,[...c[12]||(c[12]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.666 3.888A2.25 2.25 0 0013.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 01-.75.75H9a.75.75 0 01-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 01-2.25 2.25H6.75A2.25 2.25 0 014.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 011.927-.184"},null,-1)])]))],2)):R("",!0)]),e("button",{type:"button",onClick:M,class:"btn btn-secondary px-3"},[A(Q,{name:"refresh",size:"md"})])])]),e("div",null,[e("label",nr,s(t(a)("admin.users.username")),1),F(e("input",{"onUpdate:modelValue":c[2]||(c[2]=Y=>y.username=Y),type:"text",class:"input"},null,512),[[X,y.username]])]),e("div",null,[e("label",ir,s(t(a)("admin.users.form.roleLabel")),1),A(Ue,{modelValue:y.role,"onUpdate:modelValue":c[3]||(c[3]=Y=>y.role=Y),options:E.value,searchable:!1},null,8,["modelValue","options"])]),y.role==="staff"?(r(),i("div",ur,[e("div",dr,[e("label",cr,s(t(a)("admin.users.staffPermissions.title")),1),e("button",{type:"button",class:"btn btn-secondary btn-sm","data-test":"staff-preset-btn",onClick:f},s(t(a)("admin.users.staffPermissions.applyPreset")),1)]),e("p",mr,s(t(a)("admin.users.staffPermissions.hint")),1),e("div",pr,[(r(!0),i(Z,null,ae(t(_a),Y=>(r(),i("div",{key:Y.domain,class:"flex items-center gap-4"},[e("span",fr,s(t(a)("admin.users.staffPermissions.domains."+Y.domain)),1),(r(!0),i(Z,null,ae(Y.perms,D=>(r(),i("label",{key:D,class:"flex items-center gap-1.5 text-sm"},[e("input",{type:"checkbox",class:"checkbox",checked:S.value.has(D),"data-test":"perm-"+D,onChange:se=>b(D)},null,40,vr),te(" "+s(t(a)(D.endsWith(":read")?"admin.users.staffPermissions.read":"admin.users.staffPermissions.write")),1)]))),128))]))),128))])])):R("",!0),e("div",null,[e("label",br,s(t(a)("admin.users.notes")),1),F(e("textarea",{"onUpdate:modelValue":c[4]||(c[4]=Y=>y.notes=Y),rows:"3",class:"input"},null,512),[[X,y.notes]])]),e("div",null,[e("label",yr,s(t(a)("admin.users.columns.concurrency")),1),F(e("input",{"onUpdate:modelValue":c[5]||(c[5]=Y=>y.concurrency=Y),type:"number",min:"0",step:"1",class:"input",placeholder:t(a)("admin.users.form.concurrencyPlaceholder"),"data-test":"concurrency-input"},null,8,gr),[[X,y.concurrency,void 0,{number:!0}]]),e("p",hr,s(t(a)("admin.users.form.concurrencyHint")),1)]),e("div",null,[e("label",_r,s(t(a)("admin.users.form.rpmLimit")),1),F(e("input",{"onUpdate:modelValue":c[6]||(c[6]=Y=>y.rpm_limit=Y),type:"number",min:"0",step:"1",class:"input",placeholder:t(a)("admin.users.form.rpmLimitPlaceholder")},null,8,xr),[[X,y.rpm_limit,void 0,{number:!0}]]),e("p",kr,s(t(a)("admin.users.form.rpmLimitHint")),1)]),H.value?(r(),i("div",wr,[e("div",$r,[e("label",Cr,s(t(a)("admin.consumptionTier.title")),1),e("span",Sr,
1s(t(a)("tier.growthLabel"))+" ¥"+s(H.value.growth_value.toFixed(2)),1)]),e("div",Ur,[A(Ue,{modelValue:ee.value,"onUpdate:modelValue":c[7]||(c[7]=Y=>ee.value=Y),"data-test":"tier-select",options:K.value,searchable:!1,class:"flex-1"},null,8,["modelValue","options"]),e("button",{type:"button","data-test":"tier-save",class:"btn btn-secondary",disabled:!p.value,onClick:P},s(t(a)("common.save")),9,Ar)]),e("p",Vr,s(H.value.manual_tier_key?t(a)("admin.users.tierPinnedHint",{tier:H.value.manual_tier_key}):t(a)("admin.users.tierAutoHint",{tier:H.value.tier_key})),1)])):R("",!0),A(Xo,{modelValue:y.customAttributes,"onUpdate:modelValue":c[8]||(c[8]=Y=>y.customAttributes=Y),"user-id":(G=w.user)==null?void 0:G.id},null,8,["modelValue","user-id"])],32)):R("",!0)]}),_:1},8,["show","title"]),A(ys,{controller:t(q)},null,8,["controller"])],64))}}),Rr={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Ir={class:"divide-y divide-gray-200 border-y border-gray-200 dark:divide-dark-700 dark:border-dark-700"},Pr={class:"space-y-3 py-4"},Lr={class:"flex items-center justify-between gap-4"},Nr={for:"bulk-concurrency",class:"input-label mb-0"},zr={class:"space-y-3 py-4"},Dr={class:"flex items-center justify-between gap-4"},Tr={for:"bulk-rpm-limit",class:"input-label mb-0"},Or={key:0},Fr={key:0,class:"input-hint"},Br={key:0,class:"text-sm text-red-600 dark:text-red-400"},Hr={key:1,class:"text-sm text-red-600 dark:text-red-400"},jr={class:"flex justify-end gap-3"},Kr=["disabled"],ls=500,Qr=de({__name:"BulkEditUserModal",props:{show:{type:Boolean},selectedIds:{}},emits:["close","success"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=h(!1),v=h(!1),$=h(""),E=h(""),y=h(!1),S=K=>{const p=String(K).trim();if(!p)return;const P=Number(p);return!Number.isInteger(P)||P<0?null:P},b=j(()=>x.value?S($.value):void 0),f=j(()=>v.value?S(E.value):void 0),M=j(()=>b.value===null||f.value===null),m=j(()=>b.value!==void 0&&b.value!==null||f.value!==void 0&&f.value!==null),q=j(()=>u.selectedIds.length>ls),H=j(()=>u.selectedIds.length>0&&!q.value&&m.value&&!M.value&&!y.value),J=()=>{x.value=!1,v.value=!1,$.value="",E.value="",y.value=!1};be(()=>u.show,K=>{K&&J()});const ee=async()=>{if(!H.value)return;const K={user_ids:[...u.selectedIds],all:!1},p=[];if(b.value!==void 0&&b.value!==null&&(K.concurrency=b.value,p.push(a("admin.users.bulkLimits.concurrencyValue",{value:b.value}))),f.value!==void 0&&f.value!==null&&(K.rpm_limit=f.value,p.push(f.value===0?a("admin.users.bulkLimits.rpmUnlimitedValue"):a("admin.users.bulkLimits.rpmValue",{value:f.value}))),!!window.confirm(a("admin.users.bulkLimits.confirm",{count:u.selectedIds.length,fields:p.join(", ")}))){y.value=!0;try{const C=await W.users.batchUpdateLimits(K);I.showSuccess(a("admin.users.bulkLimits.success",{count:C.affected})),z("success",C.affected),z("close")}catch(C){I.showError(he(C,a("admin.users.bulkLimits.failed")))}finally{y.value=!1}}};return(K,p)=>(r(),ie(ke,{show:w.show,title:t(a)("admin.users.bulkLimits.title"),width:"normal",onClose:p[5]||(p[5]=P=>z("close"))},{footer:O(()=>[e("div",jr,[e("button",{type:"button",class:"btn btn-secondary",onClick:p[4]||(p[4]=P=>z("close"))},s(t(a)("common.cancel")),1),e("button",{type:"submit",form:"bulk-edit-user-limits-form",class:"btn btn-primary",disabled:!H.value,"data-test":"submit"},s(y.value?t(a)("admin.users.bulkLimits.applying"):t(a)("admin.users.bulkLimits.apply")),9,Kr)])]),default:O(()=>[e("form",{id:"bulk-edit-user-limits-form",class:"space-y-5",onSubmit:Se(ee,["prevent"])},[e("p",Rr,s(t(a)("admin.users.bulkLimits.selectedCount",{count:w.selectedIds.length})),1),e("div",Ir,[e("div",Pr,[e("div",Lr,[e("label",Nr,s(t(a)("admin.users.columns.concurrency")),1),A(es,{modelValue:x.value,"onUpdate:modelValue":p[0]||(p[0]=P=>x.value=P),"aria-label":t(a)("admin.users.bulkLimits.enableConcurrency"),"data-test":"enable-concurrency"},null,8,["modelValue","aria-label"])]),x.value?F((r(),i("input",{key:0,id:"bulk-concurrency","onUpdate:modelValue":p[1]||(p[1]=P=>$.value=P),type:"number",min:"0",step:"1",class:"input","data-test":"concurrency-input"},null,512)),[[X,$.value]]):R("",!0)]),e("div",zr,[e("div",Dr,[e("label",Tr,s(t(a)("admin.users.form.rpmLimit")),1),A(es,{modelValue:v.value,"onUpdate:modelValue":p[2]||(p[2]=P=>v.value=P),"aria-label":t(a)("admin.users.bulkLimits.enableRPMLimit"),"data-test":"enable-rpm-limit"},null,8,["modelValue","aria-label"])]),v.value?(r(),i("div",Or,[F(e("input",{id:"bulk-rpm-limit","onUpdate:modelValue":p[3]||(p[3]=P=>
1E.value=P),type:"number",min:"0",step:"1",class:"input","data-test":"rpm-limit-input"},null,512),[[X,E.value]]),f.value===0?(r(),i("p",Fr,s(t(a)("admin.users.bulkLimits.unlimited")),1)):R("",!0)])):R("",!0)])]),M.value?(r(),i("p",Br,s(t(a)("admin.users.bulkLimits.nonNegativeInteger")),1)):R("",!0),q.value?(r(),i("p",Hr,s(t(a)("admin.users.bulkLimits.selectionLimit",{max:ls})),1)):R("",!0)],32)]),_:1},8,["show","title"]))}}),qr={key:0,class:"space-y-4"},Wr={key:0,class:"rounded-xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200"},Yr={class:"text-sm text-gray-600 dark:text-gray-400"},Jr={key:1,class:"py-10 text-center text-gray-500"},Zr={key:2,class:"overflow-x-auto"},Xr={class:"min-w-full text-sm"},en={class:"border-b border-gray-200 text-gray-700 dark:border-dark-700 dark:text-gray-300"},tn={class:"px-3 py-2 text-left font-medium"},sn={class:"px-3 py-2 text-left font-medium"},an={class:"px-3 py-2 text-left font-medium"},ln={class:"px-3 py-2 text-left font-medium"},on={class:"px-3 py-2 text-left font-medium"},rn={class:"px-3 py-2 font-mono text-gray-900 dark:text-white"},nn={class:"px-3 py-2"},un={class:"flex items-center gap-1"},dn=["onUpdate:modelValue","placeholder"],cn=["disabled","title","onClick"],mn={class:"px-3 py-2"},pn={class:"flex items-center gap-1"},fn=["onUpdate:modelValue","placeholder"],vn=["disabled","title","onClick"],bn={class:"px-3 py-2"},yn={class:"flex items-center gap-1"},gn=["onUpdate:modelValue","placeholder"],hn=["disabled","title","onClick"],_n={class:"px-3 py-2 text-xs text-gray-500 dark:text-gray-400"},xn={class:"mt-3 text-xs text-gray-500"},kn={class:"mt-3"},wn={class:"flex justify-end gap-3"},$n=["disabled"],Cn=de({__name:"UserPlatformQuotaModal",props:{show:{type:Boolean},user:{}},emits:["close","success"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=j(()=>{var p,P;return((P=(p=u.user)==null?void 0:p.subscriptions)==null?void 0:P.some(C=>C.status==="active"))??!1}),v=h(!1),$=h(!1),E=xe({}),y=h([]),S=h(new Set);function b(p){const P=new Set;for(const C of p)(C.daily_limit_usd!=null||C.weekly_limit_usd!=null||C.monthly_limit_usd!=null)&&P.add(C.platform);return P}function f(p){return{platform:p,daily_limit_usd:null,weekly_limit_usd:null,monthly_limit_usd:null,daily_usage_usd:0,weekly_usage_usd:0,monthly_usage_usd:0}}function M(p){const P=new Map;for(const C of p)P.set(C.platform,C);return Zt().map(C=>{const g=P.get(C);return g?{platform:C,daily_limit_usd:g.daily_limit_usd??null,weekly_limit_usd:g.weekly_limit_usd??null,monthly_limit_usd:g.monthly_limit_usd??null,daily_usage_usd:g.daily_usage_usd??0,weekly_usage_usd:g.weekly_usage_usd??0,monthly_usage_usd:g.monthly_usage_usd??0}:f(C)})}function m(p){return p==null||Number.isNaN(p)?"-":p.toFixed(2)}async function q(){if(u.user){v.value=!0;try{const p=await W.users.getPlatformQuotas(u.user.id);y.value=M(p.platform_quotas||[]),S.value=b(p.platform_quotas||[])}catch{I.showError(a("admin.users.platformQuota.loadFailed")),y.value=Zt().map(f),S.value=new Set}finally{v.value=!1}}}be(()=>u.show,p=>{p&&u.user&&q()});function H(){if(window.confirm(a("admin.users.platformQuota.clearAllConfirm")))for(const P of y.value)P.daily_limit_usd=null,P.weekly_limit_usd=null,P.monthly_limit_usd=null}async function J(){var P,C;if(!u.user)return;const p=[];for(const g of y.value)for(const c of["daily","weekly","monthly"]){const G=g[`${c}_limit_usd`];typeof G=="number"&&(!Number.isFinite(G)||G<0)&&p.push(`${g.platform}.${c}`)}if(p.length>0){I.showError(a("admin.users.platformQuota.invalidNumber",{fields:p.join(", ")}));return}$.value=!0;try{const g=y.value.map(c=>({platform:c.platform,daily_limit_usd:ee(c.daily_limit_usd),weekly_limit_usd:ee(c.weekly_limit_usd),monthly_limit_usd:ee(c.monthly_limit_usd)}));await W.users.updatePlatformQuotas(u.user.id,g),I.showSuccess(a("admin.users.platformQuota.updateSuccess")),z("success"),z("close")}catch(g){I.showError(((C=(P=g==null?void 0:g.response)==null?void 0:P.data)==null?void 0:C.message)||a("admin.users.platformQuota.updateFailed"))}finally{$.value=!1}}function ee(p){return p==null?null:typeof p=="number"&&Number.isFinite(p)&&p>=0?p:null}async function K(p,P){var G,Y;if(!u.user)return;const C=a(`admin.users.platformQuota.window${P.charAt(0).toUpperCase()+P.slice(1)}`);if(!window.confirm(a("admin.users.platformQuota.reset.confirm",{platform:p,window:C})))return;const c=`${p}.${P}`;E[c]=!0;try{const D=await W.users.resetPlatformQuotaWindow(u.user.id,p,P);y.value=M(D.platform_quotas||[]),S.value=b(D.platform_quotas||[]),I.showSuccess(a("admin.users.platformQuota.reset.success",{platform:p,window:C}))}catch(D){I.showError(((Y=(G=D==null?void 0:D.response)==null?void 0:G.data)==null?void 0:Y.message)||a("admin.users.platformQuota.reset.failed"))}finally{E[c]=!1}}return(p,P)=>(r(),ie(ke,{show:w.show,title:t(a)("admin.users.platformQuota.title"),width:"wide",onClose:P[1]||(P[1]=C=>p.$emit("close"))},{footer:O(()=>[e("div",wn,[e("button",{type:"button",class:"btn btn-secondary",onClick:P[0]||(P[0]=C=>p.$emit("close"))},s(t(a)("admin.users.platformQuota.cancel")),1),e("button",{type:"button",class:"btn btn-primary",disabled:$.value||v.value,onClick:J},s($.value?t(a)("admin.users.platformQuota.saving"):t(a)("admin.users.platformQuota.save")),9,$n)])]),default:O(()=>[w.user?(r(),i("div",qr,[x.value?(r(),i("div",Wr,s(t(a)("admin.users.platformQuota.subscriptionWarning")),1)):R("",!0),e("p",Yr,s(t(a)("admin.users.platformQuota.subtitle",{email:w.user.email})),1),v.value?(r(),i("div",Jr,s(t(a)("common.loading")),1)):(r(),i("div",Zr,[e("table",Xr,[e("thead",null,[e("tr",en,[e("th",tn,s(t(a)("admin.users.platformQuota.columns.platform")),1),e("th",sn,s(t(a)("admin.users.platformQuota.columns.daily")),1),e("th",an,s(t(a)("admin.users.platformQuota.columns.weekly")),1),e("th",ln,s(t(a)("admin.users.platformQuota.columns.monthly")),1),e("th",on,s(t(a)("admin.users.platformQuota.columns.usage")),1)])]),e("tbody",null,[(r(!0),i(Z,null,ae(y.value,C=>(r(),i("tr",{key:C.platform,class:"border-b border-gray-100 dark:border-dark-800"},[e("td",rn,s(C.platform),1),e("td",nn,[e("div",un,[F(e("input",{"onUpdate:modelValue":g=>C.daily_limit_usd=g,type:"number",min:"0",step:"0.01",class:"input w-24",placeholder:t(a)("admin.users.platformQuota.placeholder")},null,8,dn),[[X,C.daily_limit_usd,void 0,{number:!0}]]),e("button",{type:"button",class:"text-xs text-gray-400 hover:text-amber-500 disabled:opacity-50",disabled:!!E[`${C.platform}.daily`]||!S.value.has(C.platform),title:t(a)(S.value.has(C.platform)?"admin.users.platformQuota.reset.button":"admin.users.platformQuota.reset.unavailable"),onClick:g=>K(C.platform,"daily")},"↻",8,cn)])]),e("td",mn,[e("div",pn,[F(e("input",{"onUpdate:modelValue":g=>C.weekly_limit_usd=g,type:"number",min:"0",step:"0.01",class:"input w-24",placeholder:t(a)("admin.users.platformQuota.placeholder")},null,8,fn),[[X,C.weekly_limit_usd,void 0,{number:!0}]]),e("button",{type:"button",class:"text-xs text-gray-400 hover:text-amber-500 disabled:opacity-50",disabled:!!E[`${C.platform}.weekly`]||!S.value.has(C.platform),title:t(a)(S.value.has(C.platform)?"admin.users.platformQuota.reset.button":"admin.users.platformQuota.reset.unavailable"),onClick:g=>K(C.platform,"weekly")},"↻",8,vn)])]),e("td",bn,[e("div",yn,[F(e("input",{"onUpdate:modelValue":g=>C.monthly_limit_usd=g,type:"number",min:"0",step:"0.01",class:"input w-24",placeholder:t(a)("admin.users.platformQuota.placeholder")},null,8,gn),[[X,C.monthly_limit_usd,void 0,{number:!0}]]),e("button",{type:"button",class:"text-xs text-gray-400 hover:text-amber-500 disabled:opacity-50",disabled:!!E[`${C.platform}.monthly`]||!S.value.has(C.platform),title:t(a)(S.value.has(C.platform)?"admin.users.platformQuota.reset.button":"admin.users.platformQuota.reset.unavailable"),onClick:g=>K(C.platform,"monthly")},"↻",8,hn)])]),e("td",_n,s(m(C.daily_usage_usd))+" / "+s(m(C.weekly_usage_usd))+" / "+s(m(C.monthly_usage_usd)),1)]))),128))])]),e("p",xn,s(t(a)("admin.users.platformQuota.hint")),1),e("div",kn,[e("button",{type:"button",class:"btn btn-secondary text-sm",onClick:H},s(t(a)("admin.users.platformQuota.clearAll")),1)])]))])):R("",!0)]),_:1},8,["show","title"]))}}),Sn={class:"space-y-2"},Un={class:"flex items-center justify-between gap-2"},An={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Vn=["disabled"],En=de({__name:"ApiKeyModelWhitelistEditor",props:{modelValue:{},groupId:{},platform:{}},emits:["update:modelValue"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=h([]),x=h(!1),v=La(),$=j({get:()=>u.modelValue??[],set:y=>z("update:modelValue",y)}),E=async y=>{if(y==null){I.value=[];return}const S=u.platform??"",b={mode:"edit",groupID:y,platform:S},f=v.next(b);x.value=!0;try{const M=await W.groups.getModelAllowlistCandidates(y,u.platform);if(!v.isCurrent(f,b))return;I.value=M}catch{v.isCurrent(f,b)&&(I.value=[])}finally{v.isCurrent(f,b)&&(x.value=!1)}};return be(()=>u.groupId,y=>void E(y),{immediate:!0}),(y,S)=>(r(),i("div",Sn,[e("div",Un,[e("span",An,s(t(a)("keys.modelRestrictionLabel")),1),e("button",{type:"button","data-testid":"admin-model-whitelist-unrestrict",class:"text-xs font-medium text-primary-600 hover:text-primary-700 disabled:cursor-not-allowed disabled:text-gray-400 dark:text-primary-400 dark:hover:text-primary-300 dark:disabled:text-dark-500",disabled:$.value.length===0,onClick:S[0]||(S[0]=b=>$.value=[])},s(t(a)("keys.modelRestrictionUnrestrict")),9,Vn)]),A(Pa,{modelValue:$.value,"onUpdate:modelValue":S[1]||(S[1]=b=>$.value=b),candidates:I.value,loading:x.value},null,8,["modelValue","candidates","loading"])]))}}),Mn={key:0,class:"space-y-4"},Gn={class:"flex items-center gap-3 rounded-xl bg-gray-50 p-4 dark:bg-dark-700"},Rn={class:"flex h-10 w-10 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900/30"},In={class:"text-lg font-medium text-primary-700 dark:text-primary-300"},Pn={class:"font-medium text-gray-900 dark:text-white"},Ln={class:"text-sm text-gray-500 dark:text-dark-400"},Nn={key:0,class:"flex justify-center py-8"},zn={key:1,class:"py-8 text-center"},Dn={class:"text-sm text-gray-500"},Tn={class:"flex items-start justify-between"},On={class:"min-w-0 flex-1"},Fn={class:"mb-1 flex items-center gap-2"},Bn={class:"font-medium text-gray-900 dark:text-white"},Hn={class:"truncate font-mono text-sm text-gray-500"},jn={class:"mt-3 flex flex-wrap gap-4 text-xs text-gray-500"},Kn={class:"flex items-center gap-1"},Qn=["onClick","disabled"],qn={key:1,class:"text-gray-400 italic"},Wn={key:2,class:"h-3 w-3 animate-spin text-primary-500",fill:"none",viewBox:"0 0 24 24"},Yn={key:3,class:"h-3 w-3 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"2"},Jn={class:"flex items-center gap-1"},Zn={class:"flex items-center gap-1"},Xn=["onClick"],ei={key:0,class:"mt-3 space-y-2"},ti=["disabled"],si={class:"flex items-center justify-end gap-2"},ai=["onClick"],li=["disabled","onClick"],oi={class:"border-b border-gray-100 p-2 dark:border-dark-700"},ri={class:"relative"},ni=["placeholder"],ii={class:"max-h-80 overflow-y-auto overscroll-contain p-1.5"},ui={class:"text-gray-500 italic"},di={key:0,class:"ml-auto h-4 w-4 shrink-0 text-primary-600 dark:text-primary-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"2"},ci=["data-group-id","title","onClick"],mi={key:0,"data-testid":"group-search-empty",class:"py-4 text-center text-sm text-gray-400 dark:text-gray-500"},pi=1e3,os=20,rs=8,fi=380,vi=380,ns=4,Ke=8,bi=de({__name:"UserApiKeysModal",props:{show:{type:Boolean},user:{}},emits:["close"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=vs(),v=j(()=>x.hasPerm("keys:write")),$=h([]),E=h([]),y=h(!1);let S=0;const b=h(new Set),f=h(null),M=h(null),m=h(null),q=h(null),H=h(""),J=h(null),ee=h(new Map),K=h(new Set),p=h({}),P=k=>k?k.length<=os+rs?k:`${k.substring(0,os)}...${k.substring(k.length-rs)}`:"",C=k=>{var N;return((N=k.model_whitelist)==null?void 0:N.length)??0},g=k=>{const N=C(k);return N===0?a("admin.users.modelWhitelistUnlimited"):a("admin.users.modelWhitelistCount",{n:N})},c=k=>{const N=new Set(K.value);N.has(k.id)?N.delete(k.id):(N.add(k.id),p.value[k.id]=[...k.model_whitelist??[]]),K.value=N},G=k=>{const N=p.value[k.id]??[],T=k.model_whitelist??[];if(N.length!==T.length)return!0;const le=new Set(T);return N.some(V=>!le.has(V))},Y=k=>{const N=new Set(K.value);N.delete(k.id),K.value=N,delete p.value[k.id]},D=async k=>{const N=p.value[k.id]??[];b.value.add(k.id);try{const T=await W.apiKeys.updateApiKeyModelWhitelist(k.id,N),le=$.value.findIndex(V=>V.id===k.id);le!==-1&&($.value[le]=T.api_key),Y(k),I.showSuccess(a("admin.users.modelWhitelistUpdated"))}catch(T){I.showError((T==null?void 0:T.message)||a("admin.users.modelWhitelistUpdateFailed"))}finally{b.value.delete(k.id)}},se=j(()=>f.value===null?null:$.value.find(k=>k.id===f.value)||null),Ge=(k,N)=>{N instanceof HTMLElement?ee.value.set(k,N):ee.value.delete(k)};be(()=>{var k;return[u.show,(k=u.user)==null?void 0:k.id]},([k],N,T)=>{T(()=>{S++}),$e(),k&&u.user?(De(),v.value&&Ee()):($e(),K.value=new Set,p.value={})});const De=async()=>
1{if(!u.user)return;const k=++S;$.value=[],y.value=!0,ee.value.clear();try{const N=await W.users.getUserApiKeys(u.user.id);k===S&&($.value=N.items||[])}catch(N){if(k!==S)return;console.error("Failed to load API keys:",N)}finally{k===S&&(y.value=!1)}},Ee=async()=>{try{const k=await W.groups.list(1,pi,{status:"active"});E.value=k.items||[]}catch(k){console.error("Failed to load groups:",k)}},Te=j(()=>{const k=H.value.trim().toLowerCase();if(!k)return E.value;const N=/^\d+$/.test(k)?Number(k):null;return E.value.filter(T=>{var le,V;return N!==null&&T.id===N||T.name.toLowerCase().includes(k)||(((le=T.description)==null?void 0:le.toLowerCase().includes(k))??!1)||(((V=T.platform)==null?void 0:V.toLowerCase().includes(k))??!1)})}),Be=k=>{if(v.value)if(f.value===k.id)$e();else{const N=ee.value.get(k.id);if(N){const T=N.getBoundingClientRect(),le=window.innerHeight-T.bottom,V=le<fi&&T.top>le,ye=Math.min(vi,window.innerWidth-Ke*2),ce=Math.max(Ke,Math.min(T.left,window.innerWidth-ye-Ke));M.value=V?{bottom:window.innerHeight-T.top+ns,left:ce}:{top:T.bottom+ns,left:ce}}H.value="",f.value=k.id,va(()=>{var V;const T=m.value,le=M.value;if(T&&le){const ye=window.innerWidth-T.offsetWidth-Ke;le.left>ye&&(le.left=Math.max(Ke,ye))}(V=q.value)==null||V.focus()})}},$e=()=>{f.value=null,M.value=null,H.value=""},_e=async(k,N)=>{if($e(),!(k.group_id===N||!k.group_id&&N===null)){b.value.add(k.id);try{const T=await W.apiKeys.updateApiKeyGroup(k.id,N),le=$.value.findIndex(V=>V.id===k.id);le!==-1&&($.value[le]=T.api_key),T.auto_granted_group_access&&T.granted_group_name?I.showSuccess(a("admin.users.groupChangedWithGrant",{group:T.granted_group_name})):I.showSuccess(a("admin.users.groupChangedSuccess"))}catch(T){I.showError((T==null?void 0:T.message)||a("admin.users.groupChangeFailed"))}finally{b.value.delete(k.id)}}},We=k=>{k.key==="Escape"&&f.value!==null&&(k.stopPropagation(),$e())},Ye=k=>{const N=k.target;if(m.value&&!m.value.contains(N)){for(const T of ee.value.values())if(T.contains(N))return;$e()}},ut=()=>{$e(),z("close")};return Dt(()=>{document.addEventListener("click",Ye),document.addEventListener("keydown",We,!0)}),ms(()=>{document.removeEventListener("click",Ye),document.removeEventListener("keydown",We,!0)}),(k,N)=>{var T,le;return r(),i(Z,null,[A(ke,{show:w.show,title:t(a)("admin.users.userApiKeys"),width:"wide",onClose:ut},{default:O(()=>[w.user?(r(),i("div",Mn,[e("div",Gn,[e("div",Rn,[e("span",In,s(w.user.email.charAt(0).toUpperCase()),1)]),e("div",null,[e("p",Pn,s(w.user.email),1),e("p",Ln,s(w.user.username),1)])]),y.value?(r(),i("div",Nn,[...N[2]||(N[2]=[e("svg",{class:"h-8 w-8 animate-spin text-primary-500",fill:"none",viewBox:"0 0 24 24"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1)])])):$.value.length===0?(r(),i("div",zn,[e("p",Dn,s(t(a)("admin.users.noApiKeys")),1)])):(r(),i("div",{key:2,ref_key:"scrollContainerRef",ref:J,class:"max-h-96 space-y-3 overflow-y-auto overscroll-contain",onScroll:$e},[(r(!0),i(Z,null,ae($.value,V=>{var ye;return r(),i("div",{key:V.id,class:"rounded-xl border border-gray-200 bg-white p-4 dark:border-dark-600 dark:bg-dark-800"},[e("div",Tn,[e("div",On,[e("div",Fn,[e("span",Bn,s(V.name),1),e("span",{class:oe(["badge text-xs",V.status==="active"?"badge-success":"badge-danger"])},s(V.status),3)]),e("p",Hn,s(P(V.key)),1)])]),e("div",jn,[e("div",Kn,[e("span",null,s(t(a)("admin.users.group"))+":",1),e("button",{ref_for:!0,ref:ce=>Ge(V.id,ce),"data-testid":"group-trigger",onClick:ce=>Be(V),class:oe(["-mx-1 -my-0.5 flex items-center gap-1 rounded-md px-1 py-0.5 transition-colors",v.value?"cursor-pointer hover:bg-gray-100 dark:hover:bg-dark-700":"cursor-default"]),disabled:b.value.has(V.id)||!v.value},[V.group_id&&V.group?(r(),ie(bs,{key:0,name:V.group.name,platform:V.group.platform,"subscription-type":V.group.subscription_type,"rate-multiplier":V.group.rate_multiplier,"peak-rate-enabled":V.group.peak_rate_enabled,"peak-start":V.group.peak_start,"peak-end":V.group.peak_end,"peak-rate-multiplier":V.group.peak_rate_multiplier},null,8,["name","platform","subscription-type","rate-multiplier","peak-rate-enabled","peak-start","peak-end","peak-rate-multiplier"])):(r(),i("span",qn,s(t(a)("admin.users.none")),1)),b.value.has(V.id)?(r(),i("svg",Wn,[...N[3]||(N[3]=[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])])):(r(),i("svg",Yn,[...N[4]||(N[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9"},null,-1)])]))],10,Qn)]),e("div",Jn,[e("span",null,s(t(a)("admin.users.columns.created"))+": "+s(t(qe)(V.created_at)),1)]),e("div",Zn,[e("span",null,s(t(a)("keys.modelWhitelistLabel"))+":",1),v.value?(r(),i("button",{key:0,t
1ype:"button","data-testid":"model-whitelist-chip",class:oe(["-mx-1 -my-0.5 cursor-pointer rounded-md px-1 py-0.5 transition-colors hover:bg-gray-100 dark:hover:bg-dark-700",C(V)>0?"text-amber-600 dark:text-amber-400":"text-gray-400"]),onClick:ce=>c(V)},s(g(V)),11,Xn)):(r(),i("span",{key:1,"data-testid":"model-whitelist-chip-readonly",class:oe(C(V)>0?"text-amber-600 dark:text-amber-400":"text-gray-400")},s(g(V)),3))])]),K.value.has(V.id)?(r(),i("div",ei,[e("fieldset",{"data-testid":"model-whitelist-editor-fieldset",class:"min-w-0 border-0 p-0 disabled:opacity-60",disabled:b.value.has(V.id)},[A(En,{modelValue:p.value[V.id],"onUpdate:modelValue":ce=>p.value[V.id]=ce,"group-id":V.group_id??null,platform:(ye=V.group)==null?void 0:ye.platform},null,8,["modelValue","onUpdate:modelValue","group-id","platform"])],8,ti),e("div",si,[e("button",{type:"button",class:"btn btn-sm btn-secondary",onClick:ce=>Y(V)},s(t(a)("common.cancel")),9,ai),e("button",{type:"button",class:"btn btn-sm btn-primary","data-testid":"model-whitelist-save",disabled:!G(V)||b.value.has(V.id),onClick:ce=>D(V)},s(t(a)("common.save")),9,li)])])):R("",!0)])}),128))],544))])):R("",!0)]),_:1},8,["show","title"]),(r(),ie(ps,{to:"body"},[f.value!==null&&M.value?(r(),i("div",{key:0,ref_key:"dropdownRef",ref:m,"data-testid":"group-selector-dropdown",class:"animate-in fade-in slide-in-from-top-2 fixed z-[100000020] w-max max-w-[calc(100vw-16px)] overflow-hidden rounded-xl bg-white shadow-lg ring-1 ring-black/5 duration-200 sm:min-w-[380px] sm:max-w-[480px] dark:bg-dark-800 dark:ring-white/10",style:fs({top:M.value.top!==void 0?M.value.top+"px":void 0,bottom:M.value.bottom!==void 0?M.value.bottom+"px":void 0,left:M.value.left+"px"})},[e("div",oi,[e("div",ri,[N[5]||(N[5]=e("svg",{class:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"2"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})],-1)),F(e("input",{ref_key:"groupSearchInputRef",ref:q,"onUpdate:modelValue":N[0]||(N[0]=V=>H.value=V),type:"text","data-testid":"group-search-input",class:"w-full rounded-lg border border-gray-200 bg-gray-50 py-1.5 pl-8 pr-3 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-primary-300 focus:ring-1 focus:ring-primary-300 dark:border-dark-600 dark:bg-dark-700 dark:text-white dark:placeholder-gray-500 dark:focus:border-primary-600 dark:focus:ring-primary-600",placeholder:t(a)("admin.users.searchGroups")},null,8,ni),[[X,H.value]])])]),e("div",ii,[e("button",{"data-testid":"group-option-none",onClick:N[1]||(N[1]=V=>_e(se.value,null)),class:oe(["flex w-full items-center rounded-lg px-3 py-2 text-sm transition-colors",(T=se.value)!=null&&T.group_id?"hover:bg-gray-100 dark:hover:bg-dark-700":"bg-primary-50 dark:bg-primary-900/20"])},[e("span",ui,s(t(a)("admin.users.none")),1),(le=se.value)!=null&&le.group_id?R("",!0):(r(),i("svg",di,[...N[6]||(N[6]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"},null,-1)])]))],2),(r(!0),i(Z,null,ae(Te.value,V=>{var ye,ce;return r(),i("button",{key:V.id,"data-testid":"group-option","data-group-id":V.id,title:V.description?`${V.name}
2${V.description}`:V.name,onClick:dt=>_e(se.value,V.id),class:oe(["flex w-full items-center justify-between rounded-lg px-3 py-2 text-sm transition-colors",((ye=se.value)==null?void 0:ye.group_id)===V.id?"bg-primary-50 dark:bg-primary-900/20":"hover:bg-gray-100 dark:hover:bg-dark-700"])},[A(Ia,{name:V.name,platform:V.platform,"subscription-type":V.subscription_type,"rate-multiplier":V.rate_multiplier,"peak-rate-enabled":V.peak_rate_enabled,"peak-start":V.peak_start,"peak-end":V.peak_end,"peak-rate-multiplier":V.peak_rate_multiplier,description:V.description,selected:((ce=se.value)==null?void 0:ce.group_id)===V.id},null,8,["name","platform","subscription-type","rate-multiplier","peak-rate-enabled","peak-start","peak-end","peak-rate-multiplier","description","selected"])],10,ci)}),128)),Te.value.length===0?(r(),i("div",mi,s(t(a)("admin.users.noMatchingGroups")),1)):R("",!0)])],4)):R("",!0)]))],64)}}}),yi={key:0,class:"space-y-6"}
2,gi={class:"flex items-center gap-4 rounded-2xl bg-gradient-to-r from-primary-50 to-primary-100 p-5 dark:from-primary-900/30 dark:to-primary-800/20"},hi={class:"flex h-14 w-14 items-center justify-center rounded-full bg-white shadow-sm dark:bg-dark-700"},_i={class:"text-2xl font-semibold text-primary-600 dark:text-primary-400"},xi={class:"flex-1"},ki={class:"text-lg font-semibold text-gray-900 dark:text-white"},wi={class:"mt-1 text-sm text-gray-600 dark:text-gray-400"},$i={key:0,class:"flex justify-center py-12"},Ci={key:1,class:"space-y-6"},Si={key:0},Ui={class:"mb-3 flex items-center gap-2"},Ai={class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},Vi={class:"text-xs text-gray-400"},Ei={class:"grid gap-3"},Mi={class:"flex items-center gap-4"},Gi={class:"flex-shrink-0"},Ri={class:"relative flex h-6 w-6 cursor-pointer items-center justify-center"},Ii=["checked","onChange"],Pi={class:"h-5 w-5 rounded-md border-2 border-gray-300 transition-all peer-checked:border-primary-500 peer-checked:bg-primary-500 dark:border-dark-500 peer-checked:dark:border-primary-500"},Li={key:0,class:"h-full w-full text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"3"},Ni={class:"min-w-0 flex-1"},zi={class:"flex items-center gap-2"},Di={class:"text-base font-semibold text-gray-900 dark:text-white"},Ti={class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-900/40 dark:text-purple-300"},Oi={class:"mt-1.5 flex items-center gap-3 text-sm"},Fi={class:"inline-flex items-center gap-1 text-gray-500 dark:text-gray-400"},Bi={class:"text-gray-500 dark:text-gray-400"},Hi={class:"font-medium text-gray-700 dark:text-gray-300"},ji={class:"flex flex-shrink-0 items-center gap-3"},Ki={class:"text-sm font-medium text-gray-600 dark:text-gray-400"},Qi=["value","onInput","placeholder"],qi={key:1},Wi={class:"mb-3 flex flex-wrap items-center gap-2"},Yi={class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},Ji={class:"text-xs text-gray-400"},Zi={class:"ml-auto flex cursor-pointer items-center gap-2 text-sm text-gray-600 dark:text-gray-400"},Xi=["checked"],eu={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},tu={class:"grid gap-3"},su={class:"flex items-center gap-4"},au={class:"flex-shrink-0"},lu=["checked","onChange"],ou={key:1,class:"flex h-5 w-5 items-center justify-center rounded-md border-2 border-green-400 bg-green-500 dark:border-green-600 dark:bg-green-600"},ru={class:"min-w-0 flex-1"},nu={class:"flex items-center gap-2"},iu={class:"text-base font-semibold text-gray-900 dark:text-white"},uu={class:"mt-1.5 flex items-center gap-3 text-sm"},du={class:"inline-flex items-center gap-1 text-gray-500 dark:text-gray-400"},cu={class:"text-gray-500 dark:text-gray-400"},mu={class:"font-medium text-gray-700 dark:text-gray-300"},pu={class:"flex flex-shrink-0 items-center gap-3"},fu={class:"text-sm font-medium text-gray-600 dark:text-gray-400"},vu=["value","onInput","placeholder"],bu={key:2,class:"flex flex-col items-center justify-center py-12 text-center"},yu={class:"text-gray-500 dark:text-gray-400"},gu={class:"flex justify-end gap-3"},hu=["disabled"],_u={key:0,class:"-ml-1 mr-2 h-4 w-4 animate-spin",fill:"none",viewBox:"0 0 24 24"},xu=de({__name:"UserAllowedGroupsModal",props:{show:{type:Boolean},user:{}},emits:["close","success"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=h([]),v=h([]),$=h({}),E=h(!1),y=h(!1),S=h(!1),b=h(!1),f=j(()=>x.value.filter(C=>C.is_exclusive)),M=j(()=>x.value.filter(C=>!C.is_exclusive)),m=j(()=>v.value.filter(C=>C.isExclusive)),q=j(()=>v.value.filter(C=>!C.isExclusive));be(()=>u.show,C=>{C&&u.user&&H()});const H=async()=>{var C,g,c;y.value=!1,E.value=!0;try{const G=await W.groups.list(1,1e3);x.value=G.items.filter(se=>se.subscription_type==="standard"&&se.status==="active");const Y=((C=u.user)==null?void 0:C.allowed_groups)||[],D=((g=u.user)==null?void 0:g.group_rates)||{};b.value=((c=u.user)==null?void 0:c.restrict_public_groups)??!1,$.value={...D},v.value=x.value.map(se=>({groupId:se.id,groupName:se.name,platform:se.platform,isExclusive:se.is_exclusive,defaultRate:se.rate_multiplier,customRate:D[se.id]??null,isSelected:se.is_exclusive||b.value?Y.includes(se.id):!0})),y.value=!0}catch(G){console.error("Failed to load groups:",G)}finally{E.value=!1}},J=C=>{const g=v.value.find(c=>c.groupId===C);g&&g.isExclusive&&(g.isSelected=!g.isSelected)},ee=C=>{const g=v.value.find(c=>c.groupId===C);g&&!g.isExclusive&&(g.isSelected=!g.isSelected)},K=()=>
2{if(b.value=!b.value,!b.value)for(const C of v.value)C.isExclusive||(C.isSelected=!0)},p=(C,g)=>{const c=v.value.find(G=>G.groupId===C);if(c)if(g===""||g===null||g===void 0)c.customRate=null;else{const G=parseFloat(g);c.customRate=isNaN(G)?null:G}},P=async()=>{if(!(!u.user||!y.value)){S.value=!0;try{const C=v.value.filter(c=>c.isSelected&&(c.isExclusive||b.value)).map(c=>c.groupId),g={};for(const c of v.value){const G=$.value[c.groupId]!==void 0;c.customRate!==null?g[c.groupId]=c.customRate:G&&(g[c.groupId]=null)}await W.users.update(u.user.id,{allowed_groups:C,restrict_public_groups:b.value,group_rates:Object.keys(g).length>0?g:void 0}),I.showSuccess(a("admin.users.groupConfigUpdated")),z("success"),z("close")}catch(C){console.error("Failed to update user group config:",C)}finally{S.value=!1}}};return(C,g)=>(r(),ie(ke,{show:w.show,title:t(a)("admin.users.groupConfig"),width:"wide",onClose:g[1]||(g[1]=c=>C.$emit("close"))},{footer:O(()=>[e("div",gu,[e("button",{onClick:g[0]||(g[0]=c=>C.$emit("close")),class:"btn btn-secondary px-5"},s(t(a)("common.cancel")),1),e("button",{onClick:P,disabled:S.value||!y.value,class:"btn btn-primary px-6"},[S.value?(r(),i("svg",_u,[...g[10]||(g[10]=[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])])):R("",!0),te(" "+s(S.value?t(a)("common.saving"):t(a)("common.save")),1)],8,hu)])]),default:O(()=>[w.user?(r(),i("div",yi,[e("div",gi,[e("div",hi,[e("span",_i,s(w.user.email.charAt(0).toUpperCase()),1)]),e("div",xi,[e("p",ki,s(w.user.email),1),e("p",wi,s(t(a)("admin.users.groupConfigHint",{email:w.user.email})),1)])]),E.value?(r(),i("div",$i,[...g[2]||(g[2]=[e("svg",{class:"h-10 w-10 animate-spin text-primary-500",fill:"none",viewBox:"0 0 24 24"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1)])])):(r(),i("div",Ci,[f.value.length>0?(r(),i("div",Si,[e("div",Ui,[g[3]||(g[3]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("h4",Ai,s(t(a)("admin.users.exclusiveGroups")),1),e("span",Vi,"("+s(m.value.filter(c=>c.isSelected).length)+"/"+s(m.value.length)+")",1)]),e("div",Ei,[(r(!0),i(Z,null,ae(m.value,c=>(r(),i("div",{key:c.groupId,class:oe(["group relative overflow-hidden rounded-xl border-2 p-4 transition-all duration-200",c.isSelected?"border-primary-400 bg-primary-50/50 shadow-sm dark:border-primary-500 dark:bg-primary-900/20":"border-gray-200 bg-white hover:border-gray-300 dark:border-dark-600 dark:bg-dark-800 dark:hover:border-dark-500"])},[e("div",Mi,[e("div",Gi,[e("label",Ri,[e("input",{type:"checkbox",checked:c.isSelected,onChange:G=>J(c.groupId),class:"peer sr-only"},null,40,Ii),e("div",Pi,[c.isSelected?(r(),i("svg",Li,[...g[4]||(g[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"},null,-1)])])):R("",!0)])])]),e("div",Ni,[e("div",zi,[e("span",Di,s(c.groupName),1),e("span",Ti,s(t(a)("admin.groups.exclusive")),1)]),e("div",Oi,[e("span",Fi,[A(ts,{platform:c.platform,size:"xs"},null,8,["platform"]),e("span",null,s(c.platform),1)]),g[5]||(g[5]=e("span",{class:"text-gray-300 dark:text-dark-500"},"•",-1)),e("span",Bi,[te(s(t(a)("admin.users.defaultRate"))+": ",1),e("span",Hi,s(c.defaultRate)+"x",1)])])]),e("div",ji,[e("label",Ki,s(t(a)("admin.users.customRate")),1),e("input",{type:"number",step:"0.001",min:"0.001",value:c.customRate??"",onInput:G=>p(c.groupId,G.target.value),placeholder:String(c.defaultRate),class:"hide-spinner w-24 rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm font-medium transition-colors focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500/20 dark:border-dark-500 dark:bg-dark-700 dark:focus:border-primary-500"},null,40,Qi)])])],2))),128))])])):R("",!0),M.value.length>0?(r(),i("div",qi,[e("div",Wi,[g[6]||(g[6]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("h4",Yi,s(b.value?t(a)("admin.users.publicGroupsRestricted"):t(a)("admin.users.publicGroups")),1),e("span",Ji,"("+s(q.value.length)+")",1),e("label",Zi,[e("input",{type:"checkbox",checked:b.value,onChange:K,class:"h-4 w-4 cursor-pointer rounded border-gray-300 text-primary-600 focus:ring-primary-500 dark:border-dark-500"},null,40,Xi),te(" "+s(t(a)("admin.users.restrictPublicGroups")),1)])]),e("p",eu,s(t(a)("admin.users.restrictPublicGroupsHint")),1),e("div",tu,[(r(!0),i(Z,null,ae(q.value,c=>(r(),i("div",{key:c.groupId,class:"relative overflow-hidden rounded-xl border-2 border-green-200 bg-green-50/50 p-4 dark:border-green-800/50 dark:bg-green-900/10"}
2,[e("div",su,[e("div",au,[b.value?(r(),i("input",{key:0,type:"checkbox",checked:c.isSelected,onChange:G=>ee(c.groupId),class:"h-5 w-5 cursor-pointer rounded-md border-2 border-green-400 text-green-600 focus:ring-green-500 dark:border-green-600"},null,40,lu)):(r(),i("div",ou,[...g[7]||(g[7]=[e("svg",{class:"h-full w-full text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"})],-1)])]))]),e("div",ru,[e("div",nu,[e("span",iu,s(c.groupName),1)]),e("div",uu,[e("span",du,[A(ts,{platform:c.platform,size:"xs"},null,8,["platform"]),e("span",null,s(c.platform),1)]),g[8]||(g[8]=e("span",{class:"text-gray-300 dark:text-dark-500"},"•",-1)),e("span",cu,[te(s(t(a)("admin.users.defaultRate"))+": ",1),e("span",mu,s(c.defaultRate)+"x",1)])])]),e("div",pu,[e("label",fu,s(t(a)("admin.users.customRate")),1),e("input",{type:"number",step:"0.001",min:"0.001",value:c.customRate??"",onInput:G=>p(c.groupId,G.target.value),placeholder:String(c.defaultRate),class:"hide-spinner w-24 rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm font-medium transition-colors focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500/20 dark:border-dark-500 dark:bg-dark-700 dark:focus:border-primary-500"},null,40,vu)])])]))),128))])])):R("",!0),x.value.length===0?(r(),i("div",bu,[g[9]||(g[9]=e("div",{class:"mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-dark-700"},[e("svg",{class:"h-8 w-8 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"})])],-1)),e("p",yu,s(t(a)("common.noGroupsAvailable")),1)])):R("",!0)]))])):R("",!0)]),_:1},8,["show","title"]))}}),ku=wa(xu,[["__scopeId","data-v-363e1b0b"]]),wu={class:"flex items-center gap-3 rounded-xl bg-gray-50 p-4 dark:bg-dark-700"},$u={class:"flex h-10 w-10 items-center justify-center rounded-full bg-primary-100"},Cu={class:"text-lg font-medium text-primary-700"},Su={class:"flex-1"},Uu={class:"font-medium text-gray-900 dark:text-gray-100"},Au={class:"text-sm text-gray-500 dark:text-gray-400"},Vu={class:"input-label"},Eu={class:"relative flex gap-2"},Mu={class:"relative flex-1"},Gu={class:"input-label"},Ru={key:0,class:"rounded-xl border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950"},Iu={class:"flex items-center justify-between text-sm"},Pu={class:"text-gray-700 dark:text-gray-300"},Lu={class:"font-bold text-gray-900 dark:text-gray-100"},Nu={class:"flex justify-end gap-3"},zu=["disabled"],Du=de({__name:"UserBalanceModal",props:{show:{type:Boolean},user:{},operation:{}},emits:["close","success"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=h(!1),v=xe({amount:0,notes:""});be(()=>u.show,b=>{b&&(v.amount=0,v.notes="")});const $=b=>{if(b===0)return"0.00";const f=b.toFixed(8).replace(/\.?0+$/,""),M=f.split(".");return M.length===1?f+".00":M[1].length===1?f+"0":f},E=()=>{u.user&&(v.amount=u.user.balance)},y=()=>{if(!u.user)return 0;const b=u.operation==="add"?u.user.balance+v.amount:u.user.balance-v.amount;return Math.abs(b)<1e-10?0:b},S=async()=>{if(u.user){if(!v.amount||v.amount<=0){I.showError(a("admin.users.amountRequired"));return}if(u.operation==="subtract"&&v.amount>u.user.balance){I.showError(a("admin.users.insufficientBalance"));return}x.value=!0;try{await W.users.updateBalance(u.user.id,v.amount,u.operation,v.notes),I.showSuccess(a("common.success")),z("success"),z("close")}catch(b){console.error("Failed to update balance:",b),I.showError(he(b,a("common.error")))}finally{x.value=!1}}};return(b,f)=>(r(),ie(ke,{show:w.show,title:w.operation==="add"?t(a)("admin.users.deposit"):t(a)("admin.users.withdraw"),width:"narrow",onClose:f[3]||(f[3]=M=>b.$emit("close"))},{footer:O(()=>[e("div",Nu,[e("button",{onClick:f[2]||(f[2]=M=>b.$emit("close")),class:"btn btn-secondary"},s(t(a)("common.cancel")),1),e("button",{type:"submit",form:"balance-form",disabled:x.value||!v.amount,class:oe(["btn",w.operation==="add"?"bg-emerald-600 text-white":"btn-danger"])},s(x.value?t(a)("common.saving"):t(a)("common.confirm")),11,zu)])]),default:O(()=>[w.user?(r(),i("form",{key:0,id:"balance-form",onSubmit:Se(S,["prevent"]),class:"space-y-5"},[e("div",wu,[e("div",$u,[e("span",Cu,s(w.user.email.charAt(0).toUpperCase()),1)]),e("div",Su,[e("p",Uu,s(w.user.email),1),e("p",Au,s(t(a)("admin.users.currentBalance"))+": $"+s($(w.user.balance)),1)])]),e("div",null,[e("label",Vu,s(w.operation==="add"?t(a)("admin.users.depositAmount"):t(a)("admin.users.withdrawAmount")),1),e("div",Eu,[e("div",Mu,[f[4]||(f[4]=e("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 font-medium text-gray-500"},"$",-1)),F(e("input",{"onUpdate:modelValue":f[0]||(f[0]=M=>v.amount=M),type:"number",step:"any",min:"0",required:"",class:"input pl-8"},null,512),[[X,v.amount,void 0,{number:!0}
2]])]),w.operation==="subtract"?(r(),i("button",{key:0,type:"button",onClick:E,class:"btn btn-secondary whitespace-nowrap"},s(t(a)("admin.users.withdrawAll")),1)):R("",!0)])]),e("div",null,[e("label",Gu,s(t(a)("admin.users.notes")),1),F(e("textarea",{"onUpdate:modelValue":f[1]||(f[1]=M=>v.notes=M),rows:"3",class:"input"},null,512),[[X,v.notes]])]),v.amount>0?(r(),i("div",Ru,[e("div",Iu,[e("span",Pu,s(t(a)("admin.users.newBalance"))+":",1),e("span",Lu,"$"+s($(y())),1)])])):R("",!0)],32)):R("",!0)]),_:1},8,["show","title"]))}}),Tu={key:0,class:"space-y-4"},Ou={class:"text-sm text-gray-600 dark:text-gray-400"},Fu={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-dark-600 dark:bg-dark-800"},Bu={class:"flex items-center gap-2"},Hu={class:"font-medium text-gray-900 dark:text-white"},ju={key:0,class:"font-medium text-primary-600 dark:text-primary-400"},Ku={key:1,class:"text-sm text-gray-400"},Qu={key:0,class:"max-h-64 space-y-2 overflow-y-auto"},qu=["value"],Wu={key:0,class:"h-2 w-2 rounded-full bg-white"},Yu={class:"flex-1"},Ju={class:"font-medium text-gray-900 dark:text-white"},Zu={class:"ml-2 text-xs text-gray-400"},Xu={key:1,class:"py-6 text-center text-sm text-gray-400"},ed={class:"flex justify-end gap-3"},td=["disabled"],sd={key:0,class:"-ml-1 mr-2 h-4 w-4 animate-spin",fill:"none",viewBox:"0 0 24 24"},ad=de({__name:"GroupReplaceModal",props:{show:{type:Boolean},user:{},oldGroup:{},allGroups:{}},emits:["close","success"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=h(null),v=h(!1),$=j(()=>u.oldGroup?u.allGroups.filter(y=>y.status==="active"&&y.is_exclusive&&y.subscription_type==="standard"&&y.id!==u.oldGroup.id):[]);be(()=>u.show,y=>{y&&(x.value=null)});const E=async()=>{if(!(!u.user||!u.oldGroup||!x.value)){v.value=!0;try{const y=await W.users.replaceGroup(u.user.id,u.oldGroup.id,x.value);I.showSuccess(a("admin.users.replaceGroupSuccess",{count:y.migrated_keys})),z("success"),z("close")}catch(y){I.showError(he(y,a("common.error"))),console.error("Failed to replace group:",y)}finally{v.value=!1}}};return(y,S)=>(r(),ie(ke,{show:w.show,title:t(a)("admin.users.replaceGroupTitle"),width:"narrow",onClose:S[2]||(S[2]=b=>y.$emit("close"))},{footer:O(()=>[e("div",ed,[e("button",{onClick:S[1]||(S[1]=b=>y.$emit("close")),class:"btn btn-secondary px-5"},s(t(a)("common.cancel")),1),e("button",{onClick:E,disabled:!x.value||v.value,class:"btn btn-primary px-6"},[v.value?(r(),i("svg",sd,[...S[3]||(S[3]=[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])])):R("",!0),te(" "+s(v.value?t(a)("common.saving"):t(a)("admin.users.replaceGroupConfirm")),1)],8,td)])]),default:O(()=>{var b;return[w.oldGroup?(r(),i("div",Tu,[e("p",Ou,s(t(a)("admin.users.replaceGroupHint",{old:w.oldGroup.name})),1),e("div",Fu,[e("div",Bu,[A(Q,{name:"shield",size:"sm",class:"text-purple-500"}),e("span",Hu,s(w.oldGroup.name),1),A(Q,{name:"arrowRight",size:"sm",class:"ml-auto text-gray-400"}),x.value?(r(),i("span",ju,s((b=$.value.find(f=>f.id===x.value))==null?void 0:b.name),1)):(r(),i("span",Ku,"?"))])]),$.value.length>0?(r(),i("div",Qu,[(r(!0),i(Z,null,ae($.value,f=>(r(),i("label",{key:f.id,class:oe(["flex cursor-pointer items-center gap-3 rounded-lg border-2 p-3 transition-all",x.value===f.id?"border-primary-400 bg-primary-50/50 dark:border-primary-500 dark:bg-primary-900/20":"border-gray-200 hover:border-gray-300 dark:border-dark-600 dark:hover:border-dark-500"])},[F(e("input",{type:"radio",value:f.id,"onUpdate:modelValue":S[0]||(S[0]=M=>x.value=M),class:"sr-only"},null,8,qu),[[ba,x.value]]),e("div",{class:oe(["flex h-5 w-5 items-center justify-center rounded-full border-2 transition-all",x.value===f.id?"border-primary-500 bg-primary-500":"border-gray-300 dark:border-dark-500"])},[x.value===f.id?(r(),i("div",Wu)):R("",!0)],2),e("div",Yu,[e("span",Ju,s(f.name),1),e("span",Zu,s(f.platform),1)])],2))),128))])):(r(),i("div",Xu,s(t(a)("admin.users.noOtherGroups")),1))])):R("",!0)]}),_:1},8,["show","title"]))}}),ld={class:"flex items-center gap-3 rounded-xl bg-gray-50 p-4 dark:bg-dark-700"},od={class:"flex h-10 w-10 items-center justify-center rounded-full bg-primary-100"},rd={class:"text-lg font-medium text-primary-700"},nd={class:"flex-1"},id={class:"font-medium text-gray-900 dark:text-white"},ud={class:"text-sm text-gray-500 dark:text-gray-400"},dd={class:"flex items-start gap-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-dark-600 dark:bg-dark-700"}
2,cd={for:"referral-enabled-toggle",class:"flex-1 cursor-pointer"},md={class:"font-medium text-gray-900 dark:text-white"},pd={class:"mt-0.5 text-xs text-gray-600 dark:text-gray-400"},fd={class:"flex items-center justify-between"},vd={class:"input-label"},bd={class:"flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400"},yd={class:"relative"},gd=["disabled","placeholder"],hd={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},_d={class:"flex items-center justify-between"},xd={class:"input-label"},kd={class:"flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400"},wd={class:"relative"},$d=["disabled","placeholder"],Cd={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Sd={class:"flex items-start gap-3 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-950/40"},Ud={for:"withdrawal-allowed",class:"flex-1 cursor-pointer"},Ad={class:"font-medium text-gray-900 dark:text-white"},Vd={class:"mt-0.5 text-xs text-gray-600 dark:text-gray-400"},Ed={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-dark-600 dark:bg-dark-700"},Md={class:"flex items-center justify-between"},Gd={class:"font-medium text-gray-900 dark:text-white"},Rd={class:"mt-0.5 text-xs text-gray-600 dark:text-gray-400"},Id={class:"input-label"},Pd={class:"flex justify-end gap-3"},Ld=["disabled"],Nd=de({__name:"UserReferralConfigModal",props:{show:{type:Boolean},user:{}},emits:["close","success"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=xe({withdrawal_allowed:!1,notes:""}),v=h(!1),$=h(!1),E=h(null),y=h(!0),S=h(null),b=h(!0),f=h(null),M=h(!1),m=h(!1),q=h(0);function H(){x.withdrawal_allowed=!1,x.notes="",v.value=!1,$.value=!1,E.value=null,y.value=!0,S.value=null,b.value=!0,f.value=null,m.value=!1,q.value=0}async function J(){var K;if(u.user){H();try{const p=await Xt.getReferralConfig(u.user.id);E.value=p.enabled??null;const P=((K=I.cachedPublicSettings)==null?void 0:K.referral_default_for_all_users)===!0;v.value=E.value??P,$.value=v.value,x.withdrawal_allowed=p.withdrawal_allowed,x.notes=p.notes,m.value=!!p.first_recharge_benefit_enabled,q.value=p.first_recharge_benefit_percent||0,p.commission_rate_override!==null&&p.commission_rate_override!==void 0&&(y.value=!1,S.value=Number((p.commission_rate_override*100).toFixed(2))),p.referee_bonus_override!==null&&p.referee_bonus_override!==void 0&&(b.value=!1,f.value=p.referee_bonus_override)}catch(p){console.error("load referral config:",p),I.showError(he(p,a("common.error")))}}}be(()=>u.show,K=>{K&&u.user&&J()});async function ee(){if(!u.user)return;if(!y.value){const p=S.value;if(p==null||isNaN(p)||p<0||p>100){I.showError(a("admin.users.referralConfig.rateInvalid"));return}}if(!b.value){const p=f.value;if(p==null||isNaN(p)||p<0){I.showError(a("admin.users.referralConfig.bonusInvalid"));return}}const K=v.value===$.value?E.value:v.value;M.value=!0;try{await Xt.upsertReferralConfig(u.user.id,{enabled:K,commission_rate_override:y.value?null:Number(((S.value??0)/100).toFixed(6)),referee_bonus_override:b.value?null:Number(f.value??0),withdrawal_allowed:x.withdrawal_allowed,notes:x.notes.trim()}),I.showSuccess(a("common.success")),z("success"),z("close")}catch(p){console.error("upsert referral config:",p),I.showError(he(p,a("common.error")))}finally{M.value=!1}}return(K,p)=>(r(),ie(ke,{show:w.show,title:t(a)("admin.users.referralConfig.title"),width:"narrow",onClose:p[8]||(p[8]=P=>K.$emit("close"))},{footer:O(()=>[e("div",Pd,[e("button",{type:"button",onClick:p[7]||(p[7]=P=>K.$emit("close")),class:"btn btn-secondary"},s(t(a)("common.cancel")),1),e("button",{type:"submit",form:"referral-config-form",disabled:M.value,class:"btn btn-primary"},s(M.value?t(a)("common.saving"):t(a)("common.save")),9,Ld)])]),default:O(()=>[w.user?(r(),i("form",{key:0,id:"referral-config-form",onSubmit:Se(ee,["prevent"]),class:"space-y-5"},[e("div",ld,[e("div",od,[e("span",rd,s(w.user.email.charAt(0).toUpperCase()),1)]),e("div",nd,[e("p",id,s(w.user.email),1),e("p",ud,"#"+s(w.user.id),1)])]),e("div",dd,[F(e("input",{id:"referral-enabled-toggle","onUpdate:modelValue":p[0]||(p[0]=P=>
2v.value=P),type:"checkbox",class:"mt-0.5 h-4 w-4"},null,512),[[ze,v.value]]),e("label",cd,[e("span",md,s(t(a)("admin.users.referralConfig.enabled")),1),e("p",pd,s(t(a)("admin.users.referralConfig.enabledHint")),1)])]),e("div",null,[e("div",fd,[e("label",vd,s(t(a)("admin.users.referralConfig.rateOverride")),1),e("label",bd,[F(e("input",{type:"checkbox","onUpdate:modelValue":p[1]||(p[1]=P=>y.value=P),class:"h-3.5 w-3.5"},null,512),[[ze,y.value]]),te(" "+s(t(a)("admin.users.referralConfig.followGlobal")),1)])]),e("div",yd,[F(e("input",{"onUpdate:modelValue":p[2]||(p[2]=P=>S.value=P),type:"number",step:"0.1",min:"0",max:"100",disabled:y.value,class:"input pr-8",placeholder:t(a)("admin.users.referralConfig.ratePlaceholder")},null,8,gd),[[X,S.value,void 0,{number:!0}]]),p[9]||(p[9]=e("span",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-sm text-gray-500"},"%",-1))]),e("p",hd,s(t(a)("admin.users.referralConfig.rateHint")),1)]),e("div",null,[e("div",_d,[e("label",xd,s(t(a)("admin.users.referralConfig.bonusOverri
2de")),1),e("label",kd,[F(e("input",{type:"checkbox","onUpdate:modelValue":p[3]||(p[3]=P=>b.value=P),class:"h-3.5 w-3.5"},null,512),[[ze,b.value]]),te(" "+s(t(a)("admin.users.referralConfig.followGlobal")),1)])]),e("div",wd,[p[10]||(p[10]=e("span",{class:"absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-500"},"Â¥",-1)),F(e("input",{"onUpdate:modelValue":p[4]||(p[4]=P=>f.value=P),type:"number",step:"0.01",min:"0",disabled:b.value,class:"input pl-7",placeholder:t(a)("admin.users.referralConfig.bonusPlaceholder")},null,8,$d),[[X,f.value,void 0,{number:!0}]])]),e("p",Cd,s(t(a)("admin.users.referralConfig.bonusHint")),1)]),e("div",Sd,[F(e("input",{id:"withdrawal-allowed","onUpdate:modelValue":p[5]||(p[5]=P=>x.withdrawal_allowed=P),type:"checkbox",class:"mt-0.5 h-4 w-4"},null,512),[[ze,x.withdrawal_allowed]]),e("label",Ud,[e("span",Ad,s(t(a)("admin.users.referralConfig.withdrawalAllowed")),1),e("p",Vd,s(t(a)("admin.users.referralConfig.withdrawalAllowedHint")),1)])]),e("div",Ed,[e("div",Md,[e("span",Gd,s(t(a)("admin.users.referralConfig.benefitTitle")),1),e("span",{class:oe(["badge",m.value?"badge-success":"badge-gray"])},s(m.value?t(a)("admin.users.referralConfig.benefitEnabled",{percent:q.value}):t(a)("admin.users.referralConfig.benefitDisabled")),3)]),e("p",Rd,s(t(a)("admin.users.referralConfig.benefitHint")),1)]),e("div",null,[e("label",Id,s(t(a)("admin.users.referralConfig.notes")),1),F(e("textarea",{"onUpdate:modelValue":p[6]||(p[6]=P=>x.notes=P),rows:"2",class:"input"},null,512),[[X,x.notes]])])],32)):R("",!0)]),_:1},8,["show","title"]))}}),zd={key:0,class:"space-y-5"},Dd={class:"flex items-center gap-3 rounded-xl bg-gray-50 p-4 dark:bg-dark-700"},Td={class:"flex h-10 w-10 items-center justify-center rounded-full bg-emerald-100"},Od={class:"text-lg font-medium text-emerald-700"},Fd={class:"flex-1"},Bd={class:"font-medium text-gray-900 dark:text-white"},Hd={class:"text-sm text-gray-500 dark:text-gray-400"},jd={key:0,class:"rounded-lg bg-blue-50 p-3 text-xs text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},Kd={class:"flex items-start gap-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-dark-600 dark:bg-dark-700"},Qd=["disabled"],qd={for:"invoice-enabled-toggle",class:"flex-1 cursor-pointer"},Wd={class:"font-medium text-gray-900 dark:text-white"},Yd={class:"mt-0.5 text-xs text-gray-600 dark:text-gray-400"},Jd={key:1,class:"rounded-lg bg-red-50 p-3 text-xs text-red-700 dark:bg-red-900/20 dark:text-red-300"},Zd={class:"flex justify-end gap-3"},Xd=["disabled"],ec=de({__name:"UserInvoiceConfigModal",props:{show:{type:Boolean},user:{}},emits:["close"],setup(w,{emit:d}){const u=w,z=d,{t:a}=fe(),I=we(),x=h(!1),v=h(!1),$=h(!1),E=h(""),y=j(()=>{var b;return!!((b=I.cachedPublicSettings)!=null&&b.invoice_default_for_all_users)});be(()=>{var b;return[u.show,(b=u.user)==null?void 0:b.id]},async([b,f])=>{if(!b||!f){x.value=!1,E.value="";return}v.value=!0,E.value="";try{const M=await ss.getUserConfig(f);x.value=!!M.data.enabled}catch(M){E.value=he(M)}finally{v.value=!1}},{immediate:!1});async function S(){if(u.user){$.value=!0,E.value="";try{await ss.setUserConfig(u.user.id,x.value),z("close")}catch(b){E.value=he(b)}finally{$.value=!1}}}return(b,f)=>(r(),ie(ke,{show:w.show,title:t(a)("admin.users.invoiceConfig.title"),width:"narrow",onClose:f[2]||(f[2]=M=>b.$emit("close"))},{footer:O(()=>[e("div",Zd,[e("button",{class:"btn btn-secondary",onClick:f[1]||(f[1]=M=>b.$emit("close"))},s(t(a)("common.cancel")),1),e("button",{class:"btn btn-primary",disabled:$.value||v.value,onClick:S},s($.value?t(a)("common.processing"):t(a)("common.save")),9,Xd)])]),default:O(()=>[w.user?(r(),i("div",zd,[e("div",Dd,[e("div",Td,[e("span",Od,s(w.user.email.charAt(0).toUpperCase()),1)]),e("div",Fd,[e("p",Bd,s(w.user.email),1),e("p",Hd,"#"+s(w.user.id),1)])]),y.value?(r(),i("div",jd,s(t(a)("admin.users.invoiceConfig.defaultForAllOnNote")),1)):R("",!0),e("div",Kd,[F(e("input",{id:"invoice-enabled-toggle","onUpdate:modelValue":f[0]||(f[0]=M=>x.value=M),type:"checkbox",class:"mt-0.5 h-4 w-4",disabled:v.value||$.value},null,8,Qd),[[ze,x.value]]),e("label",qd,[e("span",Wd,s(t(a)("admin.users.invoiceConfig.enabled")),1),e("p",Yd,s(t(
2a)("admin.users.invoiceConfig.enabledHint")),1)])]),E.value?(r(),i("div",Jd,s(E.value),1)):R("",!0)])):R("",!0)]),_:1},8,["show","title"]))}}),tc={class:"flex flex-wrap items-center gap-3"},sc={class:"flex flex-1 flex-wrap items-center gap-3"},ac={class:"relative w-full md:w-64"},lc=["placeholder"],oc={key:0,class:"w-full sm:w-32"},rc={key:1,class:"w-full sm:w-32"},nc={key:2,class:"w-full sm:w-44"},ic={key:3,class:"w-full sm:w-44"},uc={key:4,class:"w-full sm:w-36"},dc={key:0,class:"relative w-full sm:w-36"},cc=["value","onInput","placeholder"],mc=["value","onInput","placeholder"],pc={key:2,class:"w-full"},fc=["value","onInput","placeholder"],vc={class:"flex flex-wrap items-center justify-end gap-2"},bc={class:"flex items-center gap-2 md:contents"},yc=["disabled","title"],gc=["title"],hc={class:"hidden md:inline"},_c={key:0,class:"absolute right-0 top-full z-50 mt-1 w-48 rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-dark-600 dark:bg-dark-800"},xc=["onClick"],kc={key:0,class:"my-1 border-t border-gray-100 dark:border-dark-700"},wc=["onClick"],$c=["title"],Cc={class:"hidden md:inline"},Sc={key:0,class:"absolute right-0 top-full z-50 mt-1 max-h-80 w-48 overflow-y-auto overscroll-contain rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-dark-600 dark:bg-dark-800"},Uc=["disabled","onClick","title"],Ac=["title"],Vc={class:"hidden md:inline"},Ec=["disabled"],Mc={class:"flex items-center gap-2"},Gc={class:"flex h-8 w-8 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900/30"},Rc={class:"text-sm font-medium text-primary-700 dark:text-primary-300"},Ic={class:"font-medium text-gray-900 dark:text-white"},Pc={class:"text-sm text-gray-700 dark:text-gray-300"},Lc={class:"max-w-xs"},Nc=["title"],zc={key:1,class:"text-sm text-gray-400"},Dc={class:"max-w-xs"},Tc=["title"],Oc={key:0,class:"inline-flex items-center gap-1.5 whitespace-nowrap"},Fc={class:"text-sm text-gray-900 dark:text-white"},Bc=["title"],Hc={key:1,class:"text-gray-300 dark:text-gray-600"},jc={key:0,class:"flex flex-col gap-1"},Kc=["onClick"],Qc={class:"font-medium text-purple-600 dark:text-purple-400"},qc={class:"text-gray-500 dark:text-dark-400"},Wc={key:0,class:"pointer-events-none absolute left-0 top-full z-50 mt-1.5 rounded bg-gray-900 px-2.5 py-1.5 text-xs text-white opacity-0 shadow-lg transition-opacity duration-75 group-hover/ex:opacity-100 dark:bg-dark-600"},Yc={class:"flex flex-col gap-0.5 whitespace-nowrap"},Jc={key:1,class:"absolute left-0 top-full z-50 mt-1.5 min-w-[160px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 text-xs shadow-xl dark:border-dark-600 dark:bg-dark-700"},Zc={class:"border-b border-gray-100 px-3 py-1.5 text-[10px] font-medium uppercase tracking-wider text-gray-400 dark:border-dark-600 dark:text-dark-400"},Xc=["onClick"],em={class:"flex-1"},tm={key:1,class:"group/pub relative inline-flex cursor-default items-center gap-1 whitespace-nowrap text-xs"},sm={class:"font-medium text-gray-600 dark:text-dark-300"},am={class:"text-gray-400 dark:text-dark-500"},lm={class:"pointer-events-none absolute left-0 top-full z-50 mt-1.5 rounded bg-gray-900 px-2.5 py-1.5 text-xs text-white opacity-0 shadow-lg transition-opacity duration-75 group-hover/pub:opacity-100 dark:bg-dark-600"},om={class:"flex flex-col gap-0.5 whitespace-nowrap"},rm={key:2,class:"text-xs text-gray-400 dark:text-dark-500"},nm={key:1,class:"text-xs text-gray-400 dark:text-dark-500"},im={key:0,class:"flex flex-wrap gap-1.5"},um={key:1,class:"inline-flex items-center gap-1.5 rounded-md bg-gray-50 px-2 py-1 text-xs text-gray-400 dark:bg-dark-700/50 dark:text-dark-500"},dm={class:"flex items-center gap-2"},cm={class:"group relative"},mm=["onClick"],pm={class:"pointer-events-none absolute bottom-full left-1/2 z-50 mb-1.5 -translate-x-1/2 whitespace-nowrap rounded bg-gray-900 px-2 py-1 text-xs text-white opacity-0 shadow-lg transition-opacity duration-75 group-hover:opacity-100 dark:bg-dark-600"},fm=["onClick","title"],vm=["title","onClick"],bm={class:"flex items-center gap-1.5"},ym={class:"usage-sort-trigger relative"},gm=["title","data-test","onClick"],hm={key:0,class:"text-[10px] normal-case font-medium tracking-normal"},_m={key:2,class:"h-3.5 w-3.5",fill:"currentColor",viewBox:"0 0 20 20"},xm={key:0,class:"absolute right-0 top-full z-50 mt-1 min-w-[120px] rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-dark-600 dark:bg-dark-800"},km=["data-test","onClick"],wm={class:"mt-1 border-t border-gray-100 px-3 py-1 text-[10px] normal-case tracking-normal text-gray-400 dark:border-dark-700 dark:text-dark-500"},$m={class:"flex items-center gap-1.5"},Cm={class:"text-sm text-gray-700 dark:text-gray-300"},Sm={class:"text-sm text-gray-500 dark:text-dark-400"},Um={class:"text-sm text-gray-500 dark:text-dark-400"},Am={class:"text-sm text-gray-500 dark:text-dark-400"},Vm={class:"flex items-center gap-1"},Em=["onClick"],Mm={class:"text-xs"},Gm=["onClick"],Rm={class:"text-xs"},Im=["onClick"],Pm={class:"text-xs"},Lm={class:"py-1"},Nm=["onClick"],zm=["onClick"],Dm=["onClick"],Tm=["onClick"],Om=["onClick"],Fm=["onClick"],Bm=["onClick"],Hm=["onClick"],jm=["onClick"],is="user-hidden-columns",it="user-column-settings-version",Qe=3,us="admin-users-table-sort",ds="user-filter-values",cs="user-visible-filters",Nt="admin-users-usage-sort",Up=de({__name:"UsersView",setup(w){const{t:d}=fe(),u=we(),z=j(()=>Ae.value.filter(o=>o.enabled).map(o=>({key:`attr_${o.id}`,label:o.name,sortable:!1}))),a=(o,n)=>{const U=pt.value[o];if(!U)return"-";const l=U[n];if(!l)return"-";const _=Ae.value.find(L=>
2L.id===n);if(!_)return l;if(_.type==="multi_select"&&l)try{const L=JSON.parse(l);if(Array.isArray(L))return L.map(B=>{var ve;const pe=(ve=_.options)==null?void 0:ve.find(ue=>ue.value===B);return(pe==null?void 0:pe.label)||B}).join(", ")}catch{return l}if(_.type==="select"&&l&&_.options){const L=_.options.find(B=>B.value===l);return(L==null?void 0:L.label)||l}return l},I=j(()=>[{key:"email",label:d("admin.users.columns.user"),sortable:!0},{key:"id",label:d("admin.users.columns.id"),sortable:!0},{key:"username",label:d("admin.users.columns.username"),sortable:!0},{key:"notes",label:d("admin.users.columns.notes"),sortable:!1},...z.value,{key:"role",label:d("admin.users.columns.role"),sortable:!0},{key:"tier",label:d("admin.users.columns.tier"),sortable:!1},{key:"groups",label:d("admin.users.columns.groups"),sortable:!1},{key:"subscriptions",label:d("admin.users.columns.subscriptions"),sortable:!1},{key:"balance",label:d("admin.users.columns.balance"),sortable:!0},{key:"balance_platform_quota",label:d("admin.users.columns.balancePlatformQuota"),sortable:!1},{key:"usage",label:d("admin.users.columns.usage"),sortable:!1},{key:"usage_anthropic",label:d("admin.users.columns.usageAnthropic"),sortable:!1},{key:"usage_openai",label:d("admin.users.columns.usageOpenAI"),sortable:!1},{key:"usage_gemini",label:d("admin.users.columns.usageGemini"),sortable:!1},{key:"usage_antigravity",label:d("admin.users.columns.usageAntigravity"),sortable:!1},{key:"concurrency",label:d("admin.users.columns.concurrency"),sortable:!0},{key:"status",label:d("admin.users.columns.status"),sortable:!0},{key:"last_active_at",label:d("admin.users.columns.lastActive"),sortable:!0},{key:"last_used_at",label:d("admin.users.columns.lastUsed"),sortable:!0},{key:"created_at",label:d("admin.users.columns.created"),sortable:!0},{key:"actions",label:d("admin.users.columns.actions"),sortable:!1}]),x=j(()=>I.value.filter(o=>o.key!=="email"&&o.key!=="actions")),v=xe(new Set),$=["notes","groups","subscriptions","usage","concurrency","usage_anthropic","usage_openai","usage_gemini","usage_antigravity","balance_platform_quota"],E=new Set(["last_login_at"]),y=new Set,S={2:["usage_anthropic","usage_openai","usage_gemini","usage_antigravity"],3:["balance_platform_quota"]},b=()=>{try{const o=localStorage.getItem(is);if(o){JSON.parse(o).filter(l=>!E.has(l)&&!y.has(l)).forEach(l=>v.add(l));const U=Number(localStorage.getItem(it)??"1");if(U<Qe){let l=!1;for(let _=U+1;_<=Qe;_++)for(const L of S[_]??[])E.has(L)||y.has(L)||v.has(L)||(v.add(L),l=!0);l?f():localStorage.setItem(it,String(Qe))}}else $.forEach(n=>v.add(n)),localStorage.setItem(it,String(Qe))}catch(o){console.error("Failed to load saved columns:",o),$.forEach(n=>v.add(n))}},f=()=>{try{localStorage.setItem(is,JSON.stringify([...v])),localStorage.setItem(it,String(Qe))}catch(o){console.error("Failed to save columns:",o)}},M=o=>y.has(o),m=o=>{if(y.has(o))return;const n=v.has(o);v.has(o)?v.delete(o):v.add(o),f(),n&&(o==="usage"||o.startsWith("usage_")||o.startsWith("attr_")||o==="balance_platform_quota")&&Ps(),o==="subscriptions"&&re(),n&&o==="groups"&&Te()},q=o=>!v.has(o),H=["usage","usage_anthropic","usage_openai","usage_gemini","usage_antigravity"],J={usage:null,usage_anthropic:"anthropic",usage_openai:"openai",usage_gemini:"gemini",usage_antigravity:"antigravity"},ee=H.filter(o=>o!=="usage"),K=j(()=>!v.has("usage")||ee.some(o=>!v.has(o))),p=j(()=>!v.has("groups")),P=j(()=>!v.has("balance_platform_quota")),C=j(()=>Ae.value.some(o=>o.enabled&&!v.has(`attr_${o.id}`))),g=j(()=>I.value.filter(o=>o.key==="email"||o.key==="actions"||!v.has(o.key))),c=h([]),G=h(!1),Y=ya(),D=Da(Y.query.search),se=h(D),De=xe((()=>{const o={sort_by:"created_at",sort_order:"desc"},n=new Set(["email","id","username","role","balance","concurrency","status","last_used_at","last_active_at","created_at"]);try{const U=localStorage.getItem(us);if(!U)return o;const l=JSON.parse(U),_=typeof l.key=="string"?l.key:"";return n.has(_)?{sort_by:_,sort_order:l.order==="asc"?"asc":"desc"}:o}catch{return o}})()),Ee=h([]),Te=async()=>{if(!(Ee.value.length>0))try{const o=await W.groups.list(1,1e3,{status:"active"});Ee.value=o.items||[]}catch(o){console.error("Failed to load groups:",o)}},Be=h([]),$e=async()=>
2{if(!(Be.value.length>0))try{const o=await W.groups.list(1,1e3);Be.value=o.items||[]}catch(o){console.error("Failed to load groups for API key filter:",o)}},_e=o=>{var l,_;const n=[],U=[];for(const L of Ee.value)L.status!=="active"||L.subscription_type!=="standard"||(L.is_exclusive?(l=o.allowed_groups)!=null&&l.includes(L.id)&&n.push(L):o.restrict_public_groups?(_=o.allowed_groups)!=null&&_.includes(L.id)&&U.push(L):U.push(L));return{exclusive:n,publicGroups:U}},We=j(()=>{const o=[{value:"",label:d("admin.users.allAuthorizedGroups")}];for(const n of Ee.value)n.status!=="active"||!n.is_exclusive||n.subscription_type!=="standard"||o.push({value:n.name,label:n.name});return o}),Ye=j(()=>Ha(Be.value,{all:d("admin.users.allApiKeyGroups"),exclusive:d("admin.users.apiKeyGroupExclusive"),public:d("admin.users.apiKeyGroupPublic"),subscription:d("admin.users.apiKeyGroupSubscription"),disabled:d("admin.users.apiKeyGroupDisabled")})),ut=j(()=>za(d)),k=xe({role:"",status:"",group:"",apiKeyGroup:null,site:null}),N=xe({}),T=xe(new Set),le=h(!1),V=h(!1),ye=h(null),ce=h(null),dt=j(()=>Ae.value.filter(o=>o.enabled)),ks=j(()=>[{key:"role",name:d("admin.users.columns.role"),type:"select"},{key:"status",name:d("admin.users.columns.status"),type:"select"},{key:"group",name:d("admin.users.authorizedGroupFilter"),type:"select"},{key:"apiKeyGroup",name:d("admin.users.apiKeyGroupFilter"),type:"select"},{key:"site",name:d("admin.siteFilter.label"),type:"select"}]),ws=()=>{try{const o=localStorage.getItem(cs);o&&JSON.parse(o).forEach(l=>T.add(l));const n=D?null:localStorage.getItem(ds);if(n){const U=JSON.parse(n);U.role&&(k.role=U.role),U.status&&(k.status=U.status),U.group&&(k.group=U.group),typeof U.apiKeyGroup=="number"&&(k.apiKeyGroup=U.apiKeyGroup),U.site&&(k.site=U.site),U.attributes&&Object.assign(N,U.attributes)}}catch(o){console.error("Failed to load saved filters:",o)}},ct=()=>{try{localStorage.setItem(cs,JSON.stringify([...T]));const o={role:k.role,status:k.status,group:k.group,apiKeyGroup:k.apiKeyGroup,site:k.site,attributes:N};localStorage.setItem(ds,JSON.stringify(o))}catch(o){console.error("Failed to save filters:",o)}},Je=o=>Ae.value.find(n=>n.id===o),Re=h({}),Ze=h({}),Xe=(o,n)=>{var U,l;return(l=(U=Re.value[o])==null?void 0:U.by_platform)==null?void 0:l.find(_=>_.platform===n)},Ie=h(null),ne=h((()=>{try{const o=localStorage.getItem(Nt);if(!o)return null;const n=JSON.parse(o);if(!n.key||!H.includes(n.key))return null;const U=n.metric==="total"?"total":"today",l=n.order==="asc"?"asc":"desc";return{key:n.key,metric:U,order:l}}catch{return null}})()),Tt=()=>{try{ne.value?localStorage.setItem(Nt,JSON.stringify(ne.value)):localStorage.removeItem(Nt)}catch(o){console.error("Failed to persist usage sort:",o)}},$s=()=>{ne.value&&(ne.value=null,Ie.value=null,Tt())},Ot=(o,n)=>!!ne.value&&ne.value.key===o&&ne.value.metric===n,Ft=(o,n)=>Ot(o,n)?ne.value.order:null,Cs=(o,n)=>{const U=ne.value;U&&U.key===o&&U.metric===n?ne.value=U.order==="desc"?{key:o,metric:n,order:"asc"}:null:ne.value={key:o,metric:n,order:"desc"},Tt(),Ie.value=null},Ss=o=>{Ie.value=Ie.value===o?null:o},Bt=(o,n,U)=>{var B;const l=Re.value[o];if(!l)return 0;const _=J[n];if(_===null)return U==="today"?l.today_actual_cost??0:l.total_actual_cost??0;const L=(B=l.by_platform)==null?void 0:B.find(pe=>pe.platform===_);return L?U==="today"?L.today_actual_cost??0:L.total_actual_cost??0:0},Ht=j(()=>{const o=ne.value;return o?[...c.value].map((n,U)=>({row:n,index:U})).sort((n,U)=>{const l=Bt(n.row.id,o.key,o.metric),_=Bt(U.row.id,o.key,o.metric);return l!==_?o.order==="asc"?l-_:_-l:n.index-U.index}).map(n=>n.row):c.value}),{selectedIds:mt,selectedCount:et,setSelectedIds:Us,clear:As,removeMany:Vs}=Ca({rows:Ht,getId:o=>o.id}),Es=o=>{Us(o.filter(n=>typeof n=="number"))},Ms=o=>d("admin.users.bulkLimits.selectUser",{email:o.email}),Ae=h([]),pt=h({}),me=xe({page:1,page_size:$a(),total:0,pages:0}),tt=h(!1),ft=h(!1),vt=h(!1),st=h(!1),Oe=h([]),bt=h(!1),yt=h(!1),Gs=vs(),Rs=j(()=>Gs.hasPerm("keys:read")),gt=h(!1),ht=h(!1),_t=h(null),He=h(null),xt=h(null),kt=h(null),jt=o=>{kt.value=o,ht.value=!0},Is=()=>{ht.value=!1,kt.value=null};let Me=null,Pe=0;const Kt=async(o,n,U)=>{if(o.length===0)return;const l=[];K.value&&l.push((async()=>{try{const _=await W.dashboard.getBatchUsersUsage(o);if(n!=null&&n.aborted||typeof U=="number"&&U!==Pe)return;Re.value=_.stats}catch(_){if(n!=null&&n.aborted)return;console.error("Failed to load usage stats:",_)}})()),Ae.value.length>0&&C.value&&l.push((async()=>{try{const _=await W.userAttributes.getBatchUserAttributes(o);if(n!=null&&n.aborted||typeof U=="number"&&U!==Pe)return;pt.value=_.attributes}catch(_){if(n!=null&&n.aborted)return;console.error("Failed to load user attribute values:",_)}})()),P.value&&l.push((async()=>{try{for(let L=0;L<o.length;L+=6){if(n!=null&&n.aborted||typeof U=="number"&&U!==Pe)return;const B=o.slice(L,L+6),pe=await Promise.allSettled(B.map(ue=>W.users.getPlatformQuotas(ue)));if(n!=null&&n.aborted||typeof U=="number"&&U!==Pe)return;const ve={...Ze.value};pe.forEach((ue,Ce)=>{ue.status==="fulfilled"&&(ve[B[Ce]]=ue.value.platform_quotas||[])}),Ze.value=ve}}catch(_){if(n!=null&&n.aborted)return;console.error("Failed to load platform quotas:",_)}})()),l.length>0&&await Promise.allSettled(l)},Ps=()=>{const o=c.value.map(U=>U.id);if(o.length===0)return;const n=++Pe;Kt(o,void 0,n)},Fe=h(null),je=h(null),Ls=(o,n)=>{if(Fe.value===o.id)ge();else{const U=n.currentTarget;if(!U){ge();return}const l=U.getBoundingClientRect(),_=200,L=240,B=8,pe=window.innerWidth,ve=window.innerHeight;let ue,Ce;pe<768?(ue=Math.max(B,Math.min(l.left+l.width/2-_/2,pe-_-B)),Ce=l.bottom+4,Ce+L>
2ve-B&&(Ce=l.top-L-4,Ce<B&&(Ce=B))):(ue=Math.max(B,Math.min(n.clientX-_,pe-_-B)),Ce=n.clientY,Ce+L>ve-B&&(Ce=ve-L-B)),je.value={top:Ce,left:ue},Fe.value=o.id}},ge=()=>{Fe.value=null,je.value=null},Qt=o=>{const n=o.target;!n.closest(".action-menu-trigger")&&!n.closest(".action-menu-content")&&ge(),ye.value&&!ye.value.contains(n)&&(le.value=!1),ce.value&&!ce.value.contains(n)&&(V.value=!1),Ie.value!==null&&!n.closest(".usage-sort-trigger")&&(Ie.value=null),Le.value!==null&&(Le.value=null)},wt=h(!1),$t=h(null),Le=h(null),Ns=o=>{Le.value=Le.value===o?null:o},Ct=h(!1),St=h(null),Ut=h(null),at=h(!1),lt=h(null),At=h("add"),Vt=h(!1),Ne=h(null),zs=o=>{const n=new Date,l=new Date(o).getTime()-n.getTime();return Math.ceil(l/(1e3*60*60*24))},qt=async()=>{try{Ae.value=await W.userAttributes.listEnabledDefinitions()}catch(o){console.error("Failed to load attribute definitions:",o)}},Ds=async()=>{gt.value=!1,await qt(),re()},re=async()=>{Me==null||Me.abort();const o=new AbortController;Me=o;const{signal:n}=o;G.value=!0;try{const U={};for(const[_,L]of Object.entries(N))L&&(U[Number(_)]=L);const l=await W.users.list(me.page,me.page_size,{role:k.role,status:k.status,search:se.value||void 0,group_name:k.group||void 0,api_key_group_id:k.apiKeyGroup??void 0,site:k.site||void 0,attributes:Object.keys(U).length>0?U:void 0,include_subscriptions:!0,sort_by:De.sort_by,sort_order:De.sort_order},{signal:n});if(n.aborted)return;if(c.value=l.items,me.total=l.total,me.pages=l.pages,Re.value={},pt.value={},Ze.value={},l.items.length>0){const _=l.items.map(B=>B.id),L=++Pe;window.setTimeout(()=>{n.aborted||L!==Pe||Kt(_,n,L)},50)}}catch(U){const l=U;if((l==null?void 0:l.name)==="AbortError"||(l==null?void 0:l.name)==="CanceledError"||(l==null?void 0:l.code)==="ERR_CANCELED")return;const _=he(U,d("admin.users.failedToLoad"));u.showError(_),console.error("Error loading users:",U)}finally{Me===o&&(G.value=!1)}},Ts=async()=>{As(),await re()};let Et;const Os=()=>{clearTimeout(Et),Et=setTimeout(()=>{me.page=1,re()},300)},Fs=o=>{const n=Math.max(1,Math.min(o,me.pages||1));me.page=n,re()},Bs=o=>{me.page_size=o,me.page=1,re()},Hs=(o,n)=>{$s(),De.sort_by=o,De.sort_order=n,me.page=1,re()},ot=o=>{const n=Ae.value.find(U=>U.id===o);return(n==null?void 0:n.name)||String(o)},js=o=>{T.has(o)?(T.delete(o),o==="role"&&(k.role=""),o==="status"&&(k.status=""),o==="group"&&(k.group=""),o==="apiKeyGroup"&&(k.apiKeyGroup=null),o==="site"&&(k.site=null)):(T.add(o),o==="group"&&Te(),o==="apiKeyGroup"&&$e()),ct(),me.page=1,re()},Ks=o=>{const n=`attr_${o.id}`;T.has(n)?(T.delete(n),delete N[o.id]):(T.add(n),N[o.id]=""),ct(),me.page=1,re()},rt=(o,n)=>{N[o]=n},Ve=()=>{ct(),re()},Qs=o=>{_t.value=o,ft.value=!0},qs=()=>{ft.value=!1,_t.value=null},Ws=async o=>{const n=o.status==="active"?"disabled":"active";try{const U=await W.users.toggleStatus(o.id,n);if(u.showSuccess(d(n==="active"?"admin.users.userEnabled":"admin.users.userDisabled")),G.value){re();return}const l=c.value.find(_=>_.id===o.id);l&&(l.status=U.status,l.updated_at=U.updated_at)}catch(U){u.showError(he(U,d("admin.users.failedToToggle"))),console.error("Error toggling user status:",U)}},Ys=o=>{xt.value=o,yt.value=!0},Js=()=>{yt.value=!1,xt.value=null},Zs=o=>{$t.value=o,wt.value=!0},Xs=()=>{wt.value=!1,$t.value=null},ea=(o,n)=>{Le.value=null,St.value=o,Ut.value=n,Ct.value=!0},ta=()=>{Ct.value=!1,St.value=null,Ut.value=null},sa=o=>{He.value=o,st.value=!0},aa=async()=>{if(He.value)try{await W.users.delete(He.value.id),u.showSuccess(d("common.success")),st.value=!1,He.value=null,re()}catch(o){u.showError(he(o,d("admin.users.failedToDelete"))),console.error("Error deleting user:",o)}},la=async()=>{const o=Oe.value;Oe.value=[],bt.value=!0;const n=[];for(const l of o)try{await W.users.delete(l),n.push(l)}catch(_){console.error("Error deleting user:",_)}Vs(n),n.length>0&&(u.showSuccess(d("admin.users.bulkDelete.success",{count:n.length})),me.page=1);const U=o.length-n.length;U>0&&u.showError(d("admin.users.bulkDelete.failed",{count:U})),await re(),bt.value=!1},Mt=o=>{lt.value=o,At.value="add",at.value=!0},Wt=o=>{lt.value=o,At.value="subtract",at.value=!0},oa=()=>{at.value=!1,lt.value=null},Yt=o=>{Ne.value=o,Vt.value=!0},ra=()=>{Vt.value=!1,Ne.value=null},Gt=h(!1),Rt=h(null),na=o=>{Rt.value=o,Gt.value=!0},ia=()=>{Gt.value=!1,Rt.value=null},It=h(!1),Pt=h(null),ua=o=>{Pt.value=o,It.value=!0},da=()=>{It.value=!1,Pt.value=null},ca=()=>{Ne.value&&Mt(Ne.value)},ma=()=>{Ne.value&&Wt(Ne.value)},Jt=()=>{ge()};return Dt(async()=>{await qt(),ws(),b(),re(),(p.value||T.has("group"))&&Te(),T.has("apiKeyGroup")&&$e(),document.addEventListener("click",Qt),window.addEventListener("scroll",Jt,!0)}),ms(()=>{document.removeEventListener("click",Qt),window.removeEventListener("scroll",Jt,!0),clearTimeout(Et),Me==null||Me.abort()}),(o,n)=>(r(),ie(Sa,null,{default:O(()=>{var U;return[A(Ua,null,{filters:O(()=>[e("div",tc,[e("div",sc,[e("div",ac,[A(Q,{name:"search",size:"md",class:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400"}),F(e("input",{"onUpdate:modelValue":n[0]||(n[0]=l=>se.value=l),type:"text",placeholder:t(d)("admin.users.searchUsers"),class:"input pl-10",onInput:Os}
2,null,40,lc),[[X,se.value]])]),T.has("role")?(r(),i("div",oc,[A(Ue,{modelValue:k.role,"onUpdate:modelValue":n[1]||(n[1]=l=>k.role=l),options:[{value:"",label:t(d)("admin.users.allRoles")},{value:"admin",label:t(d)("admin.users.admin")},{value:"staff",label:t(d)("admin.users.roles.staff")},{value:"user",label:t(d)("admin.users.user")}],onChange:Ve},null,8,["modelValue","options"])])):R("",!0),T.has("status")?(r(),i("div",rc,[A(Ue,{modelValue:k.status,"onUpdate:modelValue":n[2]||(n[2]=l=>k.status=l),options:[{value:"",label:t(d)("admin.users.allStatus")},{value:"active",label:t(d)("common.active")},{value:"disabled",label:t(d)("admin.users.disabled")}],onChange:Ve},null,8,["modelValue","options"])])):R("",!0),T.has("group")?(r(),i("div",nc,[A(Ue,{modelValue:k.group,"onUpdate:modelValue":n[3]||(n[3]=l=>k.group=l),options:We.value,searchable:"",creatable:"","creatable-prefix":t(d)("admin.users.fuzzySearch"),"search-placeholder":t(d)("admin.users.searchAuthorizedGroups"),onChange:Ve},null,8,["modelValue","options","creatable-prefix","search-placeholder"])])):R("",!0),T.has("apiKeyGroup")?(r(),i("div",ic,[A(Ue,{modelValue:k.apiKeyGroup,"onUpdate:modelValue":n[4]||(n[4]=l=>k.apiKeyGroup=l),options:Ye.value,searchable:"","search-placeholder":t(d)("admin.users.searchApiKeyGroups"),onChange:Ve},null,8,["modelValue","options","search-placeholder"])])):R("",!0),T.has("site")?(r(),i("div",uc,[A(Ue,{modelValue:k.site,"onUpdate:modelValue":n[5]||(n[5]=l=>k.site=l),options:ut.value,onChange:Ve},null,8,["modelValue","options"])])):R("",!0),(r(!0),i(Z,null,ae(N,(l,_)=>{var L,B,pe,ve;return r(),i(Z,{key:_},[T.has(`attr_${_}`)?(r(),i("div",dc,[["text","textarea","email","url","date"].includes(((L=Je(Number(_)))==null?void 0:L.type)||"text")?(r(),i("input",{key:0,value:l,onInput:ue=>rt(Number(_),ue.target.value),onKeyup:Lt(Ve,["enter"]),placeholder:ot(Number(_)),class:"input w-full"},null,40,cc)):((B=Je(Number(_)))==null?void 0:B.type)==="number"?(r(),i("input",{key:1,value:l,type:"number",onInput:ue=>rt(Number(_),ue.target.value),onKeyup:Lt(Ve,["enter"]),placeholder:ot(Number(_)),class:"input w-full"},null,40,mc)):["select","multi_select"].includes(((pe=Je(Number(_)))==null?void 0:pe.type)||"")?(r(),i("div",pc,[A(Ue,{"model-value":l,options:[{value:"",label:ot(Number(_))},...((ve=Je(Number(_)))==null?void 0:ve.options)||[]],"onUpdate:modelValue":ue=>{rt(Number(_),String(ue??"")),Ve()}},null,8,["model-value","options","onUpdate:modelValue"])])):(r(),i("input",{key:3,value:l,onInput:ue=>rt(Number(_),ue.target.value),onKeyup:Lt(Ve,["enter"]),placeholder:ot(Number(_)),class:"input w-full"},null,40,fc))])):R("",!0)],64)}),128))]),e("div",vc,[e("div",bc,[e("button",{onClick:re,disabled:G.value,class:"btn btn-secondary px-2 md:px-3",title:t(d)("common.refresh")},[A(Q,{name:"refresh",size:"md",class:oe(G.value?"animate-spin":"")},null,8,["class"])],8,yc),e("div",{class:"relative",ref_key:"filterDropdownRef",ref:ye},[e("button",{onClick:n[6]||(n[6]=l=>le.value=!le.value),class:"btn btn-secondary px-2 md:px-3",title:t(d)("admin.users.filterSettings")},[A(Q,{name:"filter",size:"sm",class:"md:mr-1.5"}),e("span",hc,s(t(d)("admin.users.filterSettings")),1)],8,gc),le.value?(r(),i("div",_c,[(r(!0),i(Z,null,ae(ks.value,l=>(r(),i("button",{key:l.key,onClick:_=>js(l.key),class:"flex w-full items-center justify-between px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[e("span",null,s(l.name),1),T.has(l.key)?(r(),ie(Q,{key:0,name:"check",size:"sm",class:"text-primary-500","stroke-width":2})):R("",!0)],8,xc))),128)),dt.value.length>0?(r(),i("div",kc)):R("",!0),(r(!0),i(Z,null,ae(dt.value,l=>(r(),i("button",{key:l.id,onClick:_=>Ks(l),class:"flex w-full items-center justify-between px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[e("span",null,s(l.name),1),T.has(`attr_${l.id}`)?(r(),ie(Q,{key:0,name:"check",size:"sm",class:"text-primary-500","stroke-width":2})):R("",!0)],8,wc))),128))])):R("",!0)],512),e("div",{class:"relative",ref_key:"columnDropdownRef",ref:ce},[e("button",{onClick:n[7]||(n[7]=l=>
2V.value=!V.value),class:"btn btn-secondary px-2 md:px-3",title:t(d)("admin.users.columnSettings")},[n[17]||(n[17]=e("svg",{class:"h-4 w-4 md:mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1.5"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 4.5v15m6-15v15m-10.875 0h15.75c.621 0 1.125-.504 1.125-1.125V5.625c0-.621-.504-1.125-1.125-1.125H4.125C3.504 4.5 3 5.004 3 5.625v12.75c0 .621.504 1.125 1.125 1.125z"})],-1)),e("span",Cc,s(t(d)("admin.users.columnSettings")),1)],8,$c),V.value?(r(),i("div",Sc,[(r(!0),i(Z,null,ae(x.value,l=>(r(),i("button",{key:l.key,disabled:M(l.key),onClick:_=>m(l.key),class:oe(["flex w-full items-center justify-between px-4 py-2 text-left text-sm",M(l.key)?"cursor-not-allowed text-gray-400 dark:text-gray-500":"text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"]),title:M(l.key)?t(d)("admin.users.columnAlwaysVisible"):""},[e("span",null,s(l.label),1),q(l.key)?(r(),ie(Q,{key:0,name:"check",size:"sm",class:oe(M(l.key)?"text-gray-400 dark:text-gray-500":"text-primary-500"),"stroke-width":2},null,8,["class"])):R("",!0)],10,Uc))),128))])):R("",!0)],512),e("button",{onClick:n[8]||(n[8]=l=>gt.value=!0),class:"btn btn-secondary px-2 md:px-3",title:t(d)("admin.users.attributes.configButton")},[A(Q,{name:"cog",size:"sm",class:"md:mr-1.5"}),e("span",Vc,s(t(d)("admin.users.attributes.configButton")),1)],8,Ac)]),t(et)>0?(r(),i("button",{key:0,class:"btn btn-secondary flex-1 md:flex-initial","data-test":"bulk-edit-limits",onClick:n[9]||(n[9]=l=>vt.value=!0)},[A(Q,{name:"users",size:"md",class:"mr-2"}),te(" "+s(t(d)("admin.users.bulkLimits.action",{count:t(et)})),1)])):R("",!0),t(et)>0?(r(),i("button",{key:1,class:"btn btn-danger flex-1 md:flex-initial","data-test":"bulk-delete-users",disabled:bt.value,onClick:n[10]||(n[10]=l=>Oe.value=[...t(mt)])},[A(Q,{name:"trash",size:"md",class:"mr-2"}),te(" "+s(t(d)("admin.users.bulkDelete.action",{count:t(et)})),1)],8,Ec)):R("",!0),e("button",{onClick:n[11]||(n[11]=l=>tt.value=!0),class:"btn btn-primary flex-1 md:flex-initial"},[A(Q,{name:"plus",size:"md",class:"mr-2"}),te(" "+s(t(d)("admin.users.createUser")),1)])])])]),table:O(()=>[A(Aa,{columns:g.value,data:Ht.value,loading:G.value,"row-key":"id",selectable:"","selected-keys":t(mt),"selection-label":Ms,"actions-count":7,"server-side-sort":!0,"default-sort-key":"created_at","default-sort-order":"desc","sort-storage-key":us,onSort:Hs,"onUpdate:selectedKeys":Es},ga({"cell-email":O(({value:l})=>[e("div",Mc,[e("div",Gc,[e("span",Rc,s(l.charAt(0).toUpperCase()),1)]),e("span",Ic,s(l),1)])]),"cell-username":O(({value:l})=>[e("span",Pc,s(l||"-"),1)]),"cell-notes":O(({value:l})=>[e("div",Lc,[l?(r(),i("span",{key:0,title:l.length>30?l:void 0,class:"block truncate text-sm text-gray-600 dark:text-gray-400"},s(l.length>30?l.substring(0,25)+"...":l),9,Nc)):(r(),i("span",zc,"-"))])]),"cell-role":O(({value:l})=>[e("span",{class:oe(["badge",l==="admin"?"badge-purple":"badge-gray"])},s(t(d)("admin.users.roles."+l)),3)]),"cell-tier":O(({row:l})=>[l.tier_key?(r(),i("span",Oc,[A(Ga,{"tier-key":l.tier_key,size:"sm"},null,8,["tier-key"]),e("span",Fc,s(l.tier_name||l.tier_key),1),l.tier_manual?(r(),i("span",{key:0,class:"rounded bg-blue-100 px-1 text-[10px] text-blue-700 dark:bg-blue-900/50 dark:text-blue-200",title:t(d)("admin.users.tierPinnedShort")},s(t(d)("admin.users.tierPinnedShort")),9,Bc)):R("",!0)])):(r(),i("span",Hc,"—"))]),"cell-groups":O(({row:l})=>[Ee.value.length>0?(r(),i("div",jc,[_e(l).exclusive.length>0?(r(),i("span",{key:0,class:"group/ex relative inline-flex cursor-pointer items-center gap-1 whitespace-nowrap text-xs",onClick:Se(_=>Ns(l.id),["stop"])},[A(Q,{name:"shield",size:"xs",class:"h-3.5 w-3.5 text-purple-500 dark:text-purple-400"}),e("span",Qc,s(_e(l).exclusive.length),1),e("span",qc,s(t(d)("admin.users.exclusiveLabel")),1),Le.value!==l.id?(r(),i("div",Wc,[n[18]||(n[18]=e("div",{class:"absolute left-4 bottom-full border-4 border-transparent border-b-gray-900 dark:border-b-dark-600"},null,-1)),e("div",Yc,[(r(!0),i(Z,null,ae(_e(l).exclusive,_=>(r(),i("span",{key:_.id},s(_.name),1))),128))])])):R("",!0),Le.value===l.id?(r(),i("div",Jc,[e("div",Zc,s(t(d)("admin.users.clickToReplace")),1),(r(!0),i(Z,null,ae(_e(l).exclusive,_=>(r(),i("div",{key:_.id,class:"flex cursor-pointer items-center gap-2 px-3 py-2 text-gray-700 transition-colors hover:bg-primary-50 hover:text-primary-600 dark:text-dark-200 dark:hover:bg-primary-900/30 dark:hover:text-primary-400",onClick:Se(L=>ea(l,_),["stop"])},[A(Q,{name:"swap",size:"xs",class:"h-3.5 w-3.5 flex-shrink-0 opacity-50"}),e("span",em,s(_.name),1)],8,Xc))),128))])):R("",!0)],8,Kc)):R("",!0),_e(l).publicGroups.length>0?(r(),i("span",tm,[A(Q,{name:"globe",size:"xs",class:"h-3.5 w-3.5 text-gray-400 dark:text-dark-500"}),e("span",sm,s(_e(l).publicGroups.length),1),e("span",am,s(t(d)("admin.users.publicLabel")),1),e("div",lm,[n[19]||(n[19]=e("div",{class:"absolute left-4 bottom-full border-4 border-transparent border-b-gray-900 dark:border-b-dark-600"},null,-1)),e("div",om,[(r(!0),i(Z,null,ae(_e(l).publicGroups,_=>(r(),i("span",{key:_.id},s(_.name),1))),128))])])])):R("",!0),_e(l).exclusive.length===0&&_e(l).publicGroups.length===0?(r(),i("span",rm,"-")):R("",!0)])):(r(),i("span",nm,"-"))]),"cell-subscriptions":O(({row:l})=>[l.subscriptions&&l.subscriptions.length>0?(r(),i("div",im,[(r(!0),i(Z,null,ae(l.subscriptions,_=>{var L,B,pe,ve;return r(),ie(bs,{key:_.id,name:((L=_.group)==null?void 0:L.name)||"",platform:(B=_.group)==null?void 0:B.platform,"subscription-type":(pe=_.group)==null?void 0:pe.subscription_type,"rate-multiplier":(ve=_.group)==null?void 0:ve.rate_multiplier,"days-remaining":_.expires_at?zs(_.expires_at):null,title:_.expires_at?t(qe)(_.expires_at):""},null,8,["name","platform","subscription-type","rate-multiplier","days-remaining","t
2itle"])}),128))])):(r(),i("span",um,[A(Q,{name:"ban",size:"xs",class:"h-3.5 w-3.5"}),e("span",null,s(t(d)("admin.users.noSubscription")),1)]))]),"cell-balance":O(({value:l,row:_})=>[e("div",dm,[e("div",cm,[e("button",{class:"font-medium text-gray-900 underline decoration-dashed decoration-gray-300 underline-offset-4 transition-colors hover:text-primary-600 dark:text-white dark:decoration-dark-500 dark:hover:text-primary-400",onClick:L=>Yt(_)}," $"+s(l.toFixed(2)),9,mm),e("div",pm,[te(s(t(d)("admin.users.balanceHistoryTip"))+" ",1),n[20]||(n[20]=e("div",{class:"absolute left-1/2 top-full -translate-x-1/2 border-4 border-transparent border-t-gray-900 dark:border-t-dark-600"},null,-1))])]),e("button",{onClick:Se(L=>Mt(_),["stop"]),class:"rounded px-2 py-0.5 text-xs font-medium text-emerald-600 transition-colors hover:bg-emerald-50 dark:text-emerald-400 dark:hover:bg-emerald-900/20",title:t(d)("admin.users.deposit")},s(t(d)("admin.users.deposit")),9,fm)])]),"cell-balance_platform_quota":O(({row:l})=>[e("button",{type:"button",class:"block text-left underline decoration-dashed decoration-gray-300 underline-offset-4 transition-colors hover:decoration-primary-400 dark:decoration-dark-500",title:t(d)("admin.users.platformQuota.cellColumnTooltip"),onClick:_=>jt(l)},[A(ho,{quotas:Ze.value[l.id]},null,8,["quotas"])],8,vm)]),"cell-usage":O(({row:l})=>{var _,L,B;return[A(Xl,{today:((_=Re.value[l.id])==null?void 0:_.today_actual_cost)??0,total:((L=Re.value[l.id])==null?void 0:L.total_actual_cost)??0,"by-platform":(B=Re.value[l.id])==null?void 0:B.by_platform},null,8,["today","total","by-platform"])]}),"cell-usage_anthropic":O(({row:l})=>[A(nt,{usage:Xe(l.id,"anthropic")},null,8,["usage"])]),"cell-usage_openai":O(({row:l})=>[A(nt,{usage:Xe(l.id,"openai")},null,8,["usage"])]),"cell-usage_gemini":O(({row:l})=>[A(nt,{usage:Xe(l.id,"gemini")},null,8,["usage"])]),"cell-usage_antigravity":O(({row:l})=>[A(nt,{usage:Xe(l.id,"antigravity")},null,8,["usage"])]),"cell-concurrency":O(({row:l})=>[A(Tl,{current:l.current_concurrency??0,max:l.concurrency},null,8,["current","max"])]),"cell-status":O(({value:l})=>[e("div",$m,[e("span",{class:oe(["inline-block h-2 w-2 rounded-full",l==="active"?"bg-green-500":"bg-red-500"])},null,2),e("span",Cm,s(l==="active"?t(d)("common.active"):t(d)("admin.users.disabled")),1)])]),"cell-created_at":O(({value:l})=>[e("span",Sm,s(t(qe)(l)),1)]),"cell-last_used_at":O(({value:l})=>[e("span",Um,s(l?t(qe)(l):"-"),1)]),"cell-last_active_at":O(({value:l})=>[e("span",Am,s(l?t(qe)(l):"-"),1)]),"cell-actions":O(({row:l})=>[e("div",Vm,[e("button",{onClick:_=>Qs(l),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-gray-100 hover:text-primary-600 dark:hover:bg-dark-700 dark:hover:text-primary-400"},[A(Q,{name:"edit",size:"sm"}),e("span",Mm,s(t(d)("common.edit")),1)],8,Em),l.role!=="admin"?(r(),i("button",{key:0,onClick:_=>Ws(l),class:oe(["flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors",l.status==="active"?"hover:bg-orange-50 hover:text-orange-600 dark:hover:bg-orange-900/20 dark:hover:text-orange-400":"hover:bg-green-50 hover:text-green-600 dark:hover:bg-green-900/20 dark:hover:text-green-400"])},[l.status==="active"?(r(),ie(Q,{key:0,name:"ban",size:"sm"})):(r(),ie(Q,{key:1,name:"checkCircle",size:"sm"})),e("span",Rm,s(l.status==="active"?t(d)("admin.users.disable"):t(d)("admin.users.enable")),1)],10,Gm)):R("",!0),e("button",{onClick:_=>Ls(l,_),class:oe(["action-menu-trigger flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-dark-700 dark:hover:text-white",{"bg-gray-100 text-gray-900 dark:bg-dark-700 dark:text-white":Fe.value===l.id}])},[A(Q,{name:"more",size:"sm"}),e("span",Pm,s(t(d)("common.more")),1)],10,Im)])]),empty:O(()=>[A(Ea,{title:t(d)("admin.users.noUsersYet"),description:t(d)("admin.users.createFirstUser"),"action-text":t(d)("admin.users.createUser"),onAction:n[12]||(n[12]=l=>tt.value=!0)},null,8,["title","description","action-text"])]),_:2},[ae(Ae.value.filter(l=>l.enabled),l=>({name:`cell-attr_${l.id}`,fn:O(({row:_})=>[e("div",Dc,[e("span",{class:"block truncate text-sm text-gray-700 dark:text-gray-300",title:a(_.id,l.id)},s(a(_.id,l.id)),9,Tc)])])})),ae(H,l=>({name:`header-${l}`,fn:O(({column:_})=>[e("div",bm,[e("span",null,s(_.label),1),e("div",ym,[e("button",{type:"button",class:oe(["flex items-center gap-1 rounded px-1 py-0.5 transition-colors hover:bg-gray-200 dark:hover:bg-dark-700",ne.value&&ne.value.key===l?"text-primary-600 dark:text-primary-400":"text-gray-400 dark:text-dark-500"]),title:t(d)("admin.users.sortBy"),"data-test":`usage-sort-trigger-${l}`,onClick:Se(L=>Ss(l),["stop"])},[ne.value&&ne.value.key===l?(r(),i("span",hm,s(ne.value.metric==="today"?t(d)("admin.users.today"):t(d)("admin.users.total")),1)):R("",!0),ne.value&&ne.value.key===l?(r(),i("svg",{key:1,class:oe(["h-3.5 w-3.5",{"rotate-180":ne.value.order==="desc"}]),fill:"currentColor",viewBox:"0 0 20 20"},[...n[21]||(n[21]=[e("path",{"fill-rule":"evenodd",d:"M14.707 12.707
2a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z","clip-rule":"evenodd"},null,-1)])],2)):(r(),i("svg",_m,[...n[22]||(n[22]=[e("path",{d:"M10 3l-4 5h8l-4-5zM10 17l4-5H6l4 5z"},null,-1)])]))],10,gm),Ie.value===l?(r(),i("div",xm,[(r(),i(Z,null,ae(["today","total"],L=>e("button",{key:L,type:"button",class:oe(["flex w-full items-center justify-between gap-3 px-3 py-1.5 text-left text-xs normal-case tracking-normal hover:bg-gray-100 dark:hover:bg-dark-700",Ot(l,L)?"font-medium text-primary-600 dark:text-primary-400":"text-gray-700 dark:text-gray-300"]),"data-test":`usage-sort-${l}-${L}`,onClick:Se(B=>Cs(l,L),["stop"])},[e("span",null,s(L==="today"?t(d)("admin.users.today"):t(d)("admin.users.total")),1),Ft(l,L)?(r(),i("svg",{key:0,class:oe(["h-3 w-3",{"rotate-180":Ft(l,L)==="desc"}]),fill:"currentColor",viewBox:"0 0 20 20"},[...n[23]||(n[23]=[e("path",{"fill-rule":"evenodd",d:"M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z","clip-rule":"evenodd"},null,-1)])],2)):R("",!0)],10,km)),64)),e("div",wm,s(t(d)("admin.users.sortCurrentPageOnly")),1)])):R("",!0)])])])}))]),1032,["columns","data","loading","selected-keys"])]),pagination:O(()=>[me.total>0?(r(),ie(Va,{key:0,page:me.page,total:me.total,"page-size":me.page_size,"onUpdate:page":Fs,"onUpdate:pageSize":Bs},null,8,["page","total","page-size"])):R("",!0)]),_:1}),(r(),ie(ps,{to:"body"},[Fe.value!==null&&je.value?(r(),i("div",{key:0,class:"action-menu-content fixed z-[9999] w-48 overflow-hidden rounded-xl bg-white shadow-lg ring-1 ring-black/5 dark:bg-dark-800 dark:ring-white/10",style:fs({top:je.value.top+"px",left:je.value.left+"px"})},[e("div",Lm,[(r(!0),i(Z,null,ae(c.value,l=>{var _,L;return r(),i(Z,{key:l.id},[l.id===Fe.value?(r(),i(Z,{key:0},[Rs.value?(r(),i("button",{key:0,onClick:B=>{Ys(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[A(Q,{name:"key",size:"sm",class:"text-gray-400","stroke-width":2}),te(" "+s(t(d)("admin.users.apiKeys")),1)],8,Nm)):R("",!0),e("button",{onClick:B=>{Zs(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[A(Q,{name:"users",size:"sm",class:"text-gray-400","stroke-width":2}),te(" "+s(t(d)("admin.users.groups")),1)],8,zm),n[27]||(n[27]=e("div",{class:"my-1 border-t border-gray-100 dark:border-dark-700"},null,-1)),e("button",{onClick:B=>{Mt(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[A(Q,{name:"plus",size:"sm",class:"text-emerald-500","stroke-width":2}),te(" "+s(t(d)("admin.users.deposit")),1)],8,Dm),e("button",{onClick:B=>{Wt(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[n[24]||(n[24]=e("svg",{class:"h-4 w-4 text-amber-500",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M20 12H4"})],-1)),te(" "+s(t(d)("admin.users.withdraw")),1)],8,Tm),e("button",{onClick:B=>{jt(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[A(Q,{name:"chartBar",size:"sm",class:"text-gray-400","stroke-width":2}),te(" "+s(t(d)("admin.users.platformQuota.menuItem")),1)],8,Om),e("button",{onClick:B=>{Yt(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[A(Q,{name:"dollar",size:"sm",class:"text-gray-400","stroke-width":2}),te(" "+s(t(d)("admin.users.balanceHistory")),1)],8,Fm),(_=t(u).cachedPublicSettings)!=null&&_.referral_enabled?(r(),i(Z,{key:1},[n[25]||(n[25]=e("div",{class:"my-1 border-t border-gray-100 dark:border-dark-700"},null,-1)),e("button",{onClick:B=>{na(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[A(Q,{name:"users",size:"sm",class:"text-indigo-500","stroke-width":2}),te(" "+s(t(d)("admin.users.referralConfig.menuItem")),1)],8,Bm)],64)):R("",!0),(L=t(u).cachedPublicSettings)!=null&&L.invoice_enabled?(r(),i(Z,{key:2},[n[26]||(n[26]=e("div",{class:"my-1 border-t border-gray-100 dark:border-dark-700"},null,-1)),e("button",{onClick:B=>{ua(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[A(Q,{name:"dollar",size:"sm",class:"text-emerald-500","stroke-width":2}),te(" "+s(t(d)("admin.users.invoiceConfig.menuItem")),1)],8,Hm)],64)):R("",!0),n[28]||(n[28]=e("div",{class:"my-1 border-t border-gray-100 dark:border-dark-700"},null,-1)),l.role!=="admin"?(r(),i("button",{key:3,onClick:B=>{sa(l),ge()},class:"flex w-full items-center gap-2 px-4 py-2 text-sm text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20"},[A(Q,{name:"trash",size:"sm","stroke-width":2}),te(" "+s(t(d)("common.delete")),1)],8,jm)):R("",!0)],64)):R("",!0)],64)}),128))])],4)):R("",!0)])),A(zt,{show:st.value,title:t(d)("admin.users.deleteUser"),message:t(d)("admin.users.deleteConfirm",{email:(U=He.value)==null?void 0:U.email}),danger:!0,onConfirm:aa,onCancel:n[13]||(n[13]=l=>st.value=!1)},null,8,["show","title","message"]),A(zt,{show:Oe.value.length>0,title:t(d)("admin.users.bulkDelete.title"),message:t(d)("admin.users.bulkDelete.confirm",{count:Oe.value.length}),"confirm-text":t(d)("common.delete"),danger:"",onConfirm:la,onCancel:n[14]||(n[14]=l=>Oe.value=[])},null,8,["show","title","message","confirm-text"]),A(To,{show:tt.value,onClose:n[15]||(n[15]=l=>tt.value=!1),onSuccess:re},null,8,["show"]),A(Gr,{show:ft.value,user:_t.value,onClose:qs,onSuccess:re},null,8,["show","user"]),A(Qr,{show:vt.value,"selected-ids":t(mt),onClose:n[16]||(n[16]=l=>vt.value=!1),onSuccess:Ts},null,8,["show","selected-ids"]),A(Cn,{show:ht.value,user:kt.value,onClose:Is,onSuccess:re},null,8,["show","user"]),A(bi,{show:yt.value,user:xt.value,onClose:Js},null,8,["show","user"]),A(ku,{show:wt.value,user:$t.value,onClose:Xs,onSuccess:re},null,8,["show","user"]),A(Du,{show:at.value,user:lt.value,operation:At.value,onClose:oa,onSuccess:re},null,8,["show","user","operation"]),A(Na,{show:Vt.value,user:Ne.value,onClose:ra,onDeposit:ca,onWithdraw:ma},null,8,["show","user"]),A(ad,{show:Ct.value,user:St.value,"old-group":Ut.value,"all-groups":Ee.value,onClose:ta,onSuccess:re},null,8,["show","user","old-group","all-groups"]),A(Ll,{show:gt.value,onClose:Ds},null,8,["show"]),A(Nd,{show:Gt.value,user:Rt.value,onClose:ia,onSuccess:re},null,8,["show","user"]),A(ec,{show:It.value,user:Pt.value,onClose:da},null,8,["show","user"])]}),_:1}))}});
2export{Up 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.