usage-board 2.1.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +10 -4
- package/dist/public/_nuxt/{chy2QJx0.js → 7Dy4NLP8.js} +32 -32
- package/dist/public/_nuxt/B-VlGWDb.js +21 -0
- package/dist/public/_nuxt/{BeEwECnn.js → Be3rizqy.js} +1 -1
- package/dist/public/_nuxt/{15CW3D68.js → C0azgqnZ.js} +1 -1
- package/dist/public/_nuxt/{B6G-s9D-.js → CMNdiQCa.js} +1 -1
- package/dist/public/_nuxt/CPuXQJE_.js +1 -0
- package/dist/public/_nuxt/DenksPSi.js +119 -0
- package/dist/public/_nuxt/Dkya5WaL.js +9 -0
- package/dist/public/_nuxt/HN9OZyaQ.js +25 -0
- package/dist/public/_nuxt/{Bu4SpN_a.js → JtK-nXxy.js} +1 -1
- package/dist/public/_nuxt/builds/latest.json +1 -1
- package/dist/public/_nuxt/builds/meta/37e8bb21-a086-45bf-93dc-47eeeada7299.json +1 -0
- package/dist/public/_nuxt/{BeygfM9p.js → y3weNNd-.js} +2 -2
- package/dist/server/chunks/_/error-500.mjs +8 -4
- package/dist/server/chunks/_/shared.cjs.prod.mjs +1 -1
- package/dist/server/chunks/build/client.precomputed.mjs +1 -1
- package/dist/server/chunks/nitro/nitro.mjs +8218 -2844
- package/dist/server/chunks/routes/api/payload.json.mjs +11 -626
- package/dist/server/chunks/routes/api/projects/_project/modules.get.mjs +36 -0
- package/dist/server/chunks/routes/api/projects/catalog.get.mjs +26 -0
- package/dist/server/chunks/routes/renderer.mjs +9 -5
- package/dist/server/chunks/routes/ws.mjs +29 -971
- package/dist/server/index.mjs +9 -5
- package/package.json +7 -6
- package/dist/public/_nuxt/C6ydMk2z.js +0 -25
- package/dist/public/_nuxt/Dn8cXZx3.js +0 -9
- package/dist/public/_nuxt/DysUC14A.js +0 -119
- package/dist/public/_nuxt/KLhV325n.js +0 -1
- package/dist/public/_nuxt/builds/meta/ac4b25d6-d6eb-44bb-8c5b-b1d6f651c196.json +0 -1
- package/dist/public/_nuxt/pmnAmEjb.js +0 -21
- package/dist/server/chunks/_/index.min.mjs +0 -348
|
@@ -1,119 +0,0 @@
|
|
|
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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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};
|
|
@@ -1 +0,0 @@
|
|
|
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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"ac4b25d6-d6eb-44bb-8c5b-b1d6f651c196","timestamp":1777010971439,"prerendered":[]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import{i as wt,P as fo,V as mo,u as Ue,a as vo,D as go,b as ct,c as yo,d as jt,h as ho,T as _o,e as bo,S as wo,C as So,f as St,z as xo,A as ko,_ as To,g as me,j as Co,k as xt,l as Po,m as H,n as te,o as Ut,p as Ft,q as Nt,r as Io,s as Vt,t as zt,v as Ht,w as Wt,x as Kt,y as Yt,B as Gt,E as Eo,F as Do,G as qo,H as Bo,I as $o,J as Mo}from"./chy2QJx0.js";import{f as Ro,g as Ao,h as I,r as O,i as ge,j as pt,k as Oo,l as kt,m as Lo,n as Be,p as $e,q as jo,s as ft,v as Xt,x as Uo,y as Fo,z as L,A as _e,o as g,B as T,w as u,C as N,D as n,P as de,E as mt,F as No,G as vt,H as Tt,c as U,I as ee,J as le,K as ie,L as Z,M as Qe,a as z,b as v,N as He,O as Vo,Q as Te,R as zo,S as je,T as gt,U as yt,V as Ho,d as D,W as Wo,t as A,X as Ye,Y as We,Z as ve,$ as it,a0 as Ko,a1 as Yo,a2 as Go,a3 as Ze,a4 as se,a5 as Xo,a6 as Jo,a7 as Zo,a8 as Qo}from"./Dn8cXZx3.js";import{i as Jt,g as ue,u as Fe,a as en,_ as Zt,b as tn,c as on,d as nn,e as an,f as sn}from"./Bu4SpN_a.js";import{_ as Qt,a as ln}from"./BeygfM9p.js";function Ct(t,e=Number.NEGATIVE_INFINITY,o=Number.POSITIVE_INFINITY){return Math.min(o,Math.max(e,t))}const rn=Ao(()=>{const t=O(new Map),e=O(),o=I(()=>{for(const a of t.value.values())if(a)return!0;return!1}),s=Jt({scrollBody:O(!0)});let l=null;const d=()=>{document.body.style.paddingRight="",document.body.style.marginRight="",document.body.style.pointerEvents="",document.documentElement.style.removeProperty("--scrollbar-width"),document.body.style.overflow=e.value??"",kt&&l?.(),e.value=void 0};return ge(o,(a,i)=>{if(!pt)return;if(!a){i&&d();return}e.value===void 0&&(e.value=document.body.style.overflow);const f=window.innerWidth-document.documentElement.clientWidth,y={padding:f,margin:0},r=s.scrollBody?.value?typeof s.scrollBody.value=="object"?Oo({padding:s.scrollBody.value.padding===!0?f:s.scrollBody.value.padding,margin:s.scrollBody.value.margin===!0?f:s.scrollBody.value.margin},y):y:{padding:0,margin:0};f>0&&(document.body.style.paddingRight=typeof r.padding=="number"?`${r.padding}px`:String(r.padding),document.body.style.marginRight=typeof r.margin=="number"?`${r.margin}px`:String(r.margin),document.documentElement.style.setProperty("--scrollbar-width",`${f}px`),document.body.style.overflow="hidden"),kt&&(l=Lo(document,"touchmove",p=>dn(p),{passive:!1})),Be(()=>{o.value&&(document.body.style.pointerEvents="none",document.body.style.overflow="hidden")})},{immediate:!0,flush:"sync"}),t});function un(t){const e=Math.random().toString(36).substring(2,7),o=rn();o.value.set(e,t??!1);const s=I({get:()=>o.value.get(e)??!1,set:l=>o.value.set(e,l)});return Ro(()=>{o.value.delete(e)}),s}function eo(t){const e=window.getComputedStyle(t);if(e.overflowX==="scroll"||e.overflowY==="scroll"||e.overflowX==="auto"&&t.clientWidth<t.scrollWidth||e.overflowY==="auto"&&t.clientHeight<t.scrollHeight)return!0;{const o=t.parentNode;return!(o instanceof Element)||o.tagName==="BODY"?!1:eo(o)}}function dn(t){const e=t||window.event,o=e.target;return o instanceof Element&&eo(o)?!1:e.touches.length>1?!0:(e.preventDefault&&e.cancelable&&e.preventDefault(),!1)}let nt=0;function cn(){$e(t=>{if(!pt)return;const e=document.querySelectorAll("[data-reka-focus-guard]");document.body.insertAdjacentElement("afterbegin",e[0]??Pt()),document.body.insertAdjacentElement("beforeend",e[1]??Pt()),nt++,t(()=>{nt===1&&document.querySelectorAll("[data-reka-focus-guard]").forEach(o=>o.remove()),nt--})})}function Pt(){const t=document.createElement("span");return t.setAttribute("data-reka-focus-guard",""),t.tabIndex=0,t.style.outline="none",t.style.opacity="0",t.style.position="fixed",t.style.pointerEvents="none",t}function pn(t){return I(()=>jo(t)?!!ft(t)?.closest("form"):!0)}var fn=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},Le=new WeakMap,Ge=new WeakMap,Xe={},at=0,to=function(t){return t&&(t.host||to(t.parentNode))},mn=function(t,e){return e.map(function(o){if(t.contains(o))return o;var s=to(o);return s&&t.contains(s)?s:(console.error("aria-hidden",o,"in not contained inside",t,". Doing nothing"),null)}).filter(function(o){return!!o})},vn=function(t,e,o,s){var l=mn(e,Array.isArray(t)?t:[t]);Xe[o]||(Xe[o]=new WeakMap);var d=Xe[o],a=[],i=new Set,f=new Set(l),y=function(p){!p||i.has(p)||(i.add(p),y(p.parentNode))};l.forEach(y);var r=function(p){!p||f.has(p)||Array.prototype.forEach.call(p.children,function(h){if(i.has(h))r(h);else try{var x=h.getAttribute(s),w=x!==null&&x!=="false",S=(Le.get(h)||0)+1,C=(d.get(h)||0)+1;Le.set(h,S),d.set(h,C),a.push(h),S===1&&w&&Ge.set(h,!0),C===1&&h.setAttribute(o,"true"),w||h.setAttribute(s,"true")}catch(j){console.error("aria-hidden: cannot operate on ",h,j)}})};return r(e),i.clear(),at++,function(){a.forEach(function(p){var h=Le.get(p)-1,x=d.get(p)-1;Le.set(p,h),d.set(p,x),h||(Ge.has(p)||p.removeAttribute(s),Ge.delete(p)),x||p.removeAttribute(o)}),at--,at||(Le=new WeakMap,Le=new WeakMap,Ge=new WeakMap,Xe={})}},gn=function(t,e,o){o===void 0&&(o="data-aria-hidden");var s=Array.from(Array.isArray(t)?t:[t]),l=fn(t);return l?(s.push.apply(s,Array.from(l.querySelectorAll("[aria-live], script"))),vn(s,l,o,"aria-hidden")):function(){return null}};function yn(t){let e;ge(()=>ft(t),o=>{let s=!1;try{s=!!o?.closest("[popover]:not(:popover-open)")}catch{}o&&!s?e=gn(o):e&&e()}),Xt(()=>{e&&e()})}function oo(t){const e=Uo("",1e3);return{search:e,handleTypeaheadSearch:(l,d)=>{e.value=e.value+l;{const a=ue(),i=d.map(h=>({...h,textValue:h.value?.textValue??h.ref.textContent?.trim()??""})),f=i.find(h=>h.ref===a),y=i.map(h=>h.textValue),r=_n(y,e.value,f?.textValue),p=i.find(h=>h.textValue===r);return p&&p.ref.focus(),p?.ref}},resetTypeahead:()=>{e.value=""}}}function hn(t,e){return t.map((o,s)=>t[(e+s)%t.length])}function _n(t,e,o){const l=e.length>1&&Array.from(e).every(y=>y===e[0])?e[0]:e,d=o?t.indexOf(o):-1;let a=hn(t,Math.max(d,0));l.length===1&&(a=a.filter(y=>y!==o));const f=a.find(y=>y.toLowerCase().startsWith(l.toLowerCase()));return f!==o?f:void 0}const bn=Fo(()=>O([]));function wn(){const t=bn();return{add(e){const o=t.value[0];e!==o&&o?.pause(),t.value=It(t.value,e),t.value.unshift(e)},remove(e){t.value=It(t.value,e),t.value[0]?.resume()}}}function It(t,e){const o=[...t],s=o.indexOf(e);return s!==-1&&o.splice(s,1),o}const st="focusScope.autoFocusOnMount",lt="focusScope.autoFocusOnUnmount",Et={bubbles:!1,cancelable:!0};function Sn(t,{select:e=!1}={}){const o=ue();for(const s of t)if(ke(s,{select:e}),ue()!==o)return!0}function xn(t){const e=no(t),o=Dt(e,t),s=Dt(e.reverse(),t);return[o,s]}function no(t){const e=[],o=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:s=>{const l=s.tagName==="INPUT"&&s.type==="hidden";return s.disabled||s.hidden||l?NodeFilter.FILTER_SKIP:s.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;o.nextNode();)e.push(o.currentNode);return e}function Dt(t,e){for(const o of t)if(!kn(o,{upTo:e}))return o}function kn(t,{upTo:e}){if(getComputedStyle(t).visibility==="hidden")return!0;for(;t;){if(e!==void 0&&t===e)return!1;if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}function Tn(t){return t instanceof HTMLInputElement&&"select"in t}function ke(t,{select:e=!1}={}){if(t&&t.focus){const o=ue();t.focus({preventScroll:!0}),t!==o&&Tn(t)&&e&&t.select()}}var Cn=L({__name:"FocusScope",props:{loop:{type:Boolean,required:!1,default:!1},trapped:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["mountAutoFocus","unmountAutoFocus"],setup(t,{emit:e}){const o=t,s=e,{currentRef:l,currentElement:d}=_e(),a=O(null),i=wn(),f=mt({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});$e(r=>{if(!pt)return;const p=d.value;if(!o.trapped)return;function h(C){if(f.paused||!p)return;const j=C.target;p.contains(j)?a.value=j:ke(a.value,{select:!0})}function x(C){if(f.paused||!p)return;const j=C.relatedTarget;j!==null&&(p.contains(j)||ke(a.value,{select:!0}))}function w(C){const j=a.value;if(j===null||!C.some(b=>b.removedNodes.length>0))return;p.contains(j)||ke(p)}document.addEventListener("focusin",h),document.addEventListener("focusout",x);const S=new MutationObserver(w);p&&S.observe(p,{childList:!0,subtree:!0}),r(()=>{document.removeEventListener("focusin",h),document.removeEventListener("focusout",x),S.disconnect()})}),$e(async r=>{const p=d.value;if(await Be(),!p)return;i.add(f);const h=ue();if(!p.contains(h)){const w=new CustomEvent(st,Et);p.addEventListener(st,S=>s("mountAutoFocus",S)),p.dispatchEvent(w),w.defaultPrevented||(Sn(no(p),{select:!0}),ue()===h&&ke(p))}r(()=>{p.removeEventListener(st,C=>s("mountAutoFocus",C));const w=new CustomEvent(lt,Et),S=C=>{s("unmountAutoFocus",C)};p.addEventListener(lt,S),p.dispatchEvent(w),setTimeout(()=>{w.defaultPrevented||ke(h??document.body,{select:!0}),p.removeEventListener(lt,S),i.remove(f)},0)})});function y(r){if(!o.loop&&!o.trapped||f.paused)return;const p=r.key==="Tab"&&!r.altKey&&!r.ctrlKey&&!r.metaKey,h=ue();if(p&&h){const x=r.currentTarget,[w,S]=xn(x);w&&S?!r.shiftKey&&h===S?(r.preventDefault(),o.loop&&ke(w,{select:!0})):r.shiftKey&&h===w&&(r.preventDefault(),o.loop&&ke(S,{select:!0})):h===x&&r.preventDefault()}}return(r,p)=>(g(),T(n(de),{ref_key:"currentRef",ref:l,tabindex:"-1","as-child":r.asChild,as:r.as,onKeydown:y},{default:u(()=>[N(r.$slots,"default")]),_:3},8,["as-child","as"]))}}),Pn=Cn;function qt(t){const e=ue();for(const o of t)if(o===e||(o.focus(),ue()!==e))return}function In(t){const e=Jt({nonce:O()});return I(()=>t?.value||e.nonce?.value)}const En=[" ","Enter","ArrowUp","ArrowDown"],Dn=[" ","Enter"],re=10;function Ke(t,e,o){return t===void 0?!1:Array.isArray(t)?t.some(s=>ut(s,e,o)):ut(t,e,o)}function ut(t,e,o){return t===void 0||e===void 0?!1:typeof t=="string"?t===e:typeof o=="function"?o(t,e):typeof o=="string"?t?.[o]===e?.[o]:No(t,e)}function qn(t){return t==null||t===""||Array.isArray(t)&&t.length===0}const Bn={key:0,value:""},[Ce,ao]=Qe("SelectRoot");var $n=L({inheritAttrs:!1,__name:"SelectRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},by:{type:[String,Function],required:!1},dir:{type:String,required:!1},multiple:{type:Boolean,required:!1},autocomplete:{type:String,required:!1},disabled:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","update:open"],setup(t,{emit:e}){const o=t,s=e,{required:l,disabled:d,multiple:a,dir:i}=vt(o),f=Tt(o,"modelValue",s,{defaultValue:o.defaultValue??(a.value?[]:void 0),passive:o.modelValue===void 0,deep:!0}),y=Tt(o,"open",s,{defaultValue:o.defaultOpen,passive:o.open===void 0}),r=O(),p=O(),h=O({x:0,y:0}),x=I(()=>a.value&&Array.isArray(f.value)?f.value?.length===0:wt(f.value));Fe({isProvider:!0});const w=en(i),S=pn(r),C=O(new Set),j=I(()=>Array.from(C.value).map(b=>b.value).join(";"));function W(b){if(a.value){const q=Array.isArray(f.value)?[...f.value]:[],P=q.findIndex(B=>ut(B,b,o.by));P===-1?q.push(b):q.splice(P,1),f.value=[...q]}else f.value=b}function $(b){return Array.from(C.value).find(q=>Ke(b,q.value,o.by))}return ao({triggerElement:r,onTriggerChange:b=>{r.value=b},valueElement:p,onValueElementChange:b=>{p.value=b},contentId:"",modelValue:f,onValueChange:W,by:o.by,open:y,multiple:a,required:l,onOpenChange:b=>{y.value=b},dir:w,triggerPointerDownPosRef:h,disabled:d,isEmptyModelValue:x,optionsSet:C,onOptionAdd:b=>{const q=$(b.value);q&&C.value.delete(q),C.value.add(b)},onOptionRemove:b=>{const q=$(b.value);q&&C.value.delete(q)}}),(b,q)=>(g(),T(n(fo),null,{default:u(()=>[N(b.$slots,"default",{modelValue:n(f),open:n(y)}),n(S)&&b.name?(g(),T(An,{key:j.value,"aria-hidden":"true",tabindex:"-1",multiple:n(a),required:n(l),name:b.name,autocomplete:b.autocomplete,disabled:n(d),value:n(f)},{default:u(()=>[n(wt)(n(f))?(g(),U("option",Bn)):ee("v-if",!0),(g(!0),U(le,null,ie(Array.from(C.value),P=>(g(),U("option",Z({key:P.value??""},{ref_for:!0},P),null,16))),128))]),_:1},8,["multiple","required","name","autocomplete","disabled","value"])):ee("v-if",!0)]),_:3}))}}),Mn=$n,Rn=L({__name:"BubbleSelect",props:{autocomplete:{type:String,required:!1},autofocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},form:{type:String,required:!1},multiple:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},size:{type:Number,required:!1},value:{type:null,required:!1}},setup(t){const e=t,o=O(),s=Ce();ge(()=>e.value,(d,a)=>{const i=window.HTMLSelectElement.prototype,y=Object.getOwnPropertyDescriptor(i,"value").set;if(d!==a&&y&&o.value){const r=new Event("change",{bubbles:!0});y.call(o.value,d),o.value.dispatchEvent(r)}});function l(d){s.onValueChange(d.target.value)}return(d,a)=>(g(),T(n(mo),{"as-child":""},{default:u(()=>[z("select",Z({ref_key:"selectElement",ref:o},e,{onInput:l}),[N(d.$slots,"default")],16)]),_:3}))}}),An=Rn,On=L({__name:"SelectPopperPosition",props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:"start"},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1,default:re},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){const o=Ue(t);return(s,l)=>(g(),T(n(vo),Z(n(o),{style:{boxSizing:"border-box","--reka-select-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-select-content-available-width":"var(--reka-popper-available-width)","--reka-select-content-available-height":"var(--reka-popper-available-height)","--reka-select-trigger-width":"var(--reka-popper-anchor-width)","--reka-select-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:u(()=>[N(s.$slots,"default")]),_:3},16))}}),Ln=On;const jn={onViewportChange:()=>{},itemTextRefCallback:()=>{},itemRefCallback:()=>{}},[Me,so]=Qe("SelectContent");var Un=L({__name:"SelectContentImpl",props:{position:{type:String,required:!1,default:"item-aligned"},bodyLock:{type:Boolean,required:!1,default:!0},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:"start"},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(t,{emit:e}){const o=t,s=e,l=Ce();cn(),un(o.bodyLock);const{CollectionSlot:d,getItems:a}=Fe(),i=O();yn(i);const{search:f,handleTypeaheadSearch:y}=oo(),r=O(),p=O(),h=O(),x=O(!1),w=O(!1),S=O(!1);function C(){p.value&&i.value&&qt([p.value,i.value])}ge(x,()=>{C()});const{onOpenChange:j,triggerPointerDownPosRef:W}=l;$e(P=>{if(!i.value)return;let B={x:0,y:0};const M=R=>{B={x:Math.abs(Math.round(R.pageX)-(W.value?.x??0)),y:Math.abs(Math.round(R.pageY)-(W.value?.y??0))}},V=R=>{R.pointerType!=="touch"&&(B.x<=10&&B.y<=10?R.preventDefault():i.value?.contains(R.target)||j(!1),document.removeEventListener("pointermove",M),W.value=null)};W.value!==null&&(document.addEventListener("pointermove",M),document.addEventListener("pointerup",V,{capture:!0,once:!0})),P(()=>{document.removeEventListener("pointermove",M),document.removeEventListener("pointerup",V,{capture:!0})})});function $(P){const B=P.ctrlKey||P.altKey||P.metaKey;if(P.key==="Tab"&&P.preventDefault(),!B&&P.key.length===1&&y(P.key,a()),["ArrowUp","ArrowDown","Home","End"].includes(P.key)){let V=[...a().map(R=>R.ref)];if(["ArrowUp","End"].includes(P.key)&&(V=V.slice().reverse()),["ArrowUp","ArrowDown"].includes(P.key)){const R=P.target,ae=V.indexOf(R);V=V.slice(ae+1)}setTimeout(()=>qt(V)),P.preventDefault()}}const b=I(()=>o.position==="popper"?o:{}),q=Ue(b.value);return so({content:i,viewport:r,onViewportChange:P=>{r.value=P},itemRefCallback:(P,B,M)=>{const V=!w.value&&!M,R=Ke(l.modelValue.value,B,l.by);if(l.multiple.value){if(S.value)return;(R||V)&&(p.value=P,R&&(S.value=!0))}else(R||V)&&(p.value=P);V&&(w.value=!0)},selectedItem:p,selectedItemText:h,onItemLeave:()=>{i.value?.focus()},itemTextRefCallback:(P,B,M)=>{const V=!w.value&&!M;(Ke(l.modelValue.value,B,l.by)||V)&&(h.value=P)},focusSelectedItem:C,position:o.position,isPositioned:x,searchRef:f}),(P,B)=>(g(),T(n(d),null,{default:u(()=>[v(n(Pn),{"as-child":"",onMountAutoFocus:B[6]||(B[6]=He(()=>{},["prevent"])),onUnmountAutoFocus:B[7]||(B[7]=M=>{s("closeAutoFocus",M),!M.defaultPrevented&&(n(l).triggerElement.value?.focus({preventScroll:!0}),M.preventDefault())})},{default:u(()=>[v(n(go),{"as-child":"","disable-outside-pointer-events":P.disableOutsidePointerEvents,onFocusOutside:B[2]||(B[2]=He(()=>{},["prevent"])),onDismiss:B[3]||(B[3]=M=>n(l).onOpenChange(!1)),onEscapeKeyDown:B[4]||(B[4]=M=>s("escapeKeyDown",M)),onPointerDownOutside:B[5]||(B[5]=M=>s("pointerDownOutside",M))},{default:u(()=>[(g(),T(Vo(P.position==="popper"?Ln:zn),Z({...P.$attrs,...n(q)},{id:n(l).contentId,ref:M=>{if(!M)return;const V=n(ft)(M);V?.hasAttribute("data-reka-popper-content-wrapper")?i.value=V.firstElementChild:i.value=V},role:"listbox","data-state":n(l).open.value?"open":"closed",dir:n(l).dir.value,style:{display:"flex",flexDirection:"column",outline:"none"},onContextmenu:B[0]||(B[0]=He(()=>{},["prevent"])),onPlaced:B[1]||(B[1]=M=>x.value=!0),onKeydown:$}),{default:u(()=>[N(P.$slots,"default")]),_:3},16,["id","data-state","dir","onKeydown"]))]),_:3},8,["disable-outside-pointer-events"])]),_:3})]),_:3}))}}),Fn=Un;const[ht,Nn]=Qe("SelectItemAlignedPosition");var Vn=L({inheritAttrs:!1,__name:"SelectItemAlignedPosition",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["placed"],setup(t,{emit:e}){const o=t,s=e,{getItems:l}=Fe(),d=Ce(),a=Me(),i=O(!1),f=O(!0),y=O(),{forwardRef:r,currentElement:p}=_e(),{viewport:h,selectedItem:x,selectedItemText:w,focusSelectedItem:S}=a;function C(){if(d.triggerElement.value&&d.valueElement.value&&y.value&&p.value&&h?.value&&x?.value&&w?.value){const $=d.triggerElement.value.getBoundingClientRect(),b=p.value.getBoundingClientRect(),q=d.valueElement.value.getBoundingClientRect(),P=w.value.getBoundingClientRect();if(d.dir.value!=="rtl"){const X=P.left-b.left,_=q.left-X,m=$.left-_,k=$.width+m,F=Math.max(k,b.width),ne=window.innerWidth-re,Q=Ct(_,re,Math.max(re,ne-F));y.value.style.minWidth=`${k}px`,y.value.style.left=`${Q}px`}else{const X=b.right-P.right,_=window.innerWidth-q.right-X,m=window.innerWidth-$.right-_,k=$.width+m,F=Math.max(k,b.width),ne=window.innerWidth-re,Q=Ct(_,re,Math.max(re,ne-F));y.value.style.minWidth=`${k}px`,y.value.style.right=`${Q}px`}const B=l().map(X=>X.ref),M=window.innerHeight-re*2,V=h.value.scrollHeight,R=window.getComputedStyle(p.value),ae=Number.parseInt(R.borderTopWidth,10),ce=Number.parseInt(R.paddingTop,10),be=Number.parseInt(R.borderBottomWidth,10),Pe=Number.parseInt(R.paddingBottom,10),K=ae+ce+V+Pe+be,ye=Math.min(x.value.offsetHeight*5,K),we=window.getComputedStyle(h.value),Ie=Number.parseInt(we.paddingTop,10),pe=Number.parseInt(we.paddingBottom,10),G=$.top+$.height/2-re,Se=M-G,fe=x.value.offsetHeight/2,he=x.value.offsetTop+fe,oe=ae+ce+he,xe=K-oe;if(oe<=G){const X=x.value===B.at(-1);y.value.style.bottom="0px";const _=p.value.clientHeight-h.value.offsetTop-h.value.offsetHeight,m=Math.max(Se,fe+(X?pe:0)+_+be),k=oe+m;y.value.style.height=`${k}px`}else{const X=x.value===B[0];y.value.style.top="0px";const m=Math.max(G,ae+h.value.offsetTop+(X?Ie:0)+fe)+xe;y.value.style.height=`${m}px`,h.value.scrollTop=oe-G+h.value.offsetTop}y.value.style.margin=`${re}px 0`,y.value.style.minHeight=`${ye}px`,y.value.style.maxHeight=`${M}px`,s("placed"),requestAnimationFrame(()=>i.value=!0)}}const j=O("");Te(async()=>{await Be(),C(),p.value&&(j.value=window.getComputedStyle(p.value).zIndex)});function W($){$&&f.value===!0&&(C(),S?.(),f.value=!1)}return zo(d.triggerElement,()=>{C()}),Nn({contentWrapper:y,shouldExpandOnScrollRef:i,onScrollButtonChange:W}),($,b)=>(g(),U("div",{ref_key:"contentWrapperElement",ref:y,style:je({display:"flex",flexDirection:"column",position:"fixed",zIndex:j.value})},[v(n(de),Z({ref:n(r),style:{boxSizing:"border-box",maxHeight:"100%"}},{...$.$attrs,...o}),{default:u(()=>[N($.$slots,"default")]),_:3},16)],4))}}),zn=Vn,Hn=L({inheritAttrs:!1,__name:"SelectProvider",props:{context:{type:Object,required:!0}},setup(t){return ao(t.context),so(jn),(o,s)=>N(o.$slots,"default")}}),Wn=Hn;const Kn={key:1};var Yn=L({inheritAttrs:!1,__name:"SelectContent",props:{forceMount:{type:Boolean,required:!1},position:{type:String,required:!1},bodyLock:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(t,{emit:e}){const o=t,l=ct(o,e),d=Ce(),a=O();Te(()=>{a.value=new DocumentFragment});const i=O(),f=I(()=>o.forceMount||d.open.value),y=O(f.value);return ge(f,()=>{setTimeout(()=>y.value=f.value)}),(r,p)=>f.value||y.value||i.value?.present?(g(),T(n(yo),{key:0,ref_key:"presenceRef",ref:i,present:f.value},{default:u(()=>[v(Fn,gt(yt({...n(l),...r.$attrs})),{default:u(()=>[N(r.$slots,"default")]),_:3},16)]),_:3},8,["present"])):a.value?(g(),U("div",Kn,[(g(),T(Ho,{to:a.value},[v(Wn,{context:n(d)},{default:u(()=>[N(r.$slots,"default")]),_:3},8,["context"])],8,["to"]))])):ee("v-if",!0)}}),Gn=Yn,Xn=L({__name:"SelectIcon",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(t){return(e,o)=>(g(),T(n(de),{"aria-hidden":"true",as:e.as,"as-child":e.asChild},{default:u(()=>[N(e.$slots,"default",{},()=>[o[0]||(o[0]=D("▼"))])]),_:3},8,["as","as-child"]))}}),Jn=Xn;const[lo,Zn]=Qe("SelectItem");var Qn=L({__name:"SelectItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(t,{emit:e}){const o=t,s=e,{disabled:l}=vt(o),d=Ce(),a=Me(),{forwardRef:i,currentElement:f}=_e(),{CollectionItem:y}=Fe(),r=I(()=>Ke(d.modelValue?.value,o.value,d.by)),p=O(!1),h=O(o.textValue??""),x=jt(void 0,"reka-select-item-text"),w="select.select";async function S(b){if(b.defaultPrevented)return;const q={originalEvent:b,value:o.value};ho(w,C,q)}async function C(b){await Be(),s("select",b),!b.defaultPrevented&&(l.value||(d.onValueChange(o.value),d.multiple.value||d.onOpenChange(!1)))}async function j(b){await Be(),!b.defaultPrevented&&(l.value?a.onItemLeave?.():b.currentTarget?.focus({preventScroll:!0}))}async function W(b){await Be(),!b.defaultPrevented&&b.currentTarget===ue()&&a.onItemLeave?.()}async function $(b){await Be(),!(b.defaultPrevented||a.searchRef?.value!==""&&b.key===" ")&&(Dn.includes(b.key)&&S(b),b.key===" "&&b.preventDefault())}if(o.value==="")throw new Error("A <SelectItem /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return Te(()=>{f.value&&a.itemRefCallback(f.value,o.value,o.disabled)}),Zn({value:o.value,disabled:l,textId:x,isSelected:r,onItemTextChange:b=>{h.value=((h.value||b?.textContent)??"").trim()}}),(b,q)=>(g(),T(n(y),{value:{textValue:h.value}},{default:u(()=>[v(n(de),{ref:n(i),role:"option","aria-labelledby":n(x),"data-highlighted":p.value?"":void 0,"aria-selected":r.value,"data-state":r.value?"checked":"unchecked","aria-disabled":n(l)||void 0,"data-disabled":n(l)?"":void 0,tabindex:n(l)?void 0:-1,as:b.as,"as-child":b.asChild,onFocus:q[0]||(q[0]=P=>p.value=!0),onBlur:q[1]||(q[1]=P=>p.value=!1),onPointerup:S,onPointerdown:q[2]||(q[2]=P=>{P.currentTarget.focus({preventScroll:!0})}),onTouchend:q[3]||(q[3]=He(()=>{},["prevent","stop"])),onPointermove:j,onPointerleave:W,onKeydown:$},{default:u(()=>[N(b.$slots,"default")]),_:3},8,["aria-labelledby","data-highlighted","aria-selected","data-state","aria-disabled","data-disabled","tabindex","as","as-child"])]),_:3},8,["value"]))}}),ea=Qn,ta=L({__name:"SelectItemIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(t){const e=t,o=lo();return(s,l)=>n(o).isSelected.value?(g(),T(n(de),Z({key:0,"aria-hidden":"true"},e),{default:u(()=>[N(s.$slots,"default")]),_:3},16)):ee("v-if",!0)}}),oa=ta,na=L({inheritAttrs:!1,__name:"SelectItemText",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(t){const e=t,o=Ce(),s=Me(),l=lo(),{forwardRef:d,currentElement:a}=_e(),i=I(()=>({value:l.value,disabled:l.disabled.value,textContent:a.value?.textContent??l.value?.toString()??""}));return Te(()=>{a.value&&(l.onItemTextChange(a.value),s.itemTextRefCallback(a.value,l.value,l.disabled.value),o.onOptionAdd(i.value))}),Xt(()=>{o.onOptionRemove(i.value)}),(f,y)=>(g(),T(n(de),Z({id:n(l).textId,ref:n(d)},{...e,...f.$attrs}),{default:u(()=>[N(f.$slots,"default")]),_:3},16,["id"]))}}),aa=na,sa=L({__name:"SelectPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(t){const e=t;return(o,s)=>(g(),T(n(_o),gt(yt(e)),{default:u(()=>[N(o.$slots,"default")]),_:3},16))}}),la=sa,ra=L({__name:"SelectScrollButtonImpl",emits:["autoScroll"],setup(t,{emit:e}){const o=e,{getItems:s}=Fe(),l=Me(),d=O(null);function a(){d.value!==null&&(window.clearInterval(d.value),d.value=null)}$e(()=>{s().map(r=>r.ref).find(r=>r===ue())?.scrollIntoView({block:"nearest"})});function i(){d.value===null&&(d.value=window.setInterval(()=>{o("autoScroll")},50))}function f(){l.onItemLeave?.(),d.value===null&&(d.value=window.setInterval(()=>{o("autoScroll")},50))}return Wo(()=>a()),(y,r)=>(g(),T(n(de),Z({"aria-hidden":"true",style:{flexShrink:0}},y.$parent?.$props,{onPointerdown:i,onPointermove:f,onPointerleave:r[0]||(r[0]=()=>{a()})}),{default:u(()=>[N(y.$slots,"default")]),_:3},16))}}),ro=ra,ia=L({__name:"SelectScrollDownButton",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){const e=Me(),o=e.position==="item-aligned"?ht():void 0,{forwardRef:s,currentElement:l}=_e(),d=O(!1);return $e(a=>{if(e.viewport?.value&&e.isPositioned?.value){let f=function(){const y=i.scrollHeight-i.clientHeight;d.value=Math.ceil(i.scrollTop)<y};const i=e.viewport.value;f(),i.addEventListener("scroll",f),a(()=>i.removeEventListener("scroll",f))}}),ge(l,()=>{l.value&&o?.onScrollButtonChange(l.value)}),(a,i)=>d.value?(g(),T(ro,{key:0,ref:n(s),onAutoScroll:i[0]||(i[0]=()=>{const{viewport:f,selectedItem:y}=n(e);f?.value&&y?.value&&(f.value.scrollTop=f.value.scrollTop+y.value.offsetHeight)})},{default:u(()=>[N(a.$slots,"default")]),_:3},512)):ee("v-if",!0)}}),ua=ia,da=L({__name:"SelectScrollUpButton",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){const e=Me(),o=e.position==="item-aligned"?ht():void 0,{forwardRef:s,currentElement:l}=_e(),d=O(!1);return $e(a=>{if(e.viewport?.value&&e.isPositioned?.value){let f=function(){d.value=i.scrollTop>0};const i=e.viewport.value;f(),i.addEventListener("scroll",f),a(()=>i.removeEventListener("scroll",f))}}),ge(l,()=>{l.value&&o?.onScrollButtonChange(l.value)}),(a,i)=>d.value?(g(),T(ro,{key:0,ref:n(s),onAutoScroll:i[0]||(i[0]=()=>{const{viewport:f,selectedItem:y}=n(e);f?.value&&y?.value&&(f.value.scrollTop=f.value.scrollTop-y.value.offsetHeight)})},{default:u(()=>[N(a.$slots,"default")]),_:3},512)):ee("v-if",!0)}}),ca=da,pa=L({__name:"SelectTrigger",props:{disabled:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(t){const e=t,o=Ce(),{forwardRef:s,currentElement:l}=_e(),d=I(()=>o.disabled?.value||e.disabled);o.contentId||=jt(void 0,"reka-select-content"),Te(()=>{o.onTriggerChange(l.value)});const{getItems:a}=Fe(),{search:i,handleTypeaheadSearch:f,resetTypeahead:y}=oo();function r(){d.value||(o.onOpenChange(!0),y())}function p(h){r(),o.triggerPointerDownPosRef.value={x:Math.round(h.pageX),y:Math.round(h.pageY)}}return(h,x)=>(g(),T(n(bo),{"as-child":"",reference:h.reference},{default:u(()=>[v(n(de),{ref:n(s),role:"combobox",type:h.as==="button"?"button":void 0,"aria-controls":n(o).contentId,"aria-expanded":n(o).open.value||!1,"aria-required":n(o).required?.value,"aria-autocomplete":"none",disabled:d.value,dir:n(o)?.dir.value,"data-state":n(o)?.open.value?"open":"closed","data-disabled":d.value?"":void 0,"data-placeholder":n(qn)(n(o).modelValue?.value)?"":void 0,"as-child":h.asChild,as:h.as,onClick:x[0]||(x[0]=w=>{w?.currentTarget?.focus()}),onPointerdown:x[1]||(x[1]=w=>{if(w.pointerType==="touch")return w.preventDefault();const S=w.target;S.hasPointerCapture(w.pointerId)&&S.releasePointerCapture(w.pointerId),w.button===0&&w.ctrlKey===!1&&(p(w),w.preventDefault())}),onPointerup:x[2]||(x[2]=He(w=>{w.pointerType==="touch"&&p(w)},["prevent"])),onKeydown:x[3]||(x[3]=w=>{const S=n(i)!=="";!(w.ctrlKey||w.altKey||w.metaKey)&&w.key.length===1&&S&&w.key===" "||(n(f)(w.key,n(a)()),n(En).includes(w.key)&&(r(),w.preventDefault()))})},{default:u(()=>[N(h.$slots,"default")]),_:3},8,["type","aria-controls","aria-expanded","aria-required","disabled","dir","data-state","data-disabled","data-placeholder","as-child","as"])]),_:3},8,["reference"]))}}),fa=pa,ma=L({__name:"SelectValue",props:{placeholder:{type:String,required:!1,default:""},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(t){const e=t,{forwardRef:o,currentElement:s}=_e(),l=Ce();Te(()=>{l.valueElement=s});const d=I(()=>{let i=[];const f=Array.from(l.optionsSet.value),y=r=>f.find(p=>Ke(r,p.value,l.by));return Array.isArray(l.modelValue.value)?i=l.modelValue.value.map(r=>y(r)?.textContent??""):i=[y(l.modelValue.value)?.textContent??""],i.filter(Boolean)}),a=I(()=>d.value.length?d.value.join(", "):e.placeholder);return(i,f)=>(g(),T(n(de),{ref:n(o),as:i.as,"as-child":i.asChild,style:{pointerEvents:"none"},"data-placeholder":d.value.length?void 0:e.placeholder},{default:u(()=>[N(i.$slots,"default",{selectedLabel:d.value,modelValue:n(l).modelValue.value},()=>[D(A(a.value),1)])]),_:3},8,["as","as-child","data-placeholder"]))}}),va=ma,ga=L({__name:"SelectViewport",props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){const e=t,{nonce:o}=vt(e),s=In(o),l=Me(),d=l.position==="item-aligned"?ht():void 0,{forwardRef:a,currentElement:i}=_e();Te(()=>{l?.onViewportChange(i.value)});const f=O(0);function y(r){const p=r.currentTarget,{shouldExpandOnScrollRef:h,contentWrapper:x}=d??{};if(h?.value&&x?.value){const w=Math.abs(f.value-p.scrollTop);if(w>0){const S=window.innerHeight-re*2,C=Number.parseFloat(x.value.style.minHeight),j=Number.parseFloat(x.value.style.height),W=Math.max(C,j);if(W<S){const $=W+w,b=Math.min(S,$),q=$-b;x.value.style.height=`${b}px`,x.value.style.bottom==="0px"&&(p.scrollTop=q>0?q:0,x.value.style.justifyContent="flex-end")}}}f.value=p.scrollTop}return(r,p)=>(g(),U(le,null,[v(n(de),Z({ref:n(a),"data-reka-select-viewport":"",role:"presentation"},{...r.$attrs,...e},{style:{position:"relative",flex:1,overflow:"hidden auto"},onScroll:y}),{default:u(()=>[N(r.$slots,"default")]),_:3},16),v(n(de),{as:"style",nonce:n(s)},{default:u(()=>p[0]||(p[0]=[D(" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-reka-select-viewport]::-webkit-scrollbar { display: none; } ")])),_:1,__:[0]},8,["nonce"])],64))}}),ya=ga;const ha=L({__name:"Select",props:{open:{type:Boolean},defaultOpen:{type:Boolean},defaultValue:{},modelValue:{},by:{type:[String,Function]},dir:{},multiple:{type:Boolean},autocomplete:{},disabled:{type:Boolean},name:{},required:{type:Boolean}},emits:["update:modelValue","update:open"],setup(t,{emit:e}){const l=ct(t,e);return(d,a)=>(g(),T(n(Mn),Z({"data-slot":"select"},n(l)),{default:u(i=>[N(d.$slots,"default",gt(yt(i)))]),_:3},16))}}),_a=L({inheritAttrs:!1,__name:"SelectContent",props:{forceMount:{type:Boolean},position:{default:"popper"},bodyLock:{type:Boolean},side:{},sideOffset:{},sideFlip:{type:Boolean},align:{},alignOffset:{},alignFlip:{type:Boolean},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},hideShiftedArrow:{type:Boolean},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},disableOutsidePointerEvents:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(t,{emit:e}){const o=t,s=e,l=Ye(o,"class"),d=ct(l,s);return(a,i)=>(g(),T(n(la),null,{default:u(()=>[v(n(Gn),Z({"data-slot":"select-content"},{...a.$attrs,...n(d)},{class:n(ve)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--reka-select-content-available-height) min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border shadow-md",t.position==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",o.class)}),{default:u(()=>[v(n(Da)),v(n(ya),{class:We(n(ve)("p-1",t.position==="popper"&&"h-[var(--reka-select-trigger-height)] w-full min-w-[var(--reka-select-trigger-width)] scroll-my-1"))},{default:u(()=>[N(a.$slots,"default")]),_:3},8,["class"]),v(n(Ea))]),_:3},16,["class"])]),_:3}))}});const Bt=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),ba=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,o,s)=>s?s.toUpperCase():o.toLowerCase()),wa=t=>{const e=ba(t);return e.charAt(0).toUpperCase()+e.slice(1)},Sa=(...t)=>t.filter((e,o,s)=>!!e&&e.trim()!==""&&s.indexOf(e)===o).join(" ").trim(),$t=t=>t==="";var ze={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};const xa=({name:t,iconNode:e,absoluteStrokeWidth:o,"absolute-stroke-width":s,strokeWidth:l,"stroke-width":d,size:a=ze.width,color:i=ze.stroke,...f},{slots:y})=>it("svg",{...ze,...f,width:a,height:a,stroke:i,"stroke-width":$t(o)||$t(s)||o===!0||s===!0?Number(l||d||ze["stroke-width"])*24/Number(a):l||d||ze["stroke-width"],class:Sa("lucide",f.class,...t?[`lucide-${Bt(wa(t))}-icon`,`lucide-${Bt(t)}`]:["lucide-icon"])},[...e.map(r=>it(...r)),...y.default?[y.default()]:[]]);const et=(t,e)=>(o,{slots:s,attrs:l})=>it(xa,{...l,...o,iconNode:e,name:t},s);const ka=et("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);const io=et("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);const Ta=et("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);const Ca=et("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]),Pa={class:"absolute right-2 flex size-3.5 items-center justify-center"},Ia=L({__name:"SelectItem",props:{value:{},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){const e=t,o=Ye(e,"class"),s=Ue(o);return(l,d)=>(g(),T(n(ea),Z({"data-slot":"select-item"},n(s),{class:n(ve)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e.class)}),{default:u(()=>[z("span",Pa,[v(n(oa),null,{default:u(()=>[N(l.$slots,"indicator-icon",{},()=>[v(n(ka),{class:"size-4"})])]),_:3})]),v(n(aa),null,{default:u(()=>[N(l.$slots,"default")]),_:3})]),_:3},16,["class"]))}}),Ea=L({__name:"SelectScrollDownButton",props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){const e=t,o=Ye(e,"class"),s=Ue(o);return(l,d)=>(g(),T(n(ua),Z({"data-slot":"select-scroll-down-button"},n(s),{class:n(ve)("flex cursor-default items-center justify-center py-1",e.class)}),{default:u(()=>[N(l.$slots,"default",{},()=>[v(n(io),{class:"size-4"})])]),_:3},16,["class"]))}}),Da=L({__name:"SelectScrollUpButton",props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){const e=t,o=Ye(e,"class"),s=Ue(o);return(l,d)=>(g(),T(n(ca),Z({"data-slot":"select-scroll-up-button"},n(s),{class:n(ve)("flex cursor-default items-center justify-center py-1",e.class)}),{default:u(()=>[N(l.$slots,"default",{},()=>[v(n(Ta),{class:"size-4"})])]),_:3},16,["class"]))}}),qa=L({__name:"SelectTrigger",props:{disabled:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},size:{default:"default"}},setup(t){const e=t,o=Ye(e,"class","size"),s=Ue(o);return(l,d)=>(g(),T(n(fa),Z({"data-slot":"select-trigger","data-size":t.size},n(s),{class:n(ve)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e.class)}),{default:u(()=>[N(l.$slots,"default"),v(n(Jn),{"as-child":""},{default:u(()=>[v(n(io),{class:"size-4 opacity-50"})]),_:1})]),_:3},16,["data-size","class"]))}}),Ba=L({__name:"SelectValue",props:{placeholder:{},asChild:{type:Boolean},as:{}},setup(t){const e=t;return(o,s)=>(g(),T(n(va),Z({"data-slot":"select-value"},e),{default:u(()=>[N(o.$slots,"default")]),_:3},16))}}),$a=L({__name:"Spinner",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(t){const e=t;return(o,s)=>(g(),T(n(Ca),{role:"status","aria-label":"Loading",class:We(n(ve)("size-4 animate-spin",e.class))},null,8,["class"]))}}),Ma={class:"space-y-4"},Ra={key:0,class:"pointer-events-none absolute inset-0 z-10"},Aa={class:"flex flex-wrap items-center justify-center gap-3 text-xs text-muted-foreground"},Oa={class:"max-w-40 truncate",translate:"no"},La={class:"font-medium text-foreground tabular-nums"},ja=.24,Ua="#94a3b8",Fa=288,Na=L({__name:"ProjectLineChart",props:{series:{},tooltipLabels:{},tickIndexes:{},xLabels:{}},setup(t){const e=t,o={bottom:32,left:56,right:28,top:8},s={left:8,right:18},l=[0,void 0],d=Ko({selector:"html",attribute:"class",storageKey:"app-color-mode"}),a=new Intl.DateTimeFormat("en-US",{day:"numeric",month:"short"}),i=new Intl.DateTimeFormat("en-US",{month:"short"}),f=Yo("chartRoot"),{width:y}=Go(f),r=mt({datumIndex:null,pointerY:null}),p=I(()=>e.xLabels.map((_,m)=>({index:m,label:e.tooltipLabels?.[m]??_,values:Object.fromEntries(e.series.map(k=>[k.label,k.points[m]??0]))}))),h=I(()=>e.xLabels.map((_,m)=>Se(_,m,e.xLabels.length))),x=I(()=>e.series.map(_=>({..._,color:xe(_.color),total:_.points.reduce((m,k)=>m+k,0)})).sort((_,m)=>m.total-_.total)),w=I(()=>x.value.map(_=>m=>m.values[_.label]??0)),S=I(()=>Object.fromEntries(x.value.map(_=>[_.label,{color:_.color,label:_.label}]))),C=I(()=>x.value.map(_=>`
|
|
2
|
-
<linearGradient id="${fe(_.label)}" x1="0" y1="0" x2="0" y2="1">
|
|
3
|
-
<stop offset="0%" stop-color="${_.color}" stop-opacity="0.42" />
|
|
4
|
-
<stop offset="100%" stop-color="${_.color}" stop-opacity="0.07" />
|
|
5
|
-
</linearGradient>
|
|
6
|
-
`).join("")),j=I(()=>p.value.length>0&&x.value.length>0),W=I(()=>[0,Math.max(e.xLabels.length-1,0)]),$=I(()=>o.left),b=I(()=>o.top),q=I(()=>Math.max(y.value-o.left-o.right,0)),P=I(()=>Math.max(Fa-o.top-o.bottom,0)),B=I(()=>b.value+P.value),M=I(()=>Math.max(q.value-s.left-s.right,0)),V=I(()=>Math.max(...p.value.map(_=>Object.values(_.values).reduce((m,k)=>m+k,0)),0)),R=I(()=>{if(r.datumIndex===null||r.pointerY===null)return null;const _=p.value[r.datumIndex];if(!_||q.value<=0||P.value<=0)return null;const m=e.xLabels.length<=1?0:r.datumIndex/(e.xLabels.length-1),k=$.value+s.left+m*M.value,F=he(r.pointerY,b.value,B.value),Q=(P.value<=0?0:1-(F-b.value)/P.value)*V.value;return{x:k,xLabel:_.label,y:F,yLabel:me(Q)}}),ae=I(()=>{if(e.tickIndexes&&e.tickIndexes.length>0)return e.tickIndexes;const _=e.xLabels.length,m=_>12?5:1;return e.xLabels.map((k,F)=>F).filter(k=>k===0||k===_-1||k%m===0)});function ce(_){return _?.index??0}function be(_,m){const k=x.value[m];return k?`url(#${fe(k.label)})`:"#2563eb"}function Pe(_,m){return x.value[m]?.color??"#2563eb"}function K(_,m){return x.value[m]?.color??"#2563eb"}function ye(_){return _ instanceof Date?"":h.value[_]??""}function we(_){return _ instanceof Date?"":me(_)}function Ie(_){if(!_)return"";const m=x.value.map(k=>({...k,value:_.values[k.label]??0})).sort((k,F)=>F.value-k.value);return`
|
|
7
|
-
<div class="grid min-w-48 gap-2 rounded-md border bg-background px-3 py-2 text-xs shadow-lg">
|
|
8
|
-
<div class="font-medium text-foreground">${oe(_.label)}</div>
|
|
9
|
-
<div class="grid gap-1 text-muted-foreground">
|
|
10
|
-
${m.map(k=>`
|
|
11
|
-
<div class="flex items-center justify-between gap-4">
|
|
12
|
-
<span class="flex min-w-0 items-center gap-2">
|
|
13
|
-
<span class="size-2 shrink-0 rounded-sm" style="background-color: ${k.color}"></span>
|
|
14
|
-
<span class="truncate">${oe(k.label)}</span>
|
|
15
|
-
</span>
|
|
16
|
-
<span class="font-mono font-medium text-foreground">${me(k.value)}</span>
|
|
17
|
-
</div>
|
|
18
|
-
`).join("")}
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
21
|
-
`}function pe(_){const m=f.value?.getBoundingClientRect();if(!m)return;const k=_.clientX-m.left,F=_.clientY-m.top,ne=$.value+q.value,Q=$.value+s.left,Ne=ne-s.right;if(k<$.value||k>ne||F<b.value||F>B.value||M.value<=0||e.xLabels.length===0){G();return}const Ae=he((k-Q)/Math.max(Ne-Q,1),0,1),Ee=e.xLabels.length<=1?0:Math.round(Ae*(e.xLabels.length-1));r.datumIndex=Ee,r.pointerY=F}function G(){r.datumIndex=null,r.pointerY=null}function Se(_,m,k){const F=new Date(_);if(Number.isNaN(F.getTime()))return _;const ne=m===0||m===k-1;return k>=90&&!ne&&F.getDate()===1?i.format(F):a.format(F)}function fe(_){return`project-line-${_.replace(/[^a-z0-9]+/gi,"-").toLowerCase()}`}function he(_,m,k){return Math.min(Math.max(_,m),k)}function oe(_){return _.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function xe(_){if(d.value!=="dark")return _;const m=Re(_);return m!==null&&m<ja?Ua:_}function Re(_){const m=_.trim().replace(/^#/,""),k=m.length===3?m.split("").map(Ve=>`${Ve}${Ve}`).join(""):m;if(!/^[\da-f]{6}$/i.test(k))return null;const F=Number.parseInt(k.slice(0,2),16)/255,ne=Number.parseInt(k.slice(2,4),16)/255,Q=Number.parseInt(k.slice(4,6),16)/255,Ne=X(F),Ae=X(ne),Ee=X(Q);return .2126*Ne+.7152*Ae+.0722*Ee}function X(_){return _<=.03928?_/12.92:((_+.055)/1.055)**2.4}return(_,m)=>{const k=To;return g(),U("div",Ma,[z("div",{ref_key:"chartRoot",ref:f,class:"relative",onPointerleave:G,onPointermove:pe},[v(k,{class:"h-72 w-full",config:n(S)},{default:u(()=>[v(n(wo),{"auto-margin":!1,data:n(p),height:288,margin:o,padding:s,"svg-defs":n(C),"x-domain":n(W),"y-domain":l},{default:u(()=>[v(n(So),{color:be,"curve-type":"monotoneX",line:!0,"line-color":Pe,"line-width":2,opacity:.82,x:ce,y:n(w)},null,8,["y"]),v(n(St),{"grid-line":!1,"tick-format":ye,"tick-padding":10,"tick-text-hide-overlapping":!0,"tick-text-width":56,"tick-values":n(ae),type:"x"},null,8,["tick-values"]),v(n(St),{"num-ticks":4,"tick-format":we,type:"y"}),n(j)?(g(),T(n(xo),{key:0})):ee("",!0),n(j)?(g(),T(n(ko),{key:1,color:K,template:Ie,x:ce,"y-stacked":n(w)},null,8,["y-stacked"])):ee("",!0)]),_:1},8,["data","svg-defs","x-domain"])]),_:1},8,["config"]),n(R)?(g(),U("div",Ra,[z("div",{class:"absolute border-l border-dashed border-border/80",style:je({height:`${n(P)}px`,left:`${n(R).x}px`,top:`${n(b)}px`})},null,4),z("div",{class:"absolute border-t border-dashed border-border/80",style:je({left:`${n($)}px`,top:`${n(R).y}px`,width:`${n(q)}px`})},null,4),z("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:je({left:`${n(R).x}px`,top:`${n(B)+6}px`,transform:"translateX(-50%)"})},A(n(R).xLabel),5),z("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:je({left:`${Math.max(n($)-8,0)}px`,top:`${n(R).y}px`,transform:"translate(-100%, -50%)"})},A(n(R).yLabel),5)])):ee("",!0)],544),z("div",Aa,[(g(!0),U(le,null,ie(n(x),F=>(g(),U("div",{key:F.label,class:"flex items-center gap-2"},[z("span",{class:"size-2.5 rounded-sm",style:je({backgroundColor:F.color})},null,4),z("span",Oa,A(F.label),1),z("span",La,A(n(me)(F.total)),1)]))),128))])])}}}),Va=Object.assign(Na,{__name:"DashboardProjectLineChart"}),Mt=["#2563eb","#f97316","#0891b2","#7c3aed","#16a34a","#dc2626","#64748b"],za=["claudeCode","codex","gemini"],Ha={claudeCode:{aiIcon:"claude_code",color:"#d97757",label:"Claude Code"},codex:{aiIcon:"codex",color:"#111827",label:"Codex"},gemini:{aiIcon:"gemini",color:"#0ea5e9",label:"Gemini"}},_t=za.map(t=>({...Ha[t],value:t})),Wa=Object.fromEntries(_t.map(t=>[t.value,t])),Ka=[{label:"All",value:"all"},..._t];function Rt(t){return Wa[t]}function dt(t){const e=new Date;return Array.from({length:t},(o,s)=>{const l=new Date(e);return l.setHours(0,0,0,0),l.setDate(e.getDate()-(t-1-s)),Ft(Nt(l))})}function Ya(t){return t.map((e,o)=>({date:new Date(e),index:o})).filter(({date:e,index:o})=>o===0||o===t.length-1?!0:Number.isFinite(e.getTime())&&e.getUTCDate()===1).map(({index:e})=>e)}function Ga(t){const e=co(t);return[{detail:`${H(e.totalTokens)} total tokens in this project`,icon:"solar:cpu-line-duotone",name:"Total Tokens",trend:"project total",trendTone:"neutral",value:me(e.totalTokens)},{detail:`${te(e.costUSD)} total project spend`,icon:"lucide:wallet",name:"Total Spend",trend:"all time",trendTone:"neutral",value:te(e.costUSD)},{detail:`${H(e.sessions)} sessions across all tools`,icon:"lucide:messages-square",name:"Sessions",trend:"all tools",trendTone:"neutral",value:String(e.sessions)},{detail:`${H(e.cachedInputTokens)} of ${H(e.inputTokens)} input tokens were served from cache`,icon:"lucide:database-zap",name:"Cache Hit Rate",trend:`${me(e.cachedInputTokens)} cached`,trendTone:"neutral",value:Ut(e.inputTokens>0?e.cachedInputTokens/e.inputTokens:0)},{detail:`${te(e.costUSD)} across ${H(e.sessions)} sessions`,icon:"lucide:circle-dollar-sign",name:"Avg Session Cost",trend:"per session",trendTone:"neutral",value:te(e.sessions>0?e.costUSD/e.sessions:0)}]}function Xa(t,e){const o=co(t),[s="",l=""]=dt(2).slice().reverse(),d=e.find(h=>h.date===s),a=e.find(h=>h.date===l),i=Ot(t,s),f=Ot(t,l),y=xt(d?.totalTokens??0,a?.totalTokens??0,me),r=xt(d?.costUSD??0,a?.costUSD??0,te),p=Po(i,f);return[{detail:`${H(d?.totalTokens??0)} tokens used today`,icon:"solar:cpu-line-duotone",name:"Today Tokens",trend:y.trend,trendTone:y.trendTone,value:me(d?.totalTokens??0)},{detail:`${te(d?.costUSD??0)} spent today`,icon:"lucide:wallet",name:"Today Spend",trend:r.trend,trendTone:r.trendTone,value:te(d?.costUSD??0)},{detail:`${H(i)} sessions recorded today`,icon:"lucide:messages-square",name:"Today Sessions",trend:p.label,trendTone:p.tone,value:String(i)},{detail:`${te(o.costUSD)} total project spend`,icon:"lucide:receipt-text",name:"Total Spend",trend:"all time",trendTone:"neutral",value:te(o.costUSD)},{detail:`${H(o.sessions)} total sessions for this platform`,icon:"lucide:list-checks",name:"Sessions",trend:"project total",trendTone:"neutral",value:String(o.sessions)},{detail:`${H(o.cachedInputTokens)} of ${H(o.inputTokens)} input tokens were served from cache`,icon:"lucide:database-zap",name:"Cache Hit Rate",trend:`${me(o.cachedInputTokens)} cached`,trendTone:"neutral",value:Ut(o.inputTokens>0?o.cachedInputTokens/o.inputTokens:0)},{detail:`${te(o.costUSD)} across ${H(o.sessions)} sessions`,icon:"lucide:circle-dollar-sign",name:"Avg Session Cost",trend:"per session",trendTone:"neutral",value:te(o.sessions>0?o.costUSD/o.sessions:0)}]}function At(t,e){const o=new Set(e),s=t.filter(a=>o.has(a.date)),d=Co(s.flatMap(a=>Object.keys(a.models))).map(a=>({model:a,totalTokens:s.reduce((i,f)=>i+(f.models[a]?.totalTokens??0),0)})).sort((a,i)=>i.totalTokens-a.totalTokens||a.model.localeCompare(i.model)).map(a=>a.model).map((a,i)=>({color:Mt[i%Mt.length],label:a,points:e.map(f=>t.find(y=>y.date===f)?.models[a]?.totalTokens??0)}));return{labels:e,series:d}}function Ja(t,e){const o=es(e);return t.map(s=>({cacheTokens:H(s.cachedInputTokens),cost:te(s.costUSD),inputTokens:H(s.inputTokens),label:s.date,models:Object.keys(s.models).sort((l,d)=>l.localeCompare(d)).join(", ")||"-",outputTokens:H(s.outputTokens),reasoningTokens:H(s.reasoningOutputTokens),sessions:String(o.get(s.date)??0),tokens:H(s.totalTokens)}))}function uo(t,e){return{cacheTokens:H(t.cachedInputTokens),cost:te(t.costUSD),duration:t.duration||"-",id:`${e}:${t.sessionId}`,inputTokens:H(t.inputTokens),model:t.models?.join(", ")||t.model||"unknown",outputTokens:H(t.outputTokens),platform:e,reasoningTokens:H(t.reasoningOutputTokens),sessionId:t.sessionId,startedAt:ts(t.startedAt),threadName:t.threadName,tokens:H(t.tokenTotal)}}function Za(t,e){return t.map(o=>uo(o,e))}function co(t){return t.reduce((e,o)=>({cachedInputTokens:e.cachedInputTokens+o.cachedInputTokens,costUSD:e.costUSD+o.costUSD,inputTokens:e.inputTokens+o.inputTokens,outputTokens:e.outputTokens+o.outputTokens,reasoningOutputTokens:e.reasoningOutputTokens+o.reasoningOutputTokens,sessions:e.sessions+1,totalTokens:e.totalTokens+o.tokenTotal}),{cachedInputTokens:0,costUSD:0,inputTokens:0,outputTokens:0,reasoningOutputTokens:0,sessions:0,totalTokens:0})}function Qa(t){return t.reduce((e,o)=>({costUSD:e.costUSD+o.costUSD,sessions:e.sessions+1,totalTokens:e.totalTokens+o.tokenTotal}),{costUSD:0,sessions:0,totalTokens:0})}function es(t){return t.reduce((e,o)=>{const s=po(o.startedAt);return s&&e.set(s,(e.get(s)??0)+1),e},new Map)}function po(t){if(!t)return"";const e=new Date(t);return Number.isFinite(e.getTime())?Ft(Nt(e)):""}function ts(t){if(!t)return"-";const e=new Date(t);return Number.isFinite(e.getTime())?Io(e):"-"}function Ot(t,e){return t.filter(o=>po(o.startedAt)===e).length}const os={class:"flex items-center gap-2"},ns=L({__name:"ProjectSessionTable",props:{items:{},pageSize:{default:10}},setup(t){const e=t,o=se(1),s=I(()=>Math.max(1,Math.ceil(e.items.length/e.pageSize))),l=I(()=>{const a=(Math.min(o.value,s.value)-1)*e.pageSize;return e.items.slice(a,a+e.pageSize)});return ge(()=>e.items,()=>{o.value=1}),(d,a)=>{const i=Ht,f=zt,y=Vt,r=Gt,p=Qt,h=Zt,x=Wt,w=Kt,S=Yt;return g(),U("div",null,[v(w,null,{default:u(()=>[v(y,null,{default:u(()=>[v(f,null,{default:u(()=>[v(i,null,{default:u(()=>[...a[1]||(a[1]=[D("Session ID",-1)])]),_:1}),v(i,null,{default:u(()=>[...a[2]||(a[2]=[D("Tool",-1)])]),_:1}),v(i,null,{default:u(()=>[...a[3]||(a[3]=[D("Model",-1)])]),_:1}),v(i,null,{default:u(()=>[...a[4]||(a[4]=[D("Started",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[5]||(a[5]=[D(" Duration ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[6]||(a[6]=[D(" Input ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[7]||(a[7]=[D(" Output ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[8]||(a[8]=[D(" Reasoning ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[9]||(a[9]=[D(" Cache Read ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[10]||(a[10]=[D(" Tokens ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[11]||(a[11]=[D(" Cost ",-1)])]),_:1})]),_:1})]),_:1}),v(x,null,{default:u(()=>[(g(!0),U(le,null,ie(n(l),C=>(g(),T(f,{key:C.id},{default:u(()=>[v(r,{class:"max-w-72 truncate font-medium font-mono text-xs",title:C.threadName?`${C.sessionId} (${C.threadName})`:C.sessionId,translate:"no"},{default:u(()=>[D(A(C.sessionId),1)]),_:2},1032,["title"]),v(r,null,{default:u(()=>[z("div",os,[v(p,{name:n(Rt)(C.platform).aiIcon},null,8,["name"]),z("span",null,A(n(Rt)(C.platform).label),1)])]),_:2},1024),v(r,{class:"max-w-56 truncate",translate:"no"},{default:u(()=>[D(A(C.model),1)]),_:2},1024),v(r,{class:"whitespace-nowrap"},{default:u(()=>[D(A(C.startedAt),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(C.duration),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(C.inputTokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(C.outputTokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(C.reasoningTokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(C.cacheTokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(C.tokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(C.cost),1)]),_:2},1024)]),_:2},1024))),128)),t.items.length===0?(g(),T(h,{key:0,colspan:11},{default:u(()=>[...a[12]||(a[12]=[D(" No sessions found. ",-1)])]),_:1})):ee("",!0)]),_:1})]),_:1}),t.items.length>t.pageSize?(g(),T(S,{key:0,page:n(o),"onUpdate:page":a[0]||(a[0]=C=>Ze(o)?o.value=C:null),"page-count":n(s),"page-size":t.pageSize,total:t.items.length},null,8,["page","page-count","page-size","total"])):ee("",!0)])}}}),as=Object.assign(ns,{__name:"DashboardProjectSessionTable"}),ss=L({__name:"ProjectTokenUsageTable",props:{items:{},pageSize:{default:10}},setup(t){const e=t,o=se(1),s=I(()=>Math.max(1,Math.ceil(e.items.length/e.pageSize))),l=I(()=>{const a=(Math.min(o.value,s.value)-1)*e.pageSize;return e.items.slice(a,a+e.pageSize)});return ge(()=>e.items,()=>{o.value=1}),(d,a)=>{const i=Ht,f=zt,y=Vt,r=Gt,p=Zt,h=Wt,x=Kt,w=Yt;return g(),U("div",null,[v(x,null,{default:u(()=>[v(y,null,{default:u(()=>[v(f,null,{default:u(()=>[v(i,null,{default:u(()=>[...a[1]||(a[1]=[D("Period",-1)])]),_:1}),v(i,null,{default:u(()=>[...a[2]||(a[2]=[D("Models",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[3]||(a[3]=[D(" Sessions ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[4]||(a[4]=[D(" Input ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[5]||(a[5]=[D(" Output ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[6]||(a[6]=[D(" Reasoning ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[7]||(a[7]=[D(" Cache Read ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[8]||(a[8]=[D(" Total Tokens ",-1)])]),_:1}),v(i,{class:"text-right"},{default:u(()=>[...a[9]||(a[9]=[D(" Cost ",-1)])]),_:1})]),_:1})]),_:1}),v(h,null,{default:u(()=>[(g(!0),U(le,null,ie(n(l),S=>(g(),T(f,{key:S.label},{default:u(()=>[v(r,{class:"max-w-72 truncate font-medium"},{default:u(()=>[D(A(S.label),1)]),_:2},1024),v(r,{class:"max-w-56 truncate",translate:"no"},{default:u(()=>[D(A(S.models),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(S.sessions),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(S.inputTokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(S.outputTokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(S.reasoningTokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(S.cacheTokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(S.tokens),1)]),_:2},1024),v(r,{class:"text-right tabular-nums"},{default:u(()=>[D(A(S.cost),1)]),_:2},1024)]),_:2},1024))),128)),t.items.length===0?(g(),T(p,{key:0,colspan:9},{default:u(()=>[...a[10]||(a[10]=[D(" No token usage found. ",-1)])]),_:1})):ee("",!0)]),_:1})]),_:1}),t.items.length>t.pageSize?(g(),T(w,{key:0,page:n(o),"onUpdate:page":a[0]||(a[0]=S=>Ze(o)?o.value=S:null),"page-count":n(s),"page-size":t.pageSize,total:t.items.length},null,8,["page","page-count","page-size","total"])):ee("",!0)])}}}),ls=Object.assign(ss,{__name:"DashboardProjectTokenUsageTable"}),rt=["meta","daily_trend","model_usage","token_usage","session_list"],rs=30,is=365,us=180,ds=600,cs=45e3,Lt=Ka,Je=_t,ps={dailyRows:[],dailyTokenUsage:[]},fs={dailyTokenUsage:[],monthlyModelUsage:[]},ms={dailyRows:[],monthlyRows:[],sessionRows:[],weeklyRows:[]},vs={sessionRows:[],sessionUsage:[],sessions:[]};function gs(){const t=se(""),e=se("all"),o=se(!1),s=se([]),l=se(""),d=se(null),a=se(null),i=se(null),f=se(null),y=se(null),r=mt({daily_trend:!1,meta:!1,model_usage:!1,overview_cards:!1,session_interactions:!1,session_list:!1,token_usage:!1});let p=0,h=0,x=Promise.resolve();const w=new Map,S=I(()=>`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`),{open:C,send:j,status:W}=Xo(S,{immediate:!1,autoReconnect:{delay:1e3,retries:3},onConnected(){fe()},onDisconnected(){k(new Error("WebSocket connection closed."))},onError(){l.value="WebSocket connection error."},onMessage(c,E){X(E.data)}}),$=I(()=>s.value.map(c=>({id:c.label,name:c.label,path:c.path,type:c.type}))),b=I(()=>rt.some(c=>r[c])),q=I(()=>o.value||b.value||$.value.length===0),P=I(()=>Ae("session_list")),B=I(()=>Object.fromEntries(Lt.map(c=>{const E=Qa(De(c.value).sessions);return[c.value,{cost:te(E.costUSD),label:c.label,sessions:String(E.sessions),tokens:me(E.totalTokens)}]}))),M=I(()=>B.value[e.value]),V=I(()=>[{label:"Tokens",value:M.value.tokens},{label:"Spend",value:M.value.cost},{label:"Sessions",value:M.value.sessions}]),R=I(()=>dt(rs)),ae=I(()=>dt(is)),ce=I(()=>Ya(ae.value)),be=I(()=>Ga(De("all").sessions)),Pe=I(()=>Ja(Ee("all").dailyTokenUsage,De("all").sessions)),K=I(()=>Je.flatMap(c=>De(c.value).sessions.map(E=>({platform:c.value,session:E}))).sort((c,E)=>Date.parse(E.session.startedAt)-Date.parse(c.session.startedAt)).map(({platform:c,session:E})=>uo(E,c))),ye=I(()=>R.value),we=I(()=>ye.value),Ie=I(()=>Je.map(c=>({color:c.color,label:c.label,points:bt(c.value,ye.value)}))),pe=I(()=>At(Ve("all").dailyTokenUsage,R.value)),G=I(()=>Object.fromEntries(Je.map(c=>{const E=ae.value,Y=At(Ve(c.value).dailyTokenUsage,E);return[c.value,{modelLabels:Y.labels,modelSeries:Y.series,modelTickIndexes:ce.value,dayRows:Eo(De(c.value).sessions),monthRows:tt(c.value).monthlyRows,overviewCards:Xa(De(c.value).sessions,Ee(c.value).dailyTokenUsage),sessionRows:tt(c.value).sessionRows,sessionTableRows:Za(De(c.value).sessions,c.value),trendLabels:E,trendSeries:[{color:c.color,label:c.label,points:bt(c.value,E)}],trendTickIndexes:ce.value,trendTooltipLabels:E,weekRows:tt(c.value).weeklyRows}]})));Te(()=>{C()}),Zo(()=>{k(new Error("Project dashboard disposed."))}),ge(t,c=>{Se(),c||Q()}),Jo(t,c=>{c&&he(c)},{debounce:us,maxWait:ds});function Se(){p+=1,Q(),l.value=""}async function fe(){return o.value=!0,l.value="",xe({type:"project"}).then(c=>{s.value=c;const E=c.find(Y=>Y.label===t.value);t.value=E?.label??c[0]?.label??""}).catch(c=>{l.value=c.message}).finally(()=>{o.value=!1})}async function he(c){const E=$.value.find(J=>J.id===c);if(!E){Q();return}const Y=p+1;p=Y,Q(),await oe(E,rt,0,Y)}async function oe(c,E,Y,J){if(Y>=E.length||J!==p)return;const qe=E[Y];r[qe]=!0;try{const Oe=await xe({module:qe,path:c.path,project:c.id,type:"project_data"});if(J!==p||Oe.label!==c.id)return;Ne(Oe)}catch(Oe){if(J!==p)return;l.value=Oe instanceof Error?Oe.message:"Failed to load project module."}finally{J===p&&(r[qe]=!1)}await oe(c,E,Y+1,J)}function xe(c){const E=x.then(()=>Re(c));return x=E.catch(()=>{}),E}function Re(c){if(W.value!=="OPEN")return Promise.reject(new Error("WebSocket is not connected."));const E=m();return new Promise((Y,J)=>{const qe=window.setTimeout(()=>{w.delete(E),J(new Error("WebSocket request timed out."))},cs);w.set(E,{reject:ot=>{window.clearTimeout(qe),J(ot)},requestId:E,resolve:ot=>{window.clearTimeout(qe),Y(ot)}}),j(JSON.stringify({...c,requestId:E}))||(window.clearTimeout(qe),w.delete(E),J(new Error("Failed to send WebSocket request.")))})}function X(c){if(typeof c!="string")return;const E=_(c);if(!E)return;if(F(E)){k(new Error(E.message));return}if(!ne(E))return;const Y=w.get(E.requestId);Y&&(w.delete(E.requestId),Y.resolve(E.data))}function _(c){try{return JSON.parse(c)}catch{return null}}function m(){return h+=1,`${Date.now()}-${h}`}function k(c){for(const E of w.values())E.reject(c);w.clear()}function F(c){if(!c||typeof c!="object")return!1;const E=c;return E.type==="error"&&typeof E.message=="string"}function ne(c){if(!c||typeof c!="object")return!1;const E=c;return typeof E.requestId=="string"&&"data"in E}function Q(){d.value=null,a.value=null,i.value=null,f.value=null,y.value=null;for(const c of rt)r[c]=!1}function Ne(c){if(c.module==="meta"){d.value=c.data;return}if(c.module==="daily_trend"){a.value=c.data;return}if(c.module==="model_usage"){i.value=c.data;return}if(c.module==="token_usage"){f.value=c.data;return}c.module==="session_list"&&(y.value=c.data)}function Ae(c){return c==="meta"?d.value!==null:c==="daily_trend"?a.value!==null:c==="model_usage"?i.value!==null:c==="token_usage"?f.value!==null:c==="session_list"?y.value!==null:!1}function Ee(c){return a.value?.[c]??ps}function Ve(c){return i.value?.[c]??fs}function tt(c){return f.value?.[c]??ms}function De(c){return y.value?.[c]??vs}function bt(c,E){const Y=new Map(Ee(c).dailyTokenUsage.map(J=>[J.date,J.totalTokens]));return E.map(J=>Y.get(J)??0)}return{activeScopeItems:V,activeTab:e,allDailyUsageRows:Pe,allModelChart:pe,allOverviewCards:be,allSessionRows:K,catalogLoading:o,dailySeries:Ie,dailyTooltipLabels:we,dailyTrendLabels:ye,isModuleLoaded:Ae,isProjectModuleLoading:b,isProjectSelectDisabled:q,isScopeReady:P,loadingModules:r,metaModule:d,platformTabs:Je,platformViews:G,projects:$,selectedProjectId:t,tabSummaries:B,tabs:Lt,websocketError:l}}const ys={class:"relative flex flex-col border-b z-10 pb-5 mb-5"},hs={class:"container mx-auto flex flex-col gap-3"},_s={class:"relative flex justify-between items-stretch"},bs={key:0,class:"flex items-center gap-2 text-xs text-muted-foreground"},ws={class:"flex justify-between items-center"},Ss={class:"min-w-0 flex-1"},xs={class:"flex flex-col items-start gap-1.5"},ks={class:"w-full flex justify-between items-center"},Ts={class:"truncate text-sm font-medium"},Cs={key:1,class:"block truncate text-xs text-muted-foreground tabular-nums"},Ps={class:"grid grid-cols-3 gap-4"},Is={key:1,class:"truncate text-sm font-semibold tabular-nums"},Es={class:"truncate text-xs font-medium uppercase tracking-wide text-muted-foreground"},Ds={key:0,class:"text-xs text-destructive"},qs={key:1,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-5 md:col-span-12"},Bs={class:"md:col-span-12"},$s={key:0,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-7"},Ms={key:1,class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-7"},js=L({__name:"project",setup(t){const{activeScopeItems:e,activeTab:o,allDailyUsageRows:s,allModelChart:l,allOverviewCards:d,allSessionRows:a,dailySeries:i,dailyTooltipLabels:f,dailyTrendLabels:y,isModuleLoaded:r,isProjectModuleLoading:p,isProjectSelectDisabled:h,isScopeReady:x,platformTabs:w,platformViews:S,projects:C,selectedProjectId:j,tabSummaries:W,tabs:$,websocketError:b}=gs();return(q,P)=>{const B=Ba,M=qa,V=Ia,R=_a,ae=ha,ce=$a,be=Qo,Pe=Qt,K=ln,ye=on,we=tn,Ie=Bo,pe=Va,G=$o,Se=as,fe=ls,he=qo,oe=nn,xe=Mo,Re=an,X=Do,_=sn;return g(),T(_,{modelValue:n(o),"onUpdate:modelValue":P[1]||(P[1]=m=>Ze(o)?o.value=m:null)},{default:u(()=>[z("div",ys,[z("div",hs,[z("div",_s,[z("div",{class:We(n(ve)("flex items-center gap-4","before:content-[' '] before:absolute","before:w-1 before:h-full","before:rounded-full","before:bg-amber-500"))},[v(ae,{modelValue:n(j),"onUpdate:modelValue":P[0]||(P[0]=m=>Ze(j)?j.value=m:null),disabled:n(h)},{default:u(()=>[v(M,{"aria-label":"Select Project",class:We(n(ve)("bg-transparent dark:bg-transparent! border-0 px-0 py-0 font-semibold","tracking-tight shadow-none focus-visible:ring-0","ml-4"))},{default:u(()=>[v(B,{placeholder:"Choose project"})]),_:1},8,["class"]),v(R,null,{default:u(()=>[(g(!0),U(le,null,ie(n(C),m=>(g(),T(V,{key:m.id,value:m.id},{default:u(()=>[D(A(m.name),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["modelValue","disabled"]),n(p)?(g(),U("div",bs,[v(ce,{class:"size-3.5"}),P[2]||(P[2]=z("span",null,"Switching project...",-1))])):ee("",!0)],2)]),z("div",ws,[v(we,{"aria-label":"Project platform scope",class:"flex h-auto justify-start bg-transparent gap-5"},{default:u(()=>[(g(!0),U(le,null,ie(n($),m=>(g(),T(ye,{key:m.value,"aria-label":m.label,value:m.value,class:We(["flex justify-start gap-3 shadow-none",n(ve)("data-[state=active]:border","data-[state=active]:border-dashed","data-[state=active]:border-amber-500","data-[state=active]:bg-transparent")])},{default:u(()=>[m.value==="all"?(g(),T(be,{key:0,"aria-hidden":"true",class:"size-4 text-muted-foreground",mode:"svg",name:"lucide:layout-dashboard"})):(g(),T(Pe,{key:1,class:"flex items-center [&_svg]:size-5!",name:m.aiIcon},null,8,["name"])),z("div",Ss,[z("div",xs,[z("div",ks,[z("span",Ts,A(m.label),1)]),n(x)?(g(),U("span",Cs,A(n(W)[m.value].tokens)+" tokens ",1)):(g(),T(K,{key:0,class:"h-3 w-20"}))])])]),_:2},1032,["aria-label","value","class"]))),128))]),_:1}),z("div",Ps,[(g(!0),U(le,null,ie(n(e),m=>(g(),U("div",{key:m.label,class:"flex flex-col items-start gap-3 rounded-md border border-dotted px-3 py-2"},[n(x)?(g(),U("p",Is,A(m.value),1)):(g(),T(K,{key:0,class:"h-5 w-16"})),z("p",Es,A(m.label),1)]))),128))])]),n(b)?(g(),U("p",Ds,A(n(b)),1)):ee("",!0)])]),v(X,null,{default:u(()=>[v(oe,{class:"m-0",value:"all"},{default:u(()=>[v(he,null,{default:u(()=>[n(r)("session_list")?(g(),T(Ie,{key:0,cards:n(d),class:"md:col-span-12 lg:grid-cols-5"},null,8,["cards"])):(g(),U("div",qs,[(g(),U(le,null,ie(5,m=>v(K,{key:m,class:"h-28 rounded-md"})),64))])),v(G,{class:"md:col-span-12",description:"Recent usage by provider",icon:"lucide:activity",title:"Daily Token Trend"},{default:u(()=>[n(r)("model_usage")?(g(),T(pe,{key:0,series:n(i),"tooltip-labels":n(f),"x-labels":n(y)},null,8,["series","tooltip-labels","x-labels"])):(g(),T(K,{key:1,class:"h-80 w-full rounded-md"}))]),_:1}),v(G,{class:"md:col-span-12",description:"Usage by model",icon:"solar:cpu-line-duotone",title:"Model Usage"},{default:u(()=>[n(r)("model_usage")?(g(),T(pe,{key:0,series:n(l).series,"tooltip-labels":n(l).labels,"x-labels":n(l).labels},null,8,["series","tooltip-labels","x-labels"])):(g(),T(K,{key:1,class:"h-80 w-full rounded-md"}))]),_:1}),v(G,{class:"md:col-span-12",description:"Sessions in this project",icon:"lucide:messages-square",title:"Session Statistics"},{default:u(()=>[n(r)("session_list")?(g(),T(Se,{key:0,items:n(a)},null,8,["items"])):(g(),T(K,{key:1,class:"h-72 w-full rounded-md"}))]),_:1}),v(G,{class:"md:col-span-12",description:"Daily model activity by token type, cache reads, total usage, and cost",icon:"lucide:calendar-days",title:"Daily Token Usage"},{default:u(()=>[n(r)("daily_trend")?(g(),T(fe,{key:0,items:n(s)},null,8,["items"])):(g(),T(K,{key:1,class:"h-72 w-full rounded-md"}))]),_:1})]),_:1})]),_:1}),(g(!0),U(le,null,ie(n(w),m=>(g(),T(oe,{key:m.value,value:m.value,class:"m-0"},{default:u(()=>[v(he,null,{default:u(()=>[z("div",Bs,[n(r)("daily_trend")&&n(r)("session_list")?(g(),U("div",$s,[(g(!0),U(le,null,ie(n(S)[m.value].overviewCards,k=>(g(),T(xe,{key:k.name,detail:k.detail,icon:k.icon,name:k.name,trend:k.trend,"trend-tone":k.trendTone,value:k.value},null,8,["detail","icon","name","trend","trend-tone","value"]))),128))])):(g(),U("div",Ms,[(g(),U(le,null,ie(7,k=>v(K,{key:k,class:"h-28 rounded-md"})),64))]))]),v(G,{description:`${m.label} token usage within the current project`,class:"md:col-span-12",icon:"lucide:chart-area",title:"Token Trend"},{default:u(()=>[n(r)("daily_trend")?(g(),T(pe,{key:0,series:n(S)[m.value].trendSeries,"tick-indexes":n(S)[m.value].trendTickIndexes,"tooltip-labels":n(S)[m.value].trendTooltipLabels,"x-labels":n(S)[m.value].trendLabels},null,8,["series","tick-indexes","tooltip-labels","x-labels"])):(g(),T(K,{key:1,class:"h-80 w-full rounded-md"}))]),_:2},1032,["description"]),v(G,{description:`${m.label} model trend within the current project`,class:"md:col-span-12",icon:"solar:cpu-line-duotone",title:"Model Usage Trend"},{default:u(()=>[n(r)("daily_trend")?(g(),T(pe,{key:0,series:n(S)[m.value].modelSeries,"tick-indexes":n(S)[m.value].modelTickIndexes,"tooltip-labels":n(S)[m.value].modelLabels,"x-labels":n(S)[m.value].modelLabels},null,8,["series","tick-indexes","tooltip-labels","x-labels"])):(g(),T(K,{key:1,class:"h-80 w-full rounded-md"}))]),_:2},1032,["description"]),n(r)("token_usage")&&n(r)("session_list")?(g(),T(Re,{key:0,class:"md:col-span-12","daily-items":n(S)[m.value].dayRows,"monthly-items":n(S)[m.value].monthRows,"product-name":m.label,"session-items":n(S)[m.value].sessionRows,"weekly-items":n(S)[m.value].weekRows},null,8,["daily-items","monthly-items","product-name","session-items","weekly-items"])):(g(),T(K,{key:1,class:"h-72 rounded-md md:col-span-12"})),v(G,{description:`${m.label} sessions in the current project`,class:"md:col-span-12",icon:"lucide:list-tree",title:"Session List"},{default:u(()=>[n(r)("session_list")?(g(),T(Se,{key:0,items:n(S)[m.value].sessionTableRows},null,8,["items"])):(g(),T(K,{key:1,class:"h-72 w-full rounded-md"}))]),_:2},1032,["description"])]),_:2},1024)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["modelValue"])}}});export{js as default};
|