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