usage-board 4.0.1 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +1 -1
- package/dist/public/_nuxt/BILXBbDI.js +21 -0
- package/dist/public/_nuxt/{DF2WsXH3.js → BJWBp9U3.js} +1 -1
- package/dist/public/_nuxt/{DXWxIyGU.js → BOTUKIyR.js} +1 -1
- package/dist/public/_nuxt/{De8DvPWL.js → BVD8FQXV.js} +1 -1
- package/dist/public/_nuxt/BXbx6JCB.js +1 -0
- package/dist/public/_nuxt/BfVC-jX7.js +1 -0
- package/dist/public/_nuxt/BhIINiyq.js +146 -0
- package/dist/public/_nuxt/CJECfsOP.js +1 -0
- package/dist/public/_nuxt/{D7qEPtpx.js → CJv0IWZB.js} +1 -1
- package/dist/public/_nuxt/{DKaPq50Z.js → CXOkrwUP.js} +2 -2
- package/dist/public/_nuxt/DFbWcbwl.js +261 -0
- package/dist/public/_nuxt/{C0GhHHgI.js → DaoeXHW_.js} +2 -2
- package/dist/public/_nuxt/DjeKkZG3.js +25 -0
- package/dist/public/_nuxt/builds/latest.json +1 -1
- package/dist/public/_nuxt/builds/meta/80f1a776-82e2-4b5c-9c07-a61063a0dd84.json +1 -0
- package/dist/public/_nuxt/{Jp5cgQZi.js → nv0LjcWu.js} +2 -2
- package/dist/public/_nuxt/{37OOe3RF.js → tDg_nW46.js} +1 -1
- package/dist/server/chunks/build/client.precomputed.mjs +1 -1
- package/dist/server/chunks/nitro/nitro.mjs +507 -318
- package/dist/server/chunks/routes/api/analysis/agent/session.json.mjs +16 -2
- package/dist/server/chunks/routes/api/analysis/agent/token.json.mjs +2 -2
- package/dist/server/chunks/routes/api/analysis/cache.json.mjs +1 -1
- package/dist/server/chunks/routes/api/analysis/hot-project.json.mjs +4 -3
- package/dist/server/chunks/routes/api/analysis/model.json.mjs +1 -1
- package/dist/server/chunks/routes/api/analysis/overview-cards.json.mjs +1 -1
- package/dist/server/chunks/routes/api/analysis/session.json.mjs +1 -1
- package/dist/server/chunks/routes/api/analysis/token/daily.json.mjs +13 -2
- package/dist/server/chunks/routes/api/analysis/token/today-hourly.json.mjs +1 -1
- package/dist/server/chunks/routes/api/analysis/token.json.mjs +1 -1
- package/dist/server/chunks/routes/api/payload.json.mjs +1 -1
- package/dist/server/chunks/routes/api/projects/_project/modules.get.mjs +1 -1
- package/dist/server/chunks/routes/api/projects/catalog.get.mjs +1 -1
- package/dist/server/chunks/routes/renderer.mjs +1 -1
- package/dist/server/chunks/routes/ws.mjs +13 -1
- package/dist/server/index.mjs +1 -1
- package/dist/server/package.json +1 -1
- package/package.json +1 -1
- package/dist/public/_nuxt/65Ayv2XK.js +0 -146
- package/dist/public/_nuxt/BOWwkrCY.js +0 -25
- package/dist/public/_nuxt/D9-Yw1TR.js +0 -1
- package/dist/public/_nuxt/DgMMKsPE.js +0 -258
- package/dist/public/_nuxt/DxvuOJRP.js +0 -1
- package/dist/public/_nuxt/builds/meta/34b12f78-e5b7-490f-99ba-b4a8ab41b914.json +0 -1
- package/dist/public/_nuxt/qXgLTL_3.js +0 -21
- package/dist/public/_nuxt/y6mAKUDU.js +0 -1
package/dist/index.mjs
CHANGED
|
@@ -539,7 +539,7 @@ defineLazyProperty(apps, "safari", () => detectPlatformBinary({ darwin: "Safari"
|
|
|
539
539
|
//#endregion
|
|
540
540
|
//#region package.json
|
|
541
541
|
var name = "usage-board";
|
|
542
|
-
var version = "4.0.
|
|
542
|
+
var version = "4.0.2";
|
|
543
543
|
//#endregion
|
|
544
544
|
//#region src/index.ts
|
|
545
545
|
const cli = cac(name);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{e as B,f as We,r as He,o as i,g as h,w,h as Se,i as e,j as rt,k as it,l as se,m as ct,n as ut,p as dt,v as pt,c as _,q as oe,s as Z,x as Ue,y as mt,z as gt,A as ft,B as ht,C as _t,a as f,b as x,D as Re,t as E,F as ce,E as ue,G as m,H as Ye,I as Me,P as we,J as fe,K as vt,L as bt,M as Ne,N as yt,O as xt,Q as $e,d as kt}from"./nv0LjcWu.js";import{P as Xe,c as Tt,_ as wt}from"./DaoeXHW_.js";import{_ as Je}from"./CXOkrwUP.js";import{c as St}from"./tDg_nW46.js";import{S as jt,C as Pt,a as qe,z as Dt,A as Ct,_ as Rt,f as J,e as Be,c as Ve,u as Qe,b as Ze,D as de,d as $,g as Q,h as It,i as Ke,j as $t,k as Lt,l as Mt,m as et,n as tt,o as Ut,p as At,q as Ot,r as Et,s as zt,t as Nt,v as qt}from"./DFbWcbwl.js";import{_ as Bt,a as Vt,b as Kt,c as Gt,d as Ft}from"./BXbx6JCB.js";import"./BJWBp9U3.js";const[Wt,Ht]=rt("AvatarRoot");var Yt=B({__name:"AvatarRoot",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(o){return We(),Ht({imageLoadingStatus:He("idle")}),(t,n)=>(i(),h(e(Xe),{"as-child":t.asChild,as:t.as},{default:w(()=>[Se(t.$slots,"default")]),_:3},8,["as-child","as"]))}}),Xt=Yt,Jt=B({__name:"AvatarFallback",props:{delayMs:{type:Number,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(o){const t=o,n=Wt();We();const u=He(t.delayMs===void 0);return it(p=>{if(t.delayMs&&ct){const S=window.setTimeout(()=>{u.value=!0},t.delayMs);p(()=>{window.clearTimeout(S)})}}),(p,S)=>u.value&&e(n).imageLoadingStatus.value!=="loaded"?(i(),h(e(Xe),{key:0,"as-child":p.asChild,as:p.as},{default:w(()=>[Se(p.$slots,"default")]),_:3},8,["as-child","as"])):se("v-if",!0)}}),Qt=Jt;const Zt=St("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]),es=B({__name:"Input",props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:["update:modelValue"],setup(o,{emit:t}){const n=o,p=ut(n,"modelValue",t,{passive:!0,defaultValue:n.defaultValue});return(S,b)=>dt((i(),_("input",{"onUpdate:modelValue":b[0]||(b[0]=g=>Ue(p)?p.value=g:null),"data-slot":"input",class:oe(e(Z)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",n.class))},null,2)),[[pt,e(p)]])}}),ts=B({__name:"InputGroup",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(o){const t=o;return(n,u)=>(i(),_("div",{"data-slot":"input-group",role:"group",class:oe(e(Z)("group/input-group border-input dark:bg-input/30 relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none","h-9 min-w-0 has-[>textarea]:h-auto","has-[>[data-align=inline-start]]:[&>input]:pl-2","has-[>[data-align=inline-end]]:[&>input]:pr-2","has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3","has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3","has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]","has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",t.class))},[Se(n.$slots,"default")],2))}}),ss=["data-align"],os=B({__name:"InputGroupAddon",props:{align:{default:"inline-start"},class:{type:[Boolean,null,String,Object,Array]}},setup(o){const t=o;function n(u){const p=u.currentTarget,S=u.target;S&&S.closest("button")||p&&p?.parentElement&&p.parentElement?.querySelector("input")?.focus()}return(u,p)=>(i(),_("div",{role:"group","data-slot":"input-group-addon","data-align":t.align,class:oe(e(Z)(e(ns)({align:t.align}),t.class)),onClick:n},[Se(u.$slots,"default")],10,ss))}}),as=B({__name:"InputGroupInput",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(o){const t=o;return(n,u)=>(i(),h(e(es),{"data-slot":"input-group-control",class:oe(e(Z)("flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",t.class))},null,8,["class"]))}}),ns=Tt("text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50",{variants:{align:{"inline-start":"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]","inline-end":"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]","block-start":"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5","block-end":"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5"}},defaultVariants:{align:"inline-start"}}),ls=B({__name:"Avatar",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(o){const t=o;return(n,u)=>(i(),h(e(Xt),{"data-slot":"avatar",class:oe(e(Z)("relative flex size-8 shrink-0 overflow-hidden rounded-full",t.class))},{default:w(()=>[Se(n.$slots,"default")]),_:3},8,["class"]))}}),rs=B({__name:"AvatarFallback",props:{delayMs:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(o){const t=o,n=mt(t,"class");return(u,p)=>(i(),h(e(Qt),gt({"data-slot":"avatar-fallback"},e(n),{class:e(Z)("bg-muted flex size-full items-center justify-center rounded-full",t.class)}),{default:w(()=>[Se(u.$slots,"default")]),_:3},16,["class"]))}}),is=B({__name:"Spinner",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(o){const t=o;return(n,u)=>(i(),h(e(Zt),{role:"status","aria-label":"Loading",class:oe(e(Z)("size-4 animate-spin",t.class))},null,8,["class"]))}}),cs={class:"space-y-4"},us={key:0,class:"pointer-events-none absolute inset-0 z-10"},ds={class:"flex flex-wrap items-center justify-center gap-3 text-xs text-muted-foreground"},ps={class:"max-w-40 truncate",translate:"no"},ms={class:"font-medium text-foreground tabular-nums"},gs=.24,fs="#94a3b8",hs=288,_s=B({__name:"ProjectLineChart",props:{series:{},tooltipLabels:{},tickIndexes:{},xLabels:{}},setup(o){const t=o,n={bottom:32,left:56,right:28,top:8},u={left:8,right:18},p=[0,void 0],S=ft({selector:"html",attribute:"class",storageKey:"app-color-mode"}),b=new Intl.DateTimeFormat("en-US",{day:"numeric",month:"short"}),g=new Intl.DateTimeFormat("en-US",{month:"short"}),j=ht("chartRoot"),{width:P}=_t(j),L=Ye({datumIndex:null,pointerY:null}),V=m(()=>t.xLabels.map((l,d)=>({index:d,label:t.tooltipLabels?.[d]??l,values:Object.fromEntries(t.series.map(c=>[c.label,c.points[d]??0]))}))),D=m(()=>t.xLabels.map((l,d)=>Ce(l,d,t.xLabels.length))),M=m(()=>t.series.map(l=>({...l,color:O(l.color),total:l.points.reduce((d,c)=>d+c,0)})).sort((l,d)=>d.total-l.total)),Y=m(()=>M.value.map(l=>d=>d.values[l.label]??0)),he=m(()=>Object.fromEntries(M.value.map(l=>[l.label,{color:l.color,label:l.label}]))),_e=m(()=>M.value.map(l=>`
|
|
2
|
+
<linearGradient id="${xe(l.label)}" x1="0" y1="0" x2="0" y2="1">
|
|
3
|
+
<stop offset="0%" stop-color="${l.color}" stop-opacity="0.42" />
|
|
4
|
+
<stop offset="100%" stop-color="${l.color}" stop-opacity="0.07" />
|
|
5
|
+
</linearGradient>
|
|
6
|
+
`).join("")),k=m(()=>V.value.length>0&&M.value.length>0),ae=m(()=>[0,Math.max(t.xLabels.length-1,0)]),R=m(()=>n.left),G=m(()=>n.top),ee=m(()=>Math.max(P.value-n.left-n.right,0)),X=m(()=>Math.max(hs-n.top-n.bottom,0)),ne=m(()=>G.value+X.value),F=m(()=>Math.max(ee.value-u.left-u.right,0)),ve=m(()=>Math.max(...V.value.map(l=>Object.values(l.values).reduce((d,c)=>d+c,0)),0)),K=m(()=>{if(L.datumIndex===null||L.pointerY===null)return null;const l=V.value[L.datumIndex];if(!l||ee.value<=0||X.value<=0)return null;const d=t.xLabels.length<=1?0:L.datumIndex/(t.xLabels.length-1),c=R.value+u.left+d*F.value,y=Ve(L.pointerY,G.value,ne.value),N=(X.value<=0?0:1-(y-G.value)/X.value)*ve.value;return{x:c,xLabel:l.label,y,yLabel:J(N)}}),be=m(()=>{if(t.tickIndexes&&t.tickIndexes.length>0)return t.tickIndexes;const l=t.xLabels.length,d=l>12?5:1;return t.xLabels.map((c,y)=>y).filter(c=>c===0||c===l-1||c%d===0)});function pe(l){return l?.index??0}function A(l,d){const c=M.value[d];return c?`url(#${xe(c.label)})`:"#2563eb"}function C(l,d){return M.value[d]?.color??"#2563eb"}function z(l,d){return M.value[d]?.color??"#2563eb"}function W(l){return l instanceof Date?"":D.value[l]??""}function je(l){return l instanceof Date?"":J(l)}function Pe(l){if(!l)return"";const d=M.value.map(c=>({...c,value:l.values[c.label]??0})).sort((c,y)=>y.value-c.value);return`
|
|
7
|
+
<div class="grid min-w-48 gap-2 rounded-md border bg-background px-3 py-2 text-xs shadow-lg">
|
|
8
|
+
<div class="font-medium text-foreground">${Be(l.label)}</div>
|
|
9
|
+
<div class="grid gap-1 text-muted-foreground">
|
|
10
|
+
${d.map(c=>`
|
|
11
|
+
<div class="flex items-center justify-between gap-4">
|
|
12
|
+
<span class="flex min-w-0 items-center gap-2">
|
|
13
|
+
<span class="size-2 shrink-0 rounded-sm" style="background-color: ${c.color}"></span>
|
|
14
|
+
<span class="truncate">${Be(c.label)}</span>
|
|
15
|
+
</span>
|
|
16
|
+
<span class="font-mono font-medium text-foreground">${J(c.value)}</span>
|
|
17
|
+
</div>
|
|
18
|
+
`).join("")}
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
`}function De(l){const d=j.value?.getBoundingClientRect();if(!d)return;const c=l.clientX-d.left,y=l.clientY-d.top,H=R.value+ee.value,N=R.value+u.left,re=H-u.right;if(c<R.value||c>H||y<G.value||y>ne.value||F.value<=0||t.xLabels.length===0){ye();return}const te=Ve((c-N)/Math.max(re-N,1),0,1),U=t.xLabels.length<=1?0:Math.round(te*(t.xLabels.length-1));L.datumIndex=U,L.pointerY=y}function ye(){L.datumIndex=null,L.pointerY=null}function Ce(l,d,c){const y=new Date(l);if(Number.isNaN(y.getTime()))return l;const H=d===0||d===c-1;return c>=90&&!H&&y.getDate()===1?g.format(y):b.format(y)}function xe(l){return`project-line-${l.replace(/[^a-z0-9]+/gi,"-").toLowerCase()}`}function O(l){if(S.value!=="dark")return l;const d=le(l);return d!==null&&d<gs?fs:l}function le(l){const d=l.trim().replace(/^#/,""),c=d.length===3?d.split("").map(ge=>`${ge}${ge}`).join(""):d;if(!/^[\da-f]{6}$/i.test(c))return null;const y=Number.parseInt(c.slice(0,2),16)/255,H=Number.parseInt(c.slice(2,4),16)/255,N=Number.parseInt(c.slice(4,6),16)/255,re=me(y),te=me(H),U=me(N);return .2126*re+.7152*te+.0722*U}function me(l){return l<=.03928?l/12.92:((l+.055)/1.055)**2.4}return(l,d)=>{const c=Rt;return i(),_("div",cs,[f("div",{ref_key:"chartRoot",ref:j,class:"relative",onPointerleave:ye,onPointermove:De},[x(c,{class:"h-72 w-full",config:e(he)},{default:w(()=>[x(e(jt),{"auto-margin":!1,data:e(V),height:288,margin:n,padding:u,"svg-defs":e(_e),"x-domain":e(ae),"y-domain":p},{default:w(()=>[x(e(Pt),{color:A,"curve-type":"monotoneX",line:!0,"line-color":C,"line-width":2,opacity:.82,x:pe,y:e(Y)},null,8,["y"]),x(e(qe),{"grid-line":!1,"tick-format":W,"tick-padding":10,"tick-text-hide-overlapping":!0,"tick-text-width":56,"tick-values":e(be),type:"x"},null,8,["tick-values"]),x(e(qe),{"num-ticks":4,"tick-format":je,type:"y"}),e(k)?(i(),h(e(Dt),{key:0})):se("",!0),e(k)?(i(),h(e(Ct),{key:1,color:z,template:Pe,x:pe,"y-stacked":e(Y)},null,8,["y-stacked"])):se("",!0)]),_:1},8,["data","svg-defs","x-domain"])]),_:1},8,["config"]),e(K)?(i(),_("div",us,[f("div",{class:"absolute border-l border-dashed border-border/80",style:Re({height:`${e(X)}px`,left:`${e(K).x}px`,top:`${e(G)}px`})},null,4),f("div",{class:"absolute border-t border-dashed border-border/80",style:Re({left:`${e(R)}px`,top:`${e(K).y}px`,width:`${e(ee)}px`})},null,4),f("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:Re({left:`${e(K).x}px`,top:`${e(ne)+6}px`,transform:"translateX(-50%)"})},E(e(K).xLabel),5),f("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:Re({left:`${Math.max(e(R)-8,0)}px`,top:`${e(K).y}px`,transform:"translate(-100%, -50%)"})},E(e(K).yLabel),5)])):se("",!0)],544),f("div",ds,[(i(!0),_(ce,null,ue(e(M),y=>(i(),_("div",{key:y.label,class:"flex items-center gap-2"},[f("span",{class:"size-2.5 rounded-sm",style:Re({backgroundColor:y.color})},null,4),f("span",ps,E(y.label),1),f("span",ms,E(e(J)(y.total)),1)]))),128))])])}}}),vs=Object.assign(_s,{__name:"DashboardProjectLineChart"}),bs={key:0,class:"mb-3 text-xs text-destructive"},ys=B({__name:"ProjectSessionTable",props:{fetchPage:{},items:{},pagination:{}},setup(o){const t=o,n=m(()=>({items:t.items,pagination:t.pagination??{page:1,pageCount:Math.max(1,Math.ceil(t.items.length/de)),pageSize:de,total:t.items.length}})),{error:u,pageData:p,setPage:S}=Qe(n,t.fetchPage),b=[{accessorKey:"sessionId",cell:({row:g})=>g.original.sessionId,header:"Session ID",meta:{class:"max-w-72 truncate font-medium font-mono text-xs"}},{accessorKey:"platform",cell:({row:g})=>Me("div",{class:"flex items-center gap-2"},[Me(Je,{class:"size-5",name:we[g.original.platform].aiIcon}),Me("span",we[g.original.platform].label)]),header:"Tool"},{accessorKey:"model",header:"Model",meta:{class:"max-w-56 truncate"}},{accessorKey:"startedAt",header:"Started",meta:{class:"whitespace-nowrap"}},{accessorKey:"duration",header:"Duration",meta:{class:"text-right tabular-nums"}},{accessorKey:"inputTokens",header:"Input",meta:{class:"text-right tabular-nums"}},{accessorKey:"outputTokens",header:"Output",meta:{class:"text-right tabular-nums"}},{accessorKey:"reasoningTokens",header:"Reasoning",meta:{class:"text-right tabular-nums"}},{accessorKey:"cacheTokens",header:"Cache Read",meta:{class:"text-right tabular-nums"}},{accessorKey:"tokens",header:"Tokens",meta:{class:"text-right tabular-nums"}},{accessorKey:"cost",header:"Cost",meta:{class:"text-right tabular-nums"}}];return(g,j)=>{const P=Ze;return i(),_("div",null,[e(u)?(i(),_("p",bs,E(e(u).message),1)):se("",!0),x(P,{columns:b,data:e(p).items,"empty-text":"No sessions found.",pagination:e(p).pagination,onPageChange:e(S)},null,8,["data","pagination","onPageChange"])])}}}),xs=Object.assign(ys,{__name:"DashboardProjectSessionTable"}),ks={key:0,class:"mb-3 text-xs text-destructive"},Ts=B({__name:"ProjectTokenUsageTable",props:{fetchPage:{},items:{},pagination:{}},setup(o){const t=o,n=m(()=>({items:t.items,pagination:t.pagination??{page:1,pageCount:Math.max(1,Math.ceil(t.items.length/de)),pageSize:de,total:t.items.length}})),{error:u,pageData:p,setPage:S}=Qe(n,t.fetchPage),b=[{accessorKey:"label",header:"Period",meta:{class:"max-w-72 truncate font-medium"}},{accessorKey:"models",header:"Models",meta:{class:"max-w-56 truncate"}},{accessorKey:"sessions",header:"Sessions",meta:{class:"text-right tabular-nums"}},{accessorKey:"inputTokens",header:"Input",meta:{class:"text-right tabular-nums"}},{accessorKey:"outputTokens",header:"Output",meta:{class:"text-right tabular-nums"}},{accessorKey:"reasoningTokens",header:"Reasoning",meta:{class:"text-right tabular-nums"}},{accessorKey:"cacheTokens",header:"Cache Read",meta:{class:"text-right tabular-nums"}},{accessorKey:"tokens",header:"Total Tokens",meta:{class:"text-right tabular-nums"}},{accessorKey:"cost",header:"Cost",meta:{class:"text-right tabular-nums"}}];return(g,j)=>{const P=Ze;return i(),_("div",null,[e(u)?(i(),_("p",ks,E(e(u).message),1)):se("",!0),x(P,{columns:b,data:e(p).items,"empty-text":"No token usage found.",pagination:e(p).pagination,onPageChange:e(S)},null,8,["data","pagination","onPageChange"])])}}}),ws=Object.assign(Ts,{__name:"DashboardProjectTokenUsageTable"}),ie=["daily_trend","model_usage","session_list","token_usage"],Ge=["#2563eb","#f97316","#0891b2","#7c3aed","#16a34a","#dc2626","#64748b"];function Ae(o){const t=new Date;return Array.from({length:o},(n,u)=>{const p=new Date(t);return p.setHours(0,0,0,0),p.setDate(t.getDate()-(o-1-u)),et(tt(p))})}function Ss(o){return o.map((t,n)=>({date:new Date(t),index:n})).filter(({date:t,index:n})=>n===0||n===o.length-1?!0:Number.isFinite(t.getTime())&&t.getUTCDate()===1).map(({index:t})=>t)}function js(o){const t=ot(o);return[{detail:`${$(t.totalTokens)} total tokens in this project`,icon:"solar:cpu-line-duotone",name:"Total Tokens",trend:"project total",trendTone:"neutral",value:J(t.totalTokens)},...at(t,{sessionDetail:`${$(t.sessions)} sessions across all tools`,sessionIcon:"lucide:messages-square",sessionTrend:"all tools",totalSpendIcon:"lucide:wallet"})]}function Ps(o,t){const n=ot(o),u=Rs(o),[p="",S=""]=Ae(2).slice().reverse(),b=t.find(M=>M.date===p),g=t.find(M=>M.date===S),j=u.get(p)??0,P=u.get(S)??0,L=Ke(b?.totalTokens??0,g?.totalTokens??0,J),V=Ke(b?.costUSD??0,g?.costUSD??0,Q),D=$t(j,P);return[{detail:`${$(b?.totalTokens??0)} tokens used today`,icon:"solar:cpu-line-duotone",name:"Today Tokens",subvalue:Lt(b),trend:L.trend,trendTone:L.trendTone,value:J(b?.totalTokens??0)},{detail:`${Q(b?.costUSD??0)} spent today`,icon:"lucide:wallet",name:"Today Spend",trend:V.trend,trendTone:V.trendTone,value:Q(b?.costUSD??0)},{detail:`${$(j)} sessions recorded today`,icon:"lucide:messages-square",name:"Today Sessions",trend:D.label,trendTone:D.tone,value:String(j)},...at(n,{sessionDetail:`${$(n.sessions)} total sessions for this platform`,sessionIcon:"lucide:list-checks",sessionTrend:"project total",totalSpendIcon:"lucide:receipt-text"})]}function Fe(o,t){const n=new Set(t),u=o.filter(g=>n.has(g.date)),p=new Map(u.map(g=>[g.date,g.models])),b=It(u.flatMap(g=>Object.keys(g.models))).map(g=>({model:g,totalTokens:u.reduce((j,P)=>j+(P.models[g]?.totalTokens??0),0)})).sort((g,j)=>j.totalTokens-g.totalTokens||g.model.localeCompare(j.model)).map(g=>g.model).map((g,j)=>({color:Ge[j%Ge.length],label:g,points:t.map(P=>p.get(P)?.[g]?.totalTokens??0)}));return{labels:t,series:b}}function st(o,t,n=`${t}:${o.id}`){return{cacheTokens:$(o.cachedInputTokens),cost:Q(o.costUSD),duration:o.duration||"-",id:n,inputTokens:$(o.inputTokens),model:o.models?.join(", ")||o.model||"unknown",outputTokens:$(o.outputTokens),platform:t,reasoningTokens:$(o.reasoningOutputTokens),sessionId:o.sessionId,startedAt:nt(o.startedAt,Ut),threadName:o.threadName,tokens:$(o.tokenTotal)}}function Ds(o,t){return o.map(n=>st(n,t))}function ot(o){return o.reduce((t,n)=>({cachedInputTokens:t.cachedInputTokens+n.cachedInputTokens,costUSD:t.costUSD+n.costUSD,inputTokens:t.inputTokens+n.inputTokens,outputTokens:t.outputTokens+n.outputTokens,reasoningOutputTokens:t.reasoningOutputTokens+n.reasoningOutputTokens,sessions:t.sessions+1,totalTokens:t.totalTokens+n.tokenTotal}),{cachedInputTokens:0,costUSD:0,inputTokens:0,outputTokens:0,reasoningOutputTokens:0,sessions:0,totalTokens:0})}function at(o,t){return[{detail:`${Q(o.costUSD)} total project spend`,icon:t.totalSpendIcon,name:"Total Spend",trend:"all time",trendTone:"neutral",value:Q(o.costUSD)},{detail:t.sessionDetail,icon:t.sessionIcon,name:"Sessions",trend:t.sessionTrend,trendTone:"neutral",value:String(o.sessions)},{detail:`${$(o.cachedInputTokens)} of ${$(o.inputTokens)} input tokens were served from cache`,icon:"lucide:database-zap",name:"Cache Hit Rate",trend:`${J(o.cachedInputTokens)} cached`,trendTone:"neutral",value:Mt(o.inputTokens>0?o.cachedInputTokens/o.inputTokens:0)},{detail:`${Q(o.costUSD)} across ${$(o.sessions)} sessions`,icon:"lucide:circle-dollar-sign",name:"Avg Session Cost",trend:"per session",trendTone:"neutral",value:Q(o.sessions>0?o.costUSD/o.sessions:0)}]}function Cs(o){return o.reduce((t,n)=>({costUSD:t.costUSD+n.costUSD,sessions:t.sessions+1,totalTokens:t.totalTokens+n.tokenTotal}),{costUSD:0,sessions:0,totalTokens:0})}function Rs(o){return o.reduce((t,n)=>{const u=nt(n.startedAt,p=>et(tt(p)),"");return u&&t.set(u,(t.get(u)??0)+1),t},new Map)}function nt(o,t,n="-"){if(!o)return n;const u=new Date(o);return Number.isFinite(u.getTime())?t(u):n}const Is=30,$s=365,Ls=180,Ms=600,Us=45e3,As={dailyRows:[],dailyTokenUsage:[]},Os={dailyTokenUsage:[],monthlyModelUsage:[]},Oe={dailyRows:Te(),monthlyRows:Te(),sessionRows:Te(),weeklyRows:Te()},Ee={sessionRows:Te(),sessionUsage:Te(),sessions:[]},Es={daily_trend:As,model_usage:Os,session_list:Ee,token_usage:Oe};function zs(){return{page:1,pageCount:1,pageSize:de,total:0}}function Te(){return{items:[],pagination:zs()}}function Ns(){const o=fe(""),t=fe("all"),n=fe(!1),u=fe([]),p=fe(""),S=Object.fromEntries(ie.map(s=>[s,fe(null)])),b=Ye(Object.fromEntries(ie.map(s=>[s,!1])));let g=0,j=0;const P=new Map,L=m(()=>`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`),{open:V,send:D,status:M}=vt(L,{immediate:!1,autoReconnect:{delay:1e3,retries:3},onConnected(){xe()},onDisconnected(){c(new Error("WebSocket connection closed."))},onError(){p.value="WebSocket connection error."},onMessage(s,a){me(a.data)}}),Y=m(()=>u.value.map(s=>({id:s.label,name:s.label,platforms:s.platforms,totalTokens:s.totalTokens}))),he=m(()=>Y.value.find(s=>s.id===o.value)??null),_e=m(()=>ie.some(s=>b[s])),k=m(()=>n.value||_e.value||Y.value.length===0),ae=m(()=>te("session_list")),R=m(()=>{const s=te("session_list")?$e.filter(a=>U("session_list",a).sessions.length>0):he.value?.platforms??[];return s.length===0?[]:s.map(a=>({...we[a],value:a}))}),G=m(()=>[{label:"All",value:"all"},...R.value]),ee=m(()=>R.value.flatMap(s=>U("session_list",s.value).sessions).sort((s,a)=>Date.parse(a.startedAt)-Date.parse(s.startedAt))),X=m(()=>At(R.value.flatMap(s=>U("model_usage",s.value).dailyTokenUsage))),ne=m(()=>Object.fromEntries(G.value.map(s=>{const a=Cs(s.value==="all"?ee.value:U("session_list",s.value).sessions);return[s.value,{cost:Q(a.costUSD),label:s.label,sessions:String(a.sessions),tokens:J(a.totalTokens)}]}))),F=m(()=>ne.value[t.value]),ve=m(()=>[{label:"Tokens",value:F.value.tokens},{label:"Spend",value:F.value.cost},{label:"Sessions",value:F.value.sessions}]),K=m(()=>Ae(Is)),be=m(()=>Ae($s)),pe=m(()=>Ss(be.value)),A=m(()=>js(ee.value)),C=m(()=>{const s=U("session_list","all");return{items:s.sessionUsage.items.map(a=>st(a,r(a.id),a.id)),pagination:s.sessionUsage.pagination}}),z=m(()=>Le(U("token_usage","all").dailyRows)),W=m(()=>K.value),je=m(()=>W.value),Pe=m(()=>R.value.map(s=>({color:s.color,label:s.label,points:ge(s.value,W.value)}))),De=m(()=>Fe(X.value,K.value)),ye=m(()=>Object.fromEntries($e.map(s=>{const a=be.value,T=U("daily_trend",s),v=U("model_usage",s),q=U("token_usage",s),Ie=U("session_list",s),ke=Fe(v.dailyTokenUsage,a);return[s,{modelLabels:ke.labels,modelSeries:ke.series,modelTickIndexes:pe.value,dayRows:q.dailyRows,monthRows:q.monthlyRows,overviewCards:Ps(Ie.sessions,T.dailyTokenUsage),sessionRows:q.sessionRows,sessionTableRows:{items:Ds(Ie.sessionUsage.items,s),pagination:Ie.sessionUsage.pagination},trendLabels:a,trendSeries:[{color:we[s].color,label:we[s].label,points:ge(s,a)}],trendTickIndexes:pe.value,trendTooltipLabels:a,weekRows:q.weeklyRows}]})));bt(()=>{V()}),xt(()=>{c(new Error("Project dashboard disposed."))}),Ne(o,s=>{Ce(),s||N()}),Ne(G,s=>{t.value!=="all"&&(s.some(a=>a.value===t.value)||(t.value="all"))},{immediate:!0}),yt(o,s=>{s&&O(s)},{debounce:Ls,maxWait:Ms});function Ce(){g+=1,N(),p.value=""}async function xe(){n.value=!0,p.value="";try{const s=await le({type:"project"}),a=s.find(T=>T.label===o.value);u.value=s,o.value=a?.label??s[0]?.label??""}catch(s){p.value=s instanceof Error?s.message:"Failed to load project catalog."}finally{n.value=!1}}async function O(s){const a=Y.value.find(v=>v.id===s);if(!a){N();return}const T=g+1;g=T,N();for(const v of ie)b[v]=!0;try{const v=await le({modules:[...ie],page:1,pageSize:de,project:a.id,type:"project_data"});if(T!==g||v.label!==a.id)return;re(v)}catch(v){if(T!==g)return;p.value=v instanceof Error?v.message:"Failed to load project module."}finally{if(T===g)for(const v of ie)b[v]=!1}}function le(s){if(M.value!=="OPEN")return Promise.reject(new Error("WebSocket is not connected."));const a=d();return new Promise((T,v)=>{const q=window.setTimeout(()=>{P.delete(a),v(new Error("WebSocket request timed out."))},Us);P.set(a,{reject:ke=>{window.clearTimeout(q),v(ke)},requestId:a,resolve:ke=>{window.clearTimeout(q),T(ke)}}),D(JSON.stringify({...s,requestId:a}))||(window.clearTimeout(q),P.delete(a),v(new Error("Failed to send WebSocket request.")))})}function me(s){if(typeof s!="string")return;const a=l(s);if(!a)return;if(y(a)){c(new Error(a.message));return}if(!H(a))return;const T=P.get(a.requestId);T&&(P.delete(a.requestId),T.resolve(a.data))}function l(s){try{return JSON.parse(s)}catch{return null}}function d(){return j+=1,`${Date.now()}-${j}`}function c(s){for(const a of P.values())a.reject(s);P.clear()}function y(s){if(!s||typeof s!="object")return!1;const a=s;return a.type==="error"&&typeof a.message=="string"}function H(s){if(!s||typeof s!="object")return!1;const a=s;return typeof a.requestId=="string"&&"data"in a}function N(){for(const s of ie){const a=S[s];a.value=null,b[s]=!1}}function re(s){for(const a of ie){const T=s.modules[a];if(T){const v=S[a];v.value=T}}}function te(s){return S[s].value!==null}function U(s,a){return S[s].value?.[a]??Es[s]}function ge(s,a){const T=new Map(U("daily_trend",s).dailyTokenUsage.map(v=>[v.date,v.totalTokens]));return a.map(v=>T.get(v)??0)}function r(s){return $e.find(a=>s.startsWith(`${a}:`))??$e[0]}async function I(s,a){const T=o.value;if(!T)return Oe.dailyRows;const q=(await le({modules:["token_usage"],page:a,pageSize:de,platform:s,project:T,type:"project_data"})).modules.token_usage?.[s]??Oe;return ze("token_usage",s,q),q.dailyRows}function Le(s){return{items:s.items.map(a=>({cacheTokens:$(a.cachedInputTokens),cost:Q(a.costUSD),inputTokens:$(a.inputTokens),label:a.label,models:a.models.join(", ")||"-",outputTokens:$(a.outputTokens),reasoningTokens:$(a.reasoningOutputTokens),sessions:String(a.sessionCount),tokens:$(a.totalTokens)})),pagination:s.pagination}}async function lt(s,a){const T=o.value;if(!T)return Ee.sessionUsage;const q=(await le({modules:["session_list"],page:a,pageSize:de,platform:s,project:T,type:"project_data"})).modules.session_list?.[s]??Ee;return ze("session_list",s,q),q.sessionUsage}function ze(s,a,T){const v=S[s];v.value={...v.value??{},[a]:T}}return{activeScopeItems:ve,activeTab:t,allDailyUsageRowsPage:z,allModelChart:De,allOverviewCards:A,allSessionRowsPage:C,dailySeries:Pe,dailyTooltipLabels:je,dailyTrendLabels:W,fetchProjectSessionListPage:lt,fetchProjectTokenUsagePage:I,isModuleLoaded:te,isProjectModuleLoading:_e,isProjectSelectDisabled:k,isScopeReady:ae,platformTabs:R,platformViews:ye,projects:Y,selectedProjectId:o,tabSummaries:ne,tabs:G,websocketError:p}}const qs={class:"bg-background border border-input rounded-xl shadow-xs flex w-full shrink-0 flex-col overflow-hidden xl:w-xs"},Bs={class:"flex items-center justify-between px-2 py-3 gap-1"},Vs={class:"min-h-0 flex-1 overflow-x-hidden overflow-y-auto p-3"},Ks={class:"grid gap-1"},Gs={class:"flex min-w-0 w-full items-center gap-3 overflow-hidden"},Fs={class:"shrink-0 flex items-center justify-center border rounded-full size-[34px] bg-background"},Ws={class:"min-w-0 flex-1 overflow-hidden space-y-1"},Hs={class:"max-w-full truncate text-sm font-medium"},Ys={class:"max-w-full truncate text-xs text-muted-foreground"},Xs={class:"shrink-0 text-right text-xs font-semibold text-muted-foreground tabular-nums"},Js={key:0,class:"flex min-h-32 items-center justify-center rounded-lg border border-dashed px-4 py-6 text-center text-sm text-muted-foreground"},Qs={key:1,class:"flex min-h-32 items-center justify-center rounded-lg border border-dashed px-4 py-6 text-center text-sm text-muted-foreground"},Zs={class:"bg-background border border-input rounded-xl shadow-xs min-h-0 flex-1 overflow-y-auto"},eo={key:0,class:"flex min-h-full flex-col"},to={class:"border-b p-4 lg:p-5"},so={class:"flex flex-col gap-5"},oo={key:0,class:"flex flex-col gap-4 2xl:flex-row 2xl:items-start 2xl:justify-between"},ao={class:"flex items-center gap-2 text-xs text-muted-foreground"},no={class:"flex justify-between items-center"},lo={class:"min-w-0 flex-1"},ro={class:"flex flex-col items-start gap-1.5"},io={class:"w-full flex justify-between items-center"},co={class:"truncate text-sm font-medium"},uo={key:1,class:"block truncate text-xs text-muted-foreground tabular-nums"},po={class:"grid grid-cols-1 gap-3 sm:grid-cols-3"},mo={key:1,class:"truncate text-sm font-semibold tabular-nums"},go={class:"truncate text-xs font-medium uppercase tracking-wide text-muted-foreground"},fo={key:1,class:"text-xs text-destructive"},ho={class:"p-4 lg:p-5"},_o={key:1,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-5 md:col-span-12"},vo={class:"md:col-span-12"},bo={key:0,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-7"},yo={key:1,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-7"},xo={key:1,class:"flex min-h-[420px] items-center justify-center p-6"},Co=B({__name:"project",setup(o){const{activeScopeItems:t,activeTab:n,allDailyUsageRowsPage:u,allModelChart:p,allOverviewCards:S,allSessionRowsPage:b,dailySeries:g,dailyTooltipLabels:j,dailyTrendLabels:P,fetchProjectSessionListPage:L,fetchProjectTokenUsagePage:V,isModuleLoaded:D,isProjectModuleLoading:M,isProjectSelectDisabled:Y,isScopeReady:he,platformTabs:_e,platformViews:k,projects:ae,selectedProjectId:R,tabSummaries:G,tabs:ee,websocketError:X}=Ns(),ne=m(()=>ae.value.find(A=>A.id===R.value)??null),F=fe(""),ve=m(()=>{const A=F.value.trim().toLowerCase();return[...A?ae.value.filter(z=>z.name.toLowerCase().includes(A)):ae.value].sort((z,W)=>W.totalTokens-z.totalTokens)});function K(A){Y.value||A===R.value||(R.value=A)}function be(A,C){const z=k.value[A];return C==="day"?z.dayRows:C==="week"?z.weekRows:C==="month"?z.monthRows:z.sessionRows}function pe(A){return A.split(/[\s/-]+/).filter(Boolean).slice(0,2).map(C=>C[0]?.toUpperCase()??"").join("")}return(A,C)=>{const z=as,W=Je,je=os,Pe=ts,De=rs,ye=ls,Ce=wt,xe=is,O=Ot,le=Vt,me=Bt,l=zt,d=vs,c=Nt,y=xs,H=ws,N=Et,re=Kt,te=qt,U=Gt,ge=Ft;return i(),h(ge,{modelValue:e(n),"onUpdate:modelValue":C[1]||(C[1]=r=>Ue(n)?n.value=r:null),class:"flex min-h-0 w-full flex-col gap-4 xl:flex-row"},{default:w(()=>[f("div",qs,[f("div",Bs,[x(Pe,null,{default:w(()=>[x(z,{modelValue:e(F),"onUpdate:modelValue":C[0]||(C[0]=r=>Ue(F)?F.value=r:null),placeholder:"Search projects..."},null,8,["modelValue"]),x(je,null,{default:w(()=>[x(W,{name:"lucide:search"})]),_:1})]),_:1})]),f("div",Vs,[f("div",Ks,[(i(!0),_(ce,null,ue(e(ve),r=>(i(),h(Ce,{key:r.id,"aria-pressed":r.id===e(R),class:oe([e(Z)(r.id===e(R)?"bg-secondary text-foreground hover:bg-secondary":"hover:bg-secondary/70"),"h-auto min-w-0 w-full justify-start overflow-hidden rounded-lg p-2 text-left"]),disabled:e(Y),title:r.name,type:"button",variant:"ghost",onClick:I=>K(r.id)},{default:w(()=>[f("div",Gs,[f("div",Fs,[x(ye,null,{default:w(()=>[x(De,null,{default:w(()=>[kt(E(pe(r.name)),1)]),_:2},1024)]),_:2},1024)]),f("div",Ws,[f("p",Hs,E(r.name),1),f("p",Ys,E(r.platforms.length>0?r.platforms.map(I=>e(we)[I].label).join(" / "):"No platforms detected"),1)]),f("p",Xs,E(e(J)(r.totalTokens)),1)])]),_:2},1032,["aria-pressed","class","disabled","title","onClick"]))),128)),e(ae).length===0?(i(),_("div",Js," No projects available yet. ")):e(ve).length===0?(i(),_("div",Qs," No matching projects found. ")):se("",!0)])])]),f("div",Zs,[e(ne)?(i(),_("div",eo,[f("div",to,[f("div",so,[e(M)?(i(),_("div",oo,[f("div",{class:oe(e(Z)("relative flex flex-col gap-3 pl-4","before:absolute before:left-0 before:top-0","before:h-full before:w-1 before:rounded-full","before:bg-amber-500"))},[f("div",ao,[x(xe,{class:"size-3.5"}),C[2]||(C[2]=f("span",null,"Switching project...",-1))])],2)])):se("",!0),f("div",no,[x(me,{"aria-label":"Project platform scope",class:"flex h-auto flex-wrap justify-start gap-3 bg-transparent p-0"},{default:w(()=>[(i(!0),_(ce,null,ue(e(ee),r=>(i(),h(le,{key:r.value,"aria-label":r.label,class:oe([e(Z)("data-[state=active]:border","data-[state=active]:border-dashed","data-[state=active]:border-amber-500","data-[state=active]:bg-transparent"),"flex h-auto justify-start gap-3 shadow-none"]),value:r.value},{default:w(()=>[r.value==="all"?(i(),h(W,{key:0,"aria-hidden":"true",class:"size-4 text-muted-foreground",mode:"svg",name:"lucide:layout-dashboard"})):(i(),h(W,{key:1,name:r.aiIcon,"aria-hidden":"true",class:"size-5 text-muted-foreground"},null,8,["name"])),f("div",lo,[f("div",ro,[f("div",io,[f("span",co,E(r.label),1)]),e(he)?(i(),_("span",uo,E(e(G)[r.value].tokens)+" tokens ",1)):(i(),h(O,{key:0,class:"h-3 w-20"}))])])]),_:2},1032,["aria-label","class","value"]))),128))]),_:1}),f("div",po,[(i(!0),_(ce,null,ue(e(t),r=>(i(),_("div",{key:r.label,class:"flex min-w-28 flex-col items-start gap-3 rounded-md border border-dotted px-3 py-2"},[e(he)?(i(),_("p",mo,E(r.value),1)):(i(),h(O,{key:0,class:"h-5 w-16"})),f("p",go,E(r.label),1)]))),128))])]),e(X)?(i(),_("p",fo,E(e(X)),1)):se("",!0)])]),f("div",ho,[x(re,{class:"m-0",value:"all"},{default:w(()=>[x(N,null,{default:w(()=>[e(D)("session_list")?(i(),h(l,{key:0,cards:e(S),class:"md:col-span-12 lg:grid-cols-5"},null,8,["cards"])):(i(),_("div",_o,[(i(),_(ce,null,ue(5,r=>x(O,{key:r,class:"h-28 rounded-md"})),64))])),x(c,{class:"md:col-span-12",description:"Recent usage by provider",icon:"lucide:activity",title:"Daily Token Trend"},{default:w(()=>[e(D)("model_usage")?(i(),h(d,{key:0,series:e(g),"tooltip-labels":e(j),"x-labels":e(P)},null,8,["series","tooltip-labels","x-labels"])):(i(),h(O,{key:1,class:"h-80 w-full rounded-md"}))]),_:1}),x(c,{class:"md:col-span-12",description:"Usage by model",icon:"solar:cpu-line-duotone",title:"Model Usage"},{default:w(()=>[e(D)("model_usage")?(i(),h(d,{key:0,series:e(p).series,"tooltip-labels":e(p).labels,"x-labels":e(p).labels},null,8,["series","tooltip-labels","x-labels"])):(i(),h(O,{key:1,class:"h-80 w-full rounded-md"}))]),_:1}),x(c,{class:"md:col-span-12",description:"Sessions in this project",icon:"lucide:messages-square",title:"Session Statistics"},{default:w(()=>[e(D)("session_list")?(i(),h(y,{key:0,"fetch-page":r=>e(L)("all",r).then(()=>e(b)),items:e(b).items,pagination:e(b).pagination},null,8,["fetch-page","items","pagination"])):(i(),h(O,{key:1,class:"h-72 w-full rounded-md"}))]),_:1}),x(c,{class:"md:col-span-12",description:"Daily model activity by token type, cache reads, total usage, and cost",icon:"lucide:calendar-days",title:"Daily Token Usage"},{default:w(()=>[e(D)("token_usage")?(i(),h(H,{key:0,"fetch-page":r=>e(V)("all",r).then(()=>e(u)),items:e(u).items,pagination:e(u).pagination},null,8,["fetch-page","items","pagination"])):(i(),h(O,{key:1,class:"h-72 w-full rounded-md"}))]),_:1})]),_:1})]),_:1}),(i(!0),_(ce,null,ue(e(_e),r=>(i(),h(re,{key:r.value,value:r.value,class:"m-0"},{default:w(()=>[x(N,null,{default:w(()=>[f("div",vo,[e(D)("daily_trend")&&e(D)("session_list")?(i(),_("div",bo,[(i(!0),_(ce,null,ue(e(k)[r.value].overviewCards,I=>(i(),h(te,{key:I.name,detail:I.detail,icon:I.icon,name:I.name,trend:I.trend,"trend-tone":I.trendTone,value:I.value},null,8,["detail","icon","name","trend","trend-tone","value"]))),128))])):(i(),_("div",yo,[(i(),_(ce,null,ue(7,I=>x(O,{key:I,class:"h-28 rounded-md"})),64))]))]),x(c,{description:`${r.label} token usage within the current project`,class:"md:col-span-12",icon:"lucide:chart-area",title:"Token Trend"},{default:w(()=>[e(D)("daily_trend")?(i(),h(d,{key:0,series:e(k)[r.value].trendSeries,"tick-indexes":e(k)[r.value].trendTickIndexes,"tooltip-labels":e(k)[r.value].trendTooltipLabels,"x-labels":e(k)[r.value].trendLabels},null,8,["series","tick-indexes","tooltip-labels","x-labels"])):(i(),h(O,{key:1,class:"h-80 w-full rounded-md"}))]),_:2},1032,["description"]),x(c,{description:`${r.label} model trend within the current project`,class:"md:col-span-12",icon:"solar:cpu-line-duotone",title:"Model Usage Trend"},{default:w(()=>[e(D)("daily_trend")?(i(),h(d,{key:0,series:e(k)[r.value].modelSeries,"tick-indexes":e(k)[r.value].modelTickIndexes,"tooltip-labels":e(k)[r.value].modelLabels,"x-labels":e(k)[r.value].modelLabels},null,8,["series","tick-indexes","tooltip-labels","x-labels"])):(i(),h(O,{key:1,class:"h-80 w-full rounded-md"}))]),_:2},1032,["description"]),e(D)("token_usage")&&e(D)("session_list")?(i(),h(U,{key:0,"daily-items":e(k)[r.value].dayRows.items,"daily-pagination":e(k)[r.value].dayRows.pagination,"fetch-page":(I,Le)=>e(V)(r.value,Le).then(()=>be(r.value,I)),"monthly-items":e(k)[r.value].monthRows.items,"monthly-pagination":e(k)[r.value].monthRows.pagination,"product-name":r.label,"session-items":e(k)[r.value].sessionRows.items,"session-pagination":e(k)[r.value].sessionRows.pagination,"weekly-items":e(k)[r.value].weekRows.items,"weekly-pagination":e(k)[r.value].weekRows.pagination,class:"md:col-span-12"},null,8,["daily-items","daily-pagination","fetch-page","monthly-items","monthly-pagination","product-name","session-items","session-pagination","weekly-items","weekly-pagination"])):(i(),h(O,{key:1,class:"h-72 rounded-md md:col-span-12"})),x(c,{description:`${r.label} sessions in the current project`,class:"md:col-span-12",icon:"lucide:list-tree",title:"Session List"},{default:w(()=>[e(D)("session_list")?(i(),h(y,{key:0,"fetch-page":I=>e(L)(r.value,I).then(()=>e(k)[r.value].sessionTableRows),items:e(k)[r.value].sessionTableRows.items,pagination:e(k)[r.value].sessionTableRows.pagination},null,8,["fetch-page","items","pagination"])):(i(),h(O,{key:1,class:"h-72 w-full rounded-md"}))]),_:2},1032,["description"])]),_:2},1024)]),_:2},1032,["value"]))),128))])])):(i(),_("div",xo,[...C[3]||(C[3]=[f("div",{class:"w-full max-w-md rounded-xl border border-dashed px-6 py-10 text-center"},[f("p",{class:"text-base font-medium text-foreground"}," No project selected "),f("p",{class:"mt-2 text-sm text-muted-foreground"}," Select a project from the left panel to view its dashboard. ")],-1)])]))])]),_:1},8,["modelValue"])}}});export{Co as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as t}from"./
|
|
1
|
+
import{j as t}from"./nv0LjcWu.js";function o(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}const[l]=t("ConfigProvider");export{o as g,l as i};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as o,u as s,o as a,c as i,a as t,t as r}from"./
|
|
1
|
+
import{_ as o,u as s,o as a,c as i,a as t,t as r}from"./nv0LjcWu.js";const u={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},c={class:"max-w-520px text-center"},l=["textContent"],d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:500},statusText:{type:String,default:"Internal server error"},description:{type:String,default:"This page is temporarily unavailable."},refresh:{type:String,default:"Refresh this page"}},setup(e){const n=e;return s({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(h,m)=>(a(),i("div",u,[t("div",c,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:r(e.status)},null,8,l),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:r(e.statusText)},null,8,d),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:r(e.description)},null,8,p)])]))}},b=o(f,[["__scopeId","data-v-9403453c"]]);export{b as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as O,al as L,am as q,L as j,an as E,ao as
|
|
1
|
+
import{e as O,al as L,am as q,L as j,an as E,ao as I,a2 as N,ap as U,I as P,aq as _,ar as H,as as D,J as F,r as V,at as B,au as z,i as o,av as M,G as b,aw as W,ax as T,ay as G,az as $,aA as J,aB as Q}from"./nv0LjcWu.js";const K=(...t)=>t.find(c=>c!==void 0);function X(t){const c=t.componentName||"NuxtLink";function v(e){return typeof e=="string"&&e.startsWith("#")}function C(e,l,d){const a=d??t.trailingSlash;if(!e||a!=="append"&&a!=="remove")return e;if(typeof e=="string")return k(e,a);const i="path"in e&&e.path!==void 0?e.path:l(e).path;return{...e,name:void 0,path:k(i,a)}}function w(e){const l=L(),d=Q(),a=b(()=>!!o(e.target)&&o(e.target)!=="_self"),i=b(()=>{const u=o(e.to)||o(e.href)||"";return typeof u=="string"&&T(u,{acceptRelative:!0})}),m=_("RouterLink"),g=m&&typeof m!="string"?m.useLink:void 0,f=b(()=>{if(o(e.external))return!0;const u=o(e.to)||o(e.href)||"";return typeof u=="object"?!1:u===""||i.value}),r=b(()=>{const u=o(e.to)||o(e.href)||"";return f.value?u:C(u,l.resolve,o(e.trailingSlash))}),y=f.value?void 0:g?.({...e,to:r,viewTransition:o(e.viewTransition)}),p=b(()=>{const u=o(e.trailingSlash)??t.trailingSlash;if(!r.value||i.value||v(r.value))return r.value;if(f.value){const R=typeof r.value=="object"&&"path"in r.value?B(r.value):r.value,S=typeof R=="object"?l.resolve(R).href:R;return k(S,u)}return typeof r.value=="object"?l.resolve(r.value)?.href??null:k(G(d.app.baseURL,r.value),u)});return{to:r,hasTarget:a,isAbsoluteUrl:i,isExternal:f,href:p,isActive:y?.isActive??b(()=>r.value===l.currentRoute.value.path),isExactActive:y?.isExactActive??b(()=>r.value===l.currentRoute.value.path),route:y?.route??b(()=>l.resolve(r.value)),async navigate(u){await M(p.value,{replace:o(e.replace),external:f.value||a.value})}}}return O({name:c,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:w,setup(e,{slots:l}){const d=L(),{to:a,href:i,navigate:m,isExternal:g,hasTarget:f,isAbsoluteUrl:r}=w(e),y=F(!1),p=V(null),u=s=>{p.value=e.custom?s?.$el?.nextElementSibling:s?.$el};function R(s){return!y.value&&(typeof e.prefetchOn=="string"?e.prefetchOn===s:e.prefetchOn?.[s]??t.prefetchOn?.[s])&&(e.prefetch??t.prefetch)!==!1&&e.noPrefetch!==!0&&e.target!=="_blank"&&!ee()}async function S(s=q()){if(y.value)return;y.value=!0;const h=typeof a.value=="string"?a.value:g.value?B(a.value):d.resolve(a.value).fullPath,n=g.value?new URL(h,window.location.href).href:h;await Promise.all([s.hooks.callHook("link:prefetch",n)?.catch(()=>{}),!g.value&&!f.value&&z(a.value,d).catch(()=>{})])}if(R("visibility")){const s=q();let h,n=null;j(()=>{const x=Y();E(()=>{h=I(()=>{p?.value?.tagName&&(n=x.observe(p.value,async()=>{n?.(),n=null,await S(s)}))})})}),N(()=>{h&&U(h),n?.(),n=null})}return()=>{if(!g.value&&!f.value&&!v(a.value)){const n={ref:u,to:a.value,activeClass:e.activeClass||t.activeClass,exactActiveClass:e.exactActiveClass||t.exactActiveClass,replace:e.replace,ariaCurrentValue:e.ariaCurrentValue,custom:e.custom};return e.custom||(R("interaction")&&(n.onPointerenter=S.bind(null,void 0),n.onFocus=S.bind(null,void 0)),y.value&&(n.class=e.prefetchedClass||t.prefetchedClass),n.rel=e.rel||void 0),P(_("RouterLink"),n,l.default)}const s=e.target||null,h=K(e.noRel?"":e.rel,t.externalRelAttribute,r.value||f.value?"noopener noreferrer":"")||null;return e.custom?l.default?l.default({href:i.value,navigate:m,prefetch:S,get route(){if(!i.value)return;const n=new URL(i.value,window.location.href);return{path:n.pathname,fullPath:n.pathname,get query(){return H(n.search)},hash:n.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:i.value}},rel:h,target:s,isExternal:g.value||f.value,isActive:!1,isExactActive:!1}):null:P("a",{ref:p,href:i.value||null,rel:h,target:s,onClick:async n=>{if(!(g.value||f.value)){n.preventDefault();try{const x=D(i.value);return await(e.replace?d.replace(x):d.push(x))}finally{if(v(a.value)){const x=a.value.slice(1);let A=x;try{A=decodeURIComponent(x)}catch{}document.getElementById(A)?.focus()}}}}},l.default?.())}}})}const ne=X(W);function k(t,c){const v=c==="append"?$:J;return T(t)&&!t.startsWith("http")?t:v(t,!0)}function Y(){const t=q();if(t._observer)return t._observer;let c=null;const v=new Map,C=(e,l)=>(c||=new IntersectionObserver(d=>{for(const a of d){const i=v.get(a.target);(a.isIntersecting||a.intersectionRatio>0)&&i&&i()}}),v.set(e,l),c.observe(e),()=>{v.delete(e),c?.unobserve(e),v.size===0&&(c?.disconnect(),c=null)});return t._observer={observe:C}}const Z=/2g/;function ee(){const t=navigator.connection;return!!(t&&(t.saveData||Z.test(t.effectiveType)))}export{ne as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as de,q as ce,b as fe,d as B,g as pe,D as G}from"./DFbWcbwl.js";import{S as H,P as M,u as Q,a as me,b as ve,d as ge}from"./DaoeXHW_.js";import{r as P,G as h,W as be,X as ye,e as T,k as he,I as Y,M as _e,Y as Te,Z as Ie,$ as L,n as ee,o as y,g as w,w as g,b as C,i as o,h as S,j as te,L as ae,a0 as we,a1 as Ce,f as q,J as j,a2 as Se,D as ke,l as oe,a3 as Pe,a4 as xe,y as $,z as O,s as V,a5 as Ae,a6 as Ee,c as R,t as N,F as U,x as Fe,E as W,d as Me}from"./nv0LjcWu.js";import{i as Be,g as Z}from"./BJWBp9U3.js";function se(a){const e=Be({dir:P("ltr")});return h(()=>a?.value||e.dir?.value||"ltr")}function J(){const a=P(),e=h(()=>["#text","#comment"].includes(a.value?.$el.nodeName)?a.value?.$el.nextElementSibling:be(a));return{primitiveElement:a,currentElement:e}}const X="data-reka-collection-item";function ne(a={}){const{key:e="",isProvider:s=!1}=a,t=`${e}CollectionProvider`;let l;if(s){const u=P(new Map);l={collectionRef:P(),itemMap:u},Te(t,l)}else l=ye(t);const m=(u=!1)=>{const r=l.collectionRef.value;if(!r)return[];const f=Array.from(r.querySelectorAll(`[${X}]`)),v=Array.from(l.itemMap.value.values()).sort((b,x)=>f.indexOf(b.ref)-f.indexOf(x.ref));return u?v:v.filter(b=>b.ref.dataset.disabled!=="")},p=T({name:"CollectionSlot",inheritAttrs:!1,setup(u,{slots:r,attrs:f}){const{primitiveElement:n,currentElement:v}=J();return _e(v,()=>{l.collectionRef.value=v.value}),()=>Y(H,{ref:n,...f},r)}}),d=T({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(u,{slots:r,attrs:f}){const{primitiveElement:n,currentElement:v}=J();return he(b=>{if(v.value){const x=Ie(v.value);l.itemMap.value.set(x,{ref:v.value,value:u.value}),b(()=>l.itemMap.value.delete(x))}}),()=>Y(H,{...f,[X]:"",ref:n},r)}}),c=h(()=>Array.from(l.itemMap.value.values())),i=h(()=>l.itemMap.value.size);return{getItems:m,reactiveItems:c,itemMapSize:i,CollectionSlot:p,CollectionItem:d}}const Re="rovingFocusGroup.onEntryFocus",qe={bubbles:!1,cancelable:!0},$e={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Oe(a,e){return e!=="rtl"?a:a==="ArrowLeft"?"ArrowRight":a==="ArrowRight"?"ArrowLeft":a}function Ve(a,e,s){const t=Oe(a.key,s);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(t))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(t)))return $e[t]}function le(a,e=!1){const s=Z();for(const t of a)if(t===s||(t.focus({preventScroll:e}),Z()!==s))return}function Ke(a,e){return a.map((s,t)=>a[(e+t)%a.length])}const[De,Ne]=te("RovingFocusGroup");var Ue=T({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(a,{expose:e,emit:s}){const t=a,l=s,{loop:m,orientation:p,dir:d}=L(t),c=se(d),i=ee(t,"currentTabStopId",l,{defaultValue:t.defaultCurrentTabStopId,passive:t.currentTabStopId===void 0}),u=P(!1),r=P(!1),f=P(0),{getItems:n,CollectionSlot:v}=ne({isProvider:!0});function b(I){const A=!r.value;if(I.currentTarget&&I.target===I.currentTarget&&A&&!u.value){const E=new CustomEvent(Re,qe);if(I.currentTarget.dispatchEvent(E),l("entryFocus",E),!E.defaultPrevented){const F=n().map(k=>k.ref).filter(k=>k.dataset.disabled!==""),K=F.find(k=>k.getAttribute("data-active")===""),_=F.find(k=>k.getAttribute("data-highlighted")===""),D=F.find(k=>k.id===i.value),ue=[K,_,D,...F].filter(Boolean);le(ue,t.preventScrollOnEntryFocus)}}r.value=!1}function x(){setTimeout(()=>{r.value=!1},1)}return e({getItems:n}),Ne({loop:m,dir:c,orientation:p,currentTabStopId:i,onItemFocus:I=>{i.value=I},onItemShiftTab:()=>{u.value=!0},onFocusableItemAdd:()=>{f.value++},onFocusableItemRemove:()=>{f.value--}}),(I,A)=>(y(),w(o(v),null,{default:g(()=>[C(o(M),{tabindex:u.value||f.value===0?-1:0,"data-orientation":o(p),as:I.as,"as-child":I.asChild,dir:o(c),style:{outline:"none"},onMousedown:A[0]||(A[0]=E=>r.value=!0),onMouseup:x,onFocus:b,onBlur:A[1]||(A[1]=E=>u.value=!1)},{default:g(()=>[S(I.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),je=Ue,Le=T({__name:"RovingFocusItem",props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(a){const e=a,s=De(),t=Q(),l=h(()=>e.tabStopId||t),m=h(()=>s.currentTabStopId.value===l.value),{getItems:p,CollectionItem:d}=ne();ae(()=>{e.focusable&&s.onFocusableItemAdd()}),we(()=>{e.focusable&&s.onFocusableItemRemove()});function c(i){if(i.key==="Tab"&&i.shiftKey){s.onItemShiftTab();return}if(i.target!==i.currentTarget)return;const u=Ve(i,s.orientation.value,s.dir.value);if(u!==void 0){if(i.metaKey||i.ctrlKey||i.altKey||!e.allowShiftKey&&i.shiftKey)return;i.preventDefault();let r=[...p().map(f=>f.ref).filter(f=>f.dataset.disabled!=="")];if(u==="last")r.reverse();else if(u==="prev"||u==="next"){u==="prev"&&r.reverse();const f=r.indexOf(i.currentTarget);r=s.loop.value?Ke(r,f+1):r.slice(f+1)}Ce(()=>le(r))}}return(i,u)=>(y(),w(o(d),null,{default:g(()=>[C(o(M),{tabindex:m.value?0:-1,"data-orientation":o(s).orientation.value,"data-active":i.active?"":void 0,"data-disabled":i.focusable?void 0:"",as:i.as,"as-child":i.asChild,onMousedown:u[0]||(u[0]=r=>{i.focusable?o(s).onItemFocus(l.value):r.preventDefault()}),onFocus:u[1]||(u[1]=r=>o(s).onItemFocus(l.value)),onKeydown:c},{default:g(()=>[S(i.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),ze=Le;const[z,Ge]=te("TabsRoot");var He=T({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(a,{emit:e}){const s=a,t=e,{orientation:l,unmountOnHide:m,dir:p}=L(s),d=se(p);q();const c=ee(s,"modelValue",t,{defaultValue:s.defaultValue,passive:s.modelValue===void 0}),i=P(),u=j(new Set);return Ge({modelValue:c,changeModelValue:r=>{c.value=r},orientation:l,dir:d,unmountOnHide:m,activationMode:s.activationMode,baseId:Q(void 0,"reka-tabs"),tabsList:i,contentIds:u,registerContent:r=>{u.value=new Set([...u.value,r])},unregisterContent:r=>{const f=new Set(u.value);f.delete(r),u.value=f}}),(r,f)=>(y(),w(o(M),{dir:o(d),"data-orientation":o(l),"as-child":r.asChild,as:r.as},{default:g(()=>[S(r.$slots,"default",{modelValue:o(c)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),Ye=He;function re(a,e){return`${a}-trigger-${e}`}function ie(a,e){return`${a}-content-${e}`}var We=T({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(a){const e=a,{forwardRef:s}=q(),t=z(),l=h(()=>re(t.baseId,e.value)),m=h(()=>ie(t.baseId,e.value)),p=h(()=>e.value===t.modelValue.value),d=P(p.value);return ae(()=>{t.registerContent(e.value),requestAnimationFrame(()=>{d.value=!1})}),Se(()=>{t.unregisterContent(e.value)}),(c,i)=>(y(),w(o(me),{present:c.forceMount||p.value,"force-mount":""},{default:g(({present:u})=>[C(o(M),{id:m.value,ref:o(s),"as-child":c.asChild,as:c.as,role:"tabpanel","data-state":p.value?"active":"inactive","data-orientation":o(t).orientation.value,"aria-labelledby":l.value,hidden:!u,tabindex:"0",style:ke({animationDuration:d.value?"0s":void 0})},{default:g(()=>[!o(t).unmountOnHide.value||u?S(c.$slots,"default",{key:0}):oe("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),Ze=We,Je=T({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(a){const e=a,{loop:s}=L(e),{forwardRef:t,currentElement:l}=q(),m=z();return m.tabsList=l,(p,d)=>(y(),w(o(je),{"as-child":"",orientation:o(m).orientation.value,dir:o(m).dir.value,loop:o(s)},{default:g(()=>[C(o(M),{ref:o(t),role:"tablist","as-child":p.asChild,as:p.as,"aria-orientation":o(m).orientation.value},{default:g(()=>[S(p.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),Xe=Je,Qe=T({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(a){const e=a,{forwardRef:s}=q(),t=z(),l=h(()=>re(t.baseId,e.value)),m=h(()=>t.contentIds.value.has(e.value)?ie(t.baseId,e.value):void 0),p=h(()=>e.value===t.modelValue.value);return(d,c)=>(y(),w(o(ze),{"as-child":"",focusable:!d.disabled,active:p.value},{default:g(()=>[C(o(M),{id:l.value,ref:o(s),role:"tab",type:d.as==="button"?"button":void 0,as:d.as,"as-child":d.asChild,"aria-selected":p.value?"true":"false","aria-controls":m.value,"data-state":p.value?"active":"inactive",disabled:d.disabled,"data-disabled":d.disabled?"":void 0,"data-orientation":o(t).orientation.value,onMousedown:c[0]||(c[0]=xe(i=>{!d.disabled&&i.ctrlKey===!1?o(t).changeModelValue(d.value):i.preventDefault()},["left"])),onKeydown:c[1]||(c[1]=Pe(i=>o(t).changeModelValue(d.value),["enter","space"])),onFocus:c[2]||(c[2]=()=>{const i=o(t).activationMode!=="manual";!p.value&&!d.disabled&&i&&o(t).changeModelValue(d.value)})},{default:g(()=>[S(d.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),et=Qe;const tt=T({__name:"Tabs",props:{defaultValue:{},orientation:{},dir:{},activationMode:{},modelValue:{},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:["update:modelValue"],setup(a,{emit:e}){const s=a,t=e,l=$(s,"class"),m=ve(l,t);return(p,d)=>(y(),w(o(Ye),O({"data-slot":"tabs"},o(m),{class:o(V)("flex flex-col gap-2",s.class)}),{default:g(c=>[S(p.$slots,"default",Ae(Ee(c)))]),_:3},16,["class"]))}}),at=T({__name:"TabsContent",props:{value:{},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(a){const e=a,s=$(e,"class");return(t,l)=>(y(),w(o(Ze),O({"data-slot":"tabs-content",class:o(V)("flex-1 outline-none",e.class)},o(s)),{default:g(()=>[S(t.$slots,"default")]),_:3},16,["class"]))}}),ot=T({__name:"TabsList",props:{loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(a){const e=a,s=$(e,"class");return(t,l)=>(y(),w(o(Xe),O({"data-slot":"tabs-list"},o(s),{class:o(V)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",e.class)}),{default:g(()=>[S(t.$slots,"default")]),_:3},16,["class"]))}}),st=T({__name:"TabsTrigger",props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(a){const e=a,s=$(e,"class"),t=ge(s);return(l,m)=>(y(),w(o(et),O({"data-slot":"tabs-trigger",class:o(V)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e.class)},o(t)),{default:g(()=>[S(l.$slots,"default")]),_:3},16,["class"]))}}),nt={key:0,class:"text-xs text-destructive"},lt={key:0,class:"mb-3 text-xs text-destructive"},rt=T({name:"UsageAnalyticsTokenUsageTabsPanel",__name:"TokenUsageTabsPanel",props:{dailyItems:{},errorMessage:{},fetchPage:{},loading:{type:Boolean},weeklyItems:{},monthlyItems:{},sessionItems:{},dailyPagination:{},weeklyPagination:{},monthlyPagination:{},sessionPagination:{},productName:{default:"Product"}},setup(a){const e=a,s=j("day"),t=j(null),l=[{heading:"Date",label:"Day",value:"day"},{heading:"Week",label:"Week",value:"week"},{heading:"Month",label:"Month",value:"month"},{heading:"Session ID",label:"Session",value:"session"}],m=h(()=>({day:e.dailyItems,month:e.monthlyItems,session:e.sessionItems,week:e.weeklyItems})),p=h(()=>({day:e.dailyPagination??f(e.dailyItems),month:e.monthlyPagination??f(e.monthlyItems),session:e.sessionPagination??f(e.sessionItems),week:e.weeklyPagination??f(e.weeklyItems)})),d=h(()=>Object.fromEntries(l.map(n=>{const v=m.value[n.value],b=p.value[n.value];return[n.value,{items:v,page:b.page,pageCount:b.pageCount,pagination:b}]}))),c=[{accessorKey:"models",cell:({row:n})=>r(n.original.models),header:"Models"},{accessorKey:"projects",cell:({row:n})=>r(n.original.projects),header:"Projects",meta:{class:"max-w-56 truncate"}},{accessorKey:"sessionCount",header:"Sessions",meta:{class:"text-right tabular-nums"}},{accessorKey:"inputTokens",cell:({row:n})=>B(n.original.inputTokens),header:"Input",meta:{class:"text-right tabular-nums"}},{accessorKey:"outputTokens",cell:({row:n})=>B(n.original.outputTokens),header:"Output",meta:{class:"text-right tabular-nums"}},{accessorKey:"reasoningOutputTokens",cell:({row:n})=>B(n.original.reasoningOutputTokens),header:"Reasoning",meta:{class:"text-right tabular-nums"}},{accessorKey:"cachedInputTokens",cell:({row:n})=>B(n.original.cachedInputTokens),header:"Cache Read",meta:{class:"text-right tabular-nums"}},{accessorKey:"totalTokens",cell:({row:n})=>B(n.original.totalTokens),header:"Total Tokens",meta:{class:"text-right tabular-nums"}},{accessorKey:"costUSD",cell:({row:n})=>pe(n.original.costUSD),header:"Cost",meta:{class:"text-right tabular-nums"}}],i=h(()=>Object.fromEntries(l.map(n=>[n.value,[{accessorKey:"label",cell:({row:v})=>v.original.label,header:n.heading,meta:{class:"max-w-72 truncate font-medium"}},...c]])));async function u(n,v){if(e.fetchPage){t.value=null;try{await e.fetchPage(n,v)}catch(b){t.value=b instanceof Error?b:new Error("Failed to load token usage page.")}}}function r(n){return n.length>0?n.join(", "):"None"}function f(n){return{page:1,pageCount:Math.max(1,Math.ceil(n.length/G)),pageSize:G,total:n.length}}return(n,v)=>{const b=ce,x=st,I=ot,A=fe,E=at,F=tt,K=de;return y(),w(K,{description:`Browse ${a.productName} token consumption by day, week, month, or session.`,icon:"lucide:table-2",title:`${a.productName} Token Usage`},{default:g(()=>[a.errorMessage?(y(),R("p",nt,N(a.errorMessage),1)):a.loading?(y(),R(U,{key:1},[C(b,{class:"h-10 w-64 rounded-md"}),C(b,{class:"mt-4 h-72 w-full rounded-md"})],64)):(y(),w(F,{key:2,modelValue:o(s),"onUpdate:modelValue":v[0]||(v[0]=_=>Fe(s)?s.value=_:null)},{default:g(()=>[C(I,{class:"grid w-full grid-cols-4 sm:w-fit"},{default:g(()=>[(y(),R(U,null,W(l,_=>C(x,{key:_.value,value:_.value},{default:g(()=>[Me(N(_.label),1)]),_:2},1032,["value"])),64))]),_:1}),(y(),R(U,null,W(l,_=>C(E,{key:_.value,class:"mt-4",value:_.value},{default:g(()=>[o(t)?(y(),R("p",lt,N(o(t).message),1)):oe("",!0),C(A,{columns:o(i)[_.value],data:o(d)[_.value].items,"empty-text":`No ${a.productName} token usage found.`,pagination:o(d)[_.value].pagination,onPageChange:D=>u(_.value,D)},null,8,["columns","data","empty-text","pagination","onPageChange"])]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"]))]),_:1},8,["description","title"])}}}),ft=Object.assign(rt,{__name:"UsageAnalyticsTokenUsageTabsPanel"});export{ot as _,st as a,at as b,ft as c,tt as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as Y,t as V,q as G,f as ee,g as I,b as se,d as $,D as B,r as ae,s as te}from"./DFbWcbwl.js";import{_ as oe,a as ne,b as ie,f as re,c as L,d as le,e as F,g as ce,h as O,u as de,i as ge,j as ue,k as j}from"./DjeKkZG3.js";import{c as me}from"./BXbx6JCB.js";import{e as M,M as he,o as c,g as U,w as p,c as m,t as f,F as R,a as l,b as t,i as s,l as z,G as o,q as pe,s as ye,E as fe,R as we,S as ke,T as be,U as Pe,V as xe,P as ve}from"./nv0LjcWu.js";import{u as K}from"./CXOkrwUP.js";import"./DaoeXHW_.js";import"./BJWBp9U3.js";const Ue={key:0,class:"text-xs text-destructive"},_e={class:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-3"},Te={class:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-3"},Se={class:"rounded-md border px-3 py-2"},Re={class:"mt-1 text-lg font-semibold tabular-nums"},De={class:"rounded-md border px-3 py-2"},Me={class:"mt-1 text-lg font-semibold tabular-nums"},Ce={class:"rounded-md border px-3 py-2"},Ee={class:"mt-1 text-lg font-semibold tabular-nums"},Ae={key:0,class:"mb-3 text-xs text-destructive"},Ne=M({name:"UsageAnalyticsSessionUsageTable",__name:"SessionUsageTable",props:{errorMessage:{},fetchPage:{},items:{},loading:{type:Boolean},pagination:{},productName:{default:"Product"}},setup(e){const n=e,g=o(()=>({items:n.items,pagination:n.pagination??{page:1,pageCount:Math.max(1,Math.ceil(n.items.length/B)),pageSize:B,total:n.items.length}})),{error:d,pageData:i,setPage:u}=Y(g,n.fetchPage),w=[{accessorKey:"sessionId",cell:({row:a})=>a.original.sessionId,header:"Session ID",meta:{class:"max-w-80 truncate font-mono text-xs"}},{accessorKey:"project",header:"Project",meta:{class:"font-medium"}},{accessorKey:"threadName",header:"Thread",meta:{class:"max-w-64 truncate"}},{accessorKey:"model",header:"Model"},{accessorKey:"startedAt",cell:({row:a})=>x(a.original.startedAt),header:"Started",meta:{class:"whitespace-nowrap"}},{accessorKey:"duration",header:"Duration",meta:{class:"text-right tabular-nums"}},{accessorKey:"inputTokens",cell:({row:a})=>$(a.original.inputTokens),header:"Input",meta:{class:"text-right tabular-nums"}},{accessorKey:"outputTokens",cell:({row:a})=>$(a.original.outputTokens),header:"Output",meta:{class:"text-right tabular-nums"}},{accessorKey:"tokenTotal",cell:({row:a})=>$(a.original.tokenTotal),header:"Total Tokens",meta:{class:"text-right tabular-nums"}},{accessorKey:"costUSD",cell:({row:a})=>I(a.original.costUSD),header:"Cost",meta:{class:"text-right tabular-nums"}}],k=o(()=>i.value.items.reduce((a,r)=>a+r.costUSD,0)),b=o(()=>i.value.items.reduce((a,r)=>a+r.tokenTotal,0)),P=o(()=>i.value.pagination.total);he(()=>n.fetchPage,a=>{a&&i.value.pagination.page!==1&&u(1)});function x(a){return new Intl.DateTimeFormat("en-US",{day:"2-digit",hour:"2-digit",minute:"2-digit",month:"short"}).format(new Date(a))}return(a,r)=>{const y=G,_=se,T=V;return c(),U(T,{description:`Each row maps one ${e.productName} session to its session-level token consumption.`,icon:"lucide:file-json-2",title:`${e.productName} Session Statistics`},{default:p(()=>[e.errorMessage?(c(),m("p",Ue,f(e.errorMessage),1)):e.loading?(c(),m(R,{key:1},[l("div",_e,[t(y,{class:"h-20 w-full rounded-md"}),t(y,{class:"h-20 w-full rounded-md"}),t(y,{class:"h-20 w-full rounded-md"})]),t(y,{class:"h-72 w-full rounded-md"})],64)):(c(),m(R,{key:2},[l("div",Te,[l("div",Se,[r[0]||(r[0]=l("p",{class:"text-xs text-muted-foreground"}," Sessions ",-1)),l("p",Re,f(s(P)),1)]),l("div",De,[r[1]||(r[1]=l("p",{class:"text-xs text-muted-foreground"}," Tokens ",-1)),l("p",Me,f(("formatCompactNumber"in a?a.formatCompactNumber:s(ee))(s(b))),1)]),l("div",Ce,[r[2]||(r[2]=l("p",{class:"text-xs text-muted-foreground"}," Spend ",-1)),l("p",Ee,f(("formatCurrency"in a?a.formatCurrency:s(I))(s(k))),1)])]),s(d)?(c(),m("p",Ae,f(s(d).message),1)):z("",!0),t(_,{columns:w,data:s(i).items,"empty-text":`No ${e.productName} sessions found.`,pagination:s(i).pagination,onPageChange:s(u)},null,8,["data","empty-text","pagination","onPageChange"])],64))]),_:1},8,["description","title"])}}}),$e=Object.assign(Ne,{__name:"UsageAnalyticsSessionUsageTable"}),je={class:"bg-background border border-input rounded-xl shadow-xs min-h-0 flex-1 overflow-y-auto"},Ke={class:"grid content-start p-4 space-y-3"},Ie={key:0,class:"text-xs text-destructive"},Be={class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4"},Le={key:0,class:"text-xs text-destructive"},Fe=M({name:"DashboardTokenConsumptionDashboard",__name:"TokenConsumptionDashboard",props:{dailyRows:{},dailyRowsPagination:{},dailyTokenUsage:{},errorMessage:{},fetchSessionUsagePage:{type:Function},fetchTokenUsagePage:{type:Function},insightsErrorMessage:{},insightsLoading:{type:Boolean},loading:{type:Boolean},monthlyModelUsage:{},monthlyRows:{},monthlyRowsPagination:{},overviewCards:{},productName:{},projectUsage:{},sessionErrorMessage:{},sessionLoading:{type:Boolean},sessionRows:{},sessionRowsPagination:{},sessionUsage:{},sessionUsagePagination:{},weeklyRows:{},weeklyRowsPagination:{}},setup(e){return(n,g)=>{const d=G,i=V,u=ae,w=te,k=oe,b=ne,P=ie,x=me,a=$e;return c(),m("div",je,[l("div",Ke,[l("div",{class:pe(s(ye)("relative flex items-center gap-2 mb-4 text-foreground font-medium","after:content-[ ]","after:absolute after:w-px after:h-full after:rounded-2xl","after:border-l-2 after:border-amber-500/50 after:-ml-2 ml-2"))},[g[0]||(g[0]=l("span",{class:"capitalize"},"agent:",-1)),l("span",null,f(e.productName),1)],2),e.errorMessage?(c(),m("p",Ie,f(e.errorMessage),1)):z("",!0),e.loading?(c(),m(R,{key:1},[l("div",Be,[(c(),m(R,null,fe(4,r=>t(d,{key:r,class:"h-28 rounded-md"})),64))]),t(u,null,{default:p(()=>[t(i,{class:"md:col-span-8",description:"Monthly token trends by model",icon:"solar:cpu-line-duotone",title:"Model Usage"},{default:p(()=>[t(d,{class:"h-72 w-full rounded-md"})]),_:1}),t(i,{class:"md:col-span-4",description:"Best performers by spend",icon:"lucide:folder-git-2",title:"Top Projects"},{default:p(()=>[t(d,{class:"h-72 w-full rounded-md"})]),_:1}),t(i,{class:"md:col-span-12",description:`${e.productName} token usage across the heatmap range`,icon:"lucide:chart-area",title:`${e.productName} Token Heatmap`},{default:p(()=>[t(d,{class:"h-80 w-full rounded-md"})]),_:1},8,["description","title"]),t(i,{class:"md:col-span-12",description:`Browse ${e.productName} token consumption by day, week, month, or session.`,icon:"lucide:table-2",title:`${e.productName} Token Usage`},{default:p(()=>[t(d,{class:"h-72 w-full rounded-md"})]),_:1},8,["description","title"]),t(i,{class:"md:col-span-12",description:`Each row maps one ${e.productName} session to its session-level token consumption.`,icon:"lucide:file-json-2",title:`${e.productName} Session Statistics`},{default:p(()=>[t(d,{class:"h-72 w-full rounded-md"})]),_:1},8,["description","title"])]),_:1})],64)):(c(),m(R,{key:2},[t(w,{cards:e.overviewCards},null,8,["cards"]),t(u,null,{default:p(()=>[t(k,{"monthly-items":e.monthlyModelUsage,class:"md:col-span-8"},null,8,["monthly-items"]),e.insightsLoading||e.insightsErrorMessage?(c(),U(i,{key:0,class:"md:col-span-4",description:"Best performers by spend",icon:"lucide:folder-git-2",title:"Top Projects"},{default:p(()=>[e.insightsErrorMessage?(c(),m("p",Le,f(e.insightsErrorMessage),1)):(c(),U(d,{key:1,class:"h-72 w-full rounded-md"}))]),_:1})):(c(),U(b,{key:1,items:e.projectUsage,class:"md:col-span-4"},null,8,["items"])),t(P,{items:e.dailyTokenUsage,class:"md:col-span-12",title:`${e.productName} Token Heatmap`},null,8,["items","title"]),t(x,{"daily-items":e.dailyRows,"daily-pagination":e.dailyRowsPagination,"error-message":e.insightsErrorMessage,"fetch-page":e.fetchTokenUsagePage,loading:e.insightsLoading,"monthly-items":e.monthlyRows,"monthly-pagination":e.monthlyRowsPagination,"product-name":e.productName,"session-items":e.sessionRows,"session-pagination":e.sessionRowsPagination,"weekly-items":e.weeklyRows,"weekly-pagination":e.weeklyRowsPagination,class:"md:col-span-12"},null,8,["daily-items","daily-pagination","error-message","fetch-page","loading","monthly-items","monthly-pagination","product-name","session-items","session-pagination","weekly-items","weekly-pagination"]),t(a,{"error-message":e.sessionErrorMessage,"fetch-page":e.fetchSessionUsagePage,items:e.sessionUsage,loading:e.sessionLoading,pagination:e.sessionUsagePagination,"product-name":e.productName,class:"md:col-span-12"},null,8,["error-message","fetch-page","items","loading","pagination","product-name"])]),_:1})],64))])])}}}),Oe=Object.assign(Fe,{__name:"DashboardTokenConsumptionDashboard"});function Ve(e){const n=o(()=>we(e)),{data:g,error:d,refresh:i,status:u}=K(()=>`analysis:agent:${n.value}:core`,()=>re(n.value),{default:L,watch:[n]}),{clear:w,data:k,error:b,execute:P,refresh:x,status:a}=K(()=>`analysis:agent:${n.value}:insights`,()=>le(n.value),{default:F,immediate:!1,server:!1}),{clear:r,data:y,error:_,execute:T,refresh:C,status:E}=K(()=>`analysis:agent:${n.value}:session`,()=>ce(n.value),{default:O,immediate:!1,server:!1}),v=o(()=>g.value??L()),h=o(()=>k.value??F()),D=o(()=>y.value??O()),{refresh:A}=de({clearDeferred:()=>{w(),r()},coreStatus:u,executeDeferred:()=>Promise.all([P(),T()]),refreshCore:i,refreshDeferred:()=>Promise.all([x(),C()])});return{dailyRows:o(()=>v.value.dailyRows),dailyRowsPagination:o(()=>v.value.dailyRowsPagination),dailyTokenUsage:o(()=>v.value.dailyTokenUsage),error:d,fetchSessionUsagePage:S=>ue(n.value,S),fetchTokenUsagePage:(S,N)=>ge(n.value,S,N),insightsError:b,insightsStatus:a,monthlyModelUsage:o(()=>v.value.monthlyModelUsage),monthlyRows:o(()=>h.value.monthlyRows),monthlyRowsPagination:o(()=>h.value.monthlyRowsPagination),overviewCards:o(()=>v.value.overviewCards),projectUsage:o(()=>h.value.projectUsage),refresh:A,sessionError:_,sessionRows:o(()=>h.value.sessionRows),sessionRowsPagination:o(()=>h.value.sessionRowsPagination),sessionStatus:E,sessionUsage:o(()=>D.value.sessionUsage),sessionUsagePagination:o(()=>D.value.sessionUsagePagination),status:u,weeklyRows:o(()=>h.value.weeklyRows),weeklyRowsPagination:o(()=>h.value.weeklyRowsPagination)}}const Ge=M({name:"DashboardProductPage",__name:"ProductPage",props:{productKey:{},productName:{}},setup(e){const n=e,{dailyRows:g,dailyRowsPagination:d,dailyTokenUsage:i,error:u,fetchSessionUsagePage:w,fetchTokenUsagePage:k,insightsError:b,insightsStatus:P,monthlyModelUsage:x,monthlyRows:a,monthlyRowsPagination:r,overviewCards:y,projectUsage:_,sessionError:T,sessionRows:C,sessionRowsPagination:E,sessionStatus:v,sessionUsage:h,sessionUsagePagination:D,status:A,weeklyRows:S,weeklyRowsPagination:N}=Ve(ke(n,"productKey")),{errorText:H,showSkeleton:q}=j(A,u),{errorText:J,showSkeleton:Z}=j(P,b),{errorText:Q,showSkeleton:W}=j(v,T);return(He,qe)=>{const X=Oe;return c(),U(X,{"daily-rows":s(g),"daily-rows-pagination":s(d),"daily-token-usage":s(i),"error-message":s(H),"fetch-session-usage-page":s(w),"fetch-token-usage-page":s(k),"insights-error-message":s(J),"insights-loading":s(Z),loading:s(q),"monthly-model-usage":s(x),"monthly-rows":s(a),"monthly-rows-pagination":s(r),"overview-cards":s(y),"product-name":e.productName,"project-usage":s(_),"session-error-message":s(Q),"session-loading":s(W),"session-rows":s(C),"session-rows-pagination":s(E),"session-usage":s(h),"session-usage-pagination":s(D),"weekly-rows":s(S),"weekly-rows-pagination":s(N)},null,8,["daily-rows","daily-rows-pagination","daily-token-usage","error-message","fetch-session-usage-page","fetch-token-usage-page","insights-error-message","insights-loading","loading","monthly-model-usage","monthly-rows","monthly-rows-pagination","overview-cards","product-name","project-usage","session-error-message","session-loading","session-rows","session-rows-pagination","session-usage","session-usage-pagination","weekly-rows","weekly-rows-pagination"])}}}),ze=Object.assign(Ge,{__name:"DashboardProductPage"}),ss=M({__name:"[product]",setup(e){const n=be(),g=Pe(n.params.product);if(!g)throw xe({status:404,message:"Page not found"});return(d,i)=>{const u=ze;return c(),U(u,{"product-key":s(g),"product-name":s(ve)[s(g)].label},null,8,["product-key","product-name"])}}});export{ss as default};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import{w as St,x as At,y as De,B as ae,E as Tt,F as Ye,G as ce,H as ee,I as Y,J as Xe,K as q,L as ke,M as he,N as we,O as qe,P as I,Q as $t,R as Ke,T as Dt,U as wt,X as Ct,V as ot,W as te,Y as it,Z as Mt,$ as Pt,a0 as de,a1 as Ce,a2 as Rt,a3 as Ee,a4 as Ut,a5 as Ze,a6 as Ae,a7 as Et,a8 as Lt,a9 as jt,aa as rt,ab as Ht,ac as Ot,ad as Vt,ae as Wt,af as Gt,ag as He,ah as Oe,ai as Bt,aj as Nt,ak as lt,_ as Ve,S as ct,C as zt,a as Te,z as We,A as Ft,t as ye,f as ie,e as $e,g as ge,c as Je,q as dt,l as Me,u as It,b as Yt,d as fe,D as Qe,r as Xt,s as qt}from"./DFbWcbwl.js";import{l as Kt,m as et,n as Zt,o as tt,p as at,q as Jt,r as nt,u as Qt,k as Pe,_ as ea,a as ta,b as aa}from"./DjeKkZG3.js";import{e as se,$ as na,k as sa,M as me,a0 as Ge,o as T,c as j,h as oa,r as Be,Y as Re,H as ut,a7 as Ue,X as ht,L as gt,a1 as mt,G as R,B as ia,C as ra,g as z,w as O,i as u,b as D,l as ve,a as M,D as re,t as G,F as ne,E as be,Q as la,P as st,q as ca}from"./nv0LjcWu.js";import{u as xe}from"./CXOkrwUP.js";import"./DaoeXHW_.js";const da=Object.assign(Object.assign({},St),{tooltip:void 0,annotations:void 0});class ua extends At{constructor(t,e,n){var r;super(t),this._defaultConfig=da,this.config=this._defaultConfig,e&&(this.updateContainer(e,!0),this.component=e.component),n&&this.setData(n,!0),!((r=this.component)===null||r===void 0)&&r.datamodel.data&&this.render()}setData(t,e){var n;const{config:r}=this;this.component&&this.component.setData(t),e||this.render(),(n=r.tooltip)===null||n===void 0||n.hide()}updateContainer(t,e){super.updateContainer(t),this._removeAllChildren(),this.component=t.component,t.sizing&&(this.component.sizing=t.sizing),this.element.appendChild(this.component.element);const n=t.tooltip;n&&(n.hasContainer()||n.setContainer(this._container),n.setComponents([this.component]));const r=t.annotations;r&&this.element.appendChild(r.element),this.element.appendChild(this._svgDefs.node()),this.element.appendChild(this._svgDefsExternal.node()),e||this.render()}updateComponent(t,e){this.component.setConfig(t),e||this.render()}update(t,e,n){t&&this.updateContainer(t,!0),e&&this.updateComponent(e,!0),n&&this.setData(n,!0),this.render()}getFitWidthScale(){const{config:t,component:e}=this,n=e;if(!n.getWidth)return 1;const r=n.getWidth()+t.margin.left+t.margin.right;return this.width/r}_preRender(){var t,e;super._preRender(),this.component.setSize(this.width,this.height,this.containerWidth,this.containerHeight),this.component.setContainerMargin(this.config.margin),(t=this.config.annotations)===null||t===void 0||t.setSize(this.width,this.height,this.containerWidth,this.containerHeight),(e=this.config.annotations)===null||e===void 0||e.setContainerMargin(this.config.margin)}_render(t){var e,n;const{config:r,component:c}=this;super._render(t),c.g.attr("transform",`translate(${r.margin.left},${r.margin.top})`),c.render(t),(e=r.annotations)===null||e===void 0||e.render(t),r.tooltip&&r.tooltip.update(),(n=r.onRenderComplete)===null||n===void 0||n.call(r,this.svg.node(),r.margin,this.containerWidth,this.containerHeight,this.width,this.height)}render(t=this.config.duration){const{config:e,component:n}=this;if(e.sizing===De.Extend||e.sizing===De.FitWidth){const r=e.sizing===De.FitWidth,c=n,s=c.getWidth()+e.margin.left+e.margin.right,a=c.getHeight()+e.margin.top+e.margin.bottom,d=r?this.getFitWidthScale():1,i=this.svg.attr("width"),o=this.svg.attr("height"),m=s*d,h=a*d,b=i||o;ae(this.svg,b?t:0).attr("width",m).attr("height",h).attr("viewBox",`0 0 ${s} ${r?h:a}`).attr("preserveAspectRatio","xMinYMin")}else this.svg.attr("width",this.config.width||this.containerWidth).attr("height",this.config.height||this.containerHeight);this._resizeObserver||this._setUpResizeObserver(),cancelAnimationFrame(this._renderAnimationFrameId),this._renderAnimationFrameId=requestAnimationFrame(()=>{this._preRender(),this._render(t)})}_onResize(){var t;const{config:e}=this;super._onResize(),(t=e.tooltip)===null||t===void 0||t.hide()}destroy(){var t,e;const{component:n,config:r}=this;super.destroy(),n?.destroy(),(t=r.tooltip)===null||t===void 0||t.destroy(),(e=r.annotations)===null||e===void 0||e.destroy()}}function ha(g){return g.innerRadius}function ga(g){return g.outerRadius}function ma(g){return g.startAngle}function pa(g){return g.endAngle}function fa(g){return g&&g.padAngle}function va(g,t,e,n,r,c,s,a){var d=e-g,i=n-t,o=s-r,m=a-c,h=m*d-o*i;if(!(h*h<q))return h=(o*(t-c)-m*(g-r))/h,[g+h*d,t+h*i]}function _e(g,t,e,n,r,c,s){var a=g-e,d=t-n,i=(s?c:-c)/he(a*a+d*d),o=i*d,m=-i*a,h=g+o,b=t+m,y=e+o,k=n+m,l=(h+y)/2,S=(b+k)/2,U=y-h,p=k-b,v=U*U+p*p,_=r-c,w=h*k-y*b,W=(p<0?-1:1)*he($t(0,_*_*v-w*w)),A=(w*p-U*W)/v,C=(-w*U-p*W)/v,H=(w*p+U*W)/v,B=(-w*U+p*W)/v,N=A-l,x=C-S,P=H-l,F=B-S;return N*N+x*x>P*P+F*F&&(A=H,C=B),{cx:A,cy:C,x01:-o,y01:-m,x11:A*(r/_-1),y11:C*(r/_-1)}}function ya(){var g=ha,t=ga,e=Y(0),n=null,r=ma,c=pa,s=fa,a=null,d=Tt(i);function i(){var o,m,h=+g.apply(this,arguments),b=+t.apply(this,arguments),y=r.apply(this,arguments)-Xe,k=c.apply(this,arguments)-Xe,l=qe(k-y),S=k>y;if(a||(a=o=d()),b<h&&(m=b,b=h,h=m),!(b>q))a.moveTo(0,0);else if(l>ke-q)a.moveTo(b*ce(y),b*ee(y)),a.arc(0,0,b,y,k,!S),h>q&&(a.moveTo(h*ce(k),h*ee(k)),a.arc(0,0,h,k,y,S));else{var U=y,p=k,v=y,_=k,w=l,W=l,A=s.apply(this,arguments)/2,C=A>q&&(n?+n.apply(this,arguments):he(h*h+b*b)),H=we(qe(b-h)/2,+e.apply(this,arguments)),B=H,N=H,x,P;if(C>q){var F=Ke(C/h*ee(A)),Z=Ke(C/b*ee(A));(w-=F*2)>q?(F*=S?1:-1,v+=F,_-=F):(w=0,v=_=(y+k)/2),(W-=Z*2)>q?(Z*=S?1:-1,U+=Z,p-=Z):(W=0,U=p=(y+k)/2)}var f=b*ce(U),E=b*ee(U),L=h*ce(_),V=h*ee(_);if(H>q){var X=b*ce(p),Q=b*ee(p),oe=h*ce(v),pe=h*ee(v),J;if(l<Ye)if(J=va(f,E,oe,pe,X,Q,L,V)){var ue=f-J[0],$=E-J[1],K=X-J[0],le=Q-J[1],Fe=1/ee(Dt((ue*K+$*le)/(he(ue*ue+$*$)*he(K*K+le*le)))/2),Ie=he(J[0]*J[0]+J[1]*J[1]);B=we(H,(h-Ie)/(Fe-1)),N=we(H,(b-Ie)/(Fe+1))}else B=N=0}W>q?N>q?(x=_e(oe,pe,f,E,b,N,S),P=_e(X,Q,L,V,b,N,S),a.moveTo(x.cx+x.x01,x.cy+x.y01),N<H?a.arc(x.cx,x.cy,N,I(x.y01,x.x01),I(P.y01,P.x01),!S):(a.arc(x.cx,x.cy,N,I(x.y01,x.x01),I(x.y11,x.x11),!S),a.arc(0,0,b,I(x.cy+x.y11,x.cx+x.x11),I(P.cy+P.y11,P.cx+P.x11),!S),a.arc(P.cx,P.cy,N,I(P.y11,P.x11),I(P.y01,P.x01),!S))):(a.moveTo(f,E),a.arc(0,0,b,U,p,!S)):a.moveTo(f,E),!(h>q)||!(w>q)?a.lineTo(L,V):B>q?(x=_e(L,V,X,Q,h,-B,S),P=_e(f,E,oe,pe,h,-B,S),a.lineTo(x.cx+x.x01,x.cy+x.y01),B<H?a.arc(x.cx,x.cy,B,I(x.y01,x.x01),I(P.y01,P.x01),!S):(a.arc(x.cx,x.cy,B,I(x.y01,x.x01),I(x.y11,x.x11),!S),a.arc(0,0,h,I(x.cy+x.y11,x.cx+x.x11),I(P.cy+P.y11,P.cx+P.x11),S),a.arc(P.cx,P.cy,B,I(P.y11,P.x11),I(P.y01,P.x01),!S))):a.arc(0,0,h,_,v,S)}if(a.closePath(),o)return a=null,o+""||null}return i.centroid=function(){var o=(+g.apply(this,arguments)+ +t.apply(this,arguments))/2,m=(+r.apply(this,arguments)+ +c.apply(this,arguments))/2-Ye/2;return[ce(m)*o,ee(m)*o]},i.innerRadius=function(o){return arguments.length?(g=typeof o=="function"?o:Y(+o),i):g},i.outerRadius=function(o){return arguments.length?(t=typeof o=="function"?o:Y(+o),i):t},i.cornerRadius=function(o){return arguments.length?(e=typeof o=="function"?o:Y(+o),i):e},i.padRadius=function(o){return arguments.length?(n=o==null?null:typeof o=="function"?o:Y(+o),i):n},i.startAngle=function(o){return arguments.length?(r=typeof o=="function"?o:Y(+o),i):r},i.endAngle=function(o){return arguments.length?(c=typeof o=="function"?o:Y(+o),i):c},i.padAngle=function(o){return arguments.length?(s=typeof o=="function"?o:Y(+o),i):s},i.context=function(o){return arguments.length?(a=o??null,i):a},i}function ba(g,t){return t<g?-1:t>g?1:t>=g?0:NaN}function xa(g){return g}function _a(){var g=xa,t=ba,e=null,n=Y(0),r=Y(ke),c=Y(0);function s(a){var d,i=(a=wt(a)).length,o,m,h=0,b=new Array(i),y=new Array(i),k=+n.apply(this,arguments),l=Math.min(ke,Math.max(-ke,r.apply(this,arguments)-k)),S,U=Math.min(Math.abs(l)/i,c.apply(this,arguments)),p=U*(l<0?-1:1),v;for(d=0;d<i;++d)(v=y[b[d]=d]=+g(a[d],d,a))>0&&(h+=v);for(t!=null?b.sort(function(_,w){return t(y[_],y[w])}):e!=null&&b.sort(function(_,w){return e(a[_],a[w])}),d=0,m=h?(l-i*p)/h:0;d<i;++d,k=S)o=b[d],v=y[o],S=k+(v>0?v*m:0)+p,y[o]={data:a[o],index:d,value:v,startAngle:k,endAngle:S,padAngle:U};return y}return s.value=function(a){return arguments.length?(g=typeof a=="function"?a:Y(+a),s):g},s.sortValues=function(a){return arguments.length?(t=a,e=null,s):t},s.sort=function(a){return arguments.length?(e=a,t=null,s):e},s.startAngle=function(a){return arguments.length?(n=typeof a=="function"?a:Y(+a),s):n},s.endAngle=function(a){return arguments.length?(r=typeof a=="function"?a:Y(+a),s):r},s.padAngle=function(a){return arguments.length?(c=typeof a=="function"?a:Y(+a),s):c},s}function ka({x:g,y:t,w:e,h:n,tl:r=!1,tr:c=!1,bl:s=!1,br:a=!1,r:d=0}){let i;i=`M${g+d},${t}h${e-2*d}`;let o=c?d:0,m=c?0:d;return i+=`a${o},${o} 0 0 1 ${o},${o}`,i+=`h${m}v${m}`,i+=`v${n-2*d}`,o=a?d:0,m=a?0:d,i+=`a${o},${o} 0 0 1 ${-o},${o}`,i+=`v${m}h${-m}`,i+=`h${2*d-e}`,o=s?d:0,m=s?0:d,i+=`a${o},${o} 0 0 1 ${-o},${-o}`,i+=`h${-m}v${-m}`,i+=`v${2*d-n}`,o=r?d:0,m=r?0:d,i+=`a${o},${o} 0 0 1 ${o},${-o}`,i+=`v${-m}h${m}`,i+="z",i}const Sa=Object.assign(Object.assign({},Ct),{color:void 0,barMaxWidth:void 0,barWidth:void 0,dataStep:void 0,barPadding:0,roundedCorners:2,cursor:null,barMinHeight1Px:!1,barMinHeightZeroValue:null,orientation:ot.Vertical}),pt=te`
|
|
2
|
+
label: stacked-bar-component;
|
|
3
|
+
`,Aa=it`
|
|
4
|
+
:root {
|
|
5
|
+
--vis-stacked-bar-cursor: default;
|
|
6
|
+
--vis-stacked-bar-fill-color: var(--vis-color-main);
|
|
7
|
+
--vis-stacked-bar-stroke-color: none;
|
|
8
|
+
--vis-stacked-bar-stroke-width: 0px;
|
|
9
|
+
--vis-stacked-bar-hover-stroke-width: none;
|
|
10
|
+
--vis-stacked-bar-hover-stroke-color: none;
|
|
11
|
+
|
|
12
|
+
/* Dark Theme */
|
|
13
|
+
--vis-dark-stacked-bar-stroke-color: none;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
body.theme-dark ${`.${pt}`} {
|
|
17
|
+
--vis-stacked-bar-stroke-color: var(--vis-dark-stacked-bar-stroke-color);
|
|
18
|
+
}
|
|
19
|
+
`,Se=te`
|
|
20
|
+
label: bar;
|
|
21
|
+
fill: var(--vis-stacked-bar-fill-color);
|
|
22
|
+
stroke: var(--vis-stacked-bar-stroke-color);
|
|
23
|
+
stroke-width: var(--vis-stacked-bar-stroke-width);
|
|
24
|
+
cursor: var(--vis-stacked-bar-cursor);
|
|
25
|
+
|
|
26
|
+
&:hover {
|
|
27
|
+
stroke-width: var(--vis-stacked-bar-hover-stroke-width);
|
|
28
|
+
stroke: var(--vis-stacked-bar-hover-stroke-color);
|
|
29
|
+
}
|
|
30
|
+
`,Le=te`
|
|
31
|
+
label: barGroup;
|
|
32
|
+
`,ft=te`
|
|
33
|
+
label: barGroupExit;
|
|
34
|
+
`,Ta=Object.freeze(Object.defineProperty({__proto__:null,bar:Se,barGroup:Le,barGroupExit:ft,globalStyles:Aa,root:pt},Symbol.toStringTag,{value:"Module"}));class Ne extends Mt{constructor(t){super(),this._defaultConfig=Sa,this.config=this._defaultConfig,this.getAccessors=()=>Pt(this.config.y)?this.config.y:[this.config.y],this.stacked=!0,this.events={},this._barData=[],t&&this.setConfig(t)}get bleed(){if(this._barData=this._getVisibleData(),this._barData.length===0)return{top:0,bottom:0,left:0,right:0};const t=!this.isVertical()&&this.dataScale.range()[0]>this.dataScale.range()[1],e=this.dataScale.domain(),n=this._getBarWidth()/2,r=this._barData.map((b,y)=>de(b,this.config.x,y)),c=Ce(r),s=Rt(r),a=this.dataScale(c),d=this.dataScale(s),i=this.dataScale.invert(a+(t?n:-n)),o=this.dataScale.invert(d+(t?-n:n)),m=i<=e[0]?this.dataScale(e[0])-this.dataScale(i):0,h=o>e[1]?this.dataScale(o)-this.dataScale(e[1]):0;return{top:this.isVertical()?0:t?-h:m,bottom:this.isVertical()?0:t?-m:h,left:this.isVertical()?m:0,right:this.isVertical()?h:0}}get dataScale(){return this.isVertical()?this.xScale:this.yScale}get valueScale(){return this.isVertical()?this.yScale:this.xScale}isVertical(){return this.config.orientation===ot.Vertical}_render(t){const{config:e}=this,n=Ee(t)?t:e.duration,r=this.getAccessors(),c=Ut(this._barData,0,r,this._prevNegative);this._prevNegative=c.map(y=>!!y.isMostlyNegative);const s=this.g.selectAll(`.${Le}`).data(this._barData,(y,k)=>{var l;return`${(l=Ze(y,e.id,k))!==null&&l!==void 0?l:k}`}),a=(y,k)=>{const l=this.dataScale(de(y,e.x,k)),S=this.isVertical()?l:0,U=this.isVertical()?0:l;return`translate(${S},${U})`},i=s.enter().append("g").attr("class",Le).attr("transform",a).style("opacity",1).merge(s);ae(i,n).attr("transform",a).style("opacity",1);const o=s.exit().attr("class",ft);ae(o,n).style("opacity",0).remove(),ae(o.selectAll(`.${Se}`),n).attr("transform",this.isVertical()?`translate(0,${this._height/3})`:`translate(${this._width/6},0)`);const m=i.selectAll(`.${Se}`).data((y,k)=>c.map((l,S)=>({datum:y,index:k,stacked:l[k],stackIndex:S,isEnding:S===c.length-1||S<=c.length-1&&c[S+1][k][0]!==l[k][1]})).filter(l=>l.stacked[0]!==l.stacked[1]),y=>y.stackIndex),b=m.enter().append("path").attr("class",Se).attr("d",y=>this._getBarPath(y,!0)).style("fill",y=>Ae(y.datum,e.color,y.stackIndex)).merge(m);ae(b,n).attr("d",y=>this._getBarPath(y)).style("fill",y=>Ae(y.datum,e.color,y.stackIndex)).style("cursor",y=>Ze(y.datum,e.cursor,y.stackIndex)),ae(m.exit(),n).style("opacity",0).remove()}_getBarWidth(){const{config:t,datamodel:{data:e}}=this;if(Et(e))return 0;if(t.barWidth)return Ce([t.barWidth,t.barMaxWidth]);const n=this.dataScale.bandwidth,r=this.dataScale.domain?this.dataScale.domain():[];let s=1+(n?r.length:r[1]-r[0])/t.dataStep||!n&&e.filter((i,o)=>{const m=de(i,t.x,o);return m>=r[0]&&m<=r[1]}).length||e.length;!n&&s>=2&&(s+=1);const d=(s<2?1:1-t.barPadding)*(this.isVertical()?this._width:this._height)/s;return Ce([d,t.barMaxWidth])}_getVisibleData(){const{config:t,datamodel:{data:e}}=this,n=this._getBarWidth(),r=e.length<2?0:n/2,c=this.dataScale,s=Math.abs(c.invert(r)-c.invert(0));return e?.filter((d,i)=>{const o=de(d,t.x,i),m=c.domain(),h=+m[0],b=+m[1];return o>=h-s&&o<=b+s})}_getBarPath(t,e=!1){const{config:n}=this,r=this.getAccessors(),c=this._getBarWidth(),s=t.stacked[1]<0,a=t.isEnding,d=de(t.datum,r[t.stackIndex],t.index),i=e?0:Math.abs(this.valueScale(t.stacked[0])-this.valueScale(t.stacked[1])),o=!e&&n.barMinHeight1Px&&i<1&&isFinite(d)&&d!==n.barMinHeightZeroValue?1:i,m=e?this.valueScale(0):this.valueScale(s?t.stacked[0]:t.stacked[1])-(i<1&&n.barMinHeight1Px?1:0),h=-c/2,b=c,y=n.roundedCorners?Ee(n.roundedCorners)?+n.roundedCorners:b/2:0,k=rt(y,0,Math.min(i,b)/2),l=this.yScale.range()[0]>this.yScale.range()[1];return ka({x:this.isVertical()?h:m-o,y:this.isVertical()?m+(l?0:-o):h,w:this.isVertical()?b:o,h:this.isVertical()?o:b,tl:a&&(this.isVertical()?!s&&l||s&&!l:s),tr:a&&(this.isVertical()?!s&&l||s&&!l:!s),br:a&&(this.isVertical()?s&&l||!s&&!l:!s),bl:a&&(this.isVertical()?s&&l||!s&&!l:s),r:k})}getValueScaleExtent(t){const{datamodel:e}=this,n=this.getAccessors(),r=t?this._getVisibleData():e.data;return Lt(r,...n)}getDataScaleExtent(){const{config:t,datamodel:e}=this;return jt(e.data,t.x)}getYDataExtent(t){return this.isVertical()?this.getValueScaleExtent(t):this.getDataScaleExtent()}getXDataExtent(){return this.isVertical()?this.getDataScaleExtent():this.getValueScaleExtent(!1)}}Ne.selectors=Ta;const $a=Object.assign(Object.assign({},Ht),{id:(g,t)=>{var e;return(e=g.id)!==null&&e!==void 0?e:t},value:void 0,angleRange:[0,2*Math.PI],padAngle:0,sortFunction:void 0,cornerRadius:0,color:void 0,radius:void 0,arcWidth:20,centralLabel:void 0,centralSubLabel:void 0,centralSubLabelWrap:!0,showEmptySegments:!1,emptySegmentAngle:.5*Math.PI/180,showBackground:!0,backgroundAngleRange:void 0,centralLabelOffsetX:void 0,centralLabelOffsetY:void 0});function Da(g,t){g.style("fill",e=>Ae(e.data,t.color,e.index)).style("opacity",0).each((e,n,r)=>{const c=r[n],s=(e.startAngle+e.endAngle)/2,a=(e.endAngle-e.startAngle)/2;c._animState={startAngle:s-a,endAngle:s+a,innerRadius:e.innerRadius,outerRadius:e.outerRadius,padAngle:e.padAngle}})}function wa(g,t,e,n){g.style("transition",`fill ${n}ms`).style("fill",c=>Ae(c.data,t.color,c.index));const r=c=>t.showEmptySegments||c.value?1:0;n?ae(g,n).style("opacity",r).attrTween("d",(s,a,d)=>{const i=d[a],o={startAngle:s.startAngle,endAngle:s.endAngle,innerRadius:s.innerRadius,outerRadius:s.outerRadius,padAngle:s.padAngle},m=Ot(i._animState,o);return h=>(i._animState=m(h),e(i._animState))}):g.attr("d",e).style("opacity",r)}function Ca(g,t){ae(g,t).style("opacity",0).remove()}const vt=Array.from({length:4},(g,t)=>{const e=-Math.PI/2+t*Math.PI/2;return[e,e+Math.PI]}),[Vn,Wn,Gn,Bn]=vt,yt=te`
|
|
35
|
+
label: donut-component;
|
|
36
|
+
`,Ma=it`
|
|
37
|
+
:root {
|
|
38
|
+
--vis-donut-central-label-font-size: 16px;
|
|
39
|
+
--vis-donut-central-label-text-color: #5b5f6d;
|
|
40
|
+
// Undefined by default to allow proper fallback to var(--vis-font-family)
|
|
41
|
+
/* --vis-donut-central-label-font-family: */
|
|
42
|
+
--vis-donut-central-label-font-weight: 600;
|
|
43
|
+
|
|
44
|
+
--vis-donut-central-sub-label-font-size: 12px;
|
|
45
|
+
--vis-donut-central-sub-label-text-color: #5b5f6d;
|
|
46
|
+
// Undefined by default to allow proper fallback to var(--vis-font-family)
|
|
47
|
+
/* --vis-donut-central-sub-label-font-family: */
|
|
48
|
+
--vis-donut-central-sub-label-font-weight: 500;
|
|
49
|
+
|
|
50
|
+
--vis-donut-background-color: #E7E9F3;
|
|
51
|
+
--vis-donut-segment-stroke-width: 0;
|
|
52
|
+
// The line segment color variable is not defined by default
|
|
53
|
+
// to allow it to fallback to the donut background color
|
|
54
|
+
/* --vis-donut-segment-stroke-color: none; */
|
|
55
|
+
|
|
56
|
+
--vis-dark-donut-central-label-text-color: #C2BECE;
|
|
57
|
+
--vis-dark-donut-central-sub-label-text-color: #C2BECE;
|
|
58
|
+
--vis-dark-donut-background-color: #18160C;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
body.theme-dark ${`.${yt}`} {
|
|
62
|
+
--vis-donut-central-label-text-color: var(--vis-dark-donut-central-label-text-color);
|
|
63
|
+
--vis-donut-central-sub-label-text-color: var(--vis-dark-donut-central-sub-label-text-color);
|
|
64
|
+
--vis-donut-background-color: var(--vis-dark-donut-background-color);
|
|
65
|
+
}
|
|
66
|
+
`,bt=te`
|
|
67
|
+
label: background;
|
|
68
|
+
fill: var(--vis-donut-background-color);
|
|
69
|
+
`,je=te`
|
|
70
|
+
label: segment;
|
|
71
|
+
stroke-width: var(--vis-donut-segment-stroke-width);
|
|
72
|
+
stroke: var(--vis-donut-segment-stroke-color, var(--vis-donut-background-color));
|
|
73
|
+
`,xt=te`
|
|
74
|
+
label: segment-exit;
|
|
75
|
+
`,_t=te`
|
|
76
|
+
label: central-label;
|
|
77
|
+
text-anchor: middle;
|
|
78
|
+
dominant-baseline: middle;
|
|
79
|
+
font-size: var(--vis-donut-central-label-font-size);
|
|
80
|
+
font-family: var(--vis-donut-central-label-font-family, var(--vis-font-family));
|
|
81
|
+
font-weight: var(--vis-donut-central-label-font-weight);
|
|
82
|
+
fill: var(--vis-donut-central-label-text-color);
|
|
83
|
+
`,kt=te`
|
|
84
|
+
label: central-label;
|
|
85
|
+
text-anchor: middle;
|
|
86
|
+
dominant-baseline: middle;
|
|
87
|
+
font-size: var(--vis-donut-central-sub-label-font-size);
|
|
88
|
+
font-family: var(--vis-donut-central-sub-label-font-family, var(--vis-font-family));
|
|
89
|
+
font-weight: var(--vis-donut-central-sub-label-font-weight);
|
|
90
|
+
fill: var(--vis-donut-central-sub-label-text-color);
|
|
91
|
+
`,Pa=Object.freeze(Object.defineProperty({__proto__:null,background:bt,centralLabel:_t,centralSubLabel:kt,root:yt,segment:je,segmentExit:xt,variables:Ma},Symbol.toStringTag,{value:"Module"}));class ze extends Vt{constructor(t){super(),this._defaultConfig=$a,this.config=this._defaultConfig,this.datamodel=new Wt,this.arcGen=ya(),this.events={},t&&this.setConfig(t),this.arcBackground=this.g.append("path"),this.arcGroup=this.g.append("g"),this.centralLabel=this.g.append("text").attr("class",_t),this.centralSubLabel=this.g.append("text").attr("class",kt)}get bleed(){return{top:0,bottom:0,left:0,right:0}}_render(t){var e,n,r,c,s,a,d,i,o,m,h,b,y,k;const{config:l,datamodel:S,bleed:U}=this,p=S.data.map(($,K)=>({index:K,datum:$})).filter($=>l.showEmptySegments||de($.datum,l.value,$.index)),v=Ee(t)?t:l.duration,[_,w,W,A]=vt.map($=>l.angleRange&&l.angleRange[0]===$[0]&&l.angleRange[1]===$[1]),C=_||W,H=w||A,B=this._width*(H?2:1),N=this._height*(C?2:1),x=l.radius||Math.min(B-U.left-U.right,N-U.top-U.bottom)/2,P=l.arcWidth===0?0:rt(x-l.arcWidth,0,x-1),F=this._height/2+(_?x/2:W?-x/2:0),Z=this._width/2+(A?x/2:w?-x/2:0),f=`translate(${Z},${F})`;this.arcGroup.attr("transform",f),this.arcGen.startAngle($=>$.startAngle).endAngle($=>$.endAngle).innerRadius($=>$.innerRadius).outerRadius($=>$.outerRadius).padAngle($=>$.padAngle).cornerRadius(l.cornerRadius);const L=_a().startAngle((n=(e=l.angleRange)===null||e===void 0?void 0:e[0])!==null&&n!==void 0?n:0).endAngle((c=(r=l.angleRange)===null||r===void 0?void 0:r[1])!==null&&c!==void 0?c:2*Math.PI).padAngle(l.padAngle).value($=>de($.datum,l.value,$.index)||0).sort(($,K)=>{var le;return(le=l.sortFunction)===null||le===void 0?void 0:le.call(l,$.datum,K.datum)})(p).map($=>{const K=Object.assign(Object.assign({},$),{data:$.data.datum,index:$.data.index,innerRadius:P,outerRadius:x});return l.showEmptySegments&&$.endAngle-$.startAngle-$.padAngle<=Number.EPSILON&&(K.endAngle=$.startAngle+Math.max(l.emptySegmentAngle,l.padAngle),K.padAngle=$.padAngle/2),K}),V=this.arcGroup.selectAll(`.${je}`).data(L,$=>l.id($.data,$.index)),X=V.enter().append("path").attr("class",je).call(Da,l),Q=V.merge(X);Q.call(wa,l,this.arcGen,v),Q.sort(($,K)=>K.value-$.value),V.exit().attr("class",xt).call(Ca,v);const oe=w?"start":A?"end":"middle";this.centralLabel.attr("dy",l.centralSubLabel?"-0.55em":null).style("text-anchor",oe).text((s=l.centralLabel)!==null&&s!==void 0?s:null),this.centralSubLabel.attr("dy",l.centralLabel?"0.55em":null).style("text-anchor",oe).text((a=l.centralSubLabel)!==null&&a!==void 0?a:null),l.centralSubLabelWrap&&Gt(this.centralSubLabel,P*1.9);const pe=(l.centralLabelOffsetX||0)+Z;let J=(l.centralLabelOffsetY||0)+F;C&&l.centralLabelOffsetX===void 0&&l.centralLabelOffsetY===void 0&&(J=(_?-this.centralSubLabel.node().getBoundingClientRect().height:W?this.centralLabel.node().getBoundingClientRect().height:0)+F);const ue=`translate(${pe},${J})`;this.centralLabel.attr("transform",ue),this.centralSubLabel.attr("transform",ue),this.arcBackground.attr("class",bt).attr("visibility",l.showBackground?null:"hidden").attr("transform",f),ae(this.arcBackground,v).attr("d",this.arcGen({startAngle:(m=(i=(d=l.backgroundAngleRange)===null||d===void 0?void 0:d[0])!==null&&i!==void 0?i:(o=l.angleRange)===null||o===void 0?void 0:o[0])!==null&&m!==void 0?m:0,endAngle:(k=(b=(h=l.backgroundAngleRange)===null||h===void 0?void 0:h[1])!==null&&b!==void 0?b:(y=l.angleRange)===null||y===void 0?void 0:y[1])!==null&&k!==void 0?k:2*Math.PI,innerRadius:P,outerRadius:x}))}}ze.selectors=Pa;const Ra=se({__name:"index",props:{component:{},tooltip:{},annotations:{},duration:{},margin:{},padding:{},sizing:{},width:{},height:{},svgDefs:{},ariaLabel:{},data:{}},setup(g,{expose:t}){const e=g,{data:n}=na(e),r=He(e);let c;const s=ut({component:void 0,tooltip:void 0,annotations:void 0}),a=Be(),d=()=>{c||a.value&&s.component&&(c=new ua(a.value,{...Ue(s)},n.value))};return sa(()=>{var i;d(),(i=s.component)==null||i.config,c?.updateContainer({...Ue(r.value),...Ue(s)})}),me(n,()=>{c?c.setData(n.value,!0):d()}),Ge(()=>c?.destroy()),Re(Oe,{data:n,update:i=>s.component=i,destroy:()=>s.component=void 0}),Re(Bt,{data:n,update:i=>s.tooltip=i,destroy:()=>{s.tooltip=void 0}}),Re(Nt,{data:n,update:i=>s.annotations=i,destroy:()=>{s.annotations=void 0}}),t({component:c}),(i,o)=>(T(),j("div",{"data-vis-single-container":"",ref_key:"elRef",ref:a,class:"unovis-single-container"},[oa(i.$slots,"default")],512))}}),Ua={"data-vis-component":""},Ea=Ne.selectors,La=se({__name:"index",props:{color:{type:[Function,String,Array,null]},barWidth:{},barMaxWidth:{},dataStep:{},barPadding:{},roundedCorners:{type:[Number,Boolean]},cursor:{type:[Function,String,null]},barMinHeight1Px:{type:Boolean},barMinHeightZeroValue:{},orientation:{},x:{type:[Function,Number,null]},y:{type:[Function,Number,null,Array]},id:{type:Function},xScale:{type:[Object,Function]},yScale:{type:[Object,Function]},excludeFromDomainCalculation:{type:Boolean},duration:{},events:{},attributes:{},data:{}},setup(g,{expose:t}){const e=ht(Oe),n=g,r=R(()=>e.data.value??n.data),c=He(n),s=Be();return gt(()=>{mt(()=>{var a;s.value=new Ne(c.value),(a=s.value)==null||a.setData(r.value),e.update(s.value)})}),Ge(()=>{var a;(a=s.value)==null||a.destroy(),e.destroy()}),me(c,(a,d)=>{var i;lt(a,d)||(i=s.value)==null||i.setConfig(c.value)}),me(r,()=>{var a;(a=s.value)==null||a.setData(r.value)}),t({component:s}),(a,d)=>(T(),j("div",Ua))}}),ja={"data-vis-component":""},Ha=ze.selectors,Oa=se({__name:"index",props:{id:{type:Function},value:{type:[Function,Number,null]},angleRange:{},padAngle:{},sortFunction:{type:Function},cornerRadius:{},color:{type:[Function,String,Array,null]},radius:{},arcWidth:{},centralLabel:{},centralSubLabel:{},centralSubLabelWrap:{type:Boolean},showEmptySegments:{type:Boolean},emptySegmentAngle:{},showBackground:{type:Boolean},backgroundAngleRange:{},centralLabelOffsetX:{},centralLabelOffsetY:{},duration:{},events:{},attributes:{},data:{}},setup(g,{expose:t}){const e=ht(Oe),n=g,r=R(()=>e.data.value??n.data),c=He(n),s=Be();return gt(()=>{mt(()=>{var a;s.value=new ze(c.value),(a=s.value)==null||a.setData(r.value),e.update(s.value)})}),Ge(()=>{var a;(a=s.value)==null||a.destroy(),e.destroy()}),me(c,(a,d)=>{var i;lt(a,d)||(i=s.value)==null||i.setConfig(c.value)}),me(r,()=>{var a;(a=s.value)==null||a.setData(r.value)}),t({component:s}),(a,d)=>(T(),j("div",ja))}}),Va={key:0,class:"pointer-events-none absolute inset-0 z-10"},Wa={key:1,class:"flex h-72 items-center justify-center rounded-md border border-dashed text-sm text-muted-foreground"},Ga={class:"mt-4 flex flex-wrap items-center justify-center gap-3 text-xs text-muted-foreground"},Ba={class:"font-medium text-foreground tabular-nums"},Na=288,za=se({__name:"TodayUsageTrendPanel",props:{items:{}},setup(g){const t=g,e={bottom:32,left:56,right:28,top:8},n={left:8,right:18},r=[0,void 0],c=ia("chartRoot"),{width:s}=ra(c),a=ut({hour:null,pointerY:null}),d=R(()=>la.map(f=>{const E=t.items.reduce((L,V)=>L+(V.agents[f]?.totalTokens??0),0);return{color:f==="codex"?"#94a3b8":st[f].color,key:f,label:st[f].label,totalTokens:E}}).filter(f=>f.totalTokens>0).sort((f,E)=>E.totalTokens-f.totalTokens)),i=R(()=>t.items.map(f=>({costUSD:f.costUSD,hour:f.hour,label:f.label,totalTokens:f.totalTokens,values:Object.fromEntries(d.value.map(E=>[E.key,f.agents[E.key]?.totalTokens??0]))}))),o=R(()=>d.value.map(f=>E=>E.values[f.key]??0)),m=R(()=>Object.fromEntries(d.value.map(f=>[f.key,{color:f.color,label:f.label}]))),h=R(()=>d.value.map(f=>`
|
|
92
|
+
<linearGradient id="${Z(f.key)}" x1="0" y1="0" x2="0" y2="1">
|
|
93
|
+
<stop offset="0%" stop-color="${f.color}" stop-opacity="0.42" />
|
|
94
|
+
<stop offset="100%" stop-color="${f.color}" stop-opacity="0.07" />
|
|
95
|
+
</linearGradient>
|
|
96
|
+
`).join("")),b=[0,23],y=[0,4,8,12,16,20,23],k=R(()=>e.left),l=R(()=>e.top),S=R(()=>Math.max(s.value-e.left-e.right,0)),U=R(()=>Math.max(Na-e.top-e.bottom,0)),p=R(()=>l.value+U.value),v=R(()=>Math.max(S.value-n.left-n.right,0)),_=R(()=>Math.max(...i.value.map(f=>f.totalTokens),0)),w=R(()=>{if(a.hour===null||a.pointerY===null)return null;const f=i.value[a.hour];if(!f||S.value<=0||U.value<=0)return null;const E=k.value+n.left+a.hour/23*v.value,L=Je(a.pointerY,l.value,p.value),V=U.value<=0?0:1-(L-l.value)/U.value;return{x:E,xLabel:f.label,y:L,yLabel:ie(V*_.value)}});function W(f,E){return d.value[E]?`url(#${Z(d.value[E].key)})`:"#2563eb"}function A(f){return f?.hour??0}function C(f,E){return d.value[E]?.color??"#2563eb"}function H(f,E){return d.value[E]?.color??"#2563eb"}function B(f){return f instanceof Date?"":t.items[f]?.label??""}function N(f){return f instanceof Date?"":ie(f)}function x(f){if(!f)return"";const E=d.value.map(L=>({color:L.color,costUSD:t.items[f.hour]?.agents[L.key]?.costUSD??0,label:L.label,totalTokens:f.values[L.key]??0})).filter(L=>L.totalTokens>0||L.costUSD>0).sort((L,V)=>V.totalTokens-L.totalTokens);return`
|
|
97
|
+
<div class="grid min-w-56 gap-2 rounded-md border bg-background px-3 py-2 text-xs shadow-lg">
|
|
98
|
+
<div class="flex items-center justify-between gap-4">
|
|
99
|
+
<span class="font-medium text-foreground">${$e(f.label)}</span>
|
|
100
|
+
<span class="font-mono text-muted-foreground">${ge(f.costUSD)}</span>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="flex items-center justify-between gap-4 border-b pb-2 text-muted-foreground">
|
|
103
|
+
<span>Total Tokens</span>
|
|
104
|
+
<span class="font-mono font-semibold text-foreground">${ie(f.totalTokens)}</span>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="grid gap-1 text-muted-foreground">
|
|
107
|
+
${E.map(L=>`
|
|
108
|
+
<div class="flex items-center justify-between gap-4">
|
|
109
|
+
<span class="flex min-w-0 items-center gap-2">
|
|
110
|
+
<span class="size-2 shrink-0 rounded-sm" style="background-color: ${L.color}"></span>
|
|
111
|
+
<span class="truncate">${$e(L.label)}</span>
|
|
112
|
+
</span>
|
|
113
|
+
<span class="font-mono font-medium text-foreground">${ie(L.totalTokens)} / ${ge(L.costUSD)}</span>
|
|
114
|
+
</div>
|
|
115
|
+
`).join("")}
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
`}function P(f){const E=c.value?.getBoundingClientRect();if(!E||t.items.length===0)return;const L=f.clientX-E.left,V=f.clientY-E.top,X=k.value+S.value,Q=k.value+n.left,oe=X-n.right;if(L<k.value||L>X||V<l.value||V>p.value||v.value<=0){F();return}a.hour=Math.round(Je((L-Q)/Math.max(oe-Q,1)*23,0,23)),a.pointerY=V}function F(){a.hour=null,a.pointerY=null}function Z(f){return`today-usage-trend-${f}`}return(f,E)=>{const L=Ve,V=ye;return T(),z(V,{description:"Hourly token and spend by agent for today",icon:"lucide:chart-area",title:"Today's Token Trend"},{default:O(()=>[u(d).length>0?(T(),j("div",{key:0,ref_key:"chartRoot",ref:c,class:"relative",onPointerleave:F,onPointermove:P},[D(L,{class:"h-72 w-full",config:u(m)},{default:O(()=>[D(u(ct),{"auto-margin":!1,data:u(i),height:288,margin:e,padding:n,"svg-defs":u(h),"x-domain":b,"y-domain":r},{default:O(()=>[D(u(zt),{color:W,"curve-type":"monotoneX",line:!0,"line-color":C,"line-width":2,opacity:.82,x:A,y:u(o)},null,8,["y"]),D(u(Te),{"grid-line":!1,"tick-format":B,"tick-padding":10,"tick-values":y,type:"x"}),D(u(Te),{"num-ticks":4,"tick-format":N,type:"y"}),u(d).length>0?(T(),z(u(We),{key:0})):ve("",!0),u(d).length>0?(T(),z(u(Ft),{key:1,color:H,template:x,x:A,"y-stacked":u(o)},null,8,["y-stacked"])):ve("",!0)]),_:1},8,["data","svg-defs"])]),_:1},8,["config"]),u(w)?(T(),j("div",Va,[M("div",{class:"absolute border-l border-dashed border-border/80",style:re({height:`${u(U)}px`,left:`${u(w).x}px`,top:`${u(l)}px`})},null,4),M("div",{class:"absolute border-t border-dashed border-border/80",style:re({left:`${u(k)}px`,top:`${u(w).y}px`,width:`${u(S)}px`})},null,4),M("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:re({left:`${u(w).x}px`,top:`${u(p)+6}px`,transform:"translateX(-50%)"})},G(u(w).xLabel),5),M("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:re({left:`${Math.max(u(k)-8,0)}px`,top:`${u(w).y}px`,transform:"translate(-100%, -50%)"})},G(u(w).yLabel),5)])):ve("",!0)],544)):(T(),j("div",Wa," No usage recorded today. ")),M("div",Ga,[(T(!0),j(ne,null,be(u(d),X=>(T(),j("div",{key:X.key,class:"flex items-center gap-2"},[M("span",{class:"size-2.5 rounded-sm",style:re({backgroundColor:X.color})},null,4),M("span",null,G(X.label),1),M("span",Ba,G(u(ie)(X.totalTokens)),1)]))),128))])]),_:1})}}}),Fa=Object.assign(za,{__name:"DashboardTodayUsageTrendPanel"}),Ia={key:0,class:"text-xs text-destructive"},Ya={class:"mb-4 grid grid-cols-2 gap-3"},Xa={class:"mb-4 grid grid-cols-2 gap-3"},qa={class:"rounded-md border px-3 py-2"},Ka={class:"mt-1 text-xl font-semibold tabular-nums"},Za={class:"rounded-md border px-3 py-2"},Ja={class:"mt-1 text-xl font-semibold tabular-nums"},Qa={class:"mt-4 flex flex-wrap justify-center items-center gap-3 text-xs text-muted-foreground"},en=se({name:"StatisticalAnalysisSessionAnalysisPanel",__name:"SessionAnalysisPanel",props:{errorMessage:{},items:{},loading:{type:Boolean},totalSessions:{}},setup(g){const t=g,e=[{color:"#2563eb",key:"tokens",label:"Token Usage"},{color:"#b6d72f",key:"duration",label:"Duration"},{color:"#f97316",key:"cost",label:"Cost"}],n={cost:{color:e[2].color,label:e[2].label},duration:{color:e[1].color,label:e[1].label},tokens:{color:e[0].color,label:e[0].label}},r={bottom:32,left:120,right:12,top:8},c=R(()=>{if(t.items.length===0)return ge(0);const p=t.items.reduce((v,_)=>v+_.costUSD,0)/t.items.length;return ge(p)}),s=R(()=>{const p=new Map;for(const A of t.items){const C=p.get(A.project)??{costUSD:0,durationMinutes:0,sessionCount:0,tokenTotal:0};C.costUSD+=A.costUSD,C.durationMinutes+=o(A.duration),C.sessionCount+=1,C.tokenTotal+=A.tokenTotal,p.set(A.project,C)}const v=Array.from(p.entries()).map(([A,C])=>({project:A,...C})).sort((A,C)=>C.costUSD-A.costUSD),_=Math.max(...v.map(A=>A.tokenTotal),0),w=Math.max(...v.map(A=>A.durationMinutes),0),W=Math.max(...v.map(A=>A.costUSD),0);return v.map((A,C)=>({...A,costLabel:ge(A.costUSD),costScore:h(A.costUSD,W),durationLabel:m(A.durationMinutes),durationScore:h(A.durationMinutes,w),index:C,tokenLabel:ie(A.tokenTotal),tokenScore:h(A.tokenTotal,_)}))}),a=R(()=>s.value.map(p=>p.index)),d=[p=>p.tokenScore,p=>p.durationScore,p=>p.costScore],i=R(()=>({[Ea.bar]:k}));function o(p){const v=p.match(/(\d+)h/)?.[1],_=p.match(/(\d+)m/)?.[1];return Number(v??0)*60+Number(_??0)}function m(p){const v=Math.floor(p/60),_=p%60;return v===0?`${_}m`:_===0?`${v}h`:`${v}h ${_}m`}function h(p,v){return v>0?p/v*100:0}function b(p,v){return e[v]?.color??e[0].color}function y(p){return p.index}function k(p){const v=p.datum,_=e[p.stackIndex]??e[0],w=l(v,p.stackIndex);return`
|
|
119
|
+
<div class="grid min-w-44 gap-2 rounded-md border bg-background px-3 py-2 text-xs shadow-lg">
|
|
120
|
+
<div class="font-medium text-foreground">${$e(v.project)}</div>
|
|
121
|
+
<div class="flex items-center justify-between gap-4">
|
|
122
|
+
<span class="flex items-center gap-2 text-muted-foreground">
|
|
123
|
+
<span class="size-2 rounded-sm" style="background-color: ${_.color}"></span>
|
|
124
|
+
${_.label}
|
|
125
|
+
</span>
|
|
126
|
+
<span class="font-mono font-semibold text-foreground">${w}</span>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="grid gap-1 border-t pt-2 text-muted-foreground">
|
|
129
|
+
<div class="flex justify-between gap-4"><span>Tokens</span><span>${v.tokenLabel}</span></div>
|
|
130
|
+
<div class="flex justify-between gap-4"><span>Duration</span><span>${v.durationLabel}</span></div>
|
|
131
|
+
<div class="flex justify-between gap-4"><span>Cost</span><span>${v.costLabel}</span></div>
|
|
132
|
+
<div class="flex justify-between gap-4"><span>Sessions</span><span>${v.sessionCount}</span></div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
`}function l(p,v){return v===0?`${p.tokenLabel} tokens`:v===1?p.durationLabel:p.costLabel}function S(p){return p instanceof Date?"":s.value.find(v=>v.index===p)?.project??""}function U(p){return p instanceof Date?"":`${Math.round(p)}%`}return(p,v)=>{const _=dt,w=Ve,W=ye;return T(),z(W,{description:"Token, duration, and cost grouped by project",icon:"lucide:messages-square",title:"Session Analysis"},{default:O(()=>[g.errorMessage?(T(),j("p",Ia,G(g.errorMessage),1)):g.loading?(T(),j(ne,{key:1},[M("div",Ya,[D(_,{class:"h-20 w-full rounded-md"}),D(_,{class:"h-20 w-full rounded-md"})]),D(_,{class:"h-80 w-full rounded-md"})],64)):(T(),j(ne,{key:2},[M("div",Xa,[M("div",qa,[v[0]||(v[0]=M("p",{class:"text-xs text-muted-foreground"}," Total Sessions ",-1)),M("p",Ka,G(g.totalSessions),1)]),M("div",Za,[v[1]||(v[1]=M("p",{class:"text-xs text-muted-foreground"}," Top Session Avg ",-1)),M("p",Ja,G(c.value),1)])]),D(w,{class:"h-80 w-full",config:n},{default:O(()=>[D(u(ct),{"auto-margin":!1,data:s.value,height:320,margin:r,"y-direction":"south"},{default:O(()=>[D(u(La),{"bar-max-width":28,"bar-padding":.28,color:b,cursor:"pointer",orientation:"horizontal","rounded-corners":3,x:y,y:d}),D(u(Te),{"grid-line":!1,"tick-format":S,"tick-text-width":100,"tick-text-fit-mode":"trim","tick-text-trim-type":"end","tick-values":a.value,type:"y"},null,8,["tick-values"]),D(u(Te),{"num-ticks":4,"tick-format":U,type:"x"}),D(u(We),{triggers:i.value},null,8,["triggers"])]),_:1},8,["data"])]),_:1}),M("div",Qa,[(T(),j(ne,null,be(e,A=>M("div",{key:A.key,class:"flex items-center gap-2"},[M("span",{class:"size-2.5 rounded-sm",style:re({backgroundColor:A.color})},null,4),M("span",null,G(A.label),1)])),64))])],64))]),_:1})}}}),tn=Object.assign(en,{__name:"StatisticalAnalysisSessionAnalysisPanel"}),an={class:"space-y-4"},nn={class:"flex items-start justify-between gap-3"},sn={class:"min-w-0"},on={class:"truncate text-sm font-medium"},rn={class:"truncate text-xs text-muted-foreground"},ln={class:"shrink-0 text-sm font-semibold tabular-nums"},cn={class:"h-2 overflow-hidden rounded-full bg-secondary"},dn=se({name:"StatisticalAnalysisUsageBarList",__name:"UsageBarList",props:{items:{}},setup(g){function t(n){switch(n){case"green":return"bg-emerald-500";case"amber":return"bg-amber-500";case"sky":return"bg-sky-500";case"rose":return"bg-rose-500";default:return"bg-primary"}}function e(n){return`${Math.max(n.percent,n.percent>0?3:0)}%`}return(n,r)=>(T(),j("div",an,[(T(!0),j(ne,null,be(g.items,c=>(T(),j("div",{key:c.label,class:"space-y-2"},[M("div",nn,[M("div",sn,[M("p",on,G(c.label),1),M("p",rn,G(c.detail),1)]),M("span",ln,G(c.value),1)]),M("div",cn,[M("div",{class:ca(["h-full rounded-full transition-[width]",t(c.tone)]),style:re({width:e(c)})},null,6)])]))),128))]))}}),un=Object.assign(dn,{__name:"StatisticalAnalysisUsageBarList"}),hn={class:"grid gap-6 lg:grid-cols-[220px_1fr] lg:items-center"},gn={class:"flex items-center justify-center"},mn={class:"space-y-3"},pn={class:"flex min-w-0 items-center gap-2"},fn={class:"truncate text-sm text-muted-foreground"},vn={class:"text-sm font-semibold tabular-nums"},yn={class:"w-12 text-right text-xs text-muted-foreground tabular-nums"},bn={class:"mt-5 border-t pt-4"},xn=se({name:"StatisticalAnalysisEfficiencyCachePanel",__name:"EfficiencyCachePanel",props:{dailyItems:{},items:{}},setup(g){const t=g,e=R(()=>t.dailyItems.reduce((m,h)=>m+h.inputTokens,0)),n=R(()=>t.dailyItems.reduce((m,h)=>m+h.cachedInputTokens,0)),r=R(()=>Math.max(e.value-n.value,0)),c=R(()=>e.value>0?n.value/e.value:0),s=R(()=>Me(c.value)),a=R(()=>[{color:"#059669",key:"cached",label:"Cached Input",shareLabel:Me(c.value),value:n.value,valueLabel:ie(n.value)},{color:"#0ea5e9",key:"fresh",label:"Fresh Input",shareLabel:Me(e.value>0?r.value/e.value:0),value:r.value,valueLabel:ie(r.value)}]),d=R(()=>Object.fromEntries(a.value.map(m=>[m.key,{color:m.color,label:m.label}]))),i=R(()=>({[Ha.segment]:o}));function o(m){const h=m.data;return`
|
|
136
|
+
<div class="grid min-w-40 gap-2 rounded-md border bg-background px-3 py-2 text-xs shadow-lg">
|
|
137
|
+
<div class="flex items-center gap-2 font-medium text-foreground">
|
|
138
|
+
<span class="size-2 rounded-sm" style="background-color: ${h.color}"></span>
|
|
139
|
+
${$e(h.label)}
|
|
140
|
+
</div>
|
|
141
|
+
<div class="grid gap-1 text-muted-foreground">
|
|
142
|
+
<div class="flex justify-between gap-4"><span>Tokens</span><span class="font-mono font-medium text-foreground">${h.valueLabel}</span></div>
|
|
143
|
+
<div class="flex justify-between gap-4"><span>Share</span><span class="font-mono font-medium text-foreground">${h.shareLabel}</span></div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
`}return(m,h)=>{const b=Ve,y=un,k=ye;return T(),z(k,{description:"Cached input ratio across total input tokens",icon:"lucide:gauge",title:"Efficiency / Cache"},{default:O(()=>[M("div",hn,[M("div",gn,[D(b,{class:"h-52 w-full max-w-56",config:u(d)},{default:O(()=>[D(u(Ra),{data:u(a),height:208},{default:O(()=>[D(u(Oa),{"arc-width":26,"central-label":u(s),"central-sub-label":"Hit Rate",color:l=>l.color,"corner-radius":4,"pad-angle":.04,value:l=>l.value},null,8,["central-label","color","value"]),D(u(We),{triggers:u(i)},null,8,["triggers"])]),_:1},8,["data"])]),_:1},8,["config"])]),M("div",mn,[(T(!0),j(ne,null,be(u(a),l=>(T(),j("div",{key:l.key,class:"grid grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-3"},[M("div",pn,[M("span",{class:"size-2.5 shrink-0 rounded-full",style:re({backgroundColor:l.color})},null,4),M("span",fn,G(l.label),1)]),M("span",vn,G(l.valueLabel),1),M("span",yn,G(l.shareLabel),1)]))),128))])]),M("div",bn,[D(y,{items:g.items},null,8,["items"])])]),_:1})}}}),_n=Object.assign(xn,{__name:"StatisticalAnalysisEfficiencyCachePanel"}),kn={key:0,class:"mb-3 text-xs text-destructive"},Sn=se({name:"StatisticalAnalysisTokensUsagePanel",__name:"TokensUsagePanel",props:{fetchPage:{type:Function},items:{},pagination:{}},setup(g){const t=g,e=R(()=>({items:t.items,pagination:t.pagination??{page:1,pageCount:Math.max(1,Math.ceil(t.items.length/Qe)),pageSize:Qe,total:t.items.length}})),{error:n,pageData:r,setPage:c}=It(e,t.fetchPage),s=[{accessorKey:"date",header:"Date",meta:{class:"font-medium"}},{accessorKey:"models",cell:({row:a})=>a.original.models.join(", "),header:"Models"},{accessorKey:"inputTokens",cell:({row:a})=>fe(a.original.inputTokens),header:"Input",meta:{class:"text-right tabular-nums"}},{accessorKey:"outputTokens",cell:({row:a})=>fe(a.original.outputTokens),header:"Output",meta:{class:"text-right tabular-nums"}},{accessorKey:"reasoningOutputTokens",cell:({row:a})=>fe(a.original.reasoningOutputTokens),header:"Reasoning",meta:{class:"text-right tabular-nums"}},{accessorKey:"cachedInputTokens",cell:({row:a})=>fe(a.original.cachedInputTokens),header:"Cache Read",meta:{class:"text-right tabular-nums"}},{accessorKey:"totalTokens",cell:({row:a})=>fe(a.original.totalTokens),header:"Total Tokens",meta:{class:"text-right tabular-nums"}},{accessorKey:"costUSD",cell:({row:a})=>ge(a.original.costUSD),header:"Cost (USD)",meta:{class:"text-right tabular-nums"}}];return(a,d)=>{const i=Yt,o=ye;return T(),z(o,{description:"Daily model activity by token type, cache reads, total usage, and cost",icon:"lucide:calendar-days",title:"Daily Token Usage"},{default:O(()=>[u(n)?(T(),j("p",kn,G(u(n).message),1)):ve("",!0),D(i,{columns:s,data:u(r).items,"empty-text":"No daily token usage found.",pagination:u(r).pagination,onPageChange:u(c)},null,8,["data","pagination","onPageChange"])]),_:1})}}}),An=Object.assign(Sn,{__name:"StatisticalAnalysisTokensUsagePanel"});function Tn(){const g=et(),t=tt(),e=nt().sessionAnalysis,{data:n,error:r,refresh:c,status:s}=xe("analysis:home:core",Kt,{default:et}),{clear:a,data:d,error:i,execute:o,refresh:m,status:h}=xe("analysis:home:usage",Zt,{default:tt,immediate:!1,server:!1}),{data:b,error:y,execute:k,status:l}=xe("analysis:home:daily-token-page",()=>at(1),{immediate:!1,server:!1}),{clear:S,data:U,error:p,execute:v,refresh:_,status:w}=xe("analysis:home:session",Jt,{default:()=>nt().sessionAnalysis,immediate:!1,server:!1}),{refresh:W}=Qt({clearDeferred:()=>{a(),S()},coreStatus:s,executeDeferred:()=>Promise.all([o(),v()]),refreshCore:c,refreshDeferred:()=>Promise.all([m(),_()])});return me(h,A=>{A==="success"&&l.value==="idle"&&k()},{immediate:!0}),{dailyTokenUsage:R(()=>d.value?.dailyTokenUsage??t.dailyTokenUsage),dailyTokenUsagePage:R(()=>b.value),dailyTokenUsagePageError:y,dailyTokenUsagePageStatus:l,fetchDailyTokenUsagePage:at,efficiencyMetrics:R(()=>d.value?.efficiencyMetrics??t.efficiencyMetrics),error:r,monthlyModelUsage:R(()=>n.value?.modelUsage??g.modelUsage),overviewCards:R(()=>n.value?.overviewCards??g.overviewCards),projectUsage:R(()=>n.value?.hotProjects??g.hotProjects),refresh:W,sessionAnalysisError:p,sessionAnalysisStatus:w,sessionUsage:R(()=>U.value?.items??e.items),status:s,todayHourlyUsage:R(()=>d.value?.todayHourlyUsage??t.todayHourlyUsage),totalSessions:R(()=>U.value?.totalSessions??e.totalSessions),usageError:i,usageStatus:h}}const $n={class:"bg-background border border-input rounded-xl shadow-xs min-h-0 flex-1 overflow-y-auto"},Dn={class:"grid content-start p-4 space-y-3"},wn={key:0,class:"text-xs text-destructive"},Cn={class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4"},Mn={key:0,class:"text-xs text-destructive"},Pn={key:0,class:"text-xs text-destructive"},Rn={key:0,class:"text-xs text-destructive"},Un={key:0,class:"text-xs text-destructive"},Nn=se({__name:"index",setup(g){const{dailyTokenUsage:t,dailyTokenUsagePage:e,error:n,efficiencyMetrics:r,fetchDailyTokenUsagePage:c,monthlyModelUsage:s,projectUsage:a,sessionAnalysisError:d,sessionAnalysisStatus:i,sessionUsage:o,totalSessions:m,todayHourlyUsage:h,status:b,usageError:y,usageStatus:k,overviewCards:l}=Tn(),{errorText:S,showSkeleton:U}=Pe(b,n),{errorText:p,showSkeleton:v}=Pe(i,d),{errorText:_,showSkeleton:w}=Pe(k,y);return(W,A)=>{const C=dt,H=ye,B=Xt,N=qt,x=ea,P=ta,F=Fa,Z=aa,f=tn,E=_n,L=An;return T(),j("div",$n,[M("div",Dn,[u(S)?(T(),j("p",wn,G(u(S)),1)):ve("",!0),u(U)?(T(),j(ne,{key:1},[M("div",Cn,[(T(),j(ne,null,be(4,V=>D(C,{key:V,class:"h-28 rounded-md"})),64))]),D(B,null,{default:O(()=>[D(H,{class:"md:col-span-8",description:"Monthly token trends by model",icon:"solar:cpu-line-duotone",title:"Model Usage"},{default:O(()=>[D(C,{class:"h-72 w-full rounded-md"})]),_:1}),D(H,{class:"md:col-span-4",description:"Best performers by spend",icon:"lucide:folder-git-2",title:"Top Projects"},{default:O(()=>[D(C,{class:"h-72 w-full rounded-md"})]),_:1}),D(H,{class:"md:col-span-12",description:"Hourly token and spend by agent for today",icon:"lucide:chart-area",title:"Today's Token Trend"},{default:O(()=>[D(C,{class:"h-72 w-full rounded-md"})]),_:1}),D(H,{class:"md:col-span-12",description:"Usage trend over the selected period",icon:"lucide:activity",title:"Usage Trend"},{default:O(()=>[D(C,{class:"h-80 w-full rounded-md"})]),_:1}),D(H,{class:"md:col-span-6",description:"Token, duration, and cost grouped by project",icon:"lucide:messages-square",title:"Session Analysis"},{default:O(()=>[D(C,{class:"h-72 w-full rounded-md"})]),_:1}),D(H,{class:"md:col-span-6",description:"Cached input ratio across total input tokens",icon:"lucide:gauge",title:"Efficiency / Cache"},{default:O(()=>[D(C,{class:"h-72 w-full rounded-md"})]),_:1}),D(H,{class:"md:col-span-12",description:"Daily model activity by token type, cache reads, total usage, and cost",icon:"lucide:calendar-days",title:"Daily Token Usage"},{default:O(()=>[D(C,{class:"h-72 w-full rounded-md"})]),_:1})]),_:1})],64)):(T(),j(ne,{key:2},[D(N,{cards:u(l)},null,8,["cards"]),D(B,null,{default:O(()=>[D(x,{"monthly-items":u(s),class:"md:col-span-8"},null,8,["monthly-items"]),D(P,{items:u(a),class:"md:col-span-4"},null,8,["items"]),u(w)||u(_)?(T(),z(H,{key:0,class:"md:col-span-12",description:"Hourly token and spend by agent for today",icon:"lucide:chart-area",title:"Today's Token Trend"},{default:O(()=>[u(_)?(T(),j("p",Mn,G(u(_)),1)):(T(),z(C,{key:1,class:"h-72 w-full rounded-md"}))]),_:1})):(T(),z(F,{key:1,items:u(h),class:"md:col-span-12"},null,8,["items"])),u(w)||u(_)?(T(),z(H,{key:2,class:"md:col-span-12",description:"Usage trend over the selected period",icon:"lucide:activity",title:"Usage Trend"},{default:O(()=>[u(_)?(T(),j("p",Pn,G(u(_)),1)):(T(),z(C,{key:1,class:"h-80 w-full rounded-md"}))]),_:1})):(T(),z(Z,{key:3,items:u(t),class:"md:col-span-12","heat-metric":"cost",title:"Usage Trend"},null,8,["items"])),D(f,{"error-message":u(p),items:u(o),loading:u(v),"total-sessions":u(m),class:"md:col-span-6"},null,8,["error-message","items","loading","total-sessions"]),u(w)||u(_)?(T(),z(H,{key:4,class:"md:col-span-6",description:"Cached input ratio across total input tokens",icon:"lucide:gauge",title:"Efficiency / Cache"},{default:O(()=>[u(_)?(T(),j("p",Rn,G(u(_)),1)):(T(),z(C,{key:1,class:"h-72 w-full rounded-md"}))]),_:1})):(T(),z(E,{key:5,"daily-items":u(t),items:u(r),class:"md:col-span-6"},null,8,["daily-items","items"])),u(w)||u(_)?(T(),z(H,{key:6,class:"md:col-span-12",description:"Daily model activity by token type, cache reads, total usage, and cost",icon:"lucide:calendar-days",title:"Daily Token Usage"},{default:O(()=>[u(_)?(T(),j("p",Un,G(u(_)),1)):(T(),z(C,{key:1,class:"h-72 w-full rounded-md"}))]),_:1})):(T(),z(L,{key:7,"fetch-page":u(c),items:u(e)?.items??[],pagination:u(e)?.pagination,class:"md:col-span-12"},null,8,["fetch-page","items","pagination"]))]),_:1})],64))])])}}});export{Nn as default};
|