usage-board 0.0.0 → 0.0.1
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/LICENSE +21 -0
- package/README.md +75 -0
- package/bin/cli.js +3 -0
- package/dist/index.mjs +9917 -0
- package/dist/nitro.json +15 -0
- package/dist/public/200.html +1 -0
- package/dist/public/404.html +1 -0
- package/dist/public/_nuxt/ByWgBgZ8.js +119 -0
- package/dist/public/_nuxt/CBiuWPro.js +282 -0
- package/dist/public/_nuxt/Cmq4CfR_.js +1 -0
- package/dist/public/_nuxt/CvR6h1He.js +1 -0
- package/dist/public/_nuxt/DCeZWdZx.js +105 -0
- package/dist/public/_nuxt/DJRZ2xy0.js +3 -0
- package/dist/public/_nuxt/DRIVB4-c.js +9 -0
- package/dist/public/_nuxt/R7A4Dcdm.js +1 -0
- package/dist/public/_nuxt/builds/latest.json +1 -0
- package/dist/public/_nuxt/builds/meta/ee1b1668-0818-4b73-b349-b813232bb364.json +1 -0
- package/dist/public/_nuxt/entry.DrzELaFO.css +1 -0
- package/dist/public/_nuxt/error-404.B0EXnOcv.css +1 -0
- package/dist/public/_nuxt/error-500.CnSNZoEG.css +1 -0
- package/dist/public/favicon.ico +0 -0
- package/dist/public/index.html +1 -0
- package/dist/public/logo.svg +4 -0
- package/dist/public/robots.txt +2 -0
- package/package.json +104 -11
package/dist/nitro.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Tokens Usage Analysis</title><link rel="stylesheet" href="/_nuxt/entry.DrzELaFO.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DRIVB4-c.js"><script type="module" src="/_nuxt/DRIVB4-c.js" crossorigin></script><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link rel="icon" href="/favicon.ico" sizes="any"><link rel="icon" type="image/svg+xml" href="/logo.svg"><script id="unhead:payload" type="application/json">{"title":"Tokens Usage Analysis"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{appVersion:"0.0.1"},app:{baseURL:"/",buildId:"ee1b1668-0818-4b73-b349-b813232bb364",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776412671784,false]</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Tokens Usage Analysis</title><link rel="stylesheet" href="/_nuxt/entry.DrzELaFO.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DRIVB4-c.js"><script type="module" src="/_nuxt/DRIVB4-c.js" crossorigin></script><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link rel="icon" href="/favicon.ico" sizes="any"><link rel="icon" type="image/svg+xml" href="/logo.svg"><script id="unhead:payload" type="application/json">{"title":"Tokens Usage Analysis"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{appVersion:"0.0.1"},app:{baseURL:"/",buildId:"ee1b1668-0818-4b73-b349-b813232bb364",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776412671784,false]</script></body></html>
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import{C as fe,q as me,S as Tt,s as Z,w as ve,r as Nt,t as st,v as z,x as W,y as Bt,z as G,A as yt,B as dt,D as At,E as zt,F as V,G as be,H as Yt,I as ye,J as _e,X as ke,O as Zt,K as X,L as Jt,M as xe,N as Se,P as ot,Q as $t,R as Te,T as Rt,U as Ae,V as Kt,W as kt,Y as $e,Z as De,$ as Ce,a0 as Qt,a1 as we,a2 as Re,a3 as Me,a4 as Le,a5 as Ue,a6 as Ot,a7 as Et,a8 as Oe,a9 as Ee,aa as te,b as Pt,ab as Pe,ac as Xt,ad as ee,ae as ne,h as gt,i as Y,af as it,ag as je,ah as Ve,ai as qt,aj as Ie,ak as Mt,al as We,am as Fe,d as Ge,_ as He,e as Ne,f as Be,c as ze,a as Ye,g as pt,k as Ke,l as Xe,m as qe,n as Ze,o as Je,j as Qe}from"./CBiuWPro.js";import{f as Q,A as tn,E as en,v as ft,x as jt,o as F,c as K,J as nn,a1 as an,r as Vt,a6 as Dt,G as Ct,D as ae,K as se,y as oe,i as D,g as mt,w as R,a as L,t as j,b as S,I as U,$ as xt,Z as St,N as It,a7 as sn,a2 as on,d as I}from"./DRIVB4-c.js";const ln=Object.assign(Object.assign({},fe),{tooltip:void 0,annotations:void 0});class rn extends me{constructor(e,t,n){var o;super(e),this._defaultConfig=ln,this.config=this._defaultConfig,t&&(this.updateContainer(t,!0),this.component=t.component),n&&this.setData(n,!0),!((o=this.component)===null||o===void 0)&&o.datamodel.data&&this.render()}setData(e,t){var n;const{config:o}=this;this.component&&this.component.setData(e),t||this.render(),(n=o.tooltip)===null||n===void 0||n.hide()}updateContainer(e,t){super.updateContainer(e),this._removeAllChildren(),this.component=e.component,e.sizing&&(this.component.sizing=e.sizing),this.element.appendChild(this.component.element);const n=e.tooltip;n&&(n.hasContainer()||n.setContainer(this._container),n.setComponents([this.component]));const o=e.annotations;o&&this.element.appendChild(o.element),this.element.appendChild(this._svgDefs.node()),this.element.appendChild(this._svgDefsExternal.node()),t||this.render()}updateComponent(e,t){this.component.setConfig(e),t||this.render()}update(e,t,n){e&&this.updateContainer(e,!0),t&&this.updateComponent(t,!0),n&&this.setData(n,!0),this.render()}getFitWidthScale(){const{config:e,component:t}=this,n=t;if(!n.getWidth)return 1;const o=n.getWidth()+e.margin.left+e.margin.right;return this.width/o}_preRender(){var e,t;super._preRender(),this.component.setSize(this.width,this.height,this.containerWidth,this.containerHeight),this.component.setContainerMargin(this.config.margin),(e=this.config.annotations)===null||e===void 0||e.setSize(this.width,this.height,this.containerWidth,this.containerHeight),(t=this.config.annotations)===null||t===void 0||t.setContainerMargin(this.config.margin)}_render(e){var t,n;const{config:o,component:r}=this;super._render(e),r.g.attr("transform",`translate(${o.margin.left},${o.margin.top})`),r.render(e),(t=o.annotations)===null||t===void 0||t.render(e),o.tooltip&&o.tooltip.update(),(n=o.onRenderComplete)===null||n===void 0||n.call(o,this.svg.node(),o.margin,this.containerWidth,this.containerHeight,this.width,this.height)}render(e=this.config.duration){const{config:t,component:n}=this;if(t.sizing===Tt.Extend||t.sizing===Tt.FitWidth){const o=t.sizing===Tt.FitWidth,r=n,s=r.getWidth()+t.margin.left+t.margin.right,a=r.getHeight()+t.margin.top+t.margin.bottom,d=o?this.getFitWidthScale():1,l=this.svg.attr("width"),i=this.svg.attr("height"),g=s*d,m=a*d,v=l||i;Z(this.svg,v?e:0).attr("width",g).attr("height",m).attr("viewBox",`0 0 ${s} ${o?m: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(e)})}_onResize(){var e;const{config:t}=this;super._onResize(),(e=t.tooltip)===null||e===void 0||e.hide()}destroy(){var e,t;const{component:n,config:o}=this;super.destroy(),n?.destroy(),(e=o.tooltip)===null||e===void 0||e.destroy(),(t=o.annotations)===null||t===void 0||t.destroy()}}function cn(p){return p.innerRadius}function un(p){return p.outerRadius}function dn(p){return p.startAngle}function gn(p){return p.endAngle}function hn(p){return p&&p.padAngle}function pn(p,e,t,n,o,r,s,a){var d=t-p,l=n-e,i=s-o,g=a-r,m=g*d-i*l;if(!(m*m<G))return m=(i*(e-r)-g*(p-o))/m,[p+m*d,e+m*l]}function vt(p,e,t,n,o,r,s){var a=p-t,d=e-n,l=(s?r:-r)/dt(a*a+d*d),i=l*d,g=-l*a,m=p+i,v=e+g,h=t+i,y=n+g,u=(m+h)/2,k=(v+y)/2,C=h-m,w=y-v,M=C*C+w*w,b=o-r,c=m*y-h*v,f=(w<0?-1:1)*dt(be(0,b*b*M-c*c)),A=(c*w-C*f)/M,E=(-c*C-w*f)/M,P=(c*w+C*f)/M,T=(-c*C+w*f)/M,O=A-u,_=E-k,$=P-u,B=T-k;return O*O+_*_>$*$+B*B&&(A=P,E=T),{cx:A,cy:E,x01:-i,y01:-g,x11:A*(o/b-1),y11:E*(o/b-1)}}function fn(){var p=cn,e=un,t=W(0),n=null,o=dn,r=gn,s=hn,a=null,d=ve(l);function l(){var i,g,m=+p.apply(this,arguments),v=+e.apply(this,arguments),h=o.apply(this,arguments)-Bt,y=r.apply(this,arguments)-Bt,u=zt(y-h),k=y>h;if(a||(a=i=d()),v<m&&(g=v,v=m,m=g),!(v>G))a.moveTo(0,0);else if(u>yt-G)a.moveTo(v*st(h),v*z(h)),a.arc(0,0,v,h,y,!k),m>G&&(a.moveTo(m*st(y),m*z(y)),a.arc(0,0,m,y,h,k));else{var C=h,w=y,M=h,b=y,c=u,f=u,A=s.apply(this,arguments)/2,E=A>G&&(n?+n.apply(this,arguments):dt(m*m+v*v)),P=At(zt(v-m)/2,+t.apply(this,arguments)),T=P,O=P,_,$;if(E>G){var B=Yt(E/m*z(A)),tt=Yt(E/v*z(A));(c-=B*2)>G?(B*=k?1:-1,M+=B,b-=B):(c=0,M=b=(h+y)/2),(f-=tt*2)>G?(tt*=k?1:-1,C+=tt,w-=tt):(f=0,C=w=(h+y)/2)}var q=v*st(C),et=v*z(C),lt=m*st(b),J=m*z(b);if(P>G){var rt=v*st(w),nt=v*z(w),ct=m*st(M),ht=m*z(M),N;if(u<Nt)if(N=pn(q,et,ct,ht,rt,nt,lt,J)){var ut=q-N[0],x=et-N[1],H=rt-N[0],at=nt-N[1],Gt=1/z(ye((ut*H+x*at)/(dt(ut*ut+x*x)*dt(H*H+at*at)))/2),Ht=dt(N[0]*N[0]+N[1]*N[1]);T=At(P,(m-Ht)/(Gt-1)),O=At(P,(v-Ht)/(Gt+1))}else T=O=0}f>G?O>G?(_=vt(ct,ht,q,et,v,O,k),$=vt(rt,nt,lt,J,v,O,k),a.moveTo(_.cx+_.x01,_.cy+_.y01),O<P?a.arc(_.cx,_.cy,O,V(_.y01,_.x01),V($.y01,$.x01),!k):(a.arc(_.cx,_.cy,O,V(_.y01,_.x01),V(_.y11,_.x11),!k),a.arc(0,0,v,V(_.cy+_.y11,_.cx+_.x11),V($.cy+$.y11,$.cx+$.x11),!k),a.arc($.cx,$.cy,O,V($.y11,$.x11),V($.y01,$.x01),!k))):(a.moveTo(q,et),a.arc(0,0,v,C,w,!k)):a.moveTo(q,et),!(m>G)||!(c>G)?a.lineTo(lt,J):T>G?(_=vt(lt,J,rt,nt,m,-T,k),$=vt(q,et,ct,ht,m,-T,k),a.lineTo(_.cx+_.x01,_.cy+_.y01),T<P?a.arc(_.cx,_.cy,T,V(_.y01,_.x01),V($.y01,$.x01),!k):(a.arc(_.cx,_.cy,T,V(_.y01,_.x01),V(_.y11,_.x11),!k),a.arc(0,0,m,V(_.cy+_.y11,_.cx+_.x11),V($.cy+$.y11,$.cx+$.x11),k),a.arc($.cx,$.cy,T,V($.y11,$.x11),V($.y01,$.x01),!k))):a.arc(0,0,m,b,M,k)}if(a.closePath(),i)return a=null,i+""||null}return l.centroid=function(){var i=(+p.apply(this,arguments)+ +e.apply(this,arguments))/2,g=(+o.apply(this,arguments)+ +r.apply(this,arguments))/2-Nt/2;return[st(g)*i,z(g)*i]},l.innerRadius=function(i){return arguments.length?(p=typeof i=="function"?i:W(+i),l):p},l.outerRadius=function(i){return arguments.length?(e=typeof i=="function"?i:W(+i),l):e},l.cornerRadius=function(i){return arguments.length?(t=typeof i=="function"?i:W(+i),l):t},l.padRadius=function(i){return arguments.length?(n=i==null?null:typeof i=="function"?i:W(+i),l):n},l.startAngle=function(i){return arguments.length?(o=typeof i=="function"?i:W(+i),l):o},l.endAngle=function(i){return arguments.length?(r=typeof i=="function"?i:W(+i),l):r},l.padAngle=function(i){return arguments.length?(s=typeof i=="function"?i:W(+i),l):s},l.context=function(i){return arguments.length?(a=i??null,l):a},l}function mn(p,e){return e<p?-1:e>p?1:e>=p?0:NaN}function vn(p){return p}function bn(){var p=vn,e=mn,t=null,n=W(0),o=W(yt),r=W(0);function s(a){var d,l=(a=_e(a)).length,i,g,m=0,v=new Array(l),h=new Array(l),y=+n.apply(this,arguments),u=Math.min(yt,Math.max(-yt,o.apply(this,arguments)-y)),k,C=Math.min(Math.abs(u)/l,r.apply(this,arguments)),w=C*(u<0?-1:1),M;for(d=0;d<l;++d)(M=h[v[d]=d]=+p(a[d],d,a))>0&&(m+=M);for(e!=null?v.sort(function(b,c){return e(h[b],h[c])}):t!=null&&v.sort(function(b,c){return t(a[b],a[c])}),d=0,g=m?(u-l*w)/m:0;d<l;++d,y=k)i=v[d],M=h[i],k=y+(M>0?M*g:0)+w,h[i]={data:a[i],index:d,value:M,startAngle:y,endAngle:k,padAngle:C};return h}return s.value=function(a){return arguments.length?(p=typeof a=="function"?a:W(+a),s):p},s.sortValues=function(a){return arguments.length?(e=a,t=null,s):e},s.sort=function(a){return arguments.length?(t=a,e=null,s):t},s.startAngle=function(a){return arguments.length?(n=typeof a=="function"?a:W(+a),s):n},s.endAngle=function(a){return arguments.length?(o=typeof a=="function"?a:W(+a),s):o},s.padAngle=function(a){return arguments.length?(r=typeof a=="function"?a:W(+a),s):r},s}function yn({x:p,y:e,w:t,h:n,tl:o=!1,tr:r=!1,bl:s=!1,br:a=!1,r:d=0}){let l;l=`M${p+d},${e}h${t-2*d}`;let i=r?d:0,g=r?0:d;return l+=`a${i},${i} 0 0 1 ${i},${i}`,l+=`h${g}v${g}`,l+=`v${n-2*d}`,i=a?d:0,g=a?0:d,l+=`a${i},${i} 0 0 1 ${-i},${i}`,l+=`v${g}h${-g}`,l+=`h${2*d-t}`,i=s?d:0,g=s?0:d,l+=`a${i},${i} 0 0 1 ${-i},${-i}`,l+=`h${-g}v${-g}`,l+=`v${2*d-n}`,i=o?d:0,g=o?0:d,l+=`a${i},${i} 0 0 1 ${i},${-i}`,l+=`v${-g}h${g}`,l+="z",l}const _n=Object.assign(Object.assign({},ke),{color:void 0,barMaxWidth:void 0,barWidth:void 0,dataStep:void 0,barPadding:0,roundedCorners:2,cursor:null,barMinHeight1Px:!1,barMinHeightZeroValue:null,orientation:Zt.Vertical}),ie=X`
|
|
2
|
+
label: stacked-bar-component;
|
|
3
|
+
`,kn=Jt`
|
|
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 ${`.${ie}`} {
|
|
17
|
+
--vis-stacked-bar-stroke-color: var(--vis-dark-stacked-bar-stroke-color);
|
|
18
|
+
}
|
|
19
|
+
`,_t=X`
|
|
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
|
+
`,Lt=X`
|
|
31
|
+
label: barGroup;
|
|
32
|
+
`,le=X`
|
|
33
|
+
label: barGroupExit;
|
|
34
|
+
`,xn=Object.freeze(Object.defineProperty({__proto__:null,bar:_t,barGroup:Lt,barGroupExit:le,globalStyles:kn,root:ie},Symbol.toStringTag,{value:"Module"}));class Wt extends xe{constructor(e){super(),this._defaultConfig=_n,this.config=this._defaultConfig,this.getAccessors=()=>Se(this.config.y)?this.config.y:[this.config.y],this.stacked=!0,this.events={},this._barData=[],e&&this.setConfig(e)}get bleed(){if(this._barData=this._getVisibleData(),this._barData.length===0)return{top:0,bottom:0,left:0,right:0};const e=!this.isVertical()&&this.dataScale.range()[0]>this.dataScale.range()[1],t=this.dataScale.domain(),n=this._getBarWidth()/2,o=this._barData.map((v,h)=>ot(v,this.config.x,h)),r=$t(o),s=Te(o),a=this.dataScale(r),d=this.dataScale(s),l=this.dataScale.invert(a+(e?n:-n)),i=this.dataScale.invert(d+(e?-n:n)),g=l<=t[0]?this.dataScale(t[0])-this.dataScale(l):0,m=i>t[1]?this.dataScale(i)-this.dataScale(t[1]):0;return{top:this.isVertical()?0:e?-m:g,bottom:this.isVertical()?0:e?-g:m,left:this.isVertical()?g:0,right:this.isVertical()?m:0}}get dataScale(){return this.isVertical()?this.xScale:this.yScale}get valueScale(){return this.isVertical()?this.yScale:this.xScale}isVertical(){return this.config.orientation===Zt.Vertical}_render(e){const{config:t}=this,n=Rt(e)?e:t.duration,o=this.getAccessors(),r=Ae(this._barData,0,o,this._prevNegative);this._prevNegative=r.map(h=>!!h.isMostlyNegative);const s=this.g.selectAll(`.${Lt}`).data(this._barData,(h,y)=>{var u;return`${(u=Kt(h,t.id,y))!==null&&u!==void 0?u:y}`}),a=(h,y)=>{const u=this.dataScale(ot(h,t.x,y)),k=this.isVertical()?u:0,C=this.isVertical()?0:u;return`translate(${k},${C})`},l=s.enter().append("g").attr("class",Lt).attr("transform",a).style("opacity",1).merge(s);Z(l,n).attr("transform",a).style("opacity",1);const i=s.exit().attr("class",le);Z(i,n).style("opacity",0).remove(),Z(i.selectAll(`.${_t}`),n).attr("transform",this.isVertical()?`translate(0,${this._height/3})`:`translate(${this._width/6},0)`);const g=l.selectAll(`.${_t}`).data((h,y)=>r.map((u,k)=>({datum:h,index:y,stacked:u[y],stackIndex:k,isEnding:k===r.length-1||k<=r.length-1&&r[k+1][y][0]!==u[y][1]})).filter(u=>u.stacked[0]!==u.stacked[1]),h=>h.stackIndex),v=g.enter().append("path").attr("class",_t).attr("d",h=>this._getBarPath(h,!0)).style("fill",h=>kt(h.datum,t.color,h.stackIndex)).merge(g);Z(v,n).attr("d",h=>this._getBarPath(h)).style("fill",h=>kt(h.datum,t.color,h.stackIndex)).style("cursor",h=>Kt(h.datum,t.cursor,h.stackIndex)),Z(g.exit(),n).style("opacity",0).remove()}_getBarWidth(){const{config:e,datamodel:{data:t}}=this;if($e(t))return 0;if(e.barWidth)return $t([e.barWidth,e.barMaxWidth]);const n=this.dataScale.bandwidth,o=this.dataScale.domain?this.dataScale.domain():[];let s=1+(n?o.length:o[1]-o[0])/e.dataStep||!n&&t.filter((l,i)=>{const g=ot(l,e.x,i);return g>=o[0]&&g<=o[1]}).length||t.length;!n&&s>=2&&(s+=1);const d=(s<2?1:1-e.barPadding)*(this.isVertical()?this._width:this._height)/s;return $t([d,e.barMaxWidth])}_getVisibleData(){const{config:e,datamodel:{data:t}}=this,n=this._getBarWidth(),o=t.length<2?0:n/2,r=this.dataScale,s=Math.abs(r.invert(o)-r.invert(0));return t?.filter((d,l)=>{const i=ot(d,e.x,l),g=r.domain(),m=+g[0],v=+g[1];return i>=m-s&&i<=v+s})}_getBarPath(e,t=!1){const{config:n}=this,o=this.getAccessors(),r=this._getBarWidth(),s=e.stacked[1]<0,a=e.isEnding,d=ot(e.datum,o[e.stackIndex],e.index),l=t?0:Math.abs(this.valueScale(e.stacked[0])-this.valueScale(e.stacked[1])),i=!t&&n.barMinHeight1Px&&l<1&&isFinite(d)&&d!==n.barMinHeightZeroValue?1:l,g=t?this.valueScale(0):this.valueScale(s?e.stacked[0]:e.stacked[1])-(l<1&&n.barMinHeight1Px?1:0),m=-r/2,v=r,h=n.roundedCorners?Rt(n.roundedCorners)?+n.roundedCorners:v/2:0,y=Qt(h,0,Math.min(l,v)/2),u=this.yScale.range()[0]>this.yScale.range()[1];return yn({x:this.isVertical()?m:g-i,y:this.isVertical()?g+(u?0:-i):m,w:this.isVertical()?v:i,h:this.isVertical()?i:v,tl:a&&(this.isVertical()?!s&&u||s&&!u:s),tr:a&&(this.isVertical()?!s&&u||s&&!u:!s),br:a&&(this.isVertical()?s&&u||!s&&!u:!s),bl:a&&(this.isVertical()?s&&u||!s&&!u:s),r:y})}getValueScaleExtent(e){const{datamodel:t}=this,n=this.getAccessors(),o=e?this._getVisibleData():t.data;return De(o,...n)}getDataScaleExtent(){const{config:e,datamodel:t}=this;return Ce(t.data,e.x)}getYDataExtent(e){return this.isVertical()?this.getValueScaleExtent(e):this.getDataScaleExtent()}getXDataExtent(){return this.isVertical()?this.getDataScaleExtent():this.getValueScaleExtent(!1)}}Wt.selectors=xn;const Sn=Object.assign(Object.assign({},we),{id:(p,e)=>{var t;return(t=p.id)!==null&&t!==void 0?t:e},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 Tn(p,e){p.style("fill",t=>kt(t.data,e.color,t.index)).style("opacity",0).each((t,n,o)=>{const r=o[n],s=(t.startAngle+t.endAngle)/2,a=(t.endAngle-t.startAngle)/2;r._animState={startAngle:s-a,endAngle:s+a,innerRadius:t.innerRadius,outerRadius:t.outerRadius,padAngle:t.padAngle}})}function An(p,e,t,n){p.style("transition",`fill ${n}ms`).style("fill",r=>kt(r.data,e.color,r.index));const o=r=>e.showEmptySegments||r.value?1:0;n?Z(p,n).style("opacity",o).attrTween("d",(s,a,d)=>{const l=d[a],i={startAngle:s.startAngle,endAngle:s.endAngle,innerRadius:s.innerRadius,outerRadius:s.outerRadius,padAngle:s.padAngle},g=Re(l._animState,i);return m=>(l._animState=g(m),t(l._animState))}):p.attr("d",t).style("opacity",o)}function $n(p,e){Z(p,e).style("opacity",0).remove()}const re=Array.from({length:4},(p,e)=>{const t=-Math.PI/2+e*Math.PI/2;return[t,t+Math.PI]}),[ma,va,ba,ya]=re,ce=X`
|
|
35
|
+
label: donut-component;
|
|
36
|
+
`,Dn=Jt`
|
|
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 ${`.${ce}`} {
|
|
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
|
+
`,ue=X`
|
|
67
|
+
label: background;
|
|
68
|
+
fill: var(--vis-donut-background-color);
|
|
69
|
+
`,Ut=X`
|
|
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
|
+
`,de=X`
|
|
74
|
+
label: segment-exit;
|
|
75
|
+
`,ge=X`
|
|
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
|
+
`,he=X`
|
|
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
|
+
`,Cn=Object.freeze(Object.defineProperty({__proto__:null,background:ue,centralLabel:ge,centralSubLabel:he,root:ce,segment:Ut,segmentExit:de,variables:Dn},Symbol.toStringTag,{value:"Module"}));class Ft extends Me{constructor(e){super(),this._defaultConfig=Sn,this.config=this._defaultConfig,this.datamodel=new Le,this.arcGen=fn(),this.events={},e&&this.setConfig(e),this.arcBackground=this.g.append("path"),this.arcGroup=this.g.append("g"),this.centralLabel=this.g.append("text").attr("class",ge),this.centralSubLabel=this.g.append("text").attr("class",he)}get bleed(){return{top:0,bottom:0,left:0,right:0}}_render(e){var t,n,o,r,s,a,d,l,i,g,m,v,h,y;const{config:u,datamodel:k,bleed:C}=this,w=k.data.map((x,H)=>({index:H,datum:x})).filter(x=>u.showEmptySegments||ot(x.datum,u.value,x.index)),M=Rt(e)?e:u.duration,[b,c,f,A]=re.map(x=>u.angleRange&&u.angleRange[0]===x[0]&&u.angleRange[1]===x[1]),E=b||f,P=c||A,T=this._width*(P?2:1),O=this._height*(E?2:1),_=u.radius||Math.min(T-C.left-C.right,O-C.top-C.bottom)/2,$=u.arcWidth===0?0:Qt(_-u.arcWidth,0,_-1),B=this._height/2+(b?_/2:f?-_/2:0),tt=this._width/2+(A?_/2:c?-_/2:0),q=`translate(${tt},${B})`;this.arcGroup.attr("transform",q),this.arcGen.startAngle(x=>x.startAngle).endAngle(x=>x.endAngle).innerRadius(x=>x.innerRadius).outerRadius(x=>x.outerRadius).padAngle(x=>x.padAngle).cornerRadius(u.cornerRadius);const lt=bn().startAngle((n=(t=u.angleRange)===null||t===void 0?void 0:t[0])!==null&&n!==void 0?n:0).endAngle((r=(o=u.angleRange)===null||o===void 0?void 0:o[1])!==null&&r!==void 0?r:2*Math.PI).padAngle(u.padAngle).value(x=>ot(x.datum,u.value,x.index)||0).sort((x,H)=>{var at;return(at=u.sortFunction)===null||at===void 0?void 0:at.call(u,x.datum,H.datum)})(w).map(x=>{const H=Object.assign(Object.assign({},x),{data:x.data.datum,index:x.data.index,innerRadius:$,outerRadius:_});return u.showEmptySegments&&x.endAngle-x.startAngle-x.padAngle<=Number.EPSILON&&(H.endAngle=x.startAngle+Math.max(u.emptySegmentAngle,u.padAngle),H.padAngle=x.padAngle/2),H}),J=this.arcGroup.selectAll(`.${Ut}`).data(lt,x=>u.id(x.data,x.index)),rt=J.enter().append("path").attr("class",Ut).call(Tn,u),nt=J.merge(rt);nt.call(An,u,this.arcGen,M),nt.sort((x,H)=>H.value-x.value),J.exit().attr("class",de).call($n,M);const ct=c?"start":A?"end":"middle";this.centralLabel.attr("dy",u.centralSubLabel?"-0.55em":null).style("text-anchor",ct).text((s=u.centralLabel)!==null&&s!==void 0?s:null),this.centralSubLabel.attr("dy",u.centralLabel?"0.55em":null).style("text-anchor",ct).text((a=u.centralSubLabel)!==null&&a!==void 0?a:null),u.centralSubLabelWrap&&Ue(this.centralSubLabel,$*1.9);const ht=(u.centralLabelOffsetX||0)+tt;let N=(u.centralLabelOffsetY||0)+B;E&&u.centralLabelOffsetX===void 0&&u.centralLabelOffsetY===void 0&&(N=(b?-this.centralSubLabel.node().getBoundingClientRect().height:f?this.centralLabel.node().getBoundingClientRect().height:0)+B);const ut=`translate(${ht},${N})`;this.centralLabel.attr("transform",ut),this.centralSubLabel.attr("transform",ut),this.arcBackground.attr("class",ue).attr("visibility",u.showBackground?null:"hidden").attr("transform",q),Z(this.arcBackground,M).attr("d",this.arcGen({startAngle:(g=(l=(d=u.backgroundAngleRange)===null||d===void 0?void 0:d[0])!==null&&l!==void 0?l:(i=u.angleRange)===null||i===void 0?void 0:i[0])!==null&&g!==void 0?g:0,endAngle:(y=(v=(m=u.backgroundAngleRange)===null||m===void 0?void 0:m[1])!==null&&v!==void 0?v:(h=u.angleRange)===null||h===void 0?void 0:h[1])!==null&&y!==void 0?y:2*Math.PI,innerRadius:$,outerRadius:_}))}}Ft.selectors=Cn;const wn=Q({__name:"index",props:{component:{},tooltip:{},annotations:{},duration:{},margin:{},padding:{},sizing:{},width:{},height:{},svgDefs:{},ariaLabel:{},data:{}},setup(p,{expose:e}){const t=p,{data:n}=tn(t),o=Ot(t);let r;const s=an({component:void 0,tooltip:void 0,annotations:void 0}),a=Vt(),d=()=>{r||a.value&&s.component&&(r=new rn(a.value,{...Dt(s)},n.value))};return en(()=>{var l;d(),(l=s.component)==null||l.config,r?.updateContainer({...Dt(o.value),...Dt(s)})}),ft(n,()=>{r?r.setData(n.value,!0):d()}),jt(()=>r?.destroy()),Ct(Et,{data:n,update:l=>s.component=l,destroy:()=>s.component=void 0}),Ct(Oe,{data:n,update:l=>s.tooltip=l,destroy:()=>{s.tooltip=void 0}}),Ct(Ee,{data:n,update:l=>s.annotations=l,destroy:()=>{s.annotations=void 0}}),e({component:r}),(l,i)=>(F(),K("div",{"data-vis-single-container":"",ref_key:"elRef",ref:a,class:"unovis-single-container"},[nn(l.$slots,"default")],512))}}),Rn={"data-vis-component":""},Mn=Wt.selectors,Ln=Q({__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(p,{expose:e}){const t=ae(Et),n=p,o=D(()=>t.data.value??n.data),r=Ot(n),s=Vt();return se(()=>{oe(()=>{var a;s.value=new Wt(r.value),(a=s.value)==null||a.setData(o.value),t.update(s.value)})}),jt(()=>{var a;(a=s.value)==null||a.destroy(),t.destroy()}),ft(r,(a,d)=>{var l;te(a,d)||(l=s.value)==null||l.setConfig(r.value)}),ft(o,()=>{var a;(a=s.value)==null||a.setData(o.value)}),e({component:s}),(a,d)=>(F(),K("div",Rn))}}),Un={"data-vis-component":""},On=Ft.selectors,En=Q({__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(p,{expose:e}){const t=ae(Et),n=p,o=D(()=>t.data.value??n.data),r=Ot(n),s=Vt();return se(()=>{oe(()=>{var a;s.value=new Ft(r.value),(a=s.value)==null||a.setData(o.value),t.update(s.value)})}),jt(()=>{var a;(a=s.value)==null||a.destroy(),t.destroy()}),ft(r,(a,d)=>{var l;te(a,d)||(l=s.value)==null||l.setConfig(r.value)}),ft(o,()=>{var a;(a=s.value)==null||a.setData(o.value)}),e({component:s}),(a,d)=>(F(),K("div",Un))}}),Pn={class:"mb-4 grid grid-cols-2 gap-3"},jn={class:"rounded-md border px-3 py-2"},Vn={class:"mt-1 text-xl font-semibold tabular-nums"},In={class:"rounded-md border px-3 py-2"},Wn={class:"mt-1 text-xl font-semibold tabular-nums"},Fn={class:"mt-4 flex flex-wrap justify-center items-center gap-3 text-xs text-muted-foreground"},Gn=Q({name:"StatisticalAnalysisSessionAnalysisPanel",__name:"SessionAnalysisPanel",props:{items:{},totalSessions:{}},setup(p){const e=p,t=[{color:"#2563eb",key:"tokens",label:"Token Usage"},{color:"#b6d72f",key:"duration",label:"Duration"},{color:"#f97316",key:"cost",label:"Cost"}],n={cost:{color:t[2].color,label:t[2].label},duration:{color:t[1].color,label:t[1].label},tokens:{color:t[0].color,label:t[0].label}},o={bottom:32,left:120,right:12,top:8},r=D(()=>{const c=e.items.reduce((f,A)=>f+A.costUSD,0)/e.items.length;return gt(c)}),s=D(()=>{const c=new Map;for(const T of e.items){const O=c.get(T.project)??{costUSD:0,durationMinutes:0,sessionCount:0,tokenTotal:0};O.costUSD+=T.costUSD,O.durationMinutes+=l(T.duration),O.sessionCount+=1,O.tokenTotal+=T.tokenTotal,c.set(T.project,O)}const f=Array.from(c.entries()).map(([T,O])=>({project:T,...O})).sort((T,O)=>O.costUSD-T.costUSD),A=Math.max(...f.map(T=>T.tokenTotal),0),E=Math.max(...f.map(T=>T.durationMinutes),0),P=Math.max(...f.map(T=>T.costUSD),0);return f.map((T,O)=>({...T,costLabel:gt(T.costUSD),costScore:g(T.costUSD,P),durationLabel:i(T.durationMinutes),durationScore:g(T.durationMinutes,E),index:O,tokenLabel:Y(T.tokenTotal),tokenScore:g(T.tokenTotal,A)}))}),a=D(()=>s.value.map(c=>c.index)),d=D(()=>({[Mn.bar]:k}));function l(c){const f=c.match(/(\d+)h/)?.[1],A=c.match(/(\d+)m/)?.[1];return Number(f??0)*60+Number(A??0)}function i(c){const f=Math.floor(c/60),A=c%60;return f===0?`${A}m`:A===0?`${f}h`:`${f}h ${A}m`}function g(c,f){return f>0?c/f*100:0}function m(c){return c.index}function v(c){return c.tokenScore}function h(c){return c.durationScore}function y(c){return c.costScore}function u(c,f){return t[f]?.color??t[0].color}function k(c){const f=c.datum,A=t[c.stackIndex]??t[0],E=C(f,c.stackIndex);return`
|
|
92
|
+
<div class="grid min-w-44 gap-2 rounded-md border bg-background px-3 py-2 text-xs shadow-lg">
|
|
93
|
+
<div class="font-medium text-foreground">${b(f.project)}</div>
|
|
94
|
+
<div class="flex items-center justify-between gap-4">
|
|
95
|
+
<span class="flex items-center gap-2 text-muted-foreground">
|
|
96
|
+
<span class="size-2 rounded-sm" style="background-color: ${A.color}"></span>
|
|
97
|
+
${A.label}
|
|
98
|
+
</span>
|
|
99
|
+
<span class="font-mono font-semibold text-foreground">${E}</span>
|
|
100
|
+
</div>
|
|
101
|
+
<div class="grid gap-1 border-t pt-2 text-muted-foreground">
|
|
102
|
+
<div class="flex justify-between gap-4"><span>Tokens</span><span>${f.tokenLabel}</span></div>
|
|
103
|
+
<div class="flex justify-between gap-4"><span>Duration</span><span>${f.durationLabel}</span></div>
|
|
104
|
+
<div class="flex justify-between gap-4"><span>Cost</span><span>${f.costLabel}</span></div>
|
|
105
|
+
<div class="flex justify-between gap-4"><span>Sessions</span><span>${f.sessionCount}</span></div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
`}function C(c,f){return f===0?`${c.tokenLabel} tokens`:f===1?c.durationLabel:c.costLabel}function w(c){return c instanceof Date?"":s.value.find(f=>f.index===c)?.project??""}function M(c){return c instanceof Date?"":`${Math.round(c)}%`}function b(c){return c.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}return(c,f)=>{const A=ne,E=Pt;return F(),mt(E,{description:"Token, duration, and cost grouped by project",icon:"lucide:messages-square",title:"Session Analysis"},{default:R(()=>[L("div",Pn,[L("div",jn,[f[0]||(f[0]=L("p",{class:"text-xs text-muted-foreground"}," Total Sessions ",-1)),L("p",Vn,j(p.totalSessions),1)]),L("div",In,[f[1]||(f[1]=L("p",{class:"text-xs text-muted-foreground"}," Top Session Avg ",-1)),L("p",Wn,j(r.value),1)])]),S(A,{class:"h-80 w-full",config:n},{default:R(()=>[S(U(Pe),{"auto-margin":!1,data:s.value,height:320,margin:o,"y-direction":"south"},{default:R(()=>[S(U(Ln),{"bar-max-width":28,"bar-padding":.28,color:u,cursor:"pointer",orientation:"horizontal","rounded-corners":3,x:m,y:[v,h,y]},null,8,["y"]),S(U(Xt),{"grid-line":!1,"tick-format":w,"tick-text-width":104,"tick-values":a.value,type:"y"},null,8,["tick-values"]),S(U(Xt),{"num-ticks":4,"tick-format":M,type:"x"}),S(U(ee),{triggers:d.value},null,8,["triggers"])]),_:1},8,["data"])]),_:1}),L("div",Fn,[(F(),K(St,null,xt(t,P=>L("div",{key:P.key,class:"flex items-center gap-2"},[L("span",{class:"size-2.5 rounded-sm",style:It({backgroundColor:P.color})},null,4),L("span",null,j(P.label),1)])),64))])]),_:1})}}}),Hn=Object.assign(Gn,{__name:"StatisticalAnalysisSessionAnalysisPanel"}),Nn={class:"space-y-4"},Bn={class:"flex items-start justify-between gap-3"},zn={class:"min-w-0"},Yn={class:"truncate text-sm font-medium"},Kn={class:"truncate text-xs text-muted-foreground"},Xn={class:"shrink-0 text-sm font-semibold tabular-nums"},qn={class:"h-2 overflow-hidden rounded-full bg-secondary"},Zn=Q({name:"StatisticalAnalysisUsageBarList",__name:"UsageBarList",props:{items:{}},setup(p){function e(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 t(n){return`${Math.max(n.percent,n.percent>0?3:0)}%`}return(n,o)=>(F(),K("div",Nn,[(F(!0),K(St,null,xt(p.items,r=>(F(),K("div",{key:r.label,class:"space-y-2"},[L("div",Bn,[L("div",zn,[L("p",Yn,j(r.label),1),L("p",Kn,j(r.detail),1)]),L("span",Xn,j(r.value),1)]),L("div",qn,[L("div",{class:sn(["h-full rounded-full transition-[width]",e(r.tone)]),style:It({width:t(r)})},null,6)])]))),128))]))}}),Jn=Object.assign(Zn,{__name:"StatisticalAnalysisUsageBarList"}),Qn={class:"grid gap-6 lg:grid-cols-[220px_1fr] lg:items-center"},ta={class:"flex items-center justify-center"},ea={class:"space-y-3"},na={class:"flex min-w-0 items-center gap-2"},aa={class:"truncate text-sm text-muted-foreground"},sa={class:"text-sm font-semibold tabular-nums"},oa={class:"w-12 text-right text-xs text-muted-foreground tabular-nums"},ia={class:"mt-5 border-t pt-4"},la=Q({name:"StatisticalAnalysisEfficiencyCachePanel",__name:"EfficiencyCachePanel",props:{dailyItems:{},items:{}},setup(p){const e=p,t=D(()=>e.dailyItems.reduce((h,y)=>h+y.inputTokens,0)),n=D(()=>e.dailyItems.reduce((h,y)=>h+y.cachedInputTokens,0)),o=D(()=>Math.max(t.value-n.value,0)),r=D(()=>t.value>0?n.value/t.value:0),s=D(()=>it(r.value)),a=D(()=>[{color:"#059669",key:"cached",label:"Cached Input",shareLabel:it(r.value),value:n.value,valueLabel:Y(n.value)},{color:"#0ea5e9",key:"fresh",label:"Fresh Input",shareLabel:it(t.value>0?o.value/t.value:0),value:o.value,valueLabel:Y(o.value)}]),d=D(()=>Object.fromEntries(a.value.map(h=>[h.key,{color:h.color,label:h.label}]))),l=D(()=>({[On.segment]:m}));function i(h){return h.value}function g(h){return h.color}function m(h){const y=h.data;return`
|
|
109
|
+
<div class="grid min-w-40 gap-2 rounded-md border bg-background px-3 py-2 text-xs shadow-lg">
|
|
110
|
+
<div class="flex items-center gap-2 font-medium text-foreground">
|
|
111
|
+
<span class="size-2 rounded-sm" style="background-color: ${y.color}"></span>
|
|
112
|
+
${v(y.label)}
|
|
113
|
+
</div>
|
|
114
|
+
<div class="grid gap-1 text-muted-foreground">
|
|
115
|
+
<div class="flex justify-between gap-4"><span>Tokens</span><span class="font-mono font-medium text-foreground">${y.valueLabel}</span></div>
|
|
116
|
+
<div class="flex justify-between gap-4"><span>Share</span><span class="font-mono font-medium text-foreground">${y.shareLabel}</span></div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
`}function v(h){return h.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}return(h,y)=>{const u=ne,k=Jn,C=Pt;return F(),mt(C,{description:"Cached input ratio across total input tokens",icon:"lucide:gauge",title:"Efficiency / Cache"},{default:R(()=>[L("div",Qn,[L("div",ta,[S(u,{class:"h-52 w-full max-w-56",config:U(d)},{default:R(()=>[S(U(wn),{data:U(a),height:208},{default:R(()=>[S(U(En),{"arc-width":26,"central-label":U(s),"central-sub-label":"Hit Rate",color:g,"corner-radius":4,"pad-angle":.04,value:i},null,8,["central-label"]),S(U(ee),{triggers:U(l)},null,8,["triggers"])]),_:1},8,["data"])]),_:1},8,["config"])]),L("div",ea,[(F(!0),K(St,null,xt(U(a),w=>(F(),K("div",{key:w.key,class:"grid grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-3"},[L("div",na,[L("span",{class:"size-2.5 shrink-0 rounded-full",style:It({backgroundColor:w.color})},null,4),L("span",aa,j(w.label),1)]),L("span",sa,j(w.valueLabel),1),L("span",oa,j(w.shareLabel),1)]))),128))])]),L("div",ia,[S(k,{items:p.items},null,8,["items"])])]),_:1})}}}),ra=Object.assign(la,{__name:"StatisticalAnalysisEfficiencyCachePanel"}),wt=["claudeCode","codex","gemini"];function pe(){const{payload:p}=on(),e=D(()=>p.value?wt.map(b=>p.value[b]):[]),t=D(()=>e.value.flatMap((b,c)=>b.sessionUsage.map(f=>({...f,id:`${wt[c]}:${f.id}`,sessionId:`${wt[c]}:${f.sessionId}`}))).sort((b,c)=>Date.parse(c.startedAt)-Date.parse(b.startedAt))),n=D(()=>ca(e.value.flatMap(b=>b.dailyTokenUsage))),o=D(()=>ua(e.value.flatMap(b=>b.monthlyModelUsage))),r=D(()=>Ie(t.value)),s=D(()=>n.value.reduce((b,c)=>b+c.costUSD,0)),a=D(()=>n.value.reduce((b,c)=>b+c.totalTokens,0)),d=D(()=>n.value.reduce((b,c)=>b+c.inputTokens,0)),l=D(()=>n.value.reduce((b,c)=>b+c.cachedInputTokens,0)),i=D(()=>n.value.reduce((b,c)=>b+c.outputTokens,0)),g=D(()=>n.value.reduce((b,c)=>b+c.reasoningOutputTokens,0)),m=D(()=>t.value.length),v=je(new Date),h=Ve(v),y=D(()=>n.value.find(b=>Mt(b.date)===v)),u=D(()=>n.value.find(b=>Mt(b.date)===h)),k=D(()=>qt(y.value?.costUSD??0,u.value?.costUSD??0,gt)),C=D(()=>qt(y.value?.totalTokens??0,u.value?.totalTokens??0,Y)),w=D(()=>{const b=new Map;for(const c of n.value)for(const[f,A]of Object.entries(c.models)){const E=b.get(f)??{activeDays:new Set,costUSD:0,inputTokens:0,outputTokens:0,totalTokens:0},P=c.totalTokens>0?A.totalTokens/c.totalTokens:0;E.activeDays.add(c.date),E.costUSD+=c.costUSD*P,E.inputTokens+=A.inputTokens,E.outputTokens+=A.outputTokens,E.totalTokens+=A.totalTokens,b.set(f,E)}return Array.from(b.entries()).map(([c,f],A)=>({label:c,value:gt(f.costUSD),detail:`${Y(f.totalTokens)} tokens / ${f.activeDays.size} active days`,percent:bt(f.costUSD,s.value)*100,tone:A===0?"sky":"green"})).sort((c,f)=>f.percent-c.percent)}),M=D(()=>{const b=bt(l.value,d.value),c=bt(g.value,a.value),f=bt(i.value,a.value);return[{label:"Cache Hit Rate",value:it(b),detail:`${Y(l.value)} cached input tokens`,percent:b*100,tone:"green"},{label:"Reasoning Token Share",value:it(c),detail:`${Y(g.value)} reasoning output tokens`,percent:c*100,tone:"amber"},{label:"Output Token Share",value:it(f),detail:`${Y(i.value)} output tokens`,percent:f*100,tone:"sky"}]});return{cachedInputTokens:l,costGrowthTrend:k,dailyTokenUsage:n,efficiencyMetrics:M,inputTokens:d,modelUsage:w,monthlyModelUsage:o,outputTokens:i,projectUsage:r,reasoningOutputTokens:g,sessionUsage:t,totalCost:s,totalSessions:m,totalTokens:a,tokenGrowthTrend:C}}function ca(p){const e=new Map;for(const t of p){const n=Mt(t.date),o=e.get(n)??{cachedInputTokens:0,costUSD:0,date:We(n,t.date),inputTokens:0,models:new Map,outputTokens:0,reasoningOutputTokens:0,totalTokens:0};o.cachedInputTokens+=t.cachedInputTokens,o.costUSD+=t.costUSD,o.inputTokens+=t.inputTokens,o.outputTokens+=t.outputTokens,o.reasoningOutputTokens+=t.reasoningOutputTokens,o.totalTokens+=t.totalTokens;for(const[r,s]of Object.entries(t.models)){const a=o.models.get(r)??da();a.cachedInputTokens+=s.cachedInputTokens,a.inputTokens+=s.inputTokens,a.isFallback=a.isFallback||s.isFallback,a.outputTokens+=s.outputTokens,a.reasoningOutputTokens+=s.reasoningOutputTokens,a.totalTokens+=s.totalTokens,o.models.set(r,a)}e.set(n,o)}return Array.from(e.entries()).sort((t,n)=>t[0].localeCompare(n[0])).map(([,t])=>({cachedInputTokens:t.cachedInputTokens,costUSD:Fe(t.costUSD),date:t.date,inputTokens:t.inputTokens,models:Object.fromEntries(t.models.entries()),outputTokens:t.outputTokens,reasoningOutputTokens:t.reasoningOutputTokens,totalTokens:t.totalTokens}))}function ua(p){const e=new Map;for(const t of p){const n=`${t.month}__${t.model}`,o=e.get(n)??{model:t.model,month:t.month,tokenTotal:0};o.tokenTotal+=t.tokenTotal,e.set(n,o)}return Array.from(e.values()).sort((t,n)=>t.month.localeCompare(n.month)||t.model.localeCompare(n.model))}function da(){return{cachedInputTokens:0,inputTokens:0,isFallback:!1,outputTokens:0,reasoningOutputTokens:0,totalTokens:0}}function bt(p,e){return e>0?p/e:0}const ga=Q({name:"StatisticalAnalysisTokensUsagePanel",__name:"TokensUsagePanel",setup(p){const{dailyTokenUsage:e}=pe();return(t,n)=>{const o=Ne,r=He,s=Ge,a=Ye,d=Be,l=ze,i=Pt;return F(),mt(i,{description:"Daily model activity by token type, cache reads, total usage, and cost",icon:"lucide:calendar-days",title:"Daily Token Usage"},{default:R(()=>[S(l,null,{default:R(()=>[S(s,null,{default:R(()=>[S(r,null,{default:R(()=>[S(o,null,{default:R(()=>[...n[0]||(n[0]=[I("Date",-1)])]),_:1}),S(o,null,{default:R(()=>[...n[1]||(n[1]=[I("Models",-1)])]),_:1}),S(o,{class:"text-right"},{default:R(()=>[...n[2]||(n[2]=[I(" Input ",-1)])]),_:1}),S(o,{class:"text-right"},{default:R(()=>[...n[3]||(n[3]=[I(" Output ",-1)])]),_:1}),S(o,{class:"text-right"},{default:R(()=>[...n[4]||(n[4]=[I(" Reasoning ",-1)])]),_:1}),S(o,{class:"text-right"},{default:R(()=>[...n[5]||(n[5]=[I(" Cache Read ",-1)])]),_:1}),S(o,{class:"text-right"},{default:R(()=>[...n[6]||(n[6]=[I(" Total Tokens ",-1)])]),_:1}),S(o,{class:"text-right"},{default:R(()=>[...n[7]||(n[7]=[I(" Cost (USD) ",-1)])]),_:1})]),_:1})]),_:1}),S(d,null,{default:R(()=>[(F(!0),K(St,null,xt(U(e),g=>(F(),mt(r,{key:g.date},{default:R(()=>[S(a,{class:"font-medium"},{default:R(()=>[I(j(g.date),1)]),_:2},1024),S(a,null,{default:R(()=>[I(j(Object.keys(g.models).join(", ")),1)]),_:2},1024),S(a,{class:"text-right"},{default:R(()=>[I(j(U(pt)(g.inputTokens)),1)]),_:2},1024),S(a,{class:"text-right"},{default:R(()=>[I(j(U(pt)(g.outputTokens)),1)]),_:2},1024),S(a,{class:"text-right"},{default:R(()=>[I(j(U(pt)(g.reasoningOutputTokens)),1)]),_:2},1024),S(a,{class:"text-right"},{default:R(()=>[I(j(U(pt)(g.cachedInputTokens)),1)]),_:2},1024),S(a,{class:"text-right"},{default:R(()=>[I(j(U(pt)(g.totalTokens)),1)]),_:2},1024),S(a,{class:"text-right"},{default:R(()=>[I(j(g.costUSD.toFixed(2)),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})}}}),ha=Object.assign(ga,{__name:"StatisticalAnalysisTokensUsagePanel"}),_a=Q({__name:"index",setup(p){const{cachedInputTokens:e,costGrowthTrend:t,dailyTokenUsage:n,efficiencyMetrics:o,inputTokens:r,monthlyModelUsage:s,projectUsage:a,sessionUsage:d,totalCost:l,totalSessions:i,totalTokens:g,tokenGrowthTrend:m}=pe(),v=D(()=>[{icon:"lucide:wallet",name:"Total Spend",trend:t.value.trend,trendTone:t.value.trendTone,value:gt(l.value)},{icon:"solar:cpu-line-duotone",name:"Token Usage",trend:m.value.trend,trendTone:m.value.trendTone,value:Y(g.value)},{icon:"lucide:database-zap",name:"Cache Hit Rate",trend:`${Y(e.value)} cached`,trendTone:"neutral",value:it(r.value>0?e.value/r.value:0)},{icon:"lucide:receipt-text",name:"Avg Session Cost",trend:"across all tools",trendTone:"neutral",value:gt(i.value>0?l.value/i.value:0)}]);return(h,y)=>{const u=Ke,k=qe,C=Ze,w=Je,M=Hn,b=ra,c=ha,f=Xe,A=Qe;return F(),mt(A,null,{default:R(()=>[S(u,{cards:U(v)},null,8,["cards"]),S(f,null,{default:R(()=>[S(k,{"monthly-items":U(s),class:"md:col-span-8"},null,8,["monthly-items"]),S(C,{items:U(a),class:"md:col-span-4"},null,8,["items"]),S(w,{items:U(n),class:"md:col-span-12","heat-metric":"cost",title:"Usage Trend"},null,8,["items"]),S(M,{items:U(d),"total-sessions":U(i),class:"md:col-span-6"},null,8,["items","total-sessions"]),S(b,{"daily-items":U(n),items:U(o),class:"md:col-span-6"},null,8,["daily-items","items"]),S(c,{class:"md:col-span-12"})]),_:1})]),_:1})}}});export{_a as default};
|