usage-board 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/index.mjs +796 -0
  2. package/dist/public/_nuxt/15CW3D68.js +1 -0
  3. package/dist/public/_nuxt/B6G-s9D-.js +1 -0
  4. package/dist/public/_nuxt/BeEwECnn.js +1 -0
  5. package/dist/public/_nuxt/BeygfM9p.js +105 -0
  6. package/dist/public/_nuxt/Bu4SpN_a.js +1 -0
  7. package/dist/public/_nuxt/C6ydMk2z.js +25 -0
  8. package/dist/public/_nuxt/Dn8cXZx3.js +9 -0
  9. package/dist/public/_nuxt/DysUC14A.js +119 -0
  10. package/dist/public/_nuxt/KLhV325n.js +1 -0
  11. package/dist/public/_nuxt/builds/latest.json +1 -0
  12. package/dist/public/_nuxt/builds/meta/ac4b25d6-d6eb-44bb-8c5b-b1d6f651c196.json +1 -0
  13. package/dist/public/_nuxt/chy2QJx0.js +260 -0
  14. package/dist/public/_nuxt/entry.r-q4oQC0.css +1 -0
  15. package/dist/public/_nuxt/error-404.B0EXnOcv.css +1 -0
  16. package/dist/public/_nuxt/error-500.CnSNZoEG.css +1 -0
  17. package/dist/public/_nuxt/pmnAmEjb.js +21 -0
  18. package/dist/public/favicon.ico +0 -0
  19. package/dist/public/logo.svg +4 -0
  20. package/dist/public/robots.txt +2 -0
  21. package/dist/server/chunks/_/error-500.mjs +32 -0
  22. package/dist/server/chunks/_/index.min.mjs +348 -0
  23. package/dist/server/chunks/_/prompt.mjs +279 -0
  24. package/dist/server/chunks/_/shared.cjs.prod.mjs +609 -0
  25. package/dist/server/chunks/build/client.precomputed.mjs +3 -0
  26. package/dist/server/chunks/nitro/nitro.mjs +7981 -0
  27. package/dist/server/chunks/routes/api/payload.json.mjs +642 -0
  28. package/dist/server/chunks/routes/renderer.mjs +39567 -0
  29. package/dist/server/chunks/routes/ws.mjs +1063 -0
  30. package/dist/server/chunks/virtual/_virtual_spa-template.mjs +3 -0
  31. package/dist/server/index.mjs +14 -0
  32. package/package.json +2 -2
@@ -0,0 +1,119 @@
1
+ import{K as fe,L as ve,M as At,N as Z,O as be,Q as Ht,R as it,U as N,W,X as Nt,Y as z,Z as _t,$ as pt,a0 as $t,a1 as Yt,a2 as V,a3 as ye,a4 as Kt,a5 as _e,a6 as ke,a7 as xe,a8 as Qt,a9 as X,aa as Jt,ab as Se,ac as Te,ad as lt,ae as Dt,af as Ae,ag as Mt,ah as $e,ai as Xt,aj as xt,ak as De,al as Ce,am as we,an as te,ao as Re,ap as Me,aq as Le,ar as Ue,as as Oe,at as Et,au as Pt,av as Ee,aw as Pe,ax as ee,I as jt,S as je,f as qt,z as ae,_ as ne,n as tt,g as Y,o as rt,q as Ve,ay as Ie,k as Zt,az as Fe,aA as Lt,p as We,aB as ze,s as Be,t as Ge,v as He,w as Ne,x as Ye,y as Ke,B as Xe,m as Q,H as qe,G as Ze,F as Qe}from"./chy2QJx0.js";import{_ as Je,a as ta,b as ea}from"./C6ydMk2z.js";import{z as et,G as aa,p as na,i as mt,v as Vt,o as F,c as K,C as sa,E as oa,r as It,ai as Ct,ag as wt,ad as se,Q as oe,n as ie,h as $,B as ht,w as M,a as U,t as j,b as S,D as C,K as St,J as Tt,S as Ft,Y as ia,a9 as la,d as I,a3 as ra,I as ca,a4 as ua}from"./Dn8cXZx3.js";const da=Object.assign(Object.assign({},fe),{tooltip:void 0,annotations:void 0});class ga extends ve{constructor(e,t,n){var i;super(e),this._defaultConfig=da,this.config=this._defaultConfig,t&&(this.updateContainer(t,!0),this.component=t.component),n&&this.setData(n,!0),!((i=this.component)===null||i===void 0)&&i.datamodel.data&&this.render()}setData(e,t){var n;const{config:i}=this;this.component&&this.component.setData(e),t||this.render(),(n=i.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 i=e.annotations;i&&this.element.appendChild(i.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 i=n.getWidth()+e.margin.left+e.margin.right;return this.width/i}_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:i,component:r}=this;super._render(e),r.g.attr("transform",`translate(${i.margin.left},${i.margin.top})`),r.render(e),(t=i.annotations)===null||t===void 0||t.render(e),i.tooltip&&i.tooltip.update(),(n=i.onRenderComplete)===null||n===void 0||n.call(i,this.svg.node(),i.margin,this.containerWidth,this.containerHeight,this.width,this.height)}render(e=this.config.duration){const{config:t,component:n}=this;if(t.sizing===At.Extend||t.sizing===At.FitWidth){const i=t.sizing===At.FitWidth,r=n,s=r.getWidth()+t.margin.left+t.margin.right,a=r.getHeight()+t.margin.top+t.margin.bottom,g=i?this.getFitWidthScale():1,l=this.svg.attr("width"),o=this.svg.attr("height"),h=s*g,m=a*g,b=l||o;Z(this.svg,b?e:0).attr("width",h).attr("height",m).attr("viewBox",`0 0 ${s} ${i?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:i}=this;super.destroy(),n?.destroy(),(e=i.tooltip)===null||e===void 0||e.destroy(),(t=i.annotations)===null||t===void 0||t.destroy()}}function pa(p){return p.innerRadius}function ha(p){return p.outerRadius}function ma(p){return p.startAngle}function fa(p){return p.endAngle}function va(p){return p&&p.padAngle}function ba(p,e,t,n,i,r,s,a){var g=t-p,l=n-e,o=s-i,h=a-r,m=h*g-o*l;if(!(m*m<z))return m=(o*(e-r)-h*(p-i))/m,[p+m*g,e+m*l]}function bt(p,e,t,n,i,r,s){var a=p-t,g=e-n,l=(s?r:-r)/pt(a*a+g*g),o=l*g,h=-l*a,m=p+o,b=e+h,d=t+o,v=n+h,u=(m+d)/2,k=(b+v)/2,w=d-m,R=v-b,L=w*w+R*R,y=i-r,c=m*v-d*b,f=(R<0?-1:1)*pt(ye(0,y*y*L-c*c)),A=(c*R-w*f)/L,E=(-c*w-R*f)/L,P=(c*R+w*f)/L,T=(-c*w+R*f)/L,O=A-u,_=E-k,D=P-u,H=T-k;return O*O+_*_>D*D+H*H&&(A=P,E=T),{cx:A,cy:E,x01:-o,y01:-h,x11:A*(i/y-1),y11:E*(i/y-1)}}function ya(){var p=pa,e=ha,t=W(0),n=null,i=ma,r=fa,s=va,a=null,g=be(l);function l(){var o,h,m=+p.apply(this,arguments),b=+e.apply(this,arguments),d=i.apply(this,arguments)-Nt,v=r.apply(this,arguments)-Nt,u=Yt(v-d),k=v>d;if(a||(a=o=g()),b<m&&(h=b,b=m,m=h),!(b>z))a.moveTo(0,0);else if(u>_t-z)a.moveTo(b*it(d),b*N(d)),a.arc(0,0,b,d,v,!k),m>z&&(a.moveTo(m*it(v),m*N(v)),a.arc(0,0,m,v,d,k));else{var w=d,R=v,L=d,y=v,c=u,f=u,A=s.apply(this,arguments)/2,E=A>z&&(n?+n.apply(this,arguments):pt(m*m+b*b)),P=$t(Yt(b-m)/2,+t.apply(this,arguments)),T=P,O=P,_,D;if(E>z){var H=Kt(E/m*N(A)),at=Kt(E/b*N(A));(c-=H*2)>z?(H*=k?1:-1,L+=H,y-=H):(c=0,L=y=(d+v)/2),(f-=at*2)>z?(at*=k?1:-1,w+=at,R-=at):(f=0,w=R=(d+v)/2)}var q=b*it(w),nt=b*N(w),ct=m*it(y),J=m*N(y);if(P>z){var ut=b*it(R),st=b*N(R),dt=m*it(L),ft=m*N(L),G;if(u<Ht)if(G=ba(q,nt,dt,ft,ut,st,ct,J)){var gt=q-G[0],x=nt-G[1],B=ut-G[0],ot=st-G[1],Bt=1/N(_e((gt*B+x*ot)/(pt(gt*gt+x*x)*pt(B*B+ot*ot)))/2),Gt=pt(G[0]*G[0]+G[1]*G[1]);T=$t(P,(m-Gt)/(Bt-1)),O=$t(P,(b-Gt)/(Bt+1))}else T=O=0}f>z?O>z?(_=bt(dt,ft,q,nt,b,O,k),D=bt(ut,st,ct,J,b,O,k),a.moveTo(_.cx+_.x01,_.cy+_.y01),O<P?a.arc(_.cx,_.cy,O,V(_.y01,_.x01),V(D.y01,D.x01),!k):(a.arc(_.cx,_.cy,O,V(_.y01,_.x01),V(_.y11,_.x11),!k),a.arc(0,0,b,V(_.cy+_.y11,_.cx+_.x11),V(D.cy+D.y11,D.cx+D.x11),!k),a.arc(D.cx,D.cy,O,V(D.y11,D.x11),V(D.y01,D.x01),!k))):(a.moveTo(q,nt),a.arc(0,0,b,w,R,!k)):a.moveTo(q,nt),!(m>z)||!(c>z)?a.lineTo(ct,J):T>z?(_=bt(ct,J,ut,st,m,-T,k),D=bt(q,nt,dt,ft,m,-T,k),a.lineTo(_.cx+_.x01,_.cy+_.y01),T<P?a.arc(_.cx,_.cy,T,V(_.y01,_.x01),V(D.y01,D.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(D.cy+D.y11,D.cx+D.x11),k),a.arc(D.cx,D.cy,T,V(D.y11,D.x11),V(D.y01,D.x01),!k))):a.arc(0,0,m,y,L,k)}if(a.closePath(),o)return a=null,o+""||null}return l.centroid=function(){var o=(+p.apply(this,arguments)+ +e.apply(this,arguments))/2,h=(+i.apply(this,arguments)+ +r.apply(this,arguments))/2-Ht/2;return[it(h)*o,N(h)*o]},l.innerRadius=function(o){return arguments.length?(p=typeof o=="function"?o:W(+o),l):p},l.outerRadius=function(o){return arguments.length?(e=typeof o=="function"?o:W(+o),l):e},l.cornerRadius=function(o){return arguments.length?(t=typeof o=="function"?o:W(+o),l):t},l.padRadius=function(o){return arguments.length?(n=o==null?null:typeof o=="function"?o:W(+o),l):n},l.startAngle=function(o){return arguments.length?(i=typeof o=="function"?o:W(+o),l):i},l.endAngle=function(o){return arguments.length?(r=typeof o=="function"?o:W(+o),l):r},l.padAngle=function(o){return arguments.length?(s=typeof o=="function"?o:W(+o),l):s},l.context=function(o){return arguments.length?(a=o??null,l):a},l}function _a(p,e){return e<p?-1:e>p?1:e>=p?0:NaN}function ka(p){return p}function xa(){var p=ka,e=_a,t=null,n=W(0),i=W(_t),r=W(0);function s(a){var g,l=(a=ke(a)).length,o,h,m=0,b=new Array(l),d=new Array(l),v=+n.apply(this,arguments),u=Math.min(_t,Math.max(-_t,i.apply(this,arguments)-v)),k,w=Math.min(Math.abs(u)/l,r.apply(this,arguments)),R=w*(u<0?-1:1),L;for(g=0;g<l;++g)(L=d[b[g]=g]=+p(a[g],g,a))>0&&(m+=L);for(e!=null?b.sort(function(y,c){return e(d[y],d[c])}):t!=null&&b.sort(function(y,c){return t(a[y],a[c])}),g=0,h=m?(u-l*R)/m:0;g<l;++g,v=k)o=b[g],L=d[o],k=v+(L>0?L*h:0)+R,d[o]={data:a[o],index:g,value:L,startAngle:v,endAngle:k,padAngle:w};return d}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?(i=typeof a=="function"?a:W(+a),s):i},s.padAngle=function(a){return arguments.length?(r=typeof a=="function"?a:W(+a),s):r},s}function Sa({x:p,y:e,w:t,h:n,tl:i=!1,tr:r=!1,bl:s=!1,br:a=!1,r:g=0}){let l;l=`M${p+g},${e}h${t-2*g}`;let o=r?g:0,h=r?0:g;return l+=`a${o},${o} 0 0 1 ${o},${o}`,l+=`h${h}v${h}`,l+=`v${n-2*g}`,o=a?g:0,h=a?0:g,l+=`a${o},${o} 0 0 1 ${-o},${o}`,l+=`v${h}h${-h}`,l+=`h${2*g-t}`,o=s?g:0,h=s?0:g,l+=`a${o},${o} 0 0 1 ${-o},${-o}`,l+=`h${-h}v${-h}`,l+=`v${2*g-n}`,o=i?g:0,h=i?0:g,l+=`a${o},${o} 0 0 1 ${o},${-o}`,l+=`v${-h}h${h}`,l+="z",l}const Ta=Object.assign(Object.assign({},xe),{color:void 0,barMaxWidth:void 0,barWidth:void 0,dataStep:void 0,barPadding:0,roundedCorners:2,cursor:null,barMinHeight1Px:!1,barMinHeightZeroValue:null,orientation:Qt.Vertical}),le=X`
2
+ label: stacked-bar-component;
3
+ `,Aa=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 ${`.${le}`} {
17
+ --vis-stacked-bar-stroke-color: var(--vis-dark-stacked-bar-stroke-color);
18
+ }
19
+ `,kt=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
+ `,Ut=X`
31
+ label: barGroup;
32
+ `,re=X`
33
+ label: barGroupExit;
34
+ `,$a=Object.freeze(Object.defineProperty({__proto__:null,bar:kt,barGroup:Ut,barGroupExit:re,globalStyles:Aa,root:le},Symbol.toStringTag,{value:"Module"}));class Wt extends Se{constructor(e){super(),this._defaultConfig=Ta,this.config=this._defaultConfig,this.getAccessors=()=>Te(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,i=this._barData.map((b,d)=>lt(b,this.config.x,d)),r=Dt(i),s=Ae(i),a=this.dataScale(r),g=this.dataScale(s),l=this.dataScale.invert(a+(e?n:-n)),o=this.dataScale.invert(g+(e?-n:n)),h=l<=t[0]?this.dataScale(t[0])-this.dataScale(l):0,m=o>t[1]?this.dataScale(o)-this.dataScale(t[1]):0;return{top:this.isVertical()?0:e?-m:h,bottom:this.isVertical()?0:e?-h:m,left:this.isVertical()?h: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===Qt.Vertical}_render(e){const{config:t}=this,n=Mt(e)?e:t.duration,i=this.getAccessors(),r=$e(this._barData,0,i,this._prevNegative);this._prevNegative=r.map(d=>!!d.isMostlyNegative);const s=this.g.selectAll(`.${Ut}`).data(this._barData,(d,v)=>{var u;return`${(u=Xt(d,t.id,v))!==null&&u!==void 0?u:v}`}),a=(d,v)=>{const u=this.dataScale(lt(d,t.x,v)),k=this.isVertical()?u:0,w=this.isVertical()?0:u;return`translate(${k},${w})`},l=s.enter().append("g").attr("class",Ut).attr("transform",a).style("opacity",1).merge(s);Z(l,n).attr("transform",a).style("opacity",1);const o=s.exit().attr("class",re);Z(o,n).style("opacity",0).remove(),Z(o.selectAll(`.${kt}`),n).attr("transform",this.isVertical()?`translate(0,${this._height/3})`:`translate(${this._width/6},0)`);const h=l.selectAll(`.${kt}`).data((d,v)=>r.map((u,k)=>({datum:d,index:v,stacked:u[v],stackIndex:k,isEnding:k===r.length-1||k<=r.length-1&&r[k+1][v][0]!==u[v][1]})).filter(u=>u.stacked[0]!==u.stacked[1]),d=>d.stackIndex),b=h.enter().append("path").attr("class",kt).attr("d",d=>this._getBarPath(d,!0)).style("fill",d=>xt(d.datum,t.color,d.stackIndex)).merge(h);Z(b,n).attr("d",d=>this._getBarPath(d)).style("fill",d=>xt(d.datum,t.color,d.stackIndex)).style("cursor",d=>Xt(d.datum,t.cursor,d.stackIndex)),Z(h.exit(),n).style("opacity",0).remove()}_getBarWidth(){const{config:e,datamodel:{data:t}}=this;if(De(t))return 0;if(e.barWidth)return Dt([e.barWidth,e.barMaxWidth]);const n=this.dataScale.bandwidth,i=this.dataScale.domain?this.dataScale.domain():[];let s=1+(n?i.length:i[1]-i[0])/e.dataStep||!n&&t.filter((l,o)=>{const h=lt(l,e.x,o);return h>=i[0]&&h<=i[1]}).length||t.length;!n&&s>=2&&(s+=1);const g=(s<2?1:1-e.barPadding)*(this.isVertical()?this._width:this._height)/s;return Dt([g,e.barMaxWidth])}_getVisibleData(){const{config:e,datamodel:{data:t}}=this,n=this._getBarWidth(),i=t.length<2?0:n/2,r=this.dataScale,s=Math.abs(r.invert(i)-r.invert(0));return t?.filter((g,l)=>{const o=lt(g,e.x,l),h=r.domain(),m=+h[0],b=+h[1];return o>=m-s&&o<=b+s})}_getBarPath(e,t=!1){const{config:n}=this,i=this.getAccessors(),r=this._getBarWidth(),s=e.stacked[1]<0,a=e.isEnding,g=lt(e.datum,i[e.stackIndex],e.index),l=t?0:Math.abs(this.valueScale(e.stacked[0])-this.valueScale(e.stacked[1])),o=!t&&n.barMinHeight1Px&&l<1&&isFinite(g)&&g!==n.barMinHeightZeroValue?1:l,h=t?this.valueScale(0):this.valueScale(s?e.stacked[0]:e.stacked[1])-(l<1&&n.barMinHeight1Px?1:0),m=-r/2,b=r,d=n.roundedCorners?Mt(n.roundedCorners)?+n.roundedCorners:b/2:0,v=te(d,0,Math.min(l,b)/2),u=this.yScale.range()[0]>this.yScale.range()[1];return Sa({x:this.isVertical()?m:h-o,y:this.isVertical()?h+(u?0:-o):m,w:this.isVertical()?b:o,h:this.isVertical()?o:b,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:v})}getValueScaleExtent(e){const{datamodel:t}=this,n=this.getAccessors(),i=e?this._getVisibleData():t.data;return Ce(i,...n)}getDataScaleExtent(){const{config:e,datamodel:t}=this;return we(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=$a;const Da=Object.assign(Object.assign({},Re),{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 Ca(p,e){p.style("fill",t=>xt(t.data,e.color,t.index)).style("opacity",0).each((t,n,i)=>{const r=i[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 wa(p,e,t,n){p.style("transition",`fill ${n}ms`).style("fill",r=>xt(r.data,e.color,r.index));const i=r=>e.showEmptySegments||r.value?1:0;n?Z(p,n).style("opacity",i).attrTween("d",(s,a,g)=>{const l=g[a],o={startAngle:s.startAngle,endAngle:s.endAngle,innerRadius:s.innerRadius,outerRadius:s.outerRadius,padAngle:s.padAngle},h=Me(l._animState,o);return m=>(l._animState=h(m),t(l._animState))}):p.attr("d",t).style("opacity",i)}function Ra(p,e){Z(p,e).style("opacity",0).remove()}const ce=Array.from({length:4},(p,e)=>{const t=-Math.PI/2+e*Math.PI/2;return[t,t+Math.PI]}),[xn,Sn,Tn,An]=ce,ue=X`
35
+ label: donut-component;
36
+ `,Ma=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 ${`.${ue}`} {
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
+ `,de=X`
67
+ label: background;
68
+ fill: var(--vis-donut-background-color);
69
+ `,Ot=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
+ `,ge=X`
74
+ label: segment-exit;
75
+ `,pe=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
+ `,La=Object.freeze(Object.defineProperty({__proto__:null,background:de,centralLabel:pe,centralSubLabel:he,root:ue,segment:Ot,segmentExit:ge,variables:Ma},Symbol.toStringTag,{value:"Module"}));class zt extends Le{constructor(e){super(),this._defaultConfig=Da,this.config=this._defaultConfig,this.datamodel=new Ue,this.arcGen=ya(),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",pe),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,i,r,s,a,g,l,o,h,m,b,d,v;const{config:u,datamodel:k,bleed:w}=this,R=k.data.map((x,B)=>({index:B,datum:x})).filter(x=>u.showEmptySegments||lt(x.datum,u.value,x.index)),L=Mt(e)?e:u.duration,[y,c,f,A]=ce.map(x=>u.angleRange&&u.angleRange[0]===x[0]&&u.angleRange[1]===x[1]),E=y||f,P=c||A,T=this._width*(P?2:1),O=this._height*(E?2:1),_=u.radius||Math.min(T-w.left-w.right,O-w.top-w.bottom)/2,D=u.arcWidth===0?0:te(_-u.arcWidth,0,_-1),H=this._height/2+(y?_/2:f?-_/2:0),at=this._width/2+(A?_/2:c?-_/2:0),q=`translate(${at},${H})`;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 ct=xa().startAngle((n=(t=u.angleRange)===null||t===void 0?void 0:t[0])!==null&&n!==void 0?n:0).endAngle((r=(i=u.angleRange)===null||i===void 0?void 0:i[1])!==null&&r!==void 0?r:2*Math.PI).padAngle(u.padAngle).value(x=>lt(x.datum,u.value,x.index)||0).sort((x,B)=>{var ot;return(ot=u.sortFunction)===null||ot===void 0?void 0:ot.call(u,x.datum,B.datum)})(R).map(x=>{const B=Object.assign(Object.assign({},x),{data:x.data.datum,index:x.data.index,innerRadius:D,outerRadius:_});return u.showEmptySegments&&x.endAngle-x.startAngle-x.padAngle<=Number.EPSILON&&(B.endAngle=x.startAngle+Math.max(u.emptySegmentAngle,u.padAngle),B.padAngle=x.padAngle/2),B}),J=this.arcGroup.selectAll(`.${Ot}`).data(ct,x=>u.id(x.data,x.index)),ut=J.enter().append("path").attr("class",Ot).call(Ca,u),st=J.merge(ut);st.call(wa,u,this.arcGen,L),st.sort((x,B)=>B.value-x.value),J.exit().attr("class",ge).call(Ra,L);const dt=c?"start":A?"end":"middle";this.centralLabel.attr("dy",u.centralSubLabel?"-0.55em":null).style("text-anchor",dt).text((s=u.centralLabel)!==null&&s!==void 0?s:null),this.centralSubLabel.attr("dy",u.centralLabel?"0.55em":null).style("text-anchor",dt).text((a=u.centralSubLabel)!==null&&a!==void 0?a:null),u.centralSubLabelWrap&&Oe(this.centralSubLabel,D*1.9);const ft=(u.centralLabelOffsetX||0)+at;let G=(u.centralLabelOffsetY||0)+H;E&&u.centralLabelOffsetX===void 0&&u.centralLabelOffsetY===void 0&&(G=(y?-this.centralSubLabel.node().getBoundingClientRect().height:f?this.centralLabel.node().getBoundingClientRect().height:0)+H);const gt=`translate(${ft},${G})`;this.centralLabel.attr("transform",gt),this.centralSubLabel.attr("transform",gt),this.arcBackground.attr("class",de).attr("visibility",u.showBackground?null:"hidden").attr("transform",q),Z(this.arcBackground,L).attr("d",this.arcGen({startAngle:(h=(l=(g=u.backgroundAngleRange)===null||g===void 0?void 0:g[0])!==null&&l!==void 0?l:(o=u.angleRange)===null||o===void 0?void 0:o[0])!==null&&h!==void 0?h:0,endAngle:(v=(b=(m=u.backgroundAngleRange)===null||m===void 0?void 0:m[1])!==null&&b!==void 0?b:(d=u.angleRange)===null||d===void 0?void 0:d[1])!==null&&v!==void 0?v:2*Math.PI,innerRadius:D,outerRadius:_}))}}zt.selectors=La;const Ua=et({__name:"index",props:{component:{},tooltip:{},annotations:{},duration:{},margin:{},padding:{},sizing:{},width:{},height:{},svgDefs:{},ariaLabel:{},data:{}},setup(p,{expose:e}){const t=p,{data:n}=aa(t),i=Et(t);let r;const s=oa({component:void 0,tooltip:void 0,annotations:void 0}),a=It(),g=()=>{r||a.value&&s.component&&(r=new ga(a.value,{...Ct(s)},n.value))};return na(()=>{var l;g(),(l=s.component)==null||l.config,r?.updateContainer({...Ct(i.value),...Ct(s)})}),mt(n,()=>{r?r.setData(n.value,!0):g()}),Vt(()=>r?.destroy()),wt(Pt,{data:n,update:l=>s.component=l,destroy:()=>s.component=void 0}),wt(Ee,{data:n,update:l=>s.tooltip=l,destroy:()=>{s.tooltip=void 0}}),wt(Pe,{data:n,update:l=>s.annotations=l,destroy:()=>{s.annotations=void 0}}),e({component:r}),(l,o)=>(F(),K("div",{"data-vis-single-container":"",ref_key:"elRef",ref:a,class:"unovis-single-container"},[sa(l.$slots,"default")],512))}}),Oa={"data-vis-component":""},Ea=Wt.selectors,Pa=et({__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=se(Pt),n=p,i=$(()=>t.data.value??n.data),r=Et(n),s=It();return oe(()=>{ie(()=>{var a;s.value=new Wt(r.value),(a=s.value)==null||a.setData(i.value),t.update(s.value)})}),Vt(()=>{var a;(a=s.value)==null||a.destroy(),t.destroy()}),mt(r,(a,g)=>{var l;ee(a,g)||(l=s.value)==null||l.setConfig(r.value)}),mt(i,()=>{var a;(a=s.value)==null||a.setData(i.value)}),e({component:s}),(a,g)=>(F(),K("div",Oa))}}),ja={"data-vis-component":""},Va=zt.selectors,Ia=et({__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=se(Pt),n=p,i=$(()=>t.data.value??n.data),r=Et(n),s=It();return oe(()=>{ie(()=>{var a;s.value=new zt(r.value),(a=s.value)==null||a.setData(i.value),t.update(s.value)})}),Vt(()=>{var a;(a=s.value)==null||a.destroy(),t.destroy()}),mt(r,(a,g)=>{var l;ee(a,g)||(l=s.value)==null||l.setConfig(r.value)}),mt(i,()=>{var a;(a=s.value)==null||a.setData(i.value)}),e({component:s}),(a,g)=>(F(),K("div",ja))}}),Fa={class:"mb-4 grid grid-cols-2 gap-3"},Wa={class:"rounded-md border px-3 py-2"},za={class:"mt-1 text-xl font-semibold tabular-nums"},Ba={class:"rounded-md border px-3 py-2"},Ga={class:"mt-1 text-xl font-semibold tabular-nums"},Ha={class:"mt-4 flex flex-wrap justify-center items-center gap-3 text-xs text-muted-foreground"},Na=et({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}},i={bottom:32,left:120,right:12,top:8},r=$(()=>{const c=e.items.reduce((f,A)=>f+A.costUSD,0)/e.items.length;return tt(c)}),s=$(()=>{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:tt(T.costUSD),costScore:h(T.costUSD,P),durationLabel:o(T.durationMinutes),durationScore:h(T.durationMinutes,E),index:O,tokenLabel:Y(T.tokenTotal),tokenScore:h(T.tokenTotal,A)}))}),a=$(()=>s.value.map(c=>c.index)),g=$(()=>({[Ea.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 o(c){const f=Math.floor(c/60),A=c%60;return f===0?`${A}m`:A===0?`${f}h`:`${f}h ${A}m`}function h(c,f){return f>0?c/f*100:0}function m(c){return c.index}function b(c){return c.tokenScore}function d(c){return c.durationScore}function v(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=w(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">${y(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 w(c,f){return f===0?`${c.tokenLabel} tokens`:f===1?c.durationLabel:c.costLabel}function R(c){return c instanceof Date?"":s.value.find(f=>f.index===c)?.project??""}function L(c){return c instanceof Date?"":`${Math.round(c)}%`}function y(c){return c.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}return(c,f)=>{const A=ne,E=jt;return F(),ht(E,{description:"Token, duration, and cost grouped by project",icon:"lucide:messages-square",title:"Session Analysis"},{default:M(()=>[U("div",Fa,[U("div",Wa,[f[0]||(f[0]=U("p",{class:"text-xs text-muted-foreground"}," Total Sessions ",-1)),U("p",za,j(p.totalSessions),1)]),U("div",Ba,[f[1]||(f[1]=U("p",{class:"text-xs text-muted-foreground"}," Top Session Avg ",-1)),U("p",Ga,j(r.value),1)])]),S(A,{class:"h-80 w-full",config:n},{default:M(()=>[S(C(je),{"auto-margin":!1,data:s.value,height:320,margin:i,"y-direction":"south"},{default:M(()=>[S(C(Pa),{"bar-max-width":28,"bar-padding":.28,color:u,cursor:"pointer",orientation:"horizontal","rounded-corners":3,x:m,y:[b,d,v]},null,8,["y"]),S(C(qt),{"grid-line":!1,"tick-format":R,"tick-text-width":100,"tick-text-fit-mode":"trim","tick-text-trim-type":"end","tick-values":a.value,type:"y"},null,8,["tick-values"]),S(C(qt),{"num-ticks":4,"tick-format":L,type:"x"}),S(C(ae),{triggers:g.value},null,8,["triggers"])]),_:1},8,["data"])]),_:1}),U("div",Ha,[(F(),K(Tt,null,St(t,P=>U("div",{key:P.key,class:"flex items-center gap-2"},[U("span",{class:"size-2.5 rounded-sm",style:Ft({backgroundColor:P.color})},null,4),U("span",null,j(P.label),1)])),64))])]),_:1})}}}),Ya=Object.assign(Na,{__name:"StatisticalAnalysisSessionAnalysisPanel"}),Ka={class:"space-y-4"},Xa={class:"flex items-start justify-between gap-3"},qa={class:"min-w-0"},Za={class:"truncate text-sm font-medium"},Qa={class:"truncate text-xs text-muted-foreground"},Ja={class:"shrink-0 text-sm font-semibold tabular-nums"},tn={class:"h-2 overflow-hidden rounded-full bg-secondary"},en=et({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,i)=>(F(),K("div",Ka,[(F(!0),K(Tt,null,St(p.items,r=>(F(),K("div",{key:r.label,class:"space-y-2"},[U("div",Xa,[U("div",qa,[U("p",Za,j(r.label),1),U("p",Qa,j(r.detail),1)]),U("span",Ja,j(r.value),1)]),U("div",tn,[U("div",{class:ia(["h-full rounded-full transition-[width]",e(r.tone)]),style:Ft({width:t(r)})},null,6)])]))),128))]))}}),an=Object.assign(en,{__name:"StatisticalAnalysisUsageBarList"}),nn={class:"grid gap-6 lg:grid-cols-[220px_1fr] lg:items-center"},sn={class:"flex items-center justify-center"},on={class:"space-y-3"},ln={class:"flex min-w-0 items-center gap-2"},rn={class:"truncate text-sm text-muted-foreground"},cn={class:"text-sm font-semibold tabular-nums"},un={class:"w-12 text-right text-xs text-muted-foreground tabular-nums"},dn={class:"mt-5 border-t pt-4"},gn=et({name:"StatisticalAnalysisEfficiencyCachePanel",__name:"EfficiencyCachePanel",props:{dailyItems:{},items:{}},setup(p){const e=p,t=$(()=>e.dailyItems.reduce((d,v)=>d+v.inputTokens,0)),n=$(()=>e.dailyItems.reduce((d,v)=>d+v.cachedInputTokens,0)),i=$(()=>Math.max(t.value-n.value,0)),r=$(()=>t.value>0?n.value/t.value:0),s=$(()=>rt(r.value)),a=$(()=>[{color:"#059669",key:"cached",label:"Cached Input",shareLabel:rt(r.value),value:n.value,valueLabel:Y(n.value)},{color:"#0ea5e9",key:"fresh",label:"Fresh Input",shareLabel:rt(t.value>0?i.value/t.value:0),value:i.value,valueLabel:Y(i.value)}]),g=$(()=>Object.fromEntries(a.value.map(d=>[d.key,{color:d.color,label:d.label}]))),l=$(()=>({[Va.segment]:m}));function o(d){return d.value}function h(d){return d.color}function m(d){const v=d.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: ${v.color}"></span>
112
+ ${b(v.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">${v.valueLabel}</span></div>
116
+ <div class="flex justify-between gap-4"><span>Share</span><span class="font-mono font-medium text-foreground">${v.shareLabel}</span></div>
117
+ </div>
118
+ </div>
119
+ `}function b(d){return d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}return(d,v)=>{const u=ne,k=an,w=jt;return F(),ht(w,{description:"Cached input ratio across total input tokens",icon:"lucide:gauge",title:"Efficiency / Cache"},{default:M(()=>[U("div",nn,[U("div",sn,[S(u,{class:"h-52 w-full max-w-56",config:C(g)},{default:M(()=>[S(C(Ua),{data:C(a),height:208},{default:M(()=>[S(C(Ia),{"arc-width":26,"central-label":C(s),"central-sub-label":"Hit Rate",color:h,"corner-radius":4,"pad-angle":.04,value:o},null,8,["central-label"]),S(C(ae),{triggers:C(l)},null,8,["triggers"])]),_:1},8,["data"])]),_:1},8,["config"])]),U("div",on,[(F(!0),K(Tt,null,St(C(a),R=>(F(),K("div",{key:R.key,class:"grid grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-3"},[U("div",ln,[U("span",{class:"size-2.5 shrink-0 rounded-full",style:Ft({backgroundColor:R.color})},null,4),U("span",rn,j(R.label),1)]),U("span",cn,j(R.valueLabel),1),U("span",un,j(R.shareLabel),1)]))),128))])]),U("div",dn,[S(k,{items:p.items},null,8,["items"])])]),_:1})}}}),pn=Object.assign(gn,{__name:"StatisticalAnalysisEfficiencyCachePanel"}),Rt=["claudeCode","codex","gemini"];function me(){const{payload:p}=la(),e=$(()=>p.value?Rt.map(y=>p.value[y]):[]),t=$(()=>e.value.flatMap((y,c)=>y.sessionUsage.map(f=>({...f,id:`${Rt[c]}:${f.id}`,sessionId:`${Rt[c]}:${f.sessionId}`}))).sort((y,c)=>Date.parse(c.startedAt)-Date.parse(y.startedAt))),n=$(()=>hn(e.value.flatMap(y=>y.dailyTokenUsage))),i=$(()=>mn(e.value.flatMap(y=>y.monthlyModelUsage))),r=$(()=>Fe(t.value)),s=$(()=>n.value.reduce((y,c)=>y+c.costUSD,0)),a=$(()=>n.value.reduce((y,c)=>y+c.totalTokens,0)),g=$(()=>n.value.reduce((y,c)=>y+c.inputTokens,0)),l=$(()=>n.value.reduce((y,c)=>y+c.cachedInputTokens,0)),o=$(()=>n.value.reduce((y,c)=>y+c.outputTokens,0)),h=$(()=>n.value.reduce((y,c)=>y+c.reasoningOutputTokens,0)),m=$(()=>t.value.length),b=Ve(new Date),d=Ie(b),v=$(()=>n.value.find(y=>Lt(y.date)===b)),u=$(()=>n.value.find(y=>Lt(y.date)===d)),k=$(()=>Zt(v.value?.costUSD??0,u.value?.costUSD??0,tt)),w=$(()=>Zt(v.value?.totalTokens??0,u.value?.totalTokens??0,Y)),R=$(()=>{const y=new Map;for(const c of n.value)for(const[f,A]of Object.entries(c.models)){const E=y.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,y.set(f,E)}return Array.from(y.entries()).map(([c,f],A)=>({label:c,value:tt(f.costUSD),detail:`${Y(f.totalTokens)} tokens / ${f.activeDays.size} active days`,percent:yt(f.costUSD,s.value)*100,tone:A===0?"sky":"green"})).sort((c,f)=>f.percent-c.percent)}),L=$(()=>{const y=yt(l.value,g.value),c=yt(h.value,a.value),f=yt(o.value,a.value);return[{label:"Cache Hit Rate",value:rt(y),detail:`${Y(l.value)} cached input tokens`,percent:y*100,tone:"green"},{label:"Reasoning Token Share",value:rt(c),detail:`${Y(h.value)} reasoning output tokens`,percent:c*100,tone:"amber"},{label:"Output Token Share",value:rt(f),detail:`${Y(o.value)} output tokens`,percent:f*100,tone:"sky"}]});return{cachedInputTokens:l,costGrowthTrend:k,dailyTokenUsage:n,efficiencyMetrics:L,inputTokens:g,modelUsage:R,monthlyModelUsage:i,outputTokens:o,projectUsage:r,reasoningOutputTokens:h,sessionUsage:t,totalCost:s,totalSessions:m,totalTokens:a,tokenGrowthTrend:w}}function hn(p){const e=new Map;for(const t of p){const n=Lt(t.date),i=e.get(n)??{cachedInputTokens:0,costUSD:0,date:We(n,t.date),inputTokens:0,models:new Map,outputTokens:0,reasoningOutputTokens:0,totalTokens:0};i.cachedInputTokens+=t.cachedInputTokens,i.costUSD+=t.costUSD,i.inputTokens+=t.inputTokens,i.outputTokens+=t.outputTokens,i.reasoningOutputTokens+=t.reasoningOutputTokens,i.totalTokens+=t.totalTokens;for(const[r,s]of Object.entries(t.models)){const a=i.models.get(r)??fn();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,i.models.set(r,a)}e.set(n,i)}return Array.from(e.entries()).sort((t,n)=>n[0].localeCompare(t[0])).map(([,t])=>({cachedInputTokens:t.cachedInputTokens,costUSD:ze(t.costUSD),date:t.date,inputTokens:t.inputTokens,models:Object.fromEntries(t.models.entries()),outputTokens:t.outputTokens,reasoningOutputTokens:t.reasoningOutputTokens,totalTokens:t.totalTokens}))}function mn(p){const e=new Map;for(const t of p){const n=`${t.month}__${t.model}`,i=e.get(n)??{model:t.model,month:t.month,tokenTotal:0};i.tokenTotal+=t.tokenTotal,e.set(n,i)}return Array.from(e.values()).sort((t,n)=>t.month.localeCompare(n.month)||t.model.localeCompare(n.model))}function fn(){return{cachedInputTokens:0,inputTokens:0,isFallback:!1,outputTokens:0,reasoningOutputTokens:0,totalTokens:0}}function yt(p,e){return e>0?p/e:0}const vt=10,vn=et({name:"StatisticalAnalysisTokensUsagePanel",__name:"TokensUsagePanel",setup(p){const{dailyTokenUsage:e}=me(),t=ua(1),n=$(()=>Math.max(1,Math.ceil(e.value.length/vt))),i=$(()=>{const s=(Math.min(t.value,n.value)-1)*vt;return e.value.slice(s,s+vt)});return mt(e,()=>{t.value=1}),(r,s)=>{const a=He,g=Ge,l=Be,o=Xe,h=Ne,m=Ye,b=Ke,d=jt;return F(),ht(d,{description:"Daily model activity by token type, cache reads, total usage, and cost",icon:"lucide:calendar-days",title:"Daily Token Usage"},{default:M(()=>[S(m,null,{default:M(()=>[S(l,null,{default:M(()=>[S(g,null,{default:M(()=>[S(a,null,{default:M(()=>[...s[1]||(s[1]=[I("Date",-1)])]),_:1}),S(a,null,{default:M(()=>[...s[2]||(s[2]=[I("Models",-1)])]),_:1}),S(a,{class:"text-right"},{default:M(()=>[...s[3]||(s[3]=[I(" Input ",-1)])]),_:1}),S(a,{class:"text-right"},{default:M(()=>[...s[4]||(s[4]=[I(" Output ",-1)])]),_:1}),S(a,{class:"text-right"},{default:M(()=>[...s[5]||(s[5]=[I(" Reasoning ",-1)])]),_:1}),S(a,{class:"text-right"},{default:M(()=>[...s[6]||(s[6]=[I(" Cache Read ",-1)])]),_:1}),S(a,{class:"text-right"},{default:M(()=>[...s[7]||(s[7]=[I(" Total Tokens ",-1)])]),_:1}),S(a,{class:"text-right"},{default:M(()=>[...s[8]||(s[8]=[I(" Cost (USD) ",-1)])]),_:1})]),_:1})]),_:1}),S(h,null,{default:M(()=>[(F(!0),K(Tt,null,St(C(i),v=>(F(),ht(g,{key:v.date},{default:M(()=>[S(o,{class:"font-medium"},{default:M(()=>[I(j(v.date),1)]),_:2},1024),S(o,null,{default:M(()=>[I(j(Object.keys(v.models).join(", ")),1)]),_:2},1024),S(o,{class:"text-right"},{default:M(()=>[I(j(C(Q)(v.inputTokens)),1)]),_:2},1024),S(o,{class:"text-right"},{default:M(()=>[I(j(C(Q)(v.outputTokens)),1)]),_:2},1024),S(o,{class:"text-right"},{default:M(()=>[I(j(C(Q)(v.reasoningOutputTokens)),1)]),_:2},1024),S(o,{class:"text-right"},{default:M(()=>[I(j(C(Q)(v.cachedInputTokens)),1)]),_:2},1024),S(o,{class:"text-right"},{default:M(()=>[I(j(C(Q)(v.totalTokens)),1)]),_:2},1024),S(o,{class:"text-right"},{default:M(()=>[I(j(v.costUSD.toFixed(2)),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1}),C(e).length>vt?(F(),ht(b,{key:0,page:C(t),"onUpdate:page":s[0]||(s[0]=v=>ra(t)?t.value=v:null),"page-count":C(n),"page-size":vt,total:C(e).length},null,8,["page","page-count","total"])):ca("",!0)]),_:1})}}}),bn=Object.assign(vn,{__name:"StatisticalAnalysisTokensUsagePanel"}),$n=et({__name:"index",setup(p){const{cachedInputTokens:e,costGrowthTrend:t,dailyTokenUsage:n,efficiencyMetrics:i,inputTokens:r,monthlyModelUsage:s,projectUsage:a,sessionUsage:g,totalCost:l,totalSessions:o,totalTokens:h,tokenGrowthTrend:m}=me(),b=$(()=>[{detail:`${tt(l.value)} total spend across all tools`,icon:"lucide:wallet",name:"Total Spend",trend:t.value.trend,trendTone:t.value.trendTone,value:tt(l.value)},{detail:`${Q(h.value)} total tokens across all tools`,icon:"solar:cpu-line-duotone",name:"Token Usage",trend:m.value.trend,trendTone:m.value.trendTone,value:Y(h.value)},{detail:`${Q(e.value)} of ${Q(r.value)} input tokens were served from cache`,icon:"lucide:database-zap",name:"Cache Hit Rate",trend:`${Y(e.value)} cached`,trendTone:"neutral",value:rt(r.value>0?e.value/r.value:0)},{detail:`${tt(l.value)} across ${Q(o.value)} sessions`,icon:"lucide:receipt-text",name:"Avg Session Cost",trend:"across all tools",trendTone:"neutral",value:tt(o.value>0?l.value/o.value:0)}]);return(d,v)=>{const u=qe,k=Je,w=ta,R=ea,L=Ya,y=pn,c=bn,f=Ze,A=Qe;return F(),ht(A,null,{default:M(()=>[S(u,{cards:C(b)},null,8,["cards"]),S(f,null,{default:M(()=>[S(k,{"monthly-items":C(s),class:"md:col-span-8"},null,8,["monthly-items"]),S(w,{items:C(a),class:"md:col-span-4"},null,8,["items"]),S(R,{items:C(n),class:"md:col-span-12","heat-metric":"cost",title:"Usage Trend"},null,8,["items"]),S(L,{items:C(g),"total-sessions":C(o),class:"md:col-span-6"},null,8,["items","total-sessions"]),S(y,{"daily-items":C(n),items:C(i),class:"md:col-span-6"},null,8,["daily-items","items"]),S(c,{class:"md:col-span-12"})]),_:1})]),_:1})}}});export{$n as default};
@@ -0,0 +1 @@
1
+ import{I as j,g as $,n as C,s as M,t as A,v as z,w as B,x as I,y as E,B as H,m as v,F as O,H as F,G as K,E as V}from"./chy2QJx0.js";import{_ as G,a as J,b as L}from"./C6ydMk2z.js";import{_ as q,e as Q}from"./Bu4SpN_a.js";import{z as U,o as T,B as h,w as s,a as _,t as c,D as a,b as t,d as n,c as W,K as X,J as Y,I as Z,a3 as ee,a4 as te,h as r,a9 as se,aa as oe,ab as ae,ac as ne}from"./Dn8cXZx3.js";const le={class:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-3"},re={class:"rounded-md border px-3 py-2"},ue={class:"mt-1 text-lg font-semibold tabular-nums"},de={class:"rounded-md border px-3 py-2"},me={class:"mt-1 text-lg font-semibold tabular-nums"},ie={class:"rounded-md border px-3 py-2"},ce={class:"mt-1 text-lg font-semibold tabular-nums"},pe=U({name:"UsageAnalyticsSessionUsageTable",__name:"SessionUsageTable",props:{items:{},pageSize:{default:10},productName:{default:"Product"}},setup(o){const d=o,m=te(1),f=r(()=>Math.max(1,Math.ceil(d.items.length/d.pageSize))),w=r(()=>{const e=(Math.min(m.value,f.value)-1)*d.pageSize;return d.items.slice(e,e+d.pageSize)}),y=r(()=>d.items.reduce((u,e)=>u+e.costUSD,0)),b=r(()=>d.items.reduce((u,e)=>u+e.tokenTotal,0));function l(u){return new Intl.DateTimeFormat("en-US",{day:"2-digit",hour:"2-digit",minute:"2-digit",month:"short"}).format(new Date(u))}return(u,e)=>{const i=z,x=A,k=M,g=H,R=q,P=B,D=I,S=E,N=j;return T(),h(N,{description:`Each row maps one ${o.productName} session to its session-level token consumption.`,icon:"lucide:file-json-2",title:`${o.productName} Session Statistics`},{default:s(()=>[_("div",le,[_("div",re,[e[1]||(e[1]=_("p",{class:"text-xs text-muted-foreground"}," Sessions ",-1)),_("p",ue,c(o.items.length),1)]),_("div",de,[e[2]||(e[2]=_("p",{class:"text-xs text-muted-foreground"}," Tokens ",-1)),_("p",me,c(("formatCompactNumber"in u?u.formatCompactNumber:a($))(a(b))),1)]),_("div",ie,[e[3]||(e[3]=_("p",{class:"text-xs text-muted-foreground"}," Spend ",-1)),_("p",ce,c(("formatCurrency"in u?u.formatCurrency:a(C))(a(y))),1)])]),t(D,null,{default:s(()=>[t(k,null,{default:s(()=>[t(x,null,{default:s(()=>[t(i,null,{default:s(()=>[...e[4]||(e[4]=[n("Session ID",-1)])]),_:1}),t(i,null,{default:s(()=>[...e[5]||(e[5]=[n("Project",-1)])]),_:1}),t(i,null,{default:s(()=>[...e[6]||(e[6]=[n("Thread",-1)])]),_:1}),t(i,null,{default:s(()=>[...e[7]||(e[7]=[n("Model",-1)])]),_:1}),t(i,null,{default:s(()=>[...e[8]||(e[8]=[n("Started",-1)])]),_:1}),t(i,{class:"text-right"},{default:s(()=>[...e[9]||(e[9]=[n(" Duration ",-1)])]),_:1}),t(i,{class:"text-right"},{default:s(()=>[...e[10]||(e[10]=[n(" Input ",-1)])]),_:1}),t(i,{class:"text-right"},{default:s(()=>[...e[11]||(e[11]=[n(" Output ",-1)])]),_:1}),t(i,{class:"text-right"},{default:s(()=>[...e[12]||(e[12]=[n(" Total Tokens ",-1)])]),_:1}),t(i,{class:"text-right"},{default:s(()=>[...e[13]||(e[13]=[n(" Cost ",-1)])]),_:1})]),_:1})]),_:1}),t(P,null,{default:s(()=>[(T(!0),W(Y,null,X(a(w),p=>(T(),h(x,{key:p.sessionId},{default:s(()=>[t(g,{class:"max-w-80 truncate font-mono text-xs"},{default:s(()=>[n(c(p.sessionId),1)]),_:2},1024),t(g,{class:"font-medium"},{default:s(()=>[n(c(p.project),1)]),_:2},1024),t(g,{class:"max-w-64 truncate"},{default:s(()=>[n(c(p.threadName),1)]),_:2},1024),t(g,null,{default:s(()=>[n(c(p.model),1)]),_:2},1024),t(g,{class:"whitespace-nowrap"},{default:s(()=>[n(c(l(p.startedAt)),1)]),_:2},1024),t(g,{class:"text-right tabular-nums"},{default:s(()=>[n(c(p.duration),1)]),_:2},1024),t(g,{class:"text-right tabular-nums"},{default:s(()=>[n(c(a(v)(p.inputTokens)),1)]),_:2},1024),t(g,{class:"text-right tabular-nums"},{default:s(()=>[n(c(a(v)(p.outputTokens)),1)]),_:2},1024),t(g,{class:"text-right tabular-nums"},{default:s(()=>[n(c(a(v)(p.tokenTotal)),1)]),_:2},1024),t(g,{class:"text-right tabular-nums"},{default:s(()=>[n(c(("formatCurrency"in u?u.formatCurrency:a(C))(p.costUSD)),1)]),_:2},1024)]),_:2},1024))),128)),o.items.length===0?(T(),h(R,{key:0,colspan:10},{default:s(()=>[n(" No "+c(o.productName)+" sessions found. ",1)]),_:1})):Z("",!0)]),_:1})]),_:1}),t(S,{page:a(m),"onUpdate:page":e[0]||(e[0]=p=>ee(m)?m.value=p:null),"page-count":a(f),"page-size":o.pageSize,total:o.items.length},null,8,["page","page-count","page-size","total"])]),_:1},8,["description","title"])}}}),ge=Object.assign(pe,{__name:"UsageAnalyticsSessionUsageTable"}),_e=U({name:"DashboardTokenConsumptionDashboard",__name:"TokenConsumptionDashboard",props:{dailyRows:{},dailyTokenUsage:{},monthlyModelUsage:{},monthlyRows:{},overviewCards:{},productName:{},projectUsage:{},sessionRows:{},sessionUsage:{},weeklyRows:{}},setup(o){const d=o,m=r(()=>V(d.sessionUsage));return(f,w)=>{const y=F,b=G,l=J,u=L,e=Q,i=ge,x=K,k=O;return T(),h(k,null,{default:s(()=>[t(y,{cards:o.overviewCards},null,8,["cards"]),t(x,null,{default:s(()=>[t(b,{"monthly-items":o.monthlyModelUsage,class:"md:col-span-8"},null,8,["monthly-items"]),t(l,{items:o.projectUsage,class:"md:col-span-4"},null,8,["items"]),t(u,{items:o.dailyTokenUsage,class:"md:col-span-12",title:`${o.productName} Token Heatmap`},null,8,["items","title"]),t(e,{"daily-items":a(m),"monthly-items":o.monthlyRows,"product-name":o.productName,"session-items":o.sessionRows,"weekly-items":o.weeklyRows,class:"md:col-span-12"},null,8,["daily-items","monthly-items","product-name","session-items","weekly-items"]),t(i,{items:o.sessionUsage,"product-name":o.productName,class:"md:col-span-12"},null,8,["items","product-name"])]),_:1})]),_:1})}}}),ye=Object.assign(_e,{__name:"DashboardTokenConsumptionDashboard"}),fe={dailyRows:[],dailyTokenUsage:[],monthlyModelUsage:[],monthlyRows:[],overviewCards:[],projectUsage:[],sessionRows:[],sessionUsage:[],todayTopModel:null,todayTopProject:null,todayTotalCost:0,todayTotalTokens:0,weeklyRows:[]};function we(o){const{clear:d,error:m,execute:f,payload:w,refresh:y,status:b}=se(),l=r(()=>w.value?.[o]??fe);return{clear:d,dailyRows:r(()=>l.value.dailyRows),dailyTokenUsage:r(()=>l.value.dailyTokenUsage),dashboard:l,error:m,execute:f,monthlyModelUsage:r(()=>l.value.monthlyModelUsage),monthlyRows:r(()=>l.value.monthlyRows),overviewCards:r(()=>l.value.overviewCards),projectUsage:r(()=>l.value.projectUsage),refresh:y,sessionRows:r(()=>l.value.sessionRows),sessionUsage:r(()=>l.value.sessionUsage),status:b,todayTopModel:r(()=>l.value.todayTopModel),todayTopProject:r(()=>l.value.todayTopProject),todayTotalCost:r(()=>l.value.todayTotalCost),todayTotalTokens:r(()=>l.value.todayTotalTokens),weeklyRows:r(()=>l.value.weeklyRows)}}const be=U({name:"DashboardProductPage",__name:"ProductPage",props:{productKey:{},productName:{}},setup(o){const d=o,{dailyRows:m,dailyTokenUsage:f,monthlyModelUsage:w,monthlyRows:y,overviewCards:b,projectUsage:l,sessionRows:u,sessionUsage:e,weeklyRows:i}=we(d.productKey);return(x,k)=>{const g=ye;return T(),h(g,{"daily-rows":a(m),"daily-token-usage":a(f),"monthly-model-usage":a(w),"monthly-rows":a(y),"overview-cards":a(b),"product-name":o.productName,"project-usage":a(l),"session-rows":a(u),"session-usage":a(e),"weekly-rows":a(i)},null,8,["daily-rows","daily-token-usage","monthly-model-usage","monthly-rows","overview-cards","product-name","project-usage","session-rows","session-usage","weekly-rows"])}}}),Te=Object.assign(be,{__name:"DashboardProductPage"}),ve=U({__name:"[product]",setup(o){const d=oe(),m=ae(d.params.product);if(!m)throw ne({status:404,message:"Page not found"});return(f,w)=>{const y=Te;return T(),h(y,{"product-key":a(m).payloadKey,"product-name":a(m).name},null,8,["product-key","product-name"])}}});export{ve as default};
@@ -0,0 +1 @@
1
+ {"id":"ac4b25d6-d6eb-44bb-8c5b-b1d6f651c196","timestamp":1777010971439}
@@ -0,0 +1 @@
1
+ {"id":"ac4b25d6-d6eb-44bb-8c5b-b1d6f651c196","timestamp":1777010971439,"prerendered":[]}