@oh-my-pi/omp-stats 17.1.5 → 17.1.7

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.
@@ -254,4 +254,4 @@ React keys must be passed directly to JSX without using spread:
254
254
  * Released under the MIT License
255
255
  */class C_{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(Q,J,X,q){let N=J.listeners[q],K=J.duration;N.forEach((H)=>H({chart:Q,initial:J.initial,numSteps:K,currentStep:Math.min(X-J.start,K)}))}_refresh(){if(this._request)return;this._running=!0,this._request=AU.call(window,()=>{if(this._update(),this._request=null,this._running)this._refresh()})}_update(Q=Date.now()){let J=0;if(this._charts.forEach((X,q)=>{if(!X.running||!X.items.length)return;let N=X.items,K=N.length-1,H=!1,F;for(;K>=0;--K)if(F=N[K],F._active){if(F._total>X.duration)X.duration=F._total;F.tick(Q),H=!0}else N[K]=N[N.length-1],N.pop();if(H)q.draw(),this._notify(q,X,Q,"progress");if(!N.length)X.running=!1,this._notify(q,X,Q,"complete"),X.initial=!1;J+=N.length}),this._lastDate=Q,J===0)this._running=!1}_getAnims(Q){let J=this._charts,X=J.get(Q);if(!X)X={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},J.set(Q,X);return X}listen(Q,J,X){this._getAnims(Q).listeners[J].push(X)}add(Q,J){if(!J||!J.length)return;this._getAnims(Q).items.push(...J)}has(Q){return this._getAnims(Q).items.length>0}start(Q){let J=this._charts.get(Q);if(!J)return;J.running=!0,J.start=Date.now(),J.duration=J.items.reduce((X,q)=>Math.max(X,q._duration),0),this._refresh()}running(Q){if(!this._running)return!1;let J=this._charts.get(Q);if(!J||!J.running||!J.items.length)return!1;return!0}stop(Q){let J=this._charts.get(Q);if(!J||!J.items.length)return;let X=J.items,q=X.length-1;for(;q>=0;--q)X[q].cancel();J.items=[],this._notify(Q,J,Date.now(),"complete")}remove(Q){return this._charts.delete(Q)}}var j2=new C_,Az="transparent",BA={boolean(Q,J,X){return X>0.5?J:Q},color(Q,J,X){let q=jU(Q||Az),N=q.valid&&jU(J||Az);return N&&N.valid?N.mix(q,X).hexString():J},number(Q,J,X){return Q+(J-Q)*X}};class I_{constructor(Q,J,X,q){let N=J[X];q=LQ([Q.to,q,N,Q.from]);let K=LQ([Q.from,N,q]);this._active=!0,this._fn=Q.fn||BA[Q.type||typeof K],this._easing=H$[Q.easing]||H$.linear,this._start=Math.floor(Date.now()+(Q.delay||0)),this._duration=this._total=Math.floor(Q.duration),this._loop=!!Q.loop,this._target=J,this._prop=X,this._from=K,this._to=q,this._promises=void 0}active(){return this._active}update(Q,J,X){if(this._active){this._notify(!1);let q=this._target[this._prop],N=X-this._start,K=this._duration-N;this._start=X,this._duration=Math.floor(Math.max(K,Q.duration)),this._total+=N,this._loop=!!Q.loop,this._to=LQ([Q.to,J,q,Q.from]),this._from=LQ([Q.from,q,J])}}cancel(){if(this._active)this.tick(Date.now()),this._active=!1,this._notify(!1)}tick(Q){let J=Q-this._start,X=this._duration,q=this._prop,N=this._from,K=this._loop,H=this._to,F;if(this._active=N!==H&&(K||J<X),!this._active){this._target[q]=H,this._notify(!0);return}if(J<0){this._target[q]=N;return}F=J/X%2,F=K&&F>1?2-F:F,F=this._easing(Math.min(1,Math.max(0,F))),this._target[q]=this._fn(N,H,F)}wait(){let Q=this._promises||(this._promises=[]);return new Promise((J,X)=>{Q.push({res:J,rej:X})})}_notify(Q){let J=Q?"res":"rej",X=this._promises||[];for(let q=0;q<X.length;q++)X[q][J]()}}class KK{constructor(Q,J){this._chart=Q,this._properties=new Map,this.configure(J)}configure(Q){if(!$1(Q))return;let J=Object.keys(m1.animation),X=this._properties;Object.getOwnPropertyNames(Q).forEach((q)=>{let N=Q[q];if(!$1(N))return;let K={};for(let H of J)K[H]=N[H];(j1(N.properties)&&N.properties||[q]).forEach((H)=>{if(H===q||!X.has(H))X.set(H,K)})})}_animateOptions(Q,J){let X=J.options,q=FA(Q,X);if(!q)return[];let N=this._createAnimations(q,X);if(X.$shared)HA(Q.options.$animations,X).then(()=>{Q.options=X},()=>{});return N}_createAnimations(Q,J){let X=this._properties,q=[],N=Q.$animations||(Q.$animations={}),K=Object.keys(J),H=Date.now(),F;for(F=K.length-1;F>=0;--F){let M=K[F];if(M.charAt(0)==="$")continue;if(M==="options"){q.push(...this._animateOptions(Q,J));continue}let w=J[M],R=N[M],_=X.get(M);if(R)if(_&&R.active()){R.update(_,w,H);continue}else R.cancel();if(!_||!_.duration){Q[M]=w;continue}N[M]=R=new I_(_,Q,M,w),q.push(R)}return q}update(Q,J){if(this._properties.size===0){Object.assign(Q,J);return}let X=this._createAnimations(Q,J);if(X.length)return j2.add(this._chart,X),!0}}function HA(Q,J){let X=[],q=Object.keys(J);for(let N=0;N<q.length;N++){let K=Q[q[N]];if(K&&K.active())X.push(K.wait())}return Promise.all(X)}function FA(Q,J){if(!J)return;let X=Q.options;if(!X){Q.options=J;return}if(X.$shared)Q.options=X=Object.assign({},X,{$shared:!1,$animations:{}});return X}function Ez(Q,J){let X=Q&&Q.options||{},q=X.reverse,N=X.min===void 0?J:0,K=X.max===void 0?J:0;return{start:q?K:N,end:q?N:K}}function MA(Q,J,X){if(X===!1)return!1;let q=Ez(Q,X),N=Ez(J,X);return{top:N.end,right:q.end,bottom:N.start,left:q.start}}function WA(Q){let J,X,q,N;if($1(Q))J=Q.top,X=Q.right,q=Q.bottom,N=Q.left;else J=X=q=N=Q;return{top:J,right:X,bottom:q,left:N,disabled:Q===!1}}function O_(Q,J){let X=[],q=Q._getSortedDatasetMetas(J),N,K;for(N=0,K=q.length;N<K;++N)X.push(q[N].index);return X}function Sz(Q,J,X,q={}){let N=Q.keys,K=q.mode==="single",H,F,M,w;if(J===null)return;let R=!1;for(H=0,F=N.length;H<F;++H){if(M=+N[H],M===X){if(R=!0,q.all)continue;break}if(w=Q.values[M],x1(w)&&(K||J===0||H4(J)===H4(w)))J+=w}if(!R&&!q.all)return 0;return J}function wA(Q,J){let{iScale:X,vScale:q}=J,N=X.axis==="x"?"x":"y",K=q.axis==="x"?"x":"y",H=Object.keys(Q),F=Array(H.length),M,w,R;for(M=0,w=H.length;M<w;++M)R=H[M],F[M]={[N]:R,[K]:Q[R]};return F}function lU(Q,J){let X=Q&&Q.options.stacked;return X||X===void 0&&J.stack!==void 0}function RA(Q,J,X){return`${Q.id}.${J.id}.${X.stack||X.type}`}function zA(Q){let{min:J,max:X,minDefined:q,maxDefined:N}=Q.getUserBounds();return{min:q?J:Number.NEGATIVE_INFINITY,max:N?X:Number.POSITIVE_INFINITY}}function _A(Q,J,X){let q=Q[J]||(Q[J]={});return q[X]||(q[X]={})}function jz(Q,J,X,q){for(let N of J.getMatchingVisibleMetas(q).reverse()){let K=Q[N.index];if(X&&K>0||!X&&K<0)return N.index}return null}function Dz(Q,J){let{chart:X,_cachedMeta:q}=Q,N=X._stacks||(X._stacks={}),{iScale:K,vScale:H,index:F}=q,M=K.axis,w=H.axis,R=RA(K,H,q),_=J.length,P;for(let I=0;I<_;++I){let A=J[I],{[M]:V,[w]:O}=A,D=A._stacks||(A._stacks={});P=D[w]=_A(N,R,V),P[F]=O,P._top=jz(P,H,!0,q.type),P._bottom=jz(P,H,!1,q.type);let h=P._visualValues||(P._visualValues={});h[F]=O}}function rU(Q,J){let X=Q.scales;return Object.keys(X).filter((q)=>X[q].axis===J).shift()}function LA(Q,J){return S2(Q,{active:!1,dataset:void 0,datasetIndex:J,index:J,mode:"default",type:"dataset"})}function PA(Q,J,X){return S2(Q,{active:!1,dataIndex:J,parsed:void 0,raw:void 0,element:X,index:J,mode:"default",type:"data"})}function PQ(Q,J){let X=Q.controller.index,q=Q.vScale&&Q.vScale.axis;if(!q)return;J=J||Q._parsed;for(let N of J){let K=N._stacks;if(!K||K[q]===void 0||K[q][X]===void 0)return;if(delete K[q][X],K[q]._visualValues!==void 0&&K[q]._visualValues[X]!==void 0)delete K[q]._visualValues[X]}}var nU=(Q)=>Q==="reset"||Q==="none",vz=(Q,J)=>J?Q:Object.assign({},Q),TA=(Q,J,X)=>Q&&!J.hidden&&J._stacked&&{keys:O_(X,!0),values:null};class QX{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(Q,J){this.chart=Q,this._ctx=Q.ctx,this.index=J,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let Q=this._cachedMeta;if(this.configure(),this.linkScales(),Q._stacked=lU(Q.vScale,Q),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler"))console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(Q){if(this.index!==Q)PQ(this._cachedMeta);this.index=Q}linkScales(){let Q=this.chart,J=this._cachedMeta,X=this.getDataset(),q=(R,_,P,I)=>R==="x"?_:R==="r"?I:P,N=J.xAxisID=n0(X.xAxisID,rU(Q,"x")),K=J.yAxisID=n0(X.yAxisID,rU(Q,"y")),H=J.rAxisID=n0(X.rAxisID,rU(Q,"r")),F=J.indexAxis,M=J.iAxisID=q(F,N,K,H),w=J.vAxisID=q(F,K,N,H);J.xScale=this.getScaleForId(N),J.yScale=this.getScaleForId(K),J.rScale=this.getScaleForId(H),J.iScale=this.getScaleForId(M),J.vScale=this.getScaleForId(w)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(Q){return this.chart.scales[Q]}_getOtherScale(Q){let J=this._cachedMeta;return Q===J.iScale?J.vScale:J.iScale}reset(){this._update("reset")}_destroy(){let Q=this._cachedMeta;if(this._data)OU(this._data,this);if(Q._stacked)PQ(Q)}_dataCheck(){let Q=this.getDataset(),J=Q.data||(Q.data=[]),X=this._data;if($1(J)){let q=this._cachedMeta;this._data=wA(J,q)}else if(X!==J){if(X){OU(X,this);let q=this._cachedMeta;PQ(q),q._parsed=[]}if(J&&Object.isExtensible(J))Xz(J,this);this._syncList=[],this._data=J}}addElements(){let Q=this._cachedMeta;if(this._dataCheck(),this.datasetElementType)Q.dataset=new this.datasetElementType}buildOrUpdateElements(Q){let J=this._cachedMeta,X=this.getDataset(),q=!1;this._dataCheck();let N=J._stacked;if(J._stacked=lU(J.vScale,J),J.stack!==X.stack)q=!0,PQ(J),J.stack=X.stack;if(this._resyncElements(Q),q||N!==J._stacked)Dz(this,J._parsed),J._stacked=lU(J.vScale,J)}configure(){let Q=this.chart.config,J=Q.datasetScopeKeys(this._type),X=Q.getOptionScopes(this.getDataset(),J,!0);this.options=Q.createResolver(X,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(Q,J){let{_cachedMeta:X,_data:q}=this,{iScale:N,_stacked:K}=X,H=N.axis,F=Q===0&&J===q.length?!0:X._sorted,M=Q>0&&X._parsed[Q-1],w,R,_;if(this._parsing===!1)X._parsed=q,X._sorted=!0,_=q;else{if(j1(q[Q]))_=this.parseArrayData(X,q,Q,J);else if($1(q[Q]))_=this.parseObjectData(X,q,Q,J);else _=this.parsePrimitiveData(X,q,Q,J);let P=()=>R[H]===null||M&&R[H]<M[H];for(w=0;w<J;++w)if(X._parsed[w+Q]=R=_[w],F){if(P())F=!1;M=R}X._sorted=F}if(K)Dz(this,_)}parsePrimitiveData(Q,J,X,q){let{iScale:N,vScale:K}=Q,H=N.axis,F=K.axis,M=N.getLabels(),w=N===K,R=Array(q),_,P,I;for(_=0,P=q;_<P;++_)I=_+X,R[_]={[H]:w||N.parse(M[I],I),[F]:K.parse(J[I],I)};return R}parseArrayData(Q,J,X,q){let{xScale:N,yScale:K}=Q,H=Array(q),F,M,w,R;for(F=0,M=q;F<M;++F)w=F+X,R=J[w],H[F]={x:N.parse(R[0],w),y:K.parse(R[1],w)};return H}parseObjectData(Q,J,X,q){let{xScale:N,yScale:K}=Q,{xAxisKey:H="x",yAxisKey:F="y"}=this._parsing,M=Array(q),w,R,_,P;for(w=0,R=q;w<R;++w)_=w+X,P=J[_],M[w]={x:N.parse(x9(P,H),_),y:K.parse(x9(P,F),_)};return M}getParsed(Q){return this._cachedMeta._parsed[Q]}getDataElement(Q){return this._cachedMeta.data[Q]}applyStack(Q,J,X){let q=this.chart,N=this._cachedMeta,K=J[Q.axis],H={keys:O_(q,!0),values:J._stacks[Q.axis]._visualValues};return Sz(H,K,N.index,{mode:X})}updateRangeFromParsed(Q,J,X,q){let N=X[J.axis],K=N===null?NaN:N,H=q&&X._stacks[J.axis];if(q&&H)q.values=H,K=Sz(q,N,this._cachedMeta.index);Q.min=Math.min(Q.min,K),Q.max=Math.max(Q.max,K)}getMinMax(Q,J){let X=this._cachedMeta,q=X._parsed,N=X._sorted&&Q===X.iScale,K=q.length,H=this._getOtherScale(Q),F=TA(J,X,this.chart),M={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:w,max:R}=zA(H),_,P;function I(){P=q[_];let A=P[H.axis];return!x1(P[Q.axis])||w>A||R<A}for(_=0;_<K;++_){if(I())continue;if(this.updateRangeFromParsed(M,Q,P,F),N)break}if(N)for(_=K-1;_>=0;--_){if(I())continue;this.updateRangeFromParsed(M,Q,P,F);break}return M}getAllParsedValues(Q){let J=this._cachedMeta._parsed,X=[],q,N,K;for(q=0,N=J.length;q<N;++q)if(K=J[q][Q.axis],x1(K))X.push(K);return X}getMaxOverflow(){return!1}getLabelAndValue(Q){let J=this._cachedMeta,X=J.iScale,q=J.vScale,N=this.getParsed(Q);return{label:X?""+X.getLabelForValue(N[X.axis]):"",value:q?""+q.getLabelForValue(N[q.axis]):""}}_update(Q){let J=this._cachedMeta;this.update(Q||"default"),J._clip=WA(n0(this.options.clip,MA(J.xScale,J.yScale,this.getMaxOverflow())))}update(Q){}draw(){let Q=this._ctx,J=this.chart,X=this._cachedMeta,q=X.data||[],N=J.chartArea,K=[],H=this._drawStart||0,F=this._drawCount||q.length-H,M=this.options.drawActiveElementsOnTop,w;if(X.dataset)X.dataset.draw(Q,N,H,F);for(w=H;w<H+F;++w){let R=q[w];if(R.hidden)continue;if(R.active&&M)K.push(R);else R.draw(Q,N)}for(w=0;w<K.length;++w)K[w].draw(Q,N)}getStyle(Q,J){let X=J?"active":"default";return Q===void 0&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(X):this.resolveDataElementOptions(Q||0,X)}getContext(Q,J,X){let q=this.getDataset(),N;if(Q>=0&&Q<this._cachedMeta.data.length){let K=this._cachedMeta.data[Q];N=K.$context||(K.$context=PA(this.getContext(),Q,K)),N.parsed=this.getParsed(Q),N.raw=q.data[Q],N.index=N.dataIndex=Q}else N=this.$context||(this.$context=LA(this.chart.getContext(),this.index)),N.dataset=q,N.index=N.datasetIndex=this.index;return N.active=!!J,N.mode=X,N}resolveDatasetElementOptions(Q){return this._resolveElementOptions(this.datasetElementType.id,Q)}resolveDataElementOptions(Q,J){return this._resolveElementOptions(this.dataElementType.id,J,Q)}_resolveElementOptions(Q,J="default",X){let q=J==="active",N=this._cachedDataOpts,K=Q+"-"+J,H=N[K],F=this.enableOptionSharing&&w$(X);if(H)return vz(H,F);let M=this.chart.config,w=M.datasetElementScopeKeys(this._type,Q),R=q?[`${Q}Hover`,"hover",Q,""]:[Q,""],_=M.getOptionScopes(this.getDataset(),w),P=Object.keys(m1.elements[Q]),I=()=>this.getContext(X,q,J),A=M.resolveNamedOptions(_,P,I,R);if(A.$shared)A.$shared=F,N[K]=Object.freeze(vz(A,F));return A}_resolveAnimations(Q,J,X){let q=this.chart,N=this._cachedDataOpts,K=`animation-${J}`,H=N[K];if(H)return H;let F;if(q.options.animation!==!1){let w=this.chart.config,R=w.datasetAnimationScopeKeys(this._type,J),_=w.getOptionScopes(this.getDataset(),R);F=w.createResolver(_,this.getContext(Q,X,J))}let M=new KK(q,F&&F.animations);if(F&&F._cacheable)N[K]=Object.freeze(M);return M}getSharedOptions(Q){if(!Q.$shared)return;return this._sharedOptions||(this._sharedOptions=Object.assign({},Q))}includeOptions(Q,J){return!J||nU(Q)||this.chart._animationsDisabled}_getSharedOptions(Q,J){let X=this.resolveDataElementOptions(Q,J),q=this._sharedOptions,N=this.getSharedOptions(X),K=this.includeOptions(J,N)||N!==q;return this.updateSharedOptions(N,J,X),{sharedOptions:N,includeOptions:K}}updateElement(Q,J,X,q){if(nU(q))Object.assign(Q,X);else this._resolveAnimations(J,q).update(Q,X)}updateSharedOptions(Q,J,X){if(Q&&!nU(J))this._resolveAnimations(void 0,J).update(Q,X)}_setStyle(Q,J,X,q){Q.active=q;let N=this.getStyle(J,q);this._resolveAnimations(J,X,q).update(Q,{options:!q&&this.getSharedOptions(N)||N})}removeHoverStyle(Q,J,X){this._setStyle(Q,X,"active",!1)}setHoverStyle(Q,J,X){this._setStyle(Q,X,"active",!0)}_removeDatasetHoverStyle(){let Q=this._cachedMeta.dataset;if(Q)this._setStyle(Q,void 0,"active",!1)}_setDatasetHoverStyle(){let Q=this._cachedMeta.dataset;if(Q)this._setStyle(Q,void 0,"active",!0)}_resyncElements(Q){let J=this._data,X=this._cachedMeta.data;for(let[H,F,M]of this._syncList)this[H](F,M);this._syncList=[];let q=X.length,N=J.length,K=Math.min(N,q);if(K)this.parse(0,K);if(N>q)this._insertElements(q,N-q,Q);else if(N<q)this._removeElements(N,q-N)}_insertElements(Q,J,X=!0){let q=this._cachedMeta,N=q.data,K=Q+J,H,F=(M)=>{M.length+=J;for(H=M.length-1;H>=K;H--)M[H]=M[H-J]};F(N);for(H=Q;H<K;++H)N[H]=new this.dataElementType;if(this._parsing)F(q._parsed);if(this.parse(Q,J),X)this.updateElements(N,Q,J,"reset")}updateElements(Q,J,X,q){}_removeElements(Q,J){let X=this._cachedMeta;if(this._parsing){let q=X._parsed.splice(Q,J);if(X._stacked)PQ(X,q)}X.data.splice(Q,J)}_sync(Q){if(this._parsing)this._syncList.push(Q);else{let[J,X,q]=Q;this[J](X,q)}this.chart._dataChanges.push([this.index,...Q])}_onDataPush(){let Q=arguments.length;this._sync(["_insertElements",this.getDataset().data.length-Q,Q])}_onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync(["_removeElements",0,1])}_onDataSplice(Q,J){if(J)this._sync(["_removeElements",Q,J]);let X=arguments.length-2;if(X)this._sync(["_insertElements",Q,X])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}function CA(Q,J){if(!Q._cache.$bar){let X=Q.getMatchingVisibleMetas(J),q=[];for(let N=0,K=X.length;N<K;N++)q=q.concat(X[N].controller.getAllParsedValues(Q));Q._cache.$bar=VU(q.sort((N,K)=>N-K))}return Q._cache.$bar}function IA(Q){let J=Q.iScale,X=CA(J,Q.type),q=J._length,N,K,H,F,M=()=>{if(H===32767||H===-32768)return;if(w$(F))q=Math.min(q,Math.abs(H-F)||q);F=H};for(N=0,K=X.length;N<K;++N)H=J.getPixelForValue(X[N]),M();F=void 0;for(N=0,K=J.ticks.length;N<K;++N)H=J.getPixelForTick(N),M();return q}function OA(Q,J,X,q){let N=X.barThickness,K,H;if(J1(N))K=J.min*X.categoryPercentage,H=X.barPercentage;else K=N*q,H=1;return{chunk:K/q,ratio:H,start:J.pixels[Q]-K/2}}function VA(Q,J,X,q){let N=J.pixels,K=N[Q],H=Q>0?N[Q-1]:null,F=Q<N.length-1?N[Q+1]:null,M=X.categoryPercentage;if(H===null)H=K-(F===null?J.end-J.start:F-K);if(F===null)F=K+K-H;let w=K-(K-Math.min(H,F))/2*M;return{chunk:Math.abs(F-H)/2*M/q,ratio:X.barPercentage,start:w}}function AA(Q,J,X,q){let N=X.parse(Q[0],q),K=X.parse(Q[1],q),H=Math.min(N,K),F=Math.max(N,K),M=H,w=F;if(Math.abs(H)>Math.abs(F))M=F,w=H;J[X.axis]=w,J._custom={barStart:M,barEnd:w,start:N,end:K,min:H,max:F}}function V_(Q,J,X,q){if(j1(Q))AA(Q,J,X,q);else J[X.axis]=X.parse(Q,q);return J}function bz(Q,J,X,q){let{iScale:N,vScale:K}=Q,H=N.getLabels(),F=N===K,M=[],w,R,_,P;for(w=X,R=X+q;w<R;++w)P=J[w],_={},_[N.axis]=F||N.parse(H[w],w),M.push(V_(P,_,K,w));return M}function sU(Q){return Q&&Q.barStart!==void 0&&Q.barEnd!==void 0}function EA(Q,J,X){if(Q!==0)return H4(Q);return(J.isHorizontal()?1:-1)*(J.min>=X?1:-1)}function SA(Q){let J,X,q,N,K;if(Q.horizontal)J=Q.base>Q.x,X="left",q="right";else J=Q.base<Q.y,X="bottom",q="top";if(J)N="end",K="start";else N="start",K="end";return{start:X,end:q,reverse:J,top:N,bottom:K}}function jA(Q,J,X,q){let N=J.borderSkipped,K={};if(!N){Q.borderSkipped=K;return}if(N===!0){Q.borderSkipped={top:!0,right:!0,bottom:!0,left:!0};return}let{start:H,end:F,reverse:M,top:w,bottom:R}=SA(Q);if(N==="middle"&&X)if(Q.enableBorderRadius=!0,(X._top||0)===q)N=w;else if((X._bottom||0)===q)N=R;else K[kz(R,H,F,M)]=!0,N=w;K[kz(N,H,F,M)]=!0,Q.borderSkipped=K}function kz(Q,J,X,q){if(q)Q=DA(Q,J,X),Q=fz(Q,X,J);else Q=fz(Q,J,X);return Q}function DA(Q,J,X){return Q===J?X:Q===X?J:Q}function fz(Q,J,X){return Q==="start"?J:Q==="end"?X:Q}function vA(Q,{inflateAmount:J},X){Q.inflateAmount=J==="auto"?X===1?0.33:0:J}class BK extends QX{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:0.8,barPercentage:0.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(Q,J,X,q){return bz(Q,J,X,q)}parseArrayData(Q,J,X,q){return bz(Q,J,X,q)}parseObjectData(Q,J,X,q){let{iScale:N,vScale:K}=Q,{xAxisKey:H="x",yAxisKey:F="y"}=this._parsing,M=N.axis==="x"?H:F,w=K.axis==="x"?H:F,R=[],_,P,I,A;for(_=X,P=X+q;_<P;++_)A=J[_],I={},I[N.axis]=N.parse(x9(A,M),_),R.push(V_(x9(A,w),I,K,_));return R}updateRangeFromParsed(Q,J,X,q){super.updateRangeFromParsed(Q,J,X,q);let N=X._custom;if(N&&J===this._cachedMeta.vScale)Q.min=Math.min(Q.min,N.min),Q.max=Math.max(Q.max,N.max)}getMaxOverflow(){return 0}getLabelAndValue(Q){let J=this._cachedMeta,{iScale:X,vScale:q}=J,N=this.getParsed(Q),K=N._custom,H=sU(K)?"["+K.start+", "+K.end+"]":""+q.getLabelForValue(N[q.axis]);return{label:""+X.getLabelForValue(N[X.axis]),value:H}}initialize(){this.enableOptionSharing=!0,super.initialize();let Q=this._cachedMeta;Q.stack=this.getDataset().stack}update(Q){let J=this._cachedMeta;this.updateElements(J.data,0,J.data.length,Q)}updateElements(Q,J,X,q){let N=q==="reset",{index:K,_cachedMeta:{vScale:H}}=this,F=H.getBasePixel(),M=H.isHorizontal(),w=this._getRuler(),{sharedOptions:R,includeOptions:_}=this._getSharedOptions(J,q);for(let P=J;P<J+X;P++){let I=this.getParsed(P),A=N||J1(I[H.axis])?{base:F,head:F}:this._calculateBarValuePixels(P),V=this._calculateBarIndexPixels(P,w),O=(I._stacks||{})[H.axis],D={horizontal:M,base:A.base,enableBorderRadius:!O||sU(I._custom)||K===O._top||K===O._bottom,x:M?A.head:V.center,y:M?V.center:A.head,height:M?V.size:Math.abs(A.size),width:M?Math.abs(A.size):V.size};if(_)D.options=R||this.resolveDataElementOptions(P,Q[P].active?"active":q);let h=D.options||Q[P].options;jA(D,h,O,K),vA(D,h,w.ratio),this.updateElement(Q[P],P,D,q)}}_getStacks(Q,J){let{iScale:X}=this._cachedMeta,q=X.getMatchingVisibleMetas(this._type).filter((w)=>w.controller.options.grouped),N=X.options.stacked,K=[],H=this._cachedMeta.controller.getParsed(J),F=H&&H[X.axis],M=(w)=>{let R=w._parsed.find((P)=>P[X.axis]===F),_=R&&R[w.vScale.axis];if(J1(_)||isNaN(_))return!0};for(let w of q){if(J!==void 0&&M(w))continue;if(N===!1||K.indexOf(w.stack)===-1||N===void 0&&w.stack===void 0)K.push(w.stack);if(w.index===Q)break}if(!K.length)K.push(void 0);return K}_getStackCount(Q){return this._getStacks(void 0,Q).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let Q=this.chart.scales,J=this.chart.options.indexAxis;return Object.keys(Q).filter((X)=>Q[X].axis===J).shift()}_getAxis(){let Q={},J=this.getFirstScaleIdForIndexAxis();for(let X of this.chart.data.datasets)Q[n0(this.chart.options.indexAxis==="x"?X.xAxisID:X.yAxisID,J)]=!0;return Object.keys(Q)}_getStackIndex(Q,J,X){let q=this._getStacks(Q,X),N=J!==void 0?q.indexOf(J):-1;return N===-1?q.length-1:N}_getRuler(){let Q=this.options,J=this._cachedMeta,X=J.iScale,q=[],N,K;for(N=0,K=J.data.length;N<K;++N)q.push(X.getPixelForValue(this.getParsed(N)[X.axis],N));let H=Q.barThickness;return{min:H||IA(J),pixels:q,start:X._startPixel,end:X._endPixel,stackCount:this._getStackCount(),scale:X,grouped:Q.grouped,ratio:H?1:Q.categoryPercentage*Q.barPercentage}}_calculateBarValuePixels(Q){let{_cachedMeta:{vScale:J,_stacked:X,index:q},options:{base:N,minBarLength:K}}=this,H=N||0,F=this.getParsed(Q),M=F._custom,w=sU(M),R=F[J.axis],_=0,P=X?this.applyStack(J,F,X):R,I,A;if(P!==R)_=P-R,P=R;if(w){if(R=M.barStart,P=M.barEnd-M.barStart,R!==0&&H4(R)!==H4(M.barEnd))_=0;_+=R}let V=!J1(N)&&!w?N:_,O=J.getPixelForValue(V);if(this.chart.getDataVisibility(Q))I=J.getPixelForValue(_+P);else I=O;if(A=I-O,Math.abs(A)<K){if(A=EA(A,J,H)*K,R===H)O-=A/2;let D=J.getPixelForDecimal(0),h=J.getPixelForDecimal(1),p=Math.min(D,h),s=Math.max(D,h);if(O=Math.max(Math.min(O,s),p),I=O+A,X&&!w)F._stacks[J.axis]._visualValues[q]=J.getValueForPixel(I)-J.getValueForPixel(O)}if(O===J.getPixelForValue(H)){let D=H4(A)*J.getLineWidthForValue(H)/2;O+=D,A-=D}return{size:A,base:O,head:I,center:I+A/2}}_calculateBarIndexPixels(Q,J){let X=J.scale,q=this.options,N=q.skipNull,K=n0(q.maxBarThickness,1/0),H,F,M=this._getAxisCount();if(J.grouped){let w=N?this._getStackCount(Q):J.stackCount,R=q.barThickness==="flex"?VA(Q,J,q,w*M):OA(Q,J,q,w*M),_=this.chart.options.indexAxis==="x"?this.getDataset().xAxisID:this.getDataset().yAxisID,P=this._getAxis().indexOf(n0(_,this.getFirstScaleIdForIndexAxis())),I=this._getStackIndex(this.index,this._cachedMeta.stack,N?Q:void 0)+P;H=R.start+R.chunk*I+R.chunk/2,F=Math.min(K,R.chunk*R.ratio)}else H=X.getPixelForValue(this.getParsed(Q)[X.axis],Q),F=Math.min(K,J.min*J.ratio);return{base:H-F/2,head:H+F/2,center:H,size:F}}draw(){let Q=this._cachedMeta,J=Q.vScale,X=Q.data,q=X.length,N=0;for(;N<q;++N)if(this.getParsed(N)[J.axis]!==null&&!X[N].hidden)X[N].draw(this._ctx)}}class HK extends QX{static id="line";static defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};static overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(Q){let J=this._cachedMeta,{dataset:X,data:q=[],_dataset:N}=J,K=this.chart._animationsDisabled,{start:H,count:F}=Nz(J,q,K);if(this._drawStart=H,this._drawCount=F,Uz(J))H=0,F=q.length;X._chart=this.chart,X._datasetIndex=this.index,X._decimated=!!N._decimated,X.points=q;let M=this.resolveDatasetElementOptions(Q);if(!this.options.showLine)M.borderWidth=0;M.segment=this.options.segment,this.updateElement(X,void 0,{animated:!K,options:M},Q),this.updateElements(q,H,F,Q)}updateElements(Q,J,X,q){let N=q==="reset",{iScale:K,vScale:H,_stacked:F,_dataset:M}=this._cachedMeta,{sharedOptions:w,includeOptions:R}=this._getSharedOptions(J,q),_=K.axis,P=H.axis,{spanGaps:I,segment:A}=this.options,V=z$(I)?I:Number.POSITIVE_INFINITY,O=this.chart._animationsDisabled||N||q==="none",D=J+X,h=Q.length,p=J>0&&this.getParsed(J-1);for(let s=0;s<h;++s){let a=Q[s],J0=O?a:{};if(s<J||s>=D){J0.skip=!0;continue}let t=this.getParsed(s),i=J1(t[P]),Y0=J0[_]=K.getPixelForValue(t[_],s),d=J0[P]=N||i?H.getBasePixel():H.getPixelForValue(F?this.applyStack(H,t,F):t[P],s);if(J0.skip=isNaN(Y0)||isNaN(d)||i,J0.stop=s>0&&Math.abs(t[_]-p[_])>V,A)J0.parsed=t,J0.raw=M.data[s];if(R)J0.options=w||this.resolveDataElementOptions(s,a.active?"active":q);if(!O)this.updateElement(a,s,J0,q);p=t}}getMaxOverflow(){let Q=this._cachedMeta,J=Q.dataset,X=J.options&&J.options.borderWidth||0,q=Q.data||[];if(!q.length)return X;let N=q[0].size(this.resolveDataElementOptions(0)),K=q[q.length-1].size(this.resolveDataElementOptions(q.length-1));return Math.max(X,N,K)/2}draw(){let Q=this._cachedMeta;Q.dataset.updateControlPoints(this.chart.chartArea,Q.iScale.axis),super.draw()}}function d9(){throw Error("This method is not implemented: Check that a complete date adapter is provided.")}class FK{static override(Q){Object.assign(FK.prototype,Q)}options;constructor(Q){this.options=Q||{}}init(){}formats(){return d9()}parse(){return d9()}format(){return d9()}add(){return d9()}diff(){return d9()}startOf(){return d9()}endOf(){return d9()}}var bA={_date:FK};function kA(Q,J,X,q){let{controller:N,data:K,_sorted:H}=Q,F=N._cachedMeta.iScale,M=Q.dataset?Q.dataset.options?Q.dataset.options.spanGaps:null:null;if(F&&J===F.axis&&J!=="r"&&H&&K.length){let w=F._reversePixels?Qz:v8;if(!q){let R=w(K,J,X);if(M){let{vScale:_}=N._cachedMeta,{_parsed:P}=Q,I=P.slice(0,R.lo+1).reverse().findIndex((V)=>!J1(V[_.axis]));R.lo-=Math.max(0,I);let A=P.slice(R.hi).findIndex((V)=>!J1(V[_.axis]));R.hi+=Math.max(0,A)}return R}else if(N._sharedOptions){let R=K[0],_=typeof R.getRange==="function"&&R.getRange(J);if(_){let P=w(K,J,X-_),I=w(K,J,X+_);return{lo:P.lo,hi:I.hi}}}}return{lo:0,hi:K.length-1}}function vQ(Q,J,X,q,N){let K=Q.getSortedVisibleDatasetMetas(),H=X[J];for(let F=0,M=K.length;F<M;++F){let{index:w,data:R}=K[F],{lo:_,hi:P}=kA(K[F],J,H,N);for(let I=_;I<=P;++I){let A=R[I];if(!A.skip)q(A,w,I)}}}function fA(Q){let J=Q.indexOf("x")!==-1,X=Q.indexOf("y")!==-1;return function(q,N){let K=J?Math.abs(q.x-N.x):0,H=X?Math.abs(q.y-N.y):0;return Math.sqrt(Math.pow(K,2)+Math.pow(H,2))}}function oU(Q,J,X,q,N){let K=[];if(!N&&!Q.isPointInArea(J))return K;return vQ(Q,X,J,function(F,M,w){if(!N&&!p4(F,Q.chartArea,0))return;if(F.inRange(J.x,J.y,q))K.push({element:F,datasetIndex:M,index:w})},!0),K}function yA(Q,J,X,q){let N=[];function K(H,F,M){let{startAngle:w,endAngle:R}=H.getProps(["startAngle","endAngle"],q),{angle:_}=$z(H,{x:J.x,y:J.y});if(IU(_,w,R))N.push({element:H,datasetIndex:F,index:M})}return vQ(Q,X,J,K),N}function gA(Q,J,X,q,N,K){let H=[],F=fA(X),M=Number.POSITIVE_INFINITY;function w(R,_,P){let I=R.inRange(J.x,J.y,N);if(q&&!I)return;let A=R.getCenterPoint(N);if(!(!!K||Q.isPointInArea(A))&&!I)return;let O=F(J,A);if(O<M)H=[{element:R,datasetIndex:_,index:P}],M=O;else if(O===M)H.push({element:R,datasetIndex:_,index:P})}return vQ(Q,X,J,w),H}function aU(Q,J,X,q,N,K){if(!K&&!Q.isPointInArea(J))return[];return X==="r"&&!q?yA(Q,J,X,N):gA(Q,J,X,q,N,K)}function yz(Q,J,X,q,N){let K=[],H=X==="x"?"inXRange":"inYRange",F=!1;if(vQ(Q,X,J,(M,w,R)=>{if(M[H]&&M[H](J[X],N))K.push({element:M,datasetIndex:w,index:R}),F=F||M.inRange(J.x,J.y,N)}),q&&!F)return[];return K}var hA={evaluateInteractionItems:vQ,modes:{index(Q,J,X,q){let N=h8(J,Q),K=X.axis||"x",H=X.includeInvisible||!1,F=X.intersect?oU(Q,N,K,q,H):aU(Q,N,K,!1,q,H),M=[];if(!F.length)return[];return Q.getSortedVisibleDatasetMetas().forEach((w)=>{let R=F[0].index,_=w.data[R];if(_&&!_.skip)M.push({element:_,datasetIndex:w.index,index:R})}),M},dataset(Q,J,X,q){let N=h8(J,Q),K=X.axis||"xy",H=X.includeInvisible||!1,F=X.intersect?oU(Q,N,K,q,H):aU(Q,N,K,!1,q,H);if(F.length>0){let M=F[0].datasetIndex,w=Q.getDatasetMeta(M).data;F=[];for(let R=0;R<w.length;++R)F.push({element:w[R],datasetIndex:M,index:R})}return F},point(Q,J,X,q){let N=h8(J,Q),K=X.axis||"xy",H=X.includeInvisible||!1;return oU(Q,N,K,q,H)},nearest(Q,J,X,q){let N=h8(J,Q),K=X.axis||"xy",H=X.includeInvisible||!1;return aU(Q,N,K,X.intersect,q,H)},x(Q,J,X,q){let N=h8(J,Q);return yz(Q,N,"x",X.intersect,q)},y(Q,J,X,q){let N=h8(J,Q);return yz(Q,N,"y",X.intersect,q)}}},A_=["left","top","right","bottom"];function TQ(Q,J){return Q.filter((X)=>X.pos===J)}function gz(Q,J){return Q.filter((X)=>A_.indexOf(X.pos)===-1&&X.box.axis===J)}function CQ(Q,J){return Q.sort((X,q)=>{let N=J?q:X,K=J?X:q;return N.weight===K.weight?N.index-K.index:N.weight-K.weight})}function uA(Q){let J=[],X,q,N,K,H,F;for(X=0,q=(Q||[]).length;X<q;++X)N=Q[X],{position:K,options:{stack:H,stackWeight:F=1}}=N,J.push({index:X,box:N,pos:K,horizontal:N.isHorizontal(),weight:N.weight,stack:H&&K+H,stackWeight:F});return J}function xA(Q){let J={};for(let X of Q){let{stack:q,pos:N,stackWeight:K}=X;if(!q||!A_.includes(N))continue;let H=J[q]||(J[q]={count:0,placed:0,weight:0,size:0});H.count++,H.weight+=K}return J}function mA(Q,J){let X=xA(Q),{vBoxMaxWidth:q,hBoxMaxHeight:N}=J,K,H,F;for(K=0,H=Q.length;K<H;++K){F=Q[K];let{fullSize:M}=F.box,w=X[F.stack],R=w&&F.stackWeight/w.weight;if(F.horizontal)F.width=R?R*q:M&&J.availableWidth,F.height=N;else F.width=q,F.height=R?R*N:M&&J.availableHeight}return X}function dA(Q){let J=uA(Q),X=CQ(J.filter((w)=>w.box.fullSize),!0),q=CQ(TQ(J,"left"),!0),N=CQ(TQ(J,"right")),K=CQ(TQ(J,"top"),!0),H=CQ(TQ(J,"bottom")),F=gz(J,"x"),M=gz(J,"y");return{fullSize:X,leftAndTop:q.concat(K),rightAndBottom:N.concat(M).concat(H).concat(F),chartArea:TQ(J,"chartArea"),vertical:q.concat(N).concat(M),horizontal:K.concat(H).concat(F)}}function hz(Q,J,X,q){return Math.max(Q[X],J[X])+Math.max(Q[q],J[q])}function E_(Q,J){Q.top=Math.max(Q.top,J.top),Q.left=Math.max(Q.left,J.left),Q.bottom=Math.max(Q.bottom,J.bottom),Q.right=Math.max(Q.right,J.right)}function pA(Q,J,X,q){let{pos:N,box:K}=X,H=Q.maxPadding;if(!$1(N)){if(X.size)Q[N]-=X.size;let _=q[X.stack]||{size:0,count:1};_.size=Math.max(_.size,X.horizontal?K.height:K.width),X.size=_.size/_.count,Q[N]+=X.size}if(K.getPadding)E_(H,K.getPadding());let F=Math.max(0,J.outerWidth-hz(H,Q,"left","right")),M=Math.max(0,J.outerHeight-hz(H,Q,"top","bottom")),w=F!==Q.w,R=M!==Q.h;return Q.w=F,Q.h=M,X.horizontal?{same:w,other:R}:{same:R,other:w}}function cA(Q){let J=Q.maxPadding;function X(q){let N=Math.max(J[q]-Q[q],0);return Q[q]+=N,N}Q.y+=X("top"),Q.x+=X("left"),X("right"),X("bottom")}function lA(Q,J){let X=J.maxPadding;function q(N){let K={left:0,top:0,right:0,bottom:0};return N.forEach((H)=>{K[H]=Math.max(J[H],X[H])}),K}return Q?q(["left","right"]):q(["top","bottom"])}function VQ(Q,J,X,q){let N=[],K,H,F,M,w,R;for(K=0,H=Q.length,w=0;K<H;++K){F=Q[K],M=F.box,M.update(F.width||J.w,F.height||J.h,lA(F.horizontal,J));let{same:_,other:P}=pA(J,X,F,q);if(w|=_&&N.length,R=R||P,!M.fullSize)N.push(F)}return w&&VQ(N,J,X,q)||R}function s3(Q,J,X,q,N){Q.top=X,Q.left=J,Q.right=J+q,Q.bottom=X+N,Q.width=q,Q.height=N}function uz(Q,J,X,q){let N=X.padding,{x:K,y:H}=J;for(let F of Q){let M=F.box,w=q[F.stack]||{count:1,placed:0,weight:1},R=F.stackWeight/w.weight||1;if(F.horizontal){let _=J.w*R,P=w.size||M.height;if(w$(w.start))H=w.start;if(M.fullSize)s3(M,N.left,H,X.outerWidth-N.right-N.left,P);else s3(M,J.left+w.placed,H,_,P);w.start=H,w.placed+=_,H=M.bottom}else{let _=J.h*R,P=w.size||M.width;if(w$(w.start))K=w.start;if(M.fullSize)s3(M,K,N.top,P,X.outerHeight-N.bottom-N.top);else s3(M,K,J.top+w.placed,P,_);w.start=K,w.placed+=_,K=M.right}}J.x=K,J.y=H}var n6={addBox(Q,J){if(!Q.boxes)Q.boxes=[];J.fullSize=J.fullSize||!1,J.position=J.position||"top",J.weight=J.weight||0,J._layers=J._layers||function(){return[{z:0,draw(X){J.draw(X)}}]},Q.boxes.push(J)},removeBox(Q,J){let X=Q.boxes?Q.boxes.indexOf(J):-1;if(X!==-1)Q.boxes.splice(X,1)},configure(Q,J,X){J.fullSize=X.fullSize,J.position=X.position,J.weight=X.weight},update(Q,J,X,q){if(!Q)return;let N=I5(Q.options.layout.padding),K=Math.max(J-N.width,0),H=Math.max(X-N.height,0),F=dA(Q.boxes),M=F.vertical,w=F.horizontal;W1(Q.boxes,(V)=>{if(typeof V.beforeLayout==="function")V.beforeLayout()});let R=M.reduce((V,O)=>O.box.options&&O.box.options.display===!1?V:V+1,0)||1,_=Object.freeze({outerWidth:J,outerHeight:X,padding:N,availableWidth:K,availableHeight:H,vBoxMaxWidth:K/2/R,hBoxMaxHeight:H/2}),P=Object.assign({},N);E_(P,I5(q));let I=Object.assign({maxPadding:P,w:K,h:H,x:N.left,y:N.top},N),A=mA(M.concat(w),_);if(VQ(F.fullSize,I,_,A),VQ(M,I,_,A),VQ(w,I,_,A))VQ(M,I,_,A);cA(I),uz(F.leftAndTop,I,_,A),I.x+=I.w,I.y+=I.h,uz(F.rightAndBottom,I,_,A),Q.chartArea={left:I.left,top:I.top,right:I.left+I.w,bottom:I.top+I.h,height:I.h,width:I.w},W1(F.chartArea,(V)=>{let O=V.box;Object.assign(O,Q.chartArea),O.update(I.w,I.h,{left:0,top:0,right:0,bottom:0})})}};class MK{acquireContext(Q,J){}releaseContext(Q){return!1}addEventListener(Q,J,X){}removeEventListener(Q,J,X){}getDevicePixelRatio(){return 1}getMaximumSize(Q,J,X,q){return J=Math.max(0,J||Q.width),X=X||Q.height,{width:J,height:Math.max(0,q?Math.floor(J/q):X)}}isAttached(Q){return!0}updateConfig(Q){}}class S_ extends MK{acquireContext(Q){return Q&&Q.getContext&&Q.getContext("2d")||null}updateConfig(Q){Q.options.animation=!1}}var e3="$chartjs",rA={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},xz=(Q)=>Q===null||Q==="";function nA(Q,J){let X=Q.style,q=Q.getAttribute("height"),N=Q.getAttribute("width");if(Q[e3]={initial:{height:q,width:N,style:{display:X.display,height:X.height,width:X.width}}},X.display=X.display||"block",X.boxSizing=X.boxSizing||"border-box",xz(N)){let K=uU(Q,"width");if(K!==void 0)Q.width=K}if(xz(q))if(Q.style.height==="")Q.height=Q.width/(J||2);else{let K=uU(Q,"height");if(K!==void 0)Q.height=K}return Q}var j_=Tz?{passive:!0}:!1;function sA(Q,J,X){if(Q)Q.addEventListener(J,X,j_)}function oA(Q,J,X){if(Q&&Q.canvas)Q.canvas.removeEventListener(J,X,j_)}function aA(Q,J){let X=rA[Q.type]||Q.type,{x:q,y:N}=h8(Q,J);return{type:X,chart:J,native:Q,x:q!==void 0?q:null,y:N!==void 0?N:null}}function ZX(Q,J){for(let X of Q)if(X===J||X.contains(J))return!0}function iA(Q,J,X){let q=Q.canvas,N=new MutationObserver((K)=>{let H=!1;for(let F of K)H=H||ZX(F.addedNodes,q),H=H&&!ZX(F.removedNodes,q);if(H)X()});return N.observe(document,{childList:!0,subtree:!0}),N}function tA(Q,J,X){let q=Q.canvas,N=new MutationObserver((K)=>{let H=!1;for(let F of K)H=H||ZX(F.removedNodes,q),H=H&&!ZX(F.addedNodes,q);if(H)X()});return N.observe(document,{childList:!0,subtree:!0}),N}var SQ=new Map,mz=0;function D_(){let Q=window.devicePixelRatio;if(Q===mz)return;mz=Q,SQ.forEach((J,X)=>{if(X.currentDevicePixelRatio!==Q)J()})}function eA(Q,J){if(!SQ.size)window.addEventListener("resize",D_);SQ.set(Q,J)}function $E(Q){if(SQ.delete(Q),!SQ.size)window.removeEventListener("resize",D_)}function ZE(Q,J,X){let q=Q.canvas,N=q&&r3(q);if(!N)return;let K=EU((F,M)=>{let w=N.clientWidth;if(X(F,M),w<N.clientWidth)X()},window),H=new ResizeObserver((F)=>{let M=F[0],w=M.contentRect.width,R=M.contentRect.height;if(w===0&&R===0)return;K(w,R)});return H.observe(N),eA(Q,K),H}function iU(Q,J,X){if(X)X.disconnect();if(J==="resize")$E(Q)}function QE(Q,J,X){let q=Q.canvas,N=EU((K)=>{if(Q.ctx!==null)X(aA(K,Q))},Q);return sA(q,J,N),N}class v_ extends MK{acquireContext(Q,J){let X=Q&&Q.getContext&&Q.getContext("2d");if(X&&X.canvas===Q)return nA(Q,J),X;return null}releaseContext(Q){let J=Q.canvas;if(!J[e3])return!1;let X=J[e3].initial;["height","width"].forEach((N)=>{let K=X[N];if(J1(K))J.removeAttribute(N);else J.setAttribute(N,K)});let q=X.style||{};return Object.keys(q).forEach((N)=>{J.style[N]=q[N]}),J.width=J.width,delete J[e3],!0}addEventListener(Q,J,X){this.removeEventListener(Q,J);let q=Q.$proxies||(Q.$proxies={}),K={attach:iA,detach:tA,resize:ZE}[J]||QE;q[J]=K(Q,J,X)}removeEventListener(Q,J){let X=Q.$proxies||(Q.$proxies={}),q=X[J];if(!q)return;({attach:iU,detach:iU,resize:iU}[J]||oA)(Q,J,q),X[J]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(Q,J,X,q){return Pz(Q,J,X,q)}isAttached(Q){let J=Q&&r3(Q);return!!(J&&J.isConnected)}}function JE(Q){if(!l3()||typeof OffscreenCanvas<"u"&&Q instanceof OffscreenCanvas)return S_;return v_}class v2{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(Q){let{x:J,y:X}=this.getProps(["x","y"],Q);return{x:J,y:X}}hasValue(){return z$(this.x)&&z$(this.y)}getProps(Q,J){let X=this.$animations;if(!J||!X)return this;let q={};return Q.forEach((N)=>{q[N]=X[N]&&X[N].active()?X[N]._to:this[N]}),q}}function GE(Q,J){let X=Q.options.ticks,q=XE(Q),N=Math.min(X.maxTicksLimit||q,q),K=X.major.enabled?YE(J):[],H=K.length,F=K[0],M=K[H-1],w=[];if(H>N)return NE(J,w,K,H/N),w;let R=qE(K,J,N);if(H>0){let _,P,I=H>1?Math.round((M-F)/(H-1)):null;o3(J,w,R,J1(I)?0:F-I,F);for(_=0,P=H-1;_<P;_++)o3(J,w,R,K[_],K[_+1]);return o3(J,w,R,M,J1(I)?J.length:M+I),w}return o3(J,w,R),w}function XE(Q){let J=Q.options.offset,X=Q._tickSize(),q=Q._length/X+(J?0:1),N=Q._maxLength/X;return Math.floor(Math.min(q,N))}function qE(Q,J,X){let q=UE(Q),N=J.length/X;if(!q)return Math.max(N,1);let K=tR(q);for(let H=0,F=K.length-1;H<F;H++){let M=K[H];if(M>N)return M}return Math.max(N,1)}function YE(Q){let J=[],X,q;for(X=0,q=Q.length;X<q;X++)if(Q[X].major)J.push(X);return J}function NE(Q,J,X,q){let N=0,K=X[0],H;q=Math.ceil(q);for(H=0;H<Q.length;H++)if(H===K)J.push(Q[H]),N++,K=X[N*q]}function o3(Q,J,X,q,N){let K=n0(q,0),H=Math.min(n0(N,Q.length),Q.length),F=0,M,w,R;if(X=Math.ceil(X),N)M=N-q,X=M/Math.floor(M/X);R=K;while(R<0)F++,R=Math.round(K+F*X);for(w=Math.max(K,0);w<H;w++)if(w===R)J.push(Q[w]),F++,R=Math.round(K+F*X)}function UE(Q){let J=Q.length,X,q;if(J<2)return!1;for(q=Q[0],X=1;X<J;++X)if(Q[X]-Q[X-1]!==q)return!1;return q}var KE=(Q)=>Q==="left"?"right":Q==="right"?"left":Q,dz=(Q,J,X)=>J==="top"||J==="left"?Q[J]+X:Q[J]-X,pz=(Q,J)=>Math.min(J||Q,Q);function cz(Q,J){let X=[],q=Q.length/J,N=Q.length,K=0;for(;K<N;K+=q)X.push(Q[Math.floor(K)]);return X}function BE(Q,J,X){let q=Q.ticks.length,N=Math.min(J,q-1),K=Q._startPixel,H=Q._endPixel,F=0.000001,M=Q.getPixelForTick(N),w;if(X){if(q===1)w=Math.max(M-K,H-M);else if(J===0)w=(Q.getPixelForTick(1)-M)/2;else w=(M-Q.getPixelForTick(N-1))/2;if(M+=N<J?w:-w,M<K-0.000001||M>H+0.000001)return}return M}function HE(Q,J){W1(Q,(X)=>{let q=X.gc,N=q.length/2,K;if(N>J){for(K=0;K<N;++K)delete X.data[q[K]];q.splice(0,N)}})}function IQ(Q){return Q.drawTicks?Q.tickLength:0}function lz(Q,J){if(!Q.display)return 0;let X=X5(Q.font,J),q=I5(Q.padding);return(j1(Q.text)?Q.text.length:1)*X.lineHeight+q.height}function FE(Q,J){return S2(Q,{scale:J,type:"scale"})}function ME(Q,J,X){return S2(Q,{tick:X,index:J,type:"tick"})}function WE(Q,J,X){let q=x3(Q);if(X&&J!=="right"||!X&&J==="right")q=KE(q);return q}function wE(Q,J,X,q){let{top:N,left:K,bottom:H,right:F,chart:M}=Q,{chartArea:w,scales:R}=M,_=0,P,I,A,V=H-N,O=F-K;if(Q.isHorizontal()){if(I=C5(q,K,F),$1(X)){let D=Object.keys(X)[0],h=X[D];A=R[D].getPixelForValue(h)+V-J}else if(X==="center")A=(w.bottom+w.top)/2+V-J;else A=dz(Q,X,J);P=F-K}else{if($1(X)){let D=Object.keys(X)[0],h=X[D];I=R[D].getPixelForValue(h)-O+J}else if(X==="center")I=(w.left+w.right)/2-O+J;else I=dz(Q,X,J);A=C5(q,H,N),_=X==="left"?-Z6:Z6}return{titleX:I,titleY:A,maxWidth:P,rotation:_}}class c9 extends v2{constructor(Q){super();this.id=Q.id,this.type=Q.type,this.options=void 0,this.ctx=Q.ctx,this.chart=Q.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(Q){this.options=Q.setContext(this.getContext()),this.axis=Q.axis,this._userMin=this.parse(Q.min),this._userMax=this.parse(Q.max),this._suggestedMin=this.parse(Q.suggestedMin),this._suggestedMax=this.parse(Q.suggestedMax)}parse(Q,J){return Q}getUserBounds(){let{_userMin:Q,_userMax:J,_suggestedMin:X,_suggestedMax:q}=this;return Q=G6(Q,Number.POSITIVE_INFINITY),J=G6(J,Number.NEGATIVE_INFINITY),X=G6(X,Number.POSITIVE_INFINITY),q=G6(q,Number.NEGATIVE_INFINITY),{min:G6(Q,X),max:G6(J,q),minDefined:x1(Q),maxDefined:x1(J)}}getMinMax(Q){let{min:J,max:X,minDefined:q,maxDefined:N}=this.getUserBounds(),K;if(q&&N)return{min:J,max:X};let H=this.getMatchingVisibleMetas();for(let F=0,M=H.length;F<M;++F){if(K=H[F].controller.getMinMax(this,Q),!q)J=Math.min(J,K.min);if(!N)X=Math.max(X,K.max)}return J=N&&J>X?X:J,X=q&&J>X?J:X,{min:G6(J,G6(X,J)),max:G6(X,G6(J,X))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let Q=this.chart.data;return this.options.labels||(this.isHorizontal()?Q.xLabels:Q.yLabels)||Q.labels||[]}getLabelItems(Q=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(Q))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){V1(this.options.beforeUpdate,[this])}update(Q,J,X){let{beginAtZero:q,grace:N,ticks:K}=this.options,H=K.sampleSize;if(this.beforeUpdate(),this.maxWidth=Q,this.maxHeight=J,this._margins=X=Object.assign({left:0,right:0,top:0,bottom:0},X),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+X.left+X.right:this.height+X.top+X.bottom,!this._dataLimitsCached)this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Wz(this,N,q),this._dataLimitsCached=!0;this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let F=H<this.ticks.length;if(this._convertTicksToLabels(F?cz(this.ticks,H):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),K.display&&(K.autoSkip||K.source==="auto"))this.ticks=GE(this,this.ticks),this._labelSizes=null,this.afterAutoSkip();if(F)this._convertTicksToLabels(this.ticks);this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let Q=this.options.reverse,J,X;if(this.isHorizontal())J=this.left,X=this.right;else J=this.top,X=this.bottom,Q=!Q;this._startPixel=J,this._endPixel=X,this._reversePixels=Q,this._length=X-J,this._alignToPixels=this.options.alignToPixels}afterUpdate(){V1(this.options.afterUpdate,[this])}beforeSetDimensions(){V1(this.options.beforeSetDimensions,[this])}setDimensions(){if(this.isHorizontal())this.width=this.maxWidth,this.left=0,this.right=this.width;else this.height=this.maxHeight,this.top=0,this.bottom=this.height;this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){V1(this.options.afterSetDimensions,[this])}_callHooks(Q){this.chart.notifyPlugins(Q,this.getContext()),V1(this.options[Q],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){V1(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(Q){let J=this.options.ticks,X,q,N;for(X=0,q=Q.length;X<q;X++)N=Q[X],N.label=V1(J.callback,[N.value,X,Q],this)}afterTickToLabelConversion(){V1(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){V1(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){let Q=this.options,J=Q.ticks,X=pz(this.ticks.length,Q.ticks.maxTicksLimit),q=J.minRotation||0,N=J.maxRotation,K=q,H,F,M;if(!this._isVisible()||!J.display||q>=N||X<=1||!this.isHorizontal()){this.labelRotation=q;return}let w=this._getLabelSizes(),R=w.widest.width,_=w.highest.height,P=J6(this.chart.width-R,0,this.maxWidth);if(H=Q.offset?this.maxWidth/X:P/(X-1),R+6>H)H=P/(X-(Q.offset?0.5:1)),F=this.maxHeight-IQ(Q.grid)-J.padding-lz(Q.title,this.chart.options.font),M=Math.sqrt(R*R+_*_),K=h3(Math.min(Math.asin(J6((w.highest.height+6)/H,-1,1)),Math.asin(J6(F/M,-1,1))-Math.asin(J6(_/M,-1,1)))),K=Math.max(q,Math.min(N,K));this.labelRotation=K}afterCalculateLabelRotation(){V1(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){V1(this.options.beforeFit,[this])}fit(){let Q={width:0,height:0},{chart:J,options:{ticks:X,title:q,grid:N}}=this,K=this._isVisible(),H=this.isHorizontal();if(K){let F=lz(q,J.options.font);if(H)Q.width=this.maxWidth,Q.height=IQ(N)+F;else Q.height=this.maxHeight,Q.width=IQ(N)+F;if(X.display&&this.ticks.length){let{first:M,last:w,widest:R,highest:_}=this._getLabelSizes(),P=X.padding*2,I=A2(this.labelRotation),A=Math.cos(I),V=Math.sin(I);if(H){let O=X.mirror?0:V*R.width+A*_.height;Q.height=Math.min(this.maxHeight,Q.height+O+P)}else{let O=X.mirror?0:A*R.width+V*_.height;Q.width=Math.min(this.maxWidth,Q.width+O+P)}this._calculatePadding(M,w,V,A)}}if(this._handleMargins(),H)this.width=this._length=J.width-this._margins.left-this._margins.right,this.height=Q.height;else this.width=Q.width,this.height=this._length=J.height-this._margins.top-this._margins.bottom}_calculatePadding(Q,J,X,q){let{ticks:{align:N,padding:K},position:H}=this.options,F=this.labelRotation!==0,M=H!=="top"&&this.axis==="x";if(this.isHorizontal()){let w=this.getPixelForTick(0)-this.left,R=this.right-this.getPixelForTick(this.ticks.length-1),_=0,P=0;if(F)if(M)_=q*Q.width,P=X*J.height;else _=X*Q.height,P=q*J.width;else if(N==="start")P=J.width;else if(N==="end")_=Q.width;else if(N!=="inner")_=Q.width/2,P=J.width/2;this.paddingLeft=Math.max((_-w+K)*this.width/(this.width-w),0),this.paddingRight=Math.max((P-R+K)*this.width/(this.width-R),0)}else{let w=J.height/2,R=Q.height/2;if(N==="start")w=0,R=Q.height;else if(N==="end")w=J.height,R=0;this.paddingTop=w+K,this.paddingBottom=R+K}}_handleMargins(){if(this._margins)this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom)}afterFit(){V1(this.options.afterFit,[this])}isHorizontal(){let{axis:Q,position:J}=this.options;return J==="top"||J==="bottom"||Q==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(Q){this.beforeTickToLabelConversion(),this.generateTickLabels(Q);let J,X;for(J=0,X=Q.length;J<X;J++)if(J1(Q[J].label))Q.splice(J,1),X--,J--;this.afterTickToLabelConversion()}_getLabelSizes(){let Q=this._labelSizes;if(!Q){let J=this.options.ticks.sampleSize,X=this.ticks;if(J<X.length)X=cz(X,J);this._labelSizes=Q=this._computeLabelSizes(X,X.length,this.options.ticks.maxTicksLimit)}return Q}_computeLabelSizes(Q,J,X){let{ctx:q,_longestTextCache:N}=this,K=[],H=[],F=Math.floor(J/pz(J,X)),M=0,w=0,R,_,P,I,A,V,O,D,h,p,s;for(R=0;R<J;R+=F){if(I=Q[R].label,A=this._resolveTickFontOptions(R),q.font=V=A.string,O=N[V]=N[V]||{data:{},gc:[]},D=A.lineHeight,h=p=0,!J1(I)&&!j1(I))h=WQ(q,O.data,O.gc,h,I),p=D;else if(j1(I)){for(_=0,P=I.length;_<P;++_)if(s=I[_],!J1(s)&&!j1(s))h=WQ(q,O.data,O.gc,h,s),p+=D}K.push(h),H.push(p),M=Math.max(h,M),w=Math.max(p,w)}HE(N,J);let a=K.indexOf(M),J0=H.indexOf(w),t=(i)=>({width:K[i]||0,height:H[i]||0});return{first:t(0),last:t(J-1),widest:t(a),highest:t(J0),widths:K,heights:H}}getLabelForValue(Q){return Q}getPixelForValue(Q,J){return NaN}getValueForPixel(Q){}getPixelForTick(Q){let J=this.ticks;if(Q<0||Q>J.length-1)return null;return this.getPixelForValue(J[Q].value)}getPixelForDecimal(Q){if(this._reversePixels)Q=1-Q;let J=this._startPixel+Q*this._length;return Zz(this._alignToPixels?f8(this.chart,J,0):J)}getDecimalForPixel(Q){let J=(Q-this._startPixel)/this._length;return this._reversePixels?1-J:J}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:Q,max:J}=this;return Q<0&&J<0?J:Q>0&&J>0?Q:0}getContext(Q){let J=this.ticks||[];if(Q>=0&&Q<J.length){let X=J[Q];return X.$context||(X.$context=ME(this.getContext(),Q,X))}return this.$context||(this.$context=FE(this.chart.getContext(),this))}_tickSize(){let Q=this.options.ticks,J=A2(this.labelRotation),X=Math.abs(Math.cos(J)),q=Math.abs(Math.sin(J)),N=this._getLabelSizes(),K=Q.autoSkipPadding||0,H=N?N.widest.width+K:0,F=N?N.highest.height+K:0;return this.isHorizontal()?F*X>H*q?H/X:F/q:F*q<H*X?F/X:H/q}_isVisible(){let Q=this.options.display;if(Q!=="auto")return!!Q;return this.getMatchingVisibleMetas().length>0}_computeGridLineItems(Q){let J=this.axis,X=this.chart,q=this.options,{grid:N,position:K,border:H}=q,F=N.offset,M=this.isHorizontal(),R=this.ticks.length+(F?1:0),_=IQ(N),P=[],I=H.setContext(this.getContext()),A=I.display?I.width:0,V=A/2,O=function(l){return f8(X,l,A)},D,h,p,s,a,J0,t,i,Y0,d,H0,P0;if(K==="top")D=O(this.bottom),J0=this.bottom-_,i=D-V,d=O(Q.top)+V,P0=Q.bottom;else if(K==="bottom")D=O(this.top),d=Q.top,P0=O(Q.bottom)-V,J0=D+V,i=this.top+_;else if(K==="left")D=O(this.right),a=this.right-_,t=D-V,Y0=O(Q.left)+V,H0=Q.right;else if(K==="right")D=O(this.left),Y0=Q.left,H0=O(Q.right)-V,a=D+V,t=this.left+_;else if(J==="x"){if(K==="center")D=O((Q.top+Q.bottom)/2+0.5);else if($1(K)){let l=Object.keys(K)[0],q0=K[l];D=O(this.chart.scales[l].getPixelForValue(q0))}d=Q.top,P0=Q.bottom,J0=D+V,i=J0+_}else if(J==="y"){if(K==="center")D=O((Q.left+Q.right)/2);else if($1(K)){let l=Object.keys(K)[0],q0=K[l];D=O(this.chart.scales[l].getPixelForValue(q0))}a=D-V,t=a-_,Y0=Q.left,H0=Q.right}let I0=n0(q.ticks.maxTicksLimit,R),b0=Math.max(1,Math.ceil(R/I0));for(h=0;h<R;h+=b0){let l=this.getContext(h),q0=N.setContext(l),F0=H.setContext(l),a0=q0.lineWidth,d0=q0.color,v=F0.dash||[],o=F0.dashOffset,M0=q0.tickWidth,W0=q0.tickColor,p0=q0.tickBorderDash||[],p1=q0.tickBorderDashOffset;if(p=BE(this,h,F),p===void 0)continue;if(s=f8(X,p,a0),M)a=t=Y0=H0=s;else J0=i=d=P0=s;P.push({tx1:a,ty1:J0,tx2:t,ty2:i,x1:Y0,y1:d,x2:H0,y2:P0,width:a0,color:d0,borderDash:v,borderDashOffset:o,tickWidth:M0,tickColor:W0,tickBorderDash:p0,tickBorderDashOffset:p1})}return this._ticksLength=R,this._borderValue=D,P}_computeLabelItems(Q){let J=this.axis,X=this.options,{position:q,ticks:N}=X,K=this.isHorizontal(),H=this.ticks,{align:F,crossAlign:M,padding:w,mirror:R}=N,_=IQ(X.grid),P=_+w,I=R?-w:P,A=-A2(this.labelRotation),V=[],O,D,h,p,s,a,J0,t,i,Y0,d,H0,P0="middle";if(q==="top")a=this.bottom-I,J0=this._getXAxisLabelAlignment();else if(q==="bottom")a=this.top+I,J0=this._getXAxisLabelAlignment();else if(q==="left"){let b0=this._getYAxisLabelAlignment(_);J0=b0.textAlign,s=b0.x}else if(q==="right"){let b0=this._getYAxisLabelAlignment(_);J0=b0.textAlign,s=b0.x}else if(J==="x"){if(q==="center")a=(Q.top+Q.bottom)/2+P;else if($1(q)){let b0=Object.keys(q)[0],l=q[b0];a=this.chart.scales[b0].getPixelForValue(l)+P}J0=this._getXAxisLabelAlignment()}else if(J==="y"){if(q==="center")s=(Q.left+Q.right)/2-P;else if($1(q)){let b0=Object.keys(q)[0],l=q[b0];s=this.chart.scales[b0].getPixelForValue(l)}J0=this._getYAxisLabelAlignment(_).textAlign}if(J==="y"){if(F==="start")P0="top";else if(F==="end")P0="bottom"}let I0=this._getLabelSizes();for(O=0,D=H.length;O<D;++O){h=H[O],p=h.label;let b0=N.setContext(this.getContext(O));t=this.getPixelForTick(O)+N.labelOffset,i=this._resolveTickFontOptions(O),Y0=i.lineHeight,d=j1(p)?p.length:1;let l=d/2,q0=b0.color,F0=b0.textStrokeColor,a0=b0.textStrokeWidth,d0=J0;if(K){if(s=t,J0==="inner")if(O===D-1)d0=!this.options.reverse?"right":"left";else if(O===0)d0=!this.options.reverse?"left":"right";else d0="center";if(q==="top")if(M==="near"||A!==0)H0=-d*Y0+Y0/2;else if(M==="center")H0=-I0.highest.height/2-l*Y0+Y0;else H0=-I0.highest.height+Y0/2;else if(M==="near"||A!==0)H0=Y0/2;else if(M==="center")H0=I0.highest.height/2-l*Y0;else H0=I0.highest.height-d*Y0;if(R)H0*=-1;if(A!==0&&!b0.showLabelBackdrop)s+=Y0/2*Math.sin(A)}else a=t,H0=(1-d)*Y0/2;let v;if(b0.showLabelBackdrop){let o=I5(b0.backdropPadding),M0=I0.heights[O],W0=I0.widths[O],p0=H0-o.top,p1=0-o.left;switch(P0){case"middle":p0-=M0/2;break;case"bottom":p0-=M0;break}switch(J0){case"center":p1-=W0/2;break;case"right":p1-=W0;break;case"inner":if(O===D-1)p1-=W0;else if(O>0)p1-=W0/2;break}v={left:p1,top:p0,width:W0+o.width,height:M0+o.height,color:b0.backdropColor}}V.push({label:p,font:i,textOffset:H0,options:{rotation:A,color:q0,strokeColor:F0,strokeWidth:a0,textAlign:d0,textBaseline:P0,translation:[s,a],backdrop:v}})}return V}_getXAxisLabelAlignment(){let{position:Q,ticks:J}=this.options;if(-A2(this.labelRotation))return Q==="top"?"left":"right";let q="center";if(J.align==="start")q="left";else if(J.align==="end")q="right";else if(J.align==="inner")q="inner";return q}_getYAxisLabelAlignment(Q){let{position:J,ticks:{crossAlign:X,mirror:q,padding:N}}=this.options,K=this._getLabelSizes(),H=Q+N,F=K.widest.width,M,w;if(J==="left")if(q)if(w=this.right+N,X==="near")M="left";else if(X==="center")M="center",w+=F/2;else M="right",w+=F;else if(w=this.right-H,X==="near")M="right";else if(X==="center")M="center",w-=F/2;else M="left",w=this.left;else if(J==="right")if(q)if(w=this.left+N,X==="near")M="right";else if(X==="center")M="center",w-=F/2;else M="left",w-=F;else if(w=this.left+H,X==="near")M="left";else if(X==="center")M="center",w+=F/2;else M="right",w=this.right;else M="right";return{textAlign:M,x:w}}_computeLabelArea(){if(this.options.ticks.mirror)return;let Q=this.chart,J=this.options.position;if(J==="left"||J==="right")return{top:0,left:this.left,bottom:Q.height,right:this.right};if(J==="top"||J==="bottom")return{top:this.top,left:0,bottom:this.bottom,right:Q.width}}drawBackground(){let{ctx:Q,options:{backgroundColor:J},left:X,top:q,width:N,height:K}=this;if(J)Q.save(),Q.fillStyle=J,Q.fillRect(X,q,N,K),Q.restore()}getLineWidthForValue(Q){let J=this.options.grid;if(!this._isVisible()||!J.display)return 0;let q=this.ticks.findIndex((N)=>N.value===Q);if(q>=0)return J.setContext(this.getContext(q)).lineWidth;return 0}drawGrid(Q){let J=this.options.grid,X=this.ctx,q=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(Q)),N,K,H=(F,M,w)=>{if(!w.width||!w.color)return;X.save(),X.lineWidth=w.width,X.strokeStyle=w.color,X.setLineDash(w.borderDash||[]),X.lineDashOffset=w.borderDashOffset,X.beginPath(),X.moveTo(F.x,F.y),X.lineTo(M.x,M.y),X.stroke(),X.restore()};if(J.display)for(N=0,K=q.length;N<K;++N){let F=q[N];if(J.drawOnChartArea)H({x:F.x1,y:F.y1},{x:F.x2,y:F.y2},F);if(J.drawTicks)H({x:F.tx1,y:F.ty1},{x:F.tx2,y:F.ty2},{color:F.tickColor,width:F.tickWidth,borderDash:F.tickBorderDash,borderDashOffset:F.tickBorderDashOffset})}}drawBorder(){let{chart:Q,ctx:J,options:{border:X,grid:q}}=this,N=X.setContext(this.getContext()),K=X.display?N.width:0;if(!K)return;let H=q.setContext(this.getContext(0)).lineWidth,F=this._borderValue,M,w,R,_;if(this.isHorizontal())M=f8(Q,this.left,K)-K/2,w=f8(Q,this.right,H)+H/2,R=_=F;else R=f8(Q,this.top,K)-K/2,_=f8(Q,this.bottom,H)+H/2,M=w=F;J.save(),J.lineWidth=N.width,J.strokeStyle=N.color,J.beginPath(),J.moveTo(M,R),J.lineTo(w,_),J.stroke(),J.restore()}drawLabels(Q){if(!this.options.ticks.display)return;let X=this.ctx,q=this._computeLabelArea();if(q)zQ(X,q);let N=this.getLabelItems(Q);for(let K of N){let{options:H,font:F,label:M,textOffset:w}=K;y8(X,M,0,w,F,H)}if(q)_Q(X)}drawTitle(){let{ctx:Q,options:{position:J,title:X,reverse:q}}=this;if(!X.display)return;let N=X5(X.font),K=I5(X.padding),H=X.align,F=N.lineHeight/2;if(J==="bottom"||J==="center"||$1(J)){if(F+=K.bottom,j1(X.text))F+=N.lineHeight*(X.text.length-1)}else F+=K.top;let{titleX:M,titleY:w,maxWidth:R,rotation:_}=wE(this,F,J,H);y8(Q,X.text,0,0,N,{color:X.color,maxWidth:R,rotation:_,textAlign:WE(H,J,q),textBaseline:"middle",translation:[M,w]})}draw(Q){if(!this._isVisible())return;this.drawBackground(),this.drawGrid(Q),this.drawBorder(),this.drawTitle(),this.drawLabels(Q)}_layers(){let Q=this.options,J=Q.ticks&&Q.ticks.z||0,X=n0(Q.grid&&Q.grid.z,-1),q=n0(Q.border&&Q.border.z,0);if(!this._isVisible()||this.draw!==c9.prototype.draw)return[{z:J,draw:(N)=>{this.draw(N)}}];return[{z:X,draw:(N)=>{this.drawBackground(),this.drawGrid(N),this.drawTitle()}},{z:q,draw:()=>{this.drawBorder()}},{z:J,draw:(N)=>{this.drawLabels(N)}}]}getMatchingVisibleMetas(Q){let J=this.chart.getSortedVisibleDatasetMetas(),X=this.axis+"AxisID",q=[],N,K;for(N=0,K=J.length;N<K;++N){let H=J[N];if(H[X]===this.id&&(!Q||H.type===Q))q.push(H)}return q}_resolveTickFontOptions(Q){let J=this.options.ticks.setContext(this.getContext(Q));return X5(J.font)}_maxDigits(){let Q=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/Q}}class AQ{constructor(Q,J,X){this.type=Q,this.scope=J,this.override=X,this.items=Object.create(null)}isForType(Q){return Object.prototype.isPrototypeOf.call(this.type.prototype,Q.prototype)}register(Q){let J=Object.getPrototypeOf(Q),X;if(_E(J))X=this.register(J);let q=this.items,N=Q.id,K=this.scope+"."+N;if(!N)throw Error("class does not have id: "+Q);if(N in q)return K;if(q[N]=Q,RE(Q,K,X),this.override)m1.override(Q.id,Q.overrides);return K}get(Q){return this.items[Q]}unregister(Q){let J=this.items,X=Q.id,q=this.scope;if(X in J)delete J[X];if(q&&X in m1[q]){if(delete m1[q][X],this.override)delete k8[X]}}}function RE(Q,J,X){let q=F$(Object.create(null),[X?m1.get(X):{},m1.get(J),Q.defaults]);if(m1.set(J,q),Q.defaultRoutes)zE(J,Q.defaultRoutes);if(Q.descriptors)m1.describe(J,Q.descriptors)}function zE(Q,J){Object.keys(J).forEach((X)=>{let q=X.split("."),N=q.pop(),K=[Q].concat(q).join("."),H=J[X].split("."),F=H.pop(),M=H.join(".");m1.route(K,N,M,F)})}function _E(Q){return"id"in Q&&"defaults"in Q}class b_{constructor(){this.controllers=new AQ(QX,"datasets",!0),this.elements=new AQ(v2,"elements"),this.plugins=new AQ(Object,"plugins"),this.scales=new AQ(c9,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...Q){this._each("register",Q)}remove(...Q){this._each("unregister",Q)}addControllers(...Q){this._each("register",Q,this.controllers)}addElements(...Q){this._each("register",Q,this.elements)}addPlugins(...Q){this._each("register",Q,this.plugins)}addScales(...Q){this._each("register",Q,this.scales)}getController(Q){return this._get(Q,this.controllers,"controller")}getElement(Q){return this._get(Q,this.elements,"element")}getPlugin(Q){return this._get(Q,this.plugins,"plugin")}getScale(Q){return this._get(Q,this.scales,"scale")}removeControllers(...Q){this._each("unregister",Q,this.controllers)}removeElements(...Q){this._each("unregister",Q,this.elements)}removePlugins(...Q){this._each("unregister",Q,this.plugins)}removeScales(...Q){this._each("unregister",Q,this.scales)}_each(Q,J,X){[...J].forEach((q)=>{let N=X||this._getRegistryForType(q);if(X||N.isForType(q)||N===this.plugins&&q.id)this._exec(Q,N,q);else W1(q,(K)=>{let H=X||this._getRegistryForType(K);this._exec(Q,H,K)})})}_exec(Q,J,X){let q=g3(Q);V1(X["before"+q],[],X),J[Q](X),V1(X["after"+q],[],X)}_getRegistryForType(Q){for(let J=0;J<this._typedRegistries.length;J++){let X=this._typedRegistries[J];if(X.isForType(Q))return X}return this.plugins}_get(Q,J,X){let q=J.get(Q);if(q===void 0)throw Error('"'+Q+'" is not a registered '+X+".");return q}}var r4=new b_;class k_{constructor(){this._init=void 0}notify(Q,J,X,q){if(J==="beforeInit")this._init=this._createDescriptors(Q,!0),this._notify(this._init,Q,"install");if(this._init===void 0)return;let N=q?this._descriptors(Q).filter(q):this._descriptors(Q),K=this._notify(N,Q,J,X);if(J==="afterDestroy")this._notify(N,Q,"stop"),this._notify(this._init,Q,"uninstall"),this._init=void 0;return K}_notify(Q,J,X,q){q=q||{};for(let N of Q){let K=N.plugin,H=K[X],F=[J,q,N.options];if(V1(H,F,K)===!1&&q.cancelable)return!1}return!0}invalidate(){if(!J1(this._cache))this._oldCache=this._cache,this._cache=void 0}_descriptors(Q){if(this._cache)return this._cache;let J=this._cache=this._createDescriptors(Q);return this._notifyStateChanges(Q),J}_createDescriptors(Q,J){let X=Q&&Q.config,q=n0(X.options&&X.options.plugins,{}),N=LE(X);return q===!1&&!J?[]:TE(Q,N,q,J)}_notifyStateChanges(Q){let J=this._oldCache||[],X=this._cache,q=(N,K)=>N.filter((H)=>!K.some((F)=>H.plugin.id===F.plugin.id));this._notify(q(J,X),Q,"stop"),this._notify(q(X,J),Q,"start")}}function LE(Q){let J={},X=[],q=Object.keys(r4.plugins.items);for(let K=0;K<q.length;K++)X.push(r4.getPlugin(q[K]));let N=Q.plugins||[];for(let K=0;K<N.length;K++){let H=N[K];if(X.indexOf(H)===-1)X.push(H),J[H.id]=!0}return{plugins:X,localIds:J}}function PE(Q,J){if(!J&&Q===!1)return null;if(Q===!0)return{};return Q}function TE(Q,{plugins:J,localIds:X},q,N){let K=[],H=Q.getContext();for(let F of J){let M=F.id,w=PE(q[M],N);if(w===null)continue;K.push({plugin:F,options:CE(Q.config,{plugin:F,local:X[M]},w,H)})}return K}function CE(Q,{plugin:J,local:X},q,N){let K=Q.pluginScopeKeys(J),H=Q.getOptionScopes(q,K);if(X&&J.defaults)H.push(J.defaults);return Q.createResolver(H,N,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function QK(Q,J){let X=m1.datasets[Q]||{};return((J.datasets||{})[Q]||{}).indexAxis||J.indexAxis||X.indexAxis||"x"}function IE(Q,J){let X=Q;if(Q==="_index_")X=J;else if(Q==="_value_")X=J==="x"?"y":"x";return X}function OE(Q,J){return Q===J?"_index_":"_value_"}function rz(Q){if(Q==="x"||Q==="y"||Q==="r")return Q}function VE(Q){if(Q==="top"||Q==="bottom")return"x";if(Q==="left"||Q==="right")return"y"}function JK(Q,...J){if(rz(Q))return Q;for(let X of J){let q=X.axis||VE(X.position)||Q.length>1&&rz(Q[0].toLowerCase());if(q)return q}throw Error(`Cannot determine type of '${Q}' axis. Please provide 'axis' or 'position' option.`)}function nz(Q,J,X){if(X[J+"AxisID"]===Q)return{axis:J}}function AE(Q,J){if(J.data&&J.data.datasets){let X=J.data.datasets.filter((q)=>q.xAxisID===Q||q.yAxisID===Q);if(X.length)return nz(Q,"x",X[0])||nz(Q,"y",X[0])}return{}}function EE(Q,J){let X=k8[Q.type]||{scales:{}},q=J.scales||{},N=QK(Q.type,J),K=Object.create(null);return Object.keys(q).forEach((H)=>{let F=q[H];if(!$1(F))return console.error(`Invalid scale configuration for scale: ${H}`);if(F._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${H}`);let M=JK(H,F,AE(H,Q),m1.scales[F.type]),w=OE(M,N),R=X.scales||{};K[H]=W$(Object.create(null),[{axis:M},F,R[M],R[w]])}),Q.data.datasets.forEach((H)=>{let F=H.type||Q.type,M=H.indexAxis||QK(F,J),R=(k8[F]||{}).scales||{};Object.keys(R).forEach((_)=>{let P=IE(_,M),I=H[P+"AxisID"]||P;K[I]=K[I]||Object.create(null),W$(K[I],[{axis:P},q[I],R[_]])})}),Object.keys(K).forEach((H)=>{let F=K[H];W$(F,[m1.scales[F.type],m1.scale])}),K}function f_(Q){let J=Q.options||(Q.options={});J.plugins=n0(J.plugins,{}),J.scales=EE(Q,J)}function y_(Q){return Q=Q||{},Q.datasets=Q.datasets||[],Q.labels=Q.labels||[],Q}function SE(Q){return Q=Q||{},Q.data=y_(Q.data),f_(Q),Q}var sz=new Map,g_=new Set;function a3(Q,J){let X=sz.get(Q);if(!X)X=J(),sz.set(Q,X),g_.add(X);return X}var OQ=(Q,J,X)=>{let q=x9(J,X);if(q!==void 0)Q.add(q)};class h_{constructor(Q){this._config=SE(Q),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(Q){this._config.type=Q}get data(){return this._config.data}set data(Q){this._config.data=y_(Q)}get options(){return this._config.options}set options(Q){this._config.options=Q}get plugins(){return this._config.plugins}update(){let Q=this._config;this.clearCache(),f_(Q)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(Q){return a3(Q,()=>[[`datasets.${Q}`,""]])}datasetAnimationScopeKeys(Q,J){return a3(`${Q}.transition.${J}`,()=>[[`datasets.${Q}.transitions.${J}`,`transitions.${J}`],[`datasets.${Q}`,""]])}datasetElementScopeKeys(Q,J){return a3(`${Q}-${J}`,()=>[[`datasets.${Q}.elements.${J}`,`datasets.${Q}`,`elements.${J}`,""]])}pluginScopeKeys(Q){let J=Q.id,X=this.type;return a3(`${X}-plugin-${J}`,()=>[[`plugins.${J}`,...Q.additionalOptionScopes||[]]])}_cachedScopes(Q,J){let X=this._scopeCache,q=X.get(Q);if(!q||J)q=new Map,X.set(Q,q);return q}getOptionScopes(Q,J,X){let{options:q,type:N}=this,K=this._cachedScopes(Q,X),H=K.get(J);if(H)return H;let F=new Set;J.forEach((w)=>{if(Q)F.add(Q),w.forEach((R)=>OQ(F,Q,R));w.forEach((R)=>OQ(F,q,R)),w.forEach((R)=>OQ(F,k8[N]||{},R)),w.forEach((R)=>OQ(F,m1,R)),w.forEach((R)=>OQ(F,d3,R))});let M=Array.from(F);if(M.length===0)M.push(Object.create(null));if(g_.has(J))K.set(J,M);return M}chartOptionScopes(){let{options:Q,type:J}=this;return[Q,k8[J]||{},m1.datasets[J]||{},{type:J},m1,d3]}resolveNamedOptions(Q,J,X,q=[""]){let N={$shared:!0},{resolver:K,subPrefixes:H}=oz(this._resolverCache,Q,q),F=K;if(DE(K,J)){N.$shared=!1,X=O2(X)?X():X;let M=this.createResolver(Q,X,H);F=u9(K,X,M)}for(let M of J)N[M]=F[M];return N}createResolver(Q,J,X=[""],q){let{resolver:N}=oz(this._resolverCache,Q,X);return $1(J)?u9(N,J,void 0,q):N}}function oz(Q,J,X){let q=Q.get(J);if(!q)q=new Map,Q.set(J,q);let N=X.join(),K=q.get(N);if(!K)K={resolver:c3(J,X),subPrefixes:X.filter((F)=>!F.toLowerCase().includes("hover"))},q.set(N,K);return K}var jE=(Q)=>$1(Q)&&Object.getOwnPropertyNames(Q).some((J)=>O2(Q[J]));function DE(Q,J){let{isScriptable:X,isIndexable:q}=fU(Q);for(let N of J){let K=X(N),H=q(N),F=(H||K)&&Q[N];if(K&&(O2(F)||jE(F))||H&&j1(F))return!0}return!1}var vE="4.5.1",bE=["top","bottom","left","right","chartArea"];function az(Q,J){return Q==="top"||Q==="bottom"||bE.indexOf(Q)===-1&&J==="x"}function iz(Q,J){return function(X,q){return X[Q]===q[Q]?X[J]-q[J]:X[Q]-q[Q]}}function tz(Q){let J=Q.chart,X=J.options.animation;J.notifyPlugins("afterRender"),V1(X&&X.onComplete,[Q],J)}function kE(Q){let J=Q.chart,X=J.options.animation;V1(X&&X.onProgress,[Q],J)}function u_(Q){if(l3()&&typeof Q==="string")Q=document.getElementById(Q);else if(Q&&Q.length)Q=Q[0];if(Q&&Q.canvas)Q=Q.canvas;return Q}var $X={},ez=(Q)=>{let J=u_(Q);return Object.values($X).filter((X)=>X.canvas===J).pop()};function fE(Q,J,X){let q=Object.keys(Q);for(let N of q){let K=+N;if(K>=J){let H=Q[N];if(delete Q[N],X>0||K>J)Q[K+X]=H}}}function yE(Q,J,X,q){if(!X||Q.type==="mouseout")return null;if(q)return J;return Q}class l9{static defaults=m1;static instances=$X;static overrides=k8;static registry=r4;static version=vE;static getChart=ez;static register(...Q){r4.add(...Q),$_()}static unregister(...Q){r4.remove(...Q),$_()}constructor(Q,J){let X=this.config=new h_(J),q=u_(Q),N=ez(q);if(N)throw Error("Canvas is already in use. Chart with ID '"+N.id+"' must be destroyed before the canvas with ID '"+N.canvas.id+"' can be reused.");let K=X.createResolver(X.chartOptionScopes(),this.getContext());this.platform=new(X.platform||JE(q)),this.platform.updateConfig(X);let H=this.platform.acquireContext(q,K.aspectRatio),F=H&&H.canvas,M=F&&F.height,w=F&&F.width;if(this.id=sR(),this.ctx=H,this.canvas=F,this.width=w,this.height=M,this._options=K,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new k_,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=qz((R)=>this.update(R),K.resizeDelay||0),this._dataChanges=[],$X[this.id]=this,!H||!F){console.error("Failed to create chart: can't acquire context from the given item");return}if(j2.listen(this,"complete",tz),j2.listen(this,"progress",kE),this._initialize(),this.attached)this.update()}get aspectRatio(){let{options:{aspectRatio:Q,maintainAspectRatio:J},width:X,height:q,_aspectRatio:N}=this;if(!J1(Q))return Q;if(J&&N)return N;return q?X/q:null}get data(){return this.config.data}set data(Q){this.config.data=Q}get options(){return this._options}set options(Q){this.config.options=Q}get registry(){return r4}_initialize(){if(this.notifyPlugins("beforeInit"),this.options.responsive)this.resize();else hU(this,this.options.devicePixelRatio);return this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return DU(this.canvas,this.ctx),this}stop(){return j2.stop(this),this}resize(Q,J){if(!j2.running(this))this._resize(Q,J);else this._resizeBeforeDraw={width:Q,height:J}}_resize(Q,J){let X=this.options,q=this.canvas,N=X.maintainAspectRatio&&this.aspectRatio,K=this.platform.getMaximumSize(q,Q,J,N),H=X.devicePixelRatio||this.platform.getDevicePixelRatio(),F=this.width?"resize":"attach";if(this.width=K.width,this.height=K.height,this._aspectRatio=this.aspectRatio,!hU(this,H,!0))return;if(this.notifyPlugins("resize",{size:K}),V1(X.onResize,[this,K],this),this.attached){if(this._doResize(F))this.render()}}ensureScalesHaveIDs(){let J=this.options.scales||{};W1(J,(X,q)=>{X.id=q})}buildOrUpdateScales(){let Q=this.options,J=Q.scales,X=this.scales,q=Object.keys(X).reduce((K,H)=>{return K[H]=!1,K},{}),N=[];if(J)N=N.concat(Object.keys(J).map((K)=>{let H=J[K],F=JK(K,H),M=F==="r",w=F==="x";return{options:H,dposition:M?"chartArea":w?"bottom":"left",dtype:M?"radialLinear":w?"category":"linear"}}));W1(N,(K)=>{let H=K.options,F=H.id,M=JK(F,H),w=n0(H.type,K.dtype);if(H.position===void 0||az(H.position,M)!==az(K.dposition))H.position=K.dposition;q[F]=!0;let R=null;if(F in X&&X[F].type===w)R=X[F];else R=new(r4.getScale(w))({id:F,type:w,ctx:this.ctx,chart:this}),X[R.id]=R;R.init(H,Q)}),W1(q,(K,H)=>{if(!K)delete X[H]}),W1(X,(K)=>{n6.configure(this,K,K.options),n6.addBox(this,K)})}_updateMetasets(){let Q=this._metasets,J=this.data.datasets.length,X=Q.length;if(Q.sort((q,N)=>q.index-N.index),X>J){for(let q=J;q<X;++q)this._destroyDatasetMeta(q);Q.splice(J,X-J)}this._sortedMetasets=Q.slice(0).sort(iz("order","index"))}_removeUnreferencedMetasets(){let{_metasets:Q,data:{datasets:J}}=this;if(Q.length>J.length)delete this._stacks;Q.forEach((X,q)=>{if(J.filter((N)=>N===X._dataset).length===0)this._destroyDatasetMeta(q)})}buildOrUpdateControllers(){let Q=[],J=this.data.datasets,X,q;this._removeUnreferencedMetasets();for(X=0,q=J.length;X<q;X++){let N=J[X],K=this.getDatasetMeta(X),H=N.type||this.config.type;if(K.type&&K.type!==H)this._destroyDatasetMeta(X),K=this.getDatasetMeta(X);if(K.type=H,K.indexAxis=N.indexAxis||QK(H,this.options),K.order=N.order||0,K.index=X,K.label=""+N.label,K.visible=this.isDatasetVisible(X),K.controller)K.controller.updateIndex(X),K.controller.linkScales();else{let F=r4.getController(H),{datasetElementType:M,dataElementType:w}=m1.datasets[H];Object.assign(F,{dataElementType:r4.getElement(w),datasetElementType:M&&r4.getElement(M)}),K.controller=new F(this,X),Q.push(K.controller)}}return this._updateMetasets(),Q}_resetElements(){W1(this.data.datasets,(Q,J)=>{this.getDatasetMeta(J).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(Q){let J=this.config;J.update();let X=this._options=J.createResolver(J.chartOptionScopes(),this.getContext()),q=this._animationsDisabled=!X.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:Q,cancelable:!0})===!1)return;let N=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let K=0;for(let M=0,w=this.data.datasets.length;M<w;M++){let{controller:R}=this.getDatasetMeta(M),_=!q&&N.indexOf(R)===-1;R.buildOrUpdateElements(_),K=Math.max(+R.getMaxOverflow(),K)}if(K=this._minPadding=X.layout.autoPadding?K:0,this._updateLayout(K),!q)W1(N,(M)=>{M.reset()});this._updateDatasets(Q),this.notifyPlugins("afterUpdate",{mode:Q}),this._layers.sort(iz("z","_idx"));let{_active:H,_lastEvent:F}=this;if(F)this._eventHandler(F,!0);else if(H.length)this._updateHoverStyles(H,H,!0);this.render()}_updateScales(){W1(this.scales,(Q)=>{n6.removeBox(this,Q)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let Q=this.options,J=new Set(Object.keys(this._listeners)),X=new Set(Q.events);if(!LU(J,X)||!!this._responsiveListeners!==Q.responsive)this.unbindEvents(),this.bindEvents()}_updateHiddenIndices(){let{_hiddenIndices:Q}=this,J=this._getUniformDataChanges()||[];for(let{method:X,start:q,count:N}of J){let K=X==="_removeElements"?-N:N;fE(Q,q,K)}}_getUniformDataChanges(){let Q=this._dataChanges;if(!Q||!Q.length)return;this._dataChanges=[];let J=this.data.datasets.length,X=(N)=>new Set(Q.filter((K)=>K[0]===N).map((K,H)=>H+","+K.splice(1).join(","))),q=X(0);for(let N=1;N<J;N++)if(!LU(q,X(N)))return;return Array.from(q).map((N)=>N.split(",")).map((N)=>({method:N[1],start:+N[2],count:+N[3]}))}_updateLayout(Q){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;n6.update(this,this.width,this.height,Q);let J=this.chartArea,X=J.width<=0||J.height<=0;this._layers=[],W1(this.boxes,(q)=>{if(X&&q.position==="chartArea")return;if(q.configure)q.configure();this._layers.push(...q._layers())},this),this._layers.forEach((q,N)=>{q._idx=N}),this.notifyPlugins("afterLayout")}_updateDatasets(Q){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:Q,cancelable:!0})===!1)return;for(let J=0,X=this.data.datasets.length;J<X;++J)this.getDatasetMeta(J).controller.configure();for(let J=0,X=this.data.datasets.length;J<X;++J)this._updateDataset(J,O2(Q)?Q({datasetIndex:J}):Q);this.notifyPlugins("afterDatasetsUpdate",{mode:Q})}_updateDataset(Q,J){let X=this.getDatasetMeta(Q),q={meta:X,index:Q,mode:J,cancelable:!0};if(this.notifyPlugins("beforeDatasetUpdate",q)===!1)return;X.controller._update(J),q.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",q)}render(){if(this.notifyPlugins("beforeRender",{cancelable:!0})===!1)return;if(j2.has(this)){if(this.attached&&!j2.running(this))j2.start(this)}else this.draw(),tz({chart:this})}draw(){let Q;if(this._resizeBeforeDraw){let{width:X,height:q}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(X,q)}if(this.clear(),this.width<=0||this.height<=0)return;if(this.notifyPlugins("beforeDraw",{cancelable:!0})===!1)return;let J=this._layers;for(Q=0;Q<J.length&&J[Q].z<=0;++Q)J[Q].draw(this.chartArea);this._drawDatasets();for(;Q<J.length;++Q)J[Q].draw(this.chartArea);this.notifyPlugins("afterDraw")}_getSortedDatasetMetas(Q){let J=this._sortedMetasets,X=[],q,N;for(q=0,N=J.length;q<N;++q){let K=J[q];if(!Q||K.visible)X.push(K)}return X}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(this.notifyPlugins("beforeDatasetsDraw",{cancelable:!0})===!1)return;let Q=this.getSortedVisibleDatasetMetas();for(let J=Q.length-1;J>=0;--J)this._drawDataset(Q[J]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(Q){let J=this.ctx,X={meta:Q,index:Q.index,cancelable:!0},q=cU(this,Q);if(this.notifyPlugins("beforeDatasetDraw",X)===!1)return;if(q)zQ(J,q);if(Q.controller.draw(),q)_Q(J);X.cancelable=!1,this.notifyPlugins("afterDatasetDraw",X)}isPointInArea(Q){return p4(Q,this.chartArea,this._minPadding)}getElementsAtEventForMode(Q,J,X,q){let N=hA.modes[J];if(typeof N==="function")return N(this,Q,X,q);return[]}getDatasetMeta(Q){let J=this.data.datasets[Q],X=this._metasets,q=X.filter((N)=>N&&N._dataset===J).pop();if(!q)q={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:J&&J.order||0,index:Q,_dataset:J,_parsed:[],_sorted:!1},X.push(q);return q}getContext(){return this.$context||(this.$context=S2(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(Q){let J=this.data.datasets[Q];if(!J)return!1;let X=this.getDatasetMeta(Q);return typeof X.hidden==="boolean"?!X.hidden:!J.hidden}setDatasetVisibility(Q,J){let X=this.getDatasetMeta(Q);X.hidden=!J}toggleDataVisibility(Q){this._hiddenIndices[Q]=!this._hiddenIndices[Q]}getDataVisibility(Q){return!this._hiddenIndices[Q]}_updateVisibility(Q,J,X){let q=X?"show":"hide",N=this.getDatasetMeta(Q),K=N.controller._resolveAnimations(void 0,q);if(w$(J))N.data[J].hidden=!X,this.update();else this.setDatasetVisibility(Q,X),K.update(N,{visible:X}),this.update((H)=>H.datasetIndex===Q?q:void 0)}hide(Q,J){this._updateVisibility(Q,J,!1)}show(Q,J){this._updateVisibility(Q,J,!0)}_destroyDatasetMeta(Q){let J=this._metasets[Q];if(J&&J.controller)J.controller._destroy();delete this._metasets[Q]}_stop(){let Q,J;this.stop(),j2.remove(this);for(Q=0,J=this.data.datasets.length;Q<J;++Q)this._destroyDatasetMeta(Q)}destroy(){this.notifyPlugins("beforeDestroy");let{canvas:Q,ctx:J}=this;if(this._stop(),this.config.clearCache(),Q)this.unbindEvents(),DU(Q,J),this.platform.releaseContext(J),this.canvas=null,this.ctx=null;delete $X[this.id],this.notifyPlugins("afterDestroy")}toBase64Image(...Q){return this.canvas.toDataURL(...Q)}bindEvents(){if(this.bindUserEvents(),this.options.responsive)this.bindResponsiveEvents();else this.attached=!0}bindUserEvents(){let Q=this._listeners,J=this.platform,X=(N,K)=>{J.addEventListener(this,N,K),Q[N]=K},q=(N,K,H)=>{N.offsetX=K,N.offsetY=H,this._eventHandler(N)};W1(this.options.events,(N)=>X(N,q))}bindResponsiveEvents(){if(!this._responsiveListeners)this._responsiveListeners={};let Q=this._responsiveListeners,J=this.platform,X=(F,M)=>{J.addEventListener(this,F,M),Q[F]=M},q=(F,M)=>{if(Q[F])J.removeEventListener(this,F,M),delete Q[F]},N=(F,M)=>{if(this.canvas)this.resize(F,M)},K,H=()=>{q("attach",H),this.attached=!0,this.resize(),X("resize",N),X("detach",K)};if(K=()=>{this.attached=!1,q("resize",N),this._stop(),this._resize(0,0),X("attach",H)},J.isAttached(this.canvas))H();else K()}unbindEvents(){W1(this._listeners,(Q,J)=>{this.platform.removeEventListener(this,J,Q)}),this._listeners={},W1(this._responsiveListeners,(Q,J)=>{this.platform.removeEventListener(this,J,Q)}),this._responsiveListeners=void 0}updateHoverStyle(Q,J,X){let q=X?"set":"remove",N,K,H,F;if(J==="dataset")N=this.getDatasetMeta(Q[0].datasetIndex),N.controller["_"+q+"DatasetHoverStyle"]();for(H=0,F=Q.length;H<F;++H){K=Q[H];let M=K&&this.getDatasetMeta(K.datasetIndex).controller;if(M)M[q+"HoverStyle"](K.element,K.datasetIndex,K.index)}}getActiveElements(){return this._active||[]}setActiveElements(Q){let J=this._active||[],X=Q.map(({datasetIndex:N,index:K})=>{let H=this.getDatasetMeta(N);if(!H)throw Error("No dataset found at index "+N);return{datasetIndex:N,element:H.data[K],index:K}});if(!wQ(X,J))this._active=X,this._lastEvent=null,this._updateHoverStyles(X,J)}notifyPlugins(Q,J,X){return this._plugins.notify(this,Q,J,X)}isPluginEnabled(Q){return this._plugins._cache.filter((J)=>J.plugin.id===Q).length===1}_updateHoverStyles(Q,J,X){let q=this.options.hover,N=(F,M)=>F.filter((w)=>!M.some((R)=>w.datasetIndex===R.datasetIndex&&w.index===R.index)),K=N(J,Q),H=X?Q:N(Q,J);if(K.length)this.updateHoverStyle(K,q.mode,!1);if(H.length&&q.mode)this.updateHoverStyle(H,q.mode,!0)}_eventHandler(Q,J){let X={event:Q,replay:J,cancelable:!0,inChartArea:this.isPointInArea(Q)},q=(K)=>(K.options.events||this.options.events).includes(Q.native.type);if(this.notifyPlugins("beforeEvent",X,q)===!1)return;let N=this._handleEvent(Q,J,X.inChartArea);if(X.cancelable=!1,this.notifyPlugins("afterEvent",X,q),N||X.changed)this.render();return this}_handleEvent(Q,J,X){let{_active:q=[],options:N}=this,K=J,H=this._getActiveElements(Q,q,X,K),F=iR(Q),M=yE(Q,this._lastEvent,X,F);if(X){if(this._lastEvent=null,V1(N.onHover,[Q,H,this],this),F)V1(N.onClick,[Q,H,this],this)}let w=!wQ(H,q);if(w||J)this._active=H,this._updateHoverStyles(H,q,J);return this._lastEvent=M,w}_getActiveElements(Q,J,X,q){if(Q.type==="mouseout")return[];if(!X)return J;let N=this.options.hover;return this.getElementsAtEventForMode(Q,N.mode,N,q)}}function $_(){return W1(l9.instances,(Q)=>Q._plugins.invalidate())}function x_(Q,J,X=J){Q.lineCap=n0(X.borderCapStyle,J.borderCapStyle),Q.setLineDash(n0(X.borderDash,J.borderDash)),Q.lineDashOffset=n0(X.borderDashOffset,J.borderDashOffset),Q.lineJoin=n0(X.borderJoinStyle,J.borderJoinStyle),Q.lineWidth=n0(X.borderWidth,J.borderWidth),Q.strokeStyle=n0(X.borderColor,J.borderColor)}function gE(Q,J,X){Q.lineTo(X.x,X.y)}function hE(Q){if(Q.stepped)return Fz;if(Q.tension||Q.cubicInterpolationMode==="monotone")return Mz;return gE}function m_(Q,J,X={}){let q=Q.length,{start:N=0,end:K=q-1}=X,{start:H,end:F}=J,M=Math.max(N,H),w=Math.min(K,F),R=N<H&&K<H||N>F&&K>F;return{count:q,start:M,loop:J.loop,ilen:w<M&&!R?q+w-M:w-M}}function uE(Q,J,X,q){let{points:N,options:K}=J,{count:H,start:F,loop:M,ilen:w}=m_(N,X,q),R=hE(K),{move:_=!0,reverse:P}=q||{},I,A,V;for(I=0;I<=w;++I){if(A=N[(F+(P?w-I:I))%H],A.skip)continue;else if(_)Q.moveTo(A.x,A.y),_=!1;else R(Q,V,A,P,K.stepped);V=A}if(M)A=N[(F+(P?w:0))%H],R(Q,V,A,P,K.stepped);return!!M}function xE(Q,J,X,q){let N=J.points,{count:K,start:H,ilen:F}=m_(N,X,q),{move:M=!0,reverse:w}=q||{},R=0,_=0,P,I,A,V,O,D,h=(s)=>(H+(w?F-s:s))%K,p=()=>{if(V!==O)Q.lineTo(R,O),Q.lineTo(R,V),Q.lineTo(R,D)};if(M)I=N[h(0)],Q.moveTo(I.x,I.y);for(P=0;P<=F;++P){if(I=N[h(P)],I.skip)continue;let{x:s,y:a}=I,J0=s|0;if(J0===A){if(a<V)V=a;else if(a>O)O=a;R=(_*R+s)/++_}else p(),Q.lineTo(s,a),A=J0,_=0,V=O=a;D=a}p()}function GK(Q){let J=Q.options,X=J.borderDash&&J.borderDash.length;return!Q._decimated&&!Q._loop&&!J.tension&&J.cubicInterpolationMode!=="monotone"&&!J.stepped&&!X?xE:uE}function mE(Q){if(Q.stepped)return Cz;if(Q.tension||Q.cubicInterpolationMode==="monotone")return Iz;return D8}function dE(Q,J,X,q){let N=J._path;if(!N){if(N=J._path=new Path2D,J.path(N,X,q))N.closePath()}x_(Q,J.options),Q.stroke(N)}function pE(Q,J,X,q){let{segments:N,options:K}=J,H=GK(J);for(let F of N){if(x_(Q,K,F.style),Q.beginPath(),H(Q,J,F,{start:X,end:X+q-1}))Q.closePath();Q.stroke()}}var cE=typeof Path2D==="function";function lE(Q,J,X,q){if(cE&&!J.options.segment)dE(Q,J,X,q);else pE(Q,J,X,q)}class L$ extends v2{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:(Q)=>Q!=="borderDash"&&Q!=="fill"};constructor(Q){super();if(this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,Q)Object.assign(this,Q)}updateControlPoints(Q,J){let X=this.options;if((X.tension||X.cubicInterpolationMode==="monotone")&&!X.stepped&&!this._pointsUpdated){let q=X.spanGaps?this._loop:this._fullLoop;Lz(this._points,X,Q,q,J),this._pointsUpdated=!0}}set points(Q){this._points=Q,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Vz(this,this.options.segment))}first(){let Q=this.segments,J=this.points;return Q.length&&J[Q[0].start]}last(){let Q=this.segments,J=this.points,X=Q.length;return X&&J[Q[X-1].end]}interpolate(Q,J){let X=this.options,q=Q[J],N=this.points,K=pU(this,{property:J,start:q,end:q});if(!K.length)return;let H=[],F=mE(X),M,w;for(M=0,w=K.length;M<w;++M){let{start:R,end:_}=K[M],P=N[R],I=N[_];if(P===I){H.push(P);continue}let A=Math.abs((q-P[J])/(I[J]-P[J])),V=F(P,I,A,X.stepped);V[J]=Q[J],H.push(V)}return H.length===1?H[0]:H}pathSegment(Q,J,X){return GK(this)(Q,this,J,X)}path(Q,J,X){let q=this.segments,N=GK(this),K=this._loop;J=J||0,X=X||this.points.length-J;for(let H of q)K&=N(Q,this,H,{start:J,end:J+X-1});return!!K}draw(Q,J,X,q){let N=this.options||{};if((this.points||[]).length&&N.borderWidth)Q.save(),lE(Q,this,X,q),Q.restore();if(this.animated)this._pointsUpdated=!1,this._path=void 0}}function Z_(Q,J,X,q){let N=Q.options,{[X]:K}=Q.getProps([X],q);return Math.abs(J-K)<N.radius+N.hitRadius}class WK extends v2{static id="point";parsed;skip;stop;static defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};constructor(Q){super();if(this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,Q)Object.assign(this,Q)}inRange(Q,J,X){let q=this.options,{x:N,y:K}=this.getProps(["x","y"],X);return Math.pow(Q-N,2)+Math.pow(J-K,2)<Math.pow(q.hitRadius+q.radius,2)}inXRange(Q,J){return Z_(this,Q,"x",J)}inYRange(Q,J){return Z_(this,Q,"y",J)}getCenterPoint(Q){let{x:J,y:X}=this.getProps(["x","y"],Q);return{x:J,y:X}}size(Q){Q=Q||this.options||{};let J=Q.radius||0;J=Math.max(J,J&&Q.hoverRadius||0);let X=J&&Q.borderWidth||0;return(J+X)*2}draw(Q,J){let X=this.options;if(this.skip||X.radius<0.1||!p4(this,J,this.size(X)/2))return;Q.strokeStyle=X.borderColor,Q.lineWidth=X.borderWidth,Q.fillStyle=X.backgroundColor,p3(Q,X,this.x,this.y)}getRange(){let Q=this.options||{};return Q.radius+Q.hitRadius}}function d_(Q,J){let{x:X,y:q,base:N,width:K,height:H}=Q.getProps(["x","y","base","width","height"],J),F,M,w,R,_;if(Q.horizontal)_=H/2,F=Math.min(X,N),M=Math.max(X,N),w=q-_,R=q+_;else _=K/2,F=X-_,M=X+_,w=Math.min(q,N),R=Math.max(q,N);return{left:F,top:w,right:M,bottom:R}}function u8(Q,J,X,q){return Q?0:J6(J,X,q)}function rE(Q,J,X){let q=Q.options.borderWidth,N=Q.borderSkipped,K=kU(q);return{t:u8(N.top,K.top,0,X),r:u8(N.right,K.right,0,J),b:u8(N.bottom,K.bottom,0,X),l:u8(N.left,K.left,0,J)}}function nE(Q,J,X){let{enableBorderRadius:q}=Q.getProps(["enableBorderRadius"]),N=Q.options.borderRadius,K=g8(N),H=Math.min(J,X),F=Q.borderSkipped,M=q||$1(N);return{topLeft:u8(!M||F.top||F.left,K.topLeft,0,H),topRight:u8(!M||F.top||F.right,K.topRight,0,H),bottomLeft:u8(!M||F.bottom||F.left,K.bottomLeft,0,H),bottomRight:u8(!M||F.bottom||F.right,K.bottomRight,0,H)}}function sE(Q){let J=d_(Q),X=J.right-J.left,q=J.bottom-J.top,N=rE(Q,X/2,q/2),K=nE(Q,X/2,q/2);return{outer:{x:J.left,y:J.top,w:X,h:q,radius:K},inner:{x:J.left+N.l,y:J.top+N.t,w:X-N.l-N.r,h:q-N.t-N.b,radius:{topLeft:Math.max(0,K.topLeft-Math.max(N.t,N.l)),topRight:Math.max(0,K.topRight-Math.max(N.t,N.r)),bottomLeft:Math.max(0,K.bottomLeft-Math.max(N.b,N.l)),bottomRight:Math.max(0,K.bottomRight-Math.max(N.b,N.r))}}}}function tU(Q,J,X,q){let N=J===null,K=X===null,F=Q&&!(N&&K)&&d_(Q,q);return F&&(N||E2(J,F.left,F.right))&&(K||E2(X,F.top,F.bottom))}function oE(Q){return Q.topLeft||Q.topRight||Q.bottomLeft||Q.bottomRight}function aE(Q,J){Q.rect(J.x,J.y,J.w,J.h)}function eU(Q,J,X={}){let q=Q.x!==X.x?-J:0,N=Q.y!==X.y?-J:0,K=(Q.x+Q.w!==X.x+X.w?J:0)-q,H=(Q.y+Q.h!==X.y+X.h?J:0)-N;return{x:Q.x+q,y:Q.y+N,w:Q.w+K,h:Q.h+H,radius:Q.radius}}class wK extends v2{static id="bar";static defaults={borderSkipped:"start",borderWidth:0,borderRadius:0,inflateAmount:"auto",pointStyle:void 0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};constructor(Q){super();if(this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,Q)Object.assign(this,Q)}draw(Q){let{inflateAmount:J,options:{borderColor:X,backgroundColor:q}}=this,{inner:N,outer:K}=sE(this),H=oE(K.radius)?_$:aE;if(Q.save(),K.w!==N.w||K.h!==N.h)Q.beginPath(),H(Q,eU(K,J,N)),Q.clip(),H(Q,eU(N,-J,K)),Q.fillStyle=X,Q.fill("evenodd");Q.beginPath(),H(Q,eU(N,J)),Q.fillStyle=q,Q.fill(),Q.restore()}inRange(Q,J,X){return tU(this,Q,J,X)}inXRange(Q,J){return tU(this,Q,null,J)}inYRange(Q,J){return tU(this,null,Q,J)}getCenterPoint(Q){let{x:J,y:X,base:q,horizontal:N}=this.getProps(["x","y","base","horizontal"],Q);return{x:N?(J+q)/2:J,y:N?X:(X+q)/2}}getRange(Q){return Q==="x"?this.width/2:this.height/2}}function iE(Q,J,X){let{segments:q,points:N}=Q,K=J.points,H=[];for(let F of q){let{start:M,end:w}=F;w=JX(M,w,N);let R=XK(X,N[M],N[w],F.loop);if(!J.segments){H.push({source:F,target:R,start:N[M],end:N[w]});continue}let _=pU(J,R);for(let P of _){let I=XK(X,K[P.start],K[P.end],P.loop),A=dU(F,N,I);for(let V of A)H.push({source:V,target:P,start:{[X]:Q_(R,I,"start",Math.max)},end:{[X]:Q_(R,I,"end",Math.min)}})}}return H}function XK(Q,J,X,q){if(q)return;let N=J[Q],K=X[Q];if(Q==="angle")N=$6(N),K=$6(K);return{property:Q,start:N,end:K}}function tE(Q,J){let{x:X=null,y:q=null}=Q||{},N=J.points,K=[];return J.segments.forEach(({start:H,end:F})=>{F=JX(H,F,N);let M=N[H],w=N[F];if(q!==null)K.push({x:M.x,y:q}),K.push({x:w.x,y:q});else if(X!==null)K.push({x:X,y:M.y}),K.push({x:X,y:w.y})}),K}function JX(Q,J,X){for(;J>Q;J--){let q=X[J];if(!isNaN(q.x)&&!isNaN(q.y))break}return J}function Q_(Q,J,X,q){if(Q&&J)return q(Q[X],J[X]);return Q?Q[X]:J?J[X]:0}function p_(Q,J){let X=[],q=!1;if(j1(Q))q=!0,X=Q;else X=tE(Q,J);return X.length?new L$({points:X,options:{tension:0},_loop:q,_fullLoop:q}):null}function J_(Q){return Q&&Q.fill!==!1}function eE(Q,J,X){let N=Q[J].fill,K=[J],H;if(!X)return N;while(N!==!1&&K.indexOf(N)===-1){if(!x1(N))return N;if(H=Q[N],!H)return!1;if(H.visible)return N;K.push(N),N=H.fill}return!1}function $S(Q,J,X){let q=GS(Q);if($1(q))return isNaN(q.value)?!1:q;let N=parseFloat(q);if(x1(N)&&Math.floor(N)===N)return ZS(q[0],J,N,X);return["origin","start","end","stack","shape"].indexOf(q)>=0&&q}function ZS(Q,J,X,q){if(Q==="-"||Q==="+")X=J+X;if(X===J||X<0||X>=q)return!1;return X}function QS(Q,J){let X=null;if(Q==="start")X=J.bottom;else if(Q==="end")X=J.top;else if($1(Q))X=J.getPixelForValue(Q.value);else if(J.getBasePixel)X=J.getBasePixel();return X}function JS(Q,J,X){let q;if(Q==="start")q=X;else if(Q==="end")q=J.options.reverse?J.min:J.max;else if($1(Q))q=Q.value;else q=J.getBaseValue();return q}function GS(Q){let J=Q.options,X=J.fill,q=n0(X&&X.target,X);if(q===void 0)q=!!J.backgroundColor;if(q===!1||q===null)return!1;if(q===!0)return"origin";return q}function XS(Q){let{scale:J,index:X,line:q}=Q,N=[],K=q.segments,H=q.points,F=qS(J,X);F.push(p_({x:null,y:J.bottom},q));for(let M=0;M<K.length;M++){let w=K[M];for(let R=w.start;R<=w.end;R++)YS(N,H[R],F)}return new L$({points:N,options:{}})}function qS(Q,J){let X=[],q=Q.getMatchingVisibleMetas("line");for(let N=0;N<q.length;N++){let K=q[N];if(K.index===J)break;if(!K.hidden)X.unshift(K.dataset)}return X}function YS(Q,J,X){let q=[];for(let N=0;N<X.length;N++){let K=X[N],{first:H,last:F,point:M}=NS(K,J,"x");if(!M||H&&F)continue;if(H)q.unshift(M);else if(Q.push(M),!F)break}Q.push(...q)}function NS(Q,J,X){let q=Q.interpolate(J,X);if(!q)return{};let N=q[X],K=Q.segments,H=Q.points,F=!1,M=!1;for(let w=0;w<K.length;w++){let R=K[w],_=H[R.start][X],P=H[R.end][X];if(E2(N,_,P)){F=N===_,M=N===P;break}}return{first:F,last:M,point:q}}class RK{constructor(Q){this.x=Q.x,this.y=Q.y,this.radius=Q.radius}pathSegment(Q,J,X){let{x:q,y:N,radius:K}=this;return J=J||{start:0,end:Q6},Q.arc(q,N,K,J.end,J.start,!0),!X.bounds}interpolate(Q){let{x:J,y:X,radius:q}=this,N=Q.angle;return{x:J+Math.cos(N)*q,y:X+Math.sin(N)*q,angle:N}}}function US(Q){let{chart:J,fill:X,line:q}=Q;if(x1(X))return KS(J,X);if(X==="stack")return XS(Q);if(X==="shape")return!0;let N=BS(Q);if(N instanceof RK)return N;return p_(N,q)}function KS(Q,J){let X=Q.getDatasetMeta(J);return X&&Q.isDatasetVisible(J)?X.dataset:null}function BS(Q){if((Q.scale||{}).getPointPositionForValue)return FS(Q);return HS(Q)}function HS(Q){let{scale:J={},fill:X}=Q,q=QS(X,J);if(x1(q)){let N=J.isHorizontal();return{x:N?q:null,y:N?null:q}}return null}function FS(Q){let{scale:J,fill:X}=Q,q=J.options,N=J.getLabels().length,K=q.reverse?J.max:J.min,H=JS(X,J,K),F=[];if(q.grid.circular){let M=J.getPointPositionForValue(0,K);return new RK({x:M.x,y:M.y,radius:J.getDistanceFromCenterForValue(H)})}for(let M=0;M<N;++M)F.push(J.getPointPositionForValue(M,H));return F}function $K(Q,J,X){let q=US(J),{chart:N,index:K,line:H,scale:F,axis:M}=J,w=H.options,R=w.fill,_=w.backgroundColor,{above:P=_,below:I=_}=R||{},A=N.getDatasetMeta(K),V=cU(N,A);if(q&&H.points.length)zQ(Q,X),MS(Q,{line:H,target:q,above:P,below:I,area:X,scale:F,axis:M,clip:V}),_Q(Q)}function MS(Q,J){let{line:X,target:q,above:N,below:K,area:H,scale:F,clip:M}=J,w=X._loop?"angle":J.axis;Q.save();let R=K;if(K!==N){if(w==="x")G_(Q,q,H.top),ZK(Q,{line:X,target:q,color:N,scale:F,property:w,clip:M}),Q.restore(),Q.save(),G_(Q,q,H.bottom);else if(w==="y")X_(Q,q,H.left),ZK(Q,{line:X,target:q,color:K,scale:F,property:w,clip:M}),Q.restore(),Q.save(),X_(Q,q,H.right),R=N}ZK(Q,{line:X,target:q,color:R,scale:F,property:w,clip:M}),Q.restore()}function G_(Q,J,X){let{segments:q,points:N}=J,K=!0,H=!1;Q.beginPath();for(let F of q){let{start:M,end:w}=F,R=N[M],_=N[JX(M,w,N)];if(K)Q.moveTo(R.x,R.y),K=!1;else Q.lineTo(R.x,X),Q.lineTo(R.x,R.y);if(H=!!J.pathSegment(Q,F,{move:H}),H)Q.closePath();else Q.lineTo(_.x,X)}Q.lineTo(J.first().x,X),Q.closePath(),Q.clip()}function X_(Q,J,X){let{segments:q,points:N}=J,K=!0,H=!1;Q.beginPath();for(let F of q){let{start:M,end:w}=F,R=N[M],_=N[JX(M,w,N)];if(K)Q.moveTo(R.x,R.y),K=!1;else Q.lineTo(X,R.y),Q.lineTo(R.x,R.y);if(H=!!J.pathSegment(Q,F,{move:H}),H)Q.closePath();else Q.lineTo(X,_.y)}Q.lineTo(X,J.first().y),Q.closePath(),Q.clip()}function ZK(Q,J){let{line:X,target:q,property:N,color:K,scale:H,clip:F}=J,M=iE(X,q,N);for(let{source:w,target:R,start:_,end:P}of M){let{style:{backgroundColor:I=K}={}}=w,A=q!==!0;Q.save(),Q.fillStyle=I,WS(Q,H,F,A&&XK(N,_,P)),Q.beginPath();let V=!!X.pathSegment(Q,w),O;if(A){if(V)Q.closePath();else q_(Q,q,P,N);let D=!!q.pathSegment(Q,R,{move:V,reverse:!0});if(O=V&&D,!O)q_(Q,q,_,N)}Q.closePath(),Q.fill(O?"evenodd":"nonzero"),Q.restore()}}function WS(Q,J,X,q){let N=J.chart.chartArea,{property:K,start:H,end:F}=q||{};if(K==="x"||K==="y"){let M,w,R,_;if(K==="x")M=H,w=N.top,R=F,_=N.bottom;else M=N.left,w=H,R=N.right,_=F;if(Q.beginPath(),X)M=Math.max(M,X.left),R=Math.min(R,X.right),w=Math.max(w,X.top),_=Math.min(_,X.bottom);Q.rect(M,w,R-M,_-w),Q.clip()}}function q_(Q,J,X,q){let N=J.interpolate(X,q);if(N)Q.lineTo(N.x,N.y)}var c_={id:"filler",afterDatasetsUpdate(Q,J,X){let q=(Q.data.datasets||[]).length,N=[],K,H,F,M;for(H=0;H<q;++H){if(K=Q.getDatasetMeta(H),F=K.dataset,M=null,F&&F.options&&F instanceof L$)M={visible:Q.isDatasetVisible(H),index:H,fill:$S(F,H,q),chart:Q,axis:K.controller.options.indexAxis,scale:K.vScale,line:F};K.$filler=M,N.push(M)}for(H=0;H<q;++H){if(M=N[H],!M||M.fill===!1)continue;M.fill=eE(N,H,X.propagate)}},beforeDraw(Q,J,X){let q=X.drawTime==="beforeDraw",N=Q.getSortedVisibleDatasetMetas(),K=Q.chartArea;for(let H=N.length-1;H>=0;--H){let F=N[H].$filler;if(!F)continue;if(F.line.updateControlPoints(K,F.axis),q&&F.fill)$K(Q.ctx,F,K)}},beforeDatasetsDraw(Q,J,X){if(X.drawTime!=="beforeDatasetsDraw")return;let q=Q.getSortedVisibleDatasetMetas();for(let N=q.length-1;N>=0;--N){let K=q[N].$filler;if(J_(K))$K(Q.ctx,K,Q.chartArea)}},beforeDatasetDraw(Q,J,X){let q=J.meta.$filler;if(!J_(q)||X.drawTime!=="beforeDatasetDraw")return;$K(Q.ctx,q,Q.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},Y_=(Q,J)=>{let{boxHeight:X=J,boxWidth:q=J}=Q;if(Q.usePointStyle)X=Math.min(X,J),q=Q.pointStyleWidth||Math.min(q,J);return{boxWidth:q,boxHeight:X,itemHeight:Math.max(J,X)}},wS=(Q,J)=>Q!==null&&J!==null&&Q.datasetIndex===J.datasetIndex&&Q.index===J.index;class qK extends v2{constructor(Q){super();this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=Q.chart,this.options=Q.options,this.ctx=Q.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(Q,J,X){this.maxWidth=Q,this.maxHeight=J,this._margins=X,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){if(this.isHorizontal())this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width;else this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height}buildLabels(){let Q=this.options.labels||{},J=V1(Q.generateLabels,[this.chart],this)||[];if(Q.filter)J=J.filter((X)=>Q.filter(X,this.chart.data));if(Q.sort)J=J.sort((X,q)=>Q.sort(X,q,this.chart.data));if(this.options.reverse)J.reverse();this.legendItems=J}fit(){let{options:Q,ctx:J}=this;if(!Q.display){this.width=this.height=0;return}let X=Q.labels,q=X5(X.font),N=q.size,K=this._computeTitleHeight(),{boxWidth:H,itemHeight:F}=Y_(X,N),M,w;if(J.font=q.string,this.isHorizontal())M=this.maxWidth,w=this._fitRows(K,N,H,F)+10;else w=this.maxHeight,M=this._fitCols(K,q,H,F)+10;this.width=Math.min(M,Q.maxWidth||this.maxWidth),this.height=Math.min(w,Q.maxHeight||this.maxHeight)}_fitRows(Q,J,X,q){let{ctx:N,maxWidth:K,options:{labels:{padding:H}}}=this,F=this.legendHitBoxes=[],M=this.lineWidths=[0],w=q+H,R=Q;N.textAlign="left",N.textBaseline="middle";let _=-1,P=-w;return this.legendItems.forEach((I,A)=>{let V=X+J/2+N.measureText(I.text).width;if(A===0||M[M.length-1]+V+2*H>K)R+=w,M[M.length-(A>0?0:1)]=0,P+=w,_++;F[A]={left:0,top:P,row:_,width:V,height:q},M[M.length-1]+=V+H}),R}_fitCols(Q,J,X,q){let{ctx:N,maxHeight:K,options:{labels:{padding:H}}}=this,F=this.legendHitBoxes=[],M=this.columnSizes=[],w=K-Q,R=H,_=0,P=0,I=0,A=0;return this.legendItems.forEach((V,O)=>{let{itemWidth:D,itemHeight:h}=RS(X,J,N,V,q);if(O>0&&P+h+2*H>w)R+=_+H,M.push({width:_,height:P}),I+=_+H,A++,_=P=0;F[O]={left:I,top:P,col:A,width:D,height:h},_=Math.max(_,D),P+=h+H}),R+=_,M.push({width:_,height:P}),R}adjustHitBoxes(){if(!this.options.display)return;let Q=this._computeTitleHeight(),{legendHitBoxes:J,options:{align:X,labels:{padding:q},rtl:N}}=this,K=m9(N,this.left,this.width);if(this.isHorizontal()){let H=0,F=C5(X,this.left+q,this.right-this.lineWidths[H]);for(let M of J){if(H!==M.row)H=M.row,F=C5(X,this.left+q,this.right-this.lineWidths[H]);M.top+=this.top+Q+q,M.left=K.leftForLtr(K.x(F),M.width),F+=M.width+q}}else{let H=0,F=C5(X,this.top+Q+q,this.bottom-this.columnSizes[H].height);for(let M of J){if(M.col!==H)H=M.col,F=C5(X,this.top+Q+q,this.bottom-this.columnSizes[H].height);M.top=F,M.left+=this.left+q,M.left=K.leftForLtr(K.x(M.left),M.width),F+=M.height+q}}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let Q=this.ctx;zQ(Q,this),this._draw(),_Q(Q)}}_draw(){let{options:Q,columnSizes:J,lineWidths:X,ctx:q}=this,{align:N,labels:K}=Q,H=m1.color,F=m9(Q.rtl,this.left,this.width),M=X5(K.font),{padding:w}=K,R=M.size,_=R/2,P;this.drawTitle(),q.textAlign=F.textAlign("left"),q.textBaseline="middle",q.lineWidth=0.5,q.font=M.string;let{boxWidth:I,boxHeight:A,itemHeight:V}=Y_(K,R),O=function(a,J0,t){if(isNaN(I)||I<=0||isNaN(A)||A<0)return;q.save();let i=n0(t.lineWidth,1);if(q.fillStyle=n0(t.fillStyle,H),q.lineCap=n0(t.lineCap,"butt"),q.lineDashOffset=n0(t.lineDashOffset,0),q.lineJoin=n0(t.lineJoin,"miter"),q.lineWidth=i,q.strokeStyle=n0(t.strokeStyle,H),q.setLineDash(n0(t.lineDash,[])),K.usePointStyle){let Y0={radius:A*Math.SQRT2/2,pointStyle:t.pointStyle,rotation:t.rotation,borderWidth:i},d=F.xPlus(a,I/2),H0=J0+_;vU(q,Y0,d,H0,K.pointStyleWidth&&I)}else{let Y0=J0+Math.max((R-A)/2,0),d=F.leftForLtr(a,I),H0=g8(t.borderRadius);if(q.beginPath(),Object.values(H0).some((P0)=>P0!==0))_$(q,{x:d,y:Y0,w:I,h:A,radius:H0});else q.rect(d,Y0,I,A);if(q.fill(),i!==0)q.stroke()}q.restore()},D=function(a,J0,t){y8(q,t.text,a,J0+V/2,M,{strikethrough:t.hidden,textAlign:F.textAlign(t.textAlign)})},h=this.isHorizontal(),p=this._computeTitleHeight();if(h)P={x:C5(N,this.left+w,this.right-X[0]),y:this.top+w+p,line:0};else P={x:this.left+w,y:C5(N,this.top+p+w,this.bottom-J[0].height),line:0};xU(this.ctx,Q.textDirection);let s=V+w;this.legendItems.forEach((a,J0)=>{q.strokeStyle=a.fontColor,q.fillStyle=a.fontColor;let t=q.measureText(a.text).width,i=F.textAlign(a.textAlign||(a.textAlign=K.textAlign)),Y0=I+_+t,d=P.x,H0=P.y;if(F.setWidth(this.width),h){if(J0>0&&d+Y0+w>this.right)H0=P.y+=s,P.line++,d=P.x=C5(N,this.left+w,this.right-X[P.line])}else if(J0>0&&H0+s>this.bottom)d=P.x=d+J[P.line].width+w,P.line++,H0=P.y=C5(N,this.top+p+w,this.bottom-J[P.line].height);let P0=F.x(d);if(O(P0,H0,a),d=Yz(i,d+I+_,h?d+Y0:this.right,Q.rtl),D(F.x(d),H0,a),h)P.x+=Y0+w;else if(typeof a.text!=="string"){let I0=M.lineHeight;P.y+=l_(a,I0)+w}else P.y+=s}),mU(this.ctx,Q.textDirection)}drawTitle(){let Q=this.options,J=Q.title,X=X5(J.font),q=I5(J.padding);if(!J.display)return;let N=m9(Q.rtl,this.left,this.width),K=this.ctx,H=J.position,F=X.size/2,M=q.top+F,w,R=this.left,_=this.width;if(this.isHorizontal())_=Math.max(...this.lineWidths),w=this.top+M,R=C5(Q.align,R,this.right-_);else{let I=this.columnSizes.reduce((A,V)=>Math.max(A,V.height),0);w=M+C5(Q.align,this.top,this.bottom-I-Q.labels.padding-this._computeTitleHeight())}let P=C5(H,R,R+_);K.textAlign=N.textAlign(x3(H)),K.textBaseline="middle",K.strokeStyle=J.color,K.fillStyle=J.color,K.font=X.string,y8(K,J.text,P,w,X)}_computeTitleHeight(){let Q=this.options.title,J=X5(Q.font),X=I5(Q.padding);return Q.display?J.lineHeight+X.height:0}_getLegendItemAt(Q,J){let X,q,N;if(E2(Q,this.left,this.right)&&E2(J,this.top,this.bottom)){N=this.legendHitBoxes;for(X=0;X<N.length;++X)if(q=N[X],E2(Q,q.left,q.left+q.width)&&E2(J,q.top,q.top+q.height))return this.legendItems[X]}return null}handleEvent(Q){let J=this.options;if(!LS(Q.type,J))return;let X=this._getLegendItemAt(Q.x,Q.y);if(Q.type==="mousemove"||Q.type==="mouseout"){let q=this._hoveredItem,N=wS(q,X);if(q&&!N)V1(J.onLeave,[Q,q,this],this);if(this._hoveredItem=X,X&&!N)V1(J.onHover,[Q,X,this],this)}else if(X)V1(J.onClick,[Q,X,this],this)}}function RS(Q,J,X,q,N){let K=zS(q,Q,J,X),H=_S(N,q,J.lineHeight);return{itemWidth:K,itemHeight:H}}function zS(Q,J,X,q){let N=Q.text;if(N&&typeof N!=="string")N=N.reduce((K,H)=>K.length>H.length?K:H);return J+X.size/2+q.measureText(N).width}function _S(Q,J,X){let q=Q;if(typeof J.text!=="string")q=l_(J,X);return q}function l_(Q,J){let X=Q.text?Q.text.length:0;return J*X}function LS(Q,J){if((Q==="mousemove"||Q==="mouseout")&&(J.onHover||J.onLeave))return!0;if(J.onClick&&(Q==="click"||Q==="mouseup"))return!0;return!1}var r_={id:"legend",_element:qK,start(Q,J,X){let q=Q.legend=new qK({ctx:Q.ctx,options:X,chart:Q});n6.configure(Q,q,X),n6.addBox(Q,q)},stop(Q){n6.removeBox(Q,Q.legend),delete Q.legend},beforeUpdate(Q,J,X){let q=Q.legend;n6.configure(Q,q,X),q.options=X},afterUpdate(Q){let J=Q.legend;J.buildLabels(),J.adjustHitBoxes()},afterEvent(Q,J){if(!J.replay)Q.legend.handleEvent(J.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1000,onClick(Q,J,X){let q=J.datasetIndex,N=X.chart;if(N.isDatasetVisible(q))N.hide(q),J.hidden=!0;else N.show(q),J.hidden=!1},onHover:null,onLeave:null,labels:{color:(Q)=>Q.chart.options.color,boxWidth:40,padding:10,generateLabels(Q){let J=Q.data.datasets,{labels:{usePointStyle:X,pointStyle:q,textAlign:N,color:K,useBorderRadius:H,borderRadius:F}}=Q.legend.options;return Q._getSortedDatasetMetas().map((M)=>{let w=M.controller.getStyle(X?0:void 0),R=I5(w.borderWidth);return{text:J[M.index].label,fillStyle:w.backgroundColor,fontColor:K,hidden:!M.visible,lineCap:w.borderCapStyle,lineDash:w.borderDash,lineDashOffset:w.borderDashOffset,lineJoin:w.borderJoinStyle,lineWidth:(R.width+R.height)/4,strokeStyle:w.borderColor,pointStyle:q||w.pointStyle,rotation:w.rotation,textAlign:N||w.textAlign,borderRadius:H&&(F||w.borderRadius),datasetIndex:M.index}},this)}},title:{color:(Q)=>Q.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:(Q)=>!Q.startsWith("on"),labels:{_scriptable:(Q)=>!["generateLabels","filter","sort"].includes(Q)}}};class zK extends v2{constructor(Q){super();this.chart=Q.chart,this.options=Q.options,this.ctx=Q.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(Q,J){let X=this.options;if(this.left=0,this.top=0,!X.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=Q,this.height=this.bottom=J;let q=j1(X.text)?X.text.length:1;this._padding=I5(X.padding);let N=q*X5(X.font).lineHeight+this._padding.height;if(this.isHorizontal())this.height=N;else this.width=N}isHorizontal(){let Q=this.options.position;return Q==="top"||Q==="bottom"}_drawArgs(Q){let{top:J,left:X,bottom:q,right:N,options:K}=this,H=K.align,F=0,M,w,R;if(this.isHorizontal())w=C5(H,X,N),R=J+Q,M=N-X;else{if(K.position==="left")w=X+Q,R=C5(H,q,J),F=s1*-0.5;else w=N-Q,R=C5(H,J,q),F=s1*0.5;M=q-J}return{titleX:w,titleY:R,maxWidth:M,rotation:F}}draw(){let Q=this.ctx,J=this.options;if(!J.display)return;let X=X5(J.font),N=X.lineHeight/2+this._padding.top,{titleX:K,titleY:H,maxWidth:F,rotation:M}=this._drawArgs(N);y8(Q,J.text,0,0,X,{color:J.color,maxWidth:F,rotation:M,textAlign:x3(J.align),textBaseline:"middle",translation:[K,H]})}}function PS(Q,J){let X=new zK({ctx:Q.ctx,options:J,chart:Q});n6.configure(Q,X,J),n6.addBox(Q,X),Q.titleBlock=X}var n_={id:"title",_element:zK,start(Q,J,X){PS(Q,X)},stop(Q){let J=Q.titleBlock;n6.removeBox(Q,J),delete Q.titleBlock},beforeUpdate(Q,J,X){let q=Q.titleBlock;n6.configure(Q,q,X),q.options=X},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2000},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};var EQ={average(Q){if(!Q.length)return!1;let J,X,q=new Set,N=0,K=0;for(J=0,X=Q.length;J<X;++J){let F=Q[J].element;if(F&&F.hasValue()){let M=F.tooltipPosition();q.add(M.x),N+=M.y,++K}}if(K===0||q.size===0)return!1;return{x:[...q].reduce((F,M)=>F+M)/q.size,y:N/K}},nearest(Q,J){if(!Q.length)return!1;let{x:X,y:q}=J,N=Number.POSITIVE_INFINITY,K,H,F;for(K=0,H=Q.length;K<H;++K){let M=Q[K].element;if(M&&M.hasValue()){let w=M.getCenterPoint(),R=f3(J,w);if(R<N)N=R,F=M}}if(F){let M=F.tooltipPosition();X=M.x,q=M.y}return{x:X,y:q}}};function l4(Q,J){if(J)if(j1(J))Array.prototype.push.apply(Q,J);else Q.push(J);return Q}function D2(Q){if((typeof Q==="string"||Q instanceof String)&&Q.indexOf(`
256
256
  `)>-1)return Q.split(`
257
- `);return Q}function TS(Q,J){let{element:X,datasetIndex:q,index:N}=J,K=Q.getDatasetMeta(q).controller,{label:H,value:F}=K.getLabelAndValue(N);return{chart:Q,label:H,parsed:K.getParsed(N),raw:Q.data.datasets[q].data[N],formattedValue:F,dataset:K.getDataset(),dataIndex:N,datasetIndex:q,element:X}}function N_(Q,J){let X=Q.chart.ctx,{body:q,footer:N,title:K}=Q,{boxWidth:H,boxHeight:F}=J,M=X5(J.bodyFont),w=X5(J.titleFont),R=X5(J.footerFont),_=K.length,P=N.length,I=q.length,A=I5(J.padding),V=A.height,O=0,D=q.reduce((s,a)=>s+a.before.length+a.lines.length+a.after.length,0);if(D+=Q.beforeBody.length+Q.afterBody.length,_)V+=_*w.lineHeight+(_-1)*J.titleSpacing+J.titleMarginBottom;if(D){let s=J.displayColors?Math.max(F,M.lineHeight):M.lineHeight;V+=I*s+(D-I)*M.lineHeight+(D-1)*J.bodySpacing}if(P)V+=J.footerMarginTop+P*R.lineHeight+(P-1)*J.footerSpacing;let h=0,p=function(s){O=Math.max(O,X.measureText(s).width+h)};return X.save(),X.font=w.string,W1(Q.title,p),X.font=M.string,W1(Q.beforeBody.concat(Q.afterBody),p),h=J.displayColors?H+2+J.boxPadding:0,W1(q,(s)=>{W1(s.before,p),W1(s.lines,p),W1(s.after,p)}),h=0,X.font=R.string,W1(Q.footer,p),X.restore(),O+=A.width,{width:O,height:V}}function CS(Q,J){let{y:X,height:q}=J;if(X<q/2)return"top";else if(X>Q.height-q/2)return"bottom";return"center"}function IS(Q,J,X,q){let{x:N,width:K}=q,H=X.caretSize+X.caretPadding;if(Q==="left"&&N+K+H>J.width)return!0;if(Q==="right"&&N-K-H<0)return!0}function OS(Q,J,X,q){let{x:N,width:K}=X,{width:H,chartArea:{left:F,right:M}}=Q,w="center";if(q==="center")w=N<=(F+M)/2?"left":"right";else if(N<=K/2)w="left";else if(N>=H-K/2)w="right";if(IS(w,Q,J,X))w="center";return w}function U_(Q,J,X){let q=X.yAlign||J.yAlign||CS(Q,X);return{xAlign:X.xAlign||J.xAlign||OS(Q,J,X,q),yAlign:q}}function VS(Q,J){let{x:X,width:q}=Q;if(J==="right")X-=q;else if(J==="center")X-=q/2;return X}function AS(Q,J,X){let{y:q,height:N}=Q;if(J==="top")q+=X;else if(J==="bottom")q-=N+X;else q-=N/2;return q}function K_(Q,J,X,q){let{caretSize:N,caretPadding:K,cornerRadius:H}=Q,{xAlign:F,yAlign:M}=X,w=N+K,{topLeft:R,topRight:_,bottomLeft:P,bottomRight:I}=g8(H),A=VS(J,F),V=AS(J,M,w);if(M==="center"){if(F==="left")A+=w;else if(F==="right")A-=w}else if(F==="left")A-=Math.max(R,P)+N;else if(F==="right")A+=Math.max(_,I)+N;return{x:J6(A,0,q.width-J.width),y:J6(V,0,q.height-J.height)}}function i3(Q,J,X){let q=I5(X.padding);return J==="center"?Q.x+Q.width/2:J==="right"?Q.x+Q.width-q.right:Q.x+q.left}function B_(Q){return l4([],D2(Q))}function ES(Q,J,X){return S2(Q,{tooltip:J,tooltipItems:X,type:"tooltip"})}function H_(Q,J){let X=J&&J.dataset&&J.dataset.tooltip&&J.dataset.tooltip.callbacks;return X?Q.override(X):Q}var s_={beforeTitle:c4,title(Q){if(Q.length>0){let J=Q[0],X=J.chart.data.labels,q=X?X.length:0;if(this&&this.options&&this.options.mode==="dataset")return J.dataset.label||"";else if(J.label)return J.label;else if(q>0&&J.dataIndex<q)return X[J.dataIndex]}return""},afterTitle:c4,beforeBody:c4,beforeLabel:c4,label(Q){if(this&&this.options&&this.options.mode==="dataset")return Q.label+": "+Q.formattedValue||Q.formattedValue;let J=Q.dataset.label||"";if(J)J+=": ";let X=Q.formattedValue;if(!J1(X))J+=X;return J},labelColor(Q){let X=Q.chart.getDatasetMeta(Q.datasetIndex).controller.getStyle(Q.dataIndex);return{borderColor:X.borderColor,backgroundColor:X.backgroundColor,borderWidth:X.borderWidth,borderDash:X.borderDash,borderDashOffset:X.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(Q){let X=Q.chart.getDatasetMeta(Q.datasetIndex).controller.getStyle(Q.dataIndex);return{pointStyle:X.pointStyle,rotation:X.rotation}},afterLabel:c4,afterBody:c4,beforeFooter:c4,footer:c4,afterFooter:c4};function X6(Q,J,X,q){let N=Q[J].call(X,q);if(typeof N>"u")return s_[J].call(X,q);return N}class YK extends v2{static positioners=EQ;constructor(Q){super();this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=Q.chart,this.options=Q.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(Q){this.options=Q,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let Q=this._cachedAnimations;if(Q)return Q;let J=this.chart,X=this.options.setContext(this.getContext()),q=X.enabled&&J.options.animation&&X.animations,N=new KK(this.chart,q);if(q._cacheable)this._cachedAnimations=Object.freeze(N);return N}getContext(){return this.$context||(this.$context=ES(this.chart.getContext(),this,this._tooltipItems))}getTitle(Q,J){let{callbacks:X}=J,q=X6(X,"beforeTitle",this,Q),N=X6(X,"title",this,Q),K=X6(X,"afterTitle",this,Q),H=[];return H=l4(H,D2(q)),H=l4(H,D2(N)),H=l4(H,D2(K)),H}getBeforeBody(Q,J){return B_(X6(J.callbacks,"beforeBody",this,Q))}getBody(Q,J){let{callbacks:X}=J,q=[];return W1(Q,(N)=>{let K={before:[],lines:[],after:[]},H=H_(X,N);l4(K.before,D2(X6(H,"beforeLabel",this,N))),l4(K.lines,X6(H,"label",this,N)),l4(K.after,D2(X6(H,"afterLabel",this,N))),q.push(K)}),q}getAfterBody(Q,J){return B_(X6(J.callbacks,"afterBody",this,Q))}getFooter(Q,J){let{callbacks:X}=J,q=X6(X,"beforeFooter",this,Q),N=X6(X,"footer",this,Q),K=X6(X,"afterFooter",this,Q),H=[];return H=l4(H,D2(q)),H=l4(H,D2(N)),H=l4(H,D2(K)),H}_createItems(Q){let J=this._active,X=this.chart.data,q=[],N=[],K=[],H=[],F,M;for(F=0,M=J.length;F<M;++F)H.push(TS(this.chart,J[F]));if(Q.filter)H=H.filter((w,R,_)=>Q.filter(w,R,_,X));if(Q.itemSort)H=H.sort((w,R)=>Q.itemSort(w,R,X));return W1(H,(w)=>{let R=H_(Q.callbacks,w);q.push(X6(R,"labelColor",this,w)),N.push(X6(R,"labelPointStyle",this,w)),K.push(X6(R,"labelTextColor",this,w))}),this.labelColors=q,this.labelPointStyles=N,this.labelTextColors=K,this.dataPoints=H,H}update(Q,J){let X=this.options.setContext(this.getContext()),q=this._active,N,K=[];if(!q.length){if(this.opacity!==0)N={opacity:0}}else{let H=EQ[X.position].call(this,q,this._eventPosition);K=this._createItems(X),this.title=this.getTitle(K,X),this.beforeBody=this.getBeforeBody(K,X),this.body=this.getBody(K,X),this.afterBody=this.getAfterBody(K,X),this.footer=this.getFooter(K,X);let F=this._size=N_(this,X),M=Object.assign({},H,F),w=U_(this.chart,X,M),R=K_(X,M,w,this.chart);this.xAlign=w.xAlign,this.yAlign=w.yAlign,N={opacity:1,x:R.x,y:R.y,width:F.width,height:F.height,caretX:H.x,caretY:H.y}}if(this._tooltipItems=K,this.$context=void 0,N)this._resolveAnimations().update(this,N);if(Q&&X.external)X.external.call(this,{chart:this.chart,tooltip:this,replay:J})}drawCaret(Q,J,X,q){let N=this.getCaretPosition(Q,X,q);J.lineTo(N.x1,N.y1),J.lineTo(N.x2,N.y2),J.lineTo(N.x3,N.y3)}getCaretPosition(Q,J,X){let{xAlign:q,yAlign:N}=this,{caretSize:K,cornerRadius:H}=X,{topLeft:F,topRight:M,bottomLeft:w,bottomRight:R}=g8(H),{x:_,y:P}=Q,{width:I,height:A}=J,V,O,D,h,p,s;if(N==="center"){if(p=P+A/2,q==="left")V=_,O=V-K,h=p+K,s=p-K;else V=_+I,O=V+K,h=p-K,s=p+K;D=V}else{if(q==="left")O=_+Math.max(F,w)+K;else if(q==="right")O=_+I-Math.max(M,R)-K;else O=this.caretX;if(N==="top")h=P,p=h-K,V=O-K,D=O+K;else h=P+A,p=h+K,V=O+K,D=O-K;s=h}return{x1:V,x2:O,x3:D,y1:h,y2:p,y3:s}}drawTitle(Q,J,X){let q=this.title,N=q.length,K,H,F;if(N){let M=m9(X.rtl,this.x,this.width);Q.x=i3(this,X.titleAlign,X),J.textAlign=M.textAlign(X.titleAlign),J.textBaseline="middle",K=X5(X.titleFont),H=X.titleSpacing,J.fillStyle=X.titleColor,J.font=K.string;for(F=0;F<N;++F)if(J.fillText(q[F],M.x(Q.x),Q.y+K.lineHeight/2),Q.y+=K.lineHeight+H,F+1===N)Q.y+=X.titleMarginBottom-H}}_drawColorBox(Q,J,X,q,N){let K=this.labelColors[X],H=this.labelPointStyles[X],{boxHeight:F,boxWidth:M}=N,w=X5(N.bodyFont),R=i3(this,"left",N),_=q.x(R),P=F<w.lineHeight?(w.lineHeight-F)/2:0,I=J.y+P;if(N.usePointStyle){let A={radius:Math.min(M,F)/2,pointStyle:H.pointStyle,rotation:H.rotation,borderWidth:1},V=q.leftForLtr(_,M)+M/2,O=I+F/2;Q.strokeStyle=N.multiKeyBackground,Q.fillStyle=N.multiKeyBackground,p3(Q,A,V,O),Q.strokeStyle=K.borderColor,Q.fillStyle=K.backgroundColor,p3(Q,A,V,O)}else{Q.lineWidth=$1(K.borderWidth)?Math.max(...Object.values(K.borderWidth)):K.borderWidth||1,Q.strokeStyle=K.borderColor,Q.setLineDash(K.borderDash||[]),Q.lineDashOffset=K.borderDashOffset||0;let A=q.leftForLtr(_,M),V=q.leftForLtr(q.xPlus(_,1),M-2),O=g8(K.borderRadius);if(Object.values(O).some((D)=>D!==0))Q.beginPath(),Q.fillStyle=N.multiKeyBackground,_$(Q,{x:A,y:I,w:M,h:F,radius:O}),Q.fill(),Q.stroke(),Q.fillStyle=K.backgroundColor,Q.beginPath(),_$(Q,{x:V,y:I+1,w:M-2,h:F-2,radius:O}),Q.fill();else Q.fillStyle=N.multiKeyBackground,Q.fillRect(A,I,M,F),Q.strokeRect(A,I,M,F),Q.fillStyle=K.backgroundColor,Q.fillRect(V,I+1,M-2,F-2)}Q.fillStyle=this.labelTextColors[X]}drawBody(Q,J,X){let{body:q}=this,{bodySpacing:N,bodyAlign:K,displayColors:H,boxHeight:F,boxWidth:M,boxPadding:w}=X,R=X5(X.bodyFont),_=R.lineHeight,P=0,I=m9(X.rtl,this.x,this.width),A=function(t){J.fillText(t,I.x(Q.x+P),Q.y+_/2),Q.y+=_+N},V=I.textAlign(K),O,D,h,p,s,a,J0;J.textAlign=K,J.textBaseline="middle",J.font=R.string,Q.x=i3(this,V,X),J.fillStyle=X.bodyColor,W1(this.beforeBody,A),P=H&&V!=="right"?K==="center"?M/2+w:M+2+w:0;for(p=0,a=q.length;p<a;++p){if(O=q[p],D=this.labelTextColors[p],J.fillStyle=D,W1(O.before,A),h=O.lines,H&&h.length)this._drawColorBox(J,Q,p,I,X),_=Math.max(R.lineHeight,F);for(s=0,J0=h.length;s<J0;++s)A(h[s]),_=R.lineHeight;W1(O.after,A)}P=0,_=R.lineHeight,W1(this.afterBody,A),Q.y-=N}drawFooter(Q,J,X){let q=this.footer,N=q.length,K,H;if(N){let F=m9(X.rtl,this.x,this.width);Q.x=i3(this,X.footerAlign,X),Q.y+=X.footerMarginTop,J.textAlign=F.textAlign(X.footerAlign),J.textBaseline="middle",K=X5(X.footerFont),J.fillStyle=X.footerColor,J.font=K.string;for(H=0;H<N;++H)J.fillText(q[H],F.x(Q.x),Q.y+K.lineHeight/2),Q.y+=K.lineHeight+X.footerSpacing}}drawBackground(Q,J,X,q){let{xAlign:N,yAlign:K}=this,{x:H,y:F}=Q,{width:M,height:w}=X,{topLeft:R,topRight:_,bottomLeft:P,bottomRight:I}=g8(q.cornerRadius);if(J.fillStyle=q.backgroundColor,J.strokeStyle=q.borderColor,J.lineWidth=q.borderWidth,J.beginPath(),J.moveTo(H+R,F),K==="top")this.drawCaret(Q,J,X,q);if(J.lineTo(H+M-_,F),J.quadraticCurveTo(H+M,F,H+M,F+_),K==="center"&&N==="right")this.drawCaret(Q,J,X,q);if(J.lineTo(H+M,F+w-I),J.quadraticCurveTo(H+M,F+w,H+M-I,F+w),K==="bottom")this.drawCaret(Q,J,X,q);if(J.lineTo(H+P,F+w),J.quadraticCurveTo(H,F+w,H,F+w-P),K==="center"&&N==="left")this.drawCaret(Q,J,X,q);if(J.lineTo(H,F+R),J.quadraticCurveTo(H,F,H+R,F),J.closePath(),J.fill(),q.borderWidth>0)J.stroke()}_updateAnimationTarget(Q){let J=this.chart,X=this.$animations,q=X&&X.x,N=X&&X.y;if(q||N){let K=EQ[Q.position].call(this,this._active,this._eventPosition);if(!K)return;let H=this._size=N_(this,Q),F=Object.assign({},K,this._size),M=U_(J,Q,F),w=K_(Q,F,M,J);if(q._to!==w.x||N._to!==w.y)this.xAlign=M.xAlign,this.yAlign=M.yAlign,this.width=H.width,this.height=H.height,this.caretX=K.x,this.caretY=K.y,this._resolveAnimations().update(this,w)}}_willRender(){return!!this.opacity}draw(Q){let J=this.options.setContext(this.getContext()),X=this.opacity;if(!X)return;this._updateAnimationTarget(J);let q={width:this.width,height:this.height},N={x:this.x,y:this.y};X=Math.abs(X)<0.001?0:X;let K=I5(J.padding),H=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;if(J.enabled&&H)Q.save(),Q.globalAlpha=X,this.drawBackground(N,Q,q,J),xU(Q,J.textDirection),N.y+=K.top,this.drawTitle(N,Q,J),this.drawBody(N,Q,J),this.drawFooter(N,Q,J),mU(Q,J.textDirection),Q.restore()}getActiveElements(){return this._active||[]}setActiveElements(Q,J){let X=this._active,q=Q.map(({datasetIndex:H,index:F})=>{let M=this.chart.getDatasetMeta(H);if(!M)throw Error("Cannot find a dataset at index "+H);return{datasetIndex:H,element:M.data[F],index:F}}),N=!wQ(X,q),K=this._positionChanged(q,J);if(N||K)this._active=q,this._eventPosition=J,this._ignoreReplayEvents=!0,this.update(!0)}handleEvent(Q,J,X=!0){if(J&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let q=this.options,N=this._active||[],K=this._getActiveElements(Q,N,J,X),H=this._positionChanged(K,Q),F=J||!wQ(K,N)||H;if(F){if(this._active=K,q.enabled||q.external)this._eventPosition={x:Q.x,y:Q.y},this.update(!0,J)}return F}_getActiveElements(Q,J,X,q){let N=this.options;if(Q.type==="mouseout")return[];if(!q)return J.filter((H)=>this.chart.data.datasets[H.datasetIndex]&&this.chart.getDatasetMeta(H.datasetIndex).controller.getParsed(H.index)!==void 0);let K=this.chart.getElementsAtEventForMode(Q,N.mode,N,X);if(N.reverse)K.reverse();return K}_positionChanged(Q,J){let{caretX:X,caretY:q,options:N}=this,K=EQ[N.position].call(this,Q,J);return K!==!1&&(X!==K.x||q!==K.y)}}var o_={id:"tooltip",_element:YK,positioners:EQ,afterInit(Q,J,X){if(X)Q.tooltip=new YK({chart:Q,options:X})},beforeUpdate(Q,J,X){if(Q.tooltip)Q.tooltip.initialize(X)},reset(Q,J,X){if(Q.tooltip)Q.tooltip.initialize(X)},afterDraw(Q){let J=Q.tooltip;if(J&&J._willRender()){let X={tooltip:J};if(Q.notifyPlugins("beforeTooltipDraw",{...X,cancelable:!0})===!1)return;J.draw(Q.ctx),Q.notifyPlugins("afterTooltipDraw",X)}},afterEvent(Q,J){if(Q.tooltip){let X=J.replay;if(Q.tooltip.handleEvent(J.event,X,J.inChartArea))J.changed=!0}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(Q,J)=>J.bodyFont.size,boxWidth:(Q,J)=>J.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:s_},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:(Q)=>Q!=="filter"&&Q!=="itemSort"&&Q!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};var SS=(Q,J,X,q)=>{if(typeof J==="string")X=Q.push(J)-1,q.unshift({index:X,label:J});else if(isNaN(J))X=null;return X};function jS(Q,J,X,q){let N=Q.indexOf(J);if(N===-1)return SS(Q,J,X,q);let K=Q.lastIndexOf(J);return N!==K?X:N}var DS=(Q,J)=>Q===null?null:J6(Math.round(Q),0,J);function F_(Q){let J=this.getLabels();if(Q>=0&&Q<J.length)return J[Q];return Q}class _K extends c9{static id="category";static defaults={ticks:{callback:F_}};constructor(Q){super(Q);this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(Q){let J=this._addedLabels;if(J.length){let X=this.getLabels();for(let{index:q,label:N}of J)if(X[q]===N)X.splice(q,1);this._addedLabels=[]}super.init(Q)}parse(Q,J){if(J1(Q))return null;let X=this.getLabels();return J=isFinite(J)&&X[J]===Q?J:jS(X,Q,n0(J,Q),this._addedLabels),DS(J,X.length-1)}determineDataLimits(){let{minDefined:Q,maxDefined:J}=this.getUserBounds(),{min:X,max:q}=this.getMinMax(!0);if(this.options.bounds==="ticks"){if(!Q)X=0;if(!J)q=this.getLabels().length-1}this.min=X,this.max=q}buildTicks(){let Q=this.min,J=this.max,X=this.options.offset,q=[],N=this.getLabels();N=Q===0&&J===N.length-1?N:N.slice(Q,J+1),this._valueRange=Math.max(N.length-(X?0:1),1),this._startValue=this.min-(X?0.5:0);for(let K=Q;K<=J;K++)q.push({value:K});return q}getLabelForValue(Q){return F_.call(this,Q)}configure(){if(super.configure(),!this.isHorizontal())this._reversePixels=!this._reversePixels}getPixelForValue(Q){if(typeof Q!=="number")Q=this.parse(Q);return Q===null?NaN:this.getPixelForDecimal((Q-this._startValue)/this._valueRange)}getPixelForTick(Q){let J=this.ticks;if(Q<0||Q>J.length-1)return null;return this.getPixelForValue(J[Q].value)}getValueForPixel(Q){return Math.round(this._startValue+this.getDecimalForPixel(Q)*this._valueRange)}getBasePixel(){return this.bottom}}function vS(Q,J){let X=[],q=0.00000000000001,{bounds:N,step:K,min:H,max:F,precision:M,count:w,maxTicks:R,maxDigits:_,includeBounds:P}=Q,I=K||1,A=R-1,{min:V,max:O}=J,D=!J1(H),h=!J1(F),p=!J1(w),s=(O-V)/(_+1),a=PU((O-V)/A/I)*I,J0,t,i,Y0;if(a<0.00000000000001&&!D&&!h)return[{value:V},{value:O}];if(Y0=Math.ceil(O/a)-Math.floor(V/a),Y0>A)a=PU(Y0*a/A/I)*I;if(!J1(M))J0=Math.pow(10,M),a=Math.ceil(a*J0)/J0;if(N==="ticks")t=Math.floor(V/a)*a,i=Math.ceil(O/a)*a;else t=V,i=O;if(D&&h&&K&&eR((F-H)/K,a/1000))Y0=Math.round(Math.min((F-H)/a,R)),a=(F-H)/Y0,t=H,i=F;else if(p)t=D?H:t,i=h?F:i,Y0=w-1,a=(i-t)/Y0;else if(Y0=(i-t)/a,R$(Y0,Math.round(Y0),a/1000))Y0=Math.round(Y0);else Y0=Math.ceil(Y0);let d=Math.max(CU(a),CU(t));J0=Math.pow(10,J1(M)?d:M),t=Math.round(t*J0)/J0,i=Math.round(i*J0)/J0;let H0=0;if(D){if(P&&t!==H){if(X.push({value:H}),t<H)H0++;if(R$(Math.round((t+H0*a)*J0)/J0,H,M_(H,s,Q)))H0++}else if(t<H)H0++}for(;H0<Y0;++H0){let P0=Math.round((t+H0*a)*J0)/J0;if(h&&P0>F)break;X.push({value:P0})}if(h&&P&&i!==F)if(X.length&&R$(X[X.length-1].value,F,M_(F,s,Q)))X[X.length-1].value=F;else X.push({value:F});else if(!h||i===F)X.push({value:i});return X}function M_(Q,J,{horizontal:X,minRotation:q}){let N=A2(q),K=(X?Math.sin(N):Math.cos(N))||0.001,H=0.75*J*(""+Q).length;return Math.min(J/K,H)}class jQ extends c9{constructor(Q){super(Q);this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(Q,J){if(J1(Q))return null;if((typeof Q==="number"||Q instanceof Number)&&!isFinite(+Q))return null;return+Q}handleTickRangeOptions(){let{beginAtZero:Q}=this.options,{minDefined:J,maxDefined:X}=this.getUserBounds(),{min:q,max:N}=this,K=(F)=>q=J?q:F,H=(F)=>N=X?N:F;if(Q){let F=H4(q),M=H4(N);if(F<0&&M<0)H(0);else if(F>0&&M>0)K(0)}if(q===N){let F=N===0?1:Math.abs(N*0.05);if(H(N+F),!Q)K(q-F)}this.min=q,this.max=N}getTickLimit(){let Q=this.options.ticks,{maxTicksLimit:J,stepSize:X}=Q,q;if(X){if(q=Math.ceil(this.max/X)-Math.floor(this.min/X)+1,q>1000)console.warn(`scales.${this.id}.ticks.stepSize: ${X} would result generating up to ${q} ticks. Limiting to 1000.`),q=1000}else q=this.computeTickLimit(),J=J||11;if(J)q=Math.min(J,q);return q}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let Q=this.options,J=Q.ticks,X=this.getTickLimit();X=Math.max(2,X);let q={maxTicks:X,bounds:Q.bounds,min:Q.min,max:Q.max,precision:J.precision,step:J.stepSize,count:J.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:J.minRotation||0,includeBounds:J.includeBounds!==!1},N=this._range||this,K=vS(q,N);if(Q.bounds==="ticks")TU(K,this,"value");if(Q.reverse)K.reverse(),this.start=this.max,this.end=this.min;else this.start=this.min,this.end=this.max;return K}configure(){let Q=this.ticks,J=this.min,X=this.max;if(super.configure(),this.options.offset&&Q.length){let q=(X-J)/Math.max(Q.length-1,1)/2;J-=q,X+=q}this._startValue=J,this._endValue=X,this._valueRange=X-J}getLabelForValue(Q){return m3(Q,this.chart.options.locale,this.options.ticks.format)}}class LK extends jQ{static id="linear";static defaults={ticks:{callback:RQ.formatters.numeric}};determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!0);this.min=x1(Q)?Q:0,this.max=x1(J)?J:1,this.handleTickRangeOptions()}computeTickLimit(){let Q=this.isHorizontal(),J=Q?this.width:this.height,X=A2(this.options.ticks.minRotation),q=(Q?Math.sin(X):Math.cos(X))||0.001,N=this._resolveTickFontOptions(0);return Math.ceil(J/Math.min(40,N.lineHeight/q))}getPixelForValue(Q){return Q===null?NaN:this.getPixelForDecimal((Q-this._startValue)/this._valueRange)}getValueForPixel(Q){return this._startValue+this.getDecimalForPixel(Q)*this._valueRange}}var DQ=(Q)=>Math.floor(V2(Q)),p9=(Q,J)=>Math.pow(10,DQ(Q)+J);function W_(Q){return Q/Math.pow(10,DQ(Q))===1}function w_(Q,J,X){let q=Math.pow(10,X),N=Math.floor(Q/q);return Math.ceil(J/q)-N}function bS(Q,J){let X=J-Q,q=DQ(X);while(w_(Q,J,q)>10)q++;while(w_(Q,J,q)<10)q--;return Math.min(q,DQ(Q))}function kS(Q,{min:J,max:X}){J=G6(Q.min,J);let q=[],N=DQ(J),K=bS(J,X),H=K<0?Math.pow(10,Math.abs(K)):1,F=Math.pow(10,K),M=N>K?Math.pow(10,N):0,w=Math.round((J-M)*H)/H,R=Math.floor((J-M)/F/10)*F*10,_=Math.floor((w-R)/Math.pow(10,K)),P=G6(Q.min,Math.round((M+R+_*Math.pow(10,K))*H)/H);while(P<X){if(q.push({value:P,major:W_(P),significand:_}),_>=10)_=_<15?15:20;else _++;if(_>=20)K++,_=2,H=K>=0?1:H;P=Math.round((M+R+_*Math.pow(10,K))*H)/H}let I=G6(Q.max,P);return q.push({value:I,major:W_(I),significand:_}),q}class fS extends c9{static id="logarithmic";static defaults={ticks:{callback:RQ.formatters.logarithmic,major:{enabled:!0}}};constructor(Q){super(Q);this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(Q,J){let X=jQ.prototype.parse.apply(this,[Q,J]);if(X===0){this._zero=!0;return}return x1(X)&&X>0?X:null}determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!0);if(this.min=x1(Q)?Math.max(0,Q):null,this.max=x1(J)?Math.max(0,J):null,this.options.beginAtZero)this._zero=!0;if(this._zero&&this.min!==this._suggestedMin&&!x1(this._userMin))this.min=Q===p9(this.min,0)?p9(this.min,-1):p9(this.min,0);this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:Q,maxDefined:J}=this.getUserBounds(),X=this.min,q=this.max,N=(H)=>X=Q?X:H,K=(H)=>q=J?q:H;if(X===q)if(X<=0)N(1),K(10);else N(p9(X,-1)),K(p9(q,1));if(X<=0)N(p9(q,-1));if(q<=0)K(p9(X,1));this.min=X,this.max=q}buildTicks(){let Q=this.options,J={min:this._userMin,max:this._userMax},X=kS(J,this);if(Q.bounds==="ticks")TU(X,this,"value");if(Q.reverse)X.reverse(),this.start=this.max,this.end=this.min;else this.start=this.min,this.end=this.max;return X}getLabelForValue(Q){return Q===void 0?"0":m3(Q,this.chart.options.locale,this.options.ticks.format)}configure(){let Q=this.min;super.configure(),this._startValue=V2(Q),this._valueRange=V2(this.max)-V2(Q)}getPixelForValue(Q){if(Q===void 0||Q===0)Q=this.min;if(Q===null||isNaN(Q))return NaN;return this.getPixelForDecimal(Q===this.min?0:(V2(Q)-this._startValue)/this._valueRange)}getValueForPixel(Q){let J=this.getDecimalForPixel(Q);return Math.pow(10,this._startValue+J*this._valueRange)}}function NK(Q){let J=Q.ticks;if(J.display&&Q.display){let X=I5(J.backdropPadding);return n0(J.font&&J.font.size,m1.font.size)+X.height}return 0}function yS(Q,J,X){return X=j1(X)?X:[X],{w:Hz(Q,J.string,X),h:X.length*J.lineHeight}}function R_(Q,J,X,q,N){if(Q===q||Q===N)return{start:J-X/2,end:J+X/2};else if(Q<q||Q>N)return{start:J-X,end:J};return{start:J,end:J+X}}function gS(Q){let J={l:Q.left+Q._padding.left,r:Q.right-Q._padding.right,t:Q.top+Q._padding.top,b:Q.bottom-Q._padding.bottom},X=Object.assign({},J),q=[],N=[],K=Q._pointLabels.length,H=Q.options.pointLabels,F=H.centerPointLabels?s1/K:0;for(let M=0;M<K;M++){let w=H.setContext(Q.getPointLabelContext(M));N[M]=w.padding;let R=Q.getPointPosition(M,Q.drawingArea+N[M],F),_=X5(w.font),P=yS(Q.ctx,_,Q._pointLabels[M]);q[M]=P;let I=$6(Q.getIndexAngle(M)+F),A=Math.round(h3(I)),V=R_(A,R.x,P.w,0,180),O=R_(A,R.y,P.h,90,270);hS(X,J,I,V,O)}Q.setCenterPoint(J.l-X.l,X.r-J.r,J.t-X.t,X.b-J.b),Q._pointLabelItems=mS(Q,q,N)}function hS(Q,J,X,q,N){let K=Math.abs(Math.sin(X)),H=Math.abs(Math.cos(X)),F=0,M=0;if(q.start<J.l)F=(J.l-q.start)/K,Q.l=Math.min(Q.l,J.l-F);else if(q.end>J.r)F=(q.end-J.r)/K,Q.r=Math.max(Q.r,J.r+F);if(N.start<J.t)M=(J.t-N.start)/H,Q.t=Math.min(Q.t,J.t-M);else if(N.end>J.b)M=(N.end-J.b)/H,Q.b=Math.max(Q.b,J.b+M)}function uS(Q,J,X){let q=Q.drawingArea,{extra:N,additionalAngle:K,padding:H,size:F}=X,M=Q.getPointPosition(J,q+N+H,K),w=Math.round(h3($6(M.angle+Z6))),R=cS(M.y,F.h,w),_=dS(w),P=pS(M.x,F.w,_);return{visible:!0,x:M.x,y:R,textAlign:_,left:P,top:R,right:P+F.w,bottom:R+F.h}}function xS(Q,J){if(!J)return!0;let{left:X,top:q,right:N,bottom:K}=Q;return!(p4({x:X,y:q},J)||p4({x:X,y:K},J)||p4({x:N,y:q},J)||p4({x:N,y:K},J))}function mS(Q,J,X){let q=[],N=Q._pointLabels.length,K=Q.options,{centerPointLabels:H,display:F}=K.pointLabels,M={extra:NK(K)/2,additionalAngle:H?s1/N:0},w;for(let R=0;R<N;R++){M.padding=X[R],M.size=J[R];let _=uS(Q,R,M);if(q.push(_),F==="auto"){if(_.visible=xS(_,w),_.visible)w=_}}return q}function dS(Q){if(Q===0||Q===180)return"center";else if(Q<180)return"left";return"right"}function pS(Q,J,X){if(X==="right")Q-=J;else if(X==="center")Q-=J/2;return Q}function cS(Q,J,X){if(X===90||X===270)Q-=J/2;else if(X>270||X<90)Q-=J;return Q}function lS(Q,J,X){let{left:q,top:N,right:K,bottom:H}=X,{backdropColor:F}=J;if(!J1(F)){let M=g8(J.borderRadius),w=I5(J.backdropPadding);Q.fillStyle=F;let R=q-w.left,_=N-w.top,P=K-q+w.width,I=H-N+w.height;if(Object.values(M).some((A)=>A!==0))Q.beginPath(),_$(Q,{x:R,y:_,w:P,h:I,radius:M}),Q.fill();else Q.fillRect(R,_,P,I)}}function rS(Q,J){let{ctx:X,options:{pointLabels:q}}=Q;for(let N=J-1;N>=0;N--){let K=Q._pointLabelItems[N];if(!K.visible)continue;let H=q.setContext(Q.getPointLabelContext(N));lS(X,H,K);let F=X5(H.font),{x:M,y:w,textAlign:R}=K;y8(X,Q._pointLabels[N],M,w+F.lineHeight/2,F,{color:H.color,textAlign:R,textBaseline:"middle"})}}function a_(Q,J,X,q){let{ctx:N}=Q;if(X)N.arc(Q.xCenter,Q.yCenter,J,0,Q6);else{let K=Q.getPointPosition(0,J);N.moveTo(K.x,K.y);for(let H=1;H<q;H++)K=Q.getPointPosition(H,J),N.lineTo(K.x,K.y)}}function nS(Q,J,X,q,N){let K=Q.ctx,H=J.circular,{color:F,lineWidth:M}=J;if(!H&&!q||!F||!M||X<0)return;K.save(),K.strokeStyle=F,K.lineWidth=M,K.setLineDash(N.dash||[]),K.lineDashOffset=N.dashOffset,K.beginPath(),a_(Q,X,H,q),K.closePath(),K.stroke(),K.restore()}function sS(Q,J,X){return S2(Q,{label:X,index:J,type:"pointLabel"})}class oS extends jQ{static id="radialLinear";static defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:RQ.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(Q){return Q},padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(Q){super(Q);this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){let Q=this._padding=I5(NK(this.options)/2),J=this.width=this.maxWidth-Q.width,X=this.height=this.maxHeight-Q.height;this.xCenter=Math.floor(this.left+J/2+Q.left),this.yCenter=Math.floor(this.top+X/2+Q.top),this.drawingArea=Math.floor(Math.min(J,X)/2)}determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!1);this.min=x1(Q)&&!isNaN(Q)?Q:0,this.max=x1(J)&&!isNaN(J)?J:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/NK(this.options))}generateTickLabels(Q){jQ.prototype.generateTickLabels.call(this,Q),this._pointLabels=this.getLabels().map((J,X)=>{let q=V1(this.options.pointLabels.callback,[J,X],this);return q||q===0?q:""}).filter((J,X)=>this.chart.getDataVisibility(X))}fit(){let Q=this.options;if(Q.display&&Q.pointLabels.display)gS(this);else this.setCenterPoint(0,0,0,0)}setCenterPoint(Q,J,X,q){this.xCenter+=Math.floor((Q-J)/2),this.yCenter+=Math.floor((X-q)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(Q,J,X,q))}getIndexAngle(Q){let J=Q6/(this._pointLabels.length||1),X=this.options.startAngle||0;return $6(Q*J+A2(X))}getDistanceFromCenterForValue(Q){if(J1(Q))return NaN;let J=this.drawingArea/(this.max-this.min);if(this.options.reverse)return(this.max-Q)*J;return(Q-this.min)*J}getValueForDistanceFromCenter(Q){if(J1(Q))return NaN;let J=Q/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-J:this.min+J}getPointLabelContext(Q){let J=this._pointLabels||[];if(Q>=0&&Q<J.length){let X=J[Q];return sS(this.getContext(),Q,X)}}getPointPosition(Q,J,X=0){let q=this.getIndexAngle(Q)-Z6+X;return{x:Math.cos(q)*J+this.xCenter,y:Math.sin(q)*J+this.yCenter,angle:q}}getPointPositionForValue(Q,J){return this.getPointPosition(Q,this.getDistanceFromCenterForValue(J))}getBasePosition(Q){return this.getPointPositionForValue(Q||0,this.getBaseValue())}getPointLabelPosition(Q){let{left:J,top:X,right:q,bottom:N}=this._pointLabelItems[Q];return{left:J,top:X,right:q,bottom:N}}drawBackground(){let{backgroundColor:Q,grid:{circular:J}}=this.options;if(Q){let X=this.ctx;X.save(),X.beginPath(),a_(this,this.getDistanceFromCenterForValue(this._endValue),J,this._pointLabels.length),X.closePath(),X.fillStyle=Q,X.fill(),X.restore()}}drawGrid(){let Q=this.ctx,J=this.options,{angleLines:X,grid:q,border:N}=J,K=this._pointLabels.length,H,F,M;if(J.pointLabels.display)rS(this,K);if(q.display)this.ticks.forEach((w,R)=>{if(R!==0||R===0&&this.min<0){F=this.getDistanceFromCenterForValue(w.value);let _=this.getContext(R),P=q.setContext(_),I=N.setContext(_);nS(this,P,F,K,I)}});if(X.display){Q.save();for(H=K-1;H>=0;H--){let w=X.setContext(this.getPointLabelContext(H)),{color:R,lineWidth:_}=w;if(!_||!R)continue;Q.lineWidth=_,Q.strokeStyle=R,Q.setLineDash(w.borderDash),Q.lineDashOffset=w.borderDashOffset,F=this.getDistanceFromCenterForValue(J.reverse?this.min:this.max),M=this.getPointPosition(H,F),Q.beginPath(),Q.moveTo(this.xCenter,this.yCenter),Q.lineTo(M.x,M.y),Q.stroke()}Q.restore()}}drawBorder(){}drawLabels(){let Q=this.ctx,J=this.options,X=J.ticks;if(!X.display)return;let q=this.getIndexAngle(0),N,K;Q.save(),Q.translate(this.xCenter,this.yCenter),Q.rotate(q),Q.textAlign="center",Q.textBaseline="middle",this.ticks.forEach((H,F)=>{if(F===0&&this.min>=0&&!J.reverse)return;let M=X.setContext(this.getContext(F)),w=X5(M.font);if(N=this.getDistanceFromCenterForValue(this.ticks[F].value),M.showLabelBackdrop){Q.font=w.string,K=Q.measureText(H.label).width,Q.fillStyle=M.backdropColor;let R=I5(M.backdropPadding);Q.fillRect(-K/2-R.left,-N-w.size/2-R.top,K+R.width,w.size+R.height)}y8(Q,H.label,0,-N,w,{color:M.color,strokeColor:M.textStrokeColor,strokeWidth:M.textStrokeWidth})}),Q.restore()}drawTitle(){}}var GX={millisecond:{common:!0,size:1,steps:1000},second:{common:!0,size:1000,steps:60},minute:{common:!0,size:60000,steps:60},hour:{common:!0,size:3600000,steps:24},day:{common:!0,size:86400000,steps:30},week:{common:!1,size:604800000,steps:4},month:{common:!0,size:2628000000,steps:12},quarter:{common:!1,size:7884000000,steps:4},year:{common:!0,size:31540000000}},q6=Object.keys(GX);function z_(Q,J){return Q-J}function __(Q,J){if(J1(J))return null;let X=Q._adapter,{parser:q,round:N,isoWeekday:K}=Q._parseOpts,H=J;if(typeof q==="function")H=q(H);if(!x1(H))H=typeof q==="string"?X.parse(H,q):X.parse(H);if(H===null)return null;if(N)H=N==="week"&&(z$(K)||K===!0)?X.startOf(H,"isoWeek",K):X.startOf(H,N);return+H}function L_(Q,J,X,q){let N=q6.length;for(let K=q6.indexOf(Q);K<N-1;++K){let H=GX[q6[K]],F=H.steps?H.steps:Number.MAX_SAFE_INTEGER;if(H.common&&Math.ceil((X-J)/(F*H.size))<=q)return q6[K]}return q6[N-1]}function aS(Q,J,X,q,N){for(let K=q6.length-1;K>=q6.indexOf(X);K--){let H=q6[K];if(GX[H].common&&Q._adapter.diff(N,q,H)>=J-1)return H}return q6[X?q6.indexOf(X):0]}function iS(Q){for(let J=q6.indexOf(Q)+1,X=q6.length;J<X;++J)if(GX[q6[J]].common)return q6[J]}function P_(Q,J,X){if(!X)Q[J]=!0;else if(X.length){let{lo:q,hi:N}=u3(X,J),K=X[q]>=J?X[q]:X[N];Q[K]=!0}}function tS(Q,J,X,q){let N=Q._adapter,K=+N.startOf(J[0].value,q),H=J[J.length-1].value,F,M;for(F=K;F<=H;F=+N.add(F,1,q))if(M=X[F],M>=0)J[M].major=!0;return J}function T_(Q,J,X){let q=[],N={},K=J.length,H,F;for(H=0;H<K;++H)F=J[H],N[F]=H,q.push({value:F,major:!1});return K===0||!X?q:tS(Q,q,N,X)}class UK extends c9{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(Q){super(Q);this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(Q,J={}){let X=Q.time||(Q.time={}),q=this._adapter=new bA._date(Q.adapters.date);q.init(J),W$(X.displayFormats,q.formats()),this._parseOpts={parser:X.parser,round:X.round,isoWeekday:X.isoWeekday},super.init(Q),this._normalized=J.normalized}parse(Q,J){if(Q===void 0)return null;return __(this,Q)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let Q=this.options,J=this._adapter,X=Q.time.unit||"day",{min:q,max:N,minDefined:K,maxDefined:H}=this.getUserBounds();function F(M){if(!K&&!isNaN(M.min))q=Math.min(q,M.min);if(!H&&!isNaN(M.max))N=Math.max(N,M.max)}if(!K||!H){if(F(this._getLabelBounds()),Q.bounds!=="ticks"||Q.ticks.source!=="labels")F(this.getMinMax(!1))}q=x1(q)&&!isNaN(q)?q:+J.startOf(Date.now(),X),N=x1(N)&&!isNaN(N)?N:+J.endOf(Date.now(),X)+1,this.min=Math.min(q,N-1),this.max=Math.max(q+1,N)}_getLabelBounds(){let Q=this.getLabelTimestamps(),J=Number.POSITIVE_INFINITY,X=Number.NEGATIVE_INFINITY;if(Q.length)J=Q[0],X=Q[Q.length-1];return{min:J,max:X}}buildTicks(){let Q=this.options,J=Q.time,X=Q.ticks,q=X.source==="labels"?this.getLabelTimestamps():this._generate();if(Q.bounds==="ticks"&&q.length)this.min=this._userMin||q[0],this.max=this._userMax||q[q.length-1];let N=this.min,K=this.max,H=Jz(q,N,K);if(this._unit=J.unit||(X.autoSkip?L_(J.minUnit,this.min,this.max,this._getLabelCapacity(N)):aS(this,H.length,J.minUnit,this.min,this.max)),this._majorUnit=!X.major.enabled||this._unit==="year"?void 0:iS(this._unit),this.initOffsets(q),Q.reverse)H.reverse();return T_(this,H,this._majorUnit)}afterAutoSkip(){if(this.options.offsetAfterAutoskip)this.initOffsets(this.ticks.map((Q)=>+Q.value))}initOffsets(Q=[]){let J=0,X=0,q,N;if(this.options.offset&&Q.length){if(q=this.getDecimalForValue(Q[0]),Q.length===1)J=1-q;else J=(this.getDecimalForValue(Q[1])-q)/2;if(N=this.getDecimalForValue(Q[Q.length-1]),Q.length===1)X=N;else X=(N-this.getDecimalForValue(Q[Q.length-2]))/2}let K=Q.length<3?0.5:0.25;J=J6(J,0,K),X=J6(X,0,K),this._offsets={start:J,end:X,factor:1/(J+1+X)}}_generate(){let Q=this._adapter,J=this.min,X=this.max,q=this.options,N=q.time,K=N.unit||L_(N.minUnit,J,X,this._getLabelCapacity(J)),H=n0(q.ticks.stepSize,1),F=K==="week"?N.isoWeekday:!1,M=z$(F)||F===!0,w={},R=J,_,P;if(M)R=+Q.startOf(R,"isoWeek",F);if(R=+Q.startOf(R,M?"day":K),Q.diff(X,J,K)>1e5*H)throw Error(J+" and "+X+" are too far apart with stepSize of "+H+" "+K);let I=q.ticks.source==="data"&&this.getDataTimestamps();for(_=R,P=0;_<X;_=+Q.add(_,H,K),P++)P_(w,_,I);if(_===X||q.bounds==="ticks"||P===1)P_(w,_,I);return Object.keys(w).sort(z_).map((A)=>+A)}getLabelForValue(Q){let J=this._adapter,X=this.options.time;if(X.tooltipFormat)return J.format(Q,X.tooltipFormat);return J.format(Q,X.displayFormats.datetime)}format(Q,J){let q=this.options.time.displayFormats,N=this._unit,K=J||q[N];return this._adapter.format(Q,K)}_tickFormatFunction(Q,J,X,q){let N=this.options,K=N.ticks.callback;if(K)return V1(K,[Q,J,X],this);let H=N.time.displayFormats,F=this._unit,M=this._majorUnit,w=F&&H[F],R=M&&H[M],_=X[J],P=M&&R&&_&&_.major;return this._adapter.format(Q,q||(P?R:w))}generateTickLabels(Q){let J,X,q;for(J=0,X=Q.length;J<X;++J)q=Q[J],q.label=this._tickFormatFunction(q.value,J,Q)}getDecimalForValue(Q){return Q===null?NaN:(Q-this.min)/(this.max-this.min)}getPixelForValue(Q){let J=this._offsets,X=this.getDecimalForValue(Q);return this.getPixelForDecimal((J.start+X)*J.factor)}getValueForPixel(Q){let J=this._offsets,X=this.getDecimalForPixel(Q)/J.factor-J.end;return this.min+X*(this.max-this.min)}_getLabelSize(Q){let J=this.options.ticks,X=this.ctx.measureText(Q).width,q=A2(this.isHorizontal()?J.maxRotation:J.minRotation),N=Math.cos(q),K=Math.sin(q),H=this._resolveTickFontOptions(0).size;return{w:X*N+H*K,h:X*K+H*N}}_getLabelCapacity(Q){let J=this.options.time,X=J.displayFormats,q=X[J.unit]||X.millisecond,N=this._tickFormatFunction(Q,0,T_(this,[Q],this._majorUnit),q),K=this._getLabelSize(N),H=Math.floor(this.isHorizontal()?this.width/K.w:this.height/K.h)-1;return H>0?H:1}getDataTimestamps(){let Q=this._cache.data||[],J,X;if(Q.length)return Q;let q=this.getMatchingVisibleMetas();if(this._normalized&&q.length)return this._cache.data=q[0].controller.getAllParsedValues(this);for(J=0,X=q.length;J<X;++J)Q=Q.concat(q[J].controller.getAllParsedValues(this));return this._cache.data=this.normalize(Q)}getLabelTimestamps(){let Q=this._cache.labels||[],J,X;if(Q.length)return Q;let q=this.getLabels();for(J=0,X=q.length;J<X;++J)Q.push(__(this,q[J]));return this._cache.labels=this._normalized?Q:this.normalize(Q)}normalize(Q){return VU(Q.sort(z_))}}function t3(Q,J,X){let q=0,N=Q.length-1,K,H,F,M;if(X){if(J>=Q[q].pos&&J<=Q[N].pos)({lo:q,hi:N}=v8(Q,"pos",J));({pos:K,time:F}=Q[q]),{pos:H,time:M}=Q[N]}else{if(J>=Q[q].time&&J<=Q[N].time)({lo:q,hi:N}=v8(Q,"time",J));({time:K,pos:F}=Q[q]),{time:H,pos:M}=Q[N]}let w=H-K;return w?F+(M-F)*(J-K)/w:F}class eS extends UK{static id="timeseries";static defaults=UK.defaults;constructor(Q){super(Q);this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let Q=this._getTimestampsForTable(),J=this._table=this.buildLookupTable(Q);this._minPos=t3(J,this.min),this._tableRange=t3(J,this.max)-this._minPos,super.initOffsets(Q)}buildLookupTable(Q){let{min:J,max:X}=this,q=[],N=[],K,H,F,M,w;for(K=0,H=Q.length;K<H;++K)if(M=Q[K],M>=J&&M<=X)q.push(M);if(q.length<2)return[{time:J,pos:0},{time:X,pos:1}];for(K=0,H=q.length;K<H;++K)if(w=q[K+1],F=q[K-1],M=q[K],Math.round((w+F)/2)!==M)N.push({time:M,pos:K/(H-1)});return N}_generate(){let Q=this.min,J=this.max,X=super.getDataTimestamps();if(!X.includes(Q)||!X.length)X.splice(0,0,Q);if(!X.includes(J)||X.length===1)X.push(J);return X.sort((q,N)=>q-N)}_getTimestampsForTable(){let Q=this._cache.all||[];if(Q.length)return Q;let J=this.getDataTimestamps(),X=this.getLabelTimestamps();if(J.length&&X.length)Q=this.normalize(J.concat(X));else Q=J.length?J:X;return Q=this._cache.all=Q,Q}getDecimalForValue(Q){return(t3(this._table,Q)-this._minPos)/this._tableRange}getValueForPixel(Q){let J=this._offsets,X=this.getDecimalForPixel(Q)/J.factor-J.end;return t3(this._table,X*this._tableRange+this._minPos,!0)}}l9.register(_K,LK,wK,L$,WK,n_,o_,r_,c_);var JT=n(JL(),1);var g2=n(T1(),1);var NX=n(T1(),1);var qX=(...Q)=>Q.filter((J,X,q)=>{return Boolean(J)&&J.trim()!==""&&q.indexOf(J)===X}).join(" ").trim();var GL=(Q)=>Q.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var XL=(Q)=>Q.replace(/^([A-Z])|[\s-_]+(\w)/g,(J,X,q)=>q?q.toUpperCase():X.toLowerCase());var CK=(Q)=>{let J=XL(Q);return J.charAt(0).toUpperCase()+J.slice(1)};var bQ=n(T1(),1);var YX={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var qL=(Q)=>{for(let J in Q)if(J.startsWith("aria-")||J==="role"||J==="title")return!0;return!1};var T$=n(T1(),1),qj=T$.createContext({});var YL=()=>T$.useContext(qj);var NL=bQ.forwardRef(({color:Q,size:J,strokeWidth:X,absoluteStrokeWidth:q,className:N="",children:K,iconNode:H,...F},M)=>{let{size:w=24,strokeWidth:R=2,absoluteStrokeWidth:_=!1,color:P="currentColor",className:I=""}=YL()??{},A=q??_?Number(X??R)*24/Number(J??w):X??R;return bQ.createElement("svg",{ref:M,...YX,width:J??w??YX.width,height:J??w??YX.height,stroke:Q??P,strokeWidth:A,className:qX("lucide",I,N),...!K&&!qL(F)&&{"aria-hidden":"true"},...F},[...H.map(([V,O])=>bQ.createElement(V,O)),...Array.isArray(K)?K:[K]])});var C0=(Q,J)=>{let X=NX.forwardRef(({className:q,...N},K)=>NX.createElement(NL,{ref:K,iconNode:J,className:qX(`lucide-${GL(CK(Q))}`,`lucide-${Q}`,q),...N}));return X.displayName=CK(Q),X};var Yj=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],x8=C0("circle-alert",Yj);var Nj=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],kQ=C0("activity",Nj);var Uj=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],fQ=C0("check",Uj);var Kj=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],yQ=C0("chevron-down",Kj);var Bj=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],gQ=C0("chevron-up",Bj);var Hj=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],hQ=C0("clock",Hj);var Fj=[["path",{d:"M13.744 17.736a6 6 0 1 1-7.48-7.48",key:"bq4yh3"}],["path",{d:"M15 6h1v4",key:"11y1tn"}],["path",{d:"m6.134 14.768.866-.5 2 3.464",key:"17snzx"}],["circle",{cx:"16",cy:"8",r:"6",key:"14bfc9"}]],n9=C0("coins",Fj);var Mj=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],uQ=C0("copy",Mj);var Wj=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],xQ=C0("cpu",Wj);var wj=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],mQ=C0("folder",wj);var Rj=[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]],dQ=C0("gauge",Rj);var zj=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],pQ=C0("hash",zj);var _j=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],cQ=C0("inbox",_j);var Lj=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],lQ=C0("layout-dashboard",Lj);var Pj=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],rQ=C0("menu",Pj);var Tj=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],nQ=C0("monitor",Tj);var Cj=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],sQ=C0("moon",Cj);var Ij=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]],oQ=C0("plug",Ij);var Oj=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],aQ=C0("refresh-cw",Oj);var Vj=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]],iQ=C0("smile",Vj);var Aj=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],tQ=C0("star",Aj);var Ej=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],eQ=C0("sun",Ej);var Sj=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],$J=C0("trending-up",Sj);var jj=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],ZJ=C0("wrench",jj);var Dj=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],s9=C0("x",Dj);var vj=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],QJ=C0("zap",vj);var DL=n(T1(),1);var JJ=[{id:"overview",label:"Overview",icon:lQ},{id:"requests",label:"Requests",icon:kQ},{id:"errors",label:"Errors",icon:x8},{id:"models",label:"Models",icon:xQ},{id:"providers",label:"Providers",icon:oQ},{id:"tools",label:"Tools",icon:ZJ},{id:"costs",label:"Costs",icon:n9},{id:"behavior",label:"Behavior",shortLabel:"Behavior",icon:iQ},{id:"projects",label:"Projects",icon:mQ},{id:"gain",label:"Gain",icon:$J}];var s6=n(U0(),1);function IK({activeSection:Q,onSectionChange:J,className:X=""}){return s6.jsxDEV("aside",{className:`stats-nav-rail ${X}`,children:[s6.jsxDEV("div",{className:"stats-nav-rail-header",children:s6.jsxDEV("div",{className:"stats-logo-container",children:[s6.jsxDEV("span",{className:"stats-logo-text",children:"OH MY PI"},void 0,!1,void 0,this),s6.jsxDEV("span",{className:"stats-logo-subtext",children:"Observability"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),s6.jsxDEV("nav",{className:"stats-nav-rail-menu",children:JJ.map((q)=>{let N=q.id===Q,K=q.icon;return s6.jsxDEV("button",{type:"button",onClick:()=>J(q.id),className:"stats-nav-rail-item","data-active":N?"true":"false","aria-current":N?"page":void 0,children:[s6.jsxDEV(K,{size:16,className:"stats-nav-rail-item-icon"},void 0,!1,void 0,this),s6.jsxDEV("span",{className:"stats-nav-rail-item-label",children:q.label},void 0,!1,void 0,this)]},q.id,!0,void 0,this)})},void 0,!1,void 0,this),s6.jsxDEV("div",{className:"stats-nav-rail-footer",children:s6.jsxDEV("span",{className:"stats-version-tag",children:"OMP Stats v1.0.0"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var OK=n(U0(),1),kj=[{value:"1h",label:"1h"},{value:"24h",label:"24h"},{value:"7d",label:"7d"},{value:"30d",label:"30d"},{value:"90d",label:"90d"},{value:"all",label:"All"}];function UL({value:Q,onChange:J,className:X=""}){return OK.jsxDEV("div",{className:`stats-range-control ${X}`,role:"radiogroup","aria-label":"Select time range",children:kj.map((q)=>{let N=q.value===Q;return OK.jsxDEV("button",{type:"button",role:"radio","aria-checked":N,"data-active":N?"true":"false",className:"stats-range-control-btn",onClick:()=>J(q.value),children:q.label},q.value,!1,void 0,this)})},void 0,!1,void 0,this)}var VK=n(T1(),1);class KL extends Error{status;endpoint;constructor(Q,J,X){super(X);this.name="ApiError",this.status=Q,this.endpoint=J}}async function o6(Q,J){let X=await fetch(Q,J);if(!X.ok)throw new KL(X.status,Q,`HTTP error ${X.status} on ${Q}`);return X.json()}async function BL(Q="24h",J){return o6(`/api/stats/overview?range=${encodeURIComponent(Q)}`,{signal:J})}async function HL(Q="24h",J){return o6(`/api/stats/model-dashboard?range=${encodeURIComponent(Q)}`,{signal:J})}async function FL(Q="24h",J){return o6(`/api/stats/costs?range=${encodeURIComponent(Q)}`,{signal:J})}async function UX(Q=50,J){return o6(`/api/stats/recent?limit=${Q}`,{signal:J})}async function ML(Q="24h",J=50,X){return o6(`/api/stats/errors?range=${encodeURIComponent(Q)}&limit=${J}`,{signal:X})}async function WL(Q,J){return o6(`/api/request/${Q}`,{signal:J})}async function wL(Q){return o6("/api/sync",{signal:Q})}async function RL(Q="24h",J){return o6(`/api/stats/behavior?range=${encodeURIComponent(Q)}`,{signal:J})}async function zL(Q="24h",J){return o6(`/api/stats/folders?range=${encodeURIComponent(Q)}`,{signal:J})}async function _L(Q="24h",J,X){let q=new URLSearchParams({range:Q});if(J)q.set("project",J);return o6(`/api/stats/gain?${q}`,{signal:X})}async function LL(Q="24h",J){return o6(`/api/stats/tools?range=${encodeURIComponent(Q)}`,{signal:J})}async function PL(Q="24h",J){return o6(`/api/stats/providers?range=${encodeURIComponent(Q)}`,{signal:J})}var GJ=n(U0(),1);function TL({onSyncStart:Q,onSyncComplete:J,className:X=""}){let[q,N]=VK.useState(!1),[K,H]=VK.useState(null),F=async()=>{if(q)return;if(N(!0),H(null),Q)Q();try{let M=await wL(),w={processed:typeof M?.processed==="number"?M.processed:0,files:typeof M?.files==="number"?M.files:0,totalMessages:typeof M?.totalMessages==="number"?M.totalMessages:0};if(H({type:"success",message:`Synced: ${w.processed} new request${w.processed===1?"":"s"} found.`}),J)J({success:!0,data:w})}catch(M){let w=M instanceof Error?M.message:String(M);if(H({type:"error",message:`Sync failed: ${w}`}),J)J({success:!1,error:w})}finally{N(!1)}};return GJ.jsxDEV("div",{className:`stats-sync-container ${X}`,children:[K&&GJ.jsxDEV("span",{className:"stats-sync-status-msg","data-type":K.type,children:K.message},void 0,!1,void 0,this),GJ.jsxDEV("button",{type:"button",onClick:F,disabled:q,className:"stats-button stats-button-primary stats-sync-btn","aria-busy":q,children:[GJ.jsxDEV(aQ,{size:14,className:`stats-sync-icon ${q?"stats-spin":""}`},void 0,!1,void 0,this),q?"Syncing...":"Sync DB"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var KX=n(T1(),1),CL="omp-stats-theme",IL="(prefers-color-scheme: dark)";function fj(){if(typeof localStorage>"u")return"system";let Q=localStorage.getItem(CL);return Q==="light"||Q==="dark"||Q==="system"?Q:"system"}function OL(){if(typeof window>"u")return"dark";return window.matchMedia(IL).matches?"dark":"light"}var a9=fj(),XJ=a9==="system"?OL():a9,AK=new Set;function VL(){for(let Q of AK)Q()}function EK(){if(XJ=a9==="system"?OL():a9,typeof document<"u")document.documentElement.dataset.theme=XJ,document.documentElement.style.colorScheme=XJ}if(typeof window<"u")EK(),window.matchMedia(IL).addEventListener("change",()=>{if(a9==="system")EK(),VL()});function yj(Q){if(a9=Q,typeof localStorage<"u")localStorage.setItem(CL,Q);EK(),VL()}function SK(Q){return AK.add(Q),()=>AK.delete(Q)}function R5(){return KX.useSyncExternalStore(SK,()=>XJ,()=>"dark")}function AL(){let Q=KX.useSyncExternalStore(SK,()=>a9,()=>"system"),J=KX.useSyncExternalStore(SK,()=>XJ,()=>"dark");return{preference:Q,resolved:J,setPreference:yj}}var jK=n(U0(),1),gj={system:"light",light:"dark",dark:"system"},hj={system:nQ,light:eQ,dark:sQ},EL={system:"System theme",light:"Light theme",dark:"Dark theme"};function SL(){let{preference:Q,setPreference:J}=AL(),X=hj[Q];return jK.jsxDEV("button",{type:"button",className:"stats-theme-toggle",onClick:()=>J(gj[Q]),"aria-label":`${EL[Q]} (click to switch)`,title:`${EL[Q]} — click to switch`,children:jK.jsxDEV(X,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var a6=n(U0(),1);function jL({activeSection:Q,range:J,onRangeChange:X,updatedAt:q,onSyncStart:N,onSyncComplete:K,onMenuToggle:H,className:F=""}){let w=JJ.find((_)=>_.id===Q)?.label||"Observability",R=(_)=>{if(!_)return"Not updated";return`Updated ${new Date(_).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`};return a6.jsxDEV("header",{className:`stats-top-bar ${F}`,children:[a6.jsxDEV("div",{className:"stats-top-bar-left",children:[H&&a6.jsxDEV("button",{type:"button",onClick:H,className:"stats-mobile-menu-btn","aria-label":"Open navigation menu",children:a6.jsxDEV(rQ,{size:20},void 0,!1,void 0,this)},void 0,!1,void 0,this),a6.jsxDEV("h1",{className:"stats-page-title",children:w},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a6.jsxDEV("div",{className:"stats-top-bar-right",children:[a6.jsxDEV("div",{className:"stats-top-bar-meta",children:a6.jsxDEV("span",{className:"stats-last-updated",title:q?new Date(q).toLocaleString():void 0,children:R(q)},void 0,!1,void 0,this)},void 0,!1,void 0,this),a6.jsxDEV(UL,{value:J,onChange:X},void 0,!1,void 0,this),a6.jsxDEV(SL,{},void 0,!1,void 0,this),a6.jsxDEV(TL,{onSyncStart:N,onSyncComplete:K},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var b5=n(U0(),1);function vL({activeSection:Q,onSectionChange:J,range:X,onRangeChange:q,updatedAt:N,onSyncStart:K,onSyncComplete:H,children:F}){let[M,w]=DL.useState(!1),R=(_)=>{J(_),w(!1)};return b5.jsxDEV("div",{className:"stats-app-container",children:[b5.jsxDEV(IK,{activeSection:Q,onSectionChange:R,className:"stats-desktop-nav"},void 0,!1,void 0,this),M&&b5.jsxDEV("div",{className:"stats-mobile-drawer-overlay",onClick:()=>w(!1),role:"presentation",children:b5.jsxDEV("div",{className:"stats-mobile-drawer",onClick:(_)=>_.stopPropagation(),role:"dialog","aria-modal":"true","aria-label":"Navigation menu",children:[b5.jsxDEV("div",{className:"stats-mobile-drawer-header",children:[b5.jsxDEV("div",{className:"stats-logo-container",children:[b5.jsxDEV("span",{className:"stats-logo-text",children:"OH MY PI"},void 0,!1,void 0,this),b5.jsxDEV("span",{className:"stats-logo-subtext",children:"Observability"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),b5.jsxDEV("button",{type:"button",onClick:()=>w(!1),className:"stats-drawer-close-btn","aria-label":"Close navigation menu",children:b5.jsxDEV(s9,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),b5.jsxDEV(IK,{activeSection:Q,onSectionChange:R,className:"stats-mobile-nav"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),b5.jsxDEV("div",{className:"stats-main-pane",children:[b5.jsxDEV(jL,{activeSection:Q,range:X,onRangeChange:q,updatedAt:N,onSyncStart:K,onSyncComplete:H,onMenuToggle:()=>w(!0)},void 0,!1,void 0,this),b5.jsxDEV("main",{className:"stats-content-area",children:b5.jsxDEV("div",{className:"stats-content-inner",children:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var b2=n(T1(),1),uj=["overview","requests","errors","models","providers","tools","costs","behavior","projects","gain"],bL=["1h","24h","7d","30d","90d","all"];function DK(Q){let J=Q.replace(/^#\/?/,""),[X,q]=J.split("?"),N=uj.includes(X)?X:"overview",K="24h";if(q){let F=new URLSearchParams(q).get("range");if(bL.includes(F))K=F}return{section:N,range:K}}function kL(){let[Q,J]=b2.useState(()=>DK(window.location.hash));b2.useEffect(()=>{let K=()=>{J(DK(window.location.hash))};return window.addEventListener("hashchange",K),()=>{window.removeEventListener("hashchange",K)}},[]);let X=b2.useCallback((K,H)=>{window.location.hash=`/${K}?range=${H}`},[]),q=b2.useCallback((K)=>{X(K,Q.range)},[Q.range,X]),N=b2.useCallback((K)=>{let H=bL.includes(K)?K:"24h";X(Q.section,H)},[Q.section,X]);return b2.useEffect(()=>{let K=window.location.hash,H=DK(K),F=`#/${H.section}?range=${H.range}`;if(K!==F)window.location.hash=`/${H.section}?range=${H.range}`},[]),{section:Q.section,setSection:q,range:Q.range,setRange:N}}var xj=Math.pow(10,8)*24*60*60*1000,bo1=-xj,BX=604800000,fL=86400000;var qJ=43200,vK=1440;var bK=Symbol.for("constructDateFrom");function k5(Q,J){if(typeof Q==="function")return Q(J);if(Q&&typeof Q==="object"&&bK in Q)return Q[bK](J);if(Q instanceof Date)return new Q.constructor(J);return new Date(J)}function X1(Q,J){return k5(J||Q,Q)}var mj={};function n4(){return mj}function k2(Q,J){let X=n4(),q=J?.weekStartsOn??J?.locale?.options?.weekStartsOn??X.weekStartsOn??X.locale?.options?.weekStartsOn??0,N=X1(Q,J?.in),K=N.getDay(),H=(K<q?7:0)+K-q;return N.setDate(N.getDate()-H),N.setHours(0,0,0,0),N}function i9(Q,J){return k2(Q,{...J,weekStartsOn:1})}function HX(Q,J){let X=X1(Q,J?.in),q=X.getFullYear(),N=k5(X,0);N.setFullYear(q+1,0,4),N.setHours(0,0,0,0);let K=i9(N),H=k5(X,0);H.setFullYear(q,0,4),H.setHours(0,0,0,0);let F=i9(H);if(X.getTime()>=K.getTime())return q+1;else if(X.getTime()>=F.getTime())return q;else return q-1}function C$(Q){let J=X1(Q),X=new Date(Date.UTC(J.getFullYear(),J.getMonth(),J.getDate(),J.getHours(),J.getMinutes(),J.getSeconds(),J.getMilliseconds()));return X.setUTCFullYear(J.getFullYear()),+Q-+X}function m8(Q,...J){let X=k5.bind(null,Q||J.find((q)=>typeof q==="object"));return J.map(X)}function kK(Q,J){let X=X1(Q,J?.in);return X.setHours(0,0,0,0),X}function yL(Q,J,X){let[q,N]=m8(X?.in,Q,J),K=kK(q),H=kK(N),F=+K-C$(K),M=+H-C$(H);return Math.round((F-M)/fL)}function gL(Q,J){let X=HX(Q,J),q=k5(J?.in||Q,0);return q.setFullYear(X,0,4),q.setHours(0,0,0,0),i9(q)}function I$(Q,J){let X=+X1(Q)-+X1(J);if(X<0)return-1;else if(X>0)return 1;return X}function hL(Q){return k5(Q,Date.now())}function uL(Q){return Q instanceof Date||typeof Q==="object"&&Object.prototype.toString.call(Q)==="[object Date]"}function xL(Q){return!(!uL(Q)&&typeof Q!=="number"||isNaN(+X1(Q)))}function mL(Q,J,X){let[q,N]=m8(X?.in,Q,J),K=q.getFullYear()-N.getFullYear(),H=q.getMonth()-N.getMonth();return K*12+H}function dL(Q){return(J)=>{let q=(Q?Math[Q]:Math.trunc)(J);return q===0?0:q}}function pL(Q,J){return+X1(Q)-+X1(J)}function cL(Q,J){let X=X1(Q,J?.in);return X.setHours(23,59,59,999),X}function lL(Q,J){let X=X1(Q,J?.in),q=X.getMonth();return X.setFullYear(X.getFullYear(),q+1,0),X.setHours(23,59,59,999),X}function rL(Q,J){let X=X1(Q,J?.in);return+cL(X,J)===+lL(X,J)}function nL(Q,J,X){let[q,N,K]=m8(X?.in,Q,Q,J),H=I$(N,K),F=Math.abs(mL(N,K));if(F<1)return 0;if(N.getMonth()===1&&N.getDate()>27)N.setDate(30);N.setMonth(N.getMonth()-H*F);let M=I$(N,K)===-H;if(rL(q)&&F===1&&I$(q,K)===1)M=!1;let w=H*(F-+M);return w===0?0:w}function sL(Q,J,X){let q=pL(Q,J)/1000;return dL(X?.roundingMethod)(q)}function oL(Q,J){let X=X1(Q,J?.in);return X.setFullYear(X.getFullYear(),0,1),X.setHours(0,0,0,0),X}var dj={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},aL=(Q,J,X)=>{let q,N=dj[Q];if(typeof N==="string")q=N;else if(J===1)q=N.one;else q=N.other.replace("{{count}}",J.toString());if(X?.addSuffix)if(X.comparison&&X.comparison>0)return"in "+q;else return q+" ago";return q};function FX(Q){return(J={})=>{let X=J.width?String(J.width):Q.defaultWidth;return Q.formats[X]||Q.formats[Q.defaultWidth]}}var pj={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},cj={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},lj={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},iL={date:FX({formats:pj,defaultWidth:"full"}),time:FX({formats:cj,defaultWidth:"full"}),dateTime:FX({formats:lj,defaultWidth:"full"})};var rj={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},tL=(Q,J,X,q)=>rj[Q];function O$(Q){return(J,X)=>{let q=X?.context?String(X.context):"standalone",N;if(q==="formatting"&&Q.formattingValues){let H=Q.defaultFormattingWidth||Q.defaultWidth,F=X?.width?String(X.width):H;N=Q.formattingValues[F]||Q.formattingValues[H]}else{let H=Q.defaultWidth,F=X?.width?String(X.width):Q.defaultWidth;N=Q.values[F]||Q.values[H]}let K=Q.argumentCallback?Q.argumentCallback(J):J;return N[K]}}var nj={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},sj={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},oj={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},aj={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},ij={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},tj={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ej=(Q,J)=>{let X=Number(Q),q=X%100;if(q>20||q<10)switch(q%10){case 1:return X+"st";case 2:return X+"nd";case 3:return X+"rd"}return X+"th"},eL={ordinalNumber:ej,era:O$({values:nj,defaultWidth:"wide"}),quarter:O$({values:sj,defaultWidth:"wide",argumentCallback:(Q)=>Q-1}),month:O$({values:oj,defaultWidth:"wide"}),day:O$({values:aj,defaultWidth:"wide"}),dayPeriod:O$({values:ij,defaultWidth:"wide",formattingValues:tj,defaultFormattingWidth:"wide"})};function V$(Q){return(J,X={})=>{let q=X.width,N=q&&Q.matchPatterns[q]||Q.matchPatterns[Q.defaultMatchWidth],K=J.match(N);if(!K)return null;let H=K[0],F=q&&Q.parsePatterns[q]||Q.parsePatterns[Q.defaultParseWidth],M=Array.isArray(F)?ZD(F,(_)=>_.test(H)):$D(F,(_)=>_.test(H)),w;w=Q.valueCallback?Q.valueCallback(M):M,w=X.valueCallback?X.valueCallback(w):w;let R=J.slice(H.length);return{value:w,rest:R}}}function $D(Q,J){for(let X in Q)if(Object.prototype.hasOwnProperty.call(Q,X)&&J(Q[X]))return X;return}function ZD(Q,J){for(let X=0;X<Q.length;X++)if(J(Q[X]))return X;return}function $P(Q){return(J,X={})=>{let q=J.match(Q.matchPattern);if(!q)return null;let N=q[0],K=J.match(Q.parsePattern);if(!K)return null;let H=Q.valueCallback?Q.valueCallback(K[0]):K[0];H=X.valueCallback?X.valueCallback(H):H;let F=J.slice(N.length);return{value:H,rest:F}}}var QD=/^(\d+)(th|st|nd|rd)?/i,JD=/\d+/i,GD={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},XD={any:[/^b/i,/^(a|c)/i]},qD={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},YD={any:[/1/i,/2/i,/3/i,/4/i]},ND={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},UD={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},KD={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},BD={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},HD={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},FD={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},ZP={ordinalNumber:$P({matchPattern:QD,parsePattern:JD,valueCallback:(Q)=>parseInt(Q,10)}),era:V$({matchPatterns:GD,defaultMatchWidth:"wide",parsePatterns:XD,defaultParseWidth:"any"}),quarter:V$({matchPatterns:qD,defaultMatchWidth:"wide",parsePatterns:YD,defaultParseWidth:"any",valueCallback:(Q)=>Q+1}),month:V$({matchPatterns:ND,defaultMatchWidth:"wide",parsePatterns:UD,defaultParseWidth:"any"}),day:V$({matchPatterns:KD,defaultMatchWidth:"wide",parsePatterns:BD,defaultParseWidth:"any"}),dayPeriod:V$({matchPatterns:HD,defaultMatchWidth:"any",parsePatterns:FD,defaultParseWidth:"any"})};var YJ={code:"en-US",formatDistance:aL,formatLong:iL,formatRelative:tL,localize:eL,match:ZP,options:{weekStartsOn:0,firstWeekContainsDate:1}};function QP(Q,J){let X=X1(Q,J?.in);return yL(X,oL(X))+1}function JP(Q,J){let X=X1(Q,J?.in),q=+i9(X)-+gL(X);return Math.round(q/BX)+1}function MX(Q,J){let X=X1(Q,J?.in),q=X.getFullYear(),N=n4(),K=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??N.firstWeekContainsDate??N.locale?.options?.firstWeekContainsDate??1,H=k5(J?.in||Q,0);H.setFullYear(q+1,0,K),H.setHours(0,0,0,0);let F=k2(H,J),M=k5(J?.in||Q,0);M.setFullYear(q,0,K),M.setHours(0,0,0,0);let w=k2(M,J);if(+X>=+F)return q+1;else if(+X>=+w)return q;else return q-1}function GP(Q,J){let X=n4(),q=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??X.firstWeekContainsDate??X.locale?.options?.firstWeekContainsDate??1,N=MX(Q,J),K=k5(J?.in||Q,0);return K.setFullYear(N,0,q),K.setHours(0,0,0,0),k2(K,J)}function XP(Q,J){let X=X1(Q,J?.in),q=+k2(X,J)-+GP(X,J);return Math.round(q/BX)+1}function B1(Q,J){let X=Q<0?"-":"",q=Math.abs(Q).toString().padStart(J,"0");return X+q}var f2={y(Q,J){let X=Q.getFullYear(),q=X>0?X:1-X;return B1(J==="yy"?q%100:q,J.length)},M(Q,J){let X=Q.getMonth();return J==="M"?String(X+1):B1(X+1,2)},d(Q,J){return B1(Q.getDate(),J.length)},a(Q,J){let X=Q.getHours()/12>=1?"pm":"am";switch(J){case"a":case"aa":return X.toUpperCase();case"aaa":return X;case"aaaaa":return X[0];case"aaaa":default:return X==="am"?"a.m.":"p.m."}},h(Q,J){return B1(Q.getHours()%12||12,J.length)},H(Q,J){return B1(Q.getHours(),J.length)},m(Q,J){return B1(Q.getMinutes(),J.length)},s(Q,J){return B1(Q.getSeconds(),J.length)},S(Q,J){let X=J.length,q=Q.getMilliseconds(),N=Math.trunc(q*Math.pow(10,X-3));return B1(N,J.length)}};var A$={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},fK={G:function(Q,J,X){let q=Q.getFullYear()>0?1:0;switch(J){case"G":case"GG":case"GGG":return X.era(q,{width:"abbreviated"});case"GGGGG":return X.era(q,{width:"narrow"});case"GGGG":default:return X.era(q,{width:"wide"})}},y:function(Q,J,X){if(J==="yo"){let q=Q.getFullYear(),N=q>0?q:1-q;return X.ordinalNumber(N,{unit:"year"})}return f2.y(Q,J)},Y:function(Q,J,X,q){let N=MX(Q,q),K=N>0?N:1-N;if(J==="YY"){let H=K%100;return B1(H,2)}if(J==="Yo")return X.ordinalNumber(K,{unit:"year"});return B1(K,J.length)},R:function(Q,J){let X=HX(Q);return B1(X,J.length)},u:function(Q,J){let X=Q.getFullYear();return B1(X,J.length)},Q:function(Q,J,X){let q=Math.ceil((Q.getMonth()+1)/3);switch(J){case"Q":return String(q);case"QQ":return B1(q,2);case"Qo":return X.ordinalNumber(q,{unit:"quarter"});case"QQQ":return X.quarter(q,{width:"abbreviated",context:"formatting"});case"QQQQQ":return X.quarter(q,{width:"narrow",context:"formatting"});case"QQQQ":default:return X.quarter(q,{width:"wide",context:"formatting"})}},q:function(Q,J,X){let q=Math.ceil((Q.getMonth()+1)/3);switch(J){case"q":return String(q);case"qq":return B1(q,2);case"qo":return X.ordinalNumber(q,{unit:"quarter"});case"qqq":return X.quarter(q,{width:"abbreviated",context:"standalone"});case"qqqqq":return X.quarter(q,{width:"narrow",context:"standalone"});case"qqqq":default:return X.quarter(q,{width:"wide",context:"standalone"})}},M:function(Q,J,X){let q=Q.getMonth();switch(J){case"M":case"MM":return f2.M(Q,J);case"Mo":return X.ordinalNumber(q+1,{unit:"month"});case"MMM":return X.month(q,{width:"abbreviated",context:"formatting"});case"MMMMM":return X.month(q,{width:"narrow",context:"formatting"});case"MMMM":default:return X.month(q,{width:"wide",context:"formatting"})}},L:function(Q,J,X){let q=Q.getMonth();switch(J){case"L":return String(q+1);case"LL":return B1(q+1,2);case"Lo":return X.ordinalNumber(q+1,{unit:"month"});case"LLL":return X.month(q,{width:"abbreviated",context:"standalone"});case"LLLLL":return X.month(q,{width:"narrow",context:"standalone"});case"LLLL":default:return X.month(q,{width:"wide",context:"standalone"})}},w:function(Q,J,X,q){let N=XP(Q,q);if(J==="wo")return X.ordinalNumber(N,{unit:"week"});return B1(N,J.length)},I:function(Q,J,X){let q=JP(Q);if(J==="Io")return X.ordinalNumber(q,{unit:"week"});return B1(q,J.length)},d:function(Q,J,X){if(J==="do")return X.ordinalNumber(Q.getDate(),{unit:"date"});return f2.d(Q,J)},D:function(Q,J,X){let q=QP(Q);if(J==="Do")return X.ordinalNumber(q,{unit:"dayOfYear"});return B1(q,J.length)},E:function(Q,J,X){let q=Q.getDay();switch(J){case"E":case"EE":case"EEE":return X.day(q,{width:"abbreviated",context:"formatting"});case"EEEEE":return X.day(q,{width:"narrow",context:"formatting"});case"EEEEEE":return X.day(q,{width:"short",context:"formatting"});case"EEEE":default:return X.day(q,{width:"wide",context:"formatting"})}},e:function(Q,J,X,q){let N=Q.getDay(),K=(N-q.weekStartsOn+8)%7||7;switch(J){case"e":return String(K);case"ee":return B1(K,2);case"eo":return X.ordinalNumber(K,{unit:"day"});case"eee":return X.day(N,{width:"abbreviated",context:"formatting"});case"eeeee":return X.day(N,{width:"narrow",context:"formatting"});case"eeeeee":return X.day(N,{width:"short",context:"formatting"});case"eeee":default:return X.day(N,{width:"wide",context:"formatting"})}},c:function(Q,J,X,q){let N=Q.getDay(),K=(N-q.weekStartsOn+8)%7||7;switch(J){case"c":return String(K);case"cc":return B1(K,J.length);case"co":return X.ordinalNumber(K,{unit:"day"});case"ccc":return X.day(N,{width:"abbreviated",context:"standalone"});case"ccccc":return X.day(N,{width:"narrow",context:"standalone"});case"cccccc":return X.day(N,{width:"short",context:"standalone"});case"cccc":default:return X.day(N,{width:"wide",context:"standalone"})}},i:function(Q,J,X){let q=Q.getDay(),N=q===0?7:q;switch(J){case"i":return String(N);case"ii":return B1(N,J.length);case"io":return X.ordinalNumber(N,{unit:"day"});case"iii":return X.day(q,{width:"abbreviated",context:"formatting"});case"iiiii":return X.day(q,{width:"narrow",context:"formatting"});case"iiiiii":return X.day(q,{width:"short",context:"formatting"});case"iiii":default:return X.day(q,{width:"wide",context:"formatting"})}},a:function(Q,J,X){let N=Q.getHours()/12>=1?"pm":"am";switch(J){case"a":case"aa":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"});case"aaa":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return X.dayPeriod(N,{width:"narrow",context:"formatting"});case"aaaa":default:return X.dayPeriod(N,{width:"wide",context:"formatting"})}},b:function(Q,J,X){let q=Q.getHours(),N;if(q===12)N=A$.noon;else if(q===0)N=A$.midnight;else N=q/12>=1?"pm":"am";switch(J){case"b":case"bb":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"});case"bbb":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return X.dayPeriod(N,{width:"narrow",context:"formatting"});case"bbbb":default:return X.dayPeriod(N,{width:"wide",context:"formatting"})}},B:function(Q,J,X){let q=Q.getHours(),N;if(q>=17)N=A$.evening;else if(q>=12)N=A$.afternoon;else if(q>=4)N=A$.morning;else N=A$.night;switch(J){case"B":case"BB":case"BBB":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"});case"BBBBB":return X.dayPeriod(N,{width:"narrow",context:"formatting"});case"BBBB":default:return X.dayPeriod(N,{width:"wide",context:"formatting"})}},h:function(Q,J,X){if(J==="ho"){let q=Q.getHours()%12;if(q===0)q=12;return X.ordinalNumber(q,{unit:"hour"})}return f2.h(Q,J)},H:function(Q,J,X){if(J==="Ho")return X.ordinalNumber(Q.getHours(),{unit:"hour"});return f2.H(Q,J)},K:function(Q,J,X){let q=Q.getHours()%12;if(J==="Ko")return X.ordinalNumber(q,{unit:"hour"});return B1(q,J.length)},k:function(Q,J,X){let q=Q.getHours();if(q===0)q=24;if(J==="ko")return X.ordinalNumber(q,{unit:"hour"});return B1(q,J.length)},m:function(Q,J,X){if(J==="mo")return X.ordinalNumber(Q.getMinutes(),{unit:"minute"});return f2.m(Q,J)},s:function(Q,J,X){if(J==="so")return X.ordinalNumber(Q.getSeconds(),{unit:"second"});return f2.s(Q,J)},S:function(Q,J){return f2.S(Q,J)},X:function(Q,J,X){let q=Q.getTimezoneOffset();if(q===0)return"Z";switch(J){case"X":return YP(q);case"XXXX":case"XX":return t9(q);case"XXXXX":case"XXX":default:return t9(q,":")}},x:function(Q,J,X){let q=Q.getTimezoneOffset();switch(J){case"x":return YP(q);case"xxxx":case"xx":return t9(q);case"xxxxx":case"xxx":default:return t9(q,":")}},O:function(Q,J,X){let q=Q.getTimezoneOffset();switch(J){case"O":case"OO":case"OOO":return"GMT"+qP(q,":");case"OOOO":default:return"GMT"+t9(q,":")}},z:function(Q,J,X){let q=Q.getTimezoneOffset();switch(J){case"z":case"zz":case"zzz":return"GMT"+qP(q,":");case"zzzz":default:return"GMT"+t9(q,":")}},t:function(Q,J,X){let q=Math.trunc(+Q/1000);return B1(q,J.length)},T:function(Q,J,X){return B1(+Q,J.length)}};function qP(Q,J=""){let X=Q>0?"-":"+",q=Math.abs(Q),N=Math.trunc(q/60),K=q%60;if(K===0)return X+String(N);return X+String(N)+J+B1(K,2)}function YP(Q,J){if(Q%60===0)return(Q>0?"-":"+")+B1(Math.abs(Q)/60,2);return t9(Q,J)}function t9(Q,J=""){let X=Q>0?"-":"+",q=Math.abs(Q),N=B1(Math.trunc(q/60),2),K=B1(q%60,2);return X+N+J+K}var NP=(Q,J)=>{switch(Q){case"P":return J.date({width:"short"});case"PP":return J.date({width:"medium"});case"PPP":return J.date({width:"long"});case"PPPP":default:return J.date({width:"full"})}},UP=(Q,J)=>{switch(Q){case"p":return J.time({width:"short"});case"pp":return J.time({width:"medium"});case"ppp":return J.time({width:"long"});case"pppp":default:return J.time({width:"full"})}},MD=(Q,J)=>{let X=Q.match(/(P+)(p+)?/)||[],q=X[1],N=X[2];if(!N)return NP(Q,J);let K;switch(q){case"P":K=J.dateTime({width:"short"});break;case"PP":K=J.dateTime({width:"medium"});break;case"PPP":K=J.dateTime({width:"long"});break;case"PPPP":default:K=J.dateTime({width:"full"});break}return K.replace("{{date}}",NP(q,J)).replace("{{time}}",UP(N,J))},KP={p:UP,P:MD};var WD=/^D+$/,wD=/^Y+$/,RD=["D","DD","YY","YYYY"];function BP(Q){return WD.test(Q)}function HP(Q){return wD.test(Q)}function FP(Q,J,X){let q=zD(Q,J,X);if(console.warn(q),RD.includes(Q))throw RangeError(q)}function zD(Q,J,X){let q=Q[0]==="Y"?"years":"days of the month";return`Use \`${Q.toLowerCase()}\` instead of \`${Q}\` (in \`${J}\`) for formatting ${q} to the input \`${X}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var _D=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,LD=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,PD=/^'([^]*?)'?$/,TD=/''/g,CD=/[a-zA-Z]/;function F4(Q,J,X){let q=n4(),N=X?.locale??q.locale??YJ,K=X?.firstWeekContainsDate??X?.locale?.options?.firstWeekContainsDate??q.firstWeekContainsDate??q.locale?.options?.firstWeekContainsDate??1,H=X?.weekStartsOn??X?.locale?.options?.weekStartsOn??q.weekStartsOn??q.locale?.options?.weekStartsOn??0,F=X1(Q,X?.in);if(!xL(F))throw RangeError("Invalid time value");let M=J.match(LD).map((R)=>{let _=R[0];if(_==="p"||_==="P"){let P=KP[_];return P(R,N.formatLong)}return R}).join("").match(_D).map((R)=>{if(R==="''")return{isToken:!1,value:"'"};let _=R[0];if(_==="'")return{isToken:!1,value:ID(R)};if(fK[_])return{isToken:!0,value:R};if(_.match(CD))throw RangeError("Format string contains an unescaped latin alphabet character `"+_+"`");return{isToken:!1,value:R}});if(N.localize.preprocessor)M=N.localize.preprocessor(F,M);let w={firstWeekContainsDate:K,weekStartsOn:H,locale:N};return M.map((R)=>{if(!R.isToken)return R.value;let _=R.value;if(!X?.useAdditionalWeekYearTokens&&HP(_)||!X?.useAdditionalDayOfYearTokens&&BP(_))FP(_,J,String(Q));let P=fK[_[0]];return P(F,_,N.localize,w)}).join("")}function ID(Q){let J=Q.match(PD);if(!J)return Q;return J[1].replace(TD,"'")}function MP(Q,J,X){let q=n4(),N=X?.locale??q.locale??YJ,K=2520,H=I$(Q,J);if(isNaN(H))throw RangeError("Invalid time value");let F=Object.assign({},X,{addSuffix:X?.addSuffix,comparison:H}),[M,w]=m8(X?.in,...H>0?[J,Q]:[Q,J]),R=sL(w,M),_=(C$(w)-C$(M))/1000,P=Math.round((R-_)/60),I;if(P<2)if(X?.includeSeconds)if(R<5)return N.formatDistance("lessThanXSeconds",5,F);else if(R<10)return N.formatDistance("lessThanXSeconds",10,F);else if(R<20)return N.formatDistance("lessThanXSeconds",20,F);else if(R<40)return N.formatDistance("halfAMinute",0,F);else if(R<60)return N.formatDistance("lessThanXMinutes",1,F);else return N.formatDistance("xMinutes",1,F);else if(P===0)return N.formatDistance("lessThanXMinutes",1,F);else return N.formatDistance("xMinutes",P,F);else if(P<45)return N.formatDistance("xMinutes",P,F);else if(P<90)return N.formatDistance("aboutXHours",1,F);else if(P<vK){let A=Math.round(P/60);return N.formatDistance("aboutXHours",A,F)}else if(P<2520)return N.formatDistance("xDays",1,F);else if(P<qJ){let A=Math.round(P/vK);return N.formatDistance("xDays",A,F)}else if(P<qJ*2)return I=Math.round(P/qJ),N.formatDistance("aboutXMonths",I,F);if(I=nL(w,M),I<12){let A=Math.round(P/qJ);return N.formatDistance("xMonths",A,F)}else{let A=I%12,V=Math.trunc(I/12);if(A<3)return N.formatDistance("aboutXYears",V,F);else if(A<9)return N.formatDistance("overXYears",V,F);else return N.formatDistance("almostXYears",V+1,F)}}function WP(Q,J){return MP(Q,hL(Q),J)}var U5=n(T1(),1);var yK=n(wP(),1),S6=n(T1(),1);var zP="label";function RP(Q,J){if(typeof Q==="function")Q(J);else if(Q)Q.current=J}function VD(Q,J){let X=Q.options;if(X&&J)Object.assign(X,J)}function _P(Q,J){Q.labels=J}function LP(Q,J,X=zP){let q=[];Q.datasets=J.map((N)=>{let K=Q.datasets.find((H)=>H[X]===N[X]);if(!K||!N.data||q.includes(K))return{...N};return q.push(K),Object.assign(K,N),K})}function AD(Q,J=zP){let X={labels:[],datasets:[]};return _P(X,Q.labels),LP(X,Q.datasets,J),X}function ED(Q,J){let{height:X=150,width:q=300,redraw:N=!1,datasetIdKey:K,type:H,data:F,options:M,plugins:w=[],fallbackContent:R,updateMode:_,...P}=Q,I=S6.useRef(null),A=S6.useRef(null),V=()=>{if(!I.current)return;A.current=new l9(I.current,{type:H,data:AD(F,K),options:M&&{...M},plugins:w}),RP(J,A.current)},O=()=>{if(RP(J,null),A.current)A.current.destroy(),A.current=null};return S6.useEffect(()=>{if(!N&&A.current&&M)VD(A.current,M)},[N,M]),S6.useEffect(()=>{if(!N&&A.current)_P(A.current.config.data,F.labels)},[N,F.labels]),S6.useEffect(()=>{if(!N&&A.current&&F.datasets)LP(A.current.config.data,F.datasets,K)},[N,F.datasets]),S6.useEffect(()=>{if(!A.current)return;if(N)O(),setTimeout(V);else A.current.update(_)},[N,M,F.labels,F.datasets,_]),S6.useEffect(()=>{if(!A.current)return;O(),setTimeout(V)},[H]),S6.useEffect(()=>{return V(),()=>O()},[]),yK.jsx("canvas",{ref:I,role:"img",height:X,width:q,...P,children:R})}var SD=S6.forwardRef(ED);function PP(Q,J){return l9.register(J),S6.forwardRef((X,q)=>yK.jsx(SD,{...X,ref:q,type:Q}))}var f5=PP("line",HK),d8=PP("bar",BK);var H1=["#ed4abf","#9b4dff","#5ad8e6","#62d394","#c77dff","#ff8fd1","#f5c14b","#ff6b7d"],o1={dark:{legendLabel:"#a89fb3",tooltipBackground:"#241a2e",tooltipTitle:"#eae5ef",tooltipBody:"#a89fb3",tooltipBorder:"rgba(255, 255, 255, 0.12)",grid:"rgba(255, 255, 255, 0.06)",tick:"#867a93"},light:{legendLabel:"#5a5462",tooltipBackground:"#ffffff",tooltipTitle:"#241a2e",tooltipBody:"#5a5462",tooltipBorder:"rgba(20, 12, 28, 0.15)",grid:"rgba(20, 12, 28, 0.08)",tick:"#6a6275"}};function s4(Q){let{chartTheme:J,showLegend:X,defaultLabel:q,formatValue:N,footer:K}=Q;return{legend:{display:X,position:"top",align:"start",labels:{color:J.legendLabel,usePointStyle:!0,padding:16,font:{size:12},boxWidth:8}},tooltip:{backgroundColor:J.tooltipBackground,titleColor:J.tooltipTitle,bodyColor:J.tooltipBody,borderColor:J.tooltipBorder,borderWidth:1,padding:12,cornerRadius:8,callbacks:{label:(H)=>{let F=H.dataset.label??q,M=H.parsed.y??0;return`${F}: ${N(M)}`},...K?{footer:K}:{}}}}}function o4(Q){let{chartTheme:J,formatY:X}=Q,q={grid:{color:J.grid,drawBorder:!1},ticks:{color:J.tick,font:{size:11}}},N={...q,ticks:{...q.ticks,callback:(K)=>X(Number(K))},min:0};return{sharedScaleBase:q,yScale:N}}function E$(Q){return{borderColor:Q,backgroundColor:`${Q}20`,fill:!0,tension:0,pointRadius:3,pointHoverRadius:4,borderWidth:2}}function $7(Q){return{backgroundColor:Q,borderColor:Q,borderWidth:0,borderRadius:4,maxBarThickness:56}}function p8(Q,J){return Q.datasets.map((X,q)=>({label:X.label,data:X.data,...J(q)}))}function WX(Q,J,X){if(Q.length===0)return{labels:[],datasets:[]};let{initBucket:q,accumulate:N,bucketToValue:K}=X,H=new Map;for(let M of Q){let w=H.get(M.timestamp)??q();N(w,M),H.set(M.timestamp,w)}let F=[...H.entries()].sort((M,w)=>M[0]-w[0]);return{labels:F.map(([M])=>F4(new Date(M),"MMM d")),datasets:[{label:J,data:F.map(([,M])=>K(M))}]}}function S$(Q,J){if(Q.length===0)return{labels:[],datasets:[]};let{topN:X=5,rankWeight:q,initBucket:N,accumulate:K,bucketToValue:H}=J,F=new Map;for(let D of Q){let h=`${D.model}::${D.provider}`,p=F.get(h);if(p)p.weight+=q(D);else F.set(h,{model:D.model,provider:D.provider,weight:q(D)})}let w=[...F.entries()].sort((D,h)=>h[1].weight-D[1].weight).slice(0,X),R=new Set(w.map(([D])=>D)),_=new Map;for(let[,{model:D}]of w)_.set(D,(_.get(D)??0)+1);let P=new Map;for(let[D,{model:h,provider:p}]of w)P.set(D,(_.get(h)??0)>1?`${h} (${p})`:h);let I=[...new Set(Q.map((D)=>D.timestamp))].sort((D,h)=>D-h),A=w.map(([D])=>P.get(D)??D);if(Q.some((D)=>!R.has(`${D.model}::${D.provider}`)))A.push("Other");let O=new Map;for(let D of I)O.set(D,{});for(let D of Q){let h=`${D.model}::${D.provider}`,p=R.has(h)?P.get(h)??D.model:"Other",s=O.get(D.timestamp);if(!s)continue;let a=s[p]??N();K(a,D),s[p]=a}return{labels:I.map((D)=>F4(new Date(D),"MMM d")),datasets:A.map((D)=>({label:D,data:I.map((h)=>{let p=O.get(h)?.[D];return p?H(p):0})}))}}var y1=n(U0(),1);function y2(Q){return{borderColor:Q,backgroundColor:"transparent",tension:0.4,pointRadius:0,borderWidth:2}}function wX({timestamps:Q,values:J,color:X}){let q={labels:Q.map((K)=>F4(new Date(K),"MMM d")),datasets:[{data:J,...y2(X)}]};return y1.jsxDEV(f5,{data:q,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{enabled:!1}},scales:{x:{display:!1},y:{display:!1,min:0}}}},void 0,!1,void 0,this)}function RX(Q){return{legend:{display:!0,position:"top",labels:{color:Q.legendLabel,usePointStyle:!0,padding:16,font:{size:12}}},tooltip:{backgroundColor:Q.tooltipBackground,titleColor:Q.tooltipTitle,bodyColor:Q.tooltipBody,borderColor:Q.tooltipBorder,borderWidth:1,cornerRadius:8}}}function TP(Q){return{x:{grid:{color:Q.grid},ticks:{color:Q.tick,font:{size:11}}},y:{grid:{color:Q.grid},ticks:{color:Q.tick,font:{size:11}},min:0}}}function CP(Q){return{x:{grid:{color:Q.grid},ticks:{color:Q.tick,font:{size:11}}},y:{type:"linear",display:!0,position:"left",grid:{color:Q.grid},ticks:{color:Q.tick,font:{size:11}}},y1:{type:"linear",display:!0,position:"right",grid:{drawOnChartArea:!1},ticks:{color:Q.tick,font:{size:11}}}}}function zX({title:Q,subtitle:J,children:X}){return y1.jsxDEV("div",{className:"stats-panel overflow-hidden",children:[y1.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)]",children:[y1.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),J?y1.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-1",children:J},void 0,!1,void 0,this):null]},void 0,!0,void 0,this),y1.jsxDEV("div",{className:"overflow-x-auto",children:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function jD(Q){if(Q==="right")return"text-right";if(Q==="center")return"text-center";return""}function _X({columns:Q,gridTemplate:J}){return y1.jsxDEV("div",{className:"grid gap-3 px-5 py-3 text-[var(--text-muted)] text-xs uppercase tracking-wider font-semibold",style:{gridTemplateColumns:J},children:[Q.map((X)=>y1.jsxDEV("div",{className:jD(X.align),children:X.label},X.label,!1,void 0,this)),y1.jsxDEV("div",{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function LX({children:Q}){return y1.jsxDEV("div",{className:"max-h-[calc(100vh-300px)] overflow-y-auto",children:Q},void 0,!1,void 0,this)}function PX({model:Q,provider:J}){return y1.jsxDEV("div",{children:[y1.jsxDEV("div",{className:"font-medium text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),y1.jsxDEV("div",{className:"text-xs text-[var(--text-muted)]",children:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function TX({gridTemplate:Q,cells:J,trendCell:X,isExpanded:q,onToggle:N,expandedContent:K}){return y1.jsxDEV("div",{className:"border-t border-[var(--border-subtle)]",children:[y1.jsxDEV("button",{type:"button",onClick:N,className:"w-full bg-transparent border-none text-left px-5 py-3 cursor-pointer hover:bg-[var(--bg-hover)] transition-colors",children:y1.jsxDEV("div",{className:"grid gap-3 items-center",style:{gridTemplateColumns:Q},children:[J,y1.jsxDEV("div",{className:"h-10",children:X},void 0,!1,void 0,this),y1.jsxDEV("div",{className:"flex justify-center text-[var(--text-muted)]",children:q?y1.jsxDEV(gQ,{size:16},void 0,!1,void 0,this):y1.jsxDEV(yQ,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),q?y1.jsxDEV("div",{className:"px-5 py-4 bg-[var(--bg-elevated)] border-t border-[var(--border-subtle)]",children:K},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function CX(){return y1.jsxDEV("div",{className:"text-[var(--text-muted)] text-center text-sm",children:"-"},void 0,!1,void 0,this)}function IX({message:Q="No data available"}){return y1.jsxDEV("div",{className:"h-full flex items-center justify-center text-[var(--text-muted)] text-sm",children:Q},void 0,!1,void 0,this)}function S0(Q){return Q.toLocaleString()}function N1(Q){return Q.toLocaleString(void 0,{notation:"compact"})}function R1(Q,J){if(Q===0)return"$0";let X=J!==void 0?J:Q>0&&Q<0.01?4:2;return`$${Q.toLocaleString(void 0,{minimumFractionDigits:X,maximumFractionDigits:X})}`}function d1(Q,J=1){return`${(Q*100).toFixed(J)}%`}function y5(Q,J){if(Q===null)return"-";let X=Q/1000,q=J!==void 0?J:X<1?2:1;return`${X.toFixed(q)}s`}function OX(Q){if(Q===null)return"-";return Q.toFixed(1)}function Y6(Q){return WP(new Date(Q),{addSuffix:!0})}function gK(Q){if(Q>=1e9)return`${(Q/1e9).toFixed(1)} GB`;if(Q>=1e6)return`${(Q/1e6).toFixed(1)} MB`;if(Q>=1000)return`${(Q/1000).toFixed(1)} KB`;return`${Q} B`}var O5=n(T1(),1),c8=new Map,DD=64;function a1(Q,J,X){let q=JSON.stringify(Q),[N,K]=O5.useState(()=>c8.get(q)?.data??null),[H,F]=O5.useState(null),[M,w]=O5.useState(()=>!c8.has(q)),[R,_]=O5.useState(!1),[P,I]=O5.useState(()=>c8.get(q)?.updatedAt??null),A=O5.useRef(J);A.current=J;let V=O5.useRef(q);V.current=q;let O=X?.enabled??!0,D=X?.pollMs,h=O5.useRef(null),p=O5.useRef(!1);p.current=N!==null;let s=O5.useCallback(async(J0)=>{if(h.current)h.current.abort();let t=new AbortController;if(h.current=t,J0)_(!0);else w(!0),K(null);F(null);try{let i=await A.current(t.signal);if(t.signal.aborted)return;if(c8.set(V.current,{data:i,updatedAt:Date.now()}),c8.size>DD){let Y0=c8.keys().next().value;if(Y0!==void 0)c8.delete(Y0)}K(i),I(Date.now()),F(null)}catch(i){if(t.signal.aborted)return;F(i instanceof Error?i:Error(String(i)))}finally{if(!t.signal.aborted){if(w(!1),_(!1),h.current===t)h.current=null}}},[]);O5.useEffect(()=>{if(!O){w(!1),_(!1);return}let J0=c8.get(q);if(J0)K(J0.data),I(J0.updatedAt),w(!1),s(!0);else s(p.current);return()=>{if(h.current)h.current.abort(),h.current=null}},[q,O,s]),O5.useEffect(()=>{if(!O||!D)return;let J0=setInterval(()=>{if(document.hidden)return;s(!0)},D);return()=>{clearInterval(J0)}},[O,D,s]);let a=O5.useCallback(async()=>{await s(!0)},[s]);return{data:N,error:H,loading:M,refreshing:R,refetch:a,updatedAt:P}}var IP=3600000,VX=24*IP,vD=300000,OP={"1h":{windowLabel:"the last hour",trendLabel:"1h Trend",bucketMs:vD,bucketCount:12,tickFormat:"HH:mm"},"24h":{windowLabel:"the last 24 hours",trendLabel:"24h Trend",bucketMs:IP,bucketCount:24,tickFormat:"HH:mm"},"7d":{windowLabel:"the last 7 days",trendLabel:"7d Trend",bucketMs:VX,bucketCount:7,tickFormat:"MMM d"},"30d":{windowLabel:"the last 30 days",trendLabel:"30d Trend",bucketMs:VX,bucketCount:30,tickFormat:"MMM d"},"90d":{windowLabel:"the last 90 days",trendLabel:"90d Trend",bucketMs:VX,bucketCount:90,tickFormat:"MMM d"},all:{windowLabel:"all time",trendLabel:"Trend",bucketMs:VX,bucketCount:0,tickFormat:"MMM d"}};function Z7(Q){return OP[Q]}function NJ(Q,J){return F4(new Date(Q),OP[J].tickFormat)}var bD=["main","subagent","advisor"];function AX(Q){return Q.totalInputTokens+Q.totalOutputTokens+Q.totalCacheReadTokens+Q.totalCacheWriteTokens}function VP(Q){let J=new Map;for(let H of Q)J.set(H.agentType,H);let X=bD.map((H)=>J.get(H)).filter((H)=>H!==void 0),q=X.reduce((H,F)=>H+AX(F),0),N=X.reduce((H,F)=>H+F.totalCost,0),K=X.map((H)=>{let F=AX(H);return{agentType:H.agentType,tokens:F,requests:H.totalRequests,cost:H.totalCost,share:q>0?F/q:0}});return{totalTokens:q,totalCost:N,segments:K}}function AP(Q){let J=Q.reduce((F,M)=>F+M.cost,0),X=new Set(Q.map((F)=>F.timestamp)).size,q=X>0?J/X:0,N=new Map;for(let F of Q)N.set(F.model,(N.get(F.model)??0)+F.cost);let K="",H=0;for(let[F,M]of N)if(M>H)K=F,H=M;return{totalCost:J,avgDailyCost:q,topModelName:K,topModelCost:H}}function EP(Q,J){if(Q.length===0)return new Map;let X=Z7(J),q=X.bucketMs,N=X.bucketCount,K=N>0?(()=>{let M=Q.reduce((_,P)=>Math.max(_,P.timestamp),0),R=(M>0?M:Math.floor(Date.now()/q)*q)-(N-1)*q;return Array.from({length:N},(_,P)=>R+P*q)})():Array.from(new Set(Q.map((M)=>M.timestamp))).sort((M,w)=>M-w),H=new Map(K.map((M,w)=>[M,w])),F=new Map;for(let M of Q){let w=`${M.model}::${M.provider}`,R=F.get(w);if(!R)R={label:`${M.model} (${M.provider})`,data:K.map((P)=>({timestamp:P,avgTtftSeconds:null,avgTokensPerSecond:null,requests:0}))},F.set(w,R);let _=H.get(M.timestamp);if(_===void 0)continue;R.data[_]={timestamp:M.timestamp,avgTtftSeconds:M.avgTtft!==null?M.avgTtft/1000:null,avgTokensPerSecond:M.avgTokensPerSecond,requests:M.requests}}return F}function SP(Q,J){let X=Q.totalNegation+Q.totalRepetition+Q.totalBlame,q=new Map;for(let K of J){let H=`${K.model}::${K.provider}`,F=q.get(H),M=K.yelling+K.profanity+K.anguish+K.negation+K.repetition+K.blame;if(F)F.score+=M;else q.set(H,{model:K.model,provider:K.provider,score:M})}let N=null;for(let K of q.values())if(!N||K.score>N.score)N=K;return{totalMessages:Q.totalMessages,totalYelling:Q.totalYelling,totalProfanity:Q.totalProfanity,totalAnguish:Q.totalAnguish,totalFrustration:X,highestFrictionModel:N}}function jP(Q){let J=[...Q].sort((N,K)=>{if(K.totalCost!==N.totalCost)return K.totalCost-N.totalCost;return K.totalRequests-N.totalRequests}),X=J.reduce((N,K)=>Math.max(N,K.totalCost),0),q=J.reduce((N,K)=>Math.max(N,K.totalRequests),0);return J.map((N)=>({...N,costPercentage:X>0?N.totalCost/X*100:0,requestsPercentage:q>0?N.totalRequests/q*100:0}))}function DP(Q){let J=Q.reduce((X,q)=>Math.max(X,q.calls),0);return Q.map((X)=>({...X,errorRate:X.calls>0?X.errors/X.calls:0,callsPercentage:J>0?X.calls/J*100:0}))}var EX=n(U0(),1);function j$({message:Q="No data available",icon:J=cQ,className:X=""}){return EX.jsxDEV("div",{className:`stats-empty-state ${X}`,children:[EX.jsxDEV(J,{size:24,className:"stats-empty-state-icon","aria-hidden":"true"},void 0,!1,void 0,this),EX.jsxDEV("p",{className:"stats-empty-state-message",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var D$=n(U0(),1);function vP({error:Q,onRetry:J,className:X=""}){return D$.jsxDEV("div",{className:`stats-error-state ${X}`,children:D$.jsxDEV("div",{className:"stats-error-state-content",children:[D$.jsxDEV("h4",{className:"stats-error-state-title",children:"Failed to load data"},void 0,!1,void 0,this),Q&&D$.jsxDEV("p",{className:"stats-error-state-message",children:Q.message},void 0,!1,void 0,this),J&&D$.jsxDEV("button",{type:"button",onClick:J,className:"stats-button stats-button-secondary stats-error-state-btn",children:"Retry"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var bP=n(U0(),1);function N6({variant:Q="text",width:J,height:X,className:q=""}){let N={width:J!==void 0?typeof J==="number"?`${J}px`:J:void 0,height:X!==void 0?typeof X==="number"?`${X}px`:X:void 0};return bP.jsxDEV("div",{className:`stats-skeleton ${q}`,"data-variant":Q,style:N},void 0,!1,void 0,this)}var j6=n(U0(),1);function g1({loading:Q,error:J,data:X,empty:q=!1,emptyText:N="No data available",fallback:K,onRetry:H,children:F}){if(J&&X===null)return j6.jsxDEV(vP,{error:J,onRetry:H},void 0,!1,void 0,this);if(Q&&X===null){if(K)return j6.jsxDEV(j6.Fragment,{children:K},void 0,!1,void 0,this);return j6.jsxDEV("div",{className:"stats-boundary-skeleton",children:[j6.jsxDEV(N6,{variant:"text",width:"60%",height:24,className:"mb-4"},void 0,!1,void 0,this),j6.jsxDEV(N6,{variant:"rect",width:"100%",height:160,className:"mb-4"},void 0,!1,void 0,this),j6.jsxDEV(N6,{variant:"text",width:"80%",height:20,className:"mb-2"},void 0,!1,void 0,this),j6.jsxDEV(N6,{variant:"text",width:"40%",height:20},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}if(!Q&&(q||X===null))return j6.jsxDEV(j$,{message:N},void 0,!1,void 0,this);return j6.jsxDEV(j6.Fragment,{children:F},void 0,!1,void 0,this)}var U6=n(U0(),1);function K6({columns:Q,data:J,keyExtractor:X,onRowClick:q,renderMobileCard:N,emptyText:K="No data available"}){let H=(F,M)=>{if(q&&(F.key==="Enter"||F.key===" "))F.preventDefault(),q(M)};if(J.length===0)return U6.jsxDEV("div",{className:"stats-table-empty",children:K},void 0,!1,void 0,this);return U6.jsxDEV("div",{className:"stats-table-wrapper",children:[N&&U6.jsxDEV("div",{className:"stats-table-mobile-only",children:U6.jsxDEV("div",{className:"stats-table-mobile-list",children:J.map((F)=>{let M=String(X(F));return U6.jsxDEV("div",{className:"stats-table-mobile-card-wrapper",children:N(F,q?()=>q(F):void 0)},M,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this),U6.jsxDEV("div",{className:N?"stats-table-desktop-only":"stats-table-container",children:U6.jsxDEV("table",{className:"stats-table",children:[U6.jsxDEV("thead",{children:U6.jsxDEV("tr",{children:Q.map((F)=>{let M=["stats-table-th",F.numeric?"stats-text-right":"stats-text-left",F.className||""].filter(Boolean).join(" ");return U6.jsxDEV("th",{className:M,children:F.header},F.key,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this),U6.jsxDEV("tbody",{children:J.map((F)=>{let M=String(X(F)),w=typeof q==="function",R=["stats-table-tr",w?"stats-table-tr-clickable":""].filter(Boolean).join(" ");return U6.jsxDEV("tr",{className:R,onClick:w?()=>q(F):void 0,onKeyDown:w?(_)=>H(_,F):void 0,tabIndex:w?0:void 0,role:w?"button":void 0,children:Q.map((_)=>{let P=["stats-table-td",_.numeric?"stats-text-right":"stats-text-left",_.className||""].filter(Boolean).join(" ");return U6.jsxDEV("td",{className:P,children:_.render?_.render(F):F[_.key]},_.key,!1,void 0,this)})},M,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var Q7=n(T1(),1),i6=n(U0(),1);function hK({data:Q,title:J,initialCollapsed:X=!1}){let[q,N]=Q7.useState(X),[K,H]=Q7.useState(!1),F=Q7.useRef(0),M=JSON.stringify(Q,null,2);return Q7.useEffect(()=>()=>window.clearTimeout(F.current),[]),i6.jsxDEV("div",{className:"stats-json-block",children:[i6.jsxDEV("div",{className:"stats-json-block-header",onClick:()=>N(!q),onKeyDown:(_)=>{if(_.key==="Enter"||_.key===" ")_.preventDefault(),N(!q)},tabIndex:0,role:"button","aria-expanded":!q,children:[i6.jsxDEV("span",{className:"stats-json-block-title",children:J||"JSON"},void 0,!1,void 0,this),i6.jsxDEV("div",{className:"stats-json-actions",children:[i6.jsxDEV("button",{type:"button",className:"stats-json-copy-btn",onClick:async(_)=>{_.stopPropagation();try{await navigator.clipboard.writeText(M),H(!0),window.clearTimeout(F.current),F.current=window.setTimeout(()=>H(!1),1500)}catch{}},"aria-label":K?"Copied to clipboard":"Copy JSON to clipboard",children:[K?i6.jsxDEV(fQ,{size:13},void 0,!1,void 0,this):i6.jsxDEV(uQ,{size:13},void 0,!1,void 0,this),K?"Copied":"Copy"]},void 0,!0,void 0,this),i6.jsxDEV("span",{className:"stats-json-block-toggle-indicator","data-collapsed":q,children:q?"▶ Show":"▼ Hide"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!q&&i6.jsxDEV("div",{className:"stats-json-block-content-wrapper",children:i6.jsxDEV("pre",{className:"stats-json-block-content",children:i6.jsxDEV("code",{children:M},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var s0=n(U0(),1);function kP({stats:Q}){let J=AX(Q);return s0.jsxDEV("div",{className:"stats-metric-cluster",children:[s0.jsxDEV("div",{className:"stats-metric-primary-grid",children:[s0.jsxDEV("div",{className:"stats-metric-card primary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Total Cost"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:R1(Q.totalCost,Q.totalCost>0&&Q.totalCost<0.01?4:2)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card primary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Requests"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:S0(Q.totalRequests)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card primary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Cache Rate"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:d1(Q.cacheRate)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card primary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Error Rate"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:d1(Q.errorRate)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-secondary-grid",children:[s0.jsxDEV("div",{className:"stats-metric-card secondary",title:"Conversation input not served from cache",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Uncached Input"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:N1(Q.totalInputTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",title:"Conversation input read from the prompt cache",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Cache Read"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:N1(Q.totalCacheReadTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Output Tokens"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:N1(Q.totalOutputTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",title:"Uncached input + cache reads + cache writes + output",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Conversation Total"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:N1(J)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Premium Requests"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:S0(Q.totalPremiumRequests)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Tokens/s"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:OX(Q.avgTokensPerSecond)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Avg Latency"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:y5(Q.avgDuration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Avg TTFT"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:y5(Q.avgTtft)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var l8=n(U0(),1);function q1({title:Q,subtitle:J,actions:X,children:q,className:N="",...K}){return l8.jsxDEV("div",{className:`stats-panel ${N}`,...K,children:[(Q||J||X)&&l8.jsxDEV("div",{className:"stats-panel-header",children:[l8.jsxDEV("div",{className:"stats-panel-header-titles",children:[Q&&l8.jsxDEV("h3",{className:"stats-panel-title",children:Q},void 0,!1,void 0,this),J&&l8.jsxDEV("p",{className:"stats-panel-subtitle",children:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&l8.jsxDEV("div",{className:"stats-panel-actions",children:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this),l8.jsxDEV("div",{className:"stats-panel-body",children:q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var a4=n(T1(),1);var fP=n(U0(),1);function V5({variant:Q,children:J,className:X=""}){return fP.jsxDEV("span",{className:`stats-status-pill ${X}`,"data-variant":Q,children:J},void 0,!1,void 0,this)}var w0=n(U0(),1);function yP({id:Q,onClose:J}){let[X,q]=a4.useState(null),[N,K]=a4.useState(!1),[H,F]=a4.useState(null),M=a4.useRef(null),w=a4.useRef(null);if(a4.useEffect(()=>{if(Q===null){q(null);return}M.current=document.activeElement,K(!0),F(null),q(null);let _=new AbortController;return WL(Q,_.signal).then((P)=>{if(_.signal.aborted)return;q(P),setTimeout(()=>w.current?.focus(),50)}).catch((P)=>{if(_.signal.aborted)return;F(P instanceof Error?P:Error(String(P)))}).finally(()=>{if(!_.signal.aborted)K(!1)}),()=>_.abort()},[Q]),a4.useEffect(()=>{if(Q===null)return;let _=(P)=>{if(P.key==="Escape")J()};return window.addEventListener("keydown",_),()=>{if(window.removeEventListener("keydown",_),M.current)M.current.focus()}},[Q,J]),Q===null)return null;return w0.jsxDEV("div",{className:"stats-drawer-overlay",onClick:(_)=>{if(_.target===_.currentTarget)J()},role:"presentation",children:w0.jsxDEV("div",{className:"stats-drawer",role:"dialog","aria-modal":"true","aria-label":"Request details",children:[w0.jsxDEV("div",{className:"stats-drawer-header",children:[w0.jsxDEV("div",{className:"stats-drawer-header-left",children:[w0.jsxDEV("h2",{className:"stats-drawer-title",children:"Request Details"},void 0,!1,void 0,this),X&&w0.jsxDEV("span",{className:"stats-drawer-id",children:["ID: ",Q]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("button",{ref:w,type:"button",onClick:J,className:"stats-drawer-close-btn","aria-label":"Close request details",children:w0.jsxDEV(s9,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-body",children:[N&&w0.jsxDEV("div",{className:"stats-drawer-loading",children:[w0.jsxDEV(N6,{variant:"text",width:"60%",height:24,className:"mb-4"},void 0,!1,void 0,this),w0.jsxDEV(N6,{variant:"rect",width:"100%",height:80,className:"mb-4"},void 0,!1,void 0,this),w0.jsxDEV(N6,{variant:"rect",width:"100%",height:120,className:"mb-4"},void 0,!1,void 0,this),w0.jsxDEV(N6,{variant:"rect",width:"100%",height:200},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H&&w0.jsxDEV("div",{className:"stats-drawer-error",children:[w0.jsxDEV("p",{className:"stats-drawer-error-title",children:"Failed to load request details"},void 0,!1,void 0,this),w0.jsxDEV("p",{className:"stats-drawer-error-message",children:H.message},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&w0.jsxDEV("div",{className:"stats-drawer-content",children:[w0.jsxDEV("div",{className:"stats-drawer-status-card",children:[w0.jsxDEV("div",{className:"stats-drawer-status-row",children:[w0.jsxDEV("div",{children:[w0.jsxDEV("div",{className:"stats-drawer-model",children:X.model},void 0,!1,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-provider",children:X.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV(V5,{variant:X.errorMessage?"danger":"success",children:X.errorMessage?"Error":"Success"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X.errorMessage&&w0.jsxDEV("div",{className:"stats-drawer-error-block",children:[w0.jsxDEV("div",{className:"stats-drawer-error-label",children:"Error Message"},void 0,!1,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-error-text",children:X.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metrics-grid",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(n9,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Cost"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:R1(X.usage.cost.total,4)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(tQ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Premium"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:S0(X.usage.premiumRequests??0)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(pQ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Total Tokens"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:S0(X.usage.totalTokens)},void 0,!1,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-sub",children:[S0(X.usage.input)," in · ",S0(X.usage.output)," out"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(hQ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Duration"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:y5(X.duration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(QJ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"TTFT"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:y5(X.ttft)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X.duration&&X.usage.output>0&&w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(dQ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Throughput"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:(X.usage.output*1000/X.duration).toFixed(1)},void 0,!1,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-sub",children:"tokens/second"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-json-blocks",children:[w0.jsxDEV(hK,{data:X.output,title:"Output Payload",initialCollapsed:!1},void 0,!1,void 0,this),w0.jsxDEV(hK,{data:X,title:"Raw Request Metadata",initialCollapsed:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var uK=n(U0(),1);function J7({options:Q,value:J,onChange:X,className:q=""}){return uK.jsxDEV("div",{className:`stats-segmented-control ${q}`,role:"radiogroup",children:Q.map((N)=>{let K=N.value===J;return uK.jsxDEV("button",{type:"button",role:"radio","aria-checked":K,"data-active":K?"true":"false",className:"stats-segmented-control-btn",title:N.title,onClick:()=>X(N.value),children:N.label},String(N.value),!1,void 0,this)})},void 0,!1,void 0,this)}var R0=n(U0(),1);function dP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["behavior",J,X],(H)=>RL(J,H),{pollMs:30000,enabled:Q});return R0.jsxDEV("div",{className:"stats-route-container space-y-6",children:R0.jsxDEV(g1,{loading:K,error:N,data:q,children:q&&R0.jsxDEV(R0.Fragment,{children:[R0.jsxDEV(kD,{overall:q.overall,behaviorSeries:q.behaviorSeries},void 0,!1,void 0,this),R0.jsxDEV(fD,{behaviorSeries:q.behaviorSeries},void 0,!1,void 0,this),R0.jsxDEV(yD,{models:q.byModel,behaviorSeries:q.behaviorSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function SX(Q,J){if(J<=0)return;return`${(Q/J).toFixed(2)} / msg`}function kD({overall:Q,behaviorSeries:J}){let X=U5.useMemo(()=>SP(Q,J),[Q,J]),q=Q.totalMessages,N=[{label:"User Messages",value:S0(Q.totalMessages),sub:q>0?"in range":void 0},{label:"Yelling (CAPS)",value:S0(Q.totalYelling),sub:SX(Q.totalYelling,q)},{label:"Profanity Hits",value:S0(Q.totalProfanity),sub:SX(Q.totalProfanity,q)},{label:"Anguish Signals",value:S0(Q.totalAnguish),sub:SX(Q.totalAnguish,q)},{label:"Friction Signals",value:S0(X.totalFrustration),sub:SX(X.totalFrustration,q)},{label:"Highest Friction Model",value:X.highestFrictionModel?.model??"—",sub:X.highestFrictionModel?`${S0(X.highestFrictionModel.score)} hits`:void 0}];return R0.jsxDEV("div",{className:"grid grid-cols-2 md:grid-cols-6 gap-4",children:N.map((K)=>R0.jsxDEV(q1,{className:"stats-behavior-summary-card py-3 px-4",children:[R0.jsxDEV("p",{className:"text-xs stats-text-muted mb-1 font-medium truncate",children:K.label},void 0,!1,void 0,this),R0.jsxDEV("p",{className:"text-lg font-bold stats-text-primary truncate",title:K.value,children:K.value},void 0,!1,void 0,this),K.sub&&R0.jsxDEV("p",{className:"text-xs stats-text-muted mt-0.5",children:K.sub},void 0,!1,void 0,this)]},K.label,!0,void 0,this))},void 0,!1,void 0,this)}var xK=[{value:"yelling",label:"CAPS",title:"Yelling (CAPS)"},{value:"profanity",label:"Profanity",title:"Profanity"},{value:"anguish",label:"Anguish",title:"Anguish (!!!, nooo, ugh, dude, ':(')"},{value:"negation",label:"Negation",title:"Negation (no/nope/wrong, makes no sense)"},{value:"repetition",label:"Repetition",title:"Repetition (i meant, still doesnt)"},{value:"blame",label:"Blame",title:"Blame (you didnt, why did you, stop X-ing)"},{value:"frustration",label:"Frustration",title:"Frustration (neg + rep + blame)"},{value:"total",label:"All",title:"All signals combined"}];function gP(Q){if(!Number.isFinite(Q))return"-";if(Q===0)return"0%";if(Math.abs(Q)<1)return`${Q.toFixed(1)}%`;return`${Q.toFixed(0)}%`}function hP(Q,J){if(J==="frustration")return Q.negation+Q.repetition+Q.blame;if(J==="total")return Q.yelling+Q.profanity+Q.anguish+Q.negation+Q.repetition+Q.blame;return Q[J]}function uP(Q,J){if(J<=0)return 0;return Q/J*100}function fD({behaviorSeries:Q}){let[J,X]=U5.useState(!1),[q,N]=U5.useState("total"),K=R5(),H=o1[K],F=U5.useMemo(()=>{if(J)return S$(Q,{rankWeight:(h)=>h.messages,initBucket:()=>({hits:0,messages:0}),accumulate:(h,p)=>{h.hits+=hP(p,q),h.messages+=p.messages},bucketToValue:(h)=>uP(h.hits,h.messages)});let D=xK.find((h)=>h.value===q)?.title??"Hits";return WX(Q,D,{initBucket:()=>({hits:0,messages:0}),accumulate:(h,p)=>{h.hits+=hP(p,q),h.messages+=p.messages},bucketToValue:(h)=>uP(h.hits,h.messages)})},[Q,J,q]),M=U5.useMemo(()=>{return s4({chartTheme:H,showLegend:J,defaultLabel:"Hits",formatValue:gP})},[H,J]),{sharedScaleBase:w,yScale:R}=U5.useMemo(()=>{return o4({chartTheme:H,formatY:gP})},[H]),_=U5.useMemo(()=>{return xK.find((D)=>D.value===q)?.title??""},[q]),P=U5.useMemo(()=>{if(!J)return null;return{labels:F.labels,datasets:p8(F,(D)=>E$(H1[D%H1.length]))}},[F,J]),I=U5.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:M,scales:{x:w,y:R}}},[M,w,R]),A=U5.useMemo(()=>{if(J)return null;return{labels:F.labels,datasets:p8(F,(D)=>$7(H1[D%H1.length]))}},[F,J]),V=U5.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:M,scales:{x:{...w,stacked:!0},y:{...R,stacked:!0}},layout:{padding:{top:8}}}},[M,w,R]),O=[{value:!1,label:"All Models"},{value:!0,label:"By Model"}];return R0.jsxDEV(q1,{title:"User Friction Signals",subtitle:`${_} as % of user messages per day`,actions:R0.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[R0.jsxDEV(J7,{options:xK.map((D)=>({value:D.value,label:D.label,title:D.title})),value:q,onChange:N},void 0,!1,void 0,this),R0.jsxDEV(J7,{options:O,value:J,onChange:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this),children:R0.jsxDEV("div",{className:"h-[300px]",children:F.labels.length===0?R0.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No friction signal data available"},void 0,!1,void 0,this):J&&P?R0.jsxDEV(f5,{data:P,options:I},void 0,!1,void 0,this):A?R0.jsxDEV(d8,{data:A,options:V},void 0,!1,void 0,this):null},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var xP="2fr 0.9fr 0.8fr 0.8fr 0.8fr 0.9fr 0.8fr 140px 40px";function mP(Q){if(Q.totalMessages===0)return 0;return(Q.totalYelling+Q.totalProfanity+Q.totalAnguish+Q.totalNegation+Q.totalRepetition+Q.totalBlame)/Q.totalMessages}function v$(Q,J){if(J===0)return"-";let X=Q/J*100;if(X===0)return"0%";if(X<1)return`${X.toFixed(1)}%`;return`${X.toFixed(0)}%`}function yD({models:Q,behaviorSeries:J}){let[X,q]=U5.useState(null),N=R5(),K=o1[N],H=U5.useMemo(()=>hD(J),[J]),F=U5.useMemo(()=>{return[...Q].sort((M,w)=>{if(w.totalMessages!==M.totalMessages)return w.totalMessages-M.totalMessages;return mP(w)-mP(M)})},[Q]);return R0.jsxDEV(zX,{title:"Behavior Signals by Model",subtitle:"Rates are per user message",children:[R0.jsxDEV(_X,{gridTemplate:xP,columns:[{label:"Model"},{label:"Messages",align:"right"},{label:"CAPS %",align:"right"},{label:"Profanity %",align:"right"},{label:"Anguish %",align:"right"},{label:"Frustration %",align:"right"},{label:"Hits %",align:"right"},{label:"Trend",align:"center"}]},void 0,!1,void 0,this),R0.jsxDEV(LX,{children:[F.map((M,w)=>{let R=`${M.model}::${M.provider}`,_=H.get(R)?.data??[],P=H1[w%H1.length],I=X===R,A=M.totalNegation+M.totalRepetition+M.totalBlame,V=M.totalYelling+M.totalProfanity+M.totalAnguish+A;return R0.jsxDEV(TX,{gridTemplate:xP,isExpanded:I,onToggle:()=>q(I?null:R),cells:[R0.jsxDEV(PX,{model:M.model,provider:M.provider},"name",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:S0(M.totalMessages)},"messages",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(M.totalYelling,M.totalMessages)},"caps",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(M.totalProfanity,M.totalMessages)},"profanity",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(M.totalAnguish,M.totalMessages)},"anguish",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(A,M.totalMessages)},"frustration",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(V,M.totalMessages)},"hits",!1,void 0,this)],trendCell:_.length===0?R0.jsxDEV(CX,{},void 0,!1,void 0,this):R0.jsxDEV(wX,{timestamps:_.map((O)=>O.timestamp),values:_.map((O)=>O.total),color:P},void 0,!1,void 0,this),expandedContent:R0.jsxDEV("div",{className:"grid gap-4",style:{gridTemplateColumns:"220px 1fr"},children:[R0.jsxDEV("div",{className:"space-y-4 text-sm",children:[R0.jsxDEV(G7,{label:"Yelling (CAPS)",total:M.totalYelling,messages:M.totalMessages,valueClass:"text-[#ed4abf]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Profanity",total:M.totalProfanity,messages:M.totalMessages,valueClass:"text-[#ff6b7d]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Anguish (!!!, nooo, dude, ..)",total:M.totalAnguish,messages:M.totalMessages,valueClass:"text-[#9b4dff]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Negation (no/nope/wrong)",total:M.totalNegation,messages:M.totalMessages,valueClass:"text-[#5ad8e6]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Repetition (i meant, still doesnt)",total:M.totalRepetition,messages:M.totalMessages,valueClass:"text-[#5ad8e6]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Blame (you didnt, stop X-ing)",total:M.totalBlame,messages:M.totalMessages,valueClass:"text-[#5ad8e6]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Avg chars / msg",total:M.totalChars,messages:M.totalMessages,valueClass:"stats-text-secondary",mode:"average"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),R0.jsxDEV("div",{className:"h-[200px]",children:_.length===0?R0.jsxDEV(IX,{},void 0,!1,void 0,this):R0.jsxDEV(gD,{data:_,chartTheme:K},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},R,!1,void 0,this)}),F.length===0?R0.jsxDEV("div",{className:"border-t border-[var(--border-subtle)] px-5 py-8 text-center text-[var(--text-muted)] text-sm",children:"No user behavior recorded for this range yet."},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function G7({label:Q,total:J,messages:X,valueClass:q,mode:N="rate"}){let K=N==="rate"?"% of msgs":"Per msg",H=U5.useMemo(()=>{if(X===0)return"-";return N==="rate"?v$(J,X):(J/X).toFixed(0)},[J,X,N]);return R0.jsxDEV("div",{children:[R0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-1",children:Q},void 0,!1,void 0,this),R0.jsxDEV("div",{className:"space-y-0.5 text-[var(--text-secondary)]",children:[R0.jsxDEV("div",{className:"flex items-center justify-between",children:[R0.jsxDEV("span",{className:"stats-text-muted text-xs",children:"Total"},void 0,!1,void 0,this),R0.jsxDEV("span",{className:`font-mono text-xs ${q}`,children:S0(J)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),R0.jsxDEV("div",{className:"flex items-center justify-between",children:[R0.jsxDEV("span",{className:"stats-text-muted text-xs",children:K},void 0,!1,void 0,this),R0.jsxDEV("span",{className:"font-mono text-xs stats-text-primary",children:H},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var jX={yelling:"#ed4abf",profanity:"#ff6b7d",anguish:"#9b4dff",frustration:"#5ad8e6"};function gD({data:Q,chartTheme:J}){let X=U5.useMemo(()=>{return{labels:Q.map((N)=>F4(new Date(N.timestamp),"MMM d")),datasets:[{label:"CAPS",data:Q.map((N)=>N.yelling),...y2(jX.yelling)},{label:"Profanity",data:Q.map((N)=>N.profanity),...y2(jX.profanity)},{label:"Anguish",data:Q.map((N)=>N.anguish),...y2(jX.anguish)},{label:"Frustration",data:Q.map((N)=>N.frustration),...y2(jX.frustration)}]}},[Q]),q=U5.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,plugins:RX(J),scales:TP(J)}},[J]);return R0.jsxDEV(f5,{data:X,options:q},void 0,!1,void 0,this)}function hD(Q){if(Q.length===0)return new Map;let J=[...new Set(Q.map((N)=>N.timestamp))].sort((N,K)=>N-K),X=new Map;for(let N of Q){let K=`${N.model}::${N.provider}`,H=X.get(K);if(!H)H=new Map,X.set(K,H);let F=H.get(N.timestamp)??{timestamp:N.timestamp,yelling:0,profanity:0,anguish:0,frustration:0,total:0};F.yelling+=N.yelling,F.profanity+=N.profanity,F.anguish+=N.anguish,F.frustration+=N.negation+N.repetition+N.blame,F.total=F.yelling+F.profanity+F.anguish+F.frustration,H.set(N.timestamp,F)}let q=new Map;for(let[N,K]of X){let H=J.map((F)=>K.get(F)??{timestamp:F,yelling:0,profanity:0,anguish:0,frustration:0,total:0});q.set(N,{data:H})}return q}var t6=n(T1(),1);var K5=n(U0(),1);function pP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["costs",J,X],(H)=>FL(J,H),{pollMs:30000,enabled:Q});return K5.jsxDEV("div",{className:"stats-route-container space-y-6",children:K5.jsxDEV(g1,{loading:K,error:N,data:q,children:q&&K5.jsxDEV(K5.Fragment,{children:[K5.jsxDEV(uD,{costSeries:q.costSeries},void 0,!1,void 0,this),K5.jsxDEV(dD,{costSeries:q.costSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function uD({costSeries:Q}){let J=t6.useMemo(()=>AP(Q),[Q]),X=[{label:"Total Cost",value:R1(J.totalCost)},{label:"Average / Day",value:R1(J.avgDailyCost)},{label:"Top Model",value:J.topModelName||"—",sub:J.topModelName?R1(J.topModelCost):void 0}];return K5.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:X.map((q)=>K5.jsxDEV(q1,{className:"stats-cost-overview-card py-4 px-5",children:[K5.jsxDEV("p",{className:"text-xs stats-text-muted mb-1 font-medium uppercase tracking-wider",children:q.label},void 0,!1,void 0,this),K5.jsxDEV("p",{className:"text-2xl font-bold stats-text-primary truncate",title:q.value,children:q.value},void 0,!1,void 0,this),q.sub&&K5.jsxDEV("p",{className:"text-xs stats-text-muted mt-1 font-medium",children:["Total spent: ",q.sub]},void 0,!0,void 0,this)]},q.label,!0,void 0,this))},void 0,!1,void 0,this)}var xD={dark:"rgba(248, 250, 252, 0.7)",light:"rgba(15, 23, 42, 0.6)"};function mD(Q){return{id:"costBarLabels",afterDatasetsDraw(J){let{ctx:X}=J;if(!J.data.datasets[0])return;let N=J.getDatasetMeta(0);X.save(),X.font="11px system-ui, sans-serif",X.fillStyle=Q,X.textAlign="center",X.textBaseline="bottom";for(let K of N.data){let H=K.$context.parsed.y;if(!H)continue;let F=`$${Math.round(H)}`,{x:M,y:w}=K.getProps(["x","y"],!0);X.fillText(F,M,w-3)}X.restore()}}}function dD({costSeries:Q}){let[J,X]=t6.useState(!1),q=R5(),N=o1[q],K=t6.useMemo(()=>{if(J)return S$(Q,{rankWeight:(V)=>V.cost,initBucket:()=>({total:0}),accumulate:(V,O)=>{V.total+=O.cost},bucketToValue:(V)=>V.total});return WX(Q,"Cost",{initBucket:()=>({total:0}),accumulate:(V,O)=>{V.total+=O.cost},bucketToValue:(V)=>V.total})},[Q,J]),H=t6.useMemo(()=>{return s4({chartTheme:N,showLegend:J,defaultLabel:"Cost",formatValue:(V)=>`$${V.toFixed(2)}`,footer:(V)=>{if(!J||V.length<2)return;return`Total: $${V.reduce((D,h)=>D+(h.parsed.y??0),0).toFixed(2)}`}})},[N,J]),{sharedScaleBase:F,yScale:M}=t6.useMemo(()=>{return o4({chartTheme:N,formatY:(V)=>`$${Math.round(V)}`})},[N]),w=t6.useMemo(()=>{return mD(xD[q])},[q]),R=t6.useMemo(()=>{if(!J)return null;return{labels:K.labels,datasets:p8(K,(V)=>E$(H1[V%H1.length]))}},[K,J]),_=t6.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:H,scales:{x:F,y:M}}},[H,F,M]),P=t6.useMemo(()=>{if(J)return null;return{labels:K.labels,datasets:p8(K,(V)=>$7(H1[V%H1.length]))}},[K,J]),I=t6.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{...H,costBarLabels:{}},scales:{x:{...F,stacked:!0},y:{...M,stacked:!0}},layout:{padding:{top:24}}}},[H,F,M]);return K5.jsxDEV(q1,{title:"Daily Cost",subtitle:"API spending over time",actions:K5.jsxDEV(J7,{options:[{value:!1,label:"All Models"},{value:!0,label:"By Model"}],value:J,onChange:X},void 0,!1,void 0,this),children:K5.jsxDEV("div",{className:"h-[300px]",children:K.labels.length===0?K5.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No cost data available"},void 0,!1,void 0,this):J&&R?K5.jsxDEV(f5,{data:R,options:_},void 0,!1,void 0,this):P?K5.jsxDEV(d8,{data:P,options:I,plugins:[w]},void 0,!1,void 0,this):null},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var cP=n(T1(),1);var D1=n(U0(),1);function lP({active:Q,range:J,refreshTrigger:X,onRequestClick:q}){let{data:N,error:K,loading:H}=a1(["recent-errors-dense",J,X],(w)=>ML(J,50,w),{pollMs:30000,enabled:Q}),F=cP.useMemo(()=>[{key:"model",header:"Model",render:(w)=>D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-font-medium stats-text-primary",children:w.model},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:w.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"timestamp",header:"Time",render:(w)=>Y6(w.timestamp)},{key:"errorMessage",header:"Error Message",render:(w)=>D1.jsxDEV("div",{className:"stats-text-xs stats-text-danger stats-truncate stats-max-w-md stats-font-mono",title:w.errorMessage||"",children:w.errorMessage||"Unknown error"},void 0,!1,void 0,this)},{key:"tokens",header:"Tokens",numeric:!0,render:(w)=>S0(w.usage.totalTokens)},{key:"cost",header:"Cost",numeric:!0,render:(w)=>R1(w.usage.cost.total,4)}],[]);return D1.jsxDEV("div",{className:"stats-route-container",children:D1.jsxDEV(q1,{title:"Recent Errors",subtitle:"Up to 50 most recent failed requests in the stats database",children:D1.jsxDEV(g1,{loading:H,error:K,data:N,emptyText:"No recent failures in the local stats database",children:D1.jsxDEV(K6,{columns:F,data:N||[],keyExtractor:(w)=>w.id||`${w.sessionFile}-${w.entryId}`,onRowClick:(w)=>w.id&&q(w.id),renderMobileCard:(w,R)=>D1.jsxDEV("div",{className:"stats-mobile-card stats-border-danger",onClick:R,children:[D1.jsxDEV("div",{className:"stats-mobile-card-header",children:[D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-font-semibold stats-text-primary",children:w.model},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:w.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D1.jsxDEV(V5,{variant:"danger",children:"Failed"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D1.jsxDEV("div",{className:"stats-mobile-card-grid",children:[D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Time"},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-mobile-card-value",children:Y6(w.timestamp)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cost"},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-mobile-card-value",children:R1(w.usage.cost.total,4)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Tokens"},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-mobile-card-value",children:S0(w.usage.totalTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w.errorMessage&&D1.jsxDEV("div",{className:"stats-mobile-card-error mt-2 stats-font-mono",children:w.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this),emptyText:"No recent failures in the local stats database"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var DX=n(T1(),1);var O0=n(U0(),1);function rP({active:Q,range:J,refreshTrigger:X}){let[q,N]=DX.useState(null),{data:K,error:H,loading:F}=a1(["gain",J,X,q],(M)=>_L(J,q,M),{pollMs:30000,enabled:Q});return O0.jsxDEV("div",{className:"stats-route-container space-y-6",children:O0.jsxDEV(g1,{loading:F,error:H,data:K,children:K&&O0.jsxDEV(O0.Fragment,{children:[O0.jsxDEV(pD,{projects:K.projects,selected:q,onChange:N},void 0,!1,void 0,this),O0.jsxDEV(cD,{overall:K.overall},void 0,!1,void 0,this),O0.jsxDEV(rD,{bySource:K.bySource},void 0,!1,void 0,this),O0.jsxDEV(sD,{timeSeries:K.timeSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function pD({projects:Q,selected:J,onChange:X}){if(Q.length===0)return null;return O0.jsxDEV("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[O0.jsxDEV("span",{className:"stats-text-secondary",style:{fontSize:"0.875rem",whiteSpace:"nowrap"},children:"Project"},void 0,!1,void 0,this),O0.jsxDEV("select",{className:"stats-select",value:J??"",onChange:(q)=>X(q.target.value||null),style:{maxWidth:"480px",flex:1},children:[O0.jsxDEV("option",{value:"",children:"All projects"},void 0,!1,void 0,this),Q.map((q)=>O0.jsxDEV("option",{value:q,children:q},q,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function cD({overall:Q}){return O0.jsxDEV(q1,{title:"Overall Gain",subtitle:"Aggregate snapcompact savings",children:O0.jsxDEV("div",{className:"stats-metric-primary-grid",children:[O0.jsxDEV("div",{className:"stats-metric-card primary",children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Saved Tokens"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",children:N1(Q.savedTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{className:"stats-metric-card primary",children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Saved Bytes"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",children:gK(Q.savedBytes)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{className:"stats-metric-card primary",children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Reduction"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",children:Q.reductionPercent!==null?d1(Q.reductionPercent):"—"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{className:"stats-metric-card primary",children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Total Hits"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",children:S0(Q.hits)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function lD({title:Q,totals:J}){return O0.jsxDEV("div",{className:"stats-metric-card secondary",style:{flex:1},children:[O0.jsxDEV("div",{className:"stats-metric-label",style:{fontWeight:600,marginBottom:8},children:Q},void 0,!1,void 0,this),O0.jsxDEV("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[O0.jsxDEV("div",{children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Saved Tokens"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",style:{fontSize:"1rem"},children:N1(J.savedTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Saved Bytes"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",style:{fontSize:"1rem"},children:gK(J.savedBytes)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Hits"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",style:{fontSize:"1rem"},children:S0(J.hits)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Reduction"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",style:{fontSize:"1rem"},children:J.reductionPercent!==null?d1(J.reductionPercent):"—"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function rD({bySource:Q}){return O0.jsxDEV(q1,{title:"By Source",subtitle:"Savings breakdown per subsystem",children:O0.jsxDEV("div",{style:{display:"flex",gap:16,flexWrap:"wrap"},children:O0.jsxDEV(lD,{title:"Snapcompact",totals:Q.snapcompact},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var nD={snapcompact:"rgb(34, 197, 94)"};function sD({timeSeries:Q}){let J=R5(),X=o1[J],{data:q,options:N}=DX.useMemo(()=>{let K=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",timeZone:"UTC"}),F={labels:Q.map((_)=>K.format(new Date(`${_.date}T00:00:00.000Z`))),datasets:[{label:"Snapcompact",data:Q.map((_)=>_.snapcompact),...E$(nD.snapcompact)}]},{sharedScaleBase:M,yScale:w}=o4({chartTheme:X,formatY:(_)=>N1(_)}),R={responsive:!0,maintainAspectRatio:!1,plugins:s4({chartTheme:X,showLegend:!0,defaultLabel:"Tokens Saved",formatValue:N1}),scales:{x:{...M,stacked:!0},y:{...w,stacked:!0}}};return{data:F,options:R}},[Q,X]);return O0.jsxDEV(q1,{title:"Savings Over Time",subtitle:"Daily token savings",children:O0.jsxDEV("div",{style:{height:240},children:Q.length===0?O0.jsxDEV("div",{className:"stats-table-empty",children:"No time series data yet"},void 0,!1,void 0,this):O0.jsxDEV(f5,{data:q,options:N},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var i4=n(T1(),1);var j0=n(U0(),1);function sP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["models",J,X],(H)=>HL(J,H),{pollMs:30000,enabled:Q});return j0.jsxDEV("div",{className:"stats-route-container space-y-6",children:j0.jsxDEV(g1,{loading:K,error:N,data:q,children:q&&j0.jsxDEV(j0.Fragment,{children:[j0.jsxDEV(oD,{modelSeries:q.modelSeries,timeRange:J},void 0,!1,void 0,this),j0.jsxDEV(iD,{models:q.byModel,performanceSeries:q.modelPerformanceSeries,timeRange:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function oD({modelSeries:Q,timeRange:J}){let X=R5(),q=o1[X],N=Z7(J),K=i4.useMemo(()=>aD(Q),[Q]),H=i4.useMemo(()=>{return{labels:K.data.map((M)=>NJ(M.timestamp,J)),datasets:K.series.map((M,w)=>({label:M,data:K.data.map((R)=>R[M]??0),borderColor:H1[w%H1.length],backgroundColor:`${H1[w%H1.length]}20`,fill:!0,tension:0.4,pointRadius:0,pointHoverRadius:4,borderWidth:2}))}},[K,J]),F=i4.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"top",align:"start",labels:{color:q.legendLabel,usePointStyle:!0,padding:16,font:{size:12},boxWidth:8}},tooltip:{backgroundColor:q.tooltipBackground,titleColor:q.tooltipTitle,bodyColor:q.tooltipBody,borderColor:q.tooltipBorder,borderWidth:1,padding:12,cornerRadius:8,callbacks:{label:(M)=>{let w=M.dataset.label??"",R=M.parsed.y;return`${w}: ${(R??0).toFixed(1)}%`}}}},scales:{x:{grid:{color:q.grid,drawBorder:!1},ticks:{color:q.tick,font:{size:11}}},y:{grid:{color:q.grid,drawBorder:!1},ticks:{color:q.tick,font:{size:11},callback:(M)=>`${M}%`},min:0,max:100}}}},[q]);return j0.jsxDEV(q1,{title:"Model Preference",subtitle:`Share of requests over ${N.windowLabel}`,children:j0.jsxDEV("div",{className:"h-[280px]",children:K.data.length===0?j0.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No data available"},void 0,!1,void 0,this):j0.jsxDEV(f5,{data:H,options:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function aD(Q,J=5){if(Q.length===0)return{data:[],series:[]};let X=new Map;for(let _ of Q){let P=`${_.model}::${_.provider}`,I=X.get(P);if(I)I.total+=_.requests;else X.set(P,{model:_.model,provider:_.provider,total:_.requests})}let N=[...X.entries()].map(([_,P])=>({key:_,...P})).sort((_,P)=>P.total-_.total).slice(0,J),K=new Set(N.map((_)=>_.key)),H=new Map;for(let _ of N)H.set(_.model,(H.get(_.model)??0)+1);let F=new Map;for(let _ of N){let P=(H.get(_.model)??0)>1;F.set(_.key,P?`${_.model} (${_.provider})`:_.model)}let M=new Map;for(let _ of Q){let P=`${_.model}::${_.provider}`,I=M.get(_.timestamp)??{timestamp:_.timestamp,total:0};I.total+=_.requests;let A=K.has(P)?F.get(P)??_.model:"Other";I[A]=(I[A]??0)+_.requests,M.set(_.timestamp,I)}let w=N.map((_)=>F.get(_.key)??_.model);if([...M.values()].some((_)=>(_.Other??0)>0))w.push("Other");return{data:[...M.values()].sort((_,P)=>(_.timestamp??0)-(P.timestamp??0)).map((_)=>{let P=_.total??0;for(let I of w)_[I]=P>0?(_[I]??0)/P*100:0;return _}),series:w}}var nP="2fr 0.9fr 0.9fr 1fr 0.8fr 0.8fr 140px 40px";function iD({models:Q,performanceSeries:J,timeRange:X}){let[q,N]=i4.useState(null),K=Z7(X),H=i4.useMemo(()=>EP(J,X),[J,X]),F=R5(),M=o1[F],w=i4.useMemo(()=>{return[...Q].sort((R,_)=>_.totalInputTokens+_.totalOutputTokens-(R.totalInputTokens+R.totalOutputTokens))},[Q]);return j0.jsxDEV(zX,{title:"Model Statistics",children:[j0.jsxDEV(_X,{gridTemplate:nP,columns:[{label:"Model"},{label:"Requests",align:"right"},{label:"Cost",align:"right"},{label:"Tokens",align:"right"},{label:"Tokens/s",align:"right"},{label:"TTFT",align:"right"},{label:K.trendLabel,align:"center"}]},void 0,!1,void 0,this),j0.jsxDEV(LX,{children:w.map((R,_)=>{let P=`${R.model}::${R.provider}`,A=H.get(P)?.data??[],V=H1[_%H1.length],O=q===P,D=R.errorRate*100;return j0.jsxDEV(TX,{gridTemplate:nP,isExpanded:O,onToggle:()=>N(O?null:P),cells:[j0.jsxDEV(PX,{model:R.model,provider:R.provider},"name",!1,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:R.totalRequests.toLocaleString()},"requests",!1,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:["$",R.totalCost.toFixed(2)]},"cost",!0,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:(R.totalInputTokens+R.totalOutputTokens).toLocaleString()},"tokens",!1,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:R.avgTokensPerSecond?.toFixed(1)??"-"},"tps",!1,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:R.avgTtft?`${(R.avgTtft/1000).toFixed(2)}s`:"-"},"ttft",!1,void 0,this)],trendCell:A.length===0?j0.jsxDEV(CX,{},void 0,!1,void 0,this):j0.jsxDEV(wX,{timestamps:A.map((h)=>h.timestamp),values:A.map((h)=>h.avgTokensPerSecond??0),color:V},void 0,!1,void 0,this),expandedContent:j0.jsxDEV("div",{className:"grid gap-4",style:{gridTemplateColumns:"200px 1fr"},children:[j0.jsxDEV("div",{className:"space-y-4 text-sm",children:[j0.jsxDEV("div",{children:[j0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:"Quality"},void 0,!1,void 0,this),j0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[j0.jsxDEV("div",{className:"flex items-center justify-between",children:[j0.jsxDEV("span",{children:"Error rate"},void 0,!1,void 0,this),j0.jsxDEV("span",{className:D>5?"text-[var(--accent-red)]":"text-[var(--accent-green)]",children:[D.toFixed(1),"%"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),j0.jsxDEV("div",{className:"flex items-center justify-between",children:[j0.jsxDEV("span",{children:"Cache rate"},void 0,!1,void 0,this),j0.jsxDEV("span",{className:"text-[var(--accent-cyan)]",children:[(R.cacheRate*100).toFixed(1),"%"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),j0.jsxDEV("div",{children:[j0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:"Latency"},void 0,!1,void 0,this),j0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[j0.jsxDEV("div",{className:"flex items-center justify-between",children:[j0.jsxDEV("span",{children:"Avg duration"},void 0,!1,void 0,this),j0.jsxDEV("span",{className:"font-mono",children:R.avgDuration?`${(R.avgDuration/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),j0.jsxDEV("div",{className:"flex items-center justify-between",children:[j0.jsxDEV("span",{children:"Avg TTFT"},void 0,!1,void 0,this),j0.jsxDEV("span",{className:"font-mono",children:R.avgTtft?`${(R.avgTtft/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),j0.jsxDEV("div",{className:"h-[200px]",children:A.length===0?j0.jsxDEV(IX,{},void 0,!1,void 0,this):j0.jsxDEV(tD,{data:A,color:V,chartTheme:M,timeRange:X},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},P,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function tD({data:Q,color:J,chartTheme:X,timeRange:q}){let N=i4.useMemo(()=>{return{labels:Q.map((H)=>NJ(H.timestamp,q)),datasets:[{label:"TTFT",data:Q.map((H)=>H.avgTtftSeconds??null),...y2("#5ad8e6"),yAxisID:"y"},{label:"Tokens/s",data:Q.map((H)=>H.avgTokensPerSecond??null),...y2(J),yAxisID:"y1"}]}},[Q,J,q]),K=i4.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,plugins:RX(X),scales:CP(X)}},[X]);return j0.jsxDEV(f5,{data:N,options:K},void 0,!1,void 0,this)}var UJ=n(T1(),1);var oP=n(T1(),1);var B6=n(U0(),1),vX={main:{label:"Main agent",color:"#ed4abf"},subagent:{label:"Subagents",color:"#9b4dff"},advisor:{label:"Advisor",color:"#5ad8e6"}};function aP({stats:Q}){let J=oP.useMemo(()=>VP(Q),[Q]);if(J.totalTokens===0)return B6.jsxDEV("div",{className:"py-8 text-center stats-text-muted text-sm",children:"No token usage in this range"},void 0,!1,void 0,this);return B6.jsxDEV("div",{className:"space-y-4",children:[B6.jsxDEV("div",{className:"flex h-3 w-full overflow-hidden rounded-full",style:{background:"var(--surface-2)"},children:J.segments.map((X)=>X.share>0&&B6.jsxDEV("div",{className:"h-full",style:{width:`${X.share*100}%`,background:vX[X.agentType].color},title:`${vX[X.agentType].label}: ${d1(X.share)}`},X.agentType,!1,void 0,this))},void 0,!1,void 0,this),B6.jsxDEV("div",{className:"space-y-2",children:J.segments.map((X)=>B6.jsxDEV("div",{className:"flex items-center justify-between gap-3 text-sm",children:[B6.jsxDEV("div",{className:"flex items-center gap-2 min-w-0",children:[B6.jsxDEV("span",{className:"w-2.5 h-2.5 rounded-full flex-shrink-0",style:{background:vX[X.agentType].color}},void 0,!1,void 0,this),B6.jsxDEV("span",{className:"stats-text-primary truncate",children:vX[X.agentType].label},void 0,!1,void 0,this),B6.jsxDEV("span",{className:"stats-text-muted stats-text-xs whitespace-nowrap",children:[S0(X.requests)," req"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B6.jsxDEV("div",{className:"flex items-center gap-3 whitespace-nowrap",children:[B6.jsxDEV("span",{className:"stats-text-secondary",children:[N1(X.tokens)," tok"]},void 0,!0,void 0,this),B6.jsxDEV("span",{className:"stats-font-semibold stats-text-primary tabular-nums",children:d1(X.share)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},X.agentType,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var K0=n(U0(),1);function iP({active:Q,range:J,refreshTrigger:X,onRequestClick:q}){let{data:N,error:K,loading:H}=a1(["overview",J,X],(D)=>BL(J,D),{pollMs:30000,enabled:Q}),{data:F,error:M,loading:w}=a1(["recent-requests",X],(D)=>UX(50,D),{pollMs:30000,enabled:Q}),R=R5(),_=o1[R],P=UJ.useMemo(()=>{if(!N?.timeSeries)return{labels:[],datasets:[]};let D=N.timeSeries.map((p)=>F4(new Date(p.timestamp),J==="1h"||J==="24h"?"HH:mm":"MMM d")),h=N.timeSeries.length<=2?3:0;return{labels:D,datasets:[{label:"Requests",data:N.timeSeries.map((p)=>p.requests),borderColor:"#5ad8e6",backgroundColor:"rgba(90, 216, 230, 0.12)",tension:0.2,borderWidth:2,pointRadius:h,pointHoverRadius:4,fill:!0},{label:"Errors",data:N.timeSeries.map((p)=>p.errors),borderColor:"#ff6b7d",backgroundColor:"rgba(255, 107, 125, 0.12)",tension:0.2,borderWidth:2,pointRadius:h,pointHoverRadius:4,fill:!0}]}},[N?.timeSeries,J]),I=UJ.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!0,position:"top",align:"end",labels:{color:_.legendLabel,boxWidth:8,usePointStyle:!0,font:{size:11}}},tooltip:{backgroundColor:_.tooltipBackground,titleColor:_.tooltipTitle,bodyColor:_.tooltipBody,borderColor:_.tooltipBorder,borderWidth:1,cornerRadius:8,padding:10}},scales:{x:{grid:{color:_.grid,drawBorder:!1},ticks:{color:_.tick,font:{size:10}}},y:{grid:{color:_.grid,drawBorder:!1},ticks:{color:_.tick,font:{size:10}},min:0}}}},[_]),A=UJ.useMemo(()=>[{key:"model",header:"Model",render:(D)=>K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-font-medium stats-text-primary",children:D.model},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:D.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"timestamp",header:"Time",render:(D)=>Y6(D.timestamp)},{key:"tokens",header:"Tokens",numeric:!0,render:(D)=>S0(D.usage.totalTokens)},{key:"cost",header:"Cost",numeric:!0,render:(D)=>R1(D.usage.cost.total,4)},{key:"duration",header:"Duration",numeric:!0,render:(D)=>y5(D.duration)},{key:"status",header:"Status",className:"stats-text-center",render:(D)=>K0.jsxDEV(V5,{variant:D.errorMessage?"danger":"success",children:D.errorMessage?"Failed":"Success"},void 0,!1,void 0,this)}],[]),V=(D,h)=>K0.jsxDEV("div",{className:"stats-mobile-card",onClick:h,children:[K0.jsxDEV("div",{className:"stats-mobile-card-header",children:[K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-font-semibold stats-text-primary",children:D.model},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:D.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV(V5,{variant:D.errorMessage?"danger":"success",children:D.errorMessage?"Failed":"Success"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-grid",children:[K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-mobile-card-label",children:"Time"},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-value",children:Y6(D.timestamp)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cost"},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-value",children:R1(D.usage.cost.total,4)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-mobile-card-label",children:"Tokens"},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-value",children:S0(D.usage.totalTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-mobile-card-label",children:"Duration"},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-value",children:y5(D.duration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),D.errorMessage&&K0.jsxDEV("div",{className:"stats-mobile-card-error truncate mt-2",children:D.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O=UJ.useMemo(()=>{if(!F)return[];return F.slice(0,10)},[F]);return K0.jsxDEV("div",{className:"stats-route-container space-y-6",children:[K0.jsxDEV(g1,{loading:H,error:K,data:N,children:N&&K0.jsxDEV(kP,{stats:N.overall},void 0,!1,void 0,this)},void 0,!1,void 0,this),K0.jsxDEV(q1,{title:"Conversation Tokens by Agent",subtitle:"Uncached input + cache reads + cache writes + output, grouped by agent type",children:K0.jsxDEV(g1,{loading:H,error:K,data:N,children:N&&K0.jsxDEV(aP,{stats:N.byAgentType},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[K0.jsxDEV("div",{className:"lg:col-span-2",children:K0.jsxDEV(q1,{title:"System Throughput",subtitle:"Request volume and errors over time",children:K0.jsxDEV(g1,{loading:H,error:K,data:N,children:K0.jsxDEV("div",{className:"h-[280px]",children:N?.timeSeries&&N.timeSeries.length>0?K0.jsxDEV(f5,{data:P,options:I},void 0,!1,void 0,this):K0.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No time-series data available"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),K0.jsxDEV("div",{children:K0.jsxDEV(q1,{title:"Operational Feed",subtitle:"Real-time request log",children:K0.jsxDEV(g1,{loading:w,error:M,data:F,fallback:K0.jsxDEV("div",{className:"space-y-4",children:Array.from({length:5}).map((D,h)=>K0.jsxDEV("div",{className:"flex items-center gap-3",children:[K0.jsxDEV(N6,{variant:"circle",width:10,height:10},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"flex-1",children:[K0.jsxDEV(N6,{variant:"text",width:"60%",height:16},void 0,!1,void 0,this),K0.jsxDEV(N6,{variant:"text",width:"40%",height:12},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},h,!0,void 0,this))},void 0,!1,void 0,this),children:K0.jsxDEV("div",{className:"stats-feed-ledger overflow-y-auto max-h-[280px] pr-2",children:[O.map((D)=>{let h=!!D.errorMessage;return K0.jsxDEV("div",{className:"stats-feed-item flex items-start gap-3 p-2 rounded hover:bg-stats-surface-2 cursor-pointer transition-colors",onClick:()=>D.id&&q(D.id),children:[K0.jsxDEV("div",{className:`w-2 h-2 mt-1.5 rounded-full flex-shrink-0 ${h?"bg-stats-danger":"bg-stats-success"}`},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"flex-1 min-w-0",children:[K0.jsxDEV("div",{className:"flex justify-between items-baseline gap-2",children:[K0.jsxDEV("div",{className:"stats-font-medium stats-text-primary text-sm truncate",children:D.model},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-text-xs stats-text-muted whitespace-nowrap",children:Y6(D.timestamp)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{className:"flex justify-between items-center text-xs stats-text-muted mt-0.5",children:[K0.jsxDEV("div",{children:D.provider},void 0,!1,void 0,this),K0.jsxDEV("div",{children:[D.duration?y5(D.duration):""," ",D.usage?.cost?.total?`· ${R1(D.usage.cost.total,4)}`:""]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h&&K0.jsxDEV("div",{className:"text-xs text-stats-danger truncate mt-1",children:D.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},D.id||`${D.sessionFile}-${D.entryId}`,!0,void 0,this)}),O.length===0&&K0.jsxDEV("div",{className:"py-8 text-center stats-text-muted text-sm",children:"No recent requests found"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV(q1,{title:"Recent Requests Preview",subtitle:"Latest transactions processed by the proxy",actions:K0.jsxDEV("a",{href:`#/requests?range=${J}`,className:"stats-button stats-button-secondary text-xs",children:"View All Requests"},void 0,!1,void 0,this),children:K0.jsxDEV(g1,{loading:w,error:M,data:F,children:K0.jsxDEV(K6,{columns:A,data:O,keyExtractor:(D)=>D.id||`${D.sessionFile}-${D.entryId}`,onRowClick:(D)=>D.id&&q(D.id),renderMobileCard:V,emptyText:"No recent requests found"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var mK=n(T1(),1);var Y1=n(U0(),1);function tP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["projects",J,X],(w)=>zL(J,w),{pollMs:30000,enabled:Q}),H=mK.useMemo(()=>{if(!q)return[];return jP(q)},[q]),F=mK.useMemo(()=>[{key:"folder",header:"Project/Folder",render:(w)=>Y1.jsxDEV("div",{className:"stats-font-medium stats-text-primary truncate max-w-[440px]",title:w.folder||"(root)",children:w.folder||"(root)"},void 0,!1,void 0,this)},{key:"totalRequests",header:"Requests",numeric:!0,render:(w)=>Y1.jsxDEV("div",{className:"stats-text-right",children:[Y1.jsxDEV("div",{className:"font-mono",children:S0(w.totalRequests)},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-progress-bar-track mt-1 ml-auto w-24 h-1",children:Y1.jsxDEV("div",{className:"stats-progress-bar-fill","data-variant":"link",style:{width:`${w.requestsPercentage}%`}},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"totalCost",header:"Cost",numeric:!0,render:(w)=>Y1.jsxDEV("div",{className:"stats-text-right",children:[Y1.jsxDEV("div",{className:"font-mono",children:R1(w.totalCost)},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-progress-bar-track mt-1 ml-auto w-24 h-1",children:Y1.jsxDEV("div",{className:"stats-progress-bar-fill","data-variant":"success",style:{width:`${w.costPercentage}%`}},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"totalTokens",header:"Tokens",numeric:!0,render:(w)=>Y1.jsxDEV("div",{className:"font-mono",children:S0(w.totalInputTokens+w.totalOutputTokens)},void 0,!1,void 0,this)},{key:"cacheRate",header:"Cache Rate",numeric:!0,render:(w)=>Y1.jsxDEV("span",{className:"stats-text-success font-medium",children:d1(w.cacheRate)},void 0,!1,void 0,this)},{key:"errorRate",header:"Error Rate",numeric:!0,render:(w)=>Y1.jsxDEV(V5,{variant:w.errorRate>0.1?"danger":w.errorRate>0?"warning":"success",children:d1(w.errorRate)},void 0,!1,void 0,this)},{key:"avgDuration",header:"Avg Duration",numeric:!0,render:(w)=>y5(w.avgDuration)}],[]);return Y1.jsxDEV("div",{className:"stats-route-container",children:Y1.jsxDEV(q1,{title:"Projects & Folders",subtitle:"Aggregate proxy metrics grouped by folder path",children:Y1.jsxDEV(g1,{loading:K,error:N,data:q,emptyText:"No project folders recorded for this range.",children:Y1.jsxDEV(K6,{columns:F,data:H,keyExtractor:(w)=>w.folder,renderMobileCard:(w)=>Y1.jsxDEV("div",{className:"stats-mobile-card",children:[Y1.jsxDEV("div",{className:"stats-mobile-card-header mb-2",children:[Y1.jsxDEV("div",{className:"stats-font-semibold stats-text-primary",children:w.folder||"(root)"},void 0,!1,void 0,this),Y1.jsxDEV(V5,{variant:w.errorRate>0.1?"danger":w.errorRate>0?"warning":"success",children:[d1(w.errorRate)," Err"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-grid",children:[Y1.jsxDEV("div",{children:[Y1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Requests"},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:S0(w.totalRequests)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1.jsxDEV("div",{children:[Y1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cost"},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:R1(w.totalCost)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1.jsxDEV("div",{children:[Y1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cache"},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-value",children:d1(w.cacheRate)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1.jsxDEV("div",{children:[Y1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Duration"},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-value",children:y5(w.avgDuration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),emptyText:"No project folders recorded for this range."},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var g5=n(T1(),1);var m0=n(U0(),1);function eP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["providers",J,X],(H)=>PL(J,H),{pollMs:30000,enabled:Q});return m0.jsxDEV("div",{className:"stats-route-container space-y-6",children:m0.jsxDEV(g1,{loading:K,error:N,data:q,children:q&&m0.jsxDEV(m0.Fragment,{children:[m0.jsxDEV(eD,{providers:q.providers},void 0,!1,void 0,this),m0.jsxDEV($v,{stats:q},void 0,!1,void 0,this),m0.jsxDEV(Zv,{hourly:q.hourly,providers:q.providers},void 0,!1,void 0,this),m0.jsxDEV(Qv,{insights:q.windowInsights},void 0,!1,void 0,this),m0.jsxDEV(Jv,{usageSeries:q.usageSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function eD({providers:Q}){let J=g5.useMemo(()=>Q.reduce((q,N)=>q+N.totalTokens,0),[Q]);return m0.jsxDEV(q1,{title:"Provider Totals",subtitle:"Token, request, and cost totals per provider over the active range",children:m0.jsxDEV(K6,{columns:[{key:"provider",header:"Provider",render:(q)=>m0.jsxDEV("span",{className:"font-medium",children:q.provider},void 0,!1,void 0,this)},{key:"requests",header:"Requests",numeric:!0,render:(q)=>S0(q.totalRequests)},{key:"errors",header:"Error Rate",numeric:!0,render:(q)=>d1(q.totalRequests>0?q.failedRequests/q.totalRequests:0)},{key:"models",header:"Models",numeric:!0,render:(q)=>S0(q.models)},{key:"tokens",header:"Tokens",numeric:!0,render:(q)=>m0.jsxDEV("span",{title:`Input ${N1(q.totalInputTokens)} · Output ${N1(q.totalOutputTokens)} · Cache read ${N1(q.totalCacheReadTokens)} · Cache write ${N1(q.totalCacheWriteTokens)}`,children:N1(q.totalTokens)},void 0,!1,void 0,this)},{key:"share",header:"Share",numeric:!0,render:(q)=>d1(J>0?q.totalTokens/J:0)},{key:"cost",header:"Cost",numeric:!0,render:(q)=>R1(q.totalCost)},{key:"tps",header:"Tok/s",numeric:!0,render:(q)=>OX(q.avgTokensPerSecond)}],data:Q,keyExtractor:(q)=>q.provider,emptyText:"No requests recorded in this range"},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function $v({stats:Q}){let[J,X]=g5.useState("tokens"),q=R5(),N=o1[q],K=g5.useMemo(()=>{let w=Q.series.map((R)=>({...R,model:R.provider}));return S$(w,{topN:6,rankWeight:(R)=>J==="tokens"?R.totalTokens:R.cost,initBucket:()=>({total:0}),accumulate:(R,_)=>{R.total+=J==="tokens"?_.totalTokens:_.cost},bucketToValue:(R)=>R.total})},[Q.series,J]),H=J==="tokens"?N1:(w)=>R1(w),F=g5.useMemo(()=>{let{sharedScaleBase:w,yScale:R}=o4({chartTheme:N,formatY:H});return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:s4({chartTheme:N,showLegend:!0,defaultLabel:J==="tokens"?"Tokens":"Cost",formatValue:H,footer:(_)=>{if(_.length<2)return;let P=_.reduce((I,A)=>I+(A.parsed.y??0),0);return`Total: ${H(P)}`}}),scales:{x:{...w,stacked:!0},y:{...R,stacked:!0}}}},[N,J,H]),M=g5.useMemo(()=>({labels:K.labels,datasets:p8(K,(w)=>$7(H1[w%H1.length]))}),[K]);return m0.jsxDEV(q1,{title:"Burn by Provider",subtitle:"Stacked token/cost burn per provider over time",actions:m0.jsxDEV(J7,{options:[{value:"tokens",label:"Tokens"},{value:"cost",label:"Cost"}],value:J,onChange:X},void 0,!1,void 0,this),children:m0.jsxDEV("div",{className:"h-[300px]",children:K.labels.length===0?m0.jsxDEV(j$,{message:"No provider activity in this range"},void 0,!1,void 0,this):m0.jsxDEV(d8,{data:M,options:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var dK="__all__";function Zv({hourly:Q,providers:J}){let[X,q]=g5.useState(dK),N=R5(),K=o1[N],{tokensByHour:H,peakHour:F}=g5.useMemo(()=>{let _=Array(24).fill(0);for(let I of Q){if(X!==dK&&I.provider!==X)continue;_[I.hour]+=I.totalTokens}let P=0;for(let I=1;I<24;I++)if(_[I]>_[P])P=I;return{tokensByHour:_,peakHour:P}},[Q,X]),M=H.some((_)=>_>0),w=g5.useMemo(()=>({labels:Array.from({length:24},(_,P)=>`${String(P).padStart(2,"0")}:00`),datasets:[{label:"Tokens",data:H,...$7(H1[2]),backgroundColor:H.map((_,P)=>P===F?H1[0]:H1[2])}]}),[H,F]),R=g5.useMemo(()=>{let{sharedScaleBase:_,yScale:P}=o4({chartTheme:K,formatY:N1});return{responsive:!0,maintainAspectRatio:!1,plugins:s4({chartTheme:K,showLegend:!1,defaultLabel:"Tokens",formatValue:N1}),scales:{x:_,y:P}}},[K]);return m0.jsxDEV(q1,{title:"Peak Burn Hours",subtitle:M?`Token burn by local hour of day — peak at ${String(F).padStart(2,"0")}:00`:"Token burn by local hour of day",actions:m0.jsxDEV("select",{className:"stats-select",value:X,onChange:(_)=>q(_.target.value),"aria-label":"Provider",children:[m0.jsxDEV("option",{value:dK,children:"All providers"},void 0,!1,void 0,this),J.map((_)=>m0.jsxDEV("option",{value:_.provider,children:_.provider},_.provider,!1,void 0,this))]},void 0,!0,void 0,this),children:m0.jsxDEV("div",{className:"h-[260px]",children:M?m0.jsxDEV(d8,{data:w,options:R},void 0,!1,void 0,this):m0.jsxDEV(j$,{message:"No activity in this range"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function Qv({insights:Q}){return m0.jsxDEV(q1,{title:"Subscription Windows",subtitle:"What each usage window buys you, and how many accounts peak demand needs",children:m0.jsxDEV(K6,{columns:[{key:"provider",header:"Provider",render:(X)=>m0.jsxDEV("span",{className:"font-medium",children:X.provider},void 0,!1,void 0,this)},{key:"window",header:"Window",render:(X)=>X.windowLabel},{key:"accounts",header:"Accounts",numeric:!0,render:(X)=>S0(X.accounts)},{key:"consumed",header:"Windows Burned",numeric:!0,render:(X)=>m0.jsxDEV("span",{title:"Subscription-window equivalents consumed in range (sum of used-fraction increases across accounts)",children:X.fractionConsumed.toFixed(2)},void 0,!1,void 0,this)},{key:"capacity",header:"Est. Tokens / Window",numeric:!0,render:(X)=>m0.jsxDEV("span",{title:"Provider tokens burned in range ÷ windows burned — what one full window is worth",children:X.estTokensPerWindow!==null?N1(X.estTokensPerWindow):"—"},void 0,!1,void 0,this)},{key:"peak",header:"Peak Utilization",numeric:!0,render:(X)=>m0.jsxDEV("span",{title:"Peak of summed used fraction across accounts at any sampled instant",children:d1(X.peakConcurrentFraction)},void 0,!1,void 0,this)},{key:"ideal",header:"Ideal Accounts",numeric:!0,render:(X)=>m0.jsxDEV("span",{title:"Accounts needed to keep peak demand under 90% of fleet capacity",className:X.idealAccounts>X.accounts?"stats-text-warning font-semibold":void 0,children:[S0(X.idealAccounts),X.idealAccounts>X.accounts?` (have ${X.accounts})`:""]},void 0,!0,void 0,this)},{key:"exhausted",header:"Exhaustions",numeric:!0,render:(X)=>m0.jsxDEV("span",{className:X.exhaustedEvents>0?"stats-text-warning":void 0,children:S0(X.exhaustedEvents)},void 0,!1,void 0,this)}],data:Q,keyExtractor:(X)=>`${X.provider}::${X.windowKey}`,emptyText:"No usage snapshots recorded yet — they accumulate whenever usage is fetched (TUI footer, /usage, omp usage)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var pK={ok:"#62d394",warning:"#f5c14b",exhausted:"#ff6b7d"};function Jv({usageSeries:Q}){let J=g5.useMemo(()=>[...new Set(Q.map((R)=>R.provider))],[Q]),[X,q]=g5.useState(null),N=X!==null&&J.includes(X)?X:J[0]??null,K=R5(),H=o1[K],F=g5.useMemo(()=>{return Q.filter((R)=>R.provider===N).map((R)=>{let _=[...R.points].reverse().find((P)=>P.usedFraction!==null);return _?{label:`${R.windowLabel} · ${R.accountLabel}`,fraction:_.usedFraction??0,exhausted:_.exhausted,recordedAt:_.timestamp}:null}).filter((R)=>R!==null).sort((R,_)=>_.fraction-R.fraction)},[Q,N]),M=g5.useMemo(()=>({labels:F.map((R)=>R.label),datasets:[{label:"Used",data:F.map((R)=>R.fraction*100),backgroundColor:F.map((R)=>R.exhausted?pK.exhausted:R.fraction>=0.8?pK.warning:pK.ok),borderWidth:0,borderRadius:4,barThickness:18}]}),[F]),w=g5.useMemo(()=>{let{sharedScaleBase:R,yScale:_}=o4({chartTheme:H,formatY:(A)=>`${Math.round(A)}%`}),P=Math.max(100,...F.map((A)=>A.fraction*100)),I=s4({chartTheme:H,showLegend:!1,defaultLabel:"Used",formatValue:(A)=>`${A.toFixed(1)}%`});return{indexAxis:"y",responsive:!0,maintainAspectRatio:!1,plugins:{...I,tooltip:{...I.tooltip,callbacks:{label:(A)=>{let V=F[A.dataIndex],O=`${(A.parsed.x??0).toFixed(1)}% used`;return V?`${O} · recorded ${Y6(V.recordedAt)}`:O}}}},scales:{x:{..._,max:P},y:{...R,grid:{display:!1}}}}},[H,F]);return m0.jsxDEV(q1,{title:"Window Utilization",subtitle:"Latest recorded limit utilization per account and window — red bars are exhausted, amber above 80%",actions:J.length>1?m0.jsxDEV("select",{className:"stats-select",value:N??"",onChange:(R)=>q(R.target.value),"aria-label":"Provider",children:J.map((R)=>m0.jsxDEV("option",{value:R,children:R},R,!1,void 0,this))},void 0,!1,void 0,this):void 0,children:m0.jsxDEV("div",{style:{height:Math.max(160,F.length*34+60)},children:F.length===0?m0.jsxDEV(j$,{message:"No usage snapshots recorded yet — they accumulate whenever usage is fetched"},void 0,!1,void 0,this):m0.jsxDEV(d8,{data:M,options:w},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var $T=n(T1(),1);var z1=n(U0(),1);function ZT({active:Q,refreshTrigger:J,onRequestClick:X}){let{data:q,error:N,loading:K}=a1(["recent-requests-dense",J],(M)=>UX(50,M),{pollMs:30000,enabled:Q}),H=$T.useMemo(()=>[{key:"model",header:"Model",render:(M)=>z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-font-medium stats-text-primary",children:M.model},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:M.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"timestamp",header:"Time",render:(M)=>Y6(M.timestamp)},{key:"tokens",header:"Tokens",numeric:!0,render:(M)=>S0(M.usage.totalTokens)},{key:"cost",header:"Cost",numeric:!0,render:(M)=>R1(M.usage.cost.total,4)},{key:"duration",header:"Duration",numeric:!0,render:(M)=>y5(M.duration)},{key:"status",header:"Status",className:"stats-text-center",render:(M)=>z1.jsxDEV(V5,{variant:M.errorMessage?"danger":"success",children:M.errorMessage?"Failed":"Success"},void 0,!1,void 0,this)}],[]);return z1.jsxDEV("div",{className:"stats-route-container",children:z1.jsxDEV(q1,{title:"All Recent Requests",subtitle:"Up to 50 most recent requests processed by OMP",children:z1.jsxDEV(g1,{loading:K,error:N,data:q,children:z1.jsxDEV(K6,{columns:H,data:q||[],keyExtractor:(M)=>M.id||`${M.sessionFile}-${M.entryId}`,onRowClick:(M)=>M.id&&X(M.id),renderMobileCard:(M,w)=>z1.jsxDEV("div",{className:"stats-mobile-card",onClick:w,children:[z1.jsxDEV("div",{className:"stats-mobile-card-header",children:[z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-font-semibold stats-text-primary",children:M.model},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:M.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV(V5,{variant:M.errorMessage?"danger":"success",children:M.errorMessage?"Failed":"Success"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-grid",children:[z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Time"},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-value",children:Y6(M.timestamp)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cost"},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-value",children:R1(M.usage.cost.total,4)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Tokens"},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-value",children:S0(M.usage.totalTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Duration"},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-value",children:y5(M.duration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),M.errorMessage&&z1.jsxDEV("div",{className:"stats-mobile-card-error truncate mt-2",children:M.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this),emptyText:"No recent requests found"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var e6=n(T1(),1);var e=n(U0(),1);function QT({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["tools",J,X],(H)=>LL(J,H),{pollMs:30000,enabled:Q});return e.jsxDEV("div",{className:"stats-route-container space-y-6",children:e.jsxDEV(g1,{loading:K,error:N,data:q,emptyText:"No tool calls recorded for this range.",children:q&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(Gv,{byTool:q.byTool},void 0,!1,void 0,this),e.jsxDEV(Yv,{series:q.series,timeRange:J},void 0,!1,void 0,this),e.jsxDEV(Nv,{byTool:q.byTool},void 0,!1,void 0,this),e.jsxDEV(Uv,{byToolModel:q.byToolModel},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function Gv({byTool:Q}){let J=e6.useMemo(()=>{let X=0,q=0,N=0,K=0,H=0,F=0,M=0;for(let w of Q)X+=w.calls,q+=w.errors,N+=w.totalTokensShare,K+=w.outputTokensShare,H+=w.costShare,F+=w.resultChars,M+=w.argsChars;return{calls:X,errors:q,tokens:N,output:K,cost:H,resultChars:F,argsChars:M,tools:Q.length}},[Q]);return e.jsxDEV(q1,{title:"Tool Usage",subtitle:"Tokens/cost are the invoking turns' real provider usage, split across each turn's tool calls",children:e.jsxDEV("div",{className:"stats-metric-cluster",children:[e.jsxDEV("div",{className:"stats-metric-primary-grid",children:[e.jsxDEV("div",{className:"stats-metric-card primary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Tool Calls"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:S0(J.calls)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card primary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Tools Used"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:S0(J.tools)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card primary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Error Rate"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:d1(J.calls>0?J.errors/J.calls:0)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card primary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Attributed Cost"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:R1(J.cost)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-secondary-grid",children:[e.jsxDEV("div",{className:"stats-metric-card secondary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Attributed Tokens"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:N1(Math.round(J.tokens))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card secondary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Attributed Output"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:N1(Math.round(J.output))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card secondary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Result Text"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:[N1(J.resultChars)," chars"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card secondary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Call Arguments"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:[N1(J.argsChars)," chars"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var Xv=6;function qv(Q){let J=new Map;for(let w of Q)J.set(w.tool,(J.get(w.tool)??0)+w.calls);let X=[...J.entries()].sort((w,R)=>R[1]-w[1]),q=X.slice(0,Xv).map(([w])=>w),N=new Set(q),H=X.length>q.length?[...q,"Other"]:q,F=[...new Set(Q.map((w)=>w.timestamp))].sort((w,R)=>w-R),M=new Map;for(let w of F)M.set(w,{});for(let w of Q){let R=N.has(w.tool)?w.tool:"Other",_=M.get(w.timestamp);if(_)_[R]=(_[R]??0)+w.calls}return{buckets:F,tools:H,data:M}}function Yv({series:Q,timeRange:J}){let X=R5(),q=o1[X],N=Z7(J),K=e6.useMemo(()=>qv(Q),[Q]),H=e6.useMemo(()=>({labels:K.buckets.map((M)=>NJ(M,J)),datasets:K.tools.map((M,w)=>({label:M,data:K.buckets.map((R)=>K.data.get(R)?.[M]??0),borderColor:H1[w%H1.length],backgroundColor:`${H1[w%H1.length]}30`,fill:!0,tension:0.4,pointRadius:0,pointHoverRadius:4,borderWidth:2}))}),[K,J]),F=e6.useMemo(()=>({responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"top",align:"start",labels:{color:q.legendLabel,usePointStyle:!0,padding:16,font:{size:12},boxWidth:8}},tooltip:{backgroundColor:q.tooltipBackground,titleColor:q.tooltipTitle,bodyColor:q.tooltipBody,borderColor:q.tooltipBorder,borderWidth:1,padding:12,cornerRadius:8,callbacks:{label:(M)=>`${M.dataset.label??""}: ${S0(M.parsed.y??0)} calls`}}},scales:{x:{stacked:!0,grid:{color:q.grid,drawBorder:!1},ticks:{color:q.tick,font:{size:11}}},y:{stacked:!0,grid:{color:q.grid,drawBorder:!1},ticks:{color:q.tick,font:{size:11},precision:0},min:0}}}),[q]);return e.jsxDEV(q1,{title:"Calls Over Time",subtitle:`Tool calls over ${N.windowLabel}, stacked by tool`,children:e.jsxDEV("div",{className:"h-[280px]",children:K.buckets.length===0?e.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No data available"},void 0,!1,void 0,this):e.jsxDEV(f5,{data:H,options:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function cK(Q){return Q>0.1?"danger":Q>0?"warning":"success"}function Nv({byTool:Q}){let J=e6.useMemo(()=>DP(Q),[Q]),X=e6.useMemo(()=>[{key:"tool",header:"Tool",render:(N)=>e.jsxDEV("div",{className:"stats-font-medium stats-text-primary font-mono truncate max-w-[280px]",title:N.tool,children:N.tool},void 0,!1,void 0,this)},{key:"calls",header:"Calls",numeric:!0,render:(N)=>e.jsxDEV("div",{className:"stats-text-right",children:[e.jsxDEV("div",{className:"font-mono",children:S0(N.calls)},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-progress-bar-track mt-1 ml-auto w-24 h-1",children:e.jsxDEV("div",{className:"stats-progress-bar-fill","data-variant":"link",style:{width:`${N.callsPercentage}%`}},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"errorRate",header:"Error Rate",numeric:!0,render:(N)=>e.jsxDEV(V5,{variant:cK(N.errorRate),children:d1(N.errorRate)},void 0,!1,void 0,this)},{key:"tokens",header:"Attr. Tokens",numeric:!0,render:(N)=>e.jsxDEV("span",{className:"font-mono",title:"Invoking turns' total tokens, split across each turn's calls",children:N1(Math.round(N.totalTokensShare))},void 0,!1,void 0,this)},{key:"cost",header:"Attr. Cost",numeric:!0,render:(N)=>e.jsxDEV("span",{className:"font-mono",children:R1(N.costShare)},void 0,!1,void 0,this)},{key:"resultChars",header:"Result Text",numeric:!0,render:(N)=>e.jsxDEV("span",{className:"font-mono",title:"Characters of tool-result text fed back into context",children:N1(N.resultChars)},void 0,!1,void 0,this)},{key:"lastUsed",header:"Last Used",numeric:!0,render:(N)=>e.jsxDEV("span",{className:"stats-text-secondary",children:Y6(N.lastUsed)},void 0,!1,void 0,this)}],[]);return e.jsxDEV(q1,{title:"By Tool",subtitle:"Usage per tool, most called first",children:e.jsxDEV(K6,{columns:X,data:J,keyExtractor:(N)=>N.tool,renderMobileCard:(N)=>e.jsxDEV("div",{className:"stats-mobile-card",children:[e.jsxDEV("div",{className:"stats-mobile-card-header mb-2",children:[e.jsxDEV("div",{className:"stats-font-semibold stats-text-primary font-mono",children:N.tool},void 0,!1,void 0,this),e.jsxDEV(V5,{variant:cK(N.errorRate),children:[d1(N.errorRate)," Err"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-grid",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-mobile-card-label",children:"Calls"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:S0(N.calls)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-mobile-card-label",children:"Attr. Tokens"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:N1(Math.round(N.totalTokensShare))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-mobile-card-label",children:"Attr. Cost"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:R1(N.costShare)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-mobile-card-label",children:"Result Text"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:N1(N.resultChars)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),emptyText:"No tool calls recorded for this range."},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function Uv({byToolModel:Q}){let[J,X]=e6.useState(null),q=e6.useMemo(()=>[...new Set(Q.map((H)=>H.tool))].sort(),[Q]),N=e6.useMemo(()=>{return(J?Q.filter((F)=>F.tool===J):Q).map((F)=>({...F,errorRate:F.calls>0?F.errors/F.calls:0}))},[Q,J]),K=e6.useMemo(()=>[{key:"tool",header:"Tool",render:(H)=>e.jsxDEV("span",{className:"stats-font-medium stats-text-primary font-mono",children:H.tool},void 0,!1,void 0,this)},{key:"model",header:"Model",render:(H)=>e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-text-primary",children:H.model||"(unknown)"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-text-secondary text-xs",children:H.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"calls",header:"Calls",numeric:!0,render:(H)=>e.jsxDEV("span",{className:"font-mono",children:S0(H.calls)},void 0,!1,void 0,this)},{key:"errorRate",header:"Error Rate",numeric:!0,render:(H)=>e.jsxDEV(V5,{variant:cK(H.errorRate),children:d1(H.errorRate)},void 0,!1,void 0,this)},{key:"tokens",header:"Attr. Tokens",numeric:!0,render:(H)=>e.jsxDEV("span",{className:"font-mono",children:N1(Math.round(H.totalTokensShare))},void 0,!1,void 0,this)},{key:"cost",header:"Attr. Cost",numeric:!0,render:(H)=>e.jsxDEV("span",{className:"font-mono",children:R1(H.costShare)},void 0,!1,void 0,this)}],[]);return e.jsxDEV(q1,{title:"By Model",subtitle:"Which models call which tools",children:[e.jsxDEV("div",{className:"mb-4",style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[e.jsxDEV("span",{className:"stats-text-secondary",style:{fontSize:"0.875rem",whiteSpace:"nowrap"},children:"Tool"},void 0,!1,void 0,this),e.jsxDEV("select",{className:"stats-select",value:J??"",onChange:(H)=>X(H.target.value||null),style:{maxWidth:"320px",flex:1},children:[e.jsxDEV("option",{value:"",children:"All tools"},void 0,!1,void 0,this),q.map((H)=>e.jsxDEV("option",{value:H,children:H},H,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV(K6,{columns:K,data:N,keyExtractor:(H)=>`${H.tool}::${H.model}::${H.provider}`,emptyText:"No tool calls recorded for this range."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var A5=n(U0(),1);function lK(){let{section:Q,setSection:J,range:X,setRange:q}=kL(),[N,K]=g2.useState(0),[H,F]=g2.useState(null),[M,w]=g2.useState(()=>Date.now()),R=g2.useCallback((V)=>{if(V.success)K((O)=>O+1),w(Date.now())},[]),_=g2.useCallback(()=>F(null),[]),P=Q,I=g2.useRef(new Set);I.current.add(P);let A=(V)=>{let O=V===P;switch(V){case"overview":return A5.jsxDEV(iP,{active:O,range:X,refreshTrigger:N,onRequestClick:F},void 0,!1,void 0,this);case"requests":return A5.jsxDEV(ZT,{active:O,range:X,refreshTrigger:N,onRequestClick:F},void 0,!1,void 0,this);case"errors":return A5.jsxDEV(lP,{active:O,range:X,refreshTrigger:N,onRequestClick:F},void 0,!1,void 0,this);case"models":return A5.jsxDEV(sP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"providers":return A5.jsxDEV(eP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"tools":return A5.jsxDEV(QT,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"costs":return A5.jsxDEV(pP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"behavior":return A5.jsxDEV(dP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"projects":return A5.jsxDEV(tP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"gain":return A5.jsxDEV(rP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this)}};return A5.jsxDEV(A5.Fragment,{children:[A5.jsxDEV(vL,{activeSection:P,onSectionChange:J,range:X,onRangeChange:q,updatedAt:M,onSyncComplete:R,children:[...I.current].map((V)=>A5.jsxDEV("div",{hidden:V!==P,children:A(V)},V,!1,void 0,this))},void 0,!1,void 0,this),A5.jsxDEV(yP,{id:H,onClose:_},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var GT=n(U0(),1),Kv=JT.createRoot(document.getElementById("root"));Kv.render(GT.jsxDEV(lK,{},void 0,!1,void 0,this));
257
+ `);return Q}function TS(Q,J){let{element:X,datasetIndex:q,index:N}=J,K=Q.getDatasetMeta(q).controller,{label:H,value:F}=K.getLabelAndValue(N);return{chart:Q,label:H,parsed:K.getParsed(N),raw:Q.data.datasets[q].data[N],formattedValue:F,dataset:K.getDataset(),dataIndex:N,datasetIndex:q,element:X}}function N_(Q,J){let X=Q.chart.ctx,{body:q,footer:N,title:K}=Q,{boxWidth:H,boxHeight:F}=J,M=X5(J.bodyFont),w=X5(J.titleFont),R=X5(J.footerFont),_=K.length,P=N.length,I=q.length,A=I5(J.padding),V=A.height,O=0,D=q.reduce((s,a)=>s+a.before.length+a.lines.length+a.after.length,0);if(D+=Q.beforeBody.length+Q.afterBody.length,_)V+=_*w.lineHeight+(_-1)*J.titleSpacing+J.titleMarginBottom;if(D){let s=J.displayColors?Math.max(F,M.lineHeight):M.lineHeight;V+=I*s+(D-I)*M.lineHeight+(D-1)*J.bodySpacing}if(P)V+=J.footerMarginTop+P*R.lineHeight+(P-1)*J.footerSpacing;let h=0,p=function(s){O=Math.max(O,X.measureText(s).width+h)};return X.save(),X.font=w.string,W1(Q.title,p),X.font=M.string,W1(Q.beforeBody.concat(Q.afterBody),p),h=J.displayColors?H+2+J.boxPadding:0,W1(q,(s)=>{W1(s.before,p),W1(s.lines,p),W1(s.after,p)}),h=0,X.font=R.string,W1(Q.footer,p),X.restore(),O+=A.width,{width:O,height:V}}function CS(Q,J){let{y:X,height:q}=J;if(X<q/2)return"top";else if(X>Q.height-q/2)return"bottom";return"center"}function IS(Q,J,X,q){let{x:N,width:K}=q,H=X.caretSize+X.caretPadding;if(Q==="left"&&N+K+H>J.width)return!0;if(Q==="right"&&N-K-H<0)return!0}function OS(Q,J,X,q){let{x:N,width:K}=X,{width:H,chartArea:{left:F,right:M}}=Q,w="center";if(q==="center")w=N<=(F+M)/2?"left":"right";else if(N<=K/2)w="left";else if(N>=H-K/2)w="right";if(IS(w,Q,J,X))w="center";return w}function U_(Q,J,X){let q=X.yAlign||J.yAlign||CS(Q,X);return{xAlign:X.xAlign||J.xAlign||OS(Q,J,X,q),yAlign:q}}function VS(Q,J){let{x:X,width:q}=Q;if(J==="right")X-=q;else if(J==="center")X-=q/2;return X}function AS(Q,J,X){let{y:q,height:N}=Q;if(J==="top")q+=X;else if(J==="bottom")q-=N+X;else q-=N/2;return q}function K_(Q,J,X,q){let{caretSize:N,caretPadding:K,cornerRadius:H}=Q,{xAlign:F,yAlign:M}=X,w=N+K,{topLeft:R,topRight:_,bottomLeft:P,bottomRight:I}=g8(H),A=VS(J,F),V=AS(J,M,w);if(M==="center"){if(F==="left")A+=w;else if(F==="right")A-=w}else if(F==="left")A-=Math.max(R,P)+N;else if(F==="right")A+=Math.max(_,I)+N;return{x:J6(A,0,q.width-J.width),y:J6(V,0,q.height-J.height)}}function i3(Q,J,X){let q=I5(X.padding);return J==="center"?Q.x+Q.width/2:J==="right"?Q.x+Q.width-q.right:Q.x+q.left}function B_(Q){return l4([],D2(Q))}function ES(Q,J,X){return S2(Q,{tooltip:J,tooltipItems:X,type:"tooltip"})}function H_(Q,J){let X=J&&J.dataset&&J.dataset.tooltip&&J.dataset.tooltip.callbacks;return X?Q.override(X):Q}var s_={beforeTitle:c4,title(Q){if(Q.length>0){let J=Q[0],X=J.chart.data.labels,q=X?X.length:0;if(this&&this.options&&this.options.mode==="dataset")return J.dataset.label||"";else if(J.label)return J.label;else if(q>0&&J.dataIndex<q)return X[J.dataIndex]}return""},afterTitle:c4,beforeBody:c4,beforeLabel:c4,label(Q){if(this&&this.options&&this.options.mode==="dataset")return Q.label+": "+Q.formattedValue||Q.formattedValue;let J=Q.dataset.label||"";if(J)J+=": ";let X=Q.formattedValue;if(!J1(X))J+=X;return J},labelColor(Q){let X=Q.chart.getDatasetMeta(Q.datasetIndex).controller.getStyle(Q.dataIndex);return{borderColor:X.borderColor,backgroundColor:X.backgroundColor,borderWidth:X.borderWidth,borderDash:X.borderDash,borderDashOffset:X.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(Q){let X=Q.chart.getDatasetMeta(Q.datasetIndex).controller.getStyle(Q.dataIndex);return{pointStyle:X.pointStyle,rotation:X.rotation}},afterLabel:c4,afterBody:c4,beforeFooter:c4,footer:c4,afterFooter:c4};function X6(Q,J,X,q){let N=Q[J].call(X,q);if(typeof N>"u")return s_[J].call(X,q);return N}class YK extends v2{static positioners=EQ;constructor(Q){super();this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=Q.chart,this.options=Q.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(Q){this.options=Q,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let Q=this._cachedAnimations;if(Q)return Q;let J=this.chart,X=this.options.setContext(this.getContext()),q=X.enabled&&J.options.animation&&X.animations,N=new KK(this.chart,q);if(q._cacheable)this._cachedAnimations=Object.freeze(N);return N}getContext(){return this.$context||(this.$context=ES(this.chart.getContext(),this,this._tooltipItems))}getTitle(Q,J){let{callbacks:X}=J,q=X6(X,"beforeTitle",this,Q),N=X6(X,"title",this,Q),K=X6(X,"afterTitle",this,Q),H=[];return H=l4(H,D2(q)),H=l4(H,D2(N)),H=l4(H,D2(K)),H}getBeforeBody(Q,J){return B_(X6(J.callbacks,"beforeBody",this,Q))}getBody(Q,J){let{callbacks:X}=J,q=[];return W1(Q,(N)=>{let K={before:[],lines:[],after:[]},H=H_(X,N);l4(K.before,D2(X6(H,"beforeLabel",this,N))),l4(K.lines,X6(H,"label",this,N)),l4(K.after,D2(X6(H,"afterLabel",this,N))),q.push(K)}),q}getAfterBody(Q,J){return B_(X6(J.callbacks,"afterBody",this,Q))}getFooter(Q,J){let{callbacks:X}=J,q=X6(X,"beforeFooter",this,Q),N=X6(X,"footer",this,Q),K=X6(X,"afterFooter",this,Q),H=[];return H=l4(H,D2(q)),H=l4(H,D2(N)),H=l4(H,D2(K)),H}_createItems(Q){let J=this._active,X=this.chart.data,q=[],N=[],K=[],H=[],F,M;for(F=0,M=J.length;F<M;++F)H.push(TS(this.chart,J[F]));if(Q.filter)H=H.filter((w,R,_)=>Q.filter(w,R,_,X));if(Q.itemSort)H=H.sort((w,R)=>Q.itemSort(w,R,X));return W1(H,(w)=>{let R=H_(Q.callbacks,w);q.push(X6(R,"labelColor",this,w)),N.push(X6(R,"labelPointStyle",this,w)),K.push(X6(R,"labelTextColor",this,w))}),this.labelColors=q,this.labelPointStyles=N,this.labelTextColors=K,this.dataPoints=H,H}update(Q,J){let X=this.options.setContext(this.getContext()),q=this._active,N,K=[];if(!q.length){if(this.opacity!==0)N={opacity:0}}else{let H=EQ[X.position].call(this,q,this._eventPosition);K=this._createItems(X),this.title=this.getTitle(K,X),this.beforeBody=this.getBeforeBody(K,X),this.body=this.getBody(K,X),this.afterBody=this.getAfterBody(K,X),this.footer=this.getFooter(K,X);let F=this._size=N_(this,X),M=Object.assign({},H,F),w=U_(this.chart,X,M),R=K_(X,M,w,this.chart);this.xAlign=w.xAlign,this.yAlign=w.yAlign,N={opacity:1,x:R.x,y:R.y,width:F.width,height:F.height,caretX:H.x,caretY:H.y}}if(this._tooltipItems=K,this.$context=void 0,N)this._resolveAnimations().update(this,N);if(Q&&X.external)X.external.call(this,{chart:this.chart,tooltip:this,replay:J})}drawCaret(Q,J,X,q){let N=this.getCaretPosition(Q,X,q);J.lineTo(N.x1,N.y1),J.lineTo(N.x2,N.y2),J.lineTo(N.x3,N.y3)}getCaretPosition(Q,J,X){let{xAlign:q,yAlign:N}=this,{caretSize:K,cornerRadius:H}=X,{topLeft:F,topRight:M,bottomLeft:w,bottomRight:R}=g8(H),{x:_,y:P}=Q,{width:I,height:A}=J,V,O,D,h,p,s;if(N==="center"){if(p=P+A/2,q==="left")V=_,O=V-K,h=p+K,s=p-K;else V=_+I,O=V+K,h=p-K,s=p+K;D=V}else{if(q==="left")O=_+Math.max(F,w)+K;else if(q==="right")O=_+I-Math.max(M,R)-K;else O=this.caretX;if(N==="top")h=P,p=h-K,V=O-K,D=O+K;else h=P+A,p=h+K,V=O+K,D=O-K;s=h}return{x1:V,x2:O,x3:D,y1:h,y2:p,y3:s}}drawTitle(Q,J,X){let q=this.title,N=q.length,K,H,F;if(N){let M=m9(X.rtl,this.x,this.width);Q.x=i3(this,X.titleAlign,X),J.textAlign=M.textAlign(X.titleAlign),J.textBaseline="middle",K=X5(X.titleFont),H=X.titleSpacing,J.fillStyle=X.titleColor,J.font=K.string;for(F=0;F<N;++F)if(J.fillText(q[F],M.x(Q.x),Q.y+K.lineHeight/2),Q.y+=K.lineHeight+H,F+1===N)Q.y+=X.titleMarginBottom-H}}_drawColorBox(Q,J,X,q,N){let K=this.labelColors[X],H=this.labelPointStyles[X],{boxHeight:F,boxWidth:M}=N,w=X5(N.bodyFont),R=i3(this,"left",N),_=q.x(R),P=F<w.lineHeight?(w.lineHeight-F)/2:0,I=J.y+P;if(N.usePointStyle){let A={radius:Math.min(M,F)/2,pointStyle:H.pointStyle,rotation:H.rotation,borderWidth:1},V=q.leftForLtr(_,M)+M/2,O=I+F/2;Q.strokeStyle=N.multiKeyBackground,Q.fillStyle=N.multiKeyBackground,p3(Q,A,V,O),Q.strokeStyle=K.borderColor,Q.fillStyle=K.backgroundColor,p3(Q,A,V,O)}else{Q.lineWidth=$1(K.borderWidth)?Math.max(...Object.values(K.borderWidth)):K.borderWidth||1,Q.strokeStyle=K.borderColor,Q.setLineDash(K.borderDash||[]),Q.lineDashOffset=K.borderDashOffset||0;let A=q.leftForLtr(_,M),V=q.leftForLtr(q.xPlus(_,1),M-2),O=g8(K.borderRadius);if(Object.values(O).some((D)=>D!==0))Q.beginPath(),Q.fillStyle=N.multiKeyBackground,_$(Q,{x:A,y:I,w:M,h:F,radius:O}),Q.fill(),Q.stroke(),Q.fillStyle=K.backgroundColor,Q.beginPath(),_$(Q,{x:V,y:I+1,w:M-2,h:F-2,radius:O}),Q.fill();else Q.fillStyle=N.multiKeyBackground,Q.fillRect(A,I,M,F),Q.strokeRect(A,I,M,F),Q.fillStyle=K.backgroundColor,Q.fillRect(V,I+1,M-2,F-2)}Q.fillStyle=this.labelTextColors[X]}drawBody(Q,J,X){let{body:q}=this,{bodySpacing:N,bodyAlign:K,displayColors:H,boxHeight:F,boxWidth:M,boxPadding:w}=X,R=X5(X.bodyFont),_=R.lineHeight,P=0,I=m9(X.rtl,this.x,this.width),A=function(t){J.fillText(t,I.x(Q.x+P),Q.y+_/2),Q.y+=_+N},V=I.textAlign(K),O,D,h,p,s,a,J0;J.textAlign=K,J.textBaseline="middle",J.font=R.string,Q.x=i3(this,V,X),J.fillStyle=X.bodyColor,W1(this.beforeBody,A),P=H&&V!=="right"?K==="center"?M/2+w:M+2+w:0;for(p=0,a=q.length;p<a;++p){if(O=q[p],D=this.labelTextColors[p],J.fillStyle=D,W1(O.before,A),h=O.lines,H&&h.length)this._drawColorBox(J,Q,p,I,X),_=Math.max(R.lineHeight,F);for(s=0,J0=h.length;s<J0;++s)A(h[s]),_=R.lineHeight;W1(O.after,A)}P=0,_=R.lineHeight,W1(this.afterBody,A),Q.y-=N}drawFooter(Q,J,X){let q=this.footer,N=q.length,K,H;if(N){let F=m9(X.rtl,this.x,this.width);Q.x=i3(this,X.footerAlign,X),Q.y+=X.footerMarginTop,J.textAlign=F.textAlign(X.footerAlign),J.textBaseline="middle",K=X5(X.footerFont),J.fillStyle=X.footerColor,J.font=K.string;for(H=0;H<N;++H)J.fillText(q[H],F.x(Q.x),Q.y+K.lineHeight/2),Q.y+=K.lineHeight+X.footerSpacing}}drawBackground(Q,J,X,q){let{xAlign:N,yAlign:K}=this,{x:H,y:F}=Q,{width:M,height:w}=X,{topLeft:R,topRight:_,bottomLeft:P,bottomRight:I}=g8(q.cornerRadius);if(J.fillStyle=q.backgroundColor,J.strokeStyle=q.borderColor,J.lineWidth=q.borderWidth,J.beginPath(),J.moveTo(H+R,F),K==="top")this.drawCaret(Q,J,X,q);if(J.lineTo(H+M-_,F),J.quadraticCurveTo(H+M,F,H+M,F+_),K==="center"&&N==="right")this.drawCaret(Q,J,X,q);if(J.lineTo(H+M,F+w-I),J.quadraticCurveTo(H+M,F+w,H+M-I,F+w),K==="bottom")this.drawCaret(Q,J,X,q);if(J.lineTo(H+P,F+w),J.quadraticCurveTo(H,F+w,H,F+w-P),K==="center"&&N==="left")this.drawCaret(Q,J,X,q);if(J.lineTo(H,F+R),J.quadraticCurveTo(H,F,H+R,F),J.closePath(),J.fill(),q.borderWidth>0)J.stroke()}_updateAnimationTarget(Q){let J=this.chart,X=this.$animations,q=X&&X.x,N=X&&X.y;if(q||N){let K=EQ[Q.position].call(this,this._active,this._eventPosition);if(!K)return;let H=this._size=N_(this,Q),F=Object.assign({},K,this._size),M=U_(J,Q,F),w=K_(Q,F,M,J);if(q._to!==w.x||N._to!==w.y)this.xAlign=M.xAlign,this.yAlign=M.yAlign,this.width=H.width,this.height=H.height,this.caretX=K.x,this.caretY=K.y,this._resolveAnimations().update(this,w)}}_willRender(){return!!this.opacity}draw(Q){let J=this.options.setContext(this.getContext()),X=this.opacity;if(!X)return;this._updateAnimationTarget(J);let q={width:this.width,height:this.height},N={x:this.x,y:this.y};X=Math.abs(X)<0.001?0:X;let K=I5(J.padding),H=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;if(J.enabled&&H)Q.save(),Q.globalAlpha=X,this.drawBackground(N,Q,q,J),xU(Q,J.textDirection),N.y+=K.top,this.drawTitle(N,Q,J),this.drawBody(N,Q,J),this.drawFooter(N,Q,J),mU(Q,J.textDirection),Q.restore()}getActiveElements(){return this._active||[]}setActiveElements(Q,J){let X=this._active,q=Q.map(({datasetIndex:H,index:F})=>{let M=this.chart.getDatasetMeta(H);if(!M)throw Error("Cannot find a dataset at index "+H);return{datasetIndex:H,element:M.data[F],index:F}}),N=!wQ(X,q),K=this._positionChanged(q,J);if(N||K)this._active=q,this._eventPosition=J,this._ignoreReplayEvents=!0,this.update(!0)}handleEvent(Q,J,X=!0){if(J&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let q=this.options,N=this._active||[],K=this._getActiveElements(Q,N,J,X),H=this._positionChanged(K,Q),F=J||!wQ(K,N)||H;if(F){if(this._active=K,q.enabled||q.external)this._eventPosition={x:Q.x,y:Q.y},this.update(!0,J)}return F}_getActiveElements(Q,J,X,q){let N=this.options;if(Q.type==="mouseout")return[];if(!q)return J.filter((H)=>this.chart.data.datasets[H.datasetIndex]&&this.chart.getDatasetMeta(H.datasetIndex).controller.getParsed(H.index)!==void 0);let K=this.chart.getElementsAtEventForMode(Q,N.mode,N,X);if(N.reverse)K.reverse();return K}_positionChanged(Q,J){let{caretX:X,caretY:q,options:N}=this,K=EQ[N.position].call(this,Q,J);return K!==!1&&(X!==K.x||q!==K.y)}}var o_={id:"tooltip",_element:YK,positioners:EQ,afterInit(Q,J,X){if(X)Q.tooltip=new YK({chart:Q,options:X})},beforeUpdate(Q,J,X){if(Q.tooltip)Q.tooltip.initialize(X)},reset(Q,J,X){if(Q.tooltip)Q.tooltip.initialize(X)},afterDraw(Q){let J=Q.tooltip;if(J&&J._willRender()){let X={tooltip:J};if(Q.notifyPlugins("beforeTooltipDraw",{...X,cancelable:!0})===!1)return;J.draw(Q.ctx),Q.notifyPlugins("afterTooltipDraw",X)}},afterEvent(Q,J){if(Q.tooltip){let X=J.replay;if(Q.tooltip.handleEvent(J.event,X,J.inChartArea))J.changed=!0}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(Q,J)=>J.bodyFont.size,boxWidth:(Q,J)=>J.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:s_},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:(Q)=>Q!=="filter"&&Q!=="itemSort"&&Q!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};var SS=(Q,J,X,q)=>{if(typeof J==="string")X=Q.push(J)-1,q.unshift({index:X,label:J});else if(isNaN(J))X=null;return X};function jS(Q,J,X,q){let N=Q.indexOf(J);if(N===-1)return SS(Q,J,X,q);let K=Q.lastIndexOf(J);return N!==K?X:N}var DS=(Q,J)=>Q===null?null:J6(Math.round(Q),0,J);function F_(Q){let J=this.getLabels();if(Q>=0&&Q<J.length)return J[Q];return Q}class _K extends c9{static id="category";static defaults={ticks:{callback:F_}};constructor(Q){super(Q);this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(Q){let J=this._addedLabels;if(J.length){let X=this.getLabels();for(let{index:q,label:N}of J)if(X[q]===N)X.splice(q,1);this._addedLabels=[]}super.init(Q)}parse(Q,J){if(J1(Q))return null;let X=this.getLabels();return J=isFinite(J)&&X[J]===Q?J:jS(X,Q,n0(J,Q),this._addedLabels),DS(J,X.length-1)}determineDataLimits(){let{minDefined:Q,maxDefined:J}=this.getUserBounds(),{min:X,max:q}=this.getMinMax(!0);if(this.options.bounds==="ticks"){if(!Q)X=0;if(!J)q=this.getLabels().length-1}this.min=X,this.max=q}buildTicks(){let Q=this.min,J=this.max,X=this.options.offset,q=[],N=this.getLabels();N=Q===0&&J===N.length-1?N:N.slice(Q,J+1),this._valueRange=Math.max(N.length-(X?0:1),1),this._startValue=this.min-(X?0.5:0);for(let K=Q;K<=J;K++)q.push({value:K});return q}getLabelForValue(Q){return F_.call(this,Q)}configure(){if(super.configure(),!this.isHorizontal())this._reversePixels=!this._reversePixels}getPixelForValue(Q){if(typeof Q!=="number")Q=this.parse(Q);return Q===null?NaN:this.getPixelForDecimal((Q-this._startValue)/this._valueRange)}getPixelForTick(Q){let J=this.ticks;if(Q<0||Q>J.length-1)return null;return this.getPixelForValue(J[Q].value)}getValueForPixel(Q){return Math.round(this._startValue+this.getDecimalForPixel(Q)*this._valueRange)}getBasePixel(){return this.bottom}}function vS(Q,J){let X=[],q=0.00000000000001,{bounds:N,step:K,min:H,max:F,precision:M,count:w,maxTicks:R,maxDigits:_,includeBounds:P}=Q,I=K||1,A=R-1,{min:V,max:O}=J,D=!J1(H),h=!J1(F),p=!J1(w),s=(O-V)/(_+1),a=PU((O-V)/A/I)*I,J0,t,i,Y0;if(a<0.00000000000001&&!D&&!h)return[{value:V},{value:O}];if(Y0=Math.ceil(O/a)-Math.floor(V/a),Y0>A)a=PU(Y0*a/A/I)*I;if(!J1(M))J0=Math.pow(10,M),a=Math.ceil(a*J0)/J0;if(N==="ticks")t=Math.floor(V/a)*a,i=Math.ceil(O/a)*a;else t=V,i=O;if(D&&h&&K&&eR((F-H)/K,a/1000))Y0=Math.round(Math.min((F-H)/a,R)),a=(F-H)/Y0,t=H,i=F;else if(p)t=D?H:t,i=h?F:i,Y0=w-1,a=(i-t)/Y0;else if(Y0=(i-t)/a,R$(Y0,Math.round(Y0),a/1000))Y0=Math.round(Y0);else Y0=Math.ceil(Y0);let d=Math.max(CU(a),CU(t));J0=Math.pow(10,J1(M)?d:M),t=Math.round(t*J0)/J0,i=Math.round(i*J0)/J0;let H0=0;if(D){if(P&&t!==H){if(X.push({value:H}),t<H)H0++;if(R$(Math.round((t+H0*a)*J0)/J0,H,M_(H,s,Q)))H0++}else if(t<H)H0++}for(;H0<Y0;++H0){let P0=Math.round((t+H0*a)*J0)/J0;if(h&&P0>F)break;X.push({value:P0})}if(h&&P&&i!==F)if(X.length&&R$(X[X.length-1].value,F,M_(F,s,Q)))X[X.length-1].value=F;else X.push({value:F});else if(!h||i===F)X.push({value:i});return X}function M_(Q,J,{horizontal:X,minRotation:q}){let N=A2(q),K=(X?Math.sin(N):Math.cos(N))||0.001,H=0.75*J*(""+Q).length;return Math.min(J/K,H)}class jQ extends c9{constructor(Q){super(Q);this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(Q,J){if(J1(Q))return null;if((typeof Q==="number"||Q instanceof Number)&&!isFinite(+Q))return null;return+Q}handleTickRangeOptions(){let{beginAtZero:Q}=this.options,{minDefined:J,maxDefined:X}=this.getUserBounds(),{min:q,max:N}=this,K=(F)=>q=J?q:F,H=(F)=>N=X?N:F;if(Q){let F=H4(q),M=H4(N);if(F<0&&M<0)H(0);else if(F>0&&M>0)K(0)}if(q===N){let F=N===0?1:Math.abs(N*0.05);if(H(N+F),!Q)K(q-F)}this.min=q,this.max=N}getTickLimit(){let Q=this.options.ticks,{maxTicksLimit:J,stepSize:X}=Q,q;if(X){if(q=Math.ceil(this.max/X)-Math.floor(this.min/X)+1,q>1000)console.warn(`scales.${this.id}.ticks.stepSize: ${X} would result generating up to ${q} ticks. Limiting to 1000.`),q=1000}else q=this.computeTickLimit(),J=J||11;if(J)q=Math.min(J,q);return q}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let Q=this.options,J=Q.ticks,X=this.getTickLimit();X=Math.max(2,X);let q={maxTicks:X,bounds:Q.bounds,min:Q.min,max:Q.max,precision:J.precision,step:J.stepSize,count:J.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:J.minRotation||0,includeBounds:J.includeBounds!==!1},N=this._range||this,K=vS(q,N);if(Q.bounds==="ticks")TU(K,this,"value");if(Q.reverse)K.reverse(),this.start=this.max,this.end=this.min;else this.start=this.min,this.end=this.max;return K}configure(){let Q=this.ticks,J=this.min,X=this.max;if(super.configure(),this.options.offset&&Q.length){let q=(X-J)/Math.max(Q.length-1,1)/2;J-=q,X+=q}this._startValue=J,this._endValue=X,this._valueRange=X-J}getLabelForValue(Q){return m3(Q,this.chart.options.locale,this.options.ticks.format)}}class LK extends jQ{static id="linear";static defaults={ticks:{callback:RQ.formatters.numeric}};determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!0);this.min=x1(Q)?Q:0,this.max=x1(J)?J:1,this.handleTickRangeOptions()}computeTickLimit(){let Q=this.isHorizontal(),J=Q?this.width:this.height,X=A2(this.options.ticks.minRotation),q=(Q?Math.sin(X):Math.cos(X))||0.001,N=this._resolveTickFontOptions(0);return Math.ceil(J/Math.min(40,N.lineHeight/q))}getPixelForValue(Q){return Q===null?NaN:this.getPixelForDecimal((Q-this._startValue)/this._valueRange)}getValueForPixel(Q){return this._startValue+this.getDecimalForPixel(Q)*this._valueRange}}var DQ=(Q)=>Math.floor(V2(Q)),p9=(Q,J)=>Math.pow(10,DQ(Q)+J);function W_(Q){return Q/Math.pow(10,DQ(Q))===1}function w_(Q,J,X){let q=Math.pow(10,X),N=Math.floor(Q/q);return Math.ceil(J/q)-N}function bS(Q,J){let X=J-Q,q=DQ(X);while(w_(Q,J,q)>10)q++;while(w_(Q,J,q)<10)q--;return Math.min(q,DQ(Q))}function kS(Q,{min:J,max:X}){J=G6(Q.min,J);let q=[],N=DQ(J),K=bS(J,X),H=K<0?Math.pow(10,Math.abs(K)):1,F=Math.pow(10,K),M=N>K?Math.pow(10,N):0,w=Math.round((J-M)*H)/H,R=Math.floor((J-M)/F/10)*F*10,_=Math.floor((w-R)/Math.pow(10,K)),P=G6(Q.min,Math.round((M+R+_*Math.pow(10,K))*H)/H);while(P<X){if(q.push({value:P,major:W_(P),significand:_}),_>=10)_=_<15?15:20;else _++;if(_>=20)K++,_=2,H=K>=0?1:H;P=Math.round((M+R+_*Math.pow(10,K))*H)/H}let I=G6(Q.max,P);return q.push({value:I,major:W_(I),significand:_}),q}class fS extends c9{static id="logarithmic";static defaults={ticks:{callback:RQ.formatters.logarithmic,major:{enabled:!0}}};constructor(Q){super(Q);this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(Q,J){let X=jQ.prototype.parse.apply(this,[Q,J]);if(X===0){this._zero=!0;return}return x1(X)&&X>0?X:null}determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!0);if(this.min=x1(Q)?Math.max(0,Q):null,this.max=x1(J)?Math.max(0,J):null,this.options.beginAtZero)this._zero=!0;if(this._zero&&this.min!==this._suggestedMin&&!x1(this._userMin))this.min=Q===p9(this.min,0)?p9(this.min,-1):p9(this.min,0);this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:Q,maxDefined:J}=this.getUserBounds(),X=this.min,q=this.max,N=(H)=>X=Q?X:H,K=(H)=>q=J?q:H;if(X===q)if(X<=0)N(1),K(10);else N(p9(X,-1)),K(p9(q,1));if(X<=0)N(p9(q,-1));if(q<=0)K(p9(X,1));this.min=X,this.max=q}buildTicks(){let Q=this.options,J={min:this._userMin,max:this._userMax},X=kS(J,this);if(Q.bounds==="ticks")TU(X,this,"value");if(Q.reverse)X.reverse(),this.start=this.max,this.end=this.min;else this.start=this.min,this.end=this.max;return X}getLabelForValue(Q){return Q===void 0?"0":m3(Q,this.chart.options.locale,this.options.ticks.format)}configure(){let Q=this.min;super.configure(),this._startValue=V2(Q),this._valueRange=V2(this.max)-V2(Q)}getPixelForValue(Q){if(Q===void 0||Q===0)Q=this.min;if(Q===null||isNaN(Q))return NaN;return this.getPixelForDecimal(Q===this.min?0:(V2(Q)-this._startValue)/this._valueRange)}getValueForPixel(Q){let J=this.getDecimalForPixel(Q);return Math.pow(10,this._startValue+J*this._valueRange)}}function NK(Q){let J=Q.ticks;if(J.display&&Q.display){let X=I5(J.backdropPadding);return n0(J.font&&J.font.size,m1.font.size)+X.height}return 0}function yS(Q,J,X){return X=j1(X)?X:[X],{w:Hz(Q,J.string,X),h:X.length*J.lineHeight}}function R_(Q,J,X,q,N){if(Q===q||Q===N)return{start:J-X/2,end:J+X/2};else if(Q<q||Q>N)return{start:J-X,end:J};return{start:J,end:J+X}}function gS(Q){let J={l:Q.left+Q._padding.left,r:Q.right-Q._padding.right,t:Q.top+Q._padding.top,b:Q.bottom-Q._padding.bottom},X=Object.assign({},J),q=[],N=[],K=Q._pointLabels.length,H=Q.options.pointLabels,F=H.centerPointLabels?s1/K:0;for(let M=0;M<K;M++){let w=H.setContext(Q.getPointLabelContext(M));N[M]=w.padding;let R=Q.getPointPosition(M,Q.drawingArea+N[M],F),_=X5(w.font),P=yS(Q.ctx,_,Q._pointLabels[M]);q[M]=P;let I=$6(Q.getIndexAngle(M)+F),A=Math.round(h3(I)),V=R_(A,R.x,P.w,0,180),O=R_(A,R.y,P.h,90,270);hS(X,J,I,V,O)}Q.setCenterPoint(J.l-X.l,X.r-J.r,J.t-X.t,X.b-J.b),Q._pointLabelItems=mS(Q,q,N)}function hS(Q,J,X,q,N){let K=Math.abs(Math.sin(X)),H=Math.abs(Math.cos(X)),F=0,M=0;if(q.start<J.l)F=(J.l-q.start)/K,Q.l=Math.min(Q.l,J.l-F);else if(q.end>J.r)F=(q.end-J.r)/K,Q.r=Math.max(Q.r,J.r+F);if(N.start<J.t)M=(J.t-N.start)/H,Q.t=Math.min(Q.t,J.t-M);else if(N.end>J.b)M=(N.end-J.b)/H,Q.b=Math.max(Q.b,J.b+M)}function uS(Q,J,X){let q=Q.drawingArea,{extra:N,additionalAngle:K,padding:H,size:F}=X,M=Q.getPointPosition(J,q+N+H,K),w=Math.round(h3($6(M.angle+Z6))),R=cS(M.y,F.h,w),_=dS(w),P=pS(M.x,F.w,_);return{visible:!0,x:M.x,y:R,textAlign:_,left:P,top:R,right:P+F.w,bottom:R+F.h}}function xS(Q,J){if(!J)return!0;let{left:X,top:q,right:N,bottom:K}=Q;return!(p4({x:X,y:q},J)||p4({x:X,y:K},J)||p4({x:N,y:q},J)||p4({x:N,y:K},J))}function mS(Q,J,X){let q=[],N=Q._pointLabels.length,K=Q.options,{centerPointLabels:H,display:F}=K.pointLabels,M={extra:NK(K)/2,additionalAngle:H?s1/N:0},w;for(let R=0;R<N;R++){M.padding=X[R],M.size=J[R];let _=uS(Q,R,M);if(q.push(_),F==="auto"){if(_.visible=xS(_,w),_.visible)w=_}}return q}function dS(Q){if(Q===0||Q===180)return"center";else if(Q<180)return"left";return"right"}function pS(Q,J,X){if(X==="right")Q-=J;else if(X==="center")Q-=J/2;return Q}function cS(Q,J,X){if(X===90||X===270)Q-=J/2;else if(X>270||X<90)Q-=J;return Q}function lS(Q,J,X){let{left:q,top:N,right:K,bottom:H}=X,{backdropColor:F}=J;if(!J1(F)){let M=g8(J.borderRadius),w=I5(J.backdropPadding);Q.fillStyle=F;let R=q-w.left,_=N-w.top,P=K-q+w.width,I=H-N+w.height;if(Object.values(M).some((A)=>A!==0))Q.beginPath(),_$(Q,{x:R,y:_,w:P,h:I,radius:M}),Q.fill();else Q.fillRect(R,_,P,I)}}function rS(Q,J){let{ctx:X,options:{pointLabels:q}}=Q;for(let N=J-1;N>=0;N--){let K=Q._pointLabelItems[N];if(!K.visible)continue;let H=q.setContext(Q.getPointLabelContext(N));lS(X,H,K);let F=X5(H.font),{x:M,y:w,textAlign:R}=K;y8(X,Q._pointLabels[N],M,w+F.lineHeight/2,F,{color:H.color,textAlign:R,textBaseline:"middle"})}}function a_(Q,J,X,q){let{ctx:N}=Q;if(X)N.arc(Q.xCenter,Q.yCenter,J,0,Q6);else{let K=Q.getPointPosition(0,J);N.moveTo(K.x,K.y);for(let H=1;H<q;H++)K=Q.getPointPosition(H,J),N.lineTo(K.x,K.y)}}function nS(Q,J,X,q,N){let K=Q.ctx,H=J.circular,{color:F,lineWidth:M}=J;if(!H&&!q||!F||!M||X<0)return;K.save(),K.strokeStyle=F,K.lineWidth=M,K.setLineDash(N.dash||[]),K.lineDashOffset=N.dashOffset,K.beginPath(),a_(Q,X,H,q),K.closePath(),K.stroke(),K.restore()}function sS(Q,J,X){return S2(Q,{label:X,index:J,type:"pointLabel"})}class oS extends jQ{static id="radialLinear";static defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:RQ.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(Q){return Q},padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(Q){super(Q);this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){let Q=this._padding=I5(NK(this.options)/2),J=this.width=this.maxWidth-Q.width,X=this.height=this.maxHeight-Q.height;this.xCenter=Math.floor(this.left+J/2+Q.left),this.yCenter=Math.floor(this.top+X/2+Q.top),this.drawingArea=Math.floor(Math.min(J,X)/2)}determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!1);this.min=x1(Q)&&!isNaN(Q)?Q:0,this.max=x1(J)&&!isNaN(J)?J:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/NK(this.options))}generateTickLabels(Q){jQ.prototype.generateTickLabels.call(this,Q),this._pointLabels=this.getLabels().map((J,X)=>{let q=V1(this.options.pointLabels.callback,[J,X],this);return q||q===0?q:""}).filter((J,X)=>this.chart.getDataVisibility(X))}fit(){let Q=this.options;if(Q.display&&Q.pointLabels.display)gS(this);else this.setCenterPoint(0,0,0,0)}setCenterPoint(Q,J,X,q){this.xCenter+=Math.floor((Q-J)/2),this.yCenter+=Math.floor((X-q)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(Q,J,X,q))}getIndexAngle(Q){let J=Q6/(this._pointLabels.length||1),X=this.options.startAngle||0;return $6(Q*J+A2(X))}getDistanceFromCenterForValue(Q){if(J1(Q))return NaN;let J=this.drawingArea/(this.max-this.min);if(this.options.reverse)return(this.max-Q)*J;return(Q-this.min)*J}getValueForDistanceFromCenter(Q){if(J1(Q))return NaN;let J=Q/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-J:this.min+J}getPointLabelContext(Q){let J=this._pointLabels||[];if(Q>=0&&Q<J.length){let X=J[Q];return sS(this.getContext(),Q,X)}}getPointPosition(Q,J,X=0){let q=this.getIndexAngle(Q)-Z6+X;return{x:Math.cos(q)*J+this.xCenter,y:Math.sin(q)*J+this.yCenter,angle:q}}getPointPositionForValue(Q,J){return this.getPointPosition(Q,this.getDistanceFromCenterForValue(J))}getBasePosition(Q){return this.getPointPositionForValue(Q||0,this.getBaseValue())}getPointLabelPosition(Q){let{left:J,top:X,right:q,bottom:N}=this._pointLabelItems[Q];return{left:J,top:X,right:q,bottom:N}}drawBackground(){let{backgroundColor:Q,grid:{circular:J}}=this.options;if(Q){let X=this.ctx;X.save(),X.beginPath(),a_(this,this.getDistanceFromCenterForValue(this._endValue),J,this._pointLabels.length),X.closePath(),X.fillStyle=Q,X.fill(),X.restore()}}drawGrid(){let Q=this.ctx,J=this.options,{angleLines:X,grid:q,border:N}=J,K=this._pointLabels.length,H,F,M;if(J.pointLabels.display)rS(this,K);if(q.display)this.ticks.forEach((w,R)=>{if(R!==0||R===0&&this.min<0){F=this.getDistanceFromCenterForValue(w.value);let _=this.getContext(R),P=q.setContext(_),I=N.setContext(_);nS(this,P,F,K,I)}});if(X.display){Q.save();for(H=K-1;H>=0;H--){let w=X.setContext(this.getPointLabelContext(H)),{color:R,lineWidth:_}=w;if(!_||!R)continue;Q.lineWidth=_,Q.strokeStyle=R,Q.setLineDash(w.borderDash),Q.lineDashOffset=w.borderDashOffset,F=this.getDistanceFromCenterForValue(J.reverse?this.min:this.max),M=this.getPointPosition(H,F),Q.beginPath(),Q.moveTo(this.xCenter,this.yCenter),Q.lineTo(M.x,M.y),Q.stroke()}Q.restore()}}drawBorder(){}drawLabels(){let Q=this.ctx,J=this.options,X=J.ticks;if(!X.display)return;let q=this.getIndexAngle(0),N,K;Q.save(),Q.translate(this.xCenter,this.yCenter),Q.rotate(q),Q.textAlign="center",Q.textBaseline="middle",this.ticks.forEach((H,F)=>{if(F===0&&this.min>=0&&!J.reverse)return;let M=X.setContext(this.getContext(F)),w=X5(M.font);if(N=this.getDistanceFromCenterForValue(this.ticks[F].value),M.showLabelBackdrop){Q.font=w.string,K=Q.measureText(H.label).width,Q.fillStyle=M.backdropColor;let R=I5(M.backdropPadding);Q.fillRect(-K/2-R.left,-N-w.size/2-R.top,K+R.width,w.size+R.height)}y8(Q,H.label,0,-N,w,{color:M.color,strokeColor:M.textStrokeColor,strokeWidth:M.textStrokeWidth})}),Q.restore()}drawTitle(){}}var GX={millisecond:{common:!0,size:1,steps:1000},second:{common:!0,size:1000,steps:60},minute:{common:!0,size:60000,steps:60},hour:{common:!0,size:3600000,steps:24},day:{common:!0,size:86400000,steps:30},week:{common:!1,size:604800000,steps:4},month:{common:!0,size:2628000000,steps:12},quarter:{common:!1,size:7884000000,steps:4},year:{common:!0,size:31540000000}},q6=Object.keys(GX);function z_(Q,J){return Q-J}function __(Q,J){if(J1(J))return null;let X=Q._adapter,{parser:q,round:N,isoWeekday:K}=Q._parseOpts,H=J;if(typeof q==="function")H=q(H);if(!x1(H))H=typeof q==="string"?X.parse(H,q):X.parse(H);if(H===null)return null;if(N)H=N==="week"&&(z$(K)||K===!0)?X.startOf(H,"isoWeek",K):X.startOf(H,N);return+H}function L_(Q,J,X,q){let N=q6.length;for(let K=q6.indexOf(Q);K<N-1;++K){let H=GX[q6[K]],F=H.steps?H.steps:Number.MAX_SAFE_INTEGER;if(H.common&&Math.ceil((X-J)/(F*H.size))<=q)return q6[K]}return q6[N-1]}function aS(Q,J,X,q,N){for(let K=q6.length-1;K>=q6.indexOf(X);K--){let H=q6[K];if(GX[H].common&&Q._adapter.diff(N,q,H)>=J-1)return H}return q6[X?q6.indexOf(X):0]}function iS(Q){for(let J=q6.indexOf(Q)+1,X=q6.length;J<X;++J)if(GX[q6[J]].common)return q6[J]}function P_(Q,J,X){if(!X)Q[J]=!0;else if(X.length){let{lo:q,hi:N}=u3(X,J),K=X[q]>=J?X[q]:X[N];Q[K]=!0}}function tS(Q,J,X,q){let N=Q._adapter,K=+N.startOf(J[0].value,q),H=J[J.length-1].value,F,M;for(F=K;F<=H;F=+N.add(F,1,q))if(M=X[F],M>=0)J[M].major=!0;return J}function T_(Q,J,X){let q=[],N={},K=J.length,H,F;for(H=0;H<K;++H)F=J[H],N[F]=H,q.push({value:F,major:!1});return K===0||!X?q:tS(Q,q,N,X)}class UK extends c9{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(Q){super(Q);this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(Q,J={}){let X=Q.time||(Q.time={}),q=this._adapter=new bA._date(Q.adapters.date);q.init(J),W$(X.displayFormats,q.formats()),this._parseOpts={parser:X.parser,round:X.round,isoWeekday:X.isoWeekday},super.init(Q),this._normalized=J.normalized}parse(Q,J){if(Q===void 0)return null;return __(this,Q)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let Q=this.options,J=this._adapter,X=Q.time.unit||"day",{min:q,max:N,minDefined:K,maxDefined:H}=this.getUserBounds();function F(M){if(!K&&!isNaN(M.min))q=Math.min(q,M.min);if(!H&&!isNaN(M.max))N=Math.max(N,M.max)}if(!K||!H){if(F(this._getLabelBounds()),Q.bounds!=="ticks"||Q.ticks.source!=="labels")F(this.getMinMax(!1))}q=x1(q)&&!isNaN(q)?q:+J.startOf(Date.now(),X),N=x1(N)&&!isNaN(N)?N:+J.endOf(Date.now(),X)+1,this.min=Math.min(q,N-1),this.max=Math.max(q+1,N)}_getLabelBounds(){let Q=this.getLabelTimestamps(),J=Number.POSITIVE_INFINITY,X=Number.NEGATIVE_INFINITY;if(Q.length)J=Q[0],X=Q[Q.length-1];return{min:J,max:X}}buildTicks(){let Q=this.options,J=Q.time,X=Q.ticks,q=X.source==="labels"?this.getLabelTimestamps():this._generate();if(Q.bounds==="ticks"&&q.length)this.min=this._userMin||q[0],this.max=this._userMax||q[q.length-1];let N=this.min,K=this.max,H=Jz(q,N,K);if(this._unit=J.unit||(X.autoSkip?L_(J.minUnit,this.min,this.max,this._getLabelCapacity(N)):aS(this,H.length,J.minUnit,this.min,this.max)),this._majorUnit=!X.major.enabled||this._unit==="year"?void 0:iS(this._unit),this.initOffsets(q),Q.reverse)H.reverse();return T_(this,H,this._majorUnit)}afterAutoSkip(){if(this.options.offsetAfterAutoskip)this.initOffsets(this.ticks.map((Q)=>+Q.value))}initOffsets(Q=[]){let J=0,X=0,q,N;if(this.options.offset&&Q.length){if(q=this.getDecimalForValue(Q[0]),Q.length===1)J=1-q;else J=(this.getDecimalForValue(Q[1])-q)/2;if(N=this.getDecimalForValue(Q[Q.length-1]),Q.length===1)X=N;else X=(N-this.getDecimalForValue(Q[Q.length-2]))/2}let K=Q.length<3?0.5:0.25;J=J6(J,0,K),X=J6(X,0,K),this._offsets={start:J,end:X,factor:1/(J+1+X)}}_generate(){let Q=this._adapter,J=this.min,X=this.max,q=this.options,N=q.time,K=N.unit||L_(N.minUnit,J,X,this._getLabelCapacity(J)),H=n0(q.ticks.stepSize,1),F=K==="week"?N.isoWeekday:!1,M=z$(F)||F===!0,w={},R=J,_,P;if(M)R=+Q.startOf(R,"isoWeek",F);if(R=+Q.startOf(R,M?"day":K),Q.diff(X,J,K)>1e5*H)throw Error(J+" and "+X+" are too far apart with stepSize of "+H+" "+K);let I=q.ticks.source==="data"&&this.getDataTimestamps();for(_=R,P=0;_<X;_=+Q.add(_,H,K),P++)P_(w,_,I);if(_===X||q.bounds==="ticks"||P===1)P_(w,_,I);return Object.keys(w).sort(z_).map((A)=>+A)}getLabelForValue(Q){let J=this._adapter,X=this.options.time;if(X.tooltipFormat)return J.format(Q,X.tooltipFormat);return J.format(Q,X.displayFormats.datetime)}format(Q,J){let q=this.options.time.displayFormats,N=this._unit,K=J||q[N];return this._adapter.format(Q,K)}_tickFormatFunction(Q,J,X,q){let N=this.options,K=N.ticks.callback;if(K)return V1(K,[Q,J,X],this);let H=N.time.displayFormats,F=this._unit,M=this._majorUnit,w=F&&H[F],R=M&&H[M],_=X[J],P=M&&R&&_&&_.major;return this._adapter.format(Q,q||(P?R:w))}generateTickLabels(Q){let J,X,q;for(J=0,X=Q.length;J<X;++J)q=Q[J],q.label=this._tickFormatFunction(q.value,J,Q)}getDecimalForValue(Q){return Q===null?NaN:(Q-this.min)/(this.max-this.min)}getPixelForValue(Q){let J=this._offsets,X=this.getDecimalForValue(Q);return this.getPixelForDecimal((J.start+X)*J.factor)}getValueForPixel(Q){let J=this._offsets,X=this.getDecimalForPixel(Q)/J.factor-J.end;return this.min+X*(this.max-this.min)}_getLabelSize(Q){let J=this.options.ticks,X=this.ctx.measureText(Q).width,q=A2(this.isHorizontal()?J.maxRotation:J.minRotation),N=Math.cos(q),K=Math.sin(q),H=this._resolveTickFontOptions(0).size;return{w:X*N+H*K,h:X*K+H*N}}_getLabelCapacity(Q){let J=this.options.time,X=J.displayFormats,q=X[J.unit]||X.millisecond,N=this._tickFormatFunction(Q,0,T_(this,[Q],this._majorUnit),q),K=this._getLabelSize(N),H=Math.floor(this.isHorizontal()?this.width/K.w:this.height/K.h)-1;return H>0?H:1}getDataTimestamps(){let Q=this._cache.data||[],J,X;if(Q.length)return Q;let q=this.getMatchingVisibleMetas();if(this._normalized&&q.length)return this._cache.data=q[0].controller.getAllParsedValues(this);for(J=0,X=q.length;J<X;++J)Q=Q.concat(q[J].controller.getAllParsedValues(this));return this._cache.data=this.normalize(Q)}getLabelTimestamps(){let Q=this._cache.labels||[],J,X;if(Q.length)return Q;let q=this.getLabels();for(J=0,X=q.length;J<X;++J)Q.push(__(this,q[J]));return this._cache.labels=this._normalized?Q:this.normalize(Q)}normalize(Q){return VU(Q.sort(z_))}}function t3(Q,J,X){let q=0,N=Q.length-1,K,H,F,M;if(X){if(J>=Q[q].pos&&J<=Q[N].pos)({lo:q,hi:N}=v8(Q,"pos",J));({pos:K,time:F}=Q[q]),{pos:H,time:M}=Q[N]}else{if(J>=Q[q].time&&J<=Q[N].time)({lo:q,hi:N}=v8(Q,"time",J));({time:K,pos:F}=Q[q]),{time:H,pos:M}=Q[N]}let w=H-K;return w?F+(M-F)*(J-K)/w:F}class eS extends UK{static id="timeseries";static defaults=UK.defaults;constructor(Q){super(Q);this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let Q=this._getTimestampsForTable(),J=this._table=this.buildLookupTable(Q);this._minPos=t3(J,this.min),this._tableRange=t3(J,this.max)-this._minPos,super.initOffsets(Q)}buildLookupTable(Q){let{min:J,max:X}=this,q=[],N=[],K,H,F,M,w;for(K=0,H=Q.length;K<H;++K)if(M=Q[K],M>=J&&M<=X)q.push(M);if(q.length<2)return[{time:J,pos:0},{time:X,pos:1}];for(K=0,H=q.length;K<H;++K)if(w=q[K+1],F=q[K-1],M=q[K],Math.round((w+F)/2)!==M)N.push({time:M,pos:K/(H-1)});return N}_generate(){let Q=this.min,J=this.max,X=super.getDataTimestamps();if(!X.includes(Q)||!X.length)X.splice(0,0,Q);if(!X.includes(J)||X.length===1)X.push(J);return X.sort((q,N)=>q-N)}_getTimestampsForTable(){let Q=this._cache.all||[];if(Q.length)return Q;let J=this.getDataTimestamps(),X=this.getLabelTimestamps();if(J.length&&X.length)Q=this.normalize(J.concat(X));else Q=J.length?J:X;return Q=this._cache.all=Q,Q}getDecimalForValue(Q){return(t3(this._table,Q)-this._minPos)/this._tableRange}getValueForPixel(Q){let J=this._offsets,X=this.getDecimalForPixel(Q)/J.factor-J.end;return t3(this._table,X*this._tableRange+this._minPos,!0)}}l9.register(_K,LK,wK,L$,WK,n_,o_,r_,c_);var JT=n(JL(),1);var g2=n(T1(),1);var NX=n(T1(),1);var qX=(...Q)=>Q.filter((J,X,q)=>{return Boolean(J)&&J.trim()!==""&&q.indexOf(J)===X}).join(" ").trim();var GL=(Q)=>Q.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var XL=(Q)=>Q.replace(/^([A-Z])|[\s-_]+(\w)/g,(J,X,q)=>q?q.toUpperCase():X.toLowerCase());var CK=(Q)=>{let J=XL(Q);return J.charAt(0).toUpperCase()+J.slice(1)};var bQ=n(T1(),1);var YX={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var qL=(Q)=>{for(let J in Q)if(J.startsWith("aria-")||J==="role"||J==="title")return!0;return!1};var T$=n(T1(),1),qj=T$.createContext({});var YL=()=>T$.useContext(qj);var NL=bQ.forwardRef(({color:Q,size:J,strokeWidth:X,absoluteStrokeWidth:q,className:N="",children:K,iconNode:H,...F},M)=>{let{size:w=24,strokeWidth:R=2,absoluteStrokeWidth:_=!1,color:P="currentColor",className:I=""}=YL()??{},A=q??_?Number(X??R)*24/Number(J??w):X??R;return bQ.createElement("svg",{ref:M,...YX,width:J??w??YX.width,height:J??w??YX.height,stroke:Q??P,strokeWidth:A,className:qX("lucide",I,N),...!K&&!qL(F)&&{"aria-hidden":"true"},...F},[...H.map(([V,O])=>bQ.createElement(V,O)),...Array.isArray(K)?K:[K]])});var C0=(Q,J)=>{let X=NX.forwardRef(({className:q,...N},K)=>NX.createElement(NL,{ref:K,iconNode:J,className:qX(`lucide-${GL(CK(Q))}`,`lucide-${Q}`,q),...N}));return X.displayName=CK(Q),X};var Yj=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],x8=C0("circle-alert",Yj);var Nj=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],kQ=C0("activity",Nj);var Uj=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],fQ=C0("check",Uj);var Kj=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],yQ=C0("chevron-down",Kj);var Bj=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],gQ=C0("chevron-up",Bj);var Hj=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],hQ=C0("clock",Hj);var Fj=[["path",{d:"M13.744 17.736a6 6 0 1 1-7.48-7.48",key:"bq4yh3"}],["path",{d:"M15 6h1v4",key:"11y1tn"}],["path",{d:"m6.134 14.768.866-.5 2 3.464",key:"17snzx"}],["circle",{cx:"16",cy:"8",r:"6",key:"14bfc9"}]],n9=C0("coins",Fj);var Mj=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],uQ=C0("copy",Mj);var Wj=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],xQ=C0("cpu",Wj);var wj=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],mQ=C0("folder",wj);var Rj=[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]],dQ=C0("gauge",Rj);var zj=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],pQ=C0("hash",zj);var _j=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],cQ=C0("inbox",_j);var Lj=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],lQ=C0("layout-dashboard",Lj);var Pj=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],rQ=C0("menu",Pj);var Tj=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],nQ=C0("monitor",Tj);var Cj=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],sQ=C0("moon",Cj);var Ij=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]],oQ=C0("plug",Ij);var Oj=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],aQ=C0("refresh-cw",Oj);var Vj=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]],iQ=C0("smile",Vj);var Aj=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],tQ=C0("star",Aj);var Ej=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],eQ=C0("sun",Ej);var Sj=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],$J=C0("trending-up",Sj);var jj=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],ZJ=C0("wrench",jj);var Dj=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],s9=C0("x",Dj);var vj=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],QJ=C0("zap",vj);var DL=n(T1(),1);var JJ=[{id:"overview",label:"Overview",icon:lQ},{id:"requests",label:"Requests",icon:kQ},{id:"errors",label:"Errors",icon:x8},{id:"models",label:"Models",icon:xQ},{id:"providers",label:"Providers",icon:oQ},{id:"tools",label:"Tools",icon:ZJ},{id:"costs",label:"Costs",icon:n9},{id:"behavior",label:"Behavior",shortLabel:"Behavior",icon:iQ},{id:"projects",label:"Projects",icon:mQ},{id:"gain",label:"Gain",icon:$J}];var s6=n(U0(),1);function IK({activeSection:Q,onSectionChange:J,className:X=""}){return s6.jsxDEV("aside",{className:`stats-nav-rail ${X}`,children:[s6.jsxDEV("div",{className:"stats-nav-rail-header",children:s6.jsxDEV("div",{className:"stats-logo-container",children:[s6.jsxDEV("span",{className:"stats-logo-text",children:"OH MY PI"},void 0,!1,void 0,this),s6.jsxDEV("span",{className:"stats-logo-subtext",children:"Observability"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),s6.jsxDEV("nav",{className:"stats-nav-rail-menu",children:JJ.map((q)=>{let N=q.id===Q,K=q.icon;return s6.jsxDEV("button",{type:"button",onClick:()=>J(q.id),className:"stats-nav-rail-item","data-active":N?"true":"false","aria-current":N?"page":void 0,children:[s6.jsxDEV(K,{size:16,className:"stats-nav-rail-item-icon"},void 0,!1,void 0,this),s6.jsxDEV("span",{className:"stats-nav-rail-item-label",children:q.label},void 0,!1,void 0,this)]},q.id,!0,void 0,this)})},void 0,!1,void 0,this),s6.jsxDEV("div",{className:"stats-nav-rail-footer",children:s6.jsxDEV("span",{className:"stats-version-tag",children:"OMP Stats v1.0.0"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var OK=n(U0(),1),kj=[{value:"1h",label:"1h"},{value:"24h",label:"24h"},{value:"7d",label:"7d"},{value:"30d",label:"30d"},{value:"90d",label:"90d"},{value:"all",label:"All"}];function UL({value:Q,onChange:J,className:X=""}){return OK.jsxDEV("div",{className:`stats-range-control ${X}`,role:"radiogroup","aria-label":"Select time range",children:kj.map((q)=>{let N=q.value===Q;return OK.jsxDEV("button",{type:"button",role:"radio","aria-checked":N,"data-active":N?"true":"false",className:"stats-range-control-btn",onClick:()=>J(q.value),children:q.label},q.value,!1,void 0,this)})},void 0,!1,void 0,this)}var VK=n(T1(),1);class KL extends Error{status;endpoint;constructor(Q,J,X){super(X);this.name="ApiError",this.status=Q,this.endpoint=J}}async function o6(Q,J){let X=await fetch(Q,J);if(!X.ok)throw new KL(X.status,Q,`HTTP error ${X.status} on ${Q}`);return X.json()}async function BL(Q="24h",J){return o6(`/api/stats/overview?range=${encodeURIComponent(Q)}`,{signal:J})}async function HL(Q="24h",J){return o6(`/api/stats/model-dashboard?range=${encodeURIComponent(Q)}`,{signal:J})}async function FL(Q="24h",J){return o6(`/api/stats/costs?range=${encodeURIComponent(Q)}`,{signal:J})}async function UX(Q=50,J){return o6(`/api/stats/recent?limit=${Q}`,{signal:J})}async function ML(Q="24h",J=50,X){return o6(`/api/stats/errors?range=${encodeURIComponent(Q)}&limit=${J}`,{signal:X})}async function WL(Q,J){return o6(`/api/request/${Q}`,{signal:J})}async function wL(Q){return o6("/api/sync",{signal:Q})}async function RL(Q="24h",J){return o6(`/api/stats/behavior?range=${encodeURIComponent(Q)}`,{signal:J})}async function zL(Q="24h",J){return o6(`/api/stats/folders?range=${encodeURIComponent(Q)}`,{signal:J})}async function _L(Q="24h",J,X){let q=new URLSearchParams({range:Q});if(J)q.set("project",J);return o6(`/api/stats/gain?${q}`,{signal:X})}async function LL(Q="24h",J){return o6(`/api/stats/tools?range=${encodeURIComponent(Q)}`,{signal:J})}async function PL(Q="24h",J){return o6(`/api/stats/providers?range=${encodeURIComponent(Q)}`,{signal:J})}var GJ=n(U0(),1);function TL({onSyncStart:Q,onSyncComplete:J,className:X=""}){let[q,N]=VK.useState(!1),[K,H]=VK.useState(null),F=async()=>{if(q)return;if(N(!0),H(null),Q)Q();try{let M=await wL(),w={processed:typeof M?.processed==="number"?M.processed:0,files:typeof M?.files==="number"?M.files:0,totalMessages:typeof M?.totalMessages==="number"?M.totalMessages:0};if(H({type:"success",message:`Synced: ${w.processed} new request${w.processed===1?"":"s"} found.`}),J)J({success:!0,data:w})}catch(M){let w=M instanceof Error?M.message:String(M);if(H({type:"error",message:`Sync failed: ${w}`}),J)J({success:!1,error:w})}finally{N(!1)}};return GJ.jsxDEV("div",{className:`stats-sync-container ${X}`,children:[K&&GJ.jsxDEV("span",{className:"stats-sync-status-msg","data-type":K.type,children:K.message},void 0,!1,void 0,this),GJ.jsxDEV("button",{type:"button",onClick:F,disabled:q,className:"stats-button stats-button-primary stats-sync-btn","aria-busy":q,children:[GJ.jsxDEV(aQ,{size:14,className:`stats-sync-icon ${q?"stats-spin":""}`},void 0,!1,void 0,this),q?"Syncing...":"Sync DB"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var KX=n(T1(),1),CL="omp-stats-theme",IL="(prefers-color-scheme: dark)";function fj(){if(typeof localStorage>"u")return"system";let Q=localStorage.getItem(CL);return Q==="light"||Q==="dark"||Q==="system"?Q:"system"}function OL(){if(typeof window>"u")return"dark";return window.matchMedia(IL).matches?"dark":"light"}var a9=fj(),XJ=a9==="system"?OL():a9,AK=new Set;function VL(){for(let Q of AK)Q()}function EK(){if(XJ=a9==="system"?OL():a9,typeof document<"u")document.documentElement.dataset.theme=XJ,document.documentElement.style.colorScheme=XJ}if(typeof window<"u")EK(),window.matchMedia(IL).addEventListener("change",()=>{if(a9==="system")EK(),VL()});function yj(Q){if(a9=Q,typeof localStorage<"u")localStorage.setItem(CL,Q);EK(),VL()}function SK(Q){return AK.add(Q),()=>AK.delete(Q)}function R5(){return KX.useSyncExternalStore(SK,()=>XJ,()=>"dark")}function AL(){let Q=KX.useSyncExternalStore(SK,()=>a9,()=>"system"),J=KX.useSyncExternalStore(SK,()=>XJ,()=>"dark");return{preference:Q,resolved:J,setPreference:yj}}var jK=n(U0(),1),gj={system:"light",light:"dark",dark:"system"},hj={system:nQ,light:eQ,dark:sQ},EL={system:"System theme",light:"Light theme",dark:"Dark theme"};function SL(){let{preference:Q,setPreference:J}=AL(),X=hj[Q];return jK.jsxDEV("button",{type:"button",className:"stats-theme-toggle",onClick:()=>J(gj[Q]),"aria-label":`${EL[Q]} (click to switch)`,title:`${EL[Q]} — click to switch`,children:jK.jsxDEV(X,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var a6=n(U0(),1);function jL({activeSection:Q,range:J,onRangeChange:X,updatedAt:q,onSyncStart:N,onSyncComplete:K,onMenuToggle:H,className:F=""}){let w=JJ.find((_)=>_.id===Q)?.label||"Observability",R=(_)=>{if(!_)return"Not updated";return`Updated ${new Date(_).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`};return a6.jsxDEV("header",{className:`stats-top-bar ${F}`,children:[a6.jsxDEV("div",{className:"stats-top-bar-left",children:[H&&a6.jsxDEV("button",{type:"button",onClick:H,className:"stats-mobile-menu-btn","aria-label":"Open navigation menu",children:a6.jsxDEV(rQ,{size:20},void 0,!1,void 0,this)},void 0,!1,void 0,this),a6.jsxDEV("h1",{className:"stats-page-title",children:w},void 0,!1,void 0,this)]},void 0,!0,void 0,this),a6.jsxDEV("div",{className:"stats-top-bar-right",children:[a6.jsxDEV("div",{className:"stats-top-bar-meta",children:a6.jsxDEV("span",{className:"stats-last-updated",title:q?new Date(q).toLocaleString():void 0,children:R(q)},void 0,!1,void 0,this)},void 0,!1,void 0,this),a6.jsxDEV(UL,{value:J,onChange:X},void 0,!1,void 0,this),a6.jsxDEV(SL,{},void 0,!1,void 0,this),a6.jsxDEV(TL,{onSyncStart:N,onSyncComplete:K},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var b5=n(U0(),1);function vL({activeSection:Q,onSectionChange:J,range:X,onRangeChange:q,updatedAt:N,onSyncStart:K,onSyncComplete:H,children:F}){let[M,w]=DL.useState(!1),R=(_)=>{J(_),w(!1)};return b5.jsxDEV("div",{className:"stats-app-container",children:[b5.jsxDEV(IK,{activeSection:Q,onSectionChange:R,className:"stats-desktop-nav"},void 0,!1,void 0,this),M&&b5.jsxDEV("div",{className:"stats-mobile-drawer-overlay",onClick:()=>w(!1),role:"presentation",children:b5.jsxDEV("div",{className:"stats-mobile-drawer",onClick:(_)=>_.stopPropagation(),role:"dialog","aria-modal":"true","aria-label":"Navigation menu",children:[b5.jsxDEV("div",{className:"stats-mobile-drawer-header",children:[b5.jsxDEV("div",{className:"stats-logo-container",children:[b5.jsxDEV("span",{className:"stats-logo-text",children:"OH MY PI"},void 0,!1,void 0,this),b5.jsxDEV("span",{className:"stats-logo-subtext",children:"Observability"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),b5.jsxDEV("button",{type:"button",onClick:()=>w(!1),className:"stats-drawer-close-btn","aria-label":"Close navigation menu",children:b5.jsxDEV(s9,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),b5.jsxDEV(IK,{activeSection:Q,onSectionChange:R,className:"stats-mobile-nav"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),b5.jsxDEV("div",{className:"stats-main-pane",children:[b5.jsxDEV(jL,{activeSection:Q,range:X,onRangeChange:q,updatedAt:N,onSyncStart:K,onSyncComplete:H,onMenuToggle:()=>w(!0)},void 0,!1,void 0,this),b5.jsxDEV("main",{className:"stats-content-area",children:b5.jsxDEV("div",{className:"stats-content-inner",children:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var b2=n(T1(),1),uj=["overview","requests","errors","models","providers","tools","costs","behavior","projects","gain"],bL=["1h","24h","7d","30d","90d","all"];function DK(Q){let J=Q.replace(/^#\/?/,""),[X,q]=J.split("?"),N=uj.includes(X)?X:"overview",K="24h";if(q){let F=new URLSearchParams(q).get("range");if(bL.includes(F))K=F}return{section:N,range:K}}function kL(){let[Q,J]=b2.useState(()=>DK(window.location.hash));b2.useEffect(()=>{let K=()=>{J(DK(window.location.hash))};return window.addEventListener("hashchange",K),()=>{window.removeEventListener("hashchange",K)}},[]);let X=b2.useCallback((K,H)=>{window.location.hash=`/${K}?range=${H}`},[]),q=b2.useCallback((K)=>{X(K,Q.range)},[Q.range,X]),N=b2.useCallback((K)=>{let H=bL.includes(K)?K:"24h";X(Q.section,H)},[Q.section,X]);return b2.useEffect(()=>{let K=window.location.hash,H=DK(K),F=`#/${H.section}?range=${H.range}`;if(K!==F)window.location.hash=`/${H.section}?range=${H.range}`},[]),{section:Q.section,setSection:q,range:Q.range,setRange:N}}var xj=Math.pow(10,8)*24*60*60*1000,go1=-xj,BX=604800000,fL=86400000;var qJ=43200,vK=1440;var bK=Symbol.for("constructDateFrom");function k5(Q,J){if(typeof Q==="function")return Q(J);if(Q&&typeof Q==="object"&&bK in Q)return Q[bK](J);if(Q instanceof Date)return new Q.constructor(J);return new Date(J)}function X1(Q,J){return k5(J||Q,Q)}var mj={};function n4(){return mj}function k2(Q,J){let X=n4(),q=J?.weekStartsOn??J?.locale?.options?.weekStartsOn??X.weekStartsOn??X.locale?.options?.weekStartsOn??0,N=X1(Q,J?.in),K=N.getDay(),H=(K<q?7:0)+K-q;return N.setDate(N.getDate()-H),N.setHours(0,0,0,0),N}function i9(Q,J){return k2(Q,{...J,weekStartsOn:1})}function HX(Q,J){let X=X1(Q,J?.in),q=X.getFullYear(),N=k5(X,0);N.setFullYear(q+1,0,4),N.setHours(0,0,0,0);let K=i9(N),H=k5(X,0);H.setFullYear(q,0,4),H.setHours(0,0,0,0);let F=i9(H);if(X.getTime()>=K.getTime())return q+1;else if(X.getTime()>=F.getTime())return q;else return q-1}function C$(Q){let J=X1(Q),X=new Date(Date.UTC(J.getFullYear(),J.getMonth(),J.getDate(),J.getHours(),J.getMinutes(),J.getSeconds(),J.getMilliseconds()));return X.setUTCFullYear(J.getFullYear()),+Q-+X}function m8(Q,...J){let X=k5.bind(null,Q||J.find((q)=>typeof q==="object"));return J.map(X)}function kK(Q,J){let X=X1(Q,J?.in);return X.setHours(0,0,0,0),X}function yL(Q,J,X){let[q,N]=m8(X?.in,Q,J),K=kK(q),H=kK(N),F=+K-C$(K),M=+H-C$(H);return Math.round((F-M)/fL)}function gL(Q,J){let X=HX(Q,J),q=k5(J?.in||Q,0);return q.setFullYear(X,0,4),q.setHours(0,0,0,0),i9(q)}function I$(Q,J){let X=+X1(Q)-+X1(J);if(X<0)return-1;else if(X>0)return 1;return X}function hL(Q){return k5(Q,Date.now())}function uL(Q){return Q instanceof Date||typeof Q==="object"&&Object.prototype.toString.call(Q)==="[object Date]"}function xL(Q){return!(!uL(Q)&&typeof Q!=="number"||isNaN(+X1(Q)))}function mL(Q,J,X){let[q,N]=m8(X?.in,Q,J),K=q.getFullYear()-N.getFullYear(),H=q.getMonth()-N.getMonth();return K*12+H}function dL(Q){return(J)=>{let q=(Q?Math[Q]:Math.trunc)(J);return q===0?0:q}}function pL(Q,J){return+X1(Q)-+X1(J)}function cL(Q,J){let X=X1(Q,J?.in);return X.setHours(23,59,59,999),X}function lL(Q,J){let X=X1(Q,J?.in),q=X.getMonth();return X.setFullYear(X.getFullYear(),q+1,0),X.setHours(23,59,59,999),X}function rL(Q,J){let X=X1(Q,J?.in);return+cL(X,J)===+lL(X,J)}function nL(Q,J,X){let[q,N,K]=m8(X?.in,Q,Q,J),H=I$(N,K),F=Math.abs(mL(N,K));if(F<1)return 0;if(N.getMonth()===1&&N.getDate()>27)N.setDate(30);N.setMonth(N.getMonth()-H*F);let M=I$(N,K)===-H;if(rL(q)&&F===1&&I$(q,K)===1)M=!1;let w=H*(F-+M);return w===0?0:w}function sL(Q,J,X){let q=pL(Q,J)/1000;return dL(X?.roundingMethod)(q)}function oL(Q,J){let X=X1(Q,J?.in);return X.setFullYear(X.getFullYear(),0,1),X.setHours(0,0,0,0),X}var dj={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},aL=(Q,J,X)=>{let q,N=dj[Q];if(typeof N==="string")q=N;else if(J===1)q=N.one;else q=N.other.replace("{{count}}",J.toString());if(X?.addSuffix)if(X.comparison&&X.comparison>0)return"in "+q;else return q+" ago";return q};function FX(Q){return(J={})=>{let X=J.width?String(J.width):Q.defaultWidth;return Q.formats[X]||Q.formats[Q.defaultWidth]}}var pj={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},cj={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},lj={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},iL={date:FX({formats:pj,defaultWidth:"full"}),time:FX({formats:cj,defaultWidth:"full"}),dateTime:FX({formats:lj,defaultWidth:"full"})};var rj={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},tL=(Q,J,X,q)=>rj[Q];function O$(Q){return(J,X)=>{let q=X?.context?String(X.context):"standalone",N;if(q==="formatting"&&Q.formattingValues){let H=Q.defaultFormattingWidth||Q.defaultWidth,F=X?.width?String(X.width):H;N=Q.formattingValues[F]||Q.formattingValues[H]}else{let H=Q.defaultWidth,F=X?.width?String(X.width):Q.defaultWidth;N=Q.values[F]||Q.values[H]}let K=Q.argumentCallback?Q.argumentCallback(J):J;return N[K]}}var nj={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},sj={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},oj={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},aj={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},ij={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},tj={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ej=(Q,J)=>{let X=Number(Q),q=X%100;if(q>20||q<10)switch(q%10){case 1:return X+"st";case 2:return X+"nd";case 3:return X+"rd"}return X+"th"},eL={ordinalNumber:ej,era:O$({values:nj,defaultWidth:"wide"}),quarter:O$({values:sj,defaultWidth:"wide",argumentCallback:(Q)=>Q-1}),month:O$({values:oj,defaultWidth:"wide"}),day:O$({values:aj,defaultWidth:"wide"}),dayPeriod:O$({values:ij,defaultWidth:"wide",formattingValues:tj,defaultFormattingWidth:"wide"})};function V$(Q){return(J,X={})=>{let q=X.width,N=q&&Q.matchPatterns[q]||Q.matchPatterns[Q.defaultMatchWidth],K=J.match(N);if(!K)return null;let H=K[0],F=q&&Q.parsePatterns[q]||Q.parsePatterns[Q.defaultParseWidth],M=Array.isArray(F)?ZD(F,(_)=>_.test(H)):$D(F,(_)=>_.test(H)),w;w=Q.valueCallback?Q.valueCallback(M):M,w=X.valueCallback?X.valueCallback(w):w;let R=J.slice(H.length);return{value:w,rest:R}}}function $D(Q,J){for(let X in Q)if(Object.prototype.hasOwnProperty.call(Q,X)&&J(Q[X]))return X;return}function ZD(Q,J){for(let X=0;X<Q.length;X++)if(J(Q[X]))return X;return}function $P(Q){return(J,X={})=>{let q=J.match(Q.matchPattern);if(!q)return null;let N=q[0],K=J.match(Q.parsePattern);if(!K)return null;let H=Q.valueCallback?Q.valueCallback(K[0]):K[0];H=X.valueCallback?X.valueCallback(H):H;let F=J.slice(N.length);return{value:H,rest:F}}}var QD=/^(\d+)(th|st|nd|rd)?/i,JD=/\d+/i,GD={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},XD={any:[/^b/i,/^(a|c)/i]},qD={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},YD={any:[/1/i,/2/i,/3/i,/4/i]},ND={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},UD={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},KD={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},BD={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},HD={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},FD={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},ZP={ordinalNumber:$P({matchPattern:QD,parsePattern:JD,valueCallback:(Q)=>parseInt(Q,10)}),era:V$({matchPatterns:GD,defaultMatchWidth:"wide",parsePatterns:XD,defaultParseWidth:"any"}),quarter:V$({matchPatterns:qD,defaultMatchWidth:"wide",parsePatterns:YD,defaultParseWidth:"any",valueCallback:(Q)=>Q+1}),month:V$({matchPatterns:ND,defaultMatchWidth:"wide",parsePatterns:UD,defaultParseWidth:"any"}),day:V$({matchPatterns:KD,defaultMatchWidth:"wide",parsePatterns:BD,defaultParseWidth:"any"}),dayPeriod:V$({matchPatterns:HD,defaultMatchWidth:"any",parsePatterns:FD,defaultParseWidth:"any"})};var YJ={code:"en-US",formatDistance:aL,formatLong:iL,formatRelative:tL,localize:eL,match:ZP,options:{weekStartsOn:0,firstWeekContainsDate:1}};function QP(Q,J){let X=X1(Q,J?.in);return yL(X,oL(X))+1}function JP(Q,J){let X=X1(Q,J?.in),q=+i9(X)-+gL(X);return Math.round(q/BX)+1}function MX(Q,J){let X=X1(Q,J?.in),q=X.getFullYear(),N=n4(),K=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??N.firstWeekContainsDate??N.locale?.options?.firstWeekContainsDate??1,H=k5(J?.in||Q,0);H.setFullYear(q+1,0,K),H.setHours(0,0,0,0);let F=k2(H,J),M=k5(J?.in||Q,0);M.setFullYear(q,0,K),M.setHours(0,0,0,0);let w=k2(M,J);if(+X>=+F)return q+1;else if(+X>=+w)return q;else return q-1}function GP(Q,J){let X=n4(),q=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??X.firstWeekContainsDate??X.locale?.options?.firstWeekContainsDate??1,N=MX(Q,J),K=k5(J?.in||Q,0);return K.setFullYear(N,0,q),K.setHours(0,0,0,0),k2(K,J)}function XP(Q,J){let X=X1(Q,J?.in),q=+k2(X,J)-+GP(X,J);return Math.round(q/BX)+1}function B1(Q,J){let X=Q<0?"-":"",q=Math.abs(Q).toString().padStart(J,"0");return X+q}var f2={y(Q,J){let X=Q.getFullYear(),q=X>0?X:1-X;return B1(J==="yy"?q%100:q,J.length)},M(Q,J){let X=Q.getMonth();return J==="M"?String(X+1):B1(X+1,2)},d(Q,J){return B1(Q.getDate(),J.length)},a(Q,J){let X=Q.getHours()/12>=1?"pm":"am";switch(J){case"a":case"aa":return X.toUpperCase();case"aaa":return X;case"aaaaa":return X[0];case"aaaa":default:return X==="am"?"a.m.":"p.m."}},h(Q,J){return B1(Q.getHours()%12||12,J.length)},H(Q,J){return B1(Q.getHours(),J.length)},m(Q,J){return B1(Q.getMinutes(),J.length)},s(Q,J){return B1(Q.getSeconds(),J.length)},S(Q,J){let X=J.length,q=Q.getMilliseconds(),N=Math.trunc(q*Math.pow(10,X-3));return B1(N,J.length)}};var A$={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},fK={G:function(Q,J,X){let q=Q.getFullYear()>0?1:0;switch(J){case"G":case"GG":case"GGG":return X.era(q,{width:"abbreviated"});case"GGGGG":return X.era(q,{width:"narrow"});case"GGGG":default:return X.era(q,{width:"wide"})}},y:function(Q,J,X){if(J==="yo"){let q=Q.getFullYear(),N=q>0?q:1-q;return X.ordinalNumber(N,{unit:"year"})}return f2.y(Q,J)},Y:function(Q,J,X,q){let N=MX(Q,q),K=N>0?N:1-N;if(J==="YY"){let H=K%100;return B1(H,2)}if(J==="Yo")return X.ordinalNumber(K,{unit:"year"});return B1(K,J.length)},R:function(Q,J){let X=HX(Q);return B1(X,J.length)},u:function(Q,J){let X=Q.getFullYear();return B1(X,J.length)},Q:function(Q,J,X){let q=Math.ceil((Q.getMonth()+1)/3);switch(J){case"Q":return String(q);case"QQ":return B1(q,2);case"Qo":return X.ordinalNumber(q,{unit:"quarter"});case"QQQ":return X.quarter(q,{width:"abbreviated",context:"formatting"});case"QQQQQ":return X.quarter(q,{width:"narrow",context:"formatting"});case"QQQQ":default:return X.quarter(q,{width:"wide",context:"formatting"})}},q:function(Q,J,X){let q=Math.ceil((Q.getMonth()+1)/3);switch(J){case"q":return String(q);case"qq":return B1(q,2);case"qo":return X.ordinalNumber(q,{unit:"quarter"});case"qqq":return X.quarter(q,{width:"abbreviated",context:"standalone"});case"qqqqq":return X.quarter(q,{width:"narrow",context:"standalone"});case"qqqq":default:return X.quarter(q,{width:"wide",context:"standalone"})}},M:function(Q,J,X){let q=Q.getMonth();switch(J){case"M":case"MM":return f2.M(Q,J);case"Mo":return X.ordinalNumber(q+1,{unit:"month"});case"MMM":return X.month(q,{width:"abbreviated",context:"formatting"});case"MMMMM":return X.month(q,{width:"narrow",context:"formatting"});case"MMMM":default:return X.month(q,{width:"wide",context:"formatting"})}},L:function(Q,J,X){let q=Q.getMonth();switch(J){case"L":return String(q+1);case"LL":return B1(q+1,2);case"Lo":return X.ordinalNumber(q+1,{unit:"month"});case"LLL":return X.month(q,{width:"abbreviated",context:"standalone"});case"LLLLL":return X.month(q,{width:"narrow",context:"standalone"});case"LLLL":default:return X.month(q,{width:"wide",context:"standalone"})}},w:function(Q,J,X,q){let N=XP(Q,q);if(J==="wo")return X.ordinalNumber(N,{unit:"week"});return B1(N,J.length)},I:function(Q,J,X){let q=JP(Q);if(J==="Io")return X.ordinalNumber(q,{unit:"week"});return B1(q,J.length)},d:function(Q,J,X){if(J==="do")return X.ordinalNumber(Q.getDate(),{unit:"date"});return f2.d(Q,J)},D:function(Q,J,X){let q=QP(Q);if(J==="Do")return X.ordinalNumber(q,{unit:"dayOfYear"});return B1(q,J.length)},E:function(Q,J,X){let q=Q.getDay();switch(J){case"E":case"EE":case"EEE":return X.day(q,{width:"abbreviated",context:"formatting"});case"EEEEE":return X.day(q,{width:"narrow",context:"formatting"});case"EEEEEE":return X.day(q,{width:"short",context:"formatting"});case"EEEE":default:return X.day(q,{width:"wide",context:"formatting"})}},e:function(Q,J,X,q){let N=Q.getDay(),K=(N-q.weekStartsOn+8)%7||7;switch(J){case"e":return String(K);case"ee":return B1(K,2);case"eo":return X.ordinalNumber(K,{unit:"day"});case"eee":return X.day(N,{width:"abbreviated",context:"formatting"});case"eeeee":return X.day(N,{width:"narrow",context:"formatting"});case"eeeeee":return X.day(N,{width:"short",context:"formatting"});case"eeee":default:return X.day(N,{width:"wide",context:"formatting"})}},c:function(Q,J,X,q){let N=Q.getDay(),K=(N-q.weekStartsOn+8)%7||7;switch(J){case"c":return String(K);case"cc":return B1(K,J.length);case"co":return X.ordinalNumber(K,{unit:"day"});case"ccc":return X.day(N,{width:"abbreviated",context:"standalone"});case"ccccc":return X.day(N,{width:"narrow",context:"standalone"});case"cccccc":return X.day(N,{width:"short",context:"standalone"});case"cccc":default:return X.day(N,{width:"wide",context:"standalone"})}},i:function(Q,J,X){let q=Q.getDay(),N=q===0?7:q;switch(J){case"i":return String(N);case"ii":return B1(N,J.length);case"io":return X.ordinalNumber(N,{unit:"day"});case"iii":return X.day(q,{width:"abbreviated",context:"formatting"});case"iiiii":return X.day(q,{width:"narrow",context:"formatting"});case"iiiiii":return X.day(q,{width:"short",context:"formatting"});case"iiii":default:return X.day(q,{width:"wide",context:"formatting"})}},a:function(Q,J,X){let N=Q.getHours()/12>=1?"pm":"am";switch(J){case"a":case"aa":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"});case"aaa":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return X.dayPeriod(N,{width:"narrow",context:"formatting"});case"aaaa":default:return X.dayPeriod(N,{width:"wide",context:"formatting"})}},b:function(Q,J,X){let q=Q.getHours(),N;if(q===12)N=A$.noon;else if(q===0)N=A$.midnight;else N=q/12>=1?"pm":"am";switch(J){case"b":case"bb":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"});case"bbb":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return X.dayPeriod(N,{width:"narrow",context:"formatting"});case"bbbb":default:return X.dayPeriod(N,{width:"wide",context:"formatting"})}},B:function(Q,J,X){let q=Q.getHours(),N;if(q>=17)N=A$.evening;else if(q>=12)N=A$.afternoon;else if(q>=4)N=A$.morning;else N=A$.night;switch(J){case"B":case"BB":case"BBB":return X.dayPeriod(N,{width:"abbreviated",context:"formatting"});case"BBBBB":return X.dayPeriod(N,{width:"narrow",context:"formatting"});case"BBBB":default:return X.dayPeriod(N,{width:"wide",context:"formatting"})}},h:function(Q,J,X){if(J==="ho"){let q=Q.getHours()%12;if(q===0)q=12;return X.ordinalNumber(q,{unit:"hour"})}return f2.h(Q,J)},H:function(Q,J,X){if(J==="Ho")return X.ordinalNumber(Q.getHours(),{unit:"hour"});return f2.H(Q,J)},K:function(Q,J,X){let q=Q.getHours()%12;if(J==="Ko")return X.ordinalNumber(q,{unit:"hour"});return B1(q,J.length)},k:function(Q,J,X){let q=Q.getHours();if(q===0)q=24;if(J==="ko")return X.ordinalNumber(q,{unit:"hour"});return B1(q,J.length)},m:function(Q,J,X){if(J==="mo")return X.ordinalNumber(Q.getMinutes(),{unit:"minute"});return f2.m(Q,J)},s:function(Q,J,X){if(J==="so")return X.ordinalNumber(Q.getSeconds(),{unit:"second"});return f2.s(Q,J)},S:function(Q,J){return f2.S(Q,J)},X:function(Q,J,X){let q=Q.getTimezoneOffset();if(q===0)return"Z";switch(J){case"X":return YP(q);case"XXXX":case"XX":return t9(q);case"XXXXX":case"XXX":default:return t9(q,":")}},x:function(Q,J,X){let q=Q.getTimezoneOffset();switch(J){case"x":return YP(q);case"xxxx":case"xx":return t9(q);case"xxxxx":case"xxx":default:return t9(q,":")}},O:function(Q,J,X){let q=Q.getTimezoneOffset();switch(J){case"O":case"OO":case"OOO":return"GMT"+qP(q,":");case"OOOO":default:return"GMT"+t9(q,":")}},z:function(Q,J,X){let q=Q.getTimezoneOffset();switch(J){case"z":case"zz":case"zzz":return"GMT"+qP(q,":");case"zzzz":default:return"GMT"+t9(q,":")}},t:function(Q,J,X){let q=Math.trunc(+Q/1000);return B1(q,J.length)},T:function(Q,J,X){return B1(+Q,J.length)}};function qP(Q,J=""){let X=Q>0?"-":"+",q=Math.abs(Q),N=Math.trunc(q/60),K=q%60;if(K===0)return X+String(N);return X+String(N)+J+B1(K,2)}function YP(Q,J){if(Q%60===0)return(Q>0?"-":"+")+B1(Math.abs(Q)/60,2);return t9(Q,J)}function t9(Q,J=""){let X=Q>0?"-":"+",q=Math.abs(Q),N=B1(Math.trunc(q/60),2),K=B1(q%60,2);return X+N+J+K}var NP=(Q,J)=>{switch(Q){case"P":return J.date({width:"short"});case"PP":return J.date({width:"medium"});case"PPP":return J.date({width:"long"});case"PPPP":default:return J.date({width:"full"})}},UP=(Q,J)=>{switch(Q){case"p":return J.time({width:"short"});case"pp":return J.time({width:"medium"});case"ppp":return J.time({width:"long"});case"pppp":default:return J.time({width:"full"})}},MD=(Q,J)=>{let X=Q.match(/(P+)(p+)?/)||[],q=X[1],N=X[2];if(!N)return NP(Q,J);let K;switch(q){case"P":K=J.dateTime({width:"short"});break;case"PP":K=J.dateTime({width:"medium"});break;case"PPP":K=J.dateTime({width:"long"});break;case"PPPP":default:K=J.dateTime({width:"full"});break}return K.replace("{{date}}",NP(q,J)).replace("{{time}}",UP(N,J))},KP={p:UP,P:MD};var WD=/^D+$/,wD=/^Y+$/,RD=["D","DD","YY","YYYY"];function BP(Q){return WD.test(Q)}function HP(Q){return wD.test(Q)}function FP(Q,J,X){let q=zD(Q,J,X);if(console.warn(q),RD.includes(Q))throw RangeError(q)}function zD(Q,J,X){let q=Q[0]==="Y"?"years":"days of the month";return`Use \`${Q.toLowerCase()}\` instead of \`${Q}\` (in \`${J}\`) for formatting ${q} to the input \`${X}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var _D=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,LD=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,PD=/^'([^]*?)'?$/,TD=/''/g,CD=/[a-zA-Z]/;function F4(Q,J,X){let q=n4(),N=X?.locale??q.locale??YJ,K=X?.firstWeekContainsDate??X?.locale?.options?.firstWeekContainsDate??q.firstWeekContainsDate??q.locale?.options?.firstWeekContainsDate??1,H=X?.weekStartsOn??X?.locale?.options?.weekStartsOn??q.weekStartsOn??q.locale?.options?.weekStartsOn??0,F=X1(Q,X?.in);if(!xL(F))throw RangeError("Invalid time value");let M=J.match(LD).map((R)=>{let _=R[0];if(_==="p"||_==="P"){let P=KP[_];return P(R,N.formatLong)}return R}).join("").match(_D).map((R)=>{if(R==="''")return{isToken:!1,value:"'"};let _=R[0];if(_==="'")return{isToken:!1,value:ID(R)};if(fK[_])return{isToken:!0,value:R};if(_.match(CD))throw RangeError("Format string contains an unescaped latin alphabet character `"+_+"`");return{isToken:!1,value:R}});if(N.localize.preprocessor)M=N.localize.preprocessor(F,M);let w={firstWeekContainsDate:K,weekStartsOn:H,locale:N};return M.map((R)=>{if(!R.isToken)return R.value;let _=R.value;if(!X?.useAdditionalWeekYearTokens&&HP(_)||!X?.useAdditionalDayOfYearTokens&&BP(_))FP(_,J,String(Q));let P=fK[_[0]];return P(F,_,N.localize,w)}).join("")}function ID(Q){let J=Q.match(PD);if(!J)return Q;return J[1].replace(TD,"'")}function MP(Q,J,X){let q=n4(),N=X?.locale??q.locale??YJ,K=2520,H=I$(Q,J);if(isNaN(H))throw RangeError("Invalid time value");let F=Object.assign({},X,{addSuffix:X?.addSuffix,comparison:H}),[M,w]=m8(X?.in,...H>0?[J,Q]:[Q,J]),R=sL(w,M),_=(C$(w)-C$(M))/1000,P=Math.round((R-_)/60),I;if(P<2)if(X?.includeSeconds)if(R<5)return N.formatDistance("lessThanXSeconds",5,F);else if(R<10)return N.formatDistance("lessThanXSeconds",10,F);else if(R<20)return N.formatDistance("lessThanXSeconds",20,F);else if(R<40)return N.formatDistance("halfAMinute",0,F);else if(R<60)return N.formatDistance("lessThanXMinutes",1,F);else return N.formatDistance("xMinutes",1,F);else if(P===0)return N.formatDistance("lessThanXMinutes",1,F);else return N.formatDistance("xMinutes",P,F);else if(P<45)return N.formatDistance("xMinutes",P,F);else if(P<90)return N.formatDistance("aboutXHours",1,F);else if(P<vK){let A=Math.round(P/60);return N.formatDistance("aboutXHours",A,F)}else if(P<2520)return N.formatDistance("xDays",1,F);else if(P<qJ){let A=Math.round(P/vK);return N.formatDistance("xDays",A,F)}else if(P<qJ*2)return I=Math.round(P/qJ),N.formatDistance("aboutXMonths",I,F);if(I=nL(w,M),I<12){let A=Math.round(P/qJ);return N.formatDistance("xMonths",A,F)}else{let A=I%12,V=Math.trunc(I/12);if(A<3)return N.formatDistance("aboutXYears",V,F);else if(A<9)return N.formatDistance("overXYears",V,F);else return N.formatDistance("almostXYears",V+1,F)}}function WP(Q,J){return MP(Q,hL(Q),J)}var U5=n(T1(),1);var yK=n(wP(),1),S6=n(T1(),1);var zP="label";function RP(Q,J){if(typeof Q==="function")Q(J);else if(Q)Q.current=J}function VD(Q,J){let X=Q.options;if(X&&J)Object.assign(X,J)}function _P(Q,J){Q.labels=J}function LP(Q,J,X=zP){let q=[];Q.datasets=J.map((N)=>{let K=Q.datasets.find((H)=>H[X]===N[X]);if(!K||!N.data||q.includes(K))return{...N};return q.push(K),Object.assign(K,N),K})}function AD(Q,J=zP){let X={labels:[],datasets:[]};return _P(X,Q.labels),LP(X,Q.datasets,J),X}function ED(Q,J){let{height:X=150,width:q=300,redraw:N=!1,datasetIdKey:K,type:H,data:F,options:M,plugins:w=[],fallbackContent:R,updateMode:_,...P}=Q,I=S6.useRef(null),A=S6.useRef(null),V=()=>{if(!I.current)return;A.current=new l9(I.current,{type:H,data:AD(F,K),options:M&&{...M},plugins:w}),RP(J,A.current)},O=()=>{if(RP(J,null),A.current)A.current.destroy(),A.current=null};return S6.useEffect(()=>{if(!N&&A.current&&M)VD(A.current,M)},[N,M]),S6.useEffect(()=>{if(!N&&A.current)_P(A.current.config.data,F.labels)},[N,F.labels]),S6.useEffect(()=>{if(!N&&A.current&&F.datasets)LP(A.current.config.data,F.datasets,K)},[N,F.datasets]),S6.useEffect(()=>{if(!A.current)return;if(N)O(),setTimeout(V);else A.current.update(_)},[N,M,F.labels,F.datasets,_]),S6.useEffect(()=>{if(!A.current)return;O(),setTimeout(V)},[H]),S6.useEffect(()=>{return V(),()=>O()},[]),yK.jsx("canvas",{ref:I,role:"img",height:X,width:q,...P,children:R})}var SD=S6.forwardRef(ED);function PP(Q,J){return l9.register(J),S6.forwardRef((X,q)=>yK.jsx(SD,{...X,ref:q,type:Q}))}var f5=PP("line",HK),d8=PP("bar",BK);var H1=["#ed4abf","#9b4dff","#5ad8e6","#62d394","#c77dff","#ff8fd1","#f5c14b","#ff6b7d"],o1={dark:{legendLabel:"#a89fb3",tooltipBackground:"#241a2e",tooltipTitle:"#eae5ef",tooltipBody:"#a89fb3",tooltipBorder:"rgba(255, 255, 255, 0.12)",grid:"rgba(255, 255, 255, 0.06)",tick:"#867a93"},light:{legendLabel:"#5a5462",tooltipBackground:"#ffffff",tooltipTitle:"#241a2e",tooltipBody:"#5a5462",tooltipBorder:"rgba(20, 12, 28, 0.15)",grid:"rgba(20, 12, 28, 0.08)",tick:"#6a6275"}};function s4(Q){let{chartTheme:J,showLegend:X,defaultLabel:q,formatValue:N,footer:K}=Q;return{legend:{display:X,position:"top",align:"start",labels:{color:J.legendLabel,usePointStyle:!0,padding:16,font:{size:12},boxWidth:8}},tooltip:{backgroundColor:J.tooltipBackground,titleColor:J.tooltipTitle,bodyColor:J.tooltipBody,borderColor:J.tooltipBorder,borderWidth:1,padding:12,cornerRadius:8,callbacks:{label:(H)=>{let F=H.dataset.label??q,M=H.parsed.y??0;return`${F}: ${N(M)}`},...K?{footer:K}:{}}}}}function o4(Q){let{chartTheme:J,formatY:X}=Q,q={grid:{color:J.grid,drawBorder:!1},ticks:{color:J.tick,font:{size:11}}},N={...q,ticks:{...q.ticks,callback:(K)=>X(Number(K))},min:0};return{sharedScaleBase:q,yScale:N}}function E$(Q){return{borderColor:Q,backgroundColor:`${Q}20`,fill:!0,tension:0,pointRadius:3,pointHoverRadius:4,borderWidth:2}}function $7(Q){return{backgroundColor:Q,borderColor:Q,borderWidth:0,borderRadius:4,maxBarThickness:56}}function p8(Q,J){return Q.datasets.map((X,q)=>({label:X.label,data:X.data,...J(q)}))}function WX(Q,J,X){if(Q.length===0)return{labels:[],datasets:[]};let{initBucket:q,accumulate:N,bucketToValue:K}=X,H=new Map;for(let M of Q){let w=H.get(M.timestamp)??q();N(w,M),H.set(M.timestamp,w)}let F=[...H.entries()].sort((M,w)=>M[0]-w[0]);return{labels:F.map(([M])=>F4(new Date(M),"MMM d")),datasets:[{label:J,data:F.map(([,M])=>K(M))}]}}function S$(Q,J){if(Q.length===0)return{labels:[],datasets:[]};let{topN:X=5,rankWeight:q,initBucket:N,accumulate:K,bucketToValue:H}=J,F=new Map;for(let D of Q){let h=`${D.model}::${D.provider}`,p=F.get(h);if(p)p.weight+=q(D);else F.set(h,{model:D.model,provider:D.provider,weight:q(D)})}let w=[...F.entries()].sort((D,h)=>h[1].weight-D[1].weight).slice(0,X),R=new Set(w.map(([D])=>D)),_=new Map;for(let[,{model:D}]of w)_.set(D,(_.get(D)??0)+1);let P=new Map;for(let[D,{model:h,provider:p}]of w)P.set(D,(_.get(h)??0)>1?`${h} (${p})`:h);let I=[...new Set(Q.map((D)=>D.timestamp))].sort((D,h)=>D-h),A=w.map(([D])=>P.get(D)??D);if(Q.some((D)=>!R.has(`${D.model}::${D.provider}`)))A.push("Other");let O=new Map;for(let D of I)O.set(D,{});for(let D of Q){let h=`${D.model}::${D.provider}`,p=R.has(h)?P.get(h)??D.model:"Other",s=O.get(D.timestamp);if(!s)continue;let a=s[p]??N();K(a,D),s[p]=a}return{labels:I.map((D)=>F4(new Date(D),"MMM d")),datasets:A.map((D)=>({label:D,data:I.map((h)=>{let p=O.get(h)?.[D];return p?H(p):0})}))}}var y1=n(U0(),1);function y2(Q){return{borderColor:Q,backgroundColor:"transparent",tension:0.4,pointRadius:0,borderWidth:2}}function wX({timestamps:Q,values:J,color:X}){let q={labels:Q.map((K)=>F4(new Date(K),"MMM d")),datasets:[{data:J,...y2(X)}]};return y1.jsxDEV(f5,{data:q,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{enabled:!1}},scales:{x:{display:!1},y:{display:!1,min:0}}}},void 0,!1,void 0,this)}function RX(Q){return{legend:{display:!0,position:"top",labels:{color:Q.legendLabel,usePointStyle:!0,padding:16,font:{size:12}}},tooltip:{backgroundColor:Q.tooltipBackground,titleColor:Q.tooltipTitle,bodyColor:Q.tooltipBody,borderColor:Q.tooltipBorder,borderWidth:1,cornerRadius:8}}}function TP(Q){return{x:{grid:{color:Q.grid},ticks:{color:Q.tick,font:{size:11}}},y:{grid:{color:Q.grid},ticks:{color:Q.tick,font:{size:11}},min:0}}}function CP(Q){return{x:{grid:{color:Q.grid},ticks:{color:Q.tick,font:{size:11}}},y:{type:"linear",display:!0,position:"left",grid:{color:Q.grid},ticks:{color:Q.tick,font:{size:11}}},y1:{type:"linear",display:!0,position:"right",grid:{drawOnChartArea:!1},ticks:{color:Q.tick,font:{size:11}}}}}function zX({title:Q,subtitle:J,children:X}){return y1.jsxDEV("div",{className:"stats-panel overflow-hidden",children:[y1.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)]",children:[y1.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),J?y1.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-1",children:J},void 0,!1,void 0,this):null]},void 0,!0,void 0,this),y1.jsxDEV("div",{className:"overflow-x-auto",children:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function jD(Q){if(Q==="right")return"text-right";if(Q==="center")return"text-center";return""}function _X({columns:Q,gridTemplate:J}){return y1.jsxDEV("div",{className:"grid gap-3 px-5 py-3 text-[var(--text-muted)] text-xs uppercase tracking-wider font-semibold",style:{gridTemplateColumns:J},children:[Q.map((X)=>y1.jsxDEV("div",{className:jD(X.align),children:X.label},X.label,!1,void 0,this)),y1.jsxDEV("div",{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function LX({children:Q}){return y1.jsxDEV("div",{className:"max-h-[calc(100vh-300px)] overflow-y-auto",children:Q},void 0,!1,void 0,this)}function PX({model:Q,provider:J}){return y1.jsxDEV("div",{children:[y1.jsxDEV("div",{className:"font-medium text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),y1.jsxDEV("div",{className:"text-xs text-[var(--text-muted)]",children:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function TX({gridTemplate:Q,cells:J,trendCell:X,isExpanded:q,onToggle:N,expandedContent:K}){return y1.jsxDEV("div",{className:"border-t border-[var(--border-subtle)]",children:[y1.jsxDEV("button",{type:"button",onClick:N,className:"w-full bg-transparent border-none text-left px-5 py-3 cursor-pointer hover:bg-[var(--bg-hover)] transition-colors",children:y1.jsxDEV("div",{className:"grid gap-3 items-center",style:{gridTemplateColumns:Q},children:[J,y1.jsxDEV("div",{className:"h-10",children:X},void 0,!1,void 0,this),y1.jsxDEV("div",{className:"flex justify-center text-[var(--text-muted)]",children:q?y1.jsxDEV(gQ,{size:16},void 0,!1,void 0,this):y1.jsxDEV(yQ,{size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),q?y1.jsxDEV("div",{className:"px-5 py-4 bg-[var(--bg-elevated)] border-t border-[var(--border-subtle)]",children:K},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function CX(){return y1.jsxDEV("div",{className:"text-[var(--text-muted)] text-center text-sm",children:"-"},void 0,!1,void 0,this)}function IX({message:Q="No data available"}){return y1.jsxDEV("div",{className:"h-full flex items-center justify-center text-[var(--text-muted)] text-sm",children:Q},void 0,!1,void 0,this)}function S0(Q){return Q.toLocaleString()}function N1(Q){return Q.toLocaleString(void 0,{notation:"compact"})}function R1(Q,J){if(Q===0)return"$0";let X=J!==void 0?J:Q>0&&Q<0.01?4:2;return`$${Q.toLocaleString(void 0,{minimumFractionDigits:X,maximumFractionDigits:X})}`}function d1(Q,J=1){return`${(Q*100).toFixed(J)}%`}function y5(Q,J){if(Q===null)return"-";let X=Q/1000,q=J!==void 0?J:X<1?2:1;return`${X.toFixed(q)}s`}function OX(Q){if(Q===null)return"-";return Q.toFixed(1)}function Y6(Q){return WP(new Date(Q),{addSuffix:!0})}function gK(Q){if(Q>=1e9)return`${(Q/1e9).toFixed(1)} GB`;if(Q>=1e6)return`${(Q/1e6).toFixed(1)} MB`;if(Q>=1000)return`${(Q/1000).toFixed(1)} KB`;return`${Q} B`}var O5=n(T1(),1),c8=new Map,DD=64;function a1(Q,J,X){let q=JSON.stringify(Q),[N,K]=O5.useState(()=>c8.get(q)?.data??null),[H,F]=O5.useState(null),[M,w]=O5.useState(()=>!c8.has(q)),[R,_]=O5.useState(!1),[P,I]=O5.useState(()=>c8.get(q)?.updatedAt??null),A=O5.useRef(J);A.current=J;let V=O5.useRef(q);V.current=q;let O=X?.enabled??!0,D=X?.pollMs,h=O5.useRef(null),p=O5.useRef(!1);p.current=N!==null;let s=O5.useCallback(async(J0)=>{if(h.current)h.current.abort();let t=new AbortController;if(h.current=t,J0)_(!0);else w(!0),K(null);F(null);try{let i=await A.current(t.signal);if(t.signal.aborted)return;if(c8.set(V.current,{data:i,updatedAt:Date.now()}),c8.size>DD){let Y0=c8.keys().next().value;if(Y0!==void 0)c8.delete(Y0)}K(i),I(Date.now()),F(null)}catch(i){if(t.signal.aborted)return;F(i instanceof Error?i:Error(String(i)))}finally{if(!t.signal.aborted){if(w(!1),_(!1),h.current===t)h.current=null}}},[]);O5.useEffect(()=>{if(!O){w(!1),_(!1);return}let J0=c8.get(q);if(J0)K(J0.data),I(J0.updatedAt),w(!1),s(!0);else s(p.current);return()=>{if(h.current)h.current.abort(),h.current=null}},[q,O,s]),O5.useEffect(()=>{if(!O||!D)return;let J0=setInterval(()=>{if(document.hidden)return;s(!0)},D);return()=>{clearInterval(J0)}},[O,D,s]);let a=O5.useCallback(async()=>{await s(!0)},[s]);return{data:N,error:H,loading:M,refreshing:R,refetch:a,updatedAt:P}}var IP=3600000,VX=24*IP,vD=300000,OP={"1h":{windowLabel:"the last hour",trendLabel:"1h Trend",bucketMs:vD,bucketCount:12,tickFormat:"HH:mm"},"24h":{windowLabel:"the last 24 hours",trendLabel:"24h Trend",bucketMs:IP,bucketCount:24,tickFormat:"HH:mm"},"7d":{windowLabel:"the last 7 days",trendLabel:"7d Trend",bucketMs:VX,bucketCount:7,tickFormat:"MMM d"},"30d":{windowLabel:"the last 30 days",trendLabel:"30d Trend",bucketMs:VX,bucketCount:30,tickFormat:"MMM d"},"90d":{windowLabel:"the last 90 days",trendLabel:"90d Trend",bucketMs:VX,bucketCount:90,tickFormat:"MMM d"},all:{windowLabel:"all time",trendLabel:"Trend",bucketMs:VX,bucketCount:0,tickFormat:"MMM d"}};function Z7(Q){return OP[Q]}function NJ(Q,J){return F4(new Date(Q),OP[J].tickFormat)}var bD=["main","subagent","advisor"];function AX(Q){return Q.totalInputTokens+Q.totalOutputTokens+Q.totalCacheReadTokens+Q.totalCacheWriteTokens}function VP(Q){let J=new Map;for(let H of Q)J.set(H.agentType,H);let X=bD.map((H)=>J.get(H)).filter((H)=>H!==void 0),q=X.reduce((H,F)=>H+AX(F),0),N=X.reduce((H,F)=>H+F.totalCost,0),K=X.map((H)=>{let F=AX(H);return{agentType:H.agentType,tokens:F,requests:H.totalRequests,cost:H.totalCost,share:q>0?F/q:0}});return{totalTokens:q,totalCost:N,segments:K}}function AP(Q){let J=Q.reduce((F,M)=>F+M.cost,0),X=new Set(Q.map((F)=>F.timestamp)).size,q=X>0?J/X:0,N=new Map;for(let F of Q)N.set(F.model,(N.get(F.model)??0)+F.cost);let K="",H=0;for(let[F,M]of N)if(M>H)K=F,H=M;return{totalCost:J,avgDailyCost:q,topModelName:K,topModelCost:H}}function EP(Q,J){if(Q.length===0)return new Map;let X=Z7(J),q=X.bucketMs,N=X.bucketCount,K=N>0?(()=>{let M=Q.reduce((_,P)=>Math.max(_,P.timestamp),0),R=(M>0?M:Math.floor(Date.now()/q)*q)-(N-1)*q;return Array.from({length:N},(_,P)=>R+P*q)})():Array.from(new Set(Q.map((M)=>M.timestamp))).sort((M,w)=>M-w),H=new Map(K.map((M,w)=>[M,w])),F=new Map;for(let M of Q){let w=`${M.model}::${M.provider}`,R=F.get(w);if(!R)R={label:`${M.model} (${M.provider})`,data:K.map((P)=>({timestamp:P,avgTtftSeconds:null,avgTokensPerSecond:null,requests:0}))},F.set(w,R);let _=H.get(M.timestamp);if(_===void 0)continue;R.data[_]={timestamp:M.timestamp,avgTtftSeconds:M.avgTtft!==null?M.avgTtft/1000:null,avgTokensPerSecond:M.avgTokensPerSecond,requests:M.requests}}return F}function SP(Q,J){let X=Q.totalNegation+Q.totalRepetition+Q.totalBlame,q=new Map;for(let K of J){let H=`${K.model}::${K.provider}`,F=q.get(H),M=K.yelling+K.profanity+K.anguish+K.negation+K.repetition+K.blame;if(F)F.score+=M;else q.set(H,{model:K.model,provider:K.provider,score:M})}let N=null;for(let K of q.values())if(!N||K.score>N.score)N=K;return{totalMessages:Q.totalMessages,totalYelling:Q.totalYelling,totalProfanity:Q.totalProfanity,totalAnguish:Q.totalAnguish,totalFrustration:X,highestFrictionModel:N}}function jP(Q){let J=[...Q].sort((N,K)=>{if(K.totalCost!==N.totalCost)return K.totalCost-N.totalCost;return K.totalRequests-N.totalRequests}),X=J.reduce((N,K)=>Math.max(N,K.totalCost),0),q=J.reduce((N,K)=>Math.max(N,K.totalRequests),0);return J.map((N)=>({...N,costPercentage:X>0?N.totalCost/X*100:0,requestsPercentage:q>0?N.totalRequests/q*100:0}))}function DP(Q){let J=Q.reduce((X,q)=>Math.max(X,q.calls),0);return Q.map((X)=>({...X,errorRate:X.calls>0?X.errors/X.calls:0,callsPercentage:J>0?X.calls/J*100:0}))}var EX=n(U0(),1);function j$({message:Q="No data available",icon:J=cQ,className:X=""}){return EX.jsxDEV("div",{className:`stats-empty-state ${X}`,children:[EX.jsxDEV(J,{size:24,className:"stats-empty-state-icon","aria-hidden":"true"},void 0,!1,void 0,this),EX.jsxDEV("p",{className:"stats-empty-state-message",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var D$=n(U0(),1);function vP({error:Q,onRetry:J,className:X=""}){return D$.jsxDEV("div",{className:`stats-error-state ${X}`,children:D$.jsxDEV("div",{className:"stats-error-state-content",children:[D$.jsxDEV("h4",{className:"stats-error-state-title",children:"Failed to load data"},void 0,!1,void 0,this),Q&&D$.jsxDEV("p",{className:"stats-error-state-message",children:Q.message},void 0,!1,void 0,this),J&&D$.jsxDEV("button",{type:"button",onClick:J,className:"stats-button stats-button-secondary stats-error-state-btn",children:"Retry"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var bP=n(U0(),1);function N6({variant:Q="text",width:J,height:X,className:q=""}){let N={width:J!==void 0?typeof J==="number"?`${J}px`:J:void 0,height:X!==void 0?typeof X==="number"?`${X}px`:X:void 0};return bP.jsxDEV("div",{className:`stats-skeleton ${q}`,"data-variant":Q,style:N},void 0,!1,void 0,this)}var j6=n(U0(),1);function g1({loading:Q,error:J,data:X,empty:q=!1,emptyText:N="No data available",fallback:K,onRetry:H,children:F}){if(J&&X===null)return j6.jsxDEV(vP,{error:J,onRetry:H},void 0,!1,void 0,this);if(Q&&X===null){if(K)return j6.jsxDEV(j6.Fragment,{children:K},void 0,!1,void 0,this);return j6.jsxDEV("div",{className:"stats-boundary-skeleton",children:[j6.jsxDEV(N6,{variant:"text",width:"60%",height:24,className:"mb-4"},void 0,!1,void 0,this),j6.jsxDEV(N6,{variant:"rect",width:"100%",height:160,className:"mb-4"},void 0,!1,void 0,this),j6.jsxDEV(N6,{variant:"text",width:"80%",height:20,className:"mb-2"},void 0,!1,void 0,this),j6.jsxDEV(N6,{variant:"text",width:"40%",height:20},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}if(!Q&&(q||X===null))return j6.jsxDEV(j$,{message:N},void 0,!1,void 0,this);return j6.jsxDEV(j6.Fragment,{children:F},void 0,!1,void 0,this)}var U6=n(U0(),1);function K6({columns:Q,data:J,keyExtractor:X,onRowClick:q,renderMobileCard:N,emptyText:K="No data available"}){let H=(F,M)=>{if(q&&(F.key==="Enter"||F.key===" "))F.preventDefault(),q(M)};if(J.length===0)return U6.jsxDEV("div",{className:"stats-table-empty",children:K},void 0,!1,void 0,this);return U6.jsxDEV("div",{className:"stats-table-wrapper",children:[N&&U6.jsxDEV("div",{className:"stats-table-mobile-only",children:U6.jsxDEV("div",{className:"stats-table-mobile-list",children:J.map((F)=>{let M=String(X(F));return U6.jsxDEV("div",{className:"stats-table-mobile-card-wrapper",children:N(F,q?()=>q(F):void 0)},M,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this),U6.jsxDEV("div",{className:N?"stats-table-desktop-only":"stats-table-container",children:U6.jsxDEV("table",{className:"stats-table",children:[U6.jsxDEV("thead",{children:U6.jsxDEV("tr",{children:Q.map((F)=>{let M=["stats-table-th",F.numeric?"stats-text-right":"stats-text-left",F.className||""].filter(Boolean).join(" ");return U6.jsxDEV("th",{className:M,children:F.header},F.key,!1,void 0,this)})},void 0,!1,void 0,this)},void 0,!1,void 0,this),U6.jsxDEV("tbody",{children:J.map((F)=>{let M=String(X(F)),w=typeof q==="function",R=["stats-table-tr",w?"stats-table-tr-clickable":""].filter(Boolean).join(" ");return U6.jsxDEV("tr",{className:R,onClick:w?()=>q(F):void 0,onKeyDown:w?(_)=>H(_,F):void 0,tabIndex:w?0:void 0,role:w?"button":void 0,children:Q.map((_)=>{let P=["stats-table-td",_.numeric?"stats-text-right":"stats-text-left",_.className||""].filter(Boolean).join(" ");return U6.jsxDEV("td",{className:P,children:_.render?_.render(F):F[_.key]},_.key,!1,void 0,this)})},M,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var Q7=n(T1(),1),i6=n(U0(),1);function hK({data:Q,title:J,initialCollapsed:X=!1}){let[q,N]=Q7.useState(X),[K,H]=Q7.useState(!1),F=Q7.useRef(0),M=JSON.stringify(Q,null,2);return Q7.useEffect(()=>()=>window.clearTimeout(F.current),[]),i6.jsxDEV("div",{className:"stats-json-block",children:[i6.jsxDEV("div",{className:"stats-json-block-header",onClick:()=>N(!q),onKeyDown:(_)=>{if(_.key==="Enter"||_.key===" ")_.preventDefault(),N(!q)},tabIndex:0,role:"button","aria-expanded":!q,children:[i6.jsxDEV("span",{className:"stats-json-block-title",children:J||"JSON"},void 0,!1,void 0,this),i6.jsxDEV("div",{className:"stats-json-actions",children:[i6.jsxDEV("button",{type:"button",className:"stats-json-copy-btn",onClick:async(_)=>{_.stopPropagation();try{await navigator.clipboard.writeText(M),H(!0),window.clearTimeout(F.current),F.current=window.setTimeout(()=>H(!1),1500)}catch{}},"aria-label":K?"Copied to clipboard":"Copy JSON to clipboard",children:[K?i6.jsxDEV(fQ,{size:13},void 0,!1,void 0,this):i6.jsxDEV(uQ,{size:13},void 0,!1,void 0,this),K?"Copied":"Copy"]},void 0,!0,void 0,this),i6.jsxDEV("span",{className:"stats-json-block-toggle-indicator","data-collapsed":q,children:q?"▶ Show":"▼ Hide"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!q&&i6.jsxDEV("div",{className:"stats-json-block-content-wrapper",children:i6.jsxDEV("pre",{className:"stats-json-block-content",children:i6.jsxDEV("code",{children:M},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var s0=n(U0(),1);function kP({stats:Q}){let J=AX(Q);return s0.jsxDEV("div",{className:"stats-metric-cluster",children:[s0.jsxDEV("div",{className:"stats-metric-primary-grid",children:[s0.jsxDEV("div",{className:"stats-metric-card primary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Total Cost"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:R1(Q.totalCost,Q.totalCost>0&&Q.totalCost<0.01?4:2)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card primary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Requests"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:S0(Q.totalRequests)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card primary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Cache Rate"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:d1(Q.cacheRate)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card primary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Error Rate"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:d1(Q.errorRate)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-secondary-grid",children:[s0.jsxDEV("div",{className:"stats-metric-card secondary",title:"Conversation input not served from cache",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Uncached Input"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:N1(Q.totalInputTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",title:"Conversation input read from the prompt cache",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Cache Read"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:N1(Q.totalCacheReadTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Output Tokens"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:N1(Q.totalOutputTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",title:"Uncached input + cache reads + cache writes + output",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Conversation Total"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:N1(J)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Premium Requests"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:S0(Q.totalPremiumRequests)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Tokens/s"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:OX(Q.avgTokensPerSecond)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Avg Latency"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:y5(Q.avgDuration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"stats-metric-card secondary",children:[s0.jsxDEV("div",{className:"stats-metric-label",children:"Avg TTFT"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"stats-metric-value",children:y5(Q.avgTtft)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var l8=n(U0(),1);function q1({title:Q,subtitle:J,actions:X,children:q,className:N="",...K}){return l8.jsxDEV("div",{className:`stats-panel ${N}`,...K,children:[(Q||J||X)&&l8.jsxDEV("div",{className:"stats-panel-header",children:[l8.jsxDEV("div",{className:"stats-panel-header-titles",children:[Q&&l8.jsxDEV("h3",{className:"stats-panel-title",children:Q},void 0,!1,void 0,this),J&&l8.jsxDEV("p",{className:"stats-panel-subtitle",children:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&l8.jsxDEV("div",{className:"stats-panel-actions",children:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this),l8.jsxDEV("div",{className:"stats-panel-body",children:q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var a4=n(T1(),1);var fP=n(U0(),1);function V5({variant:Q,children:J,className:X=""}){return fP.jsxDEV("span",{className:`stats-status-pill ${X}`,"data-variant":Q,children:J},void 0,!1,void 0,this)}var w0=n(U0(),1);function yP({id:Q,onClose:J}){let[X,q]=a4.useState(null),[N,K]=a4.useState(!1),[H,F]=a4.useState(null),M=a4.useRef(null),w=a4.useRef(null);if(a4.useEffect(()=>{if(Q===null){q(null);return}M.current=document.activeElement,K(!0),F(null),q(null);let _=new AbortController;return WL(Q,_.signal).then((P)=>{if(_.signal.aborted)return;q(P),setTimeout(()=>w.current?.focus(),50)}).catch((P)=>{if(_.signal.aborted)return;F(P instanceof Error?P:Error(String(P)))}).finally(()=>{if(!_.signal.aborted)K(!1)}),()=>_.abort()},[Q]),a4.useEffect(()=>{if(Q===null)return;let _=(P)=>{if(P.key==="Escape")J()};return window.addEventListener("keydown",_),()=>{if(window.removeEventListener("keydown",_),M.current)M.current.focus()}},[Q,J]),Q===null)return null;return w0.jsxDEV("div",{className:"stats-drawer-overlay",onClick:(_)=>{if(_.target===_.currentTarget)J()},role:"presentation",children:w0.jsxDEV("div",{className:"stats-drawer",role:"dialog","aria-modal":"true","aria-label":"Request details",children:[w0.jsxDEV("div",{className:"stats-drawer-header",children:[w0.jsxDEV("div",{className:"stats-drawer-header-left",children:[w0.jsxDEV("h2",{className:"stats-drawer-title",children:"Request Details"},void 0,!1,void 0,this),X&&w0.jsxDEV("span",{className:"stats-drawer-id",children:["ID: ",Q]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("button",{ref:w,type:"button",onClick:J,className:"stats-drawer-close-btn","aria-label":"Close request details",children:w0.jsxDEV(s9,{size:18},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-body",children:[N&&w0.jsxDEV("div",{className:"stats-drawer-loading",children:[w0.jsxDEV(N6,{variant:"text",width:"60%",height:24,className:"mb-4"},void 0,!1,void 0,this),w0.jsxDEV(N6,{variant:"rect",width:"100%",height:80,className:"mb-4"},void 0,!1,void 0,this),w0.jsxDEV(N6,{variant:"rect",width:"100%",height:120,className:"mb-4"},void 0,!1,void 0,this),w0.jsxDEV(N6,{variant:"rect",width:"100%",height:200},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H&&w0.jsxDEV("div",{className:"stats-drawer-error",children:[w0.jsxDEV("p",{className:"stats-drawer-error-title",children:"Failed to load request details"},void 0,!1,void 0,this),w0.jsxDEV("p",{className:"stats-drawer-error-message",children:H.message},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&w0.jsxDEV("div",{className:"stats-drawer-content",children:[w0.jsxDEV("div",{className:"stats-drawer-status-card",children:[w0.jsxDEV("div",{className:"stats-drawer-status-row",children:[w0.jsxDEV("div",{children:[w0.jsxDEV("div",{className:"stats-drawer-model",children:X.model},void 0,!1,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-provider",children:X.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV(V5,{variant:X.errorMessage?"danger":"success",children:X.errorMessage?"Error":"Success"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X.errorMessage&&w0.jsxDEV("div",{className:"stats-drawer-error-block",children:[w0.jsxDEV("div",{className:"stats-drawer-error-label",children:"Error Message"},void 0,!1,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-error-text",children:X.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metrics-grid",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(n9,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Cost"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:R1(X.usage.cost.total,4)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(tQ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Premium"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:S0(X.usage.premiumRequests??0)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(pQ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Total Tokens"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:S0(X.usage.totalTokens)},void 0,!1,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-sub",children:[S0(X.usage.input)," in · ",S0(X.usage.output)," out"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(hQ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Duration"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:y5(X.duration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(QJ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"TTFT"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:y5(X.ttft)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X.duration&&X.usage.output>0&&w0.jsxDEV("div",{className:"stats-drawer-metric-card",children:[w0.jsxDEV("div",{className:"stats-drawer-metric-label",children:[w0.jsxDEV(dQ,{size:14,className:"stats-drawer-metric-icon"},void 0,!1,void 0,this),"Throughput"]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-value",children:(X.usage.output*1000/X.duration).toFixed(1)},void 0,!1,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-metric-sub",children:"tokens/second"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w0.jsxDEV("div",{className:"stats-drawer-json-blocks",children:[w0.jsxDEV(hK,{data:X.output,title:"Output Payload",initialCollapsed:!1},void 0,!1,void 0,this),w0.jsxDEV(hK,{data:X,title:"Raw Request Metadata",initialCollapsed:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var uK=n(U0(),1);function J7({options:Q,value:J,onChange:X,className:q=""}){return uK.jsxDEV("div",{className:`stats-segmented-control ${q}`,role:"radiogroup",children:Q.map((N)=>{let K=N.value===J;return uK.jsxDEV("button",{type:"button",role:"radio","aria-checked":K,"data-active":K?"true":"false",className:"stats-segmented-control-btn",title:N.title,onClick:()=>X(N.value),children:N.label},String(N.value),!1,void 0,this)})},void 0,!1,void 0,this)}var R0=n(U0(),1);function dP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["behavior",J,X],(H)=>RL(J,H),{pollMs:30000,enabled:Q});return R0.jsxDEV("div",{className:"stats-route-container space-y-6",children:R0.jsxDEV(g1,{loading:K,error:N,data:q,children:q&&R0.jsxDEV(R0.Fragment,{children:[R0.jsxDEV(kD,{overall:q.overall,behaviorSeries:q.behaviorSeries},void 0,!1,void 0,this),R0.jsxDEV(fD,{behaviorSeries:q.behaviorSeries},void 0,!1,void 0,this),R0.jsxDEV(yD,{models:q.byModel,behaviorSeries:q.behaviorSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function SX(Q,J){if(J<=0)return;return`${(Q/J).toFixed(2)} / msg`}function kD({overall:Q,behaviorSeries:J}){let X=U5.useMemo(()=>SP(Q,J),[Q,J]),q=Q.totalMessages,N=[{label:"User Messages",value:S0(Q.totalMessages),sub:q>0?"in range":void 0},{label:"Yelling (CAPS)",value:S0(Q.totalYelling),sub:SX(Q.totalYelling,q)},{label:"Profanity Hits",value:S0(Q.totalProfanity),sub:SX(Q.totalProfanity,q)},{label:"Anguish Signals",value:S0(Q.totalAnguish),sub:SX(Q.totalAnguish,q)},{label:"Friction Signals",value:S0(X.totalFrustration),sub:SX(X.totalFrustration,q)},{label:"Highest Friction Model",value:X.highestFrictionModel?.model??"—",sub:X.highestFrictionModel?`${S0(X.highestFrictionModel.score)} hits`:void 0}];return R0.jsxDEV("div",{className:"grid grid-cols-2 md:grid-cols-6 gap-4",children:N.map((K)=>R0.jsxDEV(q1,{className:"stats-behavior-summary-card py-3 px-4",children:[R0.jsxDEV("p",{className:"text-xs stats-text-muted mb-1 font-medium truncate",children:K.label},void 0,!1,void 0,this),R0.jsxDEV("p",{className:"text-lg font-bold stats-text-primary truncate",title:K.value,children:K.value},void 0,!1,void 0,this),K.sub&&R0.jsxDEV("p",{className:"text-xs stats-text-muted mt-0.5",children:K.sub},void 0,!1,void 0,this)]},K.label,!0,void 0,this))},void 0,!1,void 0,this)}var xK=[{value:"yelling",label:"CAPS",title:"Yelling (CAPS)"},{value:"profanity",label:"Profanity",title:"Profanity"},{value:"anguish",label:"Anguish",title:"Anguish (!!!, nooo, ugh, dude, ':(')"},{value:"negation",label:"Negation",title:"Negation (no/nope/wrong, makes no sense)"},{value:"repetition",label:"Repetition",title:"Repetition (i meant, still doesnt)"},{value:"blame",label:"Blame",title:"Blame (you didnt, why did you, stop X-ing)"},{value:"frustration",label:"Frustration",title:"Frustration (neg + rep + blame)"},{value:"total",label:"All",title:"All signals combined"}];function gP(Q){if(!Number.isFinite(Q))return"-";if(Q===0)return"0%";if(Math.abs(Q)<1)return`${Q.toFixed(1)}%`;return`${Q.toFixed(0)}%`}function hP(Q,J){if(J==="frustration")return Q.negation+Q.repetition+Q.blame;if(J==="total")return Q.yelling+Q.profanity+Q.anguish+Q.negation+Q.repetition+Q.blame;return Q[J]}function uP(Q,J){if(J<=0)return 0;return Q/J*100}function fD({behaviorSeries:Q}){let[J,X]=U5.useState(!1),[q,N]=U5.useState("total"),K=R5(),H=o1[K],F=U5.useMemo(()=>{if(J)return S$(Q,{rankWeight:(h)=>h.messages,initBucket:()=>({hits:0,messages:0}),accumulate:(h,p)=>{h.hits+=hP(p,q),h.messages+=p.messages},bucketToValue:(h)=>uP(h.hits,h.messages)});let D=xK.find((h)=>h.value===q)?.title??"Hits";return WX(Q,D,{initBucket:()=>({hits:0,messages:0}),accumulate:(h,p)=>{h.hits+=hP(p,q),h.messages+=p.messages},bucketToValue:(h)=>uP(h.hits,h.messages)})},[Q,J,q]),M=U5.useMemo(()=>{return s4({chartTheme:H,showLegend:J,defaultLabel:"Hits",formatValue:gP})},[H,J]),{sharedScaleBase:w,yScale:R}=U5.useMemo(()=>{return o4({chartTheme:H,formatY:gP})},[H]),_=U5.useMemo(()=>{return xK.find((D)=>D.value===q)?.title??""},[q]),P=U5.useMemo(()=>{if(!J)return null;return{labels:F.labels,datasets:p8(F,(D)=>E$(H1[D%H1.length]))}},[F,J]),I=U5.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:M,scales:{x:w,y:R}}},[M,w,R]),A=U5.useMemo(()=>{if(J)return null;return{labels:F.labels,datasets:p8(F,(D)=>$7(H1[D%H1.length]))}},[F,J]),V=U5.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:M,scales:{x:{...w,stacked:!0},y:{...R,stacked:!0}},layout:{padding:{top:8}}}},[M,w,R]),O=[{value:!1,label:"All Models"},{value:!0,label:"By Model"}];return R0.jsxDEV(q1,{title:"User Friction Signals",subtitle:`${_} as % of user messages per day`,actions:R0.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[R0.jsxDEV(J7,{options:xK.map((D)=>({value:D.value,label:D.label,title:D.title})),value:q,onChange:N},void 0,!1,void 0,this),R0.jsxDEV(J7,{options:O,value:J,onChange:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this),children:R0.jsxDEV("div",{className:"h-[300px]",children:F.labels.length===0?R0.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No friction signal data available"},void 0,!1,void 0,this):J&&P?R0.jsxDEV(f5,{data:P,options:I},void 0,!1,void 0,this):A?R0.jsxDEV(d8,{data:A,options:V},void 0,!1,void 0,this):null},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var xP="2fr 0.9fr 0.8fr 0.8fr 0.8fr 0.9fr 0.8fr 140px 40px";function mP(Q){if(Q.totalMessages===0)return 0;return(Q.totalYelling+Q.totalProfanity+Q.totalAnguish+Q.totalNegation+Q.totalRepetition+Q.totalBlame)/Q.totalMessages}function v$(Q,J){if(J===0)return"-";let X=Q/J*100;if(X===0)return"0%";if(X<1)return`${X.toFixed(1)}%`;return`${X.toFixed(0)}%`}function yD({models:Q,behaviorSeries:J}){let[X,q]=U5.useState(null),N=R5(),K=o1[N],H=U5.useMemo(()=>hD(J),[J]),F=U5.useMemo(()=>{return[...Q].sort((M,w)=>{if(w.totalMessages!==M.totalMessages)return w.totalMessages-M.totalMessages;return mP(w)-mP(M)})},[Q]);return R0.jsxDEV(zX,{title:"Behavior Signals by Model",subtitle:"Rates are per user message",children:[R0.jsxDEV(_X,{gridTemplate:xP,columns:[{label:"Model"},{label:"Messages",align:"right"},{label:"CAPS %",align:"right"},{label:"Profanity %",align:"right"},{label:"Anguish %",align:"right"},{label:"Frustration %",align:"right"},{label:"Hits %",align:"right"},{label:"Trend",align:"center"}]},void 0,!1,void 0,this),R0.jsxDEV(LX,{children:[F.map((M,w)=>{let R=`${M.model}::${M.provider}`,_=H.get(R)?.data??[],P=H1[w%H1.length],I=X===R,A=M.totalNegation+M.totalRepetition+M.totalBlame,V=M.totalYelling+M.totalProfanity+M.totalAnguish+A;return R0.jsxDEV(TX,{gridTemplate:xP,isExpanded:I,onToggle:()=>q(I?null:R),cells:[R0.jsxDEV(PX,{model:M.model,provider:M.provider},"name",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:S0(M.totalMessages)},"messages",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(M.totalYelling,M.totalMessages)},"caps",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(M.totalProfanity,M.totalMessages)},"profanity",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(M.totalAnguish,M.totalMessages)},"anguish",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(A,M.totalMessages)},"frustration",!1,void 0,this),R0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:v$(V,M.totalMessages)},"hits",!1,void 0,this)],trendCell:_.length===0?R0.jsxDEV(CX,{},void 0,!1,void 0,this):R0.jsxDEV(wX,{timestamps:_.map((O)=>O.timestamp),values:_.map((O)=>O.total),color:P},void 0,!1,void 0,this),expandedContent:R0.jsxDEV("div",{className:"grid gap-4",style:{gridTemplateColumns:"220px 1fr"},children:[R0.jsxDEV("div",{className:"space-y-4 text-sm",children:[R0.jsxDEV(G7,{label:"Yelling (CAPS)",total:M.totalYelling,messages:M.totalMessages,valueClass:"text-[#ed4abf]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Profanity",total:M.totalProfanity,messages:M.totalMessages,valueClass:"text-[#ff6b7d]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Anguish (!!!, nooo, dude, ..)",total:M.totalAnguish,messages:M.totalMessages,valueClass:"text-[#9b4dff]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Negation (no/nope/wrong)",total:M.totalNegation,messages:M.totalMessages,valueClass:"text-[#5ad8e6]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Repetition (i meant, still doesnt)",total:M.totalRepetition,messages:M.totalMessages,valueClass:"text-[#5ad8e6]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Blame (you didnt, stop X-ing)",total:M.totalBlame,messages:M.totalMessages,valueClass:"text-[#5ad8e6]"},void 0,!1,void 0,this),R0.jsxDEV(G7,{label:"Avg chars / msg",total:M.totalChars,messages:M.totalMessages,valueClass:"stats-text-secondary",mode:"average"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),R0.jsxDEV("div",{className:"h-[200px]",children:_.length===0?R0.jsxDEV(IX,{},void 0,!1,void 0,this):R0.jsxDEV(gD,{data:_,chartTheme:K},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},R,!1,void 0,this)}),F.length===0?R0.jsxDEV("div",{className:"border-t border-[var(--border-subtle)] px-5 py-8 text-center text-[var(--text-muted)] text-sm",children:"No user behavior recorded for this range yet."},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function G7({label:Q,total:J,messages:X,valueClass:q,mode:N="rate"}){let K=N==="rate"?"% of msgs":"Per msg",H=U5.useMemo(()=>{if(X===0)return"-";return N==="rate"?v$(J,X):(J/X).toFixed(0)},[J,X,N]);return R0.jsxDEV("div",{children:[R0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-1",children:Q},void 0,!1,void 0,this),R0.jsxDEV("div",{className:"space-y-0.5 text-[var(--text-secondary)]",children:[R0.jsxDEV("div",{className:"flex items-center justify-between",children:[R0.jsxDEV("span",{className:"stats-text-muted text-xs",children:"Total"},void 0,!1,void 0,this),R0.jsxDEV("span",{className:`font-mono text-xs ${q}`,children:S0(J)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),R0.jsxDEV("div",{className:"flex items-center justify-between",children:[R0.jsxDEV("span",{className:"stats-text-muted text-xs",children:K},void 0,!1,void 0,this),R0.jsxDEV("span",{className:"font-mono text-xs stats-text-primary",children:H},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var jX={yelling:"#ed4abf",profanity:"#ff6b7d",anguish:"#9b4dff",frustration:"#5ad8e6"};function gD({data:Q,chartTheme:J}){let X=U5.useMemo(()=>{return{labels:Q.map((N)=>F4(new Date(N.timestamp),"MMM d")),datasets:[{label:"CAPS",data:Q.map((N)=>N.yelling),...y2(jX.yelling)},{label:"Profanity",data:Q.map((N)=>N.profanity),...y2(jX.profanity)},{label:"Anguish",data:Q.map((N)=>N.anguish),...y2(jX.anguish)},{label:"Frustration",data:Q.map((N)=>N.frustration),...y2(jX.frustration)}]}},[Q]),q=U5.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,plugins:RX(J),scales:TP(J)}},[J]);return R0.jsxDEV(f5,{data:X,options:q},void 0,!1,void 0,this)}function hD(Q){if(Q.length===0)return new Map;let J=[...new Set(Q.map((N)=>N.timestamp))].sort((N,K)=>N-K),X=new Map;for(let N of Q){let K=`${N.model}::${N.provider}`,H=X.get(K);if(!H)H=new Map,X.set(K,H);let F=H.get(N.timestamp)??{timestamp:N.timestamp,yelling:0,profanity:0,anguish:0,frustration:0,total:0};F.yelling+=N.yelling,F.profanity+=N.profanity,F.anguish+=N.anguish,F.frustration+=N.negation+N.repetition+N.blame,F.total=F.yelling+F.profanity+F.anguish+F.frustration,H.set(N.timestamp,F)}let q=new Map;for(let[N,K]of X){let H=J.map((F)=>K.get(F)??{timestamp:F,yelling:0,profanity:0,anguish:0,frustration:0,total:0});q.set(N,{data:H})}return q}var t6=n(T1(),1);var K5=n(U0(),1);function pP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["costs",J,X],(H)=>FL(J,H),{pollMs:30000,enabled:Q});return K5.jsxDEV("div",{className:"stats-route-container space-y-6",children:K5.jsxDEV(g1,{loading:K,error:N,data:q,children:q&&K5.jsxDEV(K5.Fragment,{children:[K5.jsxDEV(uD,{costSeries:q.costSeries},void 0,!1,void 0,this),K5.jsxDEV(dD,{costSeries:q.costSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function uD({costSeries:Q}){let J=t6.useMemo(()=>AP(Q),[Q]),X=[{label:"Total Cost",value:R1(J.totalCost)},{label:"Average / Day",value:R1(J.avgDailyCost)},{label:"Top Model",value:J.topModelName||"—",sub:J.topModelName?R1(J.topModelCost):void 0}];return K5.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:X.map((q)=>K5.jsxDEV(q1,{className:"stats-cost-overview-card py-4 px-5",children:[K5.jsxDEV("p",{className:"text-xs stats-text-muted mb-1 font-medium uppercase tracking-wider",children:q.label},void 0,!1,void 0,this),K5.jsxDEV("p",{className:"text-2xl font-bold stats-text-primary truncate",title:q.value,children:q.value},void 0,!1,void 0,this),q.sub&&K5.jsxDEV("p",{className:"text-xs stats-text-muted mt-1 font-medium",children:["Total spent: ",q.sub]},void 0,!0,void 0,this)]},q.label,!0,void 0,this))},void 0,!1,void 0,this)}var xD={dark:"rgba(248, 250, 252, 0.7)",light:"rgba(15, 23, 42, 0.6)"};function mD(Q){return{id:"costBarLabels",afterDatasetsDraw(J){let{ctx:X}=J;if(!J.data.datasets[0])return;let N=J.getDatasetMeta(0);X.save(),X.font="11px system-ui, sans-serif",X.fillStyle=Q,X.textAlign="center",X.textBaseline="bottom";for(let K of N.data){let H=K.$context.parsed.y;if(!H)continue;let F=`$${Math.round(H)}`,{x:M,y:w}=K.getProps(["x","y"],!0);X.fillText(F,M,w-3)}X.restore()}}}function dD({costSeries:Q}){let[J,X]=t6.useState(!1),q=R5(),N=o1[q],K=t6.useMemo(()=>{if(J)return S$(Q,{rankWeight:(V)=>V.cost,initBucket:()=>({total:0}),accumulate:(V,O)=>{V.total+=O.cost},bucketToValue:(V)=>V.total});return WX(Q,"Cost",{initBucket:()=>({total:0}),accumulate:(V,O)=>{V.total+=O.cost},bucketToValue:(V)=>V.total})},[Q,J]),H=t6.useMemo(()=>{return s4({chartTheme:N,showLegend:J,defaultLabel:"Cost",formatValue:(V)=>`$${V.toFixed(2)}`,footer:(V)=>{if(!J||V.length<2)return;return`Total: $${V.reduce((D,h)=>D+(h.parsed.y??0),0).toFixed(2)}`}})},[N,J]),{sharedScaleBase:F,yScale:M}=t6.useMemo(()=>{return o4({chartTheme:N,formatY:(V)=>`$${Math.round(V)}`})},[N]),w=t6.useMemo(()=>{return mD(xD[q])},[q]),R=t6.useMemo(()=>{if(!J)return null;return{labels:K.labels,datasets:p8(K,(V)=>E$(H1[V%H1.length]))}},[K,J]),_=t6.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:H,scales:{x:F,y:M}}},[H,F,M]),P=t6.useMemo(()=>{if(J)return null;return{labels:K.labels,datasets:p8(K,(V)=>$7(H1[V%H1.length]))}},[K,J]),I=t6.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{...H,costBarLabels:{}},scales:{x:{...F,stacked:!0},y:{...M,stacked:!0}},layout:{padding:{top:24}}}},[H,F,M]);return K5.jsxDEV(q1,{title:"Daily Cost",subtitle:"API spending over time",actions:K5.jsxDEV(J7,{options:[{value:!1,label:"All Models"},{value:!0,label:"By Model"}],value:J,onChange:X},void 0,!1,void 0,this),children:K5.jsxDEV("div",{className:"h-[300px]",children:K.labels.length===0?K5.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No cost data available"},void 0,!1,void 0,this):J&&R?K5.jsxDEV(f5,{data:R,options:_},void 0,!1,void 0,this):P?K5.jsxDEV(d8,{data:P,options:I,plugins:[w]},void 0,!1,void 0,this):null},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var cP=n(T1(),1);var D1=n(U0(),1);function lP({active:Q,range:J,refreshTrigger:X,onRequestClick:q}){let{data:N,error:K,loading:H}=a1(["recent-errors-dense",J,X],(w)=>ML(J,50,w),{pollMs:30000,enabled:Q}),F=cP.useMemo(()=>[{key:"model",header:"Model",render:(w)=>D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-font-medium stats-text-primary",children:w.model},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:w.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"timestamp",header:"Time",render:(w)=>Y6(w.timestamp)},{key:"errorMessage",header:"Error Message",render:(w)=>D1.jsxDEV("div",{className:"stats-text-xs stats-text-danger stats-truncate stats-max-w-md stats-font-mono",title:w.errorMessage||"",children:w.errorMessage||"Unknown error"},void 0,!1,void 0,this)},{key:"tokens",header:"Tokens",numeric:!0,render:(w)=>S0(w.usage.totalTokens)},{key:"cost",header:"Cost",numeric:!0,render:(w)=>R1(w.usage.cost.total,4)}],[]);return D1.jsxDEV("div",{className:"stats-route-container",children:D1.jsxDEV(q1,{title:"Recent Errors",subtitle:"Up to 50 most recent failed requests in the stats database",children:D1.jsxDEV(g1,{loading:H,error:K,data:N,emptyText:"No recent failures in the local stats database",children:D1.jsxDEV(K6,{columns:F,data:N||[],keyExtractor:(w)=>w.id||`${w.sessionFile}-${w.entryId}`,onRowClick:(w)=>w.id&&q(w.id),renderMobileCard:(w,R)=>D1.jsxDEV("div",{className:"stats-mobile-card stats-border-danger",onClick:R,children:[D1.jsxDEV("div",{className:"stats-mobile-card-header",children:[D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-font-semibold stats-text-primary",children:w.model},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:w.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D1.jsxDEV(V5,{variant:"danger",children:"Failed"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D1.jsxDEV("div",{className:"stats-mobile-card-grid",children:[D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Time"},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-mobile-card-value",children:Y6(w.timestamp)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cost"},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-mobile-card-value",children:R1(w.usage.cost.total,4)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D1.jsxDEV("div",{children:[D1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Tokens"},void 0,!1,void 0,this),D1.jsxDEV("div",{className:"stats-mobile-card-value",children:S0(w.usage.totalTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),w.errorMessage&&D1.jsxDEV("div",{className:"stats-mobile-card-error mt-2 stats-font-mono",children:w.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this),emptyText:"No recent failures in the local stats database"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var DX=n(T1(),1);var O0=n(U0(),1);function rP({active:Q,range:J,refreshTrigger:X}){let[q,N]=DX.useState(null),{data:K,error:H,loading:F}=a1(["gain",J,X,q],(M)=>_L(J,q,M),{pollMs:30000,enabled:Q});return O0.jsxDEV("div",{className:"stats-route-container space-y-6",children:O0.jsxDEV(g1,{loading:F,error:H,data:K,children:K&&O0.jsxDEV(O0.Fragment,{children:[O0.jsxDEV(pD,{projects:K.projects,selected:q,onChange:N},void 0,!1,void 0,this),O0.jsxDEV(cD,{overall:K.overall},void 0,!1,void 0,this),O0.jsxDEV(rD,{bySource:K.bySource},void 0,!1,void 0,this),O0.jsxDEV(sD,{timeSeries:K.timeSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function pD({projects:Q,selected:J,onChange:X}){if(Q.length===0)return null;return O0.jsxDEV("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[O0.jsxDEV("span",{className:"stats-text-secondary",style:{fontSize:"0.875rem",whiteSpace:"nowrap"},children:"Project"},void 0,!1,void 0,this),O0.jsxDEV("select",{className:"stats-select",value:J??"",onChange:(q)=>X(q.target.value||null),style:{maxWidth:"480px",flex:1},children:[O0.jsxDEV("option",{value:"",children:"All projects"},void 0,!1,void 0,this),Q.map((q)=>O0.jsxDEV("option",{value:q,children:q},q,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function cD({overall:Q}){return O0.jsxDEV(q1,{title:"Overall Gain",subtitle:"Aggregate snapcompact savings",children:O0.jsxDEV("div",{className:"stats-metric-primary-grid",children:[O0.jsxDEV("div",{className:"stats-metric-card primary",children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Saved Tokens"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",children:N1(Q.savedTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{className:"stats-metric-card primary",children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Saved Bytes"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",children:gK(Q.savedBytes)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{className:"stats-metric-card primary",children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Reduction"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",children:Q.reductionPercent!==null?d1(Q.reductionPercent):"—"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{className:"stats-metric-card primary",children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Total Hits"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",children:S0(Q.hits)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function lD({title:Q,totals:J}){return O0.jsxDEV("div",{className:"stats-metric-card secondary",style:{flex:1},children:[O0.jsxDEV("div",{className:"stats-metric-label",style:{fontWeight:600,marginBottom:8},children:Q},void 0,!1,void 0,this),O0.jsxDEV("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[O0.jsxDEV("div",{children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Saved Tokens"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",style:{fontSize:"1rem"},children:N1(J.savedTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Saved Bytes"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",style:{fontSize:"1rem"},children:gK(J.savedBytes)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Hits"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",style:{fontSize:"1rem"},children:S0(J.hits)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O0.jsxDEV("div",{children:[O0.jsxDEV("div",{className:"stats-metric-label",children:"Reduction"},void 0,!1,void 0,this),O0.jsxDEV("div",{className:"stats-metric-value",style:{fontSize:"1rem"},children:J.reductionPercent!==null?d1(J.reductionPercent):"—"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function rD({bySource:Q}){return O0.jsxDEV(q1,{title:"By Source",subtitle:"Savings breakdown per subsystem",children:O0.jsxDEV("div",{style:{display:"flex",gap:16,flexWrap:"wrap"},children:O0.jsxDEV(lD,{title:"Snapcompact",totals:Q.snapcompact},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var nD={snapcompact:"rgb(34, 197, 94)"};function sD({timeSeries:Q}){let J=R5(),X=o1[J],{data:q,options:N}=DX.useMemo(()=>{let K=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",timeZone:"UTC"}),F={labels:Q.map((_)=>K.format(new Date(`${_.date}T00:00:00.000Z`))),datasets:[{label:"Snapcompact",data:Q.map((_)=>_.snapcompact),...E$(nD.snapcompact)}]},{sharedScaleBase:M,yScale:w}=o4({chartTheme:X,formatY:(_)=>N1(_)}),R={responsive:!0,maintainAspectRatio:!1,plugins:s4({chartTheme:X,showLegend:!0,defaultLabel:"Tokens Saved",formatValue:N1}),scales:{x:{...M,stacked:!0},y:{...w,stacked:!0}}};return{data:F,options:R}},[Q,X]);return O0.jsxDEV(q1,{title:"Savings Over Time",subtitle:"Daily token savings",children:O0.jsxDEV("div",{style:{height:240},children:Q.length===0?O0.jsxDEV("div",{className:"stats-table-empty",children:"No time series data yet"},void 0,!1,void 0,this):O0.jsxDEV(f5,{data:q,options:N},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var i4=n(T1(),1);var j0=n(U0(),1);function sP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["models",J,X],(H)=>HL(J,H),{pollMs:30000,enabled:Q});return j0.jsxDEV("div",{className:"stats-route-container space-y-6",children:j0.jsxDEV(g1,{loading:K,error:N,data:q,children:q&&j0.jsxDEV(j0.Fragment,{children:[j0.jsxDEV(oD,{modelSeries:q.modelSeries,timeRange:J},void 0,!1,void 0,this),j0.jsxDEV(iD,{models:q.byModel,performanceSeries:q.modelPerformanceSeries,timeRange:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function oD({modelSeries:Q,timeRange:J}){let X=R5(),q=o1[X],N=Z7(J),K=i4.useMemo(()=>aD(Q),[Q]),H=i4.useMemo(()=>{return{labels:K.data.map((M)=>NJ(M.timestamp,J)),datasets:K.series.map((M,w)=>({label:M,data:K.data.map((R)=>R[M]??0),borderColor:H1[w%H1.length],backgroundColor:`${H1[w%H1.length]}20`,fill:!0,tension:0.4,pointRadius:0,pointHoverRadius:4,borderWidth:2}))}},[K,J]),F=i4.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"top",align:"start",labels:{color:q.legendLabel,usePointStyle:!0,padding:16,font:{size:12},boxWidth:8}},tooltip:{backgroundColor:q.tooltipBackground,titleColor:q.tooltipTitle,bodyColor:q.tooltipBody,borderColor:q.tooltipBorder,borderWidth:1,padding:12,cornerRadius:8,callbacks:{label:(M)=>{let w=M.dataset.label??"",R=M.parsed.y;return`${w}: ${(R??0).toFixed(1)}%`}}}},scales:{x:{grid:{color:q.grid,drawBorder:!1},ticks:{color:q.tick,font:{size:11}}},y:{grid:{color:q.grid,drawBorder:!1},ticks:{color:q.tick,font:{size:11},callback:(M)=>`${M}%`},min:0,max:100}}}},[q]);return j0.jsxDEV(q1,{title:"Model Preference",subtitle:`Share of requests over ${N.windowLabel}`,children:j0.jsxDEV("div",{className:"h-[280px]",children:K.data.length===0?j0.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No data available"},void 0,!1,void 0,this):j0.jsxDEV(f5,{data:H,options:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function aD(Q,J=5){if(Q.length===0)return{data:[],series:[]};let X=new Map;for(let _ of Q){let P=`${_.model}::${_.provider}`,I=X.get(P);if(I)I.total+=_.requests;else X.set(P,{model:_.model,provider:_.provider,total:_.requests})}let N=[...X.entries()].map(([_,P])=>({key:_,...P})).sort((_,P)=>P.total-_.total).slice(0,J),K=new Set(N.map((_)=>_.key)),H=new Map;for(let _ of N)H.set(_.model,(H.get(_.model)??0)+1);let F=new Map;for(let _ of N){let P=(H.get(_.model)??0)>1;F.set(_.key,P?`${_.model} (${_.provider})`:_.model)}let M=new Map;for(let _ of Q){let P=`${_.model}::${_.provider}`,I=M.get(_.timestamp)??{timestamp:_.timestamp,total:0};I.total+=_.requests;let A=K.has(P)?F.get(P)??_.model:"Other";I[A]=(I[A]??0)+_.requests,M.set(_.timestamp,I)}let w=N.map((_)=>F.get(_.key)??_.model);if([...M.values()].some((_)=>(_.Other??0)>0))w.push("Other");return{data:[...M.values()].sort((_,P)=>(_.timestamp??0)-(P.timestamp??0)).map((_)=>{let P=_.total??0;for(let I of w)_[I]=P>0?(_[I]??0)/P*100:0;return _}),series:w}}var nP="2fr 0.9fr 0.9fr 1fr 0.8fr 0.8fr 140px 40px";function iD({models:Q,performanceSeries:J,timeRange:X}){let[q,N]=i4.useState(null),K=Z7(X),H=i4.useMemo(()=>EP(J,X),[J,X]),F=R5(),M=o1[F],w=i4.useMemo(()=>{return[...Q].sort((R,_)=>_.totalInputTokens+_.totalOutputTokens-(R.totalInputTokens+R.totalOutputTokens))},[Q]);return j0.jsxDEV(zX,{title:"Model Statistics",children:[j0.jsxDEV(_X,{gridTemplate:nP,columns:[{label:"Model"},{label:"Requests",align:"right"},{label:"Cost",align:"right"},{label:"Tokens",align:"right"},{label:"Tokens/s",align:"right"},{label:"TTFT",align:"right"},{label:K.trendLabel,align:"center"}]},void 0,!1,void 0,this),j0.jsxDEV(LX,{children:w.map((R,_)=>{let P=`${R.model}::${R.provider}`,A=H.get(P)?.data??[],V=H1[_%H1.length],O=q===P,D=R.errorRate*100;return j0.jsxDEV(TX,{gridTemplate:nP,isExpanded:O,onToggle:()=>N(O?null:P),cells:[j0.jsxDEV(PX,{model:R.model,provider:R.provider},"name",!1,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:R.totalRequests.toLocaleString()},"requests",!1,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:["$",R.totalCost.toFixed(2)]},"cost",!0,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:(R.totalInputTokens+R.totalOutputTokens).toLocaleString()},"tokens",!1,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:R.avgTokensPerSecond?.toFixed(1)??"-"},"tps",!1,void 0,this),j0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:R.avgTtft?`${(R.avgTtft/1000).toFixed(2)}s`:"-"},"ttft",!1,void 0,this)],trendCell:A.length===0?j0.jsxDEV(CX,{},void 0,!1,void 0,this):j0.jsxDEV(wX,{timestamps:A.map((h)=>h.timestamp),values:A.map((h)=>h.avgTokensPerSecond??0),color:V},void 0,!1,void 0,this),expandedContent:j0.jsxDEV("div",{className:"grid gap-4",style:{gridTemplateColumns:"200px 1fr"},children:[j0.jsxDEV("div",{className:"space-y-4 text-sm",children:[j0.jsxDEV("div",{children:[j0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:"Quality"},void 0,!1,void 0,this),j0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[j0.jsxDEV("div",{className:"flex items-center justify-between",children:[j0.jsxDEV("span",{children:"Error rate"},void 0,!1,void 0,this),j0.jsxDEV("span",{className:D>5?"text-[var(--accent-red)]":"text-[var(--accent-green)]",children:[D.toFixed(1),"%"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),j0.jsxDEV("div",{className:"flex items-center justify-between",children:[j0.jsxDEV("span",{children:"Cache rate"},void 0,!1,void 0,this),j0.jsxDEV("span",{className:"text-[var(--accent-cyan)]",children:[(R.cacheRate*100).toFixed(1),"%"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),j0.jsxDEV("div",{children:[j0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:"Latency"},void 0,!1,void 0,this),j0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[j0.jsxDEV("div",{className:"flex items-center justify-between",children:[j0.jsxDEV("span",{children:"Avg duration"},void 0,!1,void 0,this),j0.jsxDEV("span",{className:"font-mono",children:R.avgDuration?`${(R.avgDuration/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),j0.jsxDEV("div",{className:"flex items-center justify-between",children:[j0.jsxDEV("span",{children:"Avg TTFT"},void 0,!1,void 0,this),j0.jsxDEV("span",{className:"font-mono",children:R.avgTtft?`${(R.avgTtft/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),j0.jsxDEV("div",{className:"h-[200px]",children:A.length===0?j0.jsxDEV(IX,{},void 0,!1,void 0,this):j0.jsxDEV(tD,{data:A,color:V,chartTheme:M,timeRange:X},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},P,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function tD({data:Q,color:J,chartTheme:X,timeRange:q}){let N=i4.useMemo(()=>{return{labels:Q.map((H)=>NJ(H.timestamp,q)),datasets:[{label:"TTFT",data:Q.map((H)=>H.avgTtftSeconds??null),...y2("#5ad8e6"),yAxisID:"y"},{label:"Tokens/s",data:Q.map((H)=>H.avgTokensPerSecond??null),...y2(J),yAxisID:"y1"}]}},[Q,J,q]),K=i4.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,plugins:RX(X),scales:CP(X)}},[X]);return j0.jsxDEV(f5,{data:N,options:K},void 0,!1,void 0,this)}var UJ=n(T1(),1);var oP=n(T1(),1);var B6=n(U0(),1),vX={main:{label:"Main agent",color:"#ed4abf"},subagent:{label:"Subagents",color:"#9b4dff"},advisor:{label:"Advisor",color:"#5ad8e6"}};function aP({stats:Q}){let J=oP.useMemo(()=>VP(Q),[Q]);if(J.totalTokens===0)return B6.jsxDEV("div",{className:"py-8 text-center stats-text-muted text-sm",children:"No token usage in this range"},void 0,!1,void 0,this);return B6.jsxDEV("div",{className:"space-y-4",children:[B6.jsxDEV("div",{className:"flex h-3 w-full overflow-hidden rounded-full",style:{background:"var(--surface-2)"},children:J.segments.map((X)=>X.share>0&&B6.jsxDEV("div",{className:"h-full",style:{width:`${X.share*100}%`,background:vX[X.agentType].color},title:`${vX[X.agentType].label}: ${d1(X.share)}`},X.agentType,!1,void 0,this))},void 0,!1,void 0,this),B6.jsxDEV("div",{className:"space-y-2",children:J.segments.map((X)=>B6.jsxDEV("div",{className:"flex items-center justify-between gap-3 text-sm",children:[B6.jsxDEV("div",{className:"flex items-center gap-2 min-w-0",children:[B6.jsxDEV("span",{className:"w-2.5 h-2.5 rounded-full flex-shrink-0",style:{background:vX[X.agentType].color}},void 0,!1,void 0,this),B6.jsxDEV("span",{className:"stats-text-primary truncate",children:vX[X.agentType].label},void 0,!1,void 0,this),B6.jsxDEV("span",{className:"stats-text-muted stats-text-xs whitespace-nowrap",children:[S0(X.requests)," req"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B6.jsxDEV("div",{className:"flex items-center gap-3 whitespace-nowrap",children:[B6.jsxDEV("span",{className:"stats-text-secondary",children:[N1(X.tokens)," tok"]},void 0,!0,void 0,this),B6.jsxDEV("span",{className:"stats-font-semibold stats-text-primary tabular-nums",children:d1(X.share)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},X.agentType,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var K0=n(U0(),1);function iP({active:Q,range:J,refreshTrigger:X,onRequestClick:q}){let{data:N,error:K,loading:H}=a1(["overview",J,X],(D)=>BL(J,D),{pollMs:30000,enabled:Q}),{data:F,error:M,loading:w}=a1(["recent-requests",X],(D)=>UX(50,D),{pollMs:30000,enabled:Q}),R=R5(),_=o1[R],P=UJ.useMemo(()=>{if(!N?.timeSeries)return{labels:[],datasets:[]};let D=N.timeSeries.map((p)=>F4(new Date(p.timestamp),J==="1h"||J==="24h"?"HH:mm":"MMM d")),h=N.timeSeries.length<=2?3:0;return{labels:D,datasets:[{label:"Requests",data:N.timeSeries.map((p)=>p.requests),borderColor:"#5ad8e6",backgroundColor:"rgba(90, 216, 230, 0.12)",tension:0.2,borderWidth:2,pointRadius:h,pointHoverRadius:4,fill:!0},{label:"Errors",data:N.timeSeries.map((p)=>p.errors),borderColor:"#ff6b7d",backgroundColor:"rgba(255, 107, 125, 0.12)",tension:0.2,borderWidth:2,pointRadius:h,pointHoverRadius:4,fill:!0}]}},[N?.timeSeries,J]),I=UJ.useMemo(()=>{return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!0,position:"top",align:"end",labels:{color:_.legendLabel,boxWidth:8,usePointStyle:!0,font:{size:11}}},tooltip:{backgroundColor:_.tooltipBackground,titleColor:_.tooltipTitle,bodyColor:_.tooltipBody,borderColor:_.tooltipBorder,borderWidth:1,cornerRadius:8,padding:10}},scales:{x:{grid:{color:_.grid,drawBorder:!1},ticks:{color:_.tick,font:{size:10}}},y:{grid:{color:_.grid,drawBorder:!1},ticks:{color:_.tick,font:{size:10}},min:0}}}},[_]),A=UJ.useMemo(()=>[{key:"model",header:"Model",render:(D)=>K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-font-medium stats-text-primary",children:D.model},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:D.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"timestamp",header:"Time",render:(D)=>Y6(D.timestamp)},{key:"tokens",header:"Tokens",numeric:!0,render:(D)=>S0(D.usage.totalTokens)},{key:"cost",header:"Cost",numeric:!0,render:(D)=>R1(D.usage.cost.total,4)},{key:"duration",header:"Duration",numeric:!0,render:(D)=>y5(D.duration)},{key:"status",header:"Status",className:"stats-text-center",render:(D)=>K0.jsxDEV(V5,{variant:D.errorMessage?"danger":"success",children:D.errorMessage?"Failed":"Success"},void 0,!1,void 0,this)}],[]),V=(D,h)=>K0.jsxDEV("div",{className:"stats-mobile-card",onClick:h,children:[K0.jsxDEV("div",{className:"stats-mobile-card-header",children:[K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-font-semibold stats-text-primary",children:D.model},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:D.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV(V5,{variant:D.errorMessage?"danger":"success",children:D.errorMessage?"Failed":"Success"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-grid",children:[K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-mobile-card-label",children:"Time"},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-value",children:Y6(D.timestamp)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cost"},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-value",children:R1(D.usage.cost.total,4)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-mobile-card-label",children:"Tokens"},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-value",children:S0(D.usage.totalTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{children:[K0.jsxDEV("div",{className:"stats-mobile-card-label",children:"Duration"},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-mobile-card-value",children:y5(D.duration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),D.errorMessage&&K0.jsxDEV("div",{className:"stats-mobile-card-error truncate mt-2",children:D.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this),O=UJ.useMemo(()=>{if(!F)return[];return F.slice(0,10)},[F]);return K0.jsxDEV("div",{className:"stats-route-container space-y-6",children:[K0.jsxDEV(g1,{loading:H,error:K,data:N,children:N&&K0.jsxDEV(kP,{stats:N.overall},void 0,!1,void 0,this)},void 0,!1,void 0,this),K0.jsxDEV(q1,{title:"Conversation Tokens by Agent",subtitle:"Uncached input + cache reads + cache writes + output, grouped by agent type",children:K0.jsxDEV(g1,{loading:H,error:K,data:N,children:N&&K0.jsxDEV(aP,{stats:N.byAgentType},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[K0.jsxDEV("div",{className:"lg:col-span-2",children:K0.jsxDEV(q1,{title:"System Throughput",subtitle:"Request volume and errors over time",children:K0.jsxDEV(g1,{loading:H,error:K,data:N,children:K0.jsxDEV("div",{className:"h-[280px]",children:N?.timeSeries&&N.timeSeries.length>0?K0.jsxDEV(f5,{data:P,options:I},void 0,!1,void 0,this):K0.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No time-series data available"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),K0.jsxDEV("div",{children:K0.jsxDEV(q1,{title:"Operational Feed",subtitle:"Real-time request log",children:K0.jsxDEV(g1,{loading:w,error:M,data:F,fallback:K0.jsxDEV("div",{className:"space-y-4",children:Array.from({length:5}).map((D,h)=>K0.jsxDEV("div",{className:"flex items-center gap-3",children:[K0.jsxDEV(N6,{variant:"circle",width:10,height:10},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"flex-1",children:[K0.jsxDEV(N6,{variant:"text",width:"60%",height:16},void 0,!1,void 0,this),K0.jsxDEV(N6,{variant:"text",width:"40%",height:12},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},h,!0,void 0,this))},void 0,!1,void 0,this),children:K0.jsxDEV("div",{className:"stats-feed-ledger overflow-y-auto max-h-[280px] pr-2",children:[O.map((D)=>{let h=!!D.errorMessage;return K0.jsxDEV("div",{className:"stats-feed-item flex items-start gap-3 p-2 rounded hover:bg-stats-surface-2 cursor-pointer transition-colors",onClick:()=>D.id&&q(D.id),children:[K0.jsxDEV("div",{className:`w-2 h-2 mt-1.5 rounded-full flex-shrink-0 ${h?"bg-stats-danger":"bg-stats-success"}`},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"flex-1 min-w-0",children:[K0.jsxDEV("div",{className:"flex justify-between items-baseline gap-2",children:[K0.jsxDEV("div",{className:"stats-font-medium stats-text-primary text-sm truncate",children:D.model},void 0,!1,void 0,this),K0.jsxDEV("div",{className:"stats-text-xs stats-text-muted whitespace-nowrap",children:Y6(D.timestamp)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV("div",{className:"flex justify-between items-center text-xs stats-text-muted mt-0.5",children:[K0.jsxDEV("div",{children:D.provider},void 0,!1,void 0,this),K0.jsxDEV("div",{children:[D.duration?y5(D.duration):""," ",D.usage?.cost?.total?`· ${R1(D.usage.cost.total,4)}`:""]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),h&&K0.jsxDEV("div",{className:"text-xs text-stats-danger truncate mt-1",children:D.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},D.id||`${D.sessionFile}-${D.entryId}`,!0,void 0,this)}),O.length===0&&K0.jsxDEV("div",{className:"py-8 text-center stats-text-muted text-sm",children:"No recent requests found"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K0.jsxDEV(q1,{title:"Recent Requests Preview",subtitle:"Latest transactions processed by the proxy",actions:K0.jsxDEV("a",{href:`#/requests?range=${J}`,className:"stats-button stats-button-secondary text-xs",children:"View All Requests"},void 0,!1,void 0,this),children:K0.jsxDEV(g1,{loading:w,error:M,data:F,children:K0.jsxDEV(K6,{columns:A,data:O,keyExtractor:(D)=>D.id||`${D.sessionFile}-${D.entryId}`,onRowClick:(D)=>D.id&&q(D.id),renderMobileCard:V,emptyText:"No recent requests found"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var mK=n(T1(),1);var Y1=n(U0(),1);function tP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["projects",J,X],(w)=>zL(J,w),{pollMs:30000,enabled:Q}),H=mK.useMemo(()=>{if(!q)return[];return jP(q)},[q]),F=mK.useMemo(()=>[{key:"folder",header:"Project/Folder",render:(w)=>Y1.jsxDEV("div",{className:"stats-font-medium stats-text-primary truncate max-w-[440px]",title:w.folder||"(root)",children:w.folder||"(root)"},void 0,!1,void 0,this)},{key:"totalRequests",header:"Requests",numeric:!0,render:(w)=>Y1.jsxDEV("div",{className:"stats-text-right",children:[Y1.jsxDEV("div",{className:"font-mono",children:S0(w.totalRequests)},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-progress-bar-track mt-1 ml-auto w-24 h-1",children:Y1.jsxDEV("div",{className:"stats-progress-bar-fill","data-variant":"link",style:{width:`${w.requestsPercentage}%`}},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"totalCost",header:"Cost",numeric:!0,render:(w)=>Y1.jsxDEV("div",{className:"stats-text-right",children:[Y1.jsxDEV("div",{className:"font-mono",children:R1(w.totalCost)},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-progress-bar-track mt-1 ml-auto w-24 h-1",children:Y1.jsxDEV("div",{className:"stats-progress-bar-fill","data-variant":"success",style:{width:`${w.costPercentage}%`}},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"totalTokens",header:"Tokens",numeric:!0,render:(w)=>Y1.jsxDEV("div",{className:"font-mono",children:S0(w.totalInputTokens+w.totalOutputTokens)},void 0,!1,void 0,this)},{key:"cacheRate",header:"Cache Rate",numeric:!0,render:(w)=>Y1.jsxDEV("span",{className:"stats-text-success font-medium",children:d1(w.cacheRate)},void 0,!1,void 0,this)},{key:"errorRate",header:"Error Rate",numeric:!0,render:(w)=>Y1.jsxDEV(V5,{variant:w.errorRate>0.1?"danger":w.errorRate>0?"warning":"success",children:d1(w.errorRate)},void 0,!1,void 0,this)},{key:"avgDuration",header:"Avg Duration",numeric:!0,render:(w)=>y5(w.avgDuration)}],[]);return Y1.jsxDEV("div",{className:"stats-route-container",children:Y1.jsxDEV(q1,{title:"Projects & Folders",subtitle:"Aggregate proxy metrics grouped by folder path",children:Y1.jsxDEV(g1,{loading:K,error:N,data:q,emptyText:"No project folders recorded for this range.",children:Y1.jsxDEV(K6,{columns:F,data:H,keyExtractor:(w)=>w.folder,renderMobileCard:(w)=>Y1.jsxDEV("div",{className:"stats-mobile-card",children:[Y1.jsxDEV("div",{className:"stats-mobile-card-header mb-2",children:[Y1.jsxDEV("div",{className:"stats-font-semibold stats-text-primary",children:w.folder||"(root)"},void 0,!1,void 0,this),Y1.jsxDEV(V5,{variant:w.errorRate>0.1?"danger":w.errorRate>0?"warning":"success",children:[d1(w.errorRate)," Err"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-grid",children:[Y1.jsxDEV("div",{children:[Y1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Requests"},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:S0(w.totalRequests)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1.jsxDEV("div",{children:[Y1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cost"},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:R1(w.totalCost)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1.jsxDEV("div",{children:[Y1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cache"},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-value",children:d1(w.cacheRate)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1.jsxDEV("div",{children:[Y1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Duration"},void 0,!1,void 0,this),Y1.jsxDEV("div",{className:"stats-mobile-card-value",children:y5(w.avgDuration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),emptyText:"No project folders recorded for this range."},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var g5=n(T1(),1);var m0=n(U0(),1);function eP({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["providers",J,X],(H)=>PL(J,H),{pollMs:30000,enabled:Q});return m0.jsxDEV("div",{className:"stats-route-container space-y-6",children:m0.jsxDEV(g1,{loading:K,error:N,data:q,children:q&&m0.jsxDEV(m0.Fragment,{children:[m0.jsxDEV(eD,{providers:q.providers},void 0,!1,void 0,this),m0.jsxDEV($v,{stats:q},void 0,!1,void 0,this),m0.jsxDEV(Zv,{hourly:q.hourly,providers:q.providers},void 0,!1,void 0,this),m0.jsxDEV(Qv,{insights:q.windowInsights},void 0,!1,void 0,this),m0.jsxDEV(Jv,{usageSeries:q.usageSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function eD({providers:Q}){let J=g5.useMemo(()=>Q.reduce((q,N)=>q+N.totalTokens,0),[Q]);return m0.jsxDEV(q1,{title:"Provider Totals",subtitle:"Token, request, and cost totals per provider over the active range",children:m0.jsxDEV(K6,{columns:[{key:"provider",header:"Provider",render:(q)=>m0.jsxDEV("span",{className:"font-medium",children:q.provider},void 0,!1,void 0,this)},{key:"requests",header:"Requests",numeric:!0,render:(q)=>S0(q.totalRequests)},{key:"errors",header:"Error Rate",numeric:!0,render:(q)=>d1(q.totalRequests>0?q.failedRequests/q.totalRequests:0)},{key:"models",header:"Models",numeric:!0,render:(q)=>S0(q.models)},{key:"tokens",header:"Tokens",numeric:!0,render:(q)=>m0.jsxDEV("span",{title:`Input ${N1(q.totalInputTokens)} · Output ${N1(q.totalOutputTokens)} · Cache read ${N1(q.totalCacheReadTokens)} · Cache write ${N1(q.totalCacheWriteTokens)}`,children:N1(q.totalTokens)},void 0,!1,void 0,this)},{key:"share",header:"Share",numeric:!0,render:(q)=>d1(J>0?q.totalTokens/J:0)},{key:"cost",header:"Cost",numeric:!0,render:(q)=>R1(q.totalCost)},{key:"tps",header:"Tok/s",numeric:!0,render:(q)=>OX(q.avgTokensPerSecond)}],data:Q,keyExtractor:(q)=>q.provider,emptyText:"No requests recorded in this range"},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function $v({stats:Q}){let[J,X]=g5.useState("tokens"),q=R5(),N=o1[q],K=g5.useMemo(()=>{let w=Q.series.map((R)=>({...R,model:R.provider}));return S$(w,{topN:6,rankWeight:(R)=>J==="tokens"?R.totalTokens:R.cost,initBucket:()=>({total:0}),accumulate:(R,_)=>{R.total+=J==="tokens"?_.totalTokens:_.cost},bucketToValue:(R)=>R.total})},[Q.series,J]),H=J==="tokens"?N1:(w)=>R1(w),F=g5.useMemo(()=>{let{sharedScaleBase:w,yScale:R}=o4({chartTheme:N,formatY:H});return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:s4({chartTheme:N,showLegend:!0,defaultLabel:J==="tokens"?"Tokens":"Cost",formatValue:H,footer:(_)=>{if(_.length<2)return;let P=_.reduce((I,A)=>I+(A.parsed.y??0),0);return`Total: ${H(P)}`}}),scales:{x:{...w,stacked:!0},y:{...R,stacked:!0}}}},[N,J,H]),M=g5.useMemo(()=>({labels:K.labels,datasets:p8(K,(w)=>$7(H1[w%H1.length]))}),[K]);return m0.jsxDEV(q1,{title:"Burn by Provider",subtitle:"Stacked token/cost burn per provider over time",actions:m0.jsxDEV(J7,{options:[{value:"tokens",label:"Tokens"},{value:"cost",label:"Cost"}],value:J,onChange:X},void 0,!1,void 0,this),children:m0.jsxDEV("div",{className:"h-[300px]",children:K.labels.length===0?m0.jsxDEV(j$,{message:"No provider activity in this range"},void 0,!1,void 0,this):m0.jsxDEV(d8,{data:M,options:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var dK="__all__";function Zv({hourly:Q,providers:J}){let[X,q]=g5.useState(dK),N=R5(),K=o1[N],{tokensByHour:H,peakHour:F}=g5.useMemo(()=>{let _=Array(24).fill(0);for(let I of Q){if(X!==dK&&I.provider!==X)continue;_[I.hour]+=I.totalTokens}let P=0;for(let I=1;I<24;I++)if(_[I]>_[P])P=I;return{tokensByHour:_,peakHour:P}},[Q,X]),M=H.some((_)=>_>0),w=g5.useMemo(()=>({labels:Array.from({length:24},(_,P)=>`${String(P).padStart(2,"0")}:00`),datasets:[{label:"Tokens",data:H,...$7(H1[2]),backgroundColor:H.map((_,P)=>P===F?H1[0]:H1[2])}]}),[H,F]),R=g5.useMemo(()=>{let{sharedScaleBase:_,yScale:P}=o4({chartTheme:K,formatY:N1});return{responsive:!0,maintainAspectRatio:!1,plugins:s4({chartTheme:K,showLegend:!1,defaultLabel:"Tokens",formatValue:N1}),scales:{x:_,y:P}}},[K]);return m0.jsxDEV(q1,{title:"Peak Burn Hours",subtitle:M?`Token burn by local hour of day — peak at ${String(F).padStart(2,"0")}:00`:"Token burn by local hour of day",actions:m0.jsxDEV("select",{className:"stats-select",value:X,onChange:(_)=>q(_.target.value),"aria-label":"Provider",children:[m0.jsxDEV("option",{value:dK,children:"All providers"},void 0,!1,void 0,this),J.map((_)=>m0.jsxDEV("option",{value:_.provider,children:_.provider},_.provider,!1,void 0,this))]},void 0,!0,void 0,this),children:m0.jsxDEV("div",{className:"h-[260px]",children:M?m0.jsxDEV(d8,{data:w,options:R},void 0,!1,void 0,this):m0.jsxDEV(j$,{message:"No activity in this range"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function Qv({insights:Q}){return m0.jsxDEV(q1,{title:"Subscription Windows",subtitle:"What each usage window buys you, and how many accounts peak demand needs",children:m0.jsxDEV(K6,{columns:[{key:"provider",header:"Provider",render:(X)=>m0.jsxDEV("span",{className:"font-medium",children:X.provider},void 0,!1,void 0,this)},{key:"window",header:"Window",render:(X)=>X.windowLabel},{key:"accounts",header:"Accounts",numeric:!0,render:(X)=>S0(X.accounts)},{key:"consumed",header:"Windows Burned",numeric:!0,render:(X)=>m0.jsxDEV("span",{title:"Subscription-window equivalents consumed in range (sum of used-fraction increases across accounts)",children:X.fractionConsumed.toFixed(2)},void 0,!1,void 0,this)},{key:"capacity",header:"Est. Tokens / Window",numeric:!0,render:(X)=>m0.jsxDEV("span",{title:"Provider tokens burned in range ÷ windows burned — what one full window is worth",children:X.estTokensPerWindow!==null?N1(X.estTokensPerWindow):"—"},void 0,!1,void 0,this)},{key:"peak",header:"Peak Utilization",numeric:!0,render:(X)=>m0.jsxDEV("span",{title:"Peak of summed used fraction across accounts at any sampled instant",children:d1(X.peakConcurrentFraction)},void 0,!1,void 0,this)},{key:"ideal",header:"Ideal Accounts",numeric:!0,render:(X)=>m0.jsxDEV("span",{title:"Accounts needed to keep peak demand under 90% of fleet capacity",className:X.idealAccounts>X.accounts?"stats-text-warning font-semibold":void 0,children:[S0(X.idealAccounts),X.idealAccounts>X.accounts?` (have ${X.accounts})`:""]},void 0,!0,void 0,this)},{key:"exhausted",header:"Exhaustions",numeric:!0,render:(X)=>m0.jsxDEV("span",{className:X.exhaustedEvents>0?"stats-text-warning":void 0,children:S0(X.exhaustedEvents)},void 0,!1,void 0,this)}],data:Q,keyExtractor:(X)=>`${X.provider}::${X.windowKey}`,emptyText:"No usage snapshots recorded yet — they accumulate whenever usage is fetched (TUI footer, /usage, omp usage)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var pK={ok:"#62d394",warning:"#f5c14b",exhausted:"#ff6b7d"};function Jv({usageSeries:Q}){let J=g5.useMemo(()=>[...new Set(Q.map((R)=>R.provider))],[Q]),[X,q]=g5.useState(null),N=X!==null&&J.includes(X)?X:J[0]??null,K=R5(),H=o1[K],F=g5.useMemo(()=>{return Q.filter((R)=>R.provider===N).map((R)=>{let _=[...R.points].reverse().find((P)=>P.usedFraction!==null);return _?{label:`${R.windowLabel} · ${R.accountLabel}`,fraction:_.usedFraction??0,exhausted:_.exhausted,recordedAt:_.timestamp}:null}).filter((R)=>R!==null).sort((R,_)=>_.fraction-R.fraction)},[Q,N]),M=g5.useMemo(()=>({labels:F.map((R)=>R.label),datasets:[{label:"Used",data:F.map((R)=>R.fraction*100),backgroundColor:F.map((R)=>R.exhausted?pK.exhausted:R.fraction>=0.8?pK.warning:pK.ok),borderWidth:0,borderRadius:4,barThickness:18}]}),[F]),w=g5.useMemo(()=>{let{sharedScaleBase:R,yScale:_}=o4({chartTheme:H,formatY:(A)=>`${Math.round(A)}%`}),P=Math.max(100,...F.map((A)=>A.fraction*100)),I=s4({chartTheme:H,showLegend:!1,defaultLabel:"Used",formatValue:(A)=>`${A.toFixed(1)}%`});return{indexAxis:"y",responsive:!0,maintainAspectRatio:!1,plugins:{...I,tooltip:{...I.tooltip,callbacks:{label:(A)=>{let V=F[A.dataIndex],O=`${(A.parsed.x??0).toFixed(1)}% used`;return V?`${O} · recorded ${Y6(V.recordedAt)}`:O}}}},scales:{x:{..._,max:P},y:{...R,grid:{display:!1}}}}},[H,F]);return m0.jsxDEV(q1,{title:"Window Utilization",subtitle:"Latest recorded limit utilization per account and window — red bars are exhausted, amber above 80%",actions:J.length>1?m0.jsxDEV("select",{className:"stats-select",value:N??"",onChange:(R)=>q(R.target.value),"aria-label":"Provider",children:J.map((R)=>m0.jsxDEV("option",{value:R,children:R},R,!1,void 0,this))},void 0,!1,void 0,this):void 0,children:m0.jsxDEV("div",{style:{height:Math.max(160,F.length*34+60)},children:F.length===0?m0.jsxDEV(j$,{message:"No usage snapshots recorded yet — they accumulate whenever usage is fetched"},void 0,!1,void 0,this):m0.jsxDEV(d8,{data:M,options:w},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var $T=n(T1(),1);var z1=n(U0(),1);function ZT({active:Q,refreshTrigger:J,onRequestClick:X}){let{data:q,error:N,loading:K}=a1(["recent-requests-dense",J],(M)=>UX(50,M),{pollMs:30000,enabled:Q}),H=$T.useMemo(()=>[{key:"model",header:"Model",render:(M)=>z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-font-medium stats-text-primary",children:M.model},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:M.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"timestamp",header:"Time",render:(M)=>Y6(M.timestamp)},{key:"tokens",header:"Tokens",numeric:!0,render:(M)=>S0(M.usage.totalTokens)},{key:"cost",header:"Cost",numeric:!0,render:(M)=>R1(M.usage.cost.total,4)},{key:"duration",header:"Duration",numeric:!0,render:(M)=>y5(M.duration)},{key:"status",header:"Status",className:"stats-text-center",render:(M)=>z1.jsxDEV(V5,{variant:M.errorMessage?"danger":"success",children:M.errorMessage?"Failed":"Success"},void 0,!1,void 0,this)}],[]);return z1.jsxDEV("div",{className:"stats-route-container",children:z1.jsxDEV(q1,{title:"All Recent Requests",subtitle:"Up to 50 most recent requests processed by OMP",children:z1.jsxDEV(g1,{loading:K,error:N,data:q,children:z1.jsxDEV(K6,{columns:H,data:q||[],keyExtractor:(M)=>M.id||`${M.sessionFile}-${M.entryId}`,onRowClick:(M)=>M.id&&X(M.id),renderMobileCard:(M,w)=>z1.jsxDEV("div",{className:"stats-mobile-card",onClick:w,children:[z1.jsxDEV("div",{className:"stats-mobile-card-header",children:[z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-font-semibold stats-text-primary",children:M.model},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-text-xs stats-text-muted",children:M.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV(V5,{variant:M.errorMessage?"danger":"success",children:M.errorMessage?"Failed":"Success"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-grid",children:[z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Time"},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-value",children:Y6(M.timestamp)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Cost"},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-value",children:R1(M.usage.cost.total,4)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Tokens"},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-value",children:S0(M.usage.totalTokens)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z1.jsxDEV("div",{children:[z1.jsxDEV("div",{className:"stats-mobile-card-label",children:"Duration"},void 0,!1,void 0,this),z1.jsxDEV("div",{className:"stats-mobile-card-value",children:y5(M.duration)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),M.errorMessage&&z1.jsxDEV("div",{className:"stats-mobile-card-error truncate mt-2",children:M.errorMessage},void 0,!1,void 0,this)]},void 0,!0,void 0,this),emptyText:"No recent requests found"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}var e6=n(T1(),1);var e=n(U0(),1);function QT({active:Q,range:J,refreshTrigger:X}){let{data:q,error:N,loading:K}=a1(["tools",J,X],(H)=>LL(J,H),{pollMs:30000,enabled:Q});return e.jsxDEV("div",{className:"stats-route-container space-y-6",children:e.jsxDEV(g1,{loading:K,error:N,data:q,emptyText:"No tool calls recorded for this range.",children:q&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(Gv,{byTool:q.byTool},void 0,!1,void 0,this),e.jsxDEV(Yv,{series:q.series,timeRange:J},void 0,!1,void 0,this),e.jsxDEV(Nv,{byTool:q.byTool},void 0,!1,void 0,this),e.jsxDEV(Uv,{byToolModel:q.byToolModel},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function Gv({byTool:Q}){let J=e6.useMemo(()=>{let X=0,q=0,N=0,K=0,H=0,F=0,M=0;for(let w of Q)X+=w.calls,q+=w.errors,N+=w.totalTokensShare,K+=w.outputTokensShare,H+=w.costShare,F+=w.resultChars,M+=w.argsChars;return{calls:X,errors:q,tokens:N,output:K,cost:H,resultChars:F,argsChars:M,tools:Q.length}},[Q]);return e.jsxDEV(q1,{title:"Tool Usage",subtitle:"Tokens/cost are the invoking turns' real provider usage, split across each turn's tool calls",children:e.jsxDEV("div",{className:"stats-metric-cluster",children:[e.jsxDEV("div",{className:"stats-metric-primary-grid",children:[e.jsxDEV("div",{className:"stats-metric-card primary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Tool Calls"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:S0(J.calls)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card primary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Tools Used"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:S0(J.tools)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card primary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Error Rate"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:d1(J.calls>0?J.errors/J.calls:0)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card primary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Attributed Cost"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:R1(J.cost)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-secondary-grid",children:[e.jsxDEV("div",{className:"stats-metric-card secondary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Attributed Tokens"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:N1(Math.round(J.tokens))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card secondary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Attributed Output"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:N1(Math.round(J.output))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card secondary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Result Text"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:[N1(J.resultChars)," chars"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-metric-card secondary",children:[e.jsxDEV("div",{className:"stats-metric-label",children:"Call Arguments"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-metric-value",children:[N1(J.argsChars)," chars"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var Xv=6;function qv(Q){let J=new Map;for(let w of Q)J.set(w.tool,(J.get(w.tool)??0)+w.calls);let X=[...J.entries()].sort((w,R)=>R[1]-w[1]),q=X.slice(0,Xv).map(([w])=>w),N=new Set(q),H=X.length>q.length?[...q,"Other"]:q,F=[...new Set(Q.map((w)=>w.timestamp))].sort((w,R)=>w-R),M=new Map;for(let w of F)M.set(w,{});for(let w of Q){let R=N.has(w.tool)?w.tool:"Other",_=M.get(w.timestamp);if(_)_[R]=(_[R]??0)+w.calls}return{buckets:F,tools:H,data:M}}function Yv({series:Q,timeRange:J}){let X=R5(),q=o1[X],N=Z7(J),K=e6.useMemo(()=>qv(Q),[Q]),H=e6.useMemo(()=>({labels:K.buckets.map((M)=>NJ(M,J)),datasets:K.tools.map((M,w)=>({label:M,data:K.buckets.map((R)=>K.data.get(R)?.[M]??0),borderColor:H1[w%H1.length],backgroundColor:`${H1[w%H1.length]}30`,fill:!0,tension:0.4,pointRadius:0,pointHoverRadius:4,borderWidth:2}))}),[K,J]),F=e6.useMemo(()=>({responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"top",align:"start",labels:{color:q.legendLabel,usePointStyle:!0,padding:16,font:{size:12},boxWidth:8}},tooltip:{backgroundColor:q.tooltipBackground,titleColor:q.tooltipTitle,bodyColor:q.tooltipBody,borderColor:q.tooltipBorder,borderWidth:1,padding:12,cornerRadius:8,callbacks:{label:(M)=>`${M.dataset.label??""}: ${S0(M.parsed.y??0)} calls`}}},scales:{x:{stacked:!0,grid:{color:q.grid,drawBorder:!1},ticks:{color:q.tick,font:{size:11}}},y:{stacked:!0,grid:{color:q.grid,drawBorder:!1},ticks:{color:q.tick,font:{size:11},precision:0},min:0}}}),[q]);return e.jsxDEV(q1,{title:"Calls Over Time",subtitle:`Tool calls over ${N.windowLabel}, stacked by tool`,children:e.jsxDEV("div",{className:"h-[280px]",children:K.buckets.length===0?e.jsxDEV("div",{className:"h-full flex items-center justify-center text-stats-muted text-sm",children:"No data available"},void 0,!1,void 0,this):e.jsxDEV(f5,{data:H,options:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function cK(Q){return Q>0.1?"danger":Q>0?"warning":"success"}function Nv({byTool:Q}){let J=e6.useMemo(()=>DP(Q),[Q]),X=e6.useMemo(()=>[{key:"tool",header:"Tool",render:(N)=>e.jsxDEV("div",{className:"stats-font-medium stats-text-primary font-mono truncate max-w-[280px]",title:N.tool,children:N.tool},void 0,!1,void 0,this)},{key:"calls",header:"Calls",numeric:!0,render:(N)=>e.jsxDEV("div",{className:"stats-text-right",children:[e.jsxDEV("div",{className:"font-mono",children:S0(N.calls)},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-progress-bar-track mt-1 ml-auto w-24 h-1",children:e.jsxDEV("div",{className:"stats-progress-bar-fill","data-variant":"link",style:{width:`${N.callsPercentage}%`}},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"errorRate",header:"Error Rate",numeric:!0,render:(N)=>e.jsxDEV(V5,{variant:cK(N.errorRate),children:d1(N.errorRate)},void 0,!1,void 0,this)},{key:"tokens",header:"Attr. Tokens",numeric:!0,render:(N)=>e.jsxDEV("span",{className:"font-mono",title:"Invoking turns' total tokens, split across each turn's calls",children:N1(Math.round(N.totalTokensShare))},void 0,!1,void 0,this)},{key:"cost",header:"Attr. Cost",numeric:!0,render:(N)=>e.jsxDEV("span",{className:"font-mono",children:R1(N.costShare)},void 0,!1,void 0,this)},{key:"resultChars",header:"Result Text",numeric:!0,render:(N)=>e.jsxDEV("span",{className:"font-mono",title:"Characters of tool-result text fed back into context",children:N1(N.resultChars)},void 0,!1,void 0,this)},{key:"lastUsed",header:"Last Used",numeric:!0,render:(N)=>e.jsxDEV("span",{className:"stats-text-secondary",children:Y6(N.lastUsed)},void 0,!1,void 0,this)}],[]);return e.jsxDEV(q1,{title:"By Tool",subtitle:"Usage per tool, most called first",children:e.jsxDEV(K6,{columns:X,data:J,keyExtractor:(N)=>N.tool,renderMobileCard:(N)=>e.jsxDEV("div",{className:"stats-mobile-card",children:[e.jsxDEV("div",{className:"stats-mobile-card-header mb-2",children:[e.jsxDEV("div",{className:"stats-font-semibold stats-text-primary font-mono",children:N.tool},void 0,!1,void 0,this),e.jsxDEV(V5,{variant:cK(N.errorRate),children:[d1(N.errorRate)," Err"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-grid",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-mobile-card-label",children:"Calls"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:S0(N.calls)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-mobile-card-label",children:"Attr. Tokens"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:N1(Math.round(N.totalTokensShare))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-mobile-card-label",children:"Attr. Cost"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:R1(N.costShare)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-mobile-card-label",children:"Result Text"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-mobile-card-value font-mono",children:N1(N.resultChars)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),emptyText:"No tool calls recorded for this range."},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function Uv({byToolModel:Q}){let[J,X]=e6.useState(null),q=e6.useMemo(()=>[...new Set(Q.map((H)=>H.tool))].sort(),[Q]),N=e6.useMemo(()=>{return(J?Q.filter((F)=>F.tool===J):Q).map((F)=>({...F,errorRate:F.calls>0?F.errors/F.calls:0}))},[Q,J]),K=e6.useMemo(()=>[{key:"tool",header:"Tool",render:(H)=>e.jsxDEV("span",{className:"stats-font-medium stats-text-primary font-mono",children:H.tool},void 0,!1,void 0,this)},{key:"model",header:"Model",render:(H)=>e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"stats-text-primary",children:H.model||"(unknown)"},void 0,!1,void 0,this),e.jsxDEV("div",{className:"stats-text-secondary text-xs",children:H.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},{key:"calls",header:"Calls",numeric:!0,render:(H)=>e.jsxDEV("span",{className:"font-mono",children:S0(H.calls)},void 0,!1,void 0,this)},{key:"errorRate",header:"Error Rate",numeric:!0,render:(H)=>e.jsxDEV(V5,{variant:cK(H.errorRate),children:d1(H.errorRate)},void 0,!1,void 0,this)},{key:"tokens",header:"Attr. Tokens",numeric:!0,render:(H)=>e.jsxDEV("span",{className:"font-mono",children:N1(Math.round(H.totalTokensShare))},void 0,!1,void 0,this)},{key:"cost",header:"Attr. Cost",numeric:!0,render:(H)=>e.jsxDEV("span",{className:"font-mono",children:R1(H.costShare)},void 0,!1,void 0,this)}],[]);return e.jsxDEV(q1,{title:"By Model",subtitle:"Which models call which tools",children:[e.jsxDEV("div",{className:"mb-4",style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[e.jsxDEV("span",{className:"stats-text-secondary",style:{fontSize:"0.875rem",whiteSpace:"nowrap"},children:"Tool"},void 0,!1,void 0,this),e.jsxDEV("select",{className:"stats-select",value:J??"",onChange:(H)=>X(H.target.value||null),style:{maxWidth:"320px",flex:1},children:[e.jsxDEV("option",{value:"",children:"All tools"},void 0,!1,void 0,this),q.map((H)=>e.jsxDEV("option",{value:H,children:H},H,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),e.jsxDEV(K6,{columns:K,data:N,keyExtractor:(H)=>`${H.tool}::${H.model}::${H.provider}`,emptyText:"No tool calls recorded for this range."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var A5=n(U0(),1);function lK(){let{section:Q,setSection:J,range:X,setRange:q}=kL(),[N,K]=g2.useState(0),[H,F]=g2.useState(null),[M,w]=g2.useState(()=>Date.now()),R=g2.useCallback((V)=>{if(V.success)K((O)=>O+1),w(Date.now())},[]),_=g2.useCallback(()=>F(null),[]),P=Q,I=g2.useRef(new Set);I.current.add(P);let A=(V)=>{let O=V===P;switch(V){case"overview":return A5.jsxDEV(iP,{active:O,range:X,refreshTrigger:N,onRequestClick:F},void 0,!1,void 0,this);case"requests":return A5.jsxDEV(ZT,{active:O,range:X,refreshTrigger:N,onRequestClick:F},void 0,!1,void 0,this);case"errors":return A5.jsxDEV(lP,{active:O,range:X,refreshTrigger:N,onRequestClick:F},void 0,!1,void 0,this);case"models":return A5.jsxDEV(sP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"providers":return A5.jsxDEV(eP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"tools":return A5.jsxDEV(QT,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"costs":return A5.jsxDEV(pP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"behavior":return A5.jsxDEV(dP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"projects":return A5.jsxDEV(tP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this);case"gain":return A5.jsxDEV(rP,{active:O,range:X,refreshTrigger:N},void 0,!1,void 0,this)}};return A5.jsxDEV(A5.Fragment,{children:[A5.jsxDEV(vL,{activeSection:P,onSectionChange:J,range:X,onRangeChange:q,updatedAt:M,onSyncComplete:R,children:[...I.current].map((V)=>A5.jsxDEV("div",{hidden:V!==P,children:A(V)},V,!1,void 0,this))},void 0,!1,void 0,this),A5.jsxDEV(yP,{id:H,onClose:_},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var GT=n(U0(),1),Kv=JT.createRoot(document.getElementById("root"));Kv.render(GT.jsxDEV(lK,{},void 0,!1,void 0,this));