usage-board 4.0.1 → 5.0.0
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 +40 -22
- package/dist/public/_nuxt/3inMrCcs.js +146 -0
- package/dist/public/_nuxt/5M1aAlPv.js +6 -0
- package/dist/public/_nuxt/{C0GhHHgI.js → BHGcQrYH.js} +2 -2
- package/dist/public/_nuxt/{DF2WsXH3.js → BgVTqBr9.js} +1 -1
- package/dist/public/_nuxt/{DXWxIyGU.js → BhTZzeJU.js} +1 -1
- package/dist/public/_nuxt/{D7qEPtpx.js → BlxNEZ3W.js} +1 -1
- package/dist/public/_nuxt/BwYRMC0_.js +1 -0
- package/dist/public/_nuxt/C3BLG0Zo.js +21 -0
- package/dist/public/_nuxt/{De8DvPWL.js → C8lAAJpL.js} +1 -1
- package/dist/public/_nuxt/Cxd8QZxF.js +261 -0
- package/dist/public/_nuxt/DXeNXt_b.js +1 -0
- package/dist/public/_nuxt/DavRiQHq.js +25 -0
- package/dist/public/_nuxt/{Jp5cgQZi.js → DfL4oXhq.js} +3 -3
- package/dist/public/_nuxt/DjKivtvZ.js +1 -0
- package/dist/public/_nuxt/{37OOe3RF.js → OPi16VNs.js} +1 -1
- package/dist/public/_nuxt/builds/latest.json +1 -1
- package/dist/public/_nuxt/builds/meta/eff380a6-8407-4f41-af1f-39f3ae1dface.json +1 -0
- package/dist/public/_nuxt/{entry.DnkKc-6G.css → entry.BYVbC6M5.css} +1 -1
- package/dist/public/_nuxt/error-404.ABvo6GrV.css +1 -0
- package/dist/public/_nuxt/error-500.CaR7LJUF.css +1 -0
- package/dist/public/pricing-data/fast-multiplier-overrides.json +12 -0
- package/dist/public/pricing-data/litellm-pricing.json +43714 -0
- package/dist/public/pricing-data/models-dev-pricing.json +178004 -0
- package/dist/server/chunks/_/analysis-handlers.mjs +54 -0
- package/dist/server/chunks/_/pagination.mjs +16 -0
- package/dist/server/chunks/build/client.precomputed.mjs +1 -1
- package/dist/server/chunks/nitro/nitro.mjs +4976 -5765
- package/dist/server/chunks/routes/api/analysis/agent/session.json.mjs +28 -4
- package/dist/server/chunks/routes/api/analysis/agent/token.json.mjs +14 -4
- package/dist/server/chunks/routes/api/analysis/cache.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/hot-project.json.mjs +15 -5
- package/dist/server/chunks/routes/api/analysis/live-state.json.mjs +32 -0
- package/dist/server/chunks/routes/api/analysis/model.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/overview-cards.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/session.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/token/daily.json.mjs +25 -4
- package/dist/server/chunks/routes/api/analysis/token/today-hourly.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/token.json.mjs +12 -3
- package/dist/server/chunks/routes/api/projects/_project/modules.get.mjs +14 -6
- package/dist/server/chunks/routes/api/projects/catalog.get.mjs +12 -4
- package/dist/server/chunks/routes/renderer.mjs +11 -3
- package/dist/server/chunks/routes/ws.mjs +64 -59
- package/dist/server/index.mjs +11 -3
- package/dist/server/node_modules/@clack/core/dist/index.mjs +17 -0
- package/dist/server/node_modules/@clack/core/package.json +63 -0
- package/dist/server/node_modules/@clack/prompts/dist/index.mjs +145 -0
- package/dist/server/node_modules/@clack/prompts/package.json +68 -0
- package/dist/server/node_modules/dayjs/dayjs.min.js +1 -0
- package/dist/server/node_modules/dayjs/package.json +85 -0
- package/dist/server/node_modules/dayjs/plugin/utc.js +1 -0
- package/dist/server/node_modules/fast-string-truncated-width/dist/index.js +111 -0
- package/dist/server/node_modules/fast-string-truncated-width/dist/utils.js +20 -0
- package/dist/server/node_modules/fast-string-truncated-width/package.json +35 -0
- package/dist/server/node_modules/fast-string-width/dist/index.js +14 -0
- package/dist/server/node_modules/fast-string-width/package.json +34 -0
- package/dist/server/node_modules/fast-wrap-ansi/lib/main.js +218 -0
- package/dist/server/node_modules/fast-wrap-ansi/package.json +51 -0
- package/dist/server/node_modules/sisteransi/package.json +34 -0
- package/dist/server/node_modules/sisteransi/src/index.js +58 -0
- package/dist/server/node_modules/xdg-basedir/index.js +30 -0
- package/dist/server/node_modules/xdg-basedir/package.json +47 -0
- package/dist/server/package.json +10 -2
- package/package.json +11 -9
- 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/DKaPq50Z.js +0 -6
- 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/error-404.CFBEg71j.css +0 -1
- package/dist/public/_nuxt/error-500.BqCnH31G.css +0 -1
- package/dist/public/_nuxt/qXgLTL_3.js +0 -21
- package/dist/public/_nuxt/y6mAKUDU.js +0 -1
- package/dist/server/chunks/routes/api/payload.json.mjs +0 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as s}from"./
|
|
1
|
+
import{_ as s}from"./C8lAAJpL.js";import{_ as a,u as i,o as u,c,a as t,t as n,b as l,w as d,d as f}from"./DfL4oXhq.js";const p={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"},m={class:"max-w-520px text-center"},h=["textContent"],b=["textContent"],x=["textContent"],g={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:404},statusText:{type:String,default:"Page not found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(e){const r=e;return i({title:`${r.status} - ${r.statusText} | ${r.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}a{color:inherit;text-decoration: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: }'}]}),(k,_)=>{const o=s;return u(),c("div",p,[t("div",m,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:n(e.status)},null,8,h),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:n(e.statusText)},null,8,b),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:n(e.description)},null,8,x),t("div",g,[l(o,{to:"/",class:"font-medium hover:text-[#00DC82] text-sm underline underline-offset-3"},{default:d(()=>[f(n(e.backHome),1)]),_:1})])])])}}},N=a(y,[["__scopeId","data-v-d2800e19"]]);export{N as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{D as H,I as ce,F as fe,i as pe,j as B,k as me}from"./Cxd8QZxF.js";import{S as Y,P as M,u as ee,a as ve,b as ge,d as be}from"./BHGcQrYH.js";import{r as x,G as _,W as ye,X as he,e as I,k as _e,H as W,N as te,Y as Te,Z as Ie,$ as z,n as ae,o as b,g as C,w as v,b as S,i as o,h as k,j as oe,M as se,a0 as we,a1 as Ce,f as q,J as L,a2 as Se,D as ke,l as ne,a3 as Pe,a4 as xe,y as $,z as O,s as V,a5 as Fe,a6 as Ae,a7 as Ee,c as R,t as j,F as U,x as Me,E as Z,d as Be}from"./DfL4oXhq.js";import{i as Re,g as J}from"./BgVTqBr9.js";function le(a){const e=Re({dir:x("ltr")});return _(()=>a?.value||e.dir?.value||"ltr")}function X(){const a=x(),e=_(()=>["#text","#comment"].includes(a.value?.$el.nodeName)?a.value?.$el.nextElementSibling:ye(a));return{primitiveElement:a,currentElement:e}}const Q="data-reka-collection-item";function re(a={}){const{key:e="",isProvider:n=!1}=a,t=`${e}CollectionProvider`;let l;if(n){const u=x(new Map);l={collectionRef:x(),itemMap:u},Te(t,l)}else l=he(t);const m=(u=!1)=>{const i=l.collectionRef.value;if(!i)return[];const p=Array.from(i.querySelectorAll(`[${Q}]`)),s=Array.from(l.itemMap.value.values()).sort((g,h)=>p.indexOf(g.ref)-p.indexOf(h.ref));return u?s:s.filter(g=>g.ref.dataset.disabled!=="")},f=I({name:"CollectionSlot",inheritAttrs:!1,setup(u,{slots:i,attrs:p}){const{primitiveElement:y,currentElement:s}=X();return te(s,()=>{l.collectionRef.value=s.value}),()=>W(Y,{ref:y,...p},i)}}),d=I({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(u,{slots:i,attrs:p}){const{primitiveElement:y,currentElement:s}=X();return _e(g=>{if(s.value){const h=Ie(s.value);l.itemMap.value.set(h,{ref:s.value,value:u.value}),g(()=>l.itemMap.value.delete(h))}}),()=>W(Y,{...p,[Q]:"",ref:y},i)}}),c=_(()=>Array.from(l.itemMap.value.values())),r=_(()=>l.itemMap.value.size);return{getItems:m,reactiveItems:c,itemMapSize:r,CollectionSlot:f,CollectionItem:d}}const qe="rovingFocusGroup.onEntryFocus",$e={bubbles:!1,cancelable:!0},Oe={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Ve(a,e){return e!=="rtl"?a:a==="ArrowLeft"?"ArrowRight":a==="ArrowRight"?"ArrowLeft":a}function Ke(a,e,n){const t=Ve(a.key,n);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(t))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(t)))return Oe[t]}function ie(a,e=!1){const n=J();for(const t of a)if(t===n||(t.focus({preventScroll:e}),J()!==n))return}function De(a,e){return a.map((n,t)=>a[(e+t)%a.length])}const[Ne,je]=oe("RovingFocusGroup");var Ue=I({__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:n}){const t=a,l=n,{loop:m,orientation:f,dir:d}=z(t),c=le(d),r=ae(t,"currentTabStopId",l,{defaultValue:t.defaultCurrentTabStopId,passive:t.currentTabStopId===void 0}),u=x(!1),i=x(!1),p=x(0),{getItems:y,CollectionSlot:s}=re({isProvider:!0});function g(w){const F=!i.value;if(w.currentTarget&&w.target===w.currentTarget&&F&&!u.value){const A=new CustomEvent(qe,$e);if(w.currentTarget.dispatchEvent(A),l("entryFocus",A),!A.defaultPrevented){const E=y().map(P=>P.ref).filter(P=>P.dataset.disabled!==""),K=E.find(P=>P.getAttribute("data-active")===""),D=E.find(P=>P.getAttribute("data-highlighted")===""),T=E.find(P=>P.id===r.value),N=[K,D,T,...E].filter(Boolean);ie(N,t.preventScrollOnEntryFocus)}}i.value=!1}function h(){setTimeout(()=>{i.value=!1},1)}return e({getItems:y}),je({loop:m,dir:c,orientation:f,currentTabStopId:r,onItemFocus:w=>{r.value=w},onItemShiftTab:()=>{u.value=!0},onFocusableItemAdd:()=>{p.value++},onFocusableItemRemove:()=>{p.value--}}),(w,F)=>(b(),C(o(s),null,{default:v(()=>[S(o(M),{tabindex:u.value||p.value===0?-1:0,"data-orientation":o(f),as:w.as,"as-child":w.asChild,dir:o(c),style:{outline:"none"},onMousedown:F[0]||(F[0]=A=>i.value=!0),onMouseup:h,onFocus:g,onBlur:F[1]||(F[1]=A=>u.value=!1)},{default:v(()=>[k(w.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),Le=Ue,ze=I({__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,n=Ne(),t=ee(),l=_(()=>e.tabStopId||t),m=_(()=>n.currentTabStopId.value===l.value),{getItems:f,CollectionItem:d}=re();se(()=>{e.focusable&&n.onFocusableItemAdd()}),we(()=>{e.focusable&&n.onFocusableItemRemove()});function c(r){if(r.key==="Tab"&&r.shiftKey){n.onItemShiftTab();return}if(r.target!==r.currentTarget)return;const u=Ke(r,n.orientation.value,n.dir.value);if(u!==void 0){if(r.metaKey||r.ctrlKey||r.altKey||!e.allowShiftKey&&r.shiftKey)return;r.preventDefault();let i=[...f().map(p=>p.ref).filter(p=>p.dataset.disabled!=="")];if(u==="last")i.reverse();else if(u==="prev"||u==="next"){u==="prev"&&i.reverse();const p=i.indexOf(r.currentTarget);i=n.loop.value?De(i,p+1):i.slice(p+1)}Ce(()=>ie(i))}}return(r,u)=>(b(),C(o(d),null,{default:v(()=>[S(o(M),{tabindex:m.value?0:-1,"data-orientation":o(n).orientation.value,"data-active":r.active?"":void 0,"data-disabled":r.focusable?void 0:"",as:r.as,"as-child":r.asChild,onMousedown:u[0]||(u[0]=i=>{r.focusable?o(n).onItemFocus(l.value):i.preventDefault()}),onFocus:u[1]||(u[1]=i=>o(n).onItemFocus(l.value)),onKeydown:c},{default:v(()=>[k(r.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),Ge=ze;const[G,He]=oe("TabsRoot");var Ye=I({__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 n=a,t=e,{orientation:l,unmountOnHide:m,dir:f}=z(n),d=le(f);q();const c=ae(n,"modelValue",t,{defaultValue:n.defaultValue,passive:n.modelValue===void 0}),r=x(),u=L(new Set);return He({modelValue:c,changeModelValue:i=>{c.value=i},orientation:l,dir:d,unmountOnHide:m,activationMode:n.activationMode,baseId:ee(void 0,"reka-tabs"),tabsList:r,contentIds:u,registerContent:i=>{u.value=new Set([...u.value,i])},unregisterContent:i=>{const p=new Set(u.value);p.delete(i),u.value=p}}),(i,p)=>(b(),C(o(M),{dir:o(d),"data-orientation":o(l),"as-child":i.asChild,as:i.as},{default:v(()=>[k(i.$slots,"default",{modelValue:o(c)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),We=Ye;function ue(a,e){return`${a}-trigger-${e}`}function de(a,e){return`${a}-content-${e}`}var Ze=I({__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:n}=q(),t=G(),l=_(()=>ue(t.baseId,e.value)),m=_(()=>de(t.baseId,e.value)),f=_(()=>e.value===t.modelValue.value),d=x(f.value);return se(()=>{t.registerContent(e.value),requestAnimationFrame(()=>{d.value=!1})}),Se(()=>{t.unregisterContent(e.value)}),(c,r)=>(b(),C(o(ve),{present:c.forceMount||f.value,"force-mount":""},{default:v(({present:u})=>[S(o(M),{id:m.value,ref:o(n),"as-child":c.asChild,as:c.as,role:"tabpanel","data-state":f.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:v(()=>[!o(t).unmountOnHide.value||u?k(c.$slots,"default",{key:0}):ne("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),Je=Ze,Xe=I({__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:n}=z(e),{forwardRef:t,currentElement:l}=q(),m=G();return m.tabsList=l,(f,d)=>(b(),C(o(Le),{"as-child":"",orientation:o(m).orientation.value,dir:o(m).dir.value,loop:o(n)},{default:v(()=>[S(o(M),{ref:o(t),role:"tablist","as-child":f.asChild,as:f.as,"aria-orientation":o(m).orientation.value},{default:v(()=>[k(f.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),Qe=Xe,et=I({__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:n}=q(),t=G(),l=_(()=>ue(t.baseId,e.value)),m=_(()=>t.contentIds.value.has(e.value)?de(t.baseId,e.value):void 0),f=_(()=>e.value===t.modelValue.value);return(d,c)=>(b(),C(o(Ge),{"as-child":"",focusable:!d.disabled,active:f.value},{default:v(()=>[S(o(M),{id:l.value,ref:o(n),role:"tab",type:d.as==="button"?"button":void 0,as:d.as,"as-child":d.asChild,"aria-selected":f.value?"true":"false","aria-controls":m.value,"data-state":f.value?"active":"inactive",disabled:d.disabled,"data-disabled":d.disabled?"":void 0,"data-orientation":o(t).orientation.value,onMousedown:c[0]||(c[0]=xe(r=>{!d.disabled&&r.ctrlKey===!1?o(t).changeModelValue(d.value):r.preventDefault()},["left"])),onKeydown:c[1]||(c[1]=Pe(r=>o(t).changeModelValue(d.value),["enter","space"])),onFocus:c[2]||(c[2]=()=>{const r=o(t).activationMode!=="manual";!f.value&&!d.disabled&&r&&o(t).changeModelValue(d.value)})},{default:v(()=>[k(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"]))}}),tt=et;const at=I({__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 n=a,t=e,l=$(n,"class"),m=ge(l,t);return(f,d)=>(b(),C(o(We),O({"data-slot":"tabs"},o(m),{class:o(V)("flex flex-col gap-2",n.class)}),{default:v(c=>[k(f.$slots,"default",Fe(Ae(c)))]),_:3},16,["class"]))}}),ot=I({__name:"TabsContent",props:{value:{},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(a){const e=a,n=$(e,"class");return(t,l)=>(b(),C(o(Je),O({"data-slot":"tabs-content",class:o(V)("flex-1 outline-none",e.class)},o(n)),{default:v(()=>[k(t.$slots,"default")]),_:3},16,["class"]))}}),st=I({__name:"TabsList",props:{loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(a){const e=a,n=$(e,"class");return(t,l)=>(b(),C(o(Qe),O({"data-slot":"tabs-list"},o(n),{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:v(()=>[k(t.$slots,"default")]),_:3},16,["class"]))}}),nt=I({__name:"TabsTrigger",props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(a){const e=a,n=$(e,"class"),t=be(n);return(l,m)=>(b(),C(o(tt),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:v(()=>[k(l.$slots,"default")]),_:3},16,["class"]))}}),lt={key:0,class:"text-xs text-destructive"},rt={key:0,class:"mb-3 text-xs text-destructive"},it=I({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,n=L("day"),t=L(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=_(()=>({day:e.dailyItems,month:e.monthlyItems,session:e.sessionItems,week:e.weeklyItems})),f=_(()=>({day:e.dailyPagination??y(e.dailyItems),month:e.monthlyPagination??y(e.monthlyItems),session:e.sessionPagination??y(e.sessionItems),week:e.weeklyPagination??y(e.weeklyItems)})),d=Ee({day:{items:[],pagination:y([])},month:{items:[],pagination:y([])},session:{items:[],pagination:y([])},week:{items:[],pagination:y([])}});te([m,f],()=>{for(const s of l)d[s.value]={items:m.value[s.value],pagination:f.value[s.value]}},{immediate:!0});const c=_(()=>Object.fromEntries(l.map(s=>{const{items:g,pagination:h}=d[s.value];return[s.value,{items:g,page:h.page,pageCount:h.pageCount,pagination:h}]}))),r=[{accessorKey:"models",cell:({row:s})=>p(s.original.models),header:"Models"},{accessorKey:"projects",cell:({row:s})=>p(s.original.projects),header:"Projects",meta:{class:"max-w-56 truncate"}},{accessorKey:"sessionCount",header:"Sessions",meta:{class:"text-right tabular-nums"}},{accessorKey:"inputTokens",cell:({row:s})=>B(s.original.inputTokens),header:"Input",meta:{class:"text-right tabular-nums"}},{accessorKey:"outputTokens",cell:({row:s})=>B(s.original.outputTokens),header:"Output",meta:{class:"text-right tabular-nums"}},{accessorKey:"reasoningOutputTokens",cell:({row:s})=>B(s.original.reasoningOutputTokens),header:"Reasoning",meta:{class:"text-right tabular-nums"}},{accessorKey:"cachedInputTokens",cell:({row:s})=>B(s.original.cachedInputTokens),header:"Cache Read",meta:{class:"text-right tabular-nums"}},{accessorKey:"totalTokens",cell:({row:s})=>B(s.original.totalTokens),header:"Total Tokens",meta:{class:"text-right tabular-nums"}},{accessorKey:"costUSD",cell:({row:s})=>me(s.original.costUSD),header:"Cost",meta:{class:"text-right tabular-nums"}}],u=_(()=>Object.fromEntries(l.map(s=>[s.value,[{accessorKey:"label",cell:({row:g})=>g.original.label,header:s.heading,meta:{class:"max-w-72 truncate font-medium"}},...r]])));async function i(s,g){if(!(!e.fetchPage||g===d[s].pagination.page)){t.value=null;try{d[s]=await e.fetchPage(s,g)}catch(h){t.value=h instanceof Error?h:new Error("Failed to load token usage page.")}}}function p(s){return s.length>0?s.join(", "):"None"}function y(s){return{page:1,pageCount:Math.max(1,Math.ceil(s.length/H)),pageSize:H,total:s.length}}return(s,g)=>{const h=fe,w=nt,F=st,A=pe,E=ot,K=at,D=ce;return b(),C(D,{description:`Browse ${a.productName} token consumption by day, week, month, or session.`,icon:"lucide:table-2",title:`${a.productName} Token Usage`},{default:v(()=>[a.errorMessage?(b(),R("p",lt,j(a.errorMessage),1)):a.loading?(b(),R(U,{key:1},[S(h,{class:"h-10 w-64 rounded-md"}),S(h,{class:"mt-4 h-72 w-full rounded-md"})],64)):(b(),C(K,{key:2,modelValue:o(n),"onUpdate:modelValue":g[0]||(g[0]=T=>Me(n)?n.value=T:null)},{default:v(()=>[S(F,{class:"grid w-full grid-cols-4 sm:w-fit"},{default:v(()=>[(b(),R(U,null,Z(l,T=>S(w,{key:T.value,value:T.value},{default:v(()=>[Be(j(T.label),1)]),_:2},1032,["value"])),64))]),_:1}),(b(),R(U,null,Z(l,T=>S(E,{key:T.value,class:"mt-4",value:T.value},{default:v(()=>[o(t)?(b(),R("p",rt,j(o(t).message),1)):ne("",!0),S(A,{columns:o(u)[T.value],data:o(c)[T.value].items,"empty-text":`No ${a.productName} token usage found.`,pagination:o(c)[T.value].pagination,onPageChange:N=>i(T.value,N)},null,8,["columns","data","empty-text","pagination","onPageChange"])]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"]))]),_:1},8,["description","title"])}}}),pt=Object.assign(it,{__name:"UsageAnalyticsTokenUsageTabsPanel"});export{st as _,nt as a,ot as b,pt as c,at as d};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{e as K,f as He,r as Je,o as i,g as h,w as S,h as ke,i as e,j as lt,k as rt,l as oe,m as it,n as ct,p as dt,v as ut,c as _,q as ne,s as H,x as Ae,y as pt,z as mt,A as ft,B as gt,C as ht,a as g,b as k,D as Ce,t as E,F as se,E as ue,G as d,H as $e,P as ye,I as Me,J as fe,K as vt,L as _t,M as bt,N as Ke,O as yt,Q as kt,d as xt}from"./DfL4oXhq.js";import{P as Xe,c as Tt,_ as wt}from"./BHGcQrYH.js";import{_ as Qe}from"./5M1aAlPv.js";import{c as St}from"./OPi16VNs.js";import{S as jt,C as Pt,a as qe,f as Dt,z as Rt,A as Ct,_ as Mt,c as It,u as Lt,e as Ve,b as le,d as Ne,g as ae,h as Ye,i as Ze,D as ge,j as A,k as W,l as Ut,m as Ge,n as $t,o as At,p as Ot,t as Et,q as et,r as zt,s as Bt,v as Kt,w as qt,x as Vt,y as Nt,B as Gt,E as Ft,F as Wt,G as Ht,H as Jt,I as Xt,J as Qt}from"./Cxd8QZxF.js";import{_ as Yt,a as Zt,b as es,c as ts,d as ss}from"./BwYRMC0_.js";import"./BgVTqBr9.js";const[as,os]=lt("AvatarRoot");var ns=K({__name:"AvatarRoot",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(a){return He(),os({imageLoadingStatus:Je("idle")}),(t,n)=>(i(),h(e(Xe),{"as-child":t.asChild,as:t.as},{default:S(()=>[ke(t.$slots,"default")]),_:3},8,["as-child","as"]))}}),ls=ns,rs=K({__name:"AvatarFallback",props:{delayMs:{type:Number,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(a){const t=a,n=as();He();const c=Je(t.delayMs===void 0);return rt(u=>{if(t.delayMs&&it){const T=window.setTimeout(()=>{c.value=!0},t.delayMs);u(()=>{window.clearTimeout(T)})}}),(u,T)=>c.value&&e(n).imageLoadingStatus.value!=="loaded"?(i(),h(e(Xe),{key:0,"as-child":u.asChild,as:u.as},{default:S(()=>[ke(u.$slots,"default")]),_:3},8,["as-child","as"])):oe("v-if",!0)}}),is=rs;const cs=St("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]),ds=K({__name:"Input",props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:["update:modelValue"],setup(a,{emit:t}){const n=a,u=ct(n,"modelValue",t,{passive:!0,defaultValue:n.defaultValue});return(T,y)=>dt((i(),_("input",{"onUpdate:modelValue":y[0]||(y[0]=m=>Ae(u)?u.value=m:null),"data-slot":"input",class:ne(e(H)("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)),[[ut,e(u)]])}}),us=K({__name:"InputGroup",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(a){const t=a;return(n,c)=>(i(),_("div",{"data-slot":"input-group",role:"group",class:ne(e(H)("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))},[ke(n.$slots,"default")],2))}}),ps=["data-align"],ms=K({__name:"InputGroupAddon",props:{align:{default:"inline-start"},class:{type:[Boolean,null,String,Object,Array]}},setup(a){const t=a;function n(c){const u=c.currentTarget,T=c.target;T&&T.closest("button")||u&&u?.parentElement&&u.parentElement?.querySelector("input")?.focus()}return(c,u)=>(i(),_("div",{role:"group","data-slot":"input-group-addon","data-align":t.align,class:ne(e(H)(e(gs)({align:t.align}),t.class)),onClick:n},[ke(c.$slots,"default")],10,ps))}}),fs=K({__name:"InputGroupInput",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(a){const t=a;return(n,c)=>(i(),h(e(ds),{"data-slot":"input-group-control",class:ne(e(H)("flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",t.class))},null,8,["class"]))}}),gs=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"}}),hs=K({__name:"Avatar",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(a){const t=a;return(n,c)=>(i(),h(e(ls),{"data-slot":"avatar",class:ne(e(H)("relative flex size-8 shrink-0 overflow-hidden rounded-full",t.class))},{default:S(()=>[ke(n.$slots,"default")]),_:3},8,["class"]))}}),vs=K({__name:"AvatarFallback",props:{delayMs:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(a){const t=a,n=pt(t,"class");return(c,u)=>(i(),h(e(is),mt({"data-slot":"avatar-fallback"},e(n),{class:e(H)("bg-muted flex size-full items-center justify-center rounded-full",t.class)}),{default:S(()=>[ke(c.$slots,"default")]),_:3},16,["class"]))}}),_s=K({__name:"Spinner",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(a){const t=a;return(n,c)=>(i(),h(e(cs),{role:"status","aria-label":"Loading",class:ne(e(H)("size-4 animate-spin",t.class))},null,8,["class"]))}}),bs={class:"space-y-4"},ys={key:0,class:"pointer-events-none absolute inset-0 z-10"},ks={class:"flex flex-wrap items-center justify-center gap-3 text-xs text-muted-foreground"},xs={class:"max-w-40 truncate",translate:"no"},Ts={class:"font-medium text-foreground tabular-nums"},ws=.24,Ss="#94a3b8",js=288,Ps=K({__name:"ProjectLineChart",props:{series:{},tooltipLabels:{},tickIndexes:{},xLabels:{}},setup(a){const t=a,n={bottom:32,left:56,right:28,top:8},c={left:8,right:18},u=[0,void 0],T=ft({selector:"html",attribute:"class",storageKey:"app-color-mode"}),y=gt("chartRoot"),{width:m}=ht(y),j=d(()=>t.xLabels.map((l,p)=>({index:p,label:t.tooltipLabels?.[p]??l,values:Object.fromEntries(t.series.map(f=>[f.label,f.points[p]??0]))}))),P=d(()=>t.xLabels.map((l,p)=>je(l,p,t.xLabels.length))),D=d(()=>t.series.map(l=>({...l,color:Pe(l.color),total:l.points.reduce((p,f)=>p+f,0)})).sort((l,p)=>p.total-l.total)),G=d(()=>D.value.map(l=>p=>p.values[l.label]??0)),M=d(()=>Object.fromEntries(D.value.map(l=>[l.label,{color:l.color,label:l.label}]))),{getAreaColor:J,getCrosshairColor:he,getGradientId:X,getLineColor:xe}=It(()=>D.value,{getColor:l=>l.color,getKey:l=>l.label,gradientPrefix:"project-line"}),w=d(()=>D.value.map(l=>`
|
|
2
|
+
<linearGradient id="${X(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("")),Q=d(()=>j.value.length>0&&D.value.length>0),Y=d(()=>[0,Math.max(t.xLabels.length-1,0)]),O=d(()=>n.left),q=d(()=>n.top),V=d(()=>Math.max(m.value-n.left-n.right,0)),Z=d(()=>Math.max(js-n.top-n.bottom,0)),N=d(()=>q.value+Z.value),ee=d(()=>Math.max(V.value-c.left-c.right,0)),Te=d(()=>Math.max(...j.value.map(l=>Object.values(l.values).reduce((p,f)=>p+f,0)),0)),{clearHoverGuide:pe,handlePointerMove:me,hoverPointerY:L,hoverSelection:R}=Lt({chartRoot:y,isEnabled:()=>t.xLabels.length>0&&ee.value>0,resolveBounds:()=>({bottom:N.value,left:O.value,right:O.value+V.value,top:q.value}),resolveSelection(l){const p=O.value+V.value,f=O.value+c.left,x=p-c.right,U=Ne((l-f)/Math.max(x-f,1),0,1);return t.xLabels.length<=1?0:Math.round(U*(t.xLabels.length-1))}}),C=d(()=>{if(R.value===null||L.value===null)return null;const l=j.value[R.value];if(!l||V.value<=0||Z.value<=0)return null;const p=t.xLabels.length<=1?0:R.value/(t.xLabels.length-1),f=O.value+c.left+p*ee.value,x=Ne(L.value,q.value,N.value),ie=(Z.value<=0?0:1-(x-q.value)/Z.value)*Te.value;return{x:f,xLabel:l.label,y:x,yLabel:le(ie)}}),F=d(()=>{if(t.tickIndexes&&t.tickIndexes.length>0)return t.tickIndexes;const l=t.xLabels.length,p=l>12?5:1;return t.xLabels.map((f,x)=>x).filter(f=>f===0||f===l-1||f%p===0)});function re(l){return l?.index??0}function we(l){return l instanceof Date?"":P.value[l]??""}function Se(l){if(!l)return"";const p=D.value.map(f=>({...f,value:l.values[f.label]??0})).sort((f,x)=>x.value-f.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">${Ve(l.label)}</div>
|
|
9
|
+
<div class="grid gap-1 text-muted-foreground">
|
|
10
|
+
${p.map(f=>`
|
|
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: ${f.color}"></span>
|
|
14
|
+
<span class="truncate">${Ve(f.label)}</span>
|
|
15
|
+
</span>
|
|
16
|
+
<span class="font-mono font-medium text-foreground">${le(f.value)}</span>
|
|
17
|
+
</div>
|
|
18
|
+
`).join("")}
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
`}function je(l,p,f){if(!ae(l))return l;const U=p===0||p===f-1;return f>=90&&!U&&ae(l,"DD")==="01"?ae(l,"MMM")??l:ae(l,"MMM D")??l}function Pe(l){if(T.value!=="dark")return l;const p=De(l);return p!==null&&p<ws?Ss:l}function De(l){const p=l.trim().replace(/^#/,""),f=p.length===3?p.split("").map(ce=>`${ce}${ce}`).join(""):p;if(!/^[\da-f]{6}$/i.test(f))return null;const x=Number.parseInt(f.slice(0,2),16)/255,U=Number.parseInt(f.slice(2,4),16)/255,ie=Number.parseInt(f.slice(4,6),16)/255,Re=I(x),te=I(U),ve=I(ie);return .2126*Re+.7152*te+.0722*ve}function I(l){return l<=.03928?l/12.92:((l+.055)/1.055)**2.4}return(l,p)=>{const f=Mt;return i(),_("div",bs,[g("div",{ref_key:"chartRoot",ref:y,class:"relative",onPointerleave:p[0]||(p[0]=(...x)=>e(pe)&&e(pe)(...x)),onPointermove:p[1]||(p[1]=(...x)=>e(me)&&e(me)(...x))},[k(f,{class:"h-72 w-full",config:e(M)},{default:S(()=>[k(e(jt),{"auto-margin":!1,data:e(j),height:288,margin:n,padding:c,"svg-defs":e(w),"x-domain":e(Y),"y-domain":u},{default:S(()=>[k(e(Pt),{color:e(J),"curve-type":"monotoneX",line:!0,"line-color":e(xe),"line-width":2,opacity:.82,x:re,y:e(G)},null,8,["color","line-color","y"]),k(e(qe),{"grid-line":!1,"tick-format":we,"tick-padding":10,"tick-text-hide-overlapping":!0,"tick-text-width":56,"tick-values":e(F),type:"x"},null,8,["tick-values"]),k(e(qe),{"num-ticks":4,"tick-format":e(Dt),type:"y"},null,8,["tick-format"]),e(Q)?(i(),h(e(Rt),{key:0})):oe("",!0),e(Q)?(i(),h(e(Ct),{key:1,color:e(he),template:Se,x:re,"y-stacked":e(G)},null,8,["color","y-stacked"])):oe("",!0)]),_:1},8,["data","svg-defs","x-domain"])]),_:1},8,["config"]),e(C)?(i(),_("div",ys,[g("div",{class:"absolute border-l border-dashed border-border/80",style:Ce({height:`${e(Z)}px`,left:`${e(C).x}px`,top:`${e(q)}px`})},null,4),g("div",{class:"absolute border-t border-dashed border-border/80",style:Ce({left:`${e(O)}px`,top:`${e(C).y}px`,width:`${e(V)}px`})},null,4),g("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:Ce({left:`${e(C).x}px`,top:`${e(N)+6}px`,transform:"translateX(-50%)"})},E(e(C).xLabel),5),g("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:Ce({left:`${Math.max(e(O)-8,0)}px`,top:`${e(C).y}px`,transform:"translate(-100%, -50%)"})},E(e(C).yLabel),5)])):oe("",!0)],544),g("div",ks,[(i(!0),_(se,null,ue(e(D),x=>(i(),_("div",{key:x.label,class:"flex items-center gap-2"},[g("span",{class:"size-2.5 rounded-sm",style:Ce({backgroundColor:x.color})},null,4),g("span",xs,E(x.label),1),g("span",Ts,E(e(le)(x.total)),1)]))),128))])])}}}),Ds=Object.assign(Ps,{__name:"DashboardProjectLineChart"}),Rs={key:0,class:"mb-3 text-xs text-destructive"},Cs=K({__name:"ProjectSessionTable",props:{fetchPage:{},items:{},pagination:{}},setup(a){const t=a,n=d(()=>({items:t.items,pagination:t.pagination??{page:1,pageCount:Math.max(1,Math.ceil(t.items.length/ge)),pageSize:ge,total:t.items.length}})),{error:c,pageData:u,setPage:T}=Ye(n,t.fetchPage),y=[{accessorKey:"sessionId",cell:({row:m})=>m.original.sessionId,header:"Session ID",meta:{class:"max-w-72 truncate font-medium font-mono text-xs"}},{accessorKey:"platform",cell:({row:m})=>$e("div",{class:"flex items-center gap-2"},[$e(Qe,{class:"size-5",name:ye[m.original.platform].aiIcon}),$e("span",ye[m.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(m,j)=>{const P=Ze;return i(),_("div",null,[e(c)?(i(),_("p",Rs,E(e(c).message),1)):oe("",!0),k(P,{columns:y,data:e(u).items,"empty-text":"No sessions found.",pagination:e(u).pagination,onPageChange:e(T)},null,8,["data","pagination","onPageChange"])])}}}),Ms=Object.assign(Cs,{__name:"DashboardProjectSessionTable"}),Is={key:0,class:"mb-3 text-xs text-destructive"},Ls=K({__name:"ProjectTokenUsageTable",props:{fetchPage:{},items:{},pagination:{}},setup(a){const t=a,n=d(()=>({items:t.items,pagination:t.pagination??{page:1,pageCount:Math.max(1,Math.ceil(t.items.length/ge)),pageSize:ge,total:t.items.length}})),{error:c,pageData:u,setPage:T}=Ye(n,t.fetchPage),y=[{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(m,j)=>{const P=Ze;return i(),_("div",null,[e(c)?(i(),_("p",Is,E(e(c).message),1)):oe("",!0),k(P,{columns:y,data:e(u).items,"empty-text":"No token usage found.",pagination:e(u).pagination,onPageChange:e(T)},null,8,["data","pagination","onPageChange"])])}}}),Us=Object.assign(Ls,{__name:"DashboardProjectTokenUsageTable"}),de=["daily_trend","model_usage","session_list","token_usage"];function $s(a){return JSON.stringify([a.platform,a.repository,a.sessionId])}function As(a){try{const t=JSON.parse(a);if(Array.isArray(t)&&Me.includes(t[0]))return t[0]}catch{const t=Me.find(n=>a.startsWith(`${n}:`));if(t)return t}return null}const Fe=["#2563eb","#f97316","#0891b2","#7c3aed","#16a34a","#dc2626","#64748b"];function Oe(a){const t=Et();return Array.from({length:a},(n,c)=>{const u=a-1-c,T=ae(t.getTime()-u*864e5)??"";return et(T)})}function Os(a){return a.map((t,n)=>({date:ae(t),index:n})).filter(({date:t,index:n})=>n===0||n===a.length-1?!0:t?ae(t,"DD")==="01":!1).map(({index:t})=>t)}function Es(a){const t=st(a);return[{detail:`${A(t.totalTokens)} total tokens in this project`,icon:"solar:cpu-line-duotone",name:"Total Tokens",trend:"project total",trendTone:"neutral",value:le(t.totalTokens)},...at(t,{sessionDetail:`${A(t.sessions)} sessions across all tools`,sessionIcon:"lucide:messages-square",sessionTrend:"all tools",totalSpendIcon:"lucide:wallet"})]}function zs(a,t){const n=st(a),c=qs(a),[u="",T=""]=Oe(2).slice().reverse(),y=t.find(J=>J.date===u),m=t.find(J=>J.date===T),j=c.get(u)??0,P=c.get(T)??0,D=Ge(y?.totalTokens??0,m?.totalTokens??0,le),G=Ge(y?.costUSD??0,m?.costUSD??0,W),M=$t(j,P);return[{detail:`${A(y?.totalTokens??0)} tokens used today`,icon:"solar:cpu-line-duotone",name:"Today Tokens",subvalue:At(y),trend:D.trend,trendTone:D.trendTone,value:le(y?.totalTokens??0)},{detail:`${W(y?.costUSD??0)} spent today`,icon:"lucide:wallet",name:"Today Spend",trend:G.trend,trendTone:G.trendTone,value:W(y?.costUSD??0)},{detail:`${A(j)} sessions recorded today`,icon:"lucide:messages-square",name:"Today Sessions",trend:M.label,trendTone:M.tone,value:String(j)},...at(n,{sessionDetail:`${A(n.sessions)} total sessions for this platform`,sessionIcon:"lucide:list-checks",sessionTrend:"project total",totalSpendIcon:"lucide:receipt-text"})]}function We(a,t){const n=new Set(t),c=a.filter(m=>n.has(m.date)),u=new Map(c.map(m=>[m.date,m.models])),y=Ut(c.flatMap(m=>Object.keys(m.models))).map(m=>({model:m,totalTokens:c.reduce((j,P)=>j+(P.models[m]?.totalTokens??0),0)})).sort((m,j)=>j.totalTokens-m.totalTokens||m.model.localeCompare(j.model)).map(m=>m.model).map((m,j)=>({color:Fe[j%Fe.length],label:m,points:t.map(P=>u.get(P)?.[m]?.totalTokens??0)}));return{labels:t,series:y}}function tt(a,t,n=a.id||$s({platform:t,repository:a.repository,sessionId:a.sessionId})){return{cacheTokens:A(a.cachedInputTokens),cost:W(a.costUSD),duration:a.duration||"-",id:n,inputTokens:A(a.inputTokens),model:a.models?.join(", ")||a.model||"unknown",outputTokens:A(a.outputTokens),platform:t,reasoningTokens:A(a.reasoningOutputTokens),sessionId:a.sessionId,startedAt:ot(a.startedAt,c=>ae(c,"display")??String(c)),threadName:a.threadName,tokens:A(a.tokenTotal)}}function Bs(a,t){return a.map(n=>tt(n,t))}function st(a){return a.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(a,t){return[{detail:`${W(a.costUSD)} total project spend`,icon:t.totalSpendIcon,name:"Total Spend",trend:"all time",trendTone:"neutral",value:W(a.costUSD)},{detail:t.sessionDetail,icon:t.sessionIcon,name:"Sessions",trend:t.sessionTrend,trendTone:"neutral",value:String(a.sessions)},{detail:`${A(a.cachedInputTokens)} of ${A(a.inputTokens)} input tokens were served from cache`,icon:"lucide:database-zap",name:"Cache Hit Rate",trend:`${le(a.cachedInputTokens)} cached`,trendTone:"neutral",value:Ot(a.inputTokens>0?a.cachedInputTokens/a.inputTokens:0)},{detail:`${W(a.costUSD)} across ${A(a.sessions)} sessions`,icon:"lucide:circle-dollar-sign",name:"Avg Session Cost",trend:"per session",trendTone:"neutral",value:W(a.sessions>0?a.costUSD/a.sessions:0)}]}function Ks(a){return a.reduce((t,n)=>({costUSD:t.costUSD+n.costUSD,sessions:t.sessions+1,totalTokens:t.totalTokens+n.tokenTotal}),{costUSD:0,sessions:0,totalTokens:0})}function qs(a){return a.reduce((t,n)=>{const c=ot(n.startedAt,u=>et(zt(u)),"");return c&&t.set(c,(t.get(c)??0)+1),t},new Map)}function ot(a,t,n="-"){if(!a)return n;const c=ae(a);return c?t(c):n}const Vs=30,Ns=365,Gs=180,Fs=600,Ws=300,Hs=45e3,Js={dailyRows:[],dailyTokenUsage:[]},Xs={dailyTokenUsage:[],monthlyModelUsage:[]},Ee={dailyRows:be(),monthlyRows:be(),sessionRows:be(),weeklyRows:be()},ze={sessionRows:be(),sessionUsage:be(),sessions:[]},Qs={daily_trend:Js,model_usage:Xs,session_list:ze,token_usage:Ee};function be(){return{items:[],pagination:Gt()}}function Ys(){const a=fe(""),t=fe("all"),n=fe(!1),c=fe([]),u=fe(""),T=Object.fromEntries(de.map(s=>[s,fe(null)])),y=vt(Object.fromEntries(de.map(s=>[s,!1])));let m=0,j=0,P=null;const D=new Map,G=Nt(),{open:M,send:J,status:he}=_t(G,{immediate:!1,autoReconnect:{delay:1e3,retries:3},onConnected(){I()},onDisconnected(){U(new Error("WebSocket connection closed."))},onError(){u.value="WebSocket connection error."},onMessage(s,o){f(o.data)}}),X=d(()=>c.value.map(s=>({id:s.label,name:s.label,platforms:s.platforms,totalTokens:s.totalTokens}))),xe=d(()=>X.value.find(s=>s.id===a.value)??null),w=d(()=>de.some(s=>y[s])),Q=d(()=>n.value||w.value||X.value.length===0),Y=d(()=>ce("session_list")),O=d(()=>{const s=ce("session_list")?Me.filter(o=>B("session_list",o).sessions.length>0):xe.value?.platforms??[];return s.length===0?[]:s.map(o=>({...ye[o],value:o}))}),q=d(()=>[{label:"All",value:"all"},...O.value]),V=d(()=>O.value.flatMap(s=>B("session_list",s.value).sessions).sort((s,o)=>Date.parse(o.startedAt)-Date.parse(s.startedAt))),Z=d(()=>Ft(O.value.flatMap(s=>B("model_usage",s.value).dailyTokenUsage))),N=d(()=>Object.fromEntries(q.value.map(s=>{const o=Ks(s.value==="all"?V.value:B("session_list",s.value).sessions);return[s.value,{cost:W(o.costUSD),label:s.label,sessions:String(o.sessions),tokens:le(o.totalTokens)}]}))),ee=d(()=>N.value[t.value]),Te=d(()=>[{label:"Tokens",value:ee.value.tokens},{label:"Spend",value:ee.value.cost},{label:"Sessions",value:ee.value.sessions}]),pe=d(()=>Oe(Vs)),me=d(()=>Oe(Ns)),L=d(()=>Os(me.value)),R=d(()=>Es(V.value)),C=d(()=>{const s=B("session_list","all");return{items:s.sessionUsage.items.map(o=>tt(o,r(o.id),o.id)),pagination:s.sessionUsage.pagination}}),F=d(()=>Ue(B("token_usage","all").dailyRows)),re=d(()=>pe.value),we=d(()=>re.value),Se=d(()=>O.value.map(s=>({color:s.color,label:s.label,points:Ie(s.value,re.value)}))),je=d(()=>We(Z.value,pe.value)),Pe=d(()=>Object.fromEntries(Me.map(s=>{const o=me.value,v=B("daily_trend",s),b=B("model_usage",s),z=B("token_usage",s),Le=B("session_list",s),_e=We(b.dailyTokenUsage,o);return[s,{modelLabels:_e.labels,modelSeries:_e.series,modelTickIndexes:L.value,dayRows:z.dailyRows,monthRows:z.monthlyRows,overviewCards:zs(Le.sessions,v.dailyTokenUsage),sessionRows:z.sessionRows,sessionTableRows:{items:Bs(Le.sessionUsage.items,s),pagination:Le.sessionUsage.pagination},trendLabels:o,trendSeries:[{color:ye[s].color,label:ye[s].label,points:Ie(s,o)}],trendTickIndexes:L.value,trendTooltipLabels:o,weekRows:z.weeklyRows}]})));bt(()=>{M()}),kt(()=>{P&&(clearTimeout(P),P=null),U(new Error("Project dashboard disposed."))}),Ke(a,s=>{De(),s||te()}),Ke(q,s=>{t.value!=="all"&&(s.some(o=>o.value===t.value)||(t.value="all"))},{immediate:!0}),yt(a,s=>{s&&l(s)},{debounce:Gs,maxWait:Fs});function De(){m+=1,te(),u.value=""}async function I(){n.value=!0,u.value="";try{const s=await p({type:"project"}),o=s.find(v=>v.label===a.value);c.value=s,a.value=o?.label??s[0]?.label??""}catch(s){u.value=s instanceof Error?s.message:"Failed to load project catalog."}finally{n.value=!1}}async function l(s){const o=X.value.find(b=>b.id===s);if(!o){te();return}const v=m+1;m=v,te();for(const b of de)y[b]=!0;try{const b=await p({modules:[...de],page:1,pageSize:ge,project:o.id,type:"project_data"});if(v!==m||b.label!==o.id)return;ve(b)}catch(b){if(v!==m)return;u.value=b instanceof Error?b.message:"Failed to load project module."}finally{if(v===m)for(const b of de)y[b]=!1}}function p(s){if(he.value!=="OPEN")return Promise.reject(new Error("WebSocket is not connected."));const o=x();return new Promise((v,b)=>{const z=window.setTimeout(()=>{D.delete(o),b(new Error("WebSocket request timed out."))},Hs);D.set(o,{reject:_e=>{window.clearTimeout(z),b(_e)},requestId:o,resolve:_e=>{window.clearTimeout(z),v(_e)}}),J(JSON.stringify({...s,requestId:o}))||(window.clearTimeout(z),D.delete(o),b(new Error("Failed to send WebSocket request.")))})}function f(s){if(typeof s!="string")return;const o=Bt(s);if(!o)return;if(Kt(o)){U(new Error(o.message));return}if(qt(o)){ie(o.payload);return}if(!Vt(o))return;const v=D.get(o.requestId);v&&(D.delete(o.requestId),v.resolve(o.data))}function x(){return j+=1,`${Date.now()}-${j}`}function U(s){for(const o of D.values())o.reject(s);D.clear()}function ie(s){P&&clearTimeout(P),P=setTimeout(()=>{P=null,Re(s)},Ws)}async function Re(s){const o=a.value;await I();const v=a.value;!v||v!==o||!(s.affectedProjects.length===0||s.affectedProjects.includes(v))||await l(v)}function te(){for(const s of de){const o=T[s];o.value=null,y[s]=!1}}function ve(s){for(const o of de){const v=s.modules[o];if(v){const b=T[o];b.value=v}}}function ce(s){return T[s].value!==null}function B(s,o){return T[s].value?.[o]??Qs[s]}function Ie(s,o){const v=new Map(B("daily_trend",s).dailyTokenUsage.map(b=>[b.date,b.totalTokens]));return o.map(b=>v.get(b)??0)}function r(s){return As(s)??Me[0]}async function $(s,o){const v=a.value;if(!v)return Ee.dailyRows;const z=(await p({modules:["token_usage"],page:o,pageSize:ge,platform:s,project:v,type:"project_data"})).modules.token_usage?.[s]??Ee;return Be("token_usage",s,z),z.dailyRows}function Ue(s){return{items:s.items.map(o=>({cacheTokens:A(o.cachedInputTokens),cost:W(o.costUSD),inputTokens:A(o.inputTokens),label:o.label,models:o.models.join(", ")||"-",outputTokens:A(o.outputTokens),reasoningTokens:A(o.reasoningOutputTokens),sessions:String(o.sessionCount),tokens:A(o.totalTokens)})),pagination:s.pagination}}async function nt(s,o){const v=a.value;if(!v)return ze.sessionUsage;const z=(await p({modules:["session_list"],page:o,pageSize:ge,platform:s,project:v,type:"project_data"})).modules.session_list?.[s]??ze;return Be("session_list",s,z),z.sessionUsage}function Be(s,o,v){const b=T[s];b.value={...b.value??{},[o]:v}}return{activeScopeItems:Te,activeTab:t,allDailyUsageRowsPage:F,allModelChart:je,allOverviewCards:R,allSessionRowsPage:C,dailySeries:Se,dailyTooltipLabels:we,dailyTrendLabels:re,fetchProjectSessionListPage:nt,fetchProjectTokenUsagePage:$,isModuleLoaded:ce,isProjectModuleLoading:w,isProjectSelectDisabled:Q,isScopeReady:Y,platformTabs:O,platformViews:Pe,projects:X,selectedProjectId:a,tabSummaries:N,tabs:q,websocketError:u}}const Zs={class:"bg-background border border-input rounded-xl shadow-xs flex w-full shrink-0 flex-col overflow-hidden xl:w-xs"},ea={class:"flex items-center justify-between px-2 py-3 gap-1"},ta={class:"min-h-0 flex-1 overflow-x-hidden overflow-y-auto p-3"},sa={class:"grid gap-1"},aa={class:"flex min-w-0 w-full items-center gap-3 overflow-hidden"},oa={class:"shrink-0 flex items-center justify-center border rounded-full size-[34px] bg-background"},na={class:"min-w-0 flex-1 overflow-hidden space-y-1"},la={class:"max-w-full truncate text-sm font-medium"},ra={class:"max-w-full truncate text-xs text-muted-foreground"},ia={class:"shrink-0 text-right text-xs font-semibold text-muted-foreground tabular-nums"},ca={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"},da={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"},ua={class:"bg-background border border-input rounded-xl shadow-xs min-h-0 flex-1 overflow-y-auto"},pa={key:0,class:"flex min-h-full flex-col"},ma={class:"border-b p-4 lg:p-5"},fa={class:"flex flex-col gap-5"},ga={key:0,class:"flex flex-col gap-4 2xl:flex-row 2xl:items-start 2xl:justify-between"},ha={class:"flex items-center gap-2 text-xs text-muted-foreground"},va={class:"flex justify-between items-center"},_a={class:"min-w-0 flex-1"},ba={class:"flex flex-col items-start gap-1.5"},ya={class:"w-full flex justify-between items-center"},ka={class:"truncate text-sm font-medium"},xa={key:1,class:"block truncate text-xs text-muted-foreground tabular-nums"},Ta={class:"grid grid-cols-1 gap-3 sm:grid-cols-3"},wa={key:1,class:"truncate text-sm font-semibold tabular-nums"},Sa={class:"truncate text-xs font-medium uppercase tracking-wide text-muted-foreground"},ja={key:1,class:"text-xs text-destructive"},Pa={class:"p-4 lg:p-5"},Da={key:1,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-5 md:col-span-12"},Ra={class:"md:col-span-12"},Ca={key:0,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-7"},Ma={key:1,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-7"},Ia={key:1,class:"flex min-h-[420px] items-center justify-center p-6"},Ba=K({__name:"project",setup(a){const{activeScopeItems:t,activeTab:n,allDailyUsageRowsPage:c,allModelChart:u,allOverviewCards:T,allSessionRowsPage:y,dailySeries:m,dailyTooltipLabels:j,dailyTrendLabels:P,fetchProjectSessionListPage:D,fetchProjectTokenUsagePage:G,isModuleLoaded:M,isProjectModuleLoading:J,isProjectSelectDisabled:he,isScopeReady:X,platformTabs:xe,platformViews:w,projects:Q,selectedProjectId:Y,tabSummaries:O,tabs:q,websocketError:V}=Ys(),Z=d(()=>Q.value.find(L=>L.id===Y.value)??null),N=fe(""),ee=d(()=>{const L=N.value.trim().toLowerCase();return[...L?Q.value.filter(C=>C.name.toLowerCase().includes(L)):Q.value].sort((C,F)=>F.totalTokens-C.totalTokens)});function Te(L){he.value||L===Y.value||(Y.value=L)}function pe(L,R){const C=w.value[L];return R==="day"?C.dayRows:R==="week"?C.weekRows:R==="month"?C.monthRows:C.sessionRows}function me(L){return L.split(/[\s/-]+/).filter(Boolean).slice(0,2).map(R=>R[0]?.toUpperCase()??"").join("")}return(L,R)=>{const C=fs,F=Qe,re=ms,we=us,Se=vs,je=hs,Pe=wt,De=_s,I=Wt,l=Zt,p=Yt,f=Jt,x=Ds,U=Xt,ie=Ms,Re=Us,te=Ht,ve=es,ce=Qt,B=ts,Ie=ss;return i(),h(Ie,{modelValue:e(n),"onUpdate:modelValue":R[1]||(R[1]=r=>Ae(n)?n.value=r:null),class:"flex min-h-0 w-full flex-col gap-4 xl:flex-row"},{default:S(()=>[g("div",Zs,[g("div",ea,[k(we,null,{default:S(()=>[k(C,{modelValue:e(N),"onUpdate:modelValue":R[0]||(R[0]=r=>Ae(N)?N.value=r:null),placeholder:"Search projects..."},null,8,["modelValue"]),k(re,null,{default:S(()=>[k(F,{name:"lucide:search"})]),_:1})]),_:1})]),g("div",ta,[g("div",sa,[(i(!0),_(se,null,ue(e(ee),r=>(i(),h(Pe,{key:r.id,"aria-pressed":r.id===e(Y),class:ne([e(H)(r.id===e(Y)?"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(he),title:r.name,type:"button",variant:"ghost",onClick:$=>Te(r.id)},{default:S(()=>[g("div",aa,[g("div",oa,[k(je,null,{default:S(()=>[k(Se,null,{default:S(()=>[xt(E(me(r.name)),1)]),_:2},1024)]),_:2},1024)]),g("div",na,[g("p",la,E(r.name),1),g("p",ra,E(r.platforms.length>0?r.platforms.map($=>e(ye)[$].label).join(" / "):"No platforms detected"),1)]),g("p",ia,E(e(le)(r.totalTokens)),1)])]),_:2},1032,["aria-pressed","class","disabled","title","onClick"]))),128)),e(Q).length===0?(i(),_("div",ca," No projects available yet. ")):e(ee).length===0?(i(),_("div",da," No matching projects found. ")):oe("",!0)])])]),g("div",ua,[e(Z)?(i(),_("div",pa,[g("div",ma,[g("div",fa,[e(J)?(i(),_("div",ga,[g("div",{class:ne(e(H)("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"))},[g("div",ha,[k(De,{class:"size-3.5"}),R[2]||(R[2]=g("span",null,"Switching project...",-1))])],2)])):oe("",!0),g("div",va,[k(p,{"aria-label":"Project platform scope",class:"flex h-auto flex-wrap justify-start gap-3 bg-transparent p-0"},{default:S(()=>[(i(!0),_(se,null,ue(e(q),r=>(i(),h(l,{key:r.value,"aria-label":r.label,class:ne([e(H)("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:S(()=>[r.value==="all"?(i(),h(F,{key:0,"aria-hidden":"true",class:"size-4 text-muted-foreground",mode:"svg",name:"lucide:layout-dashboard"})):(i(),_(se,{key:1},[k(F,{name:r.aiIcon,"aria-hidden":"true",class:"dark:hidden size-5 text-muted-foreground"},null,8,["name"]),k(F,{name:`${r.aiIcon}-dark`,"aria-hidden":"true",class:"hidden dark:inline-block size-5 text-muted-foreground"},null,8,["name"])],64)),g("div",_a,[g("div",ba,[g("div",ya,[g("span",ka,E(r.label),1)]),e(X)?(i(),_("span",xa,E(e(O)[r.value].tokens)+" tokens ",1)):(i(),h(I,{key:0,class:"h-3 w-20"}))])])]),_:2},1032,["aria-label","class","value"]))),128))]),_:1}),g("div",Ta,[(i(!0),_(se,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(X)?(i(),_("p",wa,E(r.value),1)):(i(),h(I,{key:0,class:"h-5 w-16"})),g("p",Sa,E(r.label),1)]))),128))])]),e(V)?(i(),_("p",ja,E(e(V)),1)):oe("",!0)])]),g("div",Pa,[k(ve,{class:"m-0",value:"all"},{default:S(()=>[k(te,null,{default:S(()=>[e(M)("session_list")?(i(),h(f,{key:0,cards:e(T),class:"md:col-span-12 lg:grid-cols-5"},null,8,["cards"])):(i(),_("div",Da,[(i(),_(se,null,ue(5,r=>k(I,{key:r,class:"h-28 rounded-md"})),64))])),k(U,{class:"md:col-span-12",description:"Recent usage by provider",icon:"lucide:activity",title:"Daily Token Trend"},{default:S(()=>[e(M)("model_usage")?(i(),h(x,{key:0,series:e(m),"tooltip-labels":e(j),"x-labels":e(P)},null,8,["series","tooltip-labels","x-labels"])):(i(),h(I,{key:1,class:"h-80 w-full rounded-md"}))]),_:1}),k(U,{class:"md:col-span-12",description:"Usage by model",icon:"solar:cpu-line-duotone",title:"Model Usage"},{default:S(()=>[e(M)("model_usage")?(i(),h(x,{key:0,series:e(u).series,"tooltip-labels":e(u).labels,"x-labels":e(u).labels},null,8,["series","tooltip-labels","x-labels"])):(i(),h(I,{key:1,class:"h-80 w-full rounded-md"}))]),_:1}),k(U,{class:"md:col-span-12",description:"Sessions in this project",icon:"lucide:messages-square",title:"Session Statistics"},{default:S(()=>[e(M)("session_list")?(i(),h(ie,{key:0,"fetch-page":r=>e(D)("all",r).then(()=>e(y)),items:e(y).items,pagination:e(y).pagination},null,8,["fetch-page","items","pagination"])):(i(),h(I,{key:1,class:"h-72 w-full rounded-md"}))]),_:1}),k(U,{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:S(()=>[e(M)("token_usage")?(i(),h(Re,{key:0,"fetch-page":r=>e(G)("all",r).then(()=>e(c)),items:e(c).items,pagination:e(c).pagination},null,8,["fetch-page","items","pagination"])):(i(),h(I,{key:1,class:"h-72 w-full rounded-md"}))]),_:1})]),_:1})]),_:1}),(i(!0),_(se,null,ue(e(xe),r=>(i(),h(ve,{key:r.value,value:r.value,class:"m-0"},{default:S(()=>[k(te,null,{default:S(()=>[g("div",Ra,[e(M)("daily_trend")&&e(M)("session_list")?(i(),_("div",Ca,[(i(!0),_(se,null,ue(e(w)[r.value].overviewCards,$=>(i(),h(ce,{key:$.name,detail:$.detail,icon:$.icon,name:$.name,trend:$.trend,"trend-tone":$.trendTone,value:$.value},null,8,["detail","icon","name","trend","trend-tone","value"]))),128))])):(i(),_("div",Ma,[(i(),_(se,null,ue(7,$=>k(I,{key:$,class:"h-28 rounded-md"})),64))]))]),k(U,{description:`${r.label} token usage within the current project`,class:"md:col-span-12",icon:"lucide:chart-area",title:"Token Trend"},{default:S(()=>[e(M)("daily_trend")?(i(),h(x,{key:0,series:e(w)[r.value].trendSeries,"tick-indexes":e(w)[r.value].trendTickIndexes,"tooltip-labels":e(w)[r.value].trendTooltipLabels,"x-labels":e(w)[r.value].trendLabels},null,8,["series","tick-indexes","tooltip-labels","x-labels"])):(i(),h(I,{key:1,class:"h-80 w-full rounded-md"}))]),_:2},1032,["description"]),k(U,{description:`${r.label} model trend within the current project`,class:"md:col-span-12",icon:"solar:cpu-line-duotone",title:"Model Usage Trend"},{default:S(()=>[e(M)("daily_trend")?(i(),h(x,{key:0,series:e(w)[r.value].modelSeries,"tick-indexes":e(w)[r.value].modelTickIndexes,"tooltip-labels":e(w)[r.value].modelLabels,"x-labels":e(w)[r.value].modelLabels},null,8,["series","tick-indexes","tooltip-labels","x-labels"])):(i(),h(I,{key:1,class:"h-80 w-full rounded-md"}))]),_:2},1032,["description"]),e(M)("token_usage")&&e(M)("session_list")?(i(),h(B,{key:0,"daily-items":e(w)[r.value].dayRows.items,"daily-pagination":e(w)[r.value].dayRows.pagination,"fetch-page":($,Ue)=>e(G)(r.value,Ue).then(()=>pe(r.value,$)),"monthly-items":e(w)[r.value].monthRows.items,"monthly-pagination":e(w)[r.value].monthRows.pagination,"product-name":r.label,"session-items":e(w)[r.value].sessionRows.items,"session-pagination":e(w)[r.value].sessionRows.pagination,"weekly-items":e(w)[r.value].weekRows.items,"weekly-pagination":e(w)[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(I,{key:1,class:"h-72 rounded-md md:col-span-12"})),k(U,{description:`${r.label} sessions in the current project`,class:"md:col-span-12",icon:"lucide:list-tree",title:"Session List"},{default:S(()=>[e(M)("session_list")?(i(),h(ie,{key:0,"fetch-page":$=>e(D)(r.value,$).then(()=>e(w)[r.value].sessionTableRows),items:e(w)[r.value].sessionTableRows.items,pagination:e(w)[r.value].sessionTableRows.pagination},null,8,["fetch-page","items","pagination"])):(i(),h(I,{key:1,class:"h-72 w-full rounded-md"}))]),_:2},1032,["description"])]),_:2},1024)]),_:2},1032,["value"]))),128))])])):(i(),_("div",Ia,[...R[3]||(R[3]=[g("div",{class:"w-full max-w-md rounded-xl border border-dashed px-6 py-10 text-center"},[g("p",{class:"text-base font-medium text-foreground"}," No project selected "),g("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{Ba as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as O,
|
|
1
|
+
import{e as O,am as L,an as q,M as j,ao as E,ap as N,a2 as U,aq as H,H as P,ar as _,as as I,at as D,J as F,r as V,au as B,av as z,i as o,aw as M,G as b,ax as W,ay as T,az as G,aA as $,aB as J,aC as Q}from"./DfL4oXhq.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 S(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:S(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 C=typeof r.value=="object"&&"path"in r.value?B(r.value):r.value,R=typeof C=="object"?l.resolve(C).href:C;return k(R,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 C(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 R(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(C("visibility")){const s=q();let h,n=null;j(()=>{const x=Y();E(()=>{h=N(()=>{p?.value?.tagName&&(n=x.observe(p.value,async()=>{n?.(),n=null,await R(s)}))})})}),U(()=>{h&&H(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||(C("interaction")&&(n.onPointerenter=R.bind(null,void 0),n.onFocus=R.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:R,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 I(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,S=(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:S}}const Z=/2g/;function ee(){const t=navigator.connection;return!!(t&&(t.saveData||Z.test(t.effectiveType)))}export{ne as _};
|