PageSourceSearch

https://lisonevf-sub2api.hf.space/assets/UsersView-DR085_2X.js

js lisonevf-sub2api.hf.space collected 2026-10-03 17:04:33 UTC 102,505 bytes, 1 lines download raw bytes

1import{d as de,r as x,q as ge,w as fe,y as i,k as E,u as s,I as F,A as e,E as a,J as ee,F as q,K as X,C as z,Q as j,V as J,_ as zt,U as ve,B as l,c as Y,z as te,G as oe,o as vt,a2 as Us,a as Ht,P as Tt,S as jt,a6 as Vs,M as Es,X as ht}from"./vendor-vue-awKEiHNT.js";import{a as xe,g as _e,_ as H,k as K,j as Ne,C as Ms}from"./index-BRNVjcy7.js";import{g as Gs,P as zs}from"./Pagination-oN635sWO.js";import{_ as Rs}from"./AppLayout.vue_vue_type_script_setup_true_lang-CY9EIbyD.js";import{T as Os}from"./TablePageLayout-BLLAp_Pp.js";import{D as Ns}from"./DataTable-bK2NE7Rf.js";import{_ as Pt}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang-eZWWYsMR.js";import{_ as Fs}from"./EmptyState.vue_vue_type_script_setup_true_lang-CENMOWZn.js";import{_ as Qt}from"./GroupBadge.vue_vue_type_script_setup_true_lang-Dhive2Dj.js";import{S as Ee}from"./Select-__3F0nQQ.js";import{c as Bs}from"./stableObjectKey-DullU5Fx.js";import{u as pe}from"./vendor-i18n-C6Qmba7R.js";import{u as Ds}from"./useClipboard-kxaLQjEf.js";import{G as Ls}from"./GroupOptionItem-Cv80mqwe.js";import{_ as Rt}from"./PlatformIcon.vue_vue_type_script_setup_true_lang-a2YBlWvd.js";import{_ as Is}from"./UserBalanceHistoryModal.vue_vue_type_script_setup_true_lang-DQQFD5nC.js";import"./vendor-misc-eHgekcyd.js";/* empty css                                                                  */import"./LocaleSwitcher-DEoz9uK0.js";/* empty css                                                                       */import"./peak-rate-qZGUWdry.js";const Hs=-1,Ts=-2,js=-3,Ps=-4;function Qs(S,d){const u=[],R=[],n=[],A=[];for(const M of S){const m={value:M.id,label:M.name};M.status!=="active"?A.push(m):M.subscription_type==="subscription"?n.push(m):M.is_exclusive?u.push(m):R.push(m)}const _=[{value:null,label:d.all}],y=[[d.exclusive,Hs,u],[d.public,Ts,R],[d.subscription,js,n],[d.disabled,Ps,A]];for(const[M,m,b]of y)b.length!==0&&(_.push({value:m,label:M,kind:"group",disabled:!0}),_.push(...b));return _}const Ks={class:"space-y-4"},qs={class:"flex items-center justify-between"},Js={class:"text-sm text-gray-500 dark:text-dark-400"},Ws={key:0,class:"flex justify-center py-12"},Ys={key:1,class:"py-12 text-center"},Xs={class:"mt-2 text-sm text-gray-500 dark:text-dark-400"},Zs={class:"text-xs text-gray-400 dark:text-dark-500"},ea={key:2,class:"max-h-96 space-y-2 overflow-y-auto"},ta=["title"],sa={class:"min-w-0 flex-1"},aa={class:"flex items-center gap-2"},oa={class:"font-medium text-gray-900 dark:text-white"},ra={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"},la={key:0,class:"badge badge-danger text-xs"},na={key:1,class:"badge badge-gray text-xs"},ia={class:"mt-0.5 flex items-center gap-2 text-xs text-gray-500 dark:text-dark-400"},ua={class:"badge badge-gray"},da={key:0,class:"truncate"},ca={class:"flex items-center gap-1"},pa=["onClick","title"],ma=["onClick","title"],ya={class:"flex justify-end"},ga={class:"input-label"},fa=["placeholder","disabled"],ha={class:"input-hint"},ba={class:"input-label"},va=["placeholder"],_a={class:"input-label"},xa={key:0,class:"space-y-2"},ka={class:"input-label"},wa=["onUpdate:modelValue","placeholder"],$a=["onUpdate:modelValue","placeholder"],Ca=["onClick"],Sa={class:"input-label"},Aa=["placeholder"],Ua={class:"input-label"},Va=["placeholder"],Ea={class:"flex items-center gap-6"},Ma={class:"flex items-center gap-2"},Ga={class:"text-sm text-gray-700 dark:text-gray-300"},za={class:"flex items-center gap-2"},Ra={class:"text-sm text-gray-700 dark:text-gray-300"},Oa={class:"flex justify-end gap-3"},Na=["disabled"],Fa={key:0,class:"-ml-1 mr-2 h-4 w-4 animate-spin",fill:"none",viewBox:"0 0 24 24"},Ba=de({__name:"UserAttributesConfigModal",props:{show:{type:Boolean}},emits:["close"],setup(S,{emit:d}){const{t:u}=pe(),R=xe(),n=S,A=d,_=["text","textarea","number","email","url","date","select","multi_select"],y=x(!1),M=x(!1),m=x([]),b=x(!1),U=x(!1),k=x(null),f=x(null),c=Bs("user-attr-option"),h=ge({key:"",name:"",type:"text",description:"",placeholder:"",required:!1,enabled:!0,options:[]}),T=async()=>{var w,$;y.value=!0;try{m.value=await K.userAttributes.listDefinitions()}catch(B){R.showError((($=(w=B.response)==null?void 0:w.data)==null?void 0:$.detail)||u("admin.users.attributes.failedToLoad"))}finally{y.value=!1}},P=()=>{k.value=null,h.key="",h.name="",h.type="text",h.description="",h.placeholder="",h.required=!1,h.enabled=!0,h.options=[],b.value=!0},ce=w=>{k.value=w,h.key=w.key,h.name=w.name,h.type=w.type,h.description=w.description||"",h.placeholder=w.placeholder||"",h.required=w.required,h.enabled=w.enabled,h.options=w.options?w.options.map($=>({...$})):[],b.value=!0},I=()=>{b.value=!1,k.value=null},g=()=>{h.options.push({value:"",label:""})},v=w=>{h.options.splice(w,1)},G=async()=>{var w,$;if(!h.key.trim()){R.showError(u("admin.users.attributes.keyRequired"));return}if(!h.name.trim()){R.showError(u("admin.users.attributes.nameRequired"));return}if((h.type==="select"||h.type==="multi_select")&&h.options.length===0){R.showError(u("admin.users.attributes.optionsRequired"));return}M.value=!0;try{const B={key:h.key,name:h.name,type:h.type,description:h.description||void 0,placeholder:h.placeholder||void 0,required:h.required,enabled:h.enabled,options:h.type==="select"||h.type==="multi_select"?h.options:void 0};k.value?(await K.userAttributes.updateDefinition(k.value.id,B),R.showSuccess(u("admin.users.attributes.updated"))):(await K.userAttributes.createDefinition(B),R.showSuccess(u("admin.users.attributes.created"))),I(),T()}catch(B){const N=k.value?u("admin.users.attributes.failedToUpdate"):u("admin.users.attributes.failedToCreate");R.showError((($=(w=B.response)==null?void 0:w.data)==null?void 0:$.detail)||N)}finally{M.value=!1}},D=w=>{f.value=w,U.value=!0},Q=async()=>{var w,$;if(f.value)try{await K.userAttributes.deleteDefinition(f.value.id),R.showSuccess(u("admin.users.attributes.deleted")),U.value=!1,f.value=null,T()}catch(B){R.showError((($=(w=B.response)==null?void 0:w.data)==null?void 0:$.detail)||u("admin.users.attributes.failedToDelete"))}};return fe(()=>n.show,w=>{w&&T()}),(w,$)=>{var B;return l(),i(q,null,[E(_e,{show:S.show,title:s(u)("admin.users.attributes.title"),width:"wide",onClose:$[1]||($[1]=N=>A("close"))},{footer:F(()=>[e("div",ya,[e("button",{onClick:$[0]||($[0]=N=>A("close")),class:"btn btn-secondary"},a(s(u)("common.close")),1)])]),default:F(()=>[e("div",Ks,[e("div",qs,[e("p",Js,a(s(u)("admin.users.attributes.description")),1),e("button",{onClick:P,class:"btn btn-primary btn-sm"},[E(H,{name:"plus",size:"sm",class:"mr-1.5","stroke-width":2}),ee(" "+a(s(u)("admin.users.attributes.addAttribute")),1)])]),y.value?(l(),i("div",Ws,[...$[10]||($[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)])])):m.value.length===0?(l(),i("div",Ys,[$[11]||($[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",Xs,a(s(u)("admin.users.attributes.noAttributes")),1),e("p",Zs,a(s(u)("admin.users.attributes.noAttributesHint")),1)])):(l(),i("div",ea,[(l(!0),i(q,null,X(m.value,N=>(l(),i("div",{key:N.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:s(u)("admin.users.attributes.dragToReorder")},[E(H,{name:"menu",size:"md"})],8,ta),e("div",sa,[e("div",aa,[e("span",oa,a(N.name),1),e("span",ra,a(N.key),1),N.required?(l(),i("span",la,a(s(u)("admin.users.attributes.required")),1)):z("",!0),N.enabled?z("",!0):(l(),i("span",na,a(s(u)("common.disabled")),1))]),e("div",ia,[e("span",ua,a(s(u)(`admin.users.attributes.types.${N.type}`)),1),N.description?(l(),i("span",da,a(N.description),1)):z("",!0)])]),e("div",ca,[e("button",{onClick:O=>ce(N),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:s(u)("common.edit")},[E(H,{name:"edit",size:"sm"})],8,pa),e("button",{onClick:O=>D(N),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:s(u)("common.delete")},[E(H,{name:"trash",size:"sm"})],8,ma)])]))),128))]))])]),_:1},8,["show","title"]),E(_e,{show:b.value,title:k.value?s(u)("admin.users.attributes.editAttribute"):s(u)("admin.users.attributes.addAttribute"),width:"normal",onClose:I},{footer:F(()=>[e("div",Oa,[e("button",{onClick:I,type:"button",class:"btn btn-secondary"},a(s(u)("common.cancel")),1),e("button",{type:"submit",form:"attribute-form",disabled:M.value,class:"btn btn-primary"},[M.value?(l(),i("svg",Fa,[...$[12]||($[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)])])):z("",!0),ee(" "+a(M.value?s(u)("common.saving"):k.value?s(u)("common.update"):s(u)("common.create")),1)],8,Na)])]),default:F(()=>[e("form",{id:"attribute-form",onSubmit:ve(G,["prevent"]),class:"space-y-4"},[e("div",null,[e("label",ga,a(s(u)("admin.users.attributes.key")),1),j(e("input",{"onUpdate:modelValue":$[2]||($[2]=N=>h.key=N),type:"text",required:"",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$",class:"input font-mono",placeholder:s(u)("admin.users.attributes.keyHint"),disabled:!!k.value},null,8,fa),[[J,h.key]]),e("p",ha,a(s(u)("admin.users.attributes.keyHint")),1)]),e("div",null,[e("label",ba,a(s(u)("admin.users.attributes.name")),1),j(e("input",{"onUpdate:modelValue":$[3]||($[3]=N=>h.name=N),type:"text",required:"",class:"input",placeholder:s(u)("admin.users.attributes.nameHint")},null,8,va),[[J,h.name]])]),e("div",null,[e("label",_a,a(s(u)("admin.users.attributes.type")),1),E(Ee,{modelValue:h.type,"onUpdate:modelValue":$[4]||($[4]=N=>h.type=N),options:_.map(N=>({value:N,label:s(u)(`admin.users.attributes.types.${N}`)}))},null,8,["modelValue","options"])]),h.type==="select"||h.type==="multi_select"?(l(),i("div",xa,[e("label",ka,a(s(u)("admin.users.attributes.options")),1),(l(!0),i(q,null,X(h.options,
1(N,O)=>(l(),i("div",{key:s(c)(N),class:"flex items-center gap-2"},[j(e("input",{"onUpdate:modelValue":le=>N.value=le,type:"text",class:"input flex-1 font-mono text-sm",placeholder:s(u)("admin.users.attributes.optionValue"),required:""},null,8,wa),[[J,N.value]]),j(e("input",{"onUpdate:modelValue":le=>N.label=le,type:"text",class:"input flex-1 text-sm",placeholder:s(u)("admin.users.attributes.optionLabel"),required:""},null,8,$a),[[J,N.label]]),e("button",{type:"button",onClick:le=>v(O),class:"rounded-lg p-1.5 text-gray-500 hover:bg-red-50 hover:text-red-600"},[E(H,{name:"x",size:"sm","stroke-width":2})],8,Ca)]))),128)),e("button",{type:"button",onClick:g,class:"btn btn-secondary btn-sm"},[E(H,{name:"plus",size:"sm",class:"mr-1","stroke-width":2}),ee(" "+a(s(u)("admin.users.attributes.addOption")),1)])])):z("",!0),e("div",null,[e("label",Sa,a(s(u)("admin.users.attributes.fieldDescription")),1),j(e("input",{"onUpdate:modelValue":$[5]||($[5]=N=>h.description=N),type:"text",class:"input",placeholder:s(u)("admin.users.attributes.fieldDescriptionHint")},null,8,Aa),[[J,h.description]])]),e("div",null,[e("label",Ua,a(s(u)("admin.users.attributes.placeholder")),1),j(e("input",{"onUpdate:modelValue":$[6]||($[6]=N=>h.placeholder=N),type:"text",class:"input",placeholder:s(u)("admin.users.attributes.placeholderHint")},null,8,Va),[[J,h.placeholder]])]),e("div",Ea,[e("label",Ma,[j(e("input",{"onUpdate:modelValue":$[7]||($[7]=N=>h.required=N),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-primary-600"},null,512),[[zt,h.required]]),e("span",Ga,a(s(u)("admin.users.attributes.required")),1)]),e("label",za,[j(e("input",{"onUpdate:modelValue":$[8]||($[8]=N=>h.enabled=N),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-primary-600"},null,512),[[zt,h.enabled]]),e("span",Ra,a(s(u)("admin.users.attributes.enabled")),1)])])],32)]),_:1},8,["show","title"]),E(Pt,{show:U.value,title:s(u)("admin.users.attributes.deleteAttribute"),message:s(u)("admin.users.attributes.deleteConfirm",{name:(B=f.value)==null?void 0:B.name}),"confirm-text":s(u)("common.delete"),"cancel-text":s(u)("common.cancel"),danger:!0,onConfirm:Q,onCancel:$[9]||($[9]=N=>U.value=!1)},null,8,["show","title","message","confirm-text","cancel-text"])],64)}}}),Da={class:"flex items-center"},La={class:"font-mono"},Ia={class:"font-mono"},Ha=de({__name:"UserConcurrencyCell",props:{current:{},max:{}},setup(S){const d=S,u=Y(()=>{const{current:R,max:n}=d;return R>=n&&n>0?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":R>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(R,n)=>(l(),i("div",Da,[e("span",{class:te(["inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-xs font-medium",u.value])},[n[0]||(n[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",La,a(S.current),1),n[1]||(n[1]=e("span",{class:"text-gray-400 dark:text-gray-500"},"/",-1)),e("span",Ia,a(S.max),1)],2)]))}}),Ta={class:"group/usage relative text-sm"},ja={class:"flex items-center gap-1.5"},Pa={class:"text-gray-500 dark:text-gray-400"},Qa={class:"font-medium text-gray-900 dark:text-white"},Ka={class:"mt-0.5 flex items-center gap-1.5"},qa={class:"text-gray-500 dark:text-gray-400"},Ja={class:"font-medium text-gray-900 dark:text-white"},Wa={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"},Ya={class:"mb-1.5 flex items-center justify-between gap-3 border-b border-white/10 pb-1 text-[11px] opacity-80"},Xa={class:"font-mono"},Za={class:"capitalize"},eo={class:"font-mono"},Ot=1e-4,to=de({__name:"PlatformUsageBreakdown",props:{today:{},total:{},byPlatform:{}},setup(S){const d=S,{t:u}=pe(),R=Y(()=>{const M=[...d.byPlatform??[]].sort((f,c)=>c.total_actual_cost-f.total_actual_cost).map(f=>({...f})),m=M.reduce((f,c)=>f+c.total_actual_cost,0),b=M.reduce((f,c)=>f+c.today_actual_cost,0),U=Math.max(0,d.total-m),k=Math.max(0,d.today-b);return(U>Ot||k>Ot)&&M.push({platform:"__other__",today_actual_cost:k,total_actual_cost:U,isOther:!0}),M}),n=Y(()=>R.value.length>0),A={anthropic:"Claude",openai:"OpenAI",gemini:"Gemini",antigravity:"Antigravity"};function _(y){return A[y]??y}return(y,M)=>(l(),i("div",Ta,[e("div",ja,[e("span",Pa,a(s(u)("admin.users.today"))+":",1),e("span",Qa,"$"+a(S.today.toFixed(4)),1),n.value?(l(),oe(H,{key:0,name:"infoCircle",size:"xs",class:"text-gray-400 dark:text-gray-500"})):z("",!0)]),e("div",Ka,[e("span",qa,a(s(u)("admin.users.total"))+":",1),e("span",Ja,"$"+a(S.total.toFixed(4)),1)]),n.value?(l(),i("div",Wa,[e("div",Ya,[e("span",null,a(s(u)("admin.users.platformBreakdown")),1),e("span",Xa,a(s(u)("admin.users.today"))+" / "+a(s(u)("admin.users.total")),1)]),(l(!0),i(q,null,X(R.value,m=>(l(),i("div",{key:m.platform,class:te(["flex items-center justify-between gap-3 py-0.5",{"opacity-70 italic":m.isOther}])},[e("span",Za,a(m.isOther?s(u)("admin.users.platformOther"):_(m.platform)),1
1),e("span",eo,[ee(" $"+a(m.today_actual_cost.toFixed(4))+" ",1),M[0]||(M[0]=e("span",{class:"opacity-50"},"/",-1)),ee(" $"+a(m.total_actual_cost.toFixed(4)),1)])],2))),128))])):z("",!0)]))}}),so={key:0,class:"text-sm"},ao={class:"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"},lo={class:"mt-0.5 flex items-center gap-1.5"},no={class:"text-gray-500 dark:text-gray-400"},io={class:"font-medium text-gray-900 dark:text-white"},uo={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},Je=de({__name:"PlatformCostCell",props:{usage:{}},setup(S){const{t:d}=pe();return(u,R)=>S.usage?(l(),i("div",so,[e("div",ao,[e("span",oo,a(s(d)("admin.users.today"))+":",1),e("span",ro,"$"+a(S.usage.today_actual_cost.toFixed(4)),1)]),e("div",lo,[e("span",no,a(s(d)("admin.users.total"))+":",1),e("span",io,"$"+a(S.usage.total_actual_cost.toFixed(4)),1)])])):(l(),i("span",uo,"—"))}}),co={key:0,class:"text-xs text-gray-400 dark:text-gray-500"},po={key:1,class:"text-xs text-gray-400 dark:text-gray-500"},mo={key:2,class:"space-y-0.5 text-xs"},yo={class:"w-20 shrink-0 font-mono text-gray-700 dark:text-gray-300"},go={class:"text-gray-500 dark:text-gray-400"},fo={class:"text-gray-900 dark:text-white"},ho={class:"text-gray-500 dark:text-gray-400"},bo={class:"text-gray-900 dark:text-white"},vo={class:"text-gray-500 dark:text-gray-400"},_o={class:"text-gray-900 dark:text-white"},xo=de({__name:"UserPlatformQuotaCell",props:{quotas:{}},setup(S){const d=S,{t:u}=pe(),R=["anthropic","openai","gemini","antigravity","grok"],n=Y(()=>d.quotas?d.quotas.filter(y=>y.daily_limit_usd!=null||y.weekly_limit_usd!=null||y.monthly_limit_usd!=null).slice().sort((y,M)=>R.indexOf(y.platform)-R.indexOf(M.platform)):[]);function A(y){return y==null||Number.isNaN(y)?"0":String(Math.round(y*100)/100)}function _(y){return y==null?"—":A(y)}return(y,M)=>d.quotas===void 0?(l(),i("span",co,"…")):n.value.length===0?(l(),i("span",po,a(s(u)("admin.users.platformQuota.cellNotConfigured")),1)):(l(),i("div",mo,[(l(!0),i(q,null,X(n.value,m=>(l(),i("div",{key:m.platform,class:"flex items-center gap-2 whitespace-nowrap"},[e("span",yo,a(m.platform),1),e("span",go,[ee(a(s(u)("admin.users.platformQuota.windowDaily"))+" ",1),e("span",fo,a(A(m.daily_usage_usd))+"/"+a(_(m.daily_limit_usd)),1)]),e("span",ho,[ee(a(s(u)("admin.users.platformQuota.windowWeekly"))+" ",1),e("span",bo,a(A(m.weekly_usage_usd))+"/"+a(_(m.weekly_limit_usd)),1)]),e("span",vo,[ee(a(s(u)("admin.users.platformQuota.windowMonthly"))+" ",1),e("span",_o,a(A(m.monthly_usage_usd))+"/"+a(_(m.monthly_limit_usd)),1)])]))),128))]))}});function ko(S){const{form:d,submitFn:u,successMsg:R,errorMsg:n}=S,A=x(!1),_=xe();return{loading:A,submit:async()=>{var M,m,b,U;if(!A.value){A.value=!0;try{await u(d),R&&_.showSuccess(R)}catch(k){const f=((m=(M=k.response)==null?void 0:M.data)==null?void 0:m.detail)||((U=(b=k.response)==null?void 0:b.data)==null?void 0:U.message)||k.message;throw _.showError(n||f),k}finally{A.value=!1}}}}}const wo={class:"input-label"},$o=["placeholder"],Co={class:"input-label"},So={class:"flex gap-2"},Ao={class:"relative flex-1"},Uo=["placeholder"],Vo={class:"input-label"},Eo=["placeholder"],Mo={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Go={class:"input-label"},zo={class:"input-label"},Ro={class:"input-label"},Oo=["placeholder"],No={class:"input-hint"},Fo={class:"flex justify-end gap-3"},Bo=["disabled"],Do=de({__name:"UserCreateModal",props:{show:{type:Boolean}},emits:["close","success"],setup(S,{emit:d}){const u=S,R=d,{t:n}=pe(),A=ge({email:"",password:"",username:"",notes:"",balance:"",concurrency:1,rpm_limit:0}),{loading:_,submit:y}=ko({form:A,submitFn:async m=>{const{balance:b,...U}=m,k=String(b).trim(),f={...U};k!==""&&(f.balance=Number(k)),await K.users.create(f),R("success"),R("close")},successMsg:n("admin.users.userCreated")});fe(()=>u.show,m=>{m&&Object.assign(A,{email:"",password:"",username:"",notes:"",balance:"",concurrency:1,rpm_limit:0})});const M=()=>{const m="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789!@#$%^&*";let b="";for(let U=0;U<16;U++)b+=m.charAt(Math.floor(Math.random()*m.length));A.password=b};return(m,b)=>(l(),oe(_e,{show:S.show,title:s(n)("admin.users.createUser"),width:"normal",onClose:b[8]||(b[8]=U=>m.$emit("close"))},{footer:F(()=>[e("div",Fo,[e("button",{onClick:b[7]||(b[7]=U=>m.$emit("close")),type:"button",class:"btn btn-secondary"},a(s(n)("common.cancel")),1),e("button",{type:"submit",form:"create-user-form",disabled:s(_),class:"btn btn-primary"}
1,a(s(_)?s(n)("admin.users.creating"):s(n)("common.create")),9,Bo)])]),default:F(()=>[e("form",{id:"create-user-form",onSubmit:b[6]||(b[6]=ve((...U)=>s(y)&&s(y)(...U),["prevent"])),class:"space-y-5"},[e("div",null,[e("label",wo,a(s(n)("admin.users.email")),1),j(e("input",{"onUpdate:modelValue":b[0]||(b[0]=U=>A.email=U),type:"email",required:"",class:"input",placeholder:s(n)("admin.users.enterEmail")},null,8,$o),[[J,A.email]])]),e("div",null,[e("label",Co,a(s(n)("admin.users.password")),1),e("div",So,[e("div",Ao,[j(e("input",{"onUpdate:modelValue":b[1]||(b[1]=U=>A.password=U),type:"text",required:"",class:"input pr-10",placeholder:s(n)("admin.users.enterPassword")},null,8,Uo),[[J,A.password]])]),e("button",{type:"button",onClick:M,class:"btn btn-secondary px-3"},[E(H,{name:"refresh",size:"md"})])])]),e("div",null,[e("label",Vo,a(s(n)("admin.users.username")),1),j(e("input",{"onUpdate:modelValue":b[2]||(b[2]=U=>A.username=U),type:"text",class:"input",placeholder:s(n)("admin.users.enterUsername")},null,8,Eo),[[J,A.username]])]),e("div",Mo,[e("div",null,[e("label",Go,a(s(n)("admin.users.columns.balance")),1),j(e("input",{"onUpdate:modelValue":b[3]||(b[3]=U=>A.balance=U),type:"number",step:"any",class:"input"},null,512),[[J,A.balance]])]),e("div",null,[e("label",zo,a(s(n)("admin.users.columns.concurrency")),1),j(e("input",{"onUpdate:modelValue":b[4]||(b[4]=U=>A.concurrency=U),type:"number",class:"input"},null,512),[[J,A.concurrency,void 0,{number:!0}]])])]),e("div",null,[e("label",Ro,a(s(n)("admin.users.form.rpmLimit")),1),j(e("input",{"onUpdate:modelValue":b[5]||(b[5]=U=>A.rpm_limit=U),type:"number",min:"0",step:"1",class:"input",placeholder:s(n)("admin.users.form.rpmLimitPlaceholder")},null,8,Oo),[[J,A.rpm_limit,void 0,{number:!0}]]),e("p",No,a(s(n)("admin.users.form.rpmLimitHint")),1)])],32)]),_:1},8,["show","title"]))}}),Lo={key:0,class:"space-y-4"},Io={class:"input-label"},Ho={key:0,class:"text-red-500"},To=["onUpdate:modelValue","type","required","placeholder"],jo=["onUpdate:modelValue","required","placeholder","min","max"],Po=["onUpdate:modelValue","required"],Qo=["onUpdate:modelValue","required","placeholder"],Ko={key:5,class:"space-y-2"},qo=["value","checked","onChange"],Jo={class:"text-sm text-gray-700 dark:text-gray-300"},Wo={key:6,class:"input-hint"},Yo={key:1,class:"flex justify-center py-4"},Xo=de({__name:"UserAttributeForm",props:{userId:{},modelValue:{}},emits:["update:modelValue"],setup(S,{emit:d}){const u=S,R=d,n=x(!1),A=x([]),_=x({}),y=async()=>{n.value=!0;try{A.value=await K.userAttributes.listEnabledDefinitions()}catch(k){console.error("Failed to load attributes:",k)}finally{n.value=!1}},M=async()=>{if(u.userId)try{const k=await K.userAttributes.getUserAttributeValues(u.userId),f={};k.forEach(c=>{f[c.attribute_id]=c.value}),_.value={...f},R("update:modelValue",_.value)}catch(k){console.error("Failed to load user attribute values:",k)}},m=()=>{R("update:modelValue",{..._.value})},b=(k,f)=>{const c=_.value[k];if(!c)return!1;try{const h=JSON.parse(c);return Array.isArray(h)&&h.includes(f)}catch{return!1}},U=(k,f)=>{let c=[];const h=_.value[k];if(h)try{c=JSON.parse(h),Array.isArray(c)||(c=[])}catch{c=[]}const T=c.indexOf(f);T>-1?c.splice(T,1):c.push(f),_.value[k]=JSON.stringify(c),m()};return fe(()=>u.modelValue,k=>{k&&Object.keys(k).length>0&&(_.value={...k})},{immediate:!0}),fe(()=>u.userId,k=>{k?M():_.value={}},{immediate:!0}),vt(()=>{y()}),(k,f)=>A.value.length>0?(l(),i("div",Lo,[(l(!0),i(q,null,X(A.value,c=>{var h,T;return l(),i("div",{key:c.id},[e("label",Io,[ee(a(c.name)+" ",1),c.required?(l(),i("span",Ho,"*")):z("",!0)]),c.type==="text"||c.type==="email"||c.type==="url"?j((l(),i("input",{key:0,"onUpdate:modelValue":P=>_.value[c.id]=P,type:c.type==="text"?"text":c.type,required:c.required,placeholder:c.placeholder,class:"input",onInput:m},null,40,To)),[[Us,_.value[c.id]]]):c.type==="number"?j((l(),i("input",{key:1,"onUpdate:modelValue":P=>_.value[c.id]=P,type:"number",required:c.required,placeholder:c.placeholder,min:(h=c.validation)==null?void 0:h.min,max:(T=c.validation)==null?void 0:T.max,class:"input",onInput:m},null,40,jo)),[[J,_.value[c.id],void 0,{number:!0}]]):c.type==="date"?j((l(),i("input",{key:2,"onUpdate:modelValue":P=>
1_.value[c.id]=P,type:"date",required:c.required,class:"input",onInput:m},null,40,Po)),[[J,_.value[c.id]]]):c.type==="textarea"?j((l(),i("textarea",{key:3,"onUpdate:modelValue":P=>_.value[c.id]=P,required:c.required,placeholder:c.placeholder,rows:"3",class:"input",onInput:m},null,40,Qo)),[[J,_.value[c.id]]]):c.type==="select"?(l(),oe(Ee,{key:4,modelValue:_.value[c.id],"onUpdate:modelValue":P=>_.value[c.id]=P,options:c.options||[],onChange:m},null,8,["modelValue","onUpdate:modelValue","options"])):c.type==="multi_select"?(l(),i("div",Ko,[(l(!0),i(q,null,X(c.options,P=>(l(),i("label",{key:P.value,class:"flex items-center gap-2"},[e("input",{type:"checkbox",value:P.value,checked:b(c.id,P.value),onChange:ce=>U(c.id,P.value),class:"h-4 w-4 rounded border-gray-300 text-primary-600"},null,40,qo),e("span",Jo,a(P.label),1)]))),128))])):z("",!0),c.description?(l(),i("p",Wo,a(c.description),1)):z("",!0)])}),128))])):n.value?(l(),i("div",Yo,[...f[0]||(f[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)])])):z("",!0)}}),Zo={class:"input-label"},er={class:"input-label"},tr={class:"flex gap-2"},sr={class:"relative flex-1"},ar=["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"},lr={class:"input-label"},nr={class:"input-label"},ir={class:"input-label"},ur={class:"input-label"},dr=["placeholder"],cr={class:"input-hint"},pr={class:"flex justify-end gap-3"},mr=["disabled"],yr=de({__name:"UserEditModal",props:{show:{type:Boolean},user:{}},emits:["close","success"],setup(S,{emit:d}){const u=S,R=d,{t:n}=pe(),A=xe(),{copyToClipboard:_}=Ds(),y=x(!1),M=x(!1),m=ge({email:"",password:"",username:"",notes:"",concurrency:1,rpm_limit:0,customAttributes:{}});fe(()=>u.user,f=>{f&&(Object.assign(m,{email:f.email,password:"",username:f.username||"",notes:f.notes||"",concurrency:f.concurrency,rpm_limit:f.rpm_limit??0,customAttributes:{}}),M.value=!1)},{immediate:!0});const b=()=>{const f="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789!@#$%^&*";let c="";for(let h=0;h<16;h++)c+=f.charAt(Math.floor(Math.random()*f.length));m.password=c},U=async()=>{m.password&&await _(m.password,n("admin.users.passwordCopied"))&&(M.value=!0,setTimeout(()=>M.value=!1,2e3))},k=async()=>{var f,c;if(u.user){if(!m.email.trim()){A.showError(n("admin.users.emailRequired"));return}if(m.concurrency<1){A.showError(n("admin.users.concurrencyMin"));return}y.value=!0;try{const h={email:m.email,username:m.username,notes:m.notes,concurrency:m.concurrency,rpm_limit:m.rpm_limit};m.password.trim()&&(h.password=m.password.trim()),await K.users.update(u.user.id,h),Object.keys(m.customAttributes).length>0&&await K.userAttributes.updateUserAttributeValues(u.user.id,m.customAttributes),A.showSuccess(n("admin.users.userUpdated")),R("success"),R("close")}catch(h){A.showError(((c=(f=h.response)==null?void 0:f.data)==null?void 0:c.detail)||n("admin.users.failedToUpdate"))}finally{y.value=!1}}};return(f,c)=>(l(),oe(_e,{show:S.show,title:s(n)("admin.users.editUser"),width:"normal",onClose:c[8]||(c[8]=h=>f.$emit("close"))},{footer:F(()=>[e("div",pr,[e("button",{onClick:c[7]||(c[7]=h=>f.$emit("close")),type:"button",class:"btn btn-secondary"},a(s(n)("common.cancel")),1),e("button",{type:"submit",form:"edit-user-form",disabled:y.value,class:"btn btn-primary"},a(y.value?s(n)("admin.users.updating"):s(n)("common.update")),9,mr)])]),default:F(()=>{var h;return[S.user?(l(),i("form",{key:0,id:"edit-user-form",onSubmit:ve(k,["prevent"]),class:"space-y-5"},[e("div",null,[e("label",Zo,a(s(n)("admin.users.email")),1),j(e("input",{"onUpdate:modelValue":c[0]||(c[0]=T=>m.email=T),type:"email",class:"input"},null,512),[[J,m.email]])]),e("div",null,[e("label",er,a(s(n)("admin.users.password")),1),e("div",tr,[e("div",sr,[j(e("input",{"onUpdate:modelValue":c[1]||(c[1]=T=>m.password=T),type:"text",class:"input pr-10",placeholder:s(n)("admin.users.enterNewPassword")},null,8,ar),[[J,m.password]]),m.password?(l(),i("button",{key:0,t
1ype:"button",onClick:U,class:te(["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",M.value?"text-green-500":"text-gray-400"])},[M.value?(l(),i("svg",or,[...c[9]||(c[9]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"},null,-1)])])):(l(),i("svg",rr,[...c[10]||(c[10]=[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)):z("",!0)]),e("button",{type:"button",onClick:b,class:"btn btn-secondary px-3"},[E(H,{name:"refresh",size:"md"})])])]),e("div",null,[e("label",lr,a(s(n)("admin.users.username")),1),j(e("input",{"onUpdate:modelValue":c[2]||(c[2]=T=>m.username=T),type:"text",class:"input"},null,512),[[J,m.username]])]),e("div",null,[e("label",nr,a(s(n)("admin.users.notes")),1),j(e("textarea",{"onUpdate:modelValue":c[3]||(c[3]=T=>m.notes=T),rows:"3",class:"input"},null,512),[[J,m.notes]])]),e("div",null,[e("label",ir,a(s(n)("admin.users.columns.concurrency")),1),j(e("input",{"onUpdate:modelValue":c[4]||(c[4]=T=>m.concurrency=T),type:"number",class:"input"},null,512),[[J,m.concurrency,void 0,{number:!0}]])]),e("div",null,[e("label",ur,a(s(n)("admin.users.form.rpmLimit")),1),j(e("input",{"onUpdate:modelValue":c[5]||(c[5]=T=>m.rpm_limit=T),type:"number",min:"0",step:"1",class:"input",placeholder:s(n)("admin.users.form.rpmLimitPlaceholder")},null,8,dr),[[J,m.rpm_limit,void 0,{number:!0}]]),e("p",cr,a(s(n)("admin.users.form.rpmLimitHint")),1)]),E(Xo,{modelValue:m.customAttributes,"onUpdate:modelValue":c[6]||(c[6]=T=>m.customAttributes=T),"user-id":(h=S.user)==null?void 0:h.id},null,8,["modelValue","user-id"])],32)):z("",!0)]}),_:1},8,["show","title"]))}}),gr={key:0,class:"space-y-4"},fr={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"},hr={class:"text-sm text-gray-600 dark:text-gray-400"},br={key:1,class:"py-10 text-center text-gray-500"},vr={key:2,class:"overflow-x-auto"},_r={class:"min-w-full text-sm"},xr={class:"border-b border-gray-200 text-gray-700 dark:border-dark-700 dark:text-gray-300"},kr={class:"px-3 py-2 text-left font-medium"},wr={class:"px-3 py-2 text-left font-medium"},$r={class:"px-3 py-2 text-left font-medium"},Cr={class:"px-3 py-2 text-left font-medium"},Sr={class:"px-3 py-2 text-left font-medium"},Ar={class:"px-3 py-2 font-mono text-gray-900 dark:text-white"},Ur={class:"px-3 py-2"},Vr={class:"flex items-center gap-1"},Er=["onUpdate:modelValue","placeholder"],Mr=["disabled","title","onClick"],Gr={class:"px-3 py-2"},zr={class:"flex items-center gap-1"},Rr=["onUpdate:modelValue","placeholder"],Or=["disabled","title","onClick"],Nr={class:"px-3 py-2"},Fr={class:"flex items-center gap-1"},Br=["onUpdate:modelValue","placeholder"],Dr=["disabled","title","onClick"],Lr={class:"px-3 py-2 text-xs text-gray-500 dark:text-gray-400"},Ir={class:"mt-3 text-xs text-gray-500"},Hr={class:"mt-3"},Tr={class:"flex justify-end gap-3"},jr=["disabled"],Pr=de({__name:"UserPlatformQuotaModal",props:{show:{type:Boolean},user:{}},emits:["close","success"],setup(S,{emit:d}){const u=S,R=d,{t:n}=pe(),A=xe(),_=["anthropic","openai","gemini","antigravity","grok"],y=Y(()=>{var g,v;return((v=(g=u.user)==null?void 0:g.subscriptions)==null?void 0:v.some(G=>G.status==="active"))??!1}),M=x(!1),m=x(!1),b=ge({}),U=x([]);function k(g){return{platform:g,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 f(g){const v=new Map;for(const G of g)v.set(G.platform,G);return _.map(G=>{const D=v.get(G);return D?{platform:G,daily_limit_usd:D.daily_limit_usd??null,weekly_limit_usd:D.weekly_limit_usd??null,monthly_limit_usd:D.monthly_limit_usd??null,daily_usage_usd:D.daily_usage_usd??0,weekly_usage_usd:D.weekly_usage_usd??0,monthly_usage_usd:D.monthly_usage_usd??0}:k(G)})}function c(g){return g==null||Number.isNaN(g)?"-":g.toFixed(2)}async function h(){if(u.user){M.value=!0;try{const g=await K.users.getPlatformQuotas(u.user.id);U.value=f(g.platform_quotas||[])}catch{A.showError(n("admin.users.platformQuota.loadFailed")),U.value=_.map(k)}finally{M.value=!1}}}fe(()=>u.show,g=>{g&&u.user&&h()});function T(){if(window.confirm(n("admin.users.platformQuota.clearAllConfirm")))for(const v of U.value)v.daily_limit_usd=null,v.weekly_limit_usd=null,v.monthly_limit_usd=null}async function P(){var v,G;if(!u.user)return;const g=[];for(const D of U.value)for(const Q of["daily","weekly","monthly"]){const w=D[`${Q}_limit_usd`];typeof w=="number"&&Number.isNaN(w)&&g.push(`${D.platform}.${Q}`)}if(g.length>0){A.showError(n("admin.users.platformQuota.invalidNumber",{fields:g.join(", ")}));return}m.value=!0;try{const D=U.value.map(Q=>({platform:Q.platform,daily_limit_usd:ce(Q.daily_limit_usd),weekly_limit_usd:ce(Q.weekly_limit_usd),monthly_limit_usd:ce(Q.monthly_limit_usd)}));await K.users.updatePlatformQuotas(u.user.id,D),A.showSuccess(n("admin.users.platformQuota.updateSuccess")),R("success"),R("close")}catch(D){A.showError(((G=(v=D==null?void 0:D.response)==null?void 0:v.data)==null?void 0:G.message)||n("admin.users.platformQuota.updateFailed"))}finally{m.value=!1}}function ce(g){return g==null?null:typeof g=="number"&&Number.isFinite(g)&&g>=0?g:null}async function I(g,v){var w,$;if(!u.user)return;const G=n(`admin.users.platformQuota.window${v.charAt(0).toUpperCase()+v.slice(1)}`);if(!window.confirm(n("admin.users.platformQuota.reset.confirm",{platform:g,window:G})))return;const Q=`${g}.${v}`;b[Q]=!0;try{const B=await K.users.resetPlatformQuotaWindow(u.user.id,g,v);U.value=f(B.platform_quotas||[]),A.showSuccess(n("admin.users.platformQuota.reset.success",{platform:g,window:G}))}catch(B){A.showError((($=(w=B==null?void 0:B.response)==null?void 0:w.data)==null?void 0:$.message)||n("admin.users.platformQuota.reset.failed"))}finally{b[Q]=!1}}return(g,v)=>(l(),oe(_e,{show:S.show,title:s(n)("admin.users.platformQuota.title"),width:"wide",onClose:v[1]||(v[1]=G=>g.$emit("close"))},{footer:F(()=>[e("div",Tr,[e("button",{type:"button",class:"btn btn-secondary",onClick:v[0]||(v[0]=G=>g.$emit("close"))},a(s(n)("admin.users.platformQuota.cancel")),1),e("button",{type:"button",class:"btn btn-primary",disabled:m.value||M.value,onClick:P},a(m.value?s(n)("admin.users.platformQuota.saving"):s(n)("admin.users.platformQuota.save")),9,jr)])]),default:F(()=>[S.user?(l(),i("div",gr,[y.value?(l(),i("div",fr,a(s(n)("admin.users.platformQuota.subscriptionWarning")),1)):z("",!0),e("p",hr,a(s(n)("admin.users.platformQuota.subtitle",{email:S.user.email})),1),M.value?(l(),i("div",br,a(s(n)("common.loading")),1)):(l(),i("div",vr,[e("table",_r,[e("thead",null,[e("tr",xr,[e("th",kr,a(s(n)("admin.users.platformQuota.columns.platform")),1),e("th",wr,a(s(n)("admin.users.platformQuota.columns.daily")),1),e("th",$r,a(s(n)("admin.users.platformQuota.columns.weekly")),1),e("th",Cr,a(s(n)("admin.users.platformQuota.columns.monthly")),1),e("th",Sr,a(s(n)("admin.users.platformQuota.columns.usage")),1)])]),e("tbody",null,[(l(!0),i(q,null,X(U.value,G=>(l(),i("tr",{key:G.platform,class:"border-b border-gray-100 dark:border-dark-800"},[e("td",Ar,a(G.platform),1),e("td",Ur,[e("div",Vr,[j(e("input",{"onUpdate:modelValue":D=>G.daily_limit_usd=D,type:"number",min:"0",step:"0.01",class:"input w-24",placeholder:s(n)("admin.users.platformQuota.placeholder")},null,8,Er),[[J,G.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:!!b[`${G.platform}.daily`],title:s(n)("admin.users.platformQuota.reset.button"),onClick:D=>I(G.platform,"daily")},"↻",8,Mr)])]),e("td",Gr,[e("div",zr,[j(e("input",{"onUpdate:modelValue":D=>G.weekly_limit_usd=D,type:"number",min:"0",step:"0.01",class:"input w-24",placeholder:s(n)("admin.users.platformQuota.placeholder")},null,8,Rr),[[J,G.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:!!b[`${G.platform}.weekly`],title:s(n)("admin.users.platformQuota.reset.button"),onClick:D=>I(G.platform,"weekly")},"↻",8,Or)])]),e("td",Nr,[e("div",Fr,[j(e("input",{"onUpdate:modelValue":D=>G.monthly_limit_usd=D,type:"number",min:"0",step:"0.01",class:"input w-24",placeholder:s(n)("admin.users.platformQuota.placeholder")},null,8,Br),[[J,G.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:!!b[`${G.platform}.monthly`],title:s(n)("admin.users.platformQuota.reset.button"),onClick:D=>I(G.platform,"monthly")},"↻",8,Dr)])]),e("td",Lr,a(c(G.daily_usage_usd))+" / "+a(c(G.weekly_usage_usd))+" / "+a(c(G.monthly_usage_usd)),1)]))),128))])]),e("p",Ir,a(s(n)("admin.users.platformQuota.hint")),1),e("div",Hr,[e("button",{type:"button",class:"btn btn-secondary text-sm",onClick:T},a(s(n)("admin.users.platformQuota.clearAll")),1)])]))])):z("",!0)]),_:1},8,["show","title"]))}}),Qr={key:0,class:"space-y-4"},Kr={class:"flex items-center gap-3 rounded-xl bg-gray-50 p-4 dark:bg-dark-700"},qr={class:"flex h-10 w-10 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900/30"},Jr={class:"text-lg font-medium text-primary-700 dark:text-primary-300"},Wr={class:"font-medium text-gray-900 dark:text-white"},Yr={class:"text-sm text-gray-500 dark:text-dark-400"},Xr={key:0,class:"flex justify-center py-8"},Zr={key:1,class:"py-8 text-center"},el={class:"text-sm text-gray-500"},tl={class:"flex items-start justify-between"},sl={class:"min-w-0 flex-1"},al={class:"mb-1 flex items-center gap-2"},ol={class:"font-medium text-gray-900 dark:text-white"},rl={class:"truncate font-mono text-sm text-gray-500"},ll={class:"mt-3 flex flex-wrap gap-4 text-xs text-gray-500"},nl={class:"flex items-center gap-1"},il=["onClick","disabled"],ul={key:1,class:"text-gray-400 italic"},dl={key:2,class:"h-3 w-3 animate-spin text-primary-500",fill:"none",viewBox:"0 0 24 24"},cl={key:3,class:"h-3 w-3 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"2"},pl={class:"flex items-center gap-1"},ml={class:"max-h-64 overflow-y-auto p-1.5"},yl={class:"text-gray-500 italic"},gl={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"},fl=["onClick"],Nt=272,Ft=4,hl=de({__name:"UserApiKeysModal",props:{show:{type:Boolean},user:{}},emits:["close"],setup(S,{emit:d}){const u=S,R=d,{t:n}=pe(),A=xe(),_=x([]),y=x([]),M=x(!1),m=x(new Set),b=x(null),U=x(null),k=x(null),f=x(null),c=x(new Map),h=Y(()=>b.value===null?null:_.value.find(w=>w.id===b.value)||null),T=(w,$)=>{$ instanceof HTMLElement?c.value.set(w,$):c.value.delete(w)};fe(()=>u.show,w=>{w&&u.user?(P(),ce()):g()});const P=async()=>
1{if(u.user){M.value=!0,c.value.clear();try{const w=await K.users.getUserApiKeys(u.user.id);_.value=w.items||[]}catch(w){console.error("Failed to load API keys:",w)}finally{M.value=!1}}},ce=async()=>{try{const w=await K.groups.getAll();y.value=w}catch(w){console.error("Failed to load groups:",w)}},I=w=>{if(b.value===w.id)g();else{const $=c.value.get(w.id);if($){const B=$.getBoundingClientRect(),N=window.innerHeight-B.bottom,O=N<Nt&&B.top>N;U.value={top:O?B.top-Nt-Ft:B.bottom+Ft,left:B.left}}b.value=w.id}},g=()=>{b.value=null,U.value=null},v=async(w,$)=>{if(g(),!(w.group_id===$||!w.group_id&&$===null)){m.value.add(w.id);try{const B=await K.apiKeys.updateApiKeyGroup(w.id,$),N=_.value.findIndex(O=>O.id===w.id);N!==-1&&(_.value[N]=B.api_key),B.auto_granted_group_access&&B.granted_group_name?A.showSuccess(n("admin.users.groupChangedWithGrant",{group:B.granted_group_name})):A.showSuccess(n("admin.users.groupChangedSuccess"))}catch(B){A.showError((B==null?void 0:B.message)||n("admin.users.groupChangeFailed"))}finally{m.value.delete(w.id)}}},G=w=>{w.key==="Escape"&&b.value!==null&&(w.stopPropagation(),g())},D=w=>{const $=w.target;if(k.value&&!k.value.contains($)){for(const B of c.value.values())if(B.contains($))return;g()}},Q=()=>{g(),R("close")};return vt(()=>{document.addEventListener("click",D),document.addEventListener("keydown",G,!0)}),Ht(()=>{document.removeEventListener("click",D),document.removeEventListener("keydown",G,!0)}),(w,$)=>{var B,N;return l(),i(q,null,[E(_e,{show:S.show,title:s(n)("admin.users.userApiKeys"),width:"wide",onClose:Q},{default:F(()=>[S.user?(l(),i("div",Qr,[e("div",Kr,[e("div",qr,[e("span",Jr,a(S.user.email.charAt(0).toUpperCase()),1)]),e("div",null,[e("p",Wr,a(S.user.email),1),e("p",Yr,a(S.user.username),1)])]),M.value?(l(),i("div",Xr,[...$[1]||($[1]=[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?(l(),i("div",Zr,[e("p",el,a(s(n)("admin.users.noApiKeys")),1)])):(l(),i("div",{key:2,ref_key:"scrollContainerRef",ref:f,class:"max-h-96 space-y-3 overflow-y-auto",onScroll:g},[(l(!0),i(q,null,X(_.value,O=>(l(),i("div",{key:O.id,class:"rounded-xl border border-gray-200 bg-white p-4 dark:border-dark-600 dark:bg-dark-800"},[e("div",tl,[e("div",sl,[e("div",al,[e("span",ol,a(O.name),1),e("span",{class:te(["badge text-xs",O.status==="active"?"badge-success":"badge-danger"])},a(O.status),3)]),e("p",rl,a(O.key.substring(0,20))+"..."+a(O.key.substring(O.key.length-8)),1)])]),e("div",ll,[e("div",nl,[e("span",null,a(s(n)("admin.users.group"))+":",1),e("button",{ref_for:!0,ref:le=>T(O.id,le),onClick:le=>I(O),class:"-mx-1 -my-0.5 flex cursor-pointer items-center gap-1 rounded-md px-1 py-0.5 transition-colors hover:bg-gray-100 dark:hover:bg-dark-700",disabled:m.value.has(O.id)},[O.group_id&&O.group?(l(),oe(Qt,{key:0,name:O.group.name,platform:O.group.platform,"subscription-type":O.group.subscription_type,"rate-multiplier":O.group.rate_multiplier,"peak-rate-enabled":O.group.peak_rate_enabled,"peak-start":O.group.peak_start,"peak-end":O.group.peak_end,"peak-rate-multiplier":O.group.peak_rate_multiplier},null,8,["name","platform","subscription-type","rate-multiplier","peak-rate-enabled","peak-start","peak-end","peak-rate-multiplier"])):(l(),i("span",ul,a(s(n)("admin.users.none")),1)),m.value.has(O.id)?(l(),i("svg",dl,[...$[2]||($[2]=[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)])])):(l(),i("svg",cl,[...$[3]||($[3]=[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)])]))],8,il)]),e("div",pl,[e("span",null,a(s(n)("admin.users.columns.created"))+": "+a(s(Ne)(O.created_at)),1)])])]))),128))],544))])):z("",!0)]),_:1},8,["show","title"]),(l(),oe(Tt,{to:"body"},[b.value!==null&&U.value?(l(),i("div",{key:0,ref_key:"dropdownRef",ref:k,class:"animate-in fade-in slide-in-from-top-2 fixed z-[100000020] w-64 overflow-hidden rounded-xl bg-white shadow-lg ring-1 ring-black/5 duration-200 dark:bg-dark-800 dark:ring-white/10",style:jt({top:U.value.top+"px",left:U.value.left+"px"})},[e("div",ml,[e("button",{onClick:$[0]||($[0]=O=>v(h.value,null)),class:te(["flex w-full items-center rounded-lg px-3 py-2 text-sm transition-colors",(B=h.value)!=null&&B.group_id?"hover:bg-gray-100 dark:hover:bg-dark-700":"bg-primary-50 dark:bg-primary-900/20"])},[e("span",yl,a(s(n)("admin.users.none")),1),(N=h.value)!=null&&N.group_id?z("",!0):(l(),i("svg",gl,[...$[4]||($[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"},null,-1)])]))],2),(l(!0),i(q,null,X(y.value,O=>{var le,Me;return l(),i("button",{key:O.id,onClick:Fe=>v(h.value,O.id),class:te(["flex w-full items-center justify-between rounded-lg px-3 py-2 text-sm transition-colors",((le=h.value)==null?void 0:le.group_id)===O.id?"bg-primary-50 dark:bg-primary-900/20":"hover:bg-gray-100 dark:hover:bg-dark-700"])},[E(Ls,{name:O.name,platform:O.platform,"subscription-type":O.subscription_type,"rate-multiplier":O.rate_multiplier,"peak-rate-enabled":O.peak_rate_enabled,"peak-start":O.peak_start,"peak-end":O.peak_end,"peak-rate-multiplier":O.peak_rate_multiplier,description:O.description,selected:((Me=h.value)==null?void 0:Me.group_id)===O.id},null,8,["name","platform","subscription-type","rate-multiplier","peak-rate-enabled","peak-start","peak-end","peak-rate-multiplier","description","selected"])],10,fl)}),128))])],4)):z("",!0)]))],64)}}}),bl={key:0,class:"space-y-6"}
1,vl={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"},_l={class:"flex h-14 w-14 items-center justify-center rounded-full bg-white shadow-sm dark:bg-dark-700"},xl={class:"text-2xl font-semibold text-primary-600 dark:text-primary-400"},kl={class:"flex-1"},wl={class:"text-lg font-semibold text-gray-900 dark:text-white"},$l={class:"mt-1 text-sm text-gray-600 dark:text-gray-400"},Cl={key:0,class:"flex justify-center py-12"},Sl={key:1,class:"space-y-6"},Al={key:0},Ul={class:"mb-3 flex items-center gap-2"},Vl={class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},El={class:"text-xs text-gray-400"},Ml={class:"grid gap-3"},Gl={class:"flex items-center gap-4"},zl={class:"flex-shrink-0"},Rl={class:"relative flex h-6 w-6 cursor-pointer items-center justify-center"},Ol=["checked","onChange"],Nl={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"},Fl={key:0,class:"h-full w-full text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"3"},Bl={class:"min-w-0 flex-1"},Dl={class:"flex items-center gap-2"},Ll={class:"text-base font-semibold text-gray-900 dark:text-white"},Il={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"},Hl={class:"mt-1.5 flex items-center gap-3 text-sm"},Tl={class:"inline-flex items-center gap-1 text-gray-500 dark:text-gray-400"},jl={class:"text-gray-500 dark:text-gray-400"},Pl={class:"font-medium text-gray-700 dark:text-gray-300"},Ql={class:"flex flex-shrink-0 items-center gap-3"},Kl={class:"text-sm font-medium text-gray-600 dark:text-gray-400"},ql=["value","onInput","placeholder"],Jl={key:1},Wl={class:"mb-3 flex items-center gap-2"},Yl={class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},Xl={class:"text-xs text-gray-400"},Zl={class:"grid gap-3"},en={class:"flex items-center gap-4"},tn={class:"min-w-0 flex-1"},sn={class:"flex items-center gap-2"},an={class:"text-base font-semibold text-gray-900 dark:text-white"},on={class:"mt-1.5 flex items-center gap-3 text-sm"},rn={class:"inline-flex items-center gap-1 text-gray-500 dark:text-gray-400"},ln={class:"text-gray-500 dark:text-gray-400"},nn={class:"font-medium text-gray-700 dark:text-gray-300"},un={class:"flex flex-shrink-0 items-center gap-3"},dn={class:"text-sm font-medium text-gray-600 dark:text-gray-400"},cn=["value","onInput","placeholder"],pn={key:2,class:"flex flex-col items-center justify-center py-12 text-center"},mn={class:"text-gray-500 dark:text-gray-400"},yn={class:"flex justify-end gap-3"},gn=["disabled"],fn={key:0,class:"-ml-1 mr-2 h-4 w-4 animate-spin",fill:"none",viewBox:"0 0 24 24"},hn=de({__name:"UserAllowedGroupsModal",props:{show:{type:Boolean},user:{}},emits:["close","success"],setup(S,{emit:d}){const u=S,R=d,{t:n}=pe(),A=xe(),_=x([]),y=x([]),M=x({}),m=x(!1),b=x(!1),U=Y(()=>_.value.filter(I=>I.is_exclusive)),k=Y(()=>_.value.filter(I=>!I.is_exclusive)),f=Y(()=>y.value.filter(I=>I.isExclusive)),c=Y(()=>y.value.filter(I=>!I.isExclusive));fe(()=>u.show,I=>{I&&u.user&&h()});const h=async()=>{var I,g;m.value=!0;try{const v=await K.groups.list(1,1e3);_.value=v.items.filter(Q=>Q.subscription_type==="standard"&&Q.status==="active");const G=((I=u.user)==null?void 0:I.allowed_groups)||[],D=((g=u.user)==null?void 0:g.group_rates)||{};M.value={...D},y.value=_.value.map(Q=>({groupId:Q.id,groupName:Q.name,platform:Q.platform,isExclusive:Q.is_exclusive,defaultRate:Q.rate_multiplier,customRate:D[Q.id]??null,isSelected:Q.is_exclusive?G.includes(Q.id):!0}))}catch(v){console.error("Failed to load groups:",v)}finally{m.value=!1}},T=I=>{const g=y.value.find(v=>v.groupId===I);g&&g.isExclusive&&(g.isSelected=!g.isSelected)},P=(I,g)=>{const v=y.value.find(G=>G.groupId===I);if(v)if(g===""||g===null||g===void 0)v.customRate=null;else{const G=parseFloat(g);v.customRate=isNaN(G)?null:G}},ce=async()=>{if(u.user){b.value=!0;try{const I=y.value.filter(v=>v.isExclusive&&v.isSelected).map(v=>v.groupId),g={};for(const v of y.value){const G=M.value[v.groupId]!==void 0;v.customRate!==null?g[v.groupId]=v.customRate:G&&(g[v.groupId]=null)}await K.users.update(u.user.id,{allowed_groups:I,group_rates:Object.keys(g).length>
10?g:void 0}),A.showSuccess(n("admin.users.groupConfigUpdated")),R("success"),R("close")}catch(I){console.error("Failed to update user group config:",I)}finally{b.value=!1}}};return(I,g)=>(l(),oe(_e,{show:S.show,title:s(n)("admin.users.groupConfig"),width:"wide",onClose:g[1]||(g[1]=v=>I.$emit("close"))},{footer:F(()=>[e("div",yn,[e("button",{onClick:g[0]||(g[0]=v=>I.$emit("close")),class:"btn btn-secondary px-5"},a(s(n)("common.cancel")),1),e("button",{onClick:ce,disabled:b.value,class:"btn btn-primary px-6"},[b.value?(l(),i("svg",fn,[...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)])])):z("",!0),ee(" "+a(b.value?s(n)("common.saving"):s(n)("common.save")),1)],8,gn)])]),default:F(()=>[S.user?(l(),i("div",bl,[e("div",vl,[e("div",_l,[e("span",xl,a(S.user.email.charAt(0).toUpperCase()),1)]),e("div",kl,[e("p",wl,a(S.user.email),1),e("p",$l,a(s(n)("admin.users.groupConfigHint",{email:S.user.email})),1)])]),m.value?(l(),i("div",Cl,[...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)])])):(l(),i("div",Sl,[U.value.length>0?(l(),i("div",Al,[e("div",Ul,[g[3]||(g[3]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("h4",Vl,a(s(n)("admin.users.exclusiveGroups")),1),e("span",El,"("+a(f.value.filter(v=>v.isSelected).length)+"/"+a(f.value.length)+")",1)]),e("div",Ml,[(l(!0),i(q,null,X(f.value,v=>(l(),i("div",{key:v.groupId,class:te(["group relative overflow-hidden rounded-xl border-2 p-4 transition-all duration-200",v.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",Gl,[e("div",zl,[e("label",Rl,[e("input",{type:"checkbox",checked:v.isSelected,onChange:G=>T(v.groupId),class:"peer sr-only"},null,40,Ol),e("div",Nl,[v.isSelected?(l(),i("svg",Fl,[...g[4]||(g[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"},null,-1)])])):z("",!0)])])]),e("div",Bl,[e("div",Dl,[e("span",Ll,a(v.groupName),1),e("span",Il,a(s(n)("admin.groups.exclusive")),1)]),e("div",Hl,[e("span",Tl,[E(Rt,{platform:v.platform,size:"xs"},null,8,["platform"]),e("span",null,a(v.platform),1)]),g[5]||(g[5]=e("span",{class:"text-gray-300 dark:text-dark-500"},"•",-1)),e("span",jl,[ee(a(s(n)("admin.users.defaultRate"))+": ",1),e("span",Pl,a(v.defaultRate)+"x",1)])])]),e("div",Ql,[e("label",Kl,a(s(n)("admin.users.customRate")),1),e("input",{type:"number",step:"0.001",min:"0.001",value:v.customRate??"",onInput:G=>P(v.groupId,G.target.value),placeholder:String(v.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,ql)])])],2))),128))])])):z("",!0),k.value.length>0?(l(),i("div",Jl,[e("div",Wl,[g[6]||(g[6]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("h4",Yl,a(s(n)("admin.users.publicGroups")),1),e("span",Xl,"("+a(c.value.length)+")",1)]),e("div",Zl,[(l(!0),i(q,null,X(c.value,v=>(l(),i("div",{key:v.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"},[e("div",en,[g[8]||(g[8]=e("div",{class:"flex-shrink-0"},[e("div",{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"}
1,[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",tn,[e("div",sn,[e("span",an,a(v.groupName),1)]),e("div",on,[e("span",rn,[E(Rt,{platform:v.platform,size:"xs"},null,8,["platform"]),e("span",null,a(v.platform),1)]),g[7]||(g[7]=e("span",{class:"text-gray-300 dark:text-dark-500"},"•",-1)),e("span",ln,[ee(a(s(n)("admin.users.defaultRate"))+": ",1),e("span",nn,a(v.defaultRate)+"x",1)])])]),e("div",un,[e("label",dn,a(s(n)("admin.users.customRate")),1),e("input",{type:"number",step:"0.001",min:"0.001",value:v.customRate??"",onInput:G=>P(v.groupId,G.target.value),placeholder:String(v.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,cn)])])]))),128))])])):z("",!0),_.value.length===0?(l(),i("div",pn,[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",mn,a(s(n)("common.noGroupsAvailable")),1)])):z("",!0)]))])):z("",!0)]),_:1},8,["show","title"]))}}),bn=Ms(hn,[["__scopeId","data-v-6b181e44"]]),vn={class:"flex items-center gap-3 rounded-xl bg-gray-50 p-4 dark:bg-dark-700"},_n={class:"flex h-10 w-10 items-center justify-center rounded-full bg-primary-100"},xn={class:"text-lg font-medium text-primary-700"},kn={class:"flex-1"},wn={class:"font-medium text-gray-900"},$n={class:"text-sm text-gray-500"},Cn={class:"input-label"},Sn={class:"relative flex gap-2"},An={class:"relative flex-1"},Un={class:"input-label"},Vn={key:0,class:"rounded-xl border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950"},En={class:"flex items-center justify-between text-sm"},Mn={class:"text-gray-700 dark:text-gray-300"},Gn={class:"font-bold text-gray-900 dark:text-gray-100"},zn={class:"flex justify-end gap-3"},Rn=["disabled"],On=de({__name:"UserBalanceModal",props:{show:{type:Boolean},user:{},operation:{}},emits:["close","success"],setup(S,{emit:d}){const u=S,R=d,{t:n}=pe(),A=xe(),_=x(!1),y=ge({amount:0,notes:""});fe(()=>u.show,k=>{k&&(y.amount=0,y.notes="")});const M=k=>{if(k===0)return"0.00";const f=k.toFixed(8).replace(/\.?0+$/,""),c=f.split(".");return c.length===1?f+".00":c[1].length===1?f+"0":f},m=()=>{u.user&&(y.amount=u.user.balance)},b=()=>{if(!u.user)return 0;const k=u.operation==="add"?u.user.balance+y.amount:u.user.balance-y.amount;return Math.abs(k)<1e-10?0:k},U=async()=>{var k,f;if(u.user){if(!y.amount||y.amount<=0){A.showError(n("admin.users.amountRequired"));return}if(u.operation==="subtract"&&y.amount>u.user.balance){A.showError(n("admin.users.insufficientBalance"));return}_.value=!0;try{await K.users.updateBalance(u.user.id,y.amount,u.operation,y.notes),A.showSuccess(n("common.success")),R("success"),R("close")}catch(c){console.error("Failed to update balance:",c),A.showError(((f=(k=c.response)==null?void 0:k.data)==null?void 0:f.detail)||n("common.error"))}finally{_.value=!1}}};return(k,f)=>(l(),oe(_e,{show:S.show,title:S.operation==="add"?s(n)("admin.users.deposit"):s(n)("admin.users.withdraw"),width:"narrow",onClose:f[3]||(f[3]=c=>k.$emit("close"))},{footer:F(()=>[e("div",zn,[e("button",{onClick:f[2]||(f[2]=c=>k.$emit("close")),class:"btn btn-secondary"},a(s(n)("common.cancel")),1),e("button",{type:"submit",form:"balance-form",disabled:_.value||!y.amount,class:te(["btn",S.operation==="add"?"bg-emerald-600 text-white":"btn-danger"])},a(_.value?s(n)("common.saving"):s(n)("common.confirm")),11,Rn)])]),default:F(()=>[S.user?(l(),i("form",{key:0,id:"balance-form",onSubmit:ve(U,["prevent"]),class:"space-y-5"},[e("div",vn,[e("div",_n,[e("span",xn,a(S.user.email.charAt(0).toUpperCase()),1)]),e("div",kn,[e("p",wn,a(S.user.email),1),e("p",$n,a(s(n)("admin.users.currentBalance"))+": $"+a(M(S.user.balance)),1)])]),e("div",null,[e("label",Cn,a(S.operation==="add"?s(n)("admin.users.depositAmount"):s(n)("admin.users.withdrawAmount")),1),e("div",Sn,[e("div",An,[f[4]||(f[4]=e("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 font-medium text-gray-500"},"$",-1)),j(e("input",{"onUpdate:modelValue":f[0]||(f[0]=c=>y.amount=c),type:"number",step:"any",min:"0",required:"",class:"input pl-8"},null,512),[[J,y.amount,void 0,{number:!0}
1]])]),S.operation==="subtract"?(l(),i("button",{key:0,type:"button",onClick:m,class:"btn btn-secondary whitespace-nowrap"},a(s(n)("admin.users.withdrawAll")),1)):z("",!0)])]),e("div",null,[e("label",Un,a(s(n)("admin.users.notes")),1),j(e("textarea",{"onUpdate:modelValue":f[1]||(f[1]=c=>y.notes=c),rows:"3",class:"input"},null,512),[[J,y.notes]])]),y.amount>0?(l(),i("div",Vn,[e("div",En,[e("span",Mn,a(s(n)("admin.users.newBalance"))+":",1),e("span",Gn,"$"+a(M(b())),1)])])):z("",!0)],32)):z("",!0)]),_:1},8,["show","title"]))}}),Nn={key:0,class:"space-y-4"},Fn={class:"text-sm text-gray-600 dark:text-gray-400"},Bn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-dark-600 dark:bg-dark-800"},Dn={class:"flex items-center gap-2"},Ln={class:"font-medium text-gray-900 dark:text-white"},In={key:0,class:"font-medium text-primary-600 dark:text-primary-400"},Hn={key:1,class:"text-sm text-gray-400"},Tn={key:0,class:"max-h-64 space-y-2 overflow-y-auto"},jn=["value"],Pn={key:0,class:"h-2 w-2 rounded-full bg-white"},Qn={class:"flex-1"},Kn={class:"font-medium text-gray-900 dark:text-white"},qn={class:"ml-2 text-xs text-gray-400"},Jn={key:1,class:"py-6 text-center text-sm text-gray-400"},Wn={class:"flex justify-end gap-3"},Yn=["disabled"],Xn={key:0,class:"-ml-1 mr-2 h-4 w-4 animate-spin",fill:"none",viewBox:"0 0 24 24"},Zn=de({__name:"GroupReplaceModal",props:{show:{type:Boolean},user:{},oldGroup:{},allGroups:{}},emits:["close","success"],setup(S,{emit:d}){const u=S,R=d,{t:n}=pe(),A=xe(),_=x(null),y=x(!1),M=Y(()=>u.oldGroup?u.allGroups.filter(b=>b.status==="active"&&b.is_exclusive&&b.subscription_type==="standard"&&b.id!==u.oldGroup.id):[]);fe(()=>u.show,b=>{b&&(_.value=null)});const m=async()=>{if(!(!u.user||!u.oldGroup||!_.value)){y.value=!0;try{const b=await K.users.replaceGroup(u.user.id,u.oldGroup.id,_.value);A.showSuccess(n("admin.users.replaceGroupSuccess",{count:b.migrated_keys})),R("success"),R("close")}catch(b){console.error("Failed to replace group:",b)}finally{y.value=!1}}};return(b,U)=>(l(),oe(_e,{show:S.show,title:s(n)("admin.users.replaceGroupTitle"),width:"narrow",onClose:U[2]||(U[2]=k=>b.$emit("close"))},{footer:F(()=>[e("div",Wn,[e("button",{onClick:U[1]||(U[1]=k=>b.$emit("close")),class:"btn btn-secondary px-5"},a(s(n)("common.cancel")),1),e("button",{onClick:m,disabled:!_.value||y.value,class:"btn btn-primary px-6"},[y.value?(l(),i("svg",Xn,[...U[3]||(U[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)])])):z("",!0),ee(" "+a(y.value?s(n)("common.saving"):s(n)("admin.users.replaceGroupConfirm")),1)],8,Yn)])]),default:F(()=>{var k;return[S.oldGroup?(l(),i("div",Nn,[e("p",Fn,a(s(n)("admin.users.replaceGroupHint",{old:S.oldGroup.name})),1),e("div",Bn,[e("div",Dn,[E(H,{name:"shield",size:"sm",class:"text-purple-500"}),e("span",Ln,a(S.oldGroup.name),1),E(H,{name:"arrowRight",size:"sm",class:"ml-auto text-gray-400"}),_.value?(l(),i("span",In,a((k=M.value.find(f=>f.id===_.value))==null?void 0:k.name),1)):(l(),i("span",Hn,"?"))])]),M.value.length>0?(l(),i("div",Tn,[(l(!0),i(q,null,X(M.value,f=>(l(),i("label",{key:f.id,class:te(["flex cursor-pointer items-center gap-3 rounded-lg border-2 p-3 transition-all",_.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"])},[j(e("input",{type:"radio",value:f.id,"onUpdate:modelValue":U[0]||(U[0]=c=>_.value=c),class:"sr-only"},null,8,jn),[[Vs,_.value]]),e("div",{class:te(["flex h-5 w-5 items-center justify-center rounded-full border-2 transition-all",_.value===f.id?"border-primary-500 bg-primary-500":"border-gray-300 dark:border-dark-500"])},[_.value===f.id?(l(),i("div",Pn)):z("",!0)],2),e("div",Qn,[e("span",Kn,a(f.name),1),e("span",qn,a(f.platform),1)])],2))),128))])):(l(),i("div",Jn,a(s(n)("admin.users.noOtherGroups")),1))])):z("",!0)]}),_:1},8,["show","title"]))}}),ei={class:"flex flex-wrap items-center gap-3"},ti={class:"flex flex-1 flex-wrap items-center gap-3"},si={class:"relative w-full md:w-64"},ai=["placeholder"],oi={key:0,class:"w-full sm:w-32"},ri={key:1,class:"w-full sm:w-32"},li={key:2,class:"w-full sm:w-44"},ni={key:3,class:"w-full sm:w-44"},ii={key:0,class:"relative w-full sm:w-36"},ui=["value","onInput","placeholder"],di=["value","onInput","placeholder"],ci={key:2,class:"w-full"},pi=["value","onInput","placeholder"],mi={class:"flex flex-wrap items-center justify-end gap-2"},yi={class:"flex items-center gap-2 md:contents"},gi=["disabled","title"],fi=["title"],hi={class:"hidden md:inline"},bi={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"},vi=["onClick"],_i={key:0,class:"my-1 border-t border-gray-100 dark:border-dark-700"},xi=["onClick"],ki=["title"],wi={class:"hidden md:inline"},$i={key:0,class:"absolute right-0 top-full z-50 mt-1 max-h-80 w-48 overflow-y-auto rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-dark-600 dark:bg-dark-800"},Ci=["disabled","onClick","title"],Si=["title"],Ai={class:"hidden md:inline"},Ui={class:"flex items-center gap-2"},Vi={class:"flex h-8 w-8 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900/30"},Ei={class:"text-sm font-medium text-primary-700 dark:text-primary-300"},Mi={class:"font-medium text-gray-900 dark:text-white"},Gi={class:"text-sm text-gray-700 dark:text-gray-300"},zi={class:"max-w-xs"},Ri=["title"],Oi={key:1,class:"text-sm text-gray-400"},Ni={class:"max-w-xs"},Fi=["title"],Bi={key:0,class:"flex flex-col gap-1"}
1,Di=["onClick"],Li={class:"font-medium text-purple-600 dark:text-purple-400"},Ii={class:"text-gray-500 dark:text-dark-400"},Hi={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"},Ti={class:"flex flex-col gap-0.5 whitespace-nowrap"},ji={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"},Pi={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"},Qi=["onClick"],Ki={class:"flex-1"},qi={key:1,class:"group/pub relative inline-flex cursor-default items-center gap-1 whitespace-nowrap text-xs"},Ji={class:"font-medium text-gray-600 dark:text-dark-300"},Wi={class:"text-gray-400 dark:text-dark-500"},Yi={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"},Xi={class:"flex flex-col gap-0.5 whitespace-nowrap"},Zi={key:2,class:"text-xs text-gray-400 dark:text-dark-500"},eu={key:1,class:"text-xs text-gray-400 dark:text-dark-500"},tu={key:0,class:"flex flex-wrap gap-1.5"},su={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"},au={class:"flex items-center gap-2"},ou={class:"group relative"},ru=["onClick"],lu={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"},nu=["onClick","title"],iu=["title","onClick"],uu={class:"flex items-center gap-1.5"},du={class:"usage-sort-trigger relative"},cu=["title","data-test","onClick"],pu={key:0,class:"text-[10px] normal-case font-medium tracking-normal"},mu={key:2,class:"h-3.5 w-3.5",fill:"currentColor",viewBox:"0 0 20 20"},yu={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"},gu=["data-test","onClick"],fu={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"},hu={class:"flex items-center gap-1.5"},bu={class:"text-sm text-gray-700 dark:text-gray-300"},vu={class:"text-sm text-gray-500 dark:text-dark-400"},_u={class:"text-sm text-gray-500 dark:text-dark-400"},xu={class:"text-sm text-gray-500 dark:text-dark-400"},ku={class:"flex items-center gap-1"},wu=["onClick"],$u={class:"text-xs"},Cu=["onClick"],Su={class:"text-xs"},Au=["onClick"],Uu={class:"text-xs"},Vu={class:"py-1"},Eu=["onClick"],Mu=["onClick"],Gu=["onClick"],zu=["onClick"],Ru=["onClick"],Ou=["onClick"],Nu=["onClick"],Bt="user-hidden-columns",We="user-column-settings-version",Oe=3,Dt="admin-users-table-sort",Lt="user-filter-values",It="user-visible-filters",bt="admin-users-usage-sort",rd=de({__name:"UsersView",setup(S){const{t:d}=pe(),u=xe(),R=Y(()=>be.value.filter(o=>o.enabled).map(o=>({key:`attr_${o.id}`,label:o.name,sortable:!1}))),n=(o,r)=>{const C=et.value[o];if(!C)return"-";const t=C[r];if(!t)return"-";const p=be.value.find(V=>V.id===r);if(!p)return t;if(p.type==="multi_select"&&t)try{const V=JSON.parse(t);if(Array.isArray(V))return V.map(L=>{var ie;const Z=(ie=p.options)==null?void 0:ie.find(re=>re.value===L);return(Z==null?void 0:Z.label)||L}).join(", ")}catch{return t}if(p.type==="select"&&t&&p.options){const V=p.options.find(L=>L.value===t);return(V==null?void 0:V.label)||t}return t},A=Y(()=>[{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},...R.value,{key:"role",label:d("admin.users.columns.role"),sortable:!0},{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}]),_=Y(()=>A.value.filter(o=>o.key!=="email"&&o.key!=="actions")),y=ge(new Set),M=["notes","groups","subscriptions","usage","concurrency","usage_anthropic","usage_openai","usage_gemini","usage_antigravity","balance_platform_quota"],m=new Set(["last_login_at"]),b=new Set,U={2:["usage_anthropic","usage_openai","usage_gemini","usage_antigravity"],3:["balance_platform_quota"]},k=()=>{try{const o=localStorage.getItem(Bt);if(o){JSON.parse(o).filter(t=>
1!m.has(t)&&!b.has(t)).forEach(t=>y.add(t));const C=Number(localStorage.getItem(We)??"1");if(C<Oe){let t=!1;for(let p=C+1;p<=Oe;p++)for(const V of U[p]??[])m.has(V)||b.has(V)||y.has(V)||(y.add(V),t=!0);t?f():localStorage.setItem(We,String(Oe))}}else M.forEach(r=>y.add(r)),localStorage.setItem(We,String(Oe))}catch(o){console.error("Failed to load saved columns:",o),M.forEach(r=>y.add(r))}},f=()=>{try{localStorage.setItem(Bt,JSON.stringify([...y])),localStorage.setItem(We,String(Oe))}catch(o){console.error("Failed to save columns:",o)}},c=o=>b.has(o),h=o=>{if(b.has(o))return;const r=y.has(o);y.has(o)?y.delete(o):y.add(o),f(),r&&(o==="usage"||o.startsWith("usage_")||o.startsWith("attr_")||o==="balance_platform_quota")&&ss(),o==="subscriptions"&&ae(),r&&o==="groups"&&Me()},T=o=>!y.has(o),P=["usage","usage_anthropic","usage_openai","usage_gemini","usage_antigravity"],ce={usage:null,usage_anthropic:"anthropic",usage_openai:"openai",usage_gemini:"gemini",usage_antigravity:"antigravity"},I=P.filter(o=>o!=="usage"),g=Y(()=>!y.has("usage")||I.some(o=>!y.has(o))),v=Y(()=>!y.has("groups")),G=Y(()=>!y.has("balance_platform_quota")),D=Y(()=>be.value.some(o=>o.enabled&&!y.has(`attr_${o.id}`))),Q=Y(()=>A.value.filter(o=>o.key==="email"||o.key==="actions"||!y.has(o.key))),w=x([]),$=x(!1),B=x(""),O=ge((()=>{const o={sort_by:"created_at",sort_order:"desc"},r=new Set(["email","id","username","role","balance","concurrency","status","last_used_at","last_active_at","created_at"]);try{const C=localStorage.getItem(Dt);if(!C)return o;const t=JSON.parse(C),p=typeof t.key=="string"?t.key:"";return r.has(p)?{sort_by:p,sort_order:t.order==="asc"?"asc":"desc"}:o}catch{return o}})()),le=x([]),Me=async()=>{if(!(le.value.length>0))try{le.value=await K.groups.getAll()}catch(o){console.error("Failed to load groups:",o)}},Fe=x([]),_t=async()=>{if(!(Fe.value.length>0))try{Fe.value=await K.groups.getAllIncludingInactive()}catch(o){console.error("Failed to load groups for API key filter:",o)}},he=o=>{var t;const r=[],C=[];for(const p of le.value)p.status!=="active"||p.subscription_type!=="standard"||(p.is_exclusive?(t=o.allowed_groups)!=null&&t.includes(p.id)&&r.push(p):C.push(p));return{exclusive:r,publicGroups:C}},Kt=Y(()=>{const o=[{value:"",label:d("admin.users.allAuthorizedGroups")}];for(const r of le.value)r.status!=="active"||!r.is_exclusive||r.subscription_type!=="standard"||o.push({value:r.name,label:r.name});return o}
1),qt=Y(()=>Qs(Fe.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")})),W=ge({role:"",status:"",group:"",apiKeyGroup:null}),$e=ge({}),ne=ge(new Set),Be=x(!1),De=x(!1),Ye=x(null),Xe=x(null),xt=Y(()=>be.value.filter(o=>o.enabled)),Jt=Y(()=>[{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"}]),Wt=()=>{try{const o=localStorage.getItem(It);o&&JSON.parse(o).forEach(t=>ne.add(t));const r=localStorage.getItem(Lt);if(r){const C=JSON.parse(r);C.role&&(W.role=C.role),C.status&&(W.status=C.status),C.group&&(W.group=C.group),typeof C.apiKeyGroup=="number"&&(W.apiKeyGroup=C.apiKeyGroup),C.attributes&&Object.assign($e,C.attributes)}}catch(o){console.error("Failed to load saved filters:",o)}},Ze=()=>{try{localStorage.setItem(It,JSON.stringify([...ne]));const o={role:W.role,status:W.status,group:W.group,apiKeyGroup:W.apiKeyGroup,attributes:$e};localStorage.setItem(Lt,JSON.stringify(o))}catch(o){console.error("Failed to save filters:",o)}},Le=o=>be.value.find(r=>r.id===o),Ce=x({}),Ie=x({}),He=(o,r)=>{var C,t;return(t=(C=Ce.value[o])==null?void 0:C.by_platform)==null?void 0:t.find(p=>p.platform===r)},Se=x(null),se=x((()=>{try{const o=localStorage.getItem(bt);if(!o)return null;const r=JSON.parse(o);if(!r.key||!P.includes(r.key))return null;const C=r.metric==="total"?"total":"today",t=r.order==="asc"?"asc":"desc";return{key:r.key,metric:C,order:t}}catch{return null}})()),kt=()=>{try{se.value?localStorage.setItem(bt,JSON.stringify(se.value)):localStorage.removeItem(bt)}catch(o){console.error("Failed to persist usage sort:",o)}},Yt=()=>{se.value&&(se.value=null,Se.value=null,kt())},wt=(o,r)=>!!se.value&&se.value.key===o&&se.value.metric===r,$t=(o,r)=>wt(o,r)?se.value.order:null,Xt=(o,r)=>{const C=se.value;C&&C.key===o&&C.metric===r?se.value=C.order==="desc"?{key:o,metric:r,order:"asc"}:null:se.value={key:o,metric:r,order:"desc"},kt(),Se.value=null},Zt=o=>{Se.value=Se.value===o?null:o},Ct=(o,r,C)=>{var L;const t=Ce.value[o];if(!t)return 0;const p=ce[r];if(p===null)return C==="today"?t.today_actual_cost??0:t.total_actual_cost??0;const V=(L=t.by_platform)==null?void 0:L.find(Z=>Z.platform===p);return V?C==="today"?V.today_actual_cost??0:V.total_actual_cost??0:0},es=Y(()=>{const o=se.value;return o?[...w.value].map((r,C)=>({row:r,index:C})).sort((r,C)=>{const t=Ct(r.row.id,o.key,o.metric),p=Ct(C.row.id,o.key,o.metric);return t!==p?o.order==="asc"?t-p:p-t:r.index-C.index}).map(r=>r.row):w.value}),be=x([]),et=x({}),ue=ge({page:1,page_size:Gs(),total:0,pages:0}),Te=x(!1),tt=x(!1),je=x(!1),st=x(!1),at=x(!1),ot=x(!1),rt=x(null),ze=x(null),lt=x(null),nt=x(null),St=o=>{nt.value=o,ot.value=!0},ts=()=>{ot.value=!1,nt.value=null};let ke=null,Ae=0;const At=async(o,r,C)=>{if(o.length===0)return;const t=[];g.value&&t.push((async()=>{try{const p=await K.dashboard.getBatchUsersUsage(o);if(r!=null&&r.aborted||typeof C=="number"&&C!==Ae)return;Ce.value=p.stats}catch(p){if(r!=null&&r.aborted)return;console.error("Failed to load usage stats:",p)}})()),be.value.length>0&&D.value&&t.push((async()=>{try{const p=await K.userAttributes.getBatchUserAttributes(o);if(r!=null&&r.aborted||typeof C=="number"&&C!==Ae)return;et.value=p.attributes}catch(p){if(r!=null&&r.aborted)return;console.error("Failed to load user attribute values:",p)}})()),G.value&&t.push((async()=>{try{for(let V=0;V<o.length;V+=6){if(r!=null&&r.aborted||typeof C=="number"&&C!==Ae)return;const L=o.slice(V,V+6),Z=await Promise.allSettled(L.map(re=>K.users.getPlatformQuotas(re)));if(r!=null&&r.aborted||typeof C=="number"&&C!==Ae)return;const ie={...Ie.value};Z.forEach((re,ye)=>{re.status==="fulfilled"&&(ie[L[ye]]=re.value.platform_quotas||[])}),Ie.value=ie}}catch(p){if(r!=null&&r.aborted)return;console.error("Failed to load platform quotas:",p)}})()),t.length>0&&await Promise.allSettled(t)},ss=()=>{const o=w.value.map(C=>C.id);if(o.length===0)return;const r=++Ae;At(o,void 0,r)},Ge=x(null),Re=x(null),as=(o,r)=>
1{if(Ge.value===o.id)me();else{const C=r.currentTarget;if(!C){me();return}const t=C.getBoundingClientRect(),p=200,V=240,L=8,Z=window.innerWidth,ie=window.innerHeight;let re,ye;Z<768?(re=Math.max(L,Math.min(t.left+t.width/2-p/2,Z-p-L)),ye=t.bottom+4,ye+V>ie-L&&(ye=t.top-V-4,ye<L&&(ye=L))):(re=Math.max(L,Math.min(r.clientX-p,Z-p-L)),ye=r.clientY,ye+V>ie-L&&(ye=ie-V-L)),Re.value={top:ye,left:re},Ge.value=o.id}},me=()=>{Ge.value=null,Re.value=null},Ut=o=>{const r=o.target;!r.closest(".action-menu-trigger")&&!r.closest(".action-menu-content")&&me(),Ye.value&&!Ye.value.contains(r)&&(Be.value=!1),Xe.value&&!Xe.value.contains(r)&&(De.value=!1),Se.value!==null&&!r.closest(".usage-sort-trigger")&&(Se.value=null),Ue.value!==null&&(Ue.value=null)},it=x(!1),ut=x(null),Ue=x(null),os=o=>{Ue.value=Ue.value===o?null:o},dt=x(!1),ct=x(null),pt=x(null),Pe=x(!1),Qe=x(null),mt=x("add"),yt=x(!1),Ve=x(null),rs=o=>{const r=new Date,t=new Date(o).getTime()-r.getTime();return Math.ceil(t/(1e3*60*60*24))},Vt=async()=>{try{be.value=await K.userAttributes.listEnabledDefinitions()}catch(o){console.error("Failed to load attribute definitions:",o)}},ls=async()=>{at.value=!1,await Vt(),ae()},ae=async()=>{var C,t;ke==null||ke.abort();const o=new AbortController;ke=o;const{signal:r}=o;$.value=!0;try{const p={};for(const[L,Z]of Object.entries($e))Z&&(p[Number(L)]=Z);const V=await K.users.list(ue.page,ue.page_size,{role:W.role,status:W.status,search:B.value||void 0,group_name:W.group||void 0,api_key_group_id:W.apiKeyGroup??void 0,attributes:Object.keys(p).length>0?p:void 0,include_subscriptions:!0,sort_by:O.sort_by,sort_order:O.sort_order},{signal:r});if(r.aborted)return;if(w.value=V.items,ue.total=V.total,ue.pages=V.pages,Ce.value={},et.value={},Ie.value={},V.items.length>0){const L=V.items.map(ie=>ie.id),Z=++Ae;window.setTimeout(()=>{r.aborted||Z!==Ae||At(L,r,Z)},50)}}catch(p){const V=p;if((V==null?void 0:V.name)==="AbortError"||(V==null?void 0:V.name)==="CanceledError"||(V==null?void 0:V.code)==="ERR_CANCELED")return;const L=((t=(C=p.response)==null?void 0:C.data)==null?void 0:t.detail)||p.message||d("admin.users.failedToLoad");u.showError(L),console.error("Error loading users:",p)}finally{ke===o&&($.value=!1)}};let gt;const ns=()=>{clearTimeout(gt),gt=setTimeout(()=>{ue.page=1,ae()},300)},is=o=>{const r=Math.max(1,Math.min(o,ue.pages||1));ue.page=r,ae()},us=o=>{ue.page_size=o,ue.page=1,ae()},ds=(o,r)=>{Yt(),O.sort_by=o,O.sort_order=r,ue.page=1,ae()},Ke=o=>{const r=be.value.find(C=>C.id===o);return(r==null?void 0:r.name)||String(o)},cs=o=>{ne.has(o)?(ne.delete(o),o==="role"&&(W.role=""),o==="status"&&(W.status=""),o==="group"&&(W.group=""),o==="apiKeyGroup"&&(W.apiKeyGroup=null)):(ne.add(o),o==="group"&&Me(),o==="apiKeyGroup"&&_t()),Ze(),ue.page=1,ae()},ps=o=>{const r=`attr_${o.id}`;ne.has(r)?(ne.delete(r),delete $e[o.id]):(ne.add(r),$e[o.id]=""),Ze(),ue.page=1,ae()},qe=(o,r)=>{$e[o]=r},we=()=>{Ze(),ae()},ms=o=>{rt.value=o,tt.value=!0},ys=()=>{tt.value=!1,rt.value=null},gs=async o=>{var C,t;const r=o.status==="active"?"disabled":"active";try{await K.users.toggleStatus(o.id,r),u.showSuccess(d(r==="active"?"admin.users.userEnabled":"admin.users.userDisabled")),ae()}catch(p){u.showError(((t=(C=p.response)==null?void 0:C.data)==null?void 0:t.detail)||d("admin.users.failedToToggle")),console.error("Error toggling user status:",p)}},fs=o=>{lt.value=o,st.value=!0},hs=()=>{st.value=!1,lt.value=null},bs=o=>{ut.value=o,it.value=!0},vs=()=>{it.value=!1,ut.value=null},_s=(o,r)=>{Ue.value=null,ct.value=o,pt.value=r,dt.value=!0},xs=()=>{dt.value=!1,ct.value=null,pt.value=null},ks=o=>{ze.value=o,je.value=!0},ws=async()=>{var o,r;if(ze.value)try{await K.users.delete(ze.value.id),u.showSuccess(d("common.success")),je.value=!1,ze.value=null,ae()}catch(C){u.showError(((r=(o=C.response)==null?void 0:o.data)==null?void 0:r.detail)||d("admin.users.failedToDelete")),console.error("Error deleting user:",C)}},ft=o=>{Qe.value=o,mt.value="add",Pe.value=!0},Et=o=>{Qe.value=o,mt.value="subtract",Pe.value=!0},$s=()=>{Pe.value=!1,Qe.value=null},Mt=o=>{Ve.value=o,yt.value=!0},Cs=()=>{yt.value=!1,Ve.value=null},Ss=()=>{Ve.value&&ft(Ve.value)},As=()=>
1{Ve.value&&Et(Ve.value)},Gt=()=>{me()};return vt(async()=>{await Vt(),Wt(),k(),ae(),(v.value||ne.has("group"))&&Me(),ne.has("apiKeyGroup")&&_t(),document.addEventListener("click",Ut),window.addEventListener("scroll",Gt,!0)}),Ht(()=>{document.removeEventListener("click",Ut),window.removeEventListener("scroll",Gt,!0),clearTimeout(gt),ke==null||ke.abort()}),(o,r)=>(l(),oe(Rs,null,{default:F(()=>{var C;return[E(Os,null,{filters:F(()=>[e("div",ei,[e("div",ti,[e("div",si,[E(H,{name:"search",size:"md",class:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400"}),j(e("input",{"onUpdate:modelValue":r[0]||(r[0]=t=>B.value=t),type:"text",placeholder:s(d)("admin.users.searchUsers"),class:"input pl-10",onInput:ns},null,40,ai),[[J,B.value]])]),ne.has("role")?(l(),i("div",oi,[E(Ee,{modelValue:W.role,"onUpdate:modelValue":r[1]||(r[1]=t=>W.role=t),options:[{value:"",label:s(d)("admin.users.allRoles")},{value:"admin",label:s(d)("admin.users.admin")},{value:"user",label:s(d)("admin.users.user")}],onChange:we},null,8,["modelValue","options"])])):z("",!0),ne.has("status")?(l(),i("div",ri,[E(Ee,{modelValue:W.status,"onUpdate:modelValue":r[2]||(r[2]=t=>W.status=t),options:[{value:"",label:s(d)("admin.users.allStatus")},{value:"active",label:s(d)("common.active")},{value:"disabled",label:s(d)("admin.users.disabled")}],onChange:we},null,8,["modelValue","options"])])):z("",!0),ne.has("group")?(l(),i("div",li,[E(Ee,{modelValue:W.group,"onUpdate:modelValue":r[3]||(r[3]=t=>W.group=t),options:Kt.value,searchable:"",creatable:"","creatable-prefix":s(d)("admin.users.fuzzySearch"),"search-placeholder":s(d)("admin.users.searchAuthorizedGroups"),onChange:we},null,8,["modelValue","options","creatable-prefix","search-placeholder"])])):z("",!0),ne.has("apiKeyGroup")?(l(),i("div",ni,[E(Ee,{modelValue:W.apiKeyGroup,"onUpdate:modelValue":r[4]||(r[4]=t=>W.apiKeyGroup=t),options:qt.value,searchable:"","search-placeholder":s(d)("admin.users.searchApiKeyGroups"),onChange:we},null,8,["modelValue","options","search-placeholder"])])):z("",!0),(l(!0),i(q,null,X($e,(t,p)=>{var V,L,Z,ie;return l(),i(q,{key:p},[ne.has(`attr_${p}`)?(l(),i("div",ii,[["text","textarea","email","url","date"].includes(((V=Le(Number(p)))==null?void 0:V.type)||"text")?(l(),i("input",{key:0,value:t,onInput:re=>qe(Number(p),re.target.value),onKeyup:ht(we,["enter"]),placeholder:Ke(Number(p)),class:"input w-full"},null,40,ui)):((L=Le(Number(p)))==null?void 0:L.type)==="number"?(l(),i("input",{key:1,value:t,type:"number",onInput:re=>qe(Number(p),re.target.value),onKeyup:ht(we,["enter"]),placeholder:Ke(Number(p)),class:"input w-full"},null,40,di)):["select","multi_select"].includes(((Z=Le(Number(p)))==null?void 0:Z.type)||"")?(l(),i("div",ci,[E(Ee,{"model-value":t,options:[{value:"",label:Ke(Number(p))},...((ie=Le(Number(p)))==null?void 0:ie.options)||[]],"onUpdate:modelValue":re=>{qe(Number(p),String(re??"")),we()}},null,8,["model-value","options","onUpdate:modelValue"])])):(l(),i("input",{key:3,value:t,onInput:re=>qe(Number(p),re.target.value),onKeyup:ht(we,["enter"]),placeholder:Ke(Number(p)),class:"input w-full"},null,40,pi))])):z("",!0)],64)}),128))]),e("div",mi,[e("div",yi,[e("button",{onClick:ae,disabled:$.value,class:"btn btn-secondary px-2 md:px-3",title:s(d)("common.refresh")},[E(H,{name:"refresh",size:"md",class:te($.value?"animate-spin":"")},null,8,["class"])],8,gi),e("div",{class:"relative",ref_key:"filterDropdownRef",ref:Ye},[e("button",{onClick:r[5]||(r[5]=t=>Be.value=!Be.value),class:"btn btn-secondary px-2 md:px-3",title:s(d)("admin.users.filterSettings")},[E(H,{name:"filter",size:"sm",class:"md:mr-1.5"}),e("span",hi,a(s(d)("admin.users.filterSettings")),1)],8,fi),Be.value?(l(),i("div",bi,[(l(!0),i(q,null,X(Jt.value,t=>(l(),i("button",{key:t.key,onClick:p=>cs(t.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,a(t.name),1),ne.has(t.key)?(l(),oe(H,{key:0,name:"check",size:"sm",class:"text-primary-500","stroke-width":2})):z("",!0)],8,vi))),128)),xt.value.length>0?(l(),i("div",_i)):z("",!0),(l(!0),i(q,null,X(xt.value,t=>(l(),i("button",{key:t.id,onClick:p=>ps(t),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,a(t.name),1),ne.has(`attr_${t.id}`)?(l(),oe(H,{key:0,name:"check",size:"sm",class:"text-primary-500","stroke-width":2})):z("",!0)],8,xi))),128))])):z("",!0)],512),e("div",{class:"relative",ref_key:"columnDropdownRef",ref:Xe},[e("button",{onClick:r[6]||(r[6]=t=>De.value=!De.value),class:"btn btn-secondary px-2 md:px-3",title:s(d)("admin.users.columnSettings")},[r[12]||(r[12]=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",wi,a(s(d)("admin.users.columnSettings")),1)],8,ki),De.value?(l(),i("div",$i,[(l(!0),i(q,null,X(_.value,t=>(l(),i("button",{key:t.key,disabled:c(t.key),onClick:p=>h(t.key),class:te(["flex w-full items-center justify-between px-4 py-2 text-left text-sm",c(t.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:c(t.key)?s(d)("admin.users.columnAlwaysVisible"):""},[e("span",null,a(t.label),1),T(t.key)?(l(),oe(H,{key:0,name:"check",size:"sm",class:te(c(t.key)?"text-gray-400 dark:text-gray-500":"text-primary-500"),"stroke-width":2},null,8,["class"])):z("",!0)],10,Ci))),128))])):z("",!0)],512),e("button",{onClick:r[7]||(r[7]=t=>at.value=!0),class:"btn btn-secondary px-2 md:px-3",title:s(d)("admin.users.attributes.configButton")},[E(H,{name:"cog",size:"sm",class:"md:mr-1.5"}
1),e("span",Ai,a(s(d)("admin.users.attributes.configButton")),1)],8,Si)]),e("button",{onClick:r[8]||(r[8]=t=>Te.value=!0),class:"btn btn-primary flex-1 md:flex-initial"},[E(H,{name:"plus",size:"md",class:"mr-2"}),ee(" "+a(s(d)("admin.users.createUser")),1)])])])]),table:F(()=>[E(Ns,{columns:Q.value,data:es.value,loading:$.value,"actions-count":7,"server-side-sort":!0,"default-sort-key":"created_at","default-sort-order":"desc","sort-storage-key":Dt,onSort:ds},Es({"cell-email":F(({value:t})=>[e("div",Ui,[e("div",Vi,[e("span",Ei,a(t.charAt(0).toUpperCase()),1)]),e("span",Mi,a(t),1)])]),"cell-username":F(({value:t})=>[e("span",Gi,a(t||"-"),1)]),"cell-notes":F(({value:t})=>[e("div",zi,[t?(l(),i("span",{key:0,title:t.length>30?t:void 0,class:"block truncate text-sm text-gray-600 dark:text-gray-400"},a(t.length>30?t.substring(0,25)+"...":t),9,Ri)):(l(),i("span",Oi,"-"))])]),"cell-role":F(({value:t})=>[e("span",{class:te(["badge",t==="admin"?"badge-purple":"badge-gray"])},a(s(d)("admin.users.roles."+t)),3)]),"cell-groups":F(({row:t})=>[le.value.length>0?(l(),i("div",Bi,[he(t).exclusive.length>0?(l(),i("span",{key:0,class:"group/ex relative inline-flex cursor-pointer items-center gap-1 whitespace-nowrap text-xs",onClick:ve(p=>os(t.id),["stop"])},[E(H,{name:"shield",size:"xs",class:"h-3.5 w-3.5 text-purple-500 dark:text-purple-400"}),e("span",Li,a(he(t).exclusive.length),1),e("span",Ii,a(s(d)("admin.users.exclusiveLabel")),1),Ue.value!==t.id?(l(),i("div",Hi,[r[13]||(r[13]=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",Ti,[(l(!0),i(q,null,X(he(t).exclusive,p=>(l(),i("span",{key:p.id},a(p.name),1))),128))])])):z("",!0),Ue.value===t.id?(l(),i("div",ji,[e("div",Pi,a(s(d)("admin.users.clickToReplace")),1),(l(!0),i(q,null,X(he(t).exclusive,p=>(l(),i("div",{key:p.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:ve(V=>_s(t,p),["stop"])},[E(H,{name:"swap",size:"xs",class:"h-3.5 w-3.5 flex-shrink-0 opacity-50"}),e("span",Ki,a(p.name),1)],8,Qi))),128))])):z("",!0)],8,Di)):z("",!0),he(t).publicGroups.length>0?(l(),i("span",qi,[E(H,{name:"globe",size:"xs",class:"h-3.5 w-3.5 text-gray-400 dark:text-dark-500"}),e("span",Ji,a(he(t).publicGroups.length),1),e("span",Wi,a(s(d)("admin.users.publicLabel")),1),e("div",Yi,[r[14]||(r[14]=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",Xi,[(l(!0),i(q,null,X(he(t).publicGroups,p=>(l(),i("span",{key:p.id},a(p.name),1))),128))])])])):z("",!0),he(t).exclusive.length===0&&he(t).publicGroups.length===0?(l(),i("span",Zi,"-")):z("",!0)])):(l(),i("span",eu,"-"))]),"cell-subscriptions":F(({row:t})=>[t.subscriptions&&t.subscriptions.length>0?(l(),i("div",tu,[(l(!0),i(q,null,X(t.subscriptions,p=>{var V,L,Z,ie;return l(),oe(Qt,{key:p.id,name:((V=p.group)==null?void 0:V.name)||"",platform:(L=p.group)==null?void 0:L.platform,"subscription-type":(Z=p.group)==null?void 0:Z.subscription_type,"rate-multiplier":(ie=p.group)==null?void 0:ie.rate_multiplier,"days-remaining":p.expires_at?rs(p.expires_at):null,title:p.expires_at?s(Ne)(p.expires_at):""},null,8,["name","platform","subscription-type","rate-multiplier","days-remaining","t
1itle"])}),128))])):(l(),i("span",su,[E(H,{name:"ban",size:"xs",class:"h-3.5 w-3.5"}),e("span",null,a(s(d)("admin.users.noSubscription")),1)]))]),"cell-balance":F(({value:t,row:p})=>[e("div",au,[e("div",ou,[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:V=>Mt(p)}," $"+a(t.toFixed(2)),9,ru),e("div",lu,[ee(a(s(d)("admin.users.balanceHistoryTip"))+" ",1),r[15]||(r[15]=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:ve(V=>ft(p),["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:s(d)("admin.users.deposit")},a(s(d)("admin.users.deposit")),9,nu)])]),"cell-balance_platform_quota":F(({row:t})=>[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:s(d)("admin.users.platformQuota.cellColumnTooltip"),onClick:p=>St(t)},[E(xo,{quotas:Ie.value[t.id]},null,8,["quotas"])],8,iu)]),"cell-usage":F(({row:t})=>{var p,V,L;return[E(to,{today:((p=Ce.value[t.id])==null?void 0:p.today_actual_cost)??0,total:((V=Ce.value[t.id])==null?void 0:V.total_actual_cost)??0,"by-platform":(L=Ce.value[t.id])==null?void 0:L.by_platform},null,8,["today","total","by-platform"])]}),"cell-usage_anthropic":F(({row:t})=>[E(Je,{usage:He(t.id,"anthropic")},null,8,["usage"])]),"cell-usage_openai":F(({row:t})=>[E(Je,{usage:He(t.id,"openai")},null,8,["usage"])]),"cell-usage_gemini":F(({row:t})=>[E(Je,{usage:He(t.id,"gemini")},null,8,["usage"])]),"cell-usage_antigravity":F(({row:t})=>[E(Je,{usage:He(t.id,"antigravity")},null,8,["usage"])]),"cell-concurrency":F(({row:t})=>[E(Ha,{current:t.current_concurrency??0,max:t.concurrency},null,8,["current","max"])]),"cell-status":F(({value:t})=>[e("div",hu,[e("span",{class:te(["inline-block h-2 w-2 rounded-full",t==="active"?"bg-green-500":"bg-red-500"])},null,2),e("span",bu,a(t==="active"?s(d)("common.active"):s(d)("admin.users.disabled")),1)])]),"cell-created_at":F(({value:t})=>[e("span",vu,a(s(Ne)(t)),1)]),"cell-last_used_at":F(({value:t})=>[e("span",_u,a(t?s(Ne)(t):"-"),1)]),"cell-last_active_at":F(({value:t})=>[e("span",xu,a(t?s(Ne)(t):"-"),1)]),"cell-actions":F(({row:t})=>[e("div",ku,[e("button",{onClick:p=>ms(t),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"},[E(H,{name:"edit",size:"sm"}),e("span",$u,a(s(d)("common.edit")),1)],8,wu),t.role!=="admin"?(l(),i("button",{key:0,onClick:p=>gs(t),class:te(["flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors",t.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"])},[t.status==="active"?(l(),oe(H,{key:0,name:"ban",size:"sm"})):(l(),oe(H,{key:1,name:"checkCircle",size:"sm"})),e("span",Su,a(t.status==="active"?s(d)("admin.users.disable"):s(d)("admin.users.enable")),1)],10,Cu)):z("",!0),e("button",{onClick:p=>as(t,p),class:te(["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":Ge.value===t.id}])},[E(H,{name:"more",size:"sm"}),e("span",Uu,a(s(d)("common.more")),1)],10,Au)])]),empty:F(()=>[E(Fs,{title:s(d)("admin.users.noUsersYet"),description:s(d)("admin.users.createFirstUser"),"action-text":s(d)("admin.users.createUser"),onAction:r[9]||(r[9]=t=>Te.value=!0)},null,8,["title","description","action-text"])]),_:2},[X(be.value.filter(t=>t.enabled),t=>({name:`cell-attr_${t.id}`,fn:F(({row:p})=>[e("div",Ni,[e("span",{class:"block truncate text-sm text-gray-700 dark:text-gray-300",title:n(p.id,t.id)},a(n(p.id,t.id)),9,Fi)])])})),X(P,t=>({name:`header-${t}`,fn:F(({column:p})=>[e("div",uu,[e("span",null,a(p.label),1),e("div",du,[e("button",{type:"button",class:te(["flex items-center gap-1 rounded px-1 py-0.5 transition-colors hover:bg-gray-200 dark:hover:bg-dark-700",se.value&&se.value.key===t?"text-primary-600 dark:text-primary-400":"text-gray-400 dark:text-dark-500"]),title:s(d)("admin.users.sortBy"),"data-test":`usage-sort-trigger-${t}`,onClick:ve(V=>Zt(t),["stop"])},[se.value&&se.value.key===t?(l(),i("span",pu,a(se.value.metric==="today"?s(d)("admin.users.today"):s(d)("admin.users.total")),1)):z("",!0),se.value&&se.value.key===t?(l(),i("svg",{key:1,class:te(["h-3.5 w-3.5",{"rotate-180":se.value.order==="desc"}]),fill:"currentColor",viewBox:"0 0 20 20"},[...r[16]||(r[16]=[e("path",{"fill-rule":"evenodd",d:"M14.707 12.707
1a1 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)):(l(),i("svg",mu,[...r[17]||(r[17]=[e("path",{d:"M10 3l-4 5h8l-4-5zM10 17l4-5H6l4 5z"},null,-1)])]))],10,cu),Se.value===t?(l(),i("div",yu,[(l(),i(q,null,X(["today","total"],V=>e("button",{key:V,type:"button",class:te(["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",wt(t,V)?"font-medium text-primary-600 dark:text-primary-400":"text-gray-700 dark:text-gray-300"]),"data-test":`usage-sort-${t}-${V}`,onClick:ve(L=>Xt(t,V),["stop"])},[e("span",null,a(V==="today"?s(d)("admin.users.today"):s(d)("admin.users.total")),1),$t(t,V)?(l(),i("svg",{key:0,class:te(["h-3 w-3",{"rotate-180":$t(t,V)==="desc"}]),fill:"currentColor",viewBox:"0 0 20 20"},[...r[18]||(r[18]=[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)):z("",!0)],10,gu)),64)),e("div",fu,a(s(d)("admin.users.sortCurrentPageOnly")),1)])):z("",!0)])])])}))]),1032,["columns","data","loading"])]),pagination:F(()=>[ue.total>0?(l(),oe(zs,{key:0,page:ue.page,total:ue.total,"page-size":ue.page_size,"onUpdate:page":is,"onUpdate:pageSize":us},null,8,["page","total","page-size"])):z("",!0)]),_:1}),(l(),oe(Tt,{to:"body"},[Ge.value!==null&&Re.value?(l(),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:jt({top:Re.value.top+"px",left:Re.value.left+"px"})},[e("div",Vu,[(l(!0),i(q,null,X(w.value,t=>(l(),i(q,{key:t.id},[t.id===Ge.value?(l(),i(q,{key:0},[e("button",{onClick:p=>{fs(t),me()},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"},[E(H,{name:"key",size:"sm",class:"text-gray-400","stroke-width":2}),ee(" "+a(s(d)("admin.users.apiKeys")),1)],8,Eu),e("button",{onClick:p=>{bs(t),me()},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"},[E(H,{name:"users",size:"sm",class:"text-gray-400","stroke-width":2}),ee(" "+a(s(d)("admin.users.groups")),1)],8,Mu),r[20]||(r[20]=e("div",{class:"my-1 border-t border-gray-100 dark:border-dark-700"},null,-1)),e("button",{onClick:p=>{ft(t),me()},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"},[E(H,{name:"plus",size:"sm",class:"text-emerald-500","stroke-width":2}),ee(" "+a(s(d)("admin.users.deposit")),1)],8,Gu),e("button",{onClick:p=>{Et(t),me()},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"},[r[19]||(r[19]=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)),ee(" "+a(s(d)("admin.users.withdraw")),1)],8,zu),e("button",{onClick:p=>{St(t),me()},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"},[E(H,{name:"chartBar",size:"sm",class:"text-gray-400","stroke-width":2}),ee(" "+a(s(d)("admin.users.platformQuota.menuItem")),1)],8,Ru),e("button",{onClick:p=>{Mt(t),me()},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"},[E(H,{name:"dollar",size:"sm",class:"text-gray-400","stroke-width":2}),ee(" "+a(s(d)("admin.users.balanceHistory")),1)],8,Ou),r[21]||(r[21]=e("div",{class:"my-1 border-t border-gray-100 dark:border-dark-700"},null,-1)),t.role!=="admin"?(l(),i("button",{key:0,onClick:p=>{ks(t),me()},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"},[E(H,{name:"trash",size:"sm","stroke-width":2}),ee(" "+a(s(d)("common.delete")),1)],8,Nu)):z("",!0)],64)):z("",!0)],64))),128))])],4)):z("",!0)])),E(Pt,{show:je.value,title:s(d)("admin.users.deleteUser"),message:s(d)("admin.users.deleteConfirm",{email:(C=ze.value)==null?void 0:C.email}),danger:!0,onConfirm:ws,onCancel:r[10]||(r[10]=t=>je.value=!1)},null,8,["show","title","message"]),E(Do,{show:Te.value,onClose:r[11]||(r[11]=t=>Te.value=!1),onSuccess:ae},null,8,["show"]),E(yr,{show:tt.value,user:rt.value,onClose:ys,onSuccess:ae},null,8,["show","user"]),E(Pr,{show:ot.value,user:nt.value,onClose:ts,onSuccess:ae},null,8,["show","user"]),E(hl,{show:st.value,user:lt.value,onClose:hs},null,8,["show","user"]),E(bn,{show:it.value,user:ut.value,onClose:vs,onSuccess:ae},null,8,["show","user"]),E(On,{show:Pe.value,user:Qe.value,operation:mt.value,onClose:$s,onSuccess:ae},null,8,["show","user","operation"]),E(Is,{show:yt.value,user:Ve.value,onClose:Cs,onDeposit:Ss,onWithdraw:As},null,8,["show","user"]),E(Zn,{show:dt.value,user:ct.value,"old-group":pt.value,"all-groups":le.value,onClose:xs,onSuccess:ae},null,8,["show","user","old-group","all-groups"]),E(Ba,{show:at.value,onClose:ls},null,8,["show"])]}),_:1}))}});
1export{rd 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.