1import{_ as p,ag as dt,ah as ht,ai as nt,h as _t,u as xt,a3 as lt}from"./index-D4B9XJED.js";import{u as Z}from"./usage-CGATureb.js";import{_ as pt}from"./AppLayout.vue_vue_type_script_setup_true_lang-964gbyG2.js";import{L as tt}from"./LoadingSpinner-Jr1bbwDT.js";import{d as V,c as W,z as u,F as D,B as t,E as R,G as e,u as a,k as i,V as J,C as l,A as it,S as ft,D as ut,a1 as yt,K as gt,H as kt,o as mt,Z as bt,r as v}from"./vendor-vue-Dzwqm9Y9.js";import{u as X}from"./vendor-i18n-BuoWFzps.js";import{D as vt,_ as $t}from"./TokenUsageTrend.vue_vue_type_script_setup_true_lang-qdN5XQz0.js";import{S as wt}from"./Select-BjYX9AhD.js";import{C as Dt,b as Ct,L as St,P as zt,c as Rt,A as At,e as qt,p as Ft,a as Mt,i as Ut,D as jt}from"./vendor-chart-BNlN3Otn.js";import{_ as Lt}from"./EmptyState.vue_vue_type_script_setup_true_lang-BZop-dpC.js";import{u as Tt}from"./AppHeader.vue_vue_type_style_index_0_scoped_59fb3e77_lang-C9_N2XZy.js";import{g as Bt}from"./user-CTwKdCif.js";import"./vendor-misc-B-nM3tYW.js";import"./useClipboard-Cj86XNkg.js";import"./LocaleSwitcher-BANwbqFd.js";/* empty css */const Ot={class:"grid grid-cols-2 gap-4 lg:grid-cols-4"},Nt={key:0,class:"card p-4"},Pt={class:"flex items-center gap-3"},Qt={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Vt={class:"text-xl font-bold text-emerald-600 dark:text-emerald-400"},It={class:"text-xs text-gray-500 dark:text-gray-400"},Et={class:"card p-4"},Ht={class:"flex items-center gap-3"},Kt={class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},Gt={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Zt={class:"text-xl font-bold text-gray-900 dark:text-white"},Wt={class:"text-xs text-green-600 dark:text-green-400"},Jt={class:"card p-4"},Xt={class:"flex items-center gap-3"},Yt={class:"rounded-lg bg-green-100 p-2 dark:bg-green-900/30"},te={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},ee={class:"text-xl font-bold text-gray-900 dark:text-white"},ae={class:"text-xs text-gray-500 dark:text-gray-400"},se={class:"card p-4"},oe={class:"flex items-center gap-3"},re={class:"rounded-lg bg-purple-100 p-2 dark:bg-purple-900/30"},de={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},ne={class:"text-xl font-bold text-gray-900 dark:text-white"},le=["title"],ie=["title"],ce={class:"text-xs"},ue={class:"text-gray-500 dark:text-gray-400"},ge=["title"],me=["title"],he={class:"grid grid-cols-2 gap-4 lg:grid-cols-4"},_e={class:"card p-4"},xe={class:"flex items-center gap-3"},pe={class:"rounded-lg bg-amber-100 p-2 dark:bg-amber-900/30"},fe={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},ye={class:"text-xl font-bold text-gray-900 dark:text-white"},ke={class:"text-xs text-gray-500 dark:text-gray-400"},be={class:"card p-4"},ve={class:"flex items-center gap-3"},$e={class:"rounded-lg bg-indigo-100 p-2 dark:bg-indigo-900/30"},we={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},De={class:"text-xl font-bold text-gray-900 dark:text-white"},Ce={class:"text-xs text-gray-500 dark:text-gray-400"},Se={class:"card p-4"},ze={class:"flex items-center gap-3"},Re={class:"rounded-lg bg-violet-100 p-2 dark:bg-violet-900/30"},Ae={class:"flex-1"},qe={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Fe={class:"flex items-baseline gap-2"},Me={class:"text-xl font-bold text-gray-900 dark:text-white"},Ue={class:"flex items-baseline gap-2"},je={class:"text-sm font-semibold text-violet-600 dark:text-violet-400"},Le={class:"card p-4"},Te={class:"flex items-center gap-3"},Be={class:"rounded-lg bg-rose-100 p-2 dark:bg-rose-900/30"},Oe={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Ne={class:"text-xl font-bold text-gray-900 dark:text-white"},Pe={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={key:0,class:"card p-4"},Ve={class:"mb-3 flex items-center justify-between"},Ie={class:"text-sm font-semibold text-gray-900 dark:text-white"},Ee={class:"text-xs text-gray-500 dark:text-gray-400"},He={class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4"},Ke=["data-platform"],Ge={class:"flex items-center justify-between"},Ze={class:"text-sm font-semibold text-gray-900 dark:text-white"},We=["title"],Je={class:"mt-2 space-y-1 text-xs"},Xe={class:"flex items-center justify-between"},Ye={class:"text-gray-500 dark:text-gray-400"},ta={class:"font-mono text-gray-900 dark:text-white"},ea={class:"flex items-center justify-between"},aa={class:"text-gray-500 dark:text-gray-400"},sa={class:"font-mono text-gray-700 dark:text-gray-300"},oa={class:"flex items-center justify-between"},ra={class:"text-gray-500 dark:text-gray-400"},da={class:"font-mono text-gray-700 dark:text-gray-300"},na={key:0,class:"mt-3 space-y-1.5 border-t border-gray-200 pt-2 dark:border-dark-700"},la={class:"text-[10px] uppercase tracking-wide text-gray-400"},ia={key:0,class:"space-y-0.5"},ca={class:"flex items-center justify-between text-xs"},ua={class:"text-gray-600 dark:text-gray-300"},ga={class:"font-mono text-red-500"},ma={class:"flex items-center justify-between text-xs"},ha={class:"text-gray-600 dark:text-gray-300"},_a={class:"font-mono text-gray-700 dark:text-gray-200"},xa={class:"h-1.5 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-700"},pa={key:0,class:"text-[10px] text-gray-400"},ct=1e-4,fa=V({__name:"UserDashboardStats",props:{stats:{},balance:{},isSimple:{type:Boolean},platformQuotas:{}},setup(r){const g=r,{t:s}=X(),f={anthropic:"Claude",openai:"OpenAI",gemini:"Gemini",antigravity:"Antigravity",grok:"Grok",kimi:"Kimi",zhipu:"Zhipu GLM",deepseek:"DeepSeek",minimax:"MiniMax"},$=o=>f[o]??o,h=W(()=>{var N,P,Q;const o=new Map;for(const x of((N=g.stats)==null?void 0:N.by_platform)??[])o.set(
1x.platform,x);const c=new Map;for(const x of g.platformQuotas??[])c.set(x.platform,x);const z=new Set(o.keys());for(const[x,m]of c)U(m)&&z.add(x);const b=["anthropic","openai","gemini","antigravity","grok"],w=[];for(const x of z){const m=o.get(x);w.push({platform:x,total_actual_cost:(m==null?void 0:m.total_actual_cost)??0,today_actual_cost:(m==null?void 0:m.today_actual_cost)??0,total_requests:(m==null?void 0:m.total_requests)??0,total_tokens:(m==null?void 0:m.total_tokens)??0,quota:c.get(x)})}w.sort((x,m)=>{const F=b.indexOf(x.platform),M=b.indexOf(m.platform);return F===-1&&M===-1?x.platform.localeCompare(m.platform):F===-1?1:M===-1?-1:F-M});const E=((P=g.stats)==null?void 0:P.total_actual_cost)??0,H=((Q=g.stats)==null?void 0:Q.today_actual_cost)??0,K=w.reduce((x,m)=>x+m.total_actual_cost,0),G=w.reduce((x,m)=>x+m.today_actual_cost,0),B=Math.max(0,E-K),O=Math.max(0,H-G);return(B>ct||O>ct)&&w.push({platform:"__other__",total_actual_cost:B,today_actual_cost:O,total_requests:0,total_tokens:0,isOther:!0}),w}),d=W(()=>h.value.filter(o=>!o.isOther).length);function n(o,c){return o==null?void 0:o[c]}function U(o){return o?o.daily_limit_usd!=null||o.weekly_limit_usd!=null||o.monthly_limit_usd!=null:!1}function j(o,c){return!c||c<=0?0:Math.min(100,Math.max(0,Math.round(o/c*100)))}function L(o){return o>=95?"bg-red-500":o>=75?"bg-amber-500":"bg-green-500"}const A=new Intl.NumberFormat("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});function C(o){return Number.isFinite(o)?A.format(o):"0.00"}function T(o){if(!o)return"";const c=new Date(o);return Number.isNaN(c.getTime())?o:c.toLocaleString(void 0,{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1})}const Y=o=>new Intl.NumberFormat("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}).format(o),q=o=>o.toLocaleString(),S=o=>o.toFixed(4),y=o=>o>=1e6?`${(o/1e6).toFixed(1)}M`:o>=1e3?`${(o/1e3).toFixed(1)}K`:o.toString(),I=o=>o>=1e3?`${(o/1e3).toFixed(2)}s`:`${o.toFixed(0)}ms`;return(o,c)=>{var z,b,w,E,H,K,G,B,O,N,P,Q,x,m,F,M,et,at,st,ot,rt;return l(),u(D,null,[t("div",Ot,[r.isSimple?R("",!0):(l(),u("div",Nt,[t("div",Pt,[c[0]||(c[0]=t("div",{class:"rounded-lg bg-emerald-100 p-2 dark:bg-emerald-900/30"},[t("svg",{class:"h-5 w-5 text-emerald-600 dark:text-emerald-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.25 18.75a60.07 60.07 0 0115.797 2.101c.727.198 1.453-.342 1.453-1.096V18.75M3.75 4.5v.75A.75.75 0 013 6h-.75m0 0v-.375c0-.621.504-1.125 1.125-1.125H20.25M2.25 6v9m18-10.5v.75c0 .414.336.75.75.75h.75m-1.5-1.5h.375c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-.375m1.5-1.5H21a.75.75 0 00-.75.75v.75m0 0H3.75m0 0h-.375a1.125 1.125 0 01-1.125-1.125V15m1.5 1.5v-.75A.75.75 0 003 15h-.75M15 10.5a3 3 0 11-6 0 3 3 0 016 0zm3 0h.008v.008H18V10.5zm-12 0h.008v.008H6V10.5z"})])],-1)),t("div",null,[t("p",Qt,e(a(s)("dashboard.balance")),1),t("p",Vt,"$"+e(Y(r.balance)),1),t("p",It,e(a(s)("common.available")),1)])])])),t("div",Et,[t("div",Ht,[t("div",Kt,[i(p,{name:"key",size:"md",class:"text-blue-600 dark:text-blue-400","stroke-width":2})]),t("div",null,[t("p",Gt,e(a(s)("dashboard.apiKeys")),1),t("p",Zt,e(((z=r.stats)==null?void 0:z.total_api_keys)||0),1),t("p",Wt,e(((b=r.stats)==null?void 0:b.active_api_keys)||0)+" "+e(a(s)("common.active")),1)])])]),t("div",Jt,[t("div",Xt,[t("div",Yt,[i(p,{name:"chart",size:"md",class:"text-green-600 dark:text-green-400","stroke-width":2})]),t("div",null,[t("p",te,e(a(s)("dashboard.todayRequests")),1),t("p",ee,e(((w=r.stats)==null?void 0:w.today_requests)||0),1),t("p",ae,e(a(s)("common.total"))+": "+e(q(((E=r.stats)==null?void 0:E.total_requests)||0)),1)])])]),t("div",se,[t("div",oe,[t("div",re,[i(p,{name:"dollar",size:"md",class:"text-purple-600 dark:text-purple-400","stroke-width":2})]),t("div",null,[t("p",de,e(a(s)("dashboard.todayCost")),1),t("p",ne,[t("span",{class:"text-purple-600 dark:text-purple-400",title:a(s)("dashboard.actual")},"$"+e(S(((H=r.stats)==null?void 0:H.today_actual_cost)||0)),9,le),t("span",{class:"text-sm font-normal text-gray-400 dark:text-gray-500",title:a(s)("dashboard.standard")}," / $"+e(S(((K=r.stats)==null?void 0:K.today_cost)||0)),9,ie)]),t("p",ce,[t("span",ue,e(a(s)("common.total"))+": ",1),t("span",{class:"text-purple-600 dar
1k:text-purple-400",title:a(s)("dashboard.actual")},"$"+e(S(((G=r.stats)==null?void 0:G.total_actual_cost)||0)),9,ge),t("span",{class:"text-gray-400 dark:text-gray-500",title:a(s)("dashboard.standard")}," / $"+e(S(((B=r.stats)==null?void 0:B.total_cost)||0)),9,me)])])])])]),t("div",he,[t("div",_e,[t("div",xe,[t("div",pe,[i(p,{name:"cube",size:"md",class:"text-amber-600 dark:text-amber-400","stroke-width":2})]),t("div",null,[t("p",fe,e(a(s)("dashboard.todayTokens")),1),t("p",ye,e(y(((O=r.stats)==null?void 0:O.today_tokens)||0)),1),t("p",ke,e(a(s)("dashboard.input"))+": "+e(y(((N=r.stats)==null?void 0:N.today_input_tokens)||0))+" / "+e(a(s)("dashboard.output"))+": "+e(y(((P=r.stats)==null?void 0:P.today_output_tokens)||0))+" / "+e(a(s)("dashboard.cache"))+": "+e(y((((Q=r.stats)==null?void 0:Q.today_cache_creation_tokens)||0)+(((x=r.stats)==null?void 0:x.today_cache_read_tokens)||0))),1)])])]),t("div",be,[t("div",ve,[t("div",$e,[i(p,{name:"database",size:"md",class:"text-indigo-600 dark:text-indigo-400","stroke-width":2})]),t("div",null,[t("p",we,e(a(s)("dashboard.totalTokens")),1),t("p",De,e(y(((m=r.stats)==null?void 0:m.total_tokens)||0)),1),t("p",Ce,e(a(s)("dashboard.input"))+": "+e(y(((F=r.stats)==null?void 0:F.total_input_tokens)||0))+" / "+e(a(s)("dashboard.output"))+": "+e(y(((M=r.stats)==null?void 0:M.total_output_tokens)||0))+" / "+e(a(s)("dashboard.cache"))+": "+e(y((((et=r.stats)==null?void 0:et.total_cache_creation_tokens)||0)+(((at=r.stats)==null?void 0:at.total_cache_read_tokens)||0))),1)])])]),t("div",Se,[t("div",ze,[t("div",Re,[i(p,{name:"bolt",size:"md",class:"text-violet-600 dark:text-violet-400","stroke-width":2})]),t("div",Ae,[t("p",qe,e(a(s)("dashboard.performance")),1),t("div",Fe,[t("p",Me,e(y(((st=r.stats)==null?void 0:st.rpm)||0)),1),c[1]||(c[1]=t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"RPM",-1))]),t("div",Ue,[t("p",je,e(y(((ot=r.stats)==null?void 0:ot.tpm)||0)),1),c[2]||(c[2]=t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"TPM",-1))])])])]),t("div",Le,[t("div",Te,[t("div",Be,[i(p,{name:"clock",size:"md",class:"text-rose-600 dar
1k:text-rose-400","stroke-width":2})]),t("div",null,[t("p",Oe,e(a(s)("dashboard.avgResponse")),1),t("p",Ne,e(I(((rt=r.stats)==null?void 0:rt.average_duration_ms)||0)),1),t("p",Pe,e(a(s)("dashboard.averageTime")),1)])])])]),!r.isSimple&&h.value.length>0?(l(),u("div",Qe,[t("div",Ve,[t("h3",Ie,e(a(s)("dashboard.platformBreakdown")),1),t("span",Ee,e(a(s)("dashboard.platformCount",{count:d.value})),1)]),t("div",He,[(l(!0),u(D,null,J(h.value,_=>(l(),u("div",{key:_.platform,"data-testid":"platform-card","data-platform":_.platform,class:it(["rounded-lg border p-3",_.isOther?"border-dashed border-gray-300 bg-gray-50 dark:border-dark-500 dark:bg-dark-700/30":"border-gray-200 dark:border-dark-600"])},[t("div",Ge,[t("span",Ze,e(_.isOther?a(s)("dashboard.platformOther"):$(_.platform)),1),t("span",{class:"font-mono text-sm text-purple-600 dark:text-purple-400",title:a(s)("dashboard.actual")}," $"+e(S(_.total_actual_cost)),9,We)]),t("div",Je,[t("div",Xe,[t("span",Ye,e(a(s)("dashboard.todayCost")),1),t("span",ta,"$"+e(S(_.today_actual_cost)),1)]),t("div",ea,[t("span",aa,e(a(s)("dashboard.requests")),1),t("span",sa,e(_.total_requests>0?q(_.total_requests):"-"),1)]),t("div",oa,[t("span",ra,e(a(s)("dashboard.tokens")),1),t("span",da,e(_.total_tokens>0?y(_.total_tokens):"-"),1)])]),U(_.quota)&&!_.isOther?(l(),u("div",na,[t("p",la,e(a(s)("dashboard.platformQuota.title")),1),(l(),u(D,null,J(["daily","weekly","monthly"],k=>(l(),u(D,{key:k},[n(_.quota,`${k}_limit_usd`)!=null?(l(),u("div",ia,[n(_.quota,`${k}_limit_usd`)===0?(l(),u(D,{key:0},[t("div",ca,[t("span",ua,e(a(s)(`dashboard.platformQuota.${k}`)),1),t("span",ga,e(a(s)("dashboard.platformQuota.disabled")),1)]),c[3]||(c[3]=t("div",{class:"h-1.5 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-700"},[t("div",{class:"h-full w-full rounded-full bg-red-500"})],-1))],64)):(l(),u(D,{key:1},[t("div",ma,[t("span",ha,e(a(s)(`dashboard.platformQuota.${k}`)),1),t("span",_a," $"+e(C(n(_.quota,`${k}_usage_usd`)??0))+" / $"+e(C(n(_.quota,`${k}_limit_usd`))),1)]),t("div",xa,[t("div",{class:it(["h-full rounded-full transition-all",L(j(n(_.quota,`${k}_usage_usd`)??0,n(_.quota,`${k}_limit_usd`)))]),style:ft({width:j(n(_.quota,`${k}_usage_usd`)??0,n(_.quota,`${k}_limit_usd`))+"%"})},null,6)]),n(_.quota,`${k}_window_resets_at`)?(l(),u("p",pa,e(a(s)("dashboard.platformQuota.resetsAt",{time:T(n(_.quota,`${k}_window_resets_at`))})),1)):R("",!0)],64))])):R("",!0)],64))),64))])):R("",!0)],10,Ke))),128))])])):R("",!0)],64)}}}),ya={class:"space-y-6"},ka={class:"card p-4"},ba={class:"flex flex-wrap items-center gap-4"},va={class:"flex items-center gap-2"},$a={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},wa=["disabled"],Da={class:"ml-auto flex items-center gap-2"},Ca={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Sa={class:"w-28"},za={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},Ra={class:"card relative overflow-hidden p-4"},Aa={key:0,class:"absolute inset-0 z-10 flex items-center justify-center bg-white/50 backdrop-blur-sm dark:bg-dark-800/50"},qa={class:"mb-4 text-sm font-semibold text-gray-900 dark:text-white"},Fa={class:"flex flex-col items-center gap-4 sm:flex-row sm:gap-6"},Ma={class:"h-48 w-48 shrink-0"},Ua={key:1,class:"flex h-full items-center justify-center text-sm text-gray-500 dark:text-gray-400"},ja={class:"max-h-48 w-full min-w-0 flex-1 overflow-auto"},La={class:"w-full text-xs"},Ta={class:"text-gray-500 dark:text-gray-400"},Ba={class:"pb-2 text-left"},Oa={class:"pb-2 text-right"},Na={class:"pb-2 text-right"},Pa={class:"pb-2 text-right"},Qa={class:"pb-2 text-right"},Va=["title"],Ia={class:"py-1.5 text-right text-gray-600 dark:text-gray-400"},Ea={class:"py-1.5 text-right text-gray-600 dark:text-gray-400"},Ha={class:"py-1.5 text-right text-green-600 dark:text-green-400"},Ka={class:"py-1.5 text-right text-gray-400 dark:text-gray-500"},Ga=V({__name:"UserDashboardCharts",props:{loading:{type:Boolean},startDate:{},endDate:{},granularity:{},trend:{},models:{}},emits:["update:startDate","update:endDate","update:granularity","dateRangeChange","granularityChange","refresh"],setup(r){Dt.register(Ct,St,zt,Rt,At,qt,Ft,Mt,Ut);const g=r,{t:s}=X(),f=W(()=>{var h;
1return(h=g.models)!=null&&h.length?{labels:g.models.map(d=>d.model),datasets:[{data:g.models.map(d=>d.total_tokens),backgroundColor:["#3b82f6","#10b981","#f59e0b","#ef4444","#8b5cf6","#ec4899","#06b6d4","#84cc16"]}]}:null}),$={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{callbacks:{label:h=>`${h.label}: ${dt(h.parsed)} tokens`}}}};return(h,d)=>(l(),u("div",ya,[t("div",ka,[t("div",ba,[t("div",va,[t("span",$a,e(a(s)("dashboard.timeRange"))+":",1),i(vt,{"start-date":r.startDate,"end-date":r.endDate,"onUpdate:startDate":d[0]||(d[0]=n=>h.$emit("update:startDate",n)),"onUpdate:endDate":d[1]||(d[1]=n=>h.$emit("update:endDate",n)),onChange:d[2]||(d[2]=n=>h.$emit("dateRangeChange",n))},null,8,["start-date","end-date"])]),t("button",{onClick:d[3]||(d[3]=n=>h.$emit("refresh")),disabled:r.loading,class:"btn btn-secondary"},e(a(s)("common.refresh")),9,wa),t("div",Da,[t("span",Ca,e(a(s)("dashboard.granularity"))+":",1),t("div",Sa,[i(wt,{"model-value":r.granularity,options:[{value:"day",label:a(s)("dashboard.day")},{value:"hour",label:a(s)("dashboard.hour")}],"onUpdate:modelValue":d[4]||(d[4]=n=>
1h.$emit("update:granularity",n)),onChange:d[5]||(d[5]=n=>h.$emit("granularityChange"))},null,8,["model-value","options"])])])])]),t("div",za,[t("div",Ra,[r.loading?(l(),u("div",Aa,[i(tt,{size:"md"})])):R("",!0),t("h3",qa,e(a(s)("dashboard.modelDistribution")),1),t("div",Fa,[t("div",Ma,[f.value?(l(),ut(a(jt),{key:0,data:f.value,options:$},null,8,["data"])):(l(),u("div",Ua,e(a(s)("dashboard.noDataAvailable")),1))]),t("div",ja,[t("table",La,[t("thead",null,[t("tr",Ta,[t("th",Ba,e(a(s)("dashboard.model")),1),t("th",Oa,e(a(s)("dashboard.requests")),1),t("th",Na,e(a(s)("dashboard.tokens")),1),t("th",Pa,e(a(s)("dashboard.actual")),1),t("th",Qa,e(a(s)("dashboard.standard")),1)])]),t("tbody",null,[(l(!0),u(D,null,J(r.models,n=>(l(),u("tr",{key:n.model,class:"border-t border-gray-100 dark:border-dark-700"},[t("td",{class:"max-w-[100px] truncate py-1.5 font-medium text-gray-900 dark:text-white",title:n.model},e(n.model),9,Va),t("td",Ia,e(a(ht)(n.requests)),1),t("td",Ea,e(a(dt)(n.total_tokens)),1),t("td",Ha,"$"+e(a(nt)(n.actual_cost)),1),t("td",Ka,"$"+e(a(nt)(n.cost)),1)]))),128))])])])])]),i($t,{"trend-data":r.trend,loading:r.loading},null,8,["trend-data","loading"])])]))}}),Za={class:"card"},Wa={class:"flex items-center justify-between border-b border-gray-100 px-6 py-4 dark:border-dark-700"},Ja={class:"text-lg font-semibold text-gray-900 dark:text-white"},Xa={class:"badge badge-gray"},Ya={class:"p-6"},ts={key:0,class:"flex items-center justify-center py-12"},es={key:1,class:"py-8"},as={key:2,class:"space-y-3"},ss={class:"flex items-center gap-4"},os={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-primary-100 dark:bg-primary-900/30"},rs={class:"text-sm font-medium text-gray-900 dark:text-white"},ds={class:"text-xs text-gray-500 dark:text-dark-400"},ns={class:"text-right"},ls={class:"text-sm font-semibold"},is=["title"],cs=["title"],us={class:"text-xs text-gray-500 dark:text-dark-400"},gs=V({__name:"UserDashboardRecentUsage",props:{data:{},loading:{type:Boolean}},setup(r){const{t:g}=X(),s=f=>f.toFixed(4);return(f,$)=>{const h=yt("router-link");return l(),u("div",Za,[t("div",Wa,[t("h2",Ja,e(a(g)("dashboard.recentUsage")),1),t("span",Xa,e(a(g)("dashboard.last7Days")),1)]),t("div",Ya,[r.loading?(l(),u("div",ts,[i(tt,{size:"lg"})])):r.data.length===0?(l(),u("div",es,[i(Lt,{title:a(g)("dashboard.noUsageRecords"),description:a(g)("dashboard.startUsingApi")},null,8,["title","description"])])):(l(),u("div",as,[(l(!0),u(D,null,J(r.data,d=>(l(),u("div",{key:d.id,class:"flex items-center justify-between rounded-xl bg-gray-50 p-4 transition-colors hover:bg-gray-100 dark:bg-dark-800/50 dark:hover:bg-dark-800"},[t("div",ss,[t("div",os,[i(p,{name:"beaker",size:"md",class:"text-primary-600 dark:text-primary-400"})]),t("div",null,[t("p",rs,e(d.model),1),t("p",ds,e(a(_t)(d.created_at)),1)])]),t("div",ns,[t("p",ls,[t("span",{class:"text-green-600 dark:text-green-400",title:a(g)("dashboard.actual")},"$"+e(s(d.actual_cost)),9,is),t("span",{class:"font-normal text-gray-400 dark:text-gray-500",title:a(g)("dashboard.standard")}," / $"+e(s(d.total_cost)),9,cs)]),t("p",us,e((d.input_tokens+d.output_tokens).toLocaleString())+" tokens",1)])]))),128)),i(h,{to:"/usage",class:"flex items-center justify-center gap-2 py-3 text-sm font-medium text-primary-600 transition-colors hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300"},{default:gt(()=>[kt(e(a(g)("dashboard.viewAllUsage"))+" ",1),i(p,{name:"arrowRight",size:"sm"})]),_:1})]))])])}}}),ms={class:"card"},hs={class:"border-b border-gray-100 px-6 py-4 dark:border-dark-700"},_s={class:"text-lg font-semibold text-gray-900 dark:text-white"},xs={class:"space-y-3 p-4"},ps={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-primary-100 transition-transform group-hover:scale-105 dark:bg-primary-900/30"},fs={class:"min-w-0 flex-1"},ys={class:"text-sm font-medium text-gray-900 dark:text-white"},ks={class:"text-xs text-gray-500 dark:text-dark-400"},bs={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-emerald-100 transition-transform group-hover:scale-105 dark:bg-emerald-900/30"},vs={class:"min-w-0 flex-1"},$s={class:"text-sm font-medium text-gray-900 dark:text-white"},ws={class:"text-xs text-gray-500 dark:text-dark-400"},Ds={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-sky-100 transition-transform group-hover:scale-105 dark:bg-sky-900/30"},Cs={class:"min-w-0 flex-1"},Ss={class:"text-sm font-medium text-gray-900 dark:text-white"},zs={class:"text-xs text-gray-500 dark:text-dark-400"},Rs={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-amber-100 transition-transform group-hover:scale-105 dark:bg-amber-900/30"},As={class:"min-w-0 flex-1"},qs={class:"text-sm font-medium text-gray-900 dark:text-white"},Fs={class:"text-xs text-gray-500 dark:text-dark-400"},Ms=V({__name:"UserDashboardQuickActions",setup(r){const g=bt(),{t:s}=X(),{canUseBatchImage:f,refreshBatchImageAccess:$}=Tt();return mt(()=>{$()}),(h,d)=>(l(),u("div",ms,[t("div",hs,[t("h2",_s,e(a(s)("dashboard.quickActions")),1)]),t("div",xs,[t("button",{onClick:d[0]||(d[0]=n=>a(g).push("/keys")),class:"group flex w-full items-center gap-4 roun
1ded-xl bg-gray-50 p-4 text-left transition-all duration-200 hover:bg-gray-100 dark:bg-dark-800/50 dark:hover:bg-dark-800"},[t("div",ps,[i(p,{name:"key",size:"lg",class:"text-primary-600 dark:text-primary-400"})]),t("div",fs,[t("p",ys,e(a(s)("dashboard.createApiKey")),1),t("p",ks,e(a(s)("dashboard.generateNewKey")),1)]),i(p,{name:"chevronRight",size:"md",class:"text-gray-400 transition-colors group-hover:text-primary-500 dark:text-dark-500"})]),t("button",{onClick:d[1]||(d[1]=n=>a(g).push("/usage")),class:"group flex w-full items-center gap-4 rounded-xl bg-gray-50 p-4 text-left transition-all duration-200 hover:bg-gray-100 dark:bg-dark-800/50 dark:hover:bg-dark-800"},[t("div",bs,[i(p,{name:"chart",size:"lg",class:"text-emerald-600 dark:text-emerald-400"})]),t("div",vs,[t("p",$s,e(a(s)("dashboard.viewUsage")),1),t("p",ws,e(a(s)("dashboard.checkDetailedLogs")),1)]),i(p,{name:"chevronRight",size:"md",class:"text-gray-400 transition-colors group-hover:text-emerald-500 dark:text-dark-500"})]),a(f)?(l(),u("button",{key:0,onClick:d[2]||(d[2]=n=>a(g).push("/batch-image")),class:"group flex w-full items-center gap-4 roun
1ded-xl bg-gray-50 p-4 text-left transition-all duration-200 hover:bg-gray-100 dark:bg-dark-800/50 dark:hover:bg-dark-800"},[t("div",Ds,[i(p,{name:"sparkles",size:"lg",class:"text-sky-600 dark:text-sky-400"})]),t("div",Cs,[t("p",Ss,e(a(s)("dashboard.batchImageAgent")),1),t("p",zs,e(a(s)("dashboard.batchImageAgentDesc")),1)]),i(p,{name:"chevronRight",size:"md",class:"text-gray-400 transition-colors group-hover:text-sky-500 dark:text-dark-500"})])):R("",!0),t("button",{onClick:d[3]||(d[3]=n=>a(g).push("/redeem")),class:"group flex w-full items-center gap-4 rounded-xl bg-gray-50 p-4 text-left transition-all duration-200 hover:bg-gray-100 dark:bg-dark-800/50 dark:hover:bg-dark-800"},[t("div",Rs,[i(p,{name:"gift",size:"lg",class:"text-amber-600 dark:text-amber-400"})]),t("div",As,[t("p",qs,e(a(s)("dashboard.redeemCode")),1),t("p",Fs,e(a(s)("dashboard.addBalanceWithCode")),1)]),i(p,{name:"chevronRight",size:"md",class:"text-gray-400 transition-colors group-hover:text-amber-500 dark:text-dark-500"})])])]))}}),Us={class:"space-y-6"},js={key:0,class:"flex items-center justify-center py-12"},Ls={class:"grid grid-cols-1 gap-6 lg:grid-cols-3"},Ts={class:"lg:col-span-2"},Bs={class:"lg:col-span-1"},eo=V({__name:"DashboardView",setup(r){const g=xt(),s=W(()=>g.user),f=v(null),$=v(!1),h=v(!1),d=v(!1),n=v([]),U=v([]),j=v([]),L=v(null),A=v(lt(new Date(Date.now()-6*864e5))),C=v(lt(new Date)),T=v("day"),Y=async()=>{$.value=!0;try{await g.refreshUser(),f.value=await Z.getDashboardStats()}catch(o){console.error("Failed to load dashboard stats:",o)}finally{$.value=!1}},q=async()=>{d.value=!0;try{const o=await Promise.all([Z.getDashboardTrend({start_date:A.value,end_date:C.value,granularity:T.value}),Z.getDashboardModels({start_date:A.value,end_date:C.value})]);n.value=o[0].trend||[],U.value=o[1].models||[]}catch(o){console.error("Failed to load charts:",o)}finally{d.value=!1}},S=async()=>{h.value=!0;try{const o=await Z.getByDateRange(A.value,C.value);j.value=o.items.slice(0,5)}catch(o){console.error("Failed to load recent usage:",o)}finally{h.value=!1}},y=async()=>{try{const o=await Bt();L.value=o.platform_quotas??[]}catch(o){console.warn("Failed to load platform quotas:",o),L.value=[]}},I=()=>{Y(),q(),S(),y()};return mt(()=>{I()}),(o,c)=>(l(),ut(pt,null,{default:gt(()=>{var z;return[t("div",Us,[$.value?(l(),u("div",js,[i(tt)])):f.value?(l(),u(D,{key:1},[i(fa,{stats:f.value,balance:((z=s.value)==null?void 0:z.balance)||0,"is-simple":a(g).isSimpleMode,"platform-quotas":L.value},null,8,["stats","balance","is-simple","platform-quotas"]),i(Ga,{startDate:A.value,"onUpdate:startDate":c[0]||(c[0]=b=>A.value=b),endDate:C.value,"onUpdate:endDate":c[1]||(c[1]=b=>C.value=b),granularity:T.value,"onUpdate:granularity":c[2]||(c[2]=b=>T.value=b),loading:d.value,trend:n.value,models:U.value,onDateRangeChange:q,onGranularityChange:q,onRefresh:I},null,8,["startDate","endDate","granularity","loading","trend","models"]),t("div",Ls,[t("div",Ts,[i(gs,{data:j.value,loading:h.value},null,8,["data","loading"])]),t("div",Bs,[i(Ms)])])],64)):R("",!0)])]}),_:1}))}});export{eo 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.