@sayknow-cli/stats 0.3.12 → 0.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client/index.js
CHANGED
|
@@ -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 cT{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(Q,J,q,Y){let U=J.listeners[Y],K=J.duration;U.forEach((H)=>H({chart:Q,initial:J.initial,numSteps:K,currentStep:Math.min(q-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((q,Y)=>{if(!q.running||!q.items.length)return;let U=q.items,K=U.length-1,H=!1,M;for(;K>=0;--K)if(M=U[K],M._active){if(M._total>q.duration)q.duration=M._total;M.tick(Q),H=!0}else U[K]=U[U.length-1],U.pop();if(H)Y.draw(),this._notify(Y,q,Q,"progress");if(!U.length)q.running=!1,this._notify(Y,q,Q,"complete"),q.initial=!1;J+=U.length}),this._lastDate=Q,J===0)this._running=!1}_getAnims(Q){let J=this._charts,q=J.get(Q);if(!q)q={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},J.set(Q,q);return q}listen(Q,J,q){this._getAnims(Q).listeners[J].push(q)}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((q,Y)=>Math.max(q,Y._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 q=J.items,Y=q.length-1;for(;Y>=0;--Y)q[Y].cancel();J.items=[],this._notify(Q,J,Date.now(),"complete")}remove(Q){return this._charts.delete(Q)}}var G6=new cT,nR="transparent",lC={boolean(Q,J,q){return q>0.5?J:Q},color(Q,J,q){let Y=$N(Q||nR),U=Y.valid&&$N(J||nR);return U&&U.valid?U.mix(Y,q).hexString():J},number(Q,J,q){return Q+(J-Q)*q}};class lT{constructor(Q,J,q,Y){let U=J[q];Y=pZ([Q.to,Y,U,Q.from]);let K=pZ([Q.from,U,Y]);this._active=!0,this._fn=Q.fn||lC[Q.type||typeof K],this._easing=f9[Q.easing]||f9.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=q,this._from=K,this._to=Y,this._promises=void 0}active(){return this._active}update(Q,J,q){if(this._active){this._notify(!1);let Y=this._target[this._prop],U=q-this._start,K=this._duration-U;this._start=q,this._duration=Math.floor(Math.max(K,Q.duration)),this._total+=U,this._loop=!!Q.loop,this._to=pZ([Q.to,J,Y,Q.from]),this._from=pZ([Q.from,Y,J])}}cancel(){if(this._active)this.tick(Date.now()),this._active=!1,this._notify(!1)}tick(Q){let J=Q-this._start,q=this._duration,Y=this._prop,U=this._from,K=this._loop,H=this._to,M;if(this._active=U!==H&&(K||J<q),!this._active){this._target[Y]=H,this._notify(!0);return}if(J<0){this._target[Y]=U;return}M=J/q%2,M=K&&M>1?2-M:M,M=this._easing(Math.min(1,Math.max(0,M))),this._target[Y]=this._fn(U,H,M)}wait(){let Q=this._promises||(this._promises=[]);return new Promise((J,q)=>{Q.push({res:J,rej:q})})}_notify(Q){let J=Q?"res":"rej",q=this._promises||[];for(let Y=0;Y<q.length;Y++)q[Y][J]()}}class bN{constructor(Q,J){this._chart=Q,this._properties=new Map,this.configure(J)}configure(Q){if(!n0(Q))return;let J=Object.keys(O1.animation),q=this._properties;Object.getOwnPropertyNames(Q).forEach((Y)=>{let U=Q[Y];if(!n0(U))return;let K={};for(let H of J)K[H]=U[H];(z1(U.properties)&&U.properties||[Y]).forEach((H)=>{if(H===Y||!q.has(H))q.set(H,K)})})}_animateOptions(Q,J){let q=J.options,Y=sC(Q,q);if(!Y)return[];let U=this._createAnimations(Y,q);if(q.$shared)rC(Q.options.$animations,q).then(()=>{Q.options=q},()=>{});return U}_createAnimations(Q,J){let q=this._properties,Y=[],U=Q.$animations||(Q.$animations={}),K=Object.keys(J),H=Date.now(),M;for(M=K.length-1;M>=0;--M){let F=K[M];if(F.charAt(0)==="$")continue;if(F==="options"){Y.push(...this._animateOptions(Q,J));continue}let R=J[F],T=U[F],z=q.get(F);if(T)if(z&&T.active()){T.update(z,R,H);continue}else T.cancel();if(!z||!z.duration){Q[F]=R;continue}U[F]=T=new lT(z,Q,F,R),Y.push(T)}return Y}update(Q,J){if(this._properties.size===0){Object.assign(Q,J);return}let q=this._createAnimations(Q,J);if(q.length)return G6.add(this._chart,q),!0}}function rC(Q,J){let q=[],Y=Object.keys(J);for(let U=0;U<Y.length;U++){let K=Q[Y[U]];if(K&&K.active())q.push(K.wait())}return Promise.all(q)}function sC(Q,J){if(!J)return;let q=Q.options;if(!q){Q.options=J;return}if(q.$shared)Q.options=q=Object.assign({},q,{$shared:!1,$animations:{}});return q}function oR(Q,J){let q=Q&&Q.options||{},Y=q.reverse,U=q.min===void 0?J:0,K=q.max===void 0?J:0;return{start:Y?K:U,end:Y?U:K}}function nC(Q,J,q){if(q===!1)return!1;let Y=oR(Q,q),U=oR(J,q);return{top:U.end,right:Y.end,bottom:U.start,left:Y.start}}function oC(Q){let J,q,Y,U;if(n0(Q))J=Q.top,q=Q.right,Y=Q.bottom,U=Q.left;else J=q=Y=U=Q;return{top:J,right:q,bottom:Y,left:U,disabled:Q===!1}}function rT(Q,J){let q=[],Y=Q._getSortedDatasetMetas(J),U,K;for(U=0,K=Y.length;U<K;++U)q.push(Y[U].index);return q}function iR(Q,J,q,Y={}){let U=Q.keys,K=Y.mode==="single",H,M,F,R;if(J===null)return;let T=!1;for(H=0,M=U.length;H<M;++H){if(F=+U[H],F===q){if(T=!0,Y.all)continue;break}if(R=Q.values[F],j1(R)&&(K||J===0||y4(J)===y4(R)))J+=R}if(!T&&!Y.all)return 0;return J}function iC(Q,J){let{iScale:q,vScale:Y}=J,U=q.axis==="x"?"x":"y",K=Y.axis==="x"?"x":"y",H=Object.keys(Q),M=Array(H.length),F,R,T;for(F=0,R=H.length;F<R;++F)T=H[F],M[F]={[U]:T,[K]:Q[T]};return M}function WN(Q,J){let q=Q&&Q.options.stacked;return q||q===void 0&&J.stack!==void 0}function aC(Q,J,q){return`${Q.id}.${J.id}.${q.stack||q.type}`}function tC(Q){let{min:J,max:q,minDefined:Y,maxDefined:U}=Q.getUserBounds();return{min:Y?J:Number.NEGATIVE_INFINITY,max:U?q:Number.POSITIVE_INFINITY}}function eC(Q,J,q){let Y=Q[J]||(Q[J]={});return Y[q]||(Y[q]={})}function aR(Q,J,q,Y){for(let U of J.getMatchingVisibleMetas(Y).reverse()){let K=Q[U.index];if(q&&K>0||!q&&K<0)return U.index}return null}function tR(Q,J){let{chart:q,_cachedMeta:Y}=Q,U=q._stacks||(q._stacks={}),{iScale:K,vScale:H,index:M}=Y,F=K.axis,R=H.axis,T=aC(K,H,Y),z=J.length,L;for(let P=0;P<z;++P){let I=J[P],{[F]:A,[R]:C}=I,g=I._stacks||(I._stacks={});L=g[R]=eC(U,T,A),L[M]=C,L._top=aR(L,H,!0,Y.type),L._bottom=aR(L,H,!1,Y.type);let m=L._visualValues||(L._visualValues={});m[M]=C}}function wN(Q,J){let q=Q.scales;return Object.keys(q).filter((Y)=>q[Y].axis===J).shift()}function $I(Q,J){return Q6(Q,{active:!1,dataset:void 0,datasetIndex:J,index:J,mode:"default",type:"dataset"})}function ZI(Q,J,q){return Q6(Q,{active:!1,dataIndex:J,parsed:void 0,raw:void 0,element:q,index:J,mode:"default",type:"data"})}function cZ(Q,J){let q=Q.controller.index,Y=Q.vScale&&Q.vScale.axis;if(!Y)return;J=J||Q._parsed;for(let U of J){let K=U._stacks;if(!K||K[Y]===void 0||K[Y][q]===void 0)return;if(delete K[Y][q],K[Y]._visualValues!==void 0&&K[Y]._visualValues[q]!==void 0)delete K[Y]._visualValues[q]}}var RN=(Q)=>Q==="reset"||Q==="none",eR=(Q,J)=>J?Q:Object.assign({},Q),QI=(Q,J,q)=>Q&&!J.hidden&&J._stacked&&{keys:rT(q,!0),values:null};class Wq{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=WN(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)cZ(this._cachedMeta);this.index=Q}linkScales(){let Q=this.chart,J=this._cachedMeta,q=this.getDataset(),Y=(T,z,L,P)=>T==="x"?z:T==="r"?P:L,U=J.xAxisID=h0(q.xAxisID,wN(Q,"x")),K=J.yAxisID=h0(q.yAxisID,wN(Q,"y")),H=J.rAxisID=h0(q.rAxisID,wN(Q,"r")),M=J.indexAxis,F=J.iAxisID=Y(M,U,K,H),R=J.vAxisID=Y(M,K,U,H);J.xScale=this.getScaleForId(U),J.yScale=this.getScaleForId(K),J.rScale=this.getScaleForId(H),J.iScale=this.getScaleForId(F),J.vScale=this.getScaleForId(R)}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)cZ(Q)}_dataCheck(){let Q=this.getDataset(),J=Q.data||(Q.data=[]),q=this._data;if(n0(J)){let Y=this._cachedMeta;this._data=iC(J,Y)}else if(q!==J){if(q){oU(q,this);let Y=this._cachedMeta;cZ(Y),Y._parsed=[]}if(J&&Object.isExtensible(J))IR(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,q=this.getDataset(),Y=!1;this._dataCheck();let U=J._stacked;if(J._stacked=WN(J.vScale,J),J.stack!==q.stack)Y=!0,cZ(J),J.stack=q.stack;if(this._resyncElements(Q),Y||U!==J._stacked)tR(this,J._parsed),J._stacked=WN(J.vScale,J)}configure(){let Q=this.chart.config,J=Q.datasetScopeKeys(this._type),q=Q.getOptionScopes(this.getDataset(),J,!0);this.options=Q.createResolver(q,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(Q,J){let{_cachedMeta:q,_data:Y}=this,{iScale:U,_stacked:K}=q,H=U.axis,M=Q===0&&J===Y.length?!0:q._sorted,F=Q>0&&q._parsed[Q-1],R,T,z;if(this._parsing===!1)q._parsed=Y,q._sorted=!0,z=Y;else{if(z1(Y[Q]))z=this.parseArrayData(q,Y,Q,J);else if(n0(Y[Q]))z=this.parseObjectData(q,Y,Q,J);else z=this.parsePrimitiveData(q,Y,Q,J);let L=()=>T[H]===null||F&&T[H]<F[H];for(R=0;R<J;++R)if(q._parsed[R+Q]=T=z[R],M){if(L())M=!1;F=T}q._sorted=M}if(K)tR(this,z)}parsePrimitiveData(Q,J,q,Y){let{iScale:U,vScale:K}=Q,H=U.axis,M=K.axis,F=U.getLabels(),R=U===K,T=Array(Y),z,L,P;for(z=0,L=Y;z<L;++z)P=z+q,T[z]={[H]:R||U.parse(F[P],P),[M]:K.parse(J[P],P)};return T}parseArrayData(Q,J,q,Y){let{xScale:U,yScale:K}=Q,H=Array(Y),M,F,R,T;for(M=0,F=Y;M<F;++M)R=M+q,T=J[R],H[M]={x:U.parse(T[0],R),y:K.parse(T[1],R)};return H}parseObjectData(Q,J,q,Y){let{xScale:U,yScale:K}=Q,{xAxisKey:H="x",yAxisKey:M="y"}=this._parsing,F=Array(Y),R,T,z,L;for(R=0,T=Y;R<T;++R)z=R+q,L=J[z],F[R]={x:U.parse(F$(L,H),z),y:K.parse(F$(L,M),z)};return F}getParsed(Q){return this._cachedMeta._parsed[Q]}getDataElement(Q){return this._cachedMeta.data[Q]}applyStack(Q,J,q){let Y=this.chart,U=this._cachedMeta,K=J[Q.axis],H={keys:rT(Y,!0),values:J._stacks[Q.axis]._visualValues};return iR(H,K,U.index,{mode:q})}updateRangeFromParsed(Q,J,q,Y){let U=q[J.axis],K=U===null?NaN:U,H=Y&&q._stacks[J.axis];if(Y&&H)Y.values=H,K=iR(Y,U,this._cachedMeta.index);Q.min=Math.min(Q.min,K),Q.max=Math.max(Q.max,K)}getMinMax(Q,J){let q=this._cachedMeta,Y=q._parsed,U=q._sorted&&Q===q.iScale,K=Y.length,H=this._getOtherScale(Q),M=QI(J,q,this.chart),F={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:R,max:T}=tC(H),z,L;function P(){L=Y[z];let I=L[H.axis];return!j1(L[Q.axis])||R>I||T<I}for(z=0;z<K;++z){if(P())continue;if(this.updateRangeFromParsed(F,Q,L,M),U)break}if(U)for(z=K-1;z>=0;--z){if(P())continue;this.updateRangeFromParsed(F,Q,L,M);break}return F}getAllParsedValues(Q){let J=this._cachedMeta._parsed,q=[],Y,U,K;for(Y=0,U=J.length;Y<U;++Y)if(K=J[Y][Q.axis],j1(K))q.push(K);return q}getMaxOverflow(){return!1}getLabelAndValue(Q){let J=this._cachedMeta,q=J.iScale,Y=J.vScale,U=this.getParsed(Q);return{label:q?""+q.getLabelForValue(U[q.axis]):"",value:Y?""+Y.getLabelForValue(U[Y.axis]):""}}_update(Q){let J=this._cachedMeta;this.update(Q||"default"),J._clip=oC(h0(this.options.clip,nC(J.xScale,J.yScale,this.getMaxOverflow())))}update(Q){}draw(){let Q=this._ctx,J=this.chart,q=this._cachedMeta,Y=q.data||[],U=J.chartArea,K=[],H=this._drawStart||0,M=this._drawCount||Y.length-H,F=this.options.drawActiveElementsOnTop,R;if(q.dataset)q.dataset.draw(Q,U,H,M);for(R=H;R<H+M;++R){let T=Y[R];if(T.hidden)continue;if(T.active&&F)K.push(T);else T.draw(Q,U)}for(R=0;R<K.length;++R)K[R].draw(Q,U)}getStyle(Q,J){let q=J?"active":"default";return Q===void 0&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(q):this.resolveDataElementOptions(Q||0,q)}getContext(Q,J,q){let Y=this.getDataset(),U;if(Q>=0&&Q<this._cachedMeta.data.length){let K=this._cachedMeta.data[Q];U=K.$context||(K.$context=ZI(this.getContext(),Q,K)),U.parsed=this.getParsed(Q),U.raw=Y.data[Q],U.index=U.dataIndex=Q}else U=this.$context||(this.$context=$I(this.chart.getContext(),this.index)),U.dataset=Y,U.index=U.datasetIndex=this.index;return U.active=!!J,U.mode=q,U}resolveDatasetElementOptions(Q){return this._resolveElementOptions(this.datasetElementType.id,Q)}resolveDataElementOptions(Q,J){return this._resolveElementOptions(this.dataElementType.id,J,Q)}_resolveElementOptions(Q,J="default",q){let Y=J==="active",U=this._cachedDataOpts,K=Q+"-"+J,H=U[K],M=this.enableOptionSharing&&x9(q);if(H)return eR(H,M);let F=this.chart.config,R=F.datasetElementScopeKeys(this._type,Q),T=Y?[`${Q}Hover`,"hover",Q,""]:[Q,""],z=F.getOptionScopes(this.getDataset(),R),L=Object.keys(O1.elements[Q]),P=()=>this.getContext(q,Y,J),I=F.resolveNamedOptions(z,L,P,T);if(I.$shared)I.$shared=M,U[K]=Object.freeze(eR(I,M));return I}_resolveAnimations(Q,J,q){let Y=this.chart,U=this._cachedDataOpts,K=`animation-${J}`,H=U[K];if(H)return H;let M;if(Y.options.animation!==!1){let R=this.chart.config,T=R.datasetAnimationScopeKeys(this._type,J),z=R.getOptionScopes(this.getDataset(),T);M=R.createResolver(z,this.getContext(Q,q,J))}let F=new bN(Y,M&&M.animations);if(M&&M._cacheable)U[K]=Object.freeze(F);return F}getSharedOptions(Q){if(!Q.$shared)return;return this._sharedOptions||(this._sharedOptions=Object.assign({},Q))}includeOptions(Q,J){return!J||RN(Q)||this.chart._animationsDisabled}_getSharedOptions(Q,J){let q=this.resolveDataElementOptions(Q,J),Y=this._sharedOptions,U=this.getSharedOptions(q),K=this.includeOptions(J,U)||U!==Y;return this.updateSharedOptions(U,J,q),{sharedOptions:U,includeOptions:K}}updateElement(Q,J,q,Y){if(RN(Y))Object.assign(Q,q);else this._resolveAnimations(J,Y).update(Q,q)}updateSharedOptions(Q,J,q){if(Q&&!RN(J))this._resolveAnimations(void 0,J).update(Q,q)}_setStyle(Q,J,q,Y){Q.active=Y;let U=this.getStyle(J,Y);this._resolveAnimations(J,q,Y).update(Q,{options:!Y&&this.getSharedOptions(U)||U})}removeHoverStyle(Q,J,q){this._setStyle(Q,q,"active",!1)}setHoverStyle(Q,J,q){this._setStyle(Q,q,"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,q=this._cachedMeta.data;for(let[H,M,F]of this._syncList)this[H](M,F);this._syncList=[];let Y=q.length,U=J.length,K=Math.min(U,Y);if(K)this.parse(0,K);if(U>Y)this._insertElements(Y,U-Y,Q);else if(U<Y)this._removeElements(U,Y-U)}_insertElements(Q,J,q=!0){let Y=this._cachedMeta,U=Y.data,K=Q+J,H,M=(F)=>{F.length+=J;for(H=F.length-1;H>=K;H--)F[H]=F[H-J]};M(U);for(H=Q;H<K;++H)U[H]=new this.dataElementType;if(this._parsing)M(Y._parsed);if(this.parse(Q,J),q)this.updateElements(U,Q,J,"reset")}updateElements(Q,J,q,Y){}_removeElements(Q,J){let q=this._cachedMeta;if(this._parsing){let Y=q._parsed.splice(Q,J);if(q._stacked)cZ(q,Y)}q.data.splice(Q,J)}_sync(Q){if(this._parsing)this._syncList.push(Q);else{let[J,q,Y]=Q;this[J](q,Y)}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 q=arguments.length-2;if(q)this._sync(["_insertElements",Q,q])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}function GI(Q,J){if(!Q._cache.$bar){let q=Q.getMatchingVisibleMetas(J),Y=[];for(let U=0,K=q.length;U<K;U++)Y=Y.concat(q[U].controller.getAllParsedValues(Q));Q._cache.$bar=iU(Y.sort((U,K)=>U-K))}return Q._cache.$bar}function JI(Q){let J=Q.iScale,q=GI(J,Q.type),Y=J._length,U,K,H,M,F=()=>{if(H===32767||H===-32768)return;if(x9(M))Y=Math.min(Y,Math.abs(H-M)||Y);M=H};for(U=0,K=q.length;U<K;++U)H=J.getPixelForValue(q[U]),F();M=void 0;for(U=0,K=J.ticks.length;U<K;++U)H=J.getPixelForTick(U),F();return Y}function qI(Q,J,q,Y){let U=q.barThickness,K,H;if(t0(U))K=J.min*q.categoryPercentage,H=q.barPercentage;else K=U*Y,H=1;return{chunk:K/Y,ratio:H,start:J.pixels[Q]-K/2}}function XI(Q,J,q,Y){let U=J.pixels,K=U[Q],H=Q>0?U[Q-1]:null,M=Q<U.length-1?U[Q+1]:null,F=q.categoryPercentage;if(H===null)H=K-(M===null?J.end-J.start:M-K);if(M===null)M=K+K-H;let R=K-(K-Math.min(H,M))/2*F;return{chunk:Math.abs(M-H)/2*F/Y,ratio:q.barPercentage,start:R}}function YI(Q,J,q,Y){let U=q.parse(Q[0],Y),K=q.parse(Q[1],Y),H=Math.min(U,K),M=Math.max(U,K),F=H,R=M;if(Math.abs(H)>Math.abs(M))F=M,R=H;J[q.axis]=R,J._custom={barStart:F,barEnd:R,start:U,end:K,min:H,max:M}}function sT(Q,J,q,Y){if(z1(Q))YI(Q,J,q,Y);else J[q.axis]=q.parse(Q,Y);return J}function $T(Q,J,q,Y){let{iScale:U,vScale:K}=Q,H=U.getLabels(),M=U===K,F=[],R,T,z,L;for(R=q,T=q+Y;R<T;++R)L=J[R],z={},z[U.axis]=M||U.parse(H[R],R),F.push(sT(L,z,K,R));return F}function TN(Q){return Q&&Q.barStart!==void 0&&Q.barEnd!==void 0}function UI(Q,J,q){if(Q!==0)return y4(Q);return(J.isHorizontal()?1:-1)*(J.min>=q?1:-1)}function NI(Q){let J,q,Y,U,K;if(Q.horizontal)J=Q.base>Q.x,q="left",Y="right";else J=Q.base<Q.y,q="bottom",Y="top";if(J)U="end",K="start";else U="start",K="end";return{start:q,end:Y,reverse:J,top:U,bottom:K}}function KI(Q,J,q,Y){let U=J.borderSkipped,K={};if(!U){Q.borderSkipped=K;return}if(U===!0){Q.borderSkipped={top:!0,right:!0,bottom:!0,left:!0};return}let{start:H,end:M,reverse:F,top:R,bottom:T}=NI(Q);if(U==="middle"&&q)if(Q.enableBorderRadius=!0,(q._top||0)===Y)U=R;else if((q._bottom||0)===Y)U=T;else K[ZT(T,H,M,F)]=!0,U=R;K[ZT(U,H,M,F)]=!0,Q.borderSkipped=K}function ZT(Q,J,q,Y){if(Y)Q=BI(Q,J,q),Q=QT(Q,q,J);else Q=QT(Q,J,q);return Q}function BI(Q,J,q){return Q===J?q:Q===q?J:Q}function QT(Q,J,q){return Q==="start"?J:Q==="end"?q:Q}function HI(Q,{inflateAmount:J},q){Q.inflateAmount=J==="auto"?q===1?0.33:0:J}class fN extends Wq{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,q,Y){return $T(Q,J,q,Y)}parseArrayData(Q,J,q,Y){return $T(Q,J,q,Y)}parseObjectData(Q,J,q,Y){let{iScale:U,vScale:K}=Q,{xAxisKey:H="x",yAxisKey:M="y"}=this._parsing,F=U.axis==="x"?H:M,R=K.axis==="x"?H:M,T=[],z,L,P,I;for(z=q,L=q+Y;z<L;++z)I=J[z],P={},P[U.axis]=U.parse(F$(I,F),z),T.push(sT(F$(I,R),P,K,z));return T}updateRangeFromParsed(Q,J,q,Y){super.updateRangeFromParsed(Q,J,q,Y);let U=q._custom;if(U&&J===this._cachedMeta.vScale)Q.min=Math.min(Q.min,U.min),Q.max=Math.max(Q.max,U.max)}getMaxOverflow(){return 0}getLabelAndValue(Q){let J=this._cachedMeta,{iScale:q,vScale:Y}=J,U=this.getParsed(Q),K=U._custom,H=TN(K)?"["+K.start+", "+K.end+"]":""+Y.getLabelForValue(U[Y.axis]);return{label:""+q.getLabelForValue(U[q.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,q,Y){let U=Y==="reset",{index:K,_cachedMeta:{vScale:H}}=this,M=H.getBasePixel(),F=H.isHorizontal(),R=this._getRuler(),{sharedOptions:T,includeOptions:z}=this._getSharedOptions(J,Y);for(let L=J;L<J+q;L++){let P=this.getParsed(L),I=U||t0(P[H.axis])?{base:M,head:M}:this._calculateBarValuePixels(L),A=this._calculateBarIndexPixels(L,R),C=(P._stacks||{})[H.axis],g={horizontal:F,base:I.base,enableBorderRadius:!C||TN(P._custom)||K===C._top||K===C._bottom,x:F?I.head:A.center,y:F?A.center:I.head,height:F?A.size:Math.abs(I.size),width:F?Math.abs(I.size):A.size};if(z)g.options=T||this.resolveDataElementOptions(L,Q[L].active?"active":Y);let m=g.options||Q[L].options;KI(g,m,C,K),HI(g,m,R.ratio),this.updateElement(Q[L],L,g,Y)}}_getStacks(Q,J){let{iScale:q}=this._cachedMeta,Y=q.getMatchingVisibleMetas(this._type).filter((R)=>R.controller.options.grouped),U=q.options.stacked,K=[],H=this._cachedMeta.controller.getParsed(J),M=H&&H[q.axis],F=(R)=>{let T=R._parsed.find((L)=>L[q.axis]===M),z=T&&T[R.vScale.axis];if(t0(z)||isNaN(z))return!0};for(let R of Y){if(J!==void 0&&F(R))continue;if(U===!1||K.indexOf(R.stack)===-1||U===void 0&&R.stack===void 0)K.push(R.stack);if(R.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((q)=>Q[q].axis===J).shift()}_getAxis(){let Q={},J=this.getFirstScaleIdForIndexAxis();for(let q of this.chart.data.datasets)Q[h0(this.chart.options.indexAxis==="x"?q.xAxisID:q.yAxisID,J)]=!0;return Object.keys(Q)}_getStackIndex(Q,J,q){let Y=this._getStacks(Q,q),U=J!==void 0?Y.indexOf(J):-1;return U===-1?Y.length-1:U}_getRuler(){let Q=this.options,J=this._cachedMeta,q=J.iScale,Y=[],U,K;for(U=0,K=J.data.length;U<K;++U)Y.push(q.getPixelForValue(this.getParsed(U)[q.axis],U));let H=Q.barThickness;return{min:H||JI(J),pixels:Y,start:q._startPixel,end:q._endPixel,stackCount:this._getStackCount(),scale:q,grouped:Q.grouped,ratio:H?1:Q.categoryPercentage*Q.barPercentage}}_calculateBarValuePixels(Q){let{_cachedMeta:{vScale:J,_stacked:q,index:Y},options:{base:U,minBarLength:K}}=this,H=U||0,M=this.getParsed(Q),F=M._custom,R=TN(F),T=M[J.axis],z=0,L=q?this.applyStack(J,M,q):T,P,I;if(L!==T)z=L-T,L=T;if(R){if(T=F.barStart,L=F.barEnd-F.barStart,T!==0&&y4(T)!==y4(F.barEnd))z=0;z+=T}let A=!t0(U)&&!R?U:z,C=J.getPixelForValue(A);if(this.chart.getDataVisibility(Q))P=J.getPixelForValue(z+L);else P=C;if(I=P-C,Math.abs(I)<K){if(I=UI(I,J,H)*K,T===H)C-=I/2;let g=J.getPixelForDecimal(0),m=J.getPixelForDecimal(1),o=Math.min(g,m),i=Math.max(g,m);if(C=Math.max(Math.min(C,i),o),P=C+I,q&&!R)M._stacks[J.axis]._visualValues[Y]=J.getValueForPixel(P)-J.getValueForPixel(C)}if(C===J.getPixelForValue(H)){let g=y4(I)*J.getLineWidthForValue(H)/2;C+=g,I-=g}return{size:I,base:C,head:P,center:P+I/2}}_calculateBarIndexPixels(Q,J){let q=J.scale,Y=this.options,U=Y.skipNull,K=h0(Y.maxBarThickness,1/0),H,M,F=this._getAxisCount();if(J.grouped){let R=U?this._getStackCount(Q):J.stackCount,T=Y.barThickness==="flex"?XI(Q,J,Y,R*F):qI(Q,J,Y,R*F),z=this.chart.options.indexAxis==="x"?this.getDataset().xAxisID:this.getDataset().yAxisID,L=this._getAxis().indexOf(h0(z,this.getFirstScaleIdForIndexAxis())),P=this._getStackIndex(this.index,this._cachedMeta.stack,U?Q:void 0)+L;H=T.start+T.chunk*P+T.chunk/2,M=Math.min(K,T.chunk*T.ratio)}else H=q.getPixelForValue(this.getParsed(Q)[q.axis],Q),M=Math.min(K,J.min*J.ratio);return{base:H-M/2,head:H+M/2,center:H,size:M}}draw(){let Q=this._cachedMeta,J=Q.vScale,q=Q.data,Y=q.length,U=0;for(;U<Y;++U)if(this.getParsed(U)[J.axis]!==null&&!q[U].hidden)q[U].draw(this._ctx)}}class yN extends Wq{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:q,data:Y=[],_dataset:U}=J,K=this.chart._animationsDisabled,{start:H,count:M}=DR(J,Y,K);if(this._drawStart=H,this._drawCount=M,AR(J))H=0,M=Y.length;q._chart=this.chart,q._datasetIndex=this.index,q._decimated=!!U._decimated,q.points=Y;let F=this.resolveDatasetElementOptions(Q);if(!this.options.showLine)F.borderWidth=0;F.segment=this.options.segment,this.updateElement(q,void 0,{animated:!K,options:F},Q),this.updateElements(Y,H,M,Q)}updateElements(Q,J,q,Y){let U=Y==="reset",{iScale:K,vScale:H,_stacked:M,_dataset:F}=this._cachedMeta,{sharedOptions:R,includeOptions:T}=this._getSharedOptions(J,Y),z=K.axis,L=H.axis,{spanGaps:P,segment:I}=this.options,A=m9(P)?P:Number.POSITIVE_INFINITY,C=this.chart._animationsDisabled||U||Y==="none",g=J+q,m=Q.length,o=J>0&&this.getParsed(J-1);for(let i=0;i<m;++i){let s=Q[i],Q0=C?s:{};if(i<J||i>=g){Q0.skip=!0;continue}let p=this.getParsed(i),a=t0(p[L]),Y0=Q0[z]=K.getPixelForValue(p[z],i),d=Q0[L]=U||a?H.getBasePixel():H.getPixelForValue(M?this.applyStack(H,p,M):p[L],i);if(Q0.skip=isNaN(Y0)||isNaN(d)||a,Q0.stop=i>0&&Math.abs(p[z]-o[z])>A,I)Q0.parsed=p,Q0.raw=F.data[i];if(T)Q0.options=R||this.resolveDataElementOptions(i,s.active?"active":Y);if(!C)this.updateElement(s,i,Q0,Y);o=p}}getMaxOverflow(){let Q=this._cachedMeta,J=Q.dataset,q=J.options&&J.options.borderWidth||0,Y=Q.data||[];if(!Y.length)return q;let U=Y[0].size(this.resolveDataElementOptions(0)),K=Y[Y.length-1].size(this.resolveDataElementOptions(Y.length-1));return Math.max(q,U,K)/2}draw(){let Q=this._cachedMeta;Q.dataset.updateControlPoints(this.chart.chartArea,Q.iScale.axis),super.draw()}}function w$(){throw Error("This method is not implemented: Check that a complete date adapter is provided.")}class gN{static override(Q){Object.assign(gN.prototype,Q)}options;constructor(Q){this.options=Q||{}}init(){}formats(){return w$()}parse(){return w$()}format(){return w$()}add(){return w$()}diff(){return w$()}startOf(){return w$()}endOf(){return w$()}}var MI={_date:gN};function FI(Q,J,q,Y){let{controller:U,data:K,_sorted:H}=Q,M=U._cachedMeta.iScale,F=Q.dataset?Q.dataset.options?Q.dataset.options.spanGaps:null:null;if(M&&J===M.axis&&J!=="r"&&H&&K.length){let R=M._reversePixels?ER:q2;if(!Y){let T=R(K,J,q);if(F){let{vScale:z}=U._cachedMeta,{_parsed:L}=Q,P=L.slice(0,T.lo+1).reverse().findIndex((A)=>!t0(A[z.axis]));T.lo-=Math.max(0,P);let I=L.slice(T.hi).findIndex((A)=>!t0(A[z.axis]));T.hi+=Math.max(0,I)}return T}else if(U._sharedOptions){let T=K[0],z=typeof T.getRange==="function"&&T.getRange(J);if(z){let L=R(K,J,q-z),P=R(K,J,q+z);return{lo:L.lo,hi:P.hi}}}}return{lo:0,hi:K.length-1}}function ZQ(Q,J,q,Y,U){let K=Q.getSortedVisibleDatasetMetas(),H=q[J];for(let M=0,F=K.length;M<F;++M){let{index:R,data:T}=K[M],{lo:z,hi:L}=FI(K[M],J,H,U);for(let P=z;P<=L;++P){let I=T[P];if(!I.skip)Y(I,R,P)}}}function WI(Q){let J=Q.indexOf("x")!==-1,q=Q.indexOf("y")!==-1;return function(Y,U){let K=J?Math.abs(Y.x-U.x):0,H=q?Math.abs(Y.y-U.y):0;return Math.sqrt(Math.pow(K,2)+Math.pow(H,2))}}function zN(Q,J,q,Y,U){let K=[];if(!U&&!Q.isPointInArea(J))return K;return ZQ(Q,q,J,function(M,F,R){if(!U&&!w8(M,Q.chartArea,0))return;if(M.inRange(J.x,J.y,Y))K.push({element:M,datasetIndex:F,index:R})},!0),K}function wI(Q,J,q,Y){let U=[];function K(H,M,F){let{startAngle:R,endAngle:T}=H.getProps(["startAngle","endAngle"],Y),{angle:z}=LR(H,{x:J.x,y:J.y});if(nU(z,R,T))U.push({element:H,datasetIndex:M,index:F})}return ZQ(Q,q,J,K),U}function RI(Q,J,q,Y,U,K){let H=[],M=WI(q),F=Number.POSITIVE_INFINITY;function R(T,z,L){let P=T.inRange(J.x,J.y,U);if(Y&&!P)return;let I=T.getCenterPoint(U);if(!(!!K||Q.isPointInArea(I))&&!P)return;let C=M(J,I);if(C<F)H=[{element:T,datasetIndex:z,index:L}],F=C;else if(C===F)H.push({element:T,datasetIndex:z,index:L})}return ZQ(Q,q,J,R),H}function _N(Q,J,q,Y,U,K){if(!K&&!Q.isPointInArea(J))return[];return q==="r"&&!Y?wI(Q,J,q,U):RI(Q,J,q,Y,U,K)}function GT(Q,J,q,Y,U){let K=[],H=q==="x"?"inXRange":"inYRange",M=!1;if(ZQ(Q,q,J,(F,R,T)=>{if(F[H]&&F[H](J[q],U))K.push({element:F,datasetIndex:R,index:T}),M=M||F.inRange(J.x,J.y,U)}),Y&&!M)return[];return K}var TI={evaluateInteractionItems:ZQ,modes:{index(Q,J,q,Y){let U=B2(J,Q),K=q.axis||"x",H=q.includeInvisible||!1,M=q.intersect?zN(Q,U,K,Y,H):_N(Q,U,K,!1,Y,H),F=[];if(!M.length)return[];return Q.getSortedVisibleDatasetMetas().forEach((R)=>{let T=M[0].index,z=R.data[T];if(z&&!z.skip)F.push({element:z,datasetIndex:R.index,index:T})}),F},dataset(Q,J,q,Y){let U=B2(J,Q),K=q.axis||"xy",H=q.includeInvisible||!1,M=q.intersect?zN(Q,U,K,Y,H):_N(Q,U,K,!1,Y,H);if(M.length>0){let F=M[0].datasetIndex,R=Q.getDatasetMeta(F).data;M=[];for(let T=0;T<R.length;++T)M.push({element:R[T],datasetIndex:F,index:T})}return M},point(Q,J,q,Y){let U=B2(J,Q),K=q.axis||"xy",H=q.includeInvisible||!1;return zN(Q,U,K,Y,H)},nearest(Q,J,q,Y){let U=B2(J,Q),K=q.axis||"xy",H=q.includeInvisible||!1;return _N(Q,U,K,q.intersect,Y,H)},x(Q,J,q,Y){let U=B2(J,Q);return GT(Q,U,"x",q.intersect,Y)},y(Q,J,q,Y){let U=B2(J,Q);return GT(Q,U,"y",q.intersect,Y)}}},nT=["left","top","right","bottom"];function lZ(Q,J){return Q.filter((q)=>q.pos===J)}function JT(Q,J){return Q.filter((q)=>nT.indexOf(q.pos)===-1&&q.box.axis===J)}function rZ(Q,J){return Q.sort((q,Y)=>{let U=J?Y:q,K=J?q:Y;return U.weight===K.weight?U.index-K.index:U.weight-K.weight})}function zI(Q){let J=[],q,Y,U,K,H,M;for(q=0,Y=(Q||[]).length;q<Y;++q)U=Q[q],{position:K,options:{stack:H,stackWeight:M=1}}=U,J.push({index:q,box:U,pos:K,horizontal:U.isHorizontal(),weight:U.weight,stack:H&&K+H,stackWeight:M});return J}function _I(Q){let J={};for(let q of Q){let{stack:Y,pos:U,stackWeight:K}=q;if(!Y||!nT.includes(U))continue;let H=J[Y]||(J[Y]={count:0,placed:0,weight:0,size:0});H.count++,H.weight+=K}return J}function LI(Q,J){let q=_I(Q),{vBoxMaxWidth:Y,hBoxMaxHeight:U}=J,K,H,M;for(K=0,H=Q.length;K<H;++K){M=Q[K];let{fullSize:F}=M.box,R=q[M.stack],T=R&&M.stackWeight/R.weight;if(M.horizontal)M.width=T?T*Y:F&&J.availableWidth,M.height=U;else M.width=Y,M.height=T?T*U:F&&J.availableHeight}return q}function VI(Q){let J=zI(Q),q=rZ(J.filter((R)=>R.box.fullSize),!0),Y=rZ(lZ(J,"left"),!0),U=rZ(lZ(J,"right")),K=rZ(lZ(J,"top"),!0),H=rZ(lZ(J,"bottom")),M=JT(J,"x"),F=JT(J,"y");return{fullSize:q,leftAndTop:Y.concat(K),rightAndBottom:U.concat(F).concat(H).concat(M),chartArea:lZ(J,"chartArea"),vertical:Y.concat(U).concat(F),horizontal:K.concat(H).concat(M)}}function qT(Q,J,q,Y){return Math.max(Q[q],J[q])+Math.max(Q[Y],J[Y])}function oT(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 EI(Q,J,q,Y){let{pos:U,box:K}=q,H=Q.maxPadding;if(!n0(U)){if(q.size)Q[U]-=q.size;let z=Y[q.stack]||{size:0,count:1};z.size=Math.max(z.size,q.horizontal?K.height:K.width),q.size=z.size/z.count,Q[U]+=q.size}if(K.getPadding)oT(H,K.getPadding());let M=Math.max(0,J.outerWidth-qT(H,Q,"left","right")),F=Math.max(0,J.outerHeight-qT(H,Q,"top","bottom")),R=M!==Q.w,T=F!==Q.h;return Q.w=M,Q.h=F,q.horizontal?{same:R,other:T}:{same:T,other:R}}function PI(Q){let J=Q.maxPadding;function q(Y){let U=Math.max(J[Y]-Q[Y],0);return Q[Y]+=U,U}Q.y+=q("top"),Q.x+=q("left"),q("right"),q("bottom")}function CI(Q,J){let q=J.maxPadding;function Y(U){let K={left:0,top:0,right:0,bottom:0};return U.forEach((H)=>{K[H]=Math.max(J[H],q[H])}),K}return Q?Y(["left","right"]):Y(["top","bottom"])}function oZ(Q,J,q,Y){let U=[],K,H,M,F,R,T;for(K=0,H=Q.length,R=0;K<H;++K){M=Q[K],F=M.box,F.update(M.width||J.w,M.height||J.h,CI(M.horizontal,J));let{same:z,other:L}=EI(J,q,M,Y);if(R|=z&&U.length,T=T||L,!F.fullSize)U.push(M)}return R&&oZ(U,J,q,Y)||T}function Yq(Q,J,q,Y,U){Q.top=q,Q.left=J,Q.right=J+Y,Q.bottom=q+U,Q.width=Y,Q.height=U}function XT(Q,J,q,Y){let U=q.padding,{x:K,y:H}=J;for(let M of Q){let F=M.box,R=Y[M.stack]||{count:1,placed:0,weight:1},T=M.stackWeight/R.weight||1;if(M.horizontal){let z=J.w*T,L=R.size||F.height;if(x9(R.start))H=R.start;if(F.fullSize)Yq(F,U.left,H,q.outerWidth-U.right-U.left,L);else Yq(F,J.left+R.placed,H,z,L);R.start=H,R.placed+=z,H=F.bottom}else{let z=J.h*T,L=R.size||F.width;if(x9(R.start))K=R.start;if(F.fullSize)Yq(F,K,U.top,L,q.outerHeight-U.bottom-U.top);else Yq(F,K,J.top+R.placed,L,z);R.start=K,R.placed+=z,K=F.right}}J.x=K,J.y=H}var V4={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(q){J.draw(q)}}]},Q.boxes.push(J)},removeBox(Q,J){let q=Q.boxes?Q.boxes.indexOf(J):-1;if(q!==-1)Q.boxes.splice(q,1)},configure(Q,J,q){J.fullSize=q.fullSize,J.position=q.position,J.weight=q.weight},update(Q,J,q,Y){if(!Q)return;let U=X5(Q.options.layout.padding),K=Math.max(J-U.width,0),H=Math.max(q-U.height,0),M=VI(Q.boxes),F=M.vertical,R=M.horizontal;X1(Q.boxes,(A)=>{if(typeof A.beforeLayout==="function")A.beforeLayout()});let T=F.reduce((A,C)=>C.box.options&&C.box.options.display===!1?A:A+1,0)||1,z=Object.freeze({outerWidth:J,outerHeight:q,padding:U,availableWidth:K,availableHeight:H,vBoxMaxWidth:K/2/T,hBoxMaxHeight:H/2}),L=Object.assign({},U);oT(L,X5(Y));let P=Object.assign({maxPadding:L,w:K,h:H,x:U.left,y:U.top},U),I=LI(F.concat(R),z);if(oZ(M.fullSize,P,z,I),oZ(F,P,z,I),oZ(R,P,z,I))oZ(F,P,z,I);PI(P),XT(M.leftAndTop,P,z,I),P.x+=P.w,P.y+=P.h,XT(M.rightAndBottom,P,z,I),Q.chartArea={left:P.left,top:P.top,right:P.left+P.w,bottom:P.top+P.h,height:P.h,width:P.w},X1(M.chartArea,(A)=>{let C=A.box;Object.assign(C,Q.chartArea),C.update(P.w,P.h,{left:0,top:0,right:0,bottom:0})})}};class hN{acquireContext(Q,J){}releaseContext(Q){return!1}addEventListener(Q,J,q){}removeEventListener(Q,J,q){}getDevicePixelRatio(){return 1}getMaximumSize(Q,J,q,Y){return J=Math.max(0,J||Q.width),q=q||Q.height,{width:J,height:Math.max(0,Y?Math.floor(J/Y):q)}}isAttached(Q){return!0}updateConfig(Q){}}class iT extends hN{acquireContext(Q){return Q&&Q.getContext&&Q.getContext("2d")||null}updateConfig(Q){Q.options.animation=!1}}var Hq="$chartjs",II={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},YT=(Q)=>Q===null||Q==="";function jI(Q,J){let q=Q.style,Y=Q.getAttribute("height"),U=Q.getAttribute("width");if(Q[Hq]={initial:{height:Y,width:U,style:{display:q.display,height:q.height,width:q.width}}},q.display=q.display||"block",q.boxSizing=q.boxSizing||"border-box",YT(U)){let K=NN(Q,"width");if(K!==void 0)Q.width=K}if(YT(Y))if(Q.style.height==="")Q.height=Q.width/(J||2);else{let K=NN(Q,"height");if(K!==void 0)Q.height=K}return Q}var aT=pR?{passive:!0}:!1;function OI(Q,J,q){if(Q)Q.addEventListener(J,q,aT)}function DI(Q,J,q){if(Q&&Q.canvas)Q.canvas.removeEventListener(J,q,aT)}function AI(Q,J){let q=II[Q.type]||Q.type,{x:Y,y:U}=B2(Q,J);return{type:q,chart:J,native:Q,x:Y!==void 0?Y:null,y:U!==void 0?U:null}}function Fq(Q,J){for(let q of Q)if(q===J||q.contains(J))return!0}function SI(Q,J,q){let Y=Q.canvas,U=new MutationObserver((K)=>{let H=!1;for(let M of K)H=H||Fq(M.addedNodes,Y),H=H&&!Fq(M.removedNodes,Y);if(H)q()});return U.observe(document,{childList:!0,subtree:!0}),U}function vI(Q,J,q){let Y=Q.canvas,U=new MutationObserver((K)=>{let H=!1;for(let M of K)H=H||Fq(M.removedNodes,Y),H=H&&!Fq(M.addedNodes,Y);if(H)q()});return U.observe(document,{childList:!0,subtree:!0}),U}var tZ=new Map,UT=0;function tT(){let Q=window.devicePixelRatio;if(Q===UT)return;UT=Q,tZ.forEach((J,q)=>{if(q.currentDevicePixelRatio!==Q)J()})}function kI(Q,J){if(!tZ.size)window.addEventListener("resize",tT);tZ.set(Q,J)}function bI(Q){if(tZ.delete(Q),!tZ.size)window.removeEventListener("resize",tT)}function fI(Q,J,q){let Y=Q.canvas,U=Y&&qq(Y);if(!U)return;let K=tU((M,F)=>{let R=U.clientWidth;if(q(M,F),R<U.clientWidth)q()},window),H=new ResizeObserver((M)=>{let F=M[0],R=F.contentRect.width,T=F.contentRect.height;if(R===0&&T===0)return;K(R,T)});return H.observe(U),kI(Q,K),H}function LN(Q,J,q){if(q)q.disconnect();if(J==="resize")bI(Q)}function yI(Q,J,q){let Y=Q.canvas,U=tU((K)=>{if(Q.ctx!==null)q(AI(K,Q))},Q);return OI(Y,J,U),U}class eT extends hN{acquireContext(Q,J){let q=Q&&Q.getContext&&Q.getContext("2d");if(q&&q.canvas===Q)return jI(Q,J),q;return null}releaseContext(Q){let J=Q.canvas;if(!J[Hq])return!1;let q=J[Hq].initial;["height","width"].forEach((U)=>{let K=q[U];if(t0(K))J.removeAttribute(U);else J.setAttribute(U,K)});let Y=q.style||{};return Object.keys(Y).forEach((U)=>{J.style[U]=Y[U]}),J.width=J.width,delete J[Hq],!0}addEventListener(Q,J,q){this.removeEventListener(Q,J);let Y=Q.$proxies||(Q.$proxies={}),K={attach:SI,detach:vI,resize:fI}[J]||yI;Y[J]=K(Q,J,q)}removeEventListener(Q,J){let q=Q.$proxies||(Q.$proxies={}),Y=q[J];if(!Y)return;({attach:LN,detach:LN,resize:LN}[J]||DI)(Q,J,Y),q[J]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(Q,J,q,Y){return dR(Q,J,q,Y)}isAttached(Q){let J=Q&&qq(Q);return!!(J&&J.isConnected)}}function gI(Q){if(!Jq()||typeof OffscreenCanvas<"u"&&Q instanceof OffscreenCanvas)return iT;return eT}class q6{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(Q){let{x:J,y:q}=this.getProps(["x","y"],Q);return{x:J,y:q}}hasValue(){return m9(this.x)&&m9(this.y)}getProps(Q,J){let q=this.$animations;if(!J||!q)return this;let Y={};return Q.forEach((U)=>{Y[U]=q[U]&&q[U].active()?q[U]._to:this[U]}),Y}}function hI(Q,J){let q=Q.options.ticks,Y=xI(Q),U=Math.min(q.maxTicksLimit||Y,Y),K=q.major.enabled?mI(J):[],H=K.length,M=K[0],F=K[H-1],R=[];if(H>U)return dI(J,R,K,H/U),R;let T=uI(K,J,U);if(H>0){let z,L,P=H>1?Math.round((F-M)/(H-1)):null;Uq(J,R,T,t0(P)?0:M-P,M);for(z=0,L=H-1;z<L;z++)Uq(J,R,T,K[z],K[z+1]);return Uq(J,R,T,F,t0(P)?J.length:F+P),R}return Uq(J,R,T),R}function xI(Q){let J=Q.options.offset,q=Q._tickSize(),Y=Q._length/q+(J?0:1),U=Q._maxLength/q;return Math.floor(Math.min(Y,U))}function uI(Q,J,q){let Y=pI(Q),U=J.length/q;if(!Y)return Math.max(U,1);let K=zR(Y);for(let H=0,M=K.length-1;H<M;H++){let F=K[H];if(F>U)return F}return Math.max(U,1)}function mI(Q){let J=[],q,Y;for(q=0,Y=Q.length;q<Y;q++)if(Q[q].major)J.push(q);return J}function dI(Q,J,q,Y){let U=0,K=q[0],H;Y=Math.ceil(Y);for(H=0;H<Q.length;H++)if(H===K)J.push(Q[H]),U++,K=q[U*Y]}function Uq(Q,J,q,Y,U){let K=h0(Y,0),H=Math.min(h0(U,Q.length),Q.length),M=0,F,R,T;if(q=Math.ceil(q),U)F=U-Y,q=F/Math.floor(F/q);T=K;while(T<0)M++,T=Math.round(K+M*q);for(R=Math.max(K,0);R<H;R++)if(R===T)J.push(Q[R]),M++,T=Math.round(K+M*q)}function pI(Q){let J=Q.length,q,Y;if(J<2)return!1;for(Y=Q[0],q=1;q<J;++q)if(Q[q]-Q[q-1]!==Y)return!1;return Y}var cI=(Q)=>Q==="left"?"right":Q==="right"?"left":Q,NT=(Q,J,q)=>J==="top"||J==="left"?Q[J]+q:Q[J]-q,KT=(Q,J)=>Math.min(J||Q,Q);function BT(Q,J){let q=[],Y=Q.length/J,U=Q.length,K=0;for(;K<U;K+=Y)q.push(Q[Math.floor(K)]);return q}function lI(Q,J,q){let Y=Q.ticks.length,U=Math.min(J,Y-1),K=Q._startPixel,H=Q._endPixel,M=0.000001,F=Q.getPixelForTick(U),R;if(q){if(Y===1)R=Math.max(F-K,H-F);else if(J===0)R=(Q.getPixelForTick(1)-F)/2;else R=(F-Q.getPixelForTick(U-1))/2;if(F+=U<J?R:-R,F<K-0.000001||F>H+0.000001)return}return F}function rI(Q,J){X1(Q,(q)=>{let Y=q.gc,U=Y.length/2,K;if(U>J){for(K=0;K<U;++K)delete q.data[Y[K]];Y.splice(0,U)}})}function sZ(Q){return Q.drawTicks?Q.tickLength:0}function HT(Q,J){if(!Q.display)return 0;let q=p1(Q.font,J),Y=X5(Q.padding);return(z1(Q.text)?Q.text.length:1)*q.lineHeight+Y.height}function sI(Q,J){return Q6(Q,{scale:J,type:"scale"})}function nI(Q,J,q){return Q6(Q,{tick:q,index:J,type:"tick"})}function oI(Q,J,q){let Y=eJ(Q);if(q&&J!=="right"||!q&&J==="right")Y=cI(Y);return Y}function iI(Q,J,q,Y){let{top:U,left:K,bottom:H,right:M,chart:F}=Q,{chartArea:R,scales:T}=F,z=0,L,P,I,A=H-U,C=M-K;if(Q.isHorizontal()){if(P=q5(Y,K,M),n0(q)){let g=Object.keys(q)[0],m=q[g];I=T[g].getPixelForValue(m)+A-J}else if(q==="center")I=(R.bottom+R.top)/2+A-J;else I=NT(Q,q,J);L=M-K}else{if(n0(q)){let g=Object.keys(q)[0],m=q[g];P=T[g].getPixelForValue(m)-C+J}else if(q==="center")P=(R.left+R.right)/2-C+J;else P=NT(Q,q,J);I=q5(Y,H,U),z=q==="left"?-b5:b5}return{titleX:P,titleY:I,maxWidth:L,rotation:z}}class T$ extends q6{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:q,_suggestedMax:Y}=this;return Q=g5(Q,Number.POSITIVE_INFINITY),J=g5(J,Number.NEGATIVE_INFINITY),q=g5(q,Number.POSITIVE_INFINITY),Y=g5(Y,Number.NEGATIVE_INFINITY),{min:g5(Q,q),max:g5(J,Y),minDefined:j1(Q),maxDefined:j1(J)}}getMinMax(Q){let{min:J,max:q,minDefined:Y,maxDefined:U}=this.getUserBounds(),K;if(Y&&U)return{min:J,max:q};let H=this.getMatchingVisibleMetas();for(let M=0,F=H.length;M<F;++M){if(K=H[M].controller.getMinMax(this,Q),!Y)J=Math.min(J,K.min);if(!U)q=Math.max(q,K.max)}return J=U&&J>q?q:J,q=Y&&J>q?J:q,{min:g5(J,g5(q,J)),max:g5(q,g5(J,q))}}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(){W1(this.options.beforeUpdate,[this])}update(Q,J,q){let{beginAtZero:Y,grace:U,ticks:K}=this.options,H=K.sampleSize;if(this.beforeUpdate(),this.maxWidth=Q,this.maxHeight=J,this._margins=q=Object.assign({left:0,right:0,top:0,bottom:0},q),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+q.left+q.right:this.height+q.top+q.bottom,!this._dataLimitsCached)this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=yR(this,U,Y),this._dataLimitsCached=!0;this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let M=H<this.ticks.length;if(this._convertTicksToLabels(M?BT(this.ticks,H):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),K.display&&(K.autoSkip||K.source==="auto"))this.ticks=hI(this,this.ticks),this._labelSizes=null,this.afterAutoSkip();if(M)this._convertTicksToLabels(this.ticks);this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let Q=this.options.reverse,J,q;if(this.isHorizontal())J=this.left,q=this.right;else J=this.top,q=this.bottom,Q=!Q;this._startPixel=J,this._endPixel=q,this._reversePixels=Q,this._length=q-J,this._alignToPixels=this.options.alignToPixels}afterUpdate(){W1(this.options.afterUpdate,[this])}beforeSetDimensions(){W1(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(){W1(this.options.afterSetDimensions,[this])}_callHooks(Q){this.chart.notifyPlugins(Q,this.getContext()),W1(this.options[Q],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){W1(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(Q){let J=this.options.ticks,q,Y,U;for(q=0,Y=Q.length;q<Y;q++)U=Q[q],U.label=W1(J.callback,[U.value,q,Q],this)}afterTickToLabelConversion(){W1(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){W1(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){let Q=this.options,J=Q.ticks,q=KT(this.ticks.length,Q.ticks.maxTicksLimit),Y=J.minRotation||0,U=J.maxRotation,K=Y,H,M,F;if(!this._isVisible()||!J.display||Y>=U||q<=1||!this.isHorizontal()){this.labelRotation=Y;return}let R=this._getLabelSizes(),T=R.widest.width,z=R.highest.height,L=y5(this.chart.width-T,0,this.maxWidth);if(H=Q.offset?this.maxWidth/q:L/(q-1),T+6>H)H=L/(q-(Q.offset?0.5:1)),M=this.maxHeight-sZ(Q.grid)-J.padding-HT(Q.title,this.chart.options.font),F=Math.sqrt(T*T+z*z),K=aJ(Math.min(Math.asin(y5((R.highest.height+6)/H,-1,1)),Math.asin(y5(M/F,-1,1))-Math.asin(y5(z/F,-1,1)))),K=Math.max(Y,Math.min(U,K));this.labelRotation=K}afterCalculateLabelRotation(){W1(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){W1(this.options.beforeFit,[this])}fit(){let Q={width:0,height:0},{chart:J,options:{ticks:q,title:Y,grid:U}}=this,K=this._isVisible(),H=this.isHorizontal();if(K){let M=HT(Y,J.options.font);if(H)Q.width=this.maxWidth,Q.height=sZ(U)+M;else Q.height=this.maxHeight,Q.width=sZ(U)+M;if(q.display&&this.ticks.length){let{first:F,last:R,widest:T,highest:z}=this._getLabelSizes(),L=q.padding*2,P=$6(this.labelRotation),I=Math.cos(P),A=Math.sin(P);if(H){let C=q.mirror?0:A*T.width+I*z.height;Q.height=Math.min(this.maxHeight,Q.height+C+L)}else{let C=q.mirror?0:I*T.width+A*z.height;Q.width=Math.min(this.maxWidth,Q.width+C+L)}this._calculatePadding(F,R,A,I)}}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,q,Y){let{ticks:{align:U,padding:K},position:H}=this.options,M=this.labelRotation!==0,F=H!=="top"&&this.axis==="x";if(this.isHorizontal()){let R=this.getPixelForTick(0)-this.left,T=this.right-this.getPixelForTick(this.ticks.length-1),z=0,L=0;if(M)if(F)z=Y*Q.width,L=q*J.height;else z=q*Q.height,L=Y*J.width;else if(U==="start")L=J.width;else if(U==="end")z=Q.width;else if(U!=="inner")z=Q.width/2,L=J.width/2;this.paddingLeft=Math.max((z-R+K)*this.width/(this.width-R),0),this.paddingRight=Math.max((L-T+K)*this.width/(this.width-T),0)}else{let R=J.height/2,T=Q.height/2;if(U==="start")R=0,T=Q.height;else if(U==="end")R=J.height,T=0;this.paddingTop=R+K,this.paddingBottom=T+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(){W1(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,q;for(J=0,q=Q.length;J<q;J++)if(t0(Q[J].label))Q.splice(J,1),q--,J--;this.afterTickToLabelConversion()}_getLabelSizes(){let Q=this._labelSizes;if(!Q){let J=this.options.ticks.sampleSize,q=this.ticks;if(J<q.length)q=BT(q,J);this._labelSizes=Q=this._computeLabelSizes(q,q.length,this.options.ticks.maxTicksLimit)}return Q}_computeLabelSizes(Q,J,q){let{ctx:Y,_longestTextCache:U}=this,K=[],H=[],M=Math.floor(J/KT(J,q)),F=0,R=0,T,z,L,P,I,A,C,g,m,o,i;for(T=0;T<J;T+=M){if(P=Q[T].label,I=this._resolveTickFontOptions(T),Y.font=A=I.string,C=U[A]=U[A]||{data:{},gc:[]},g=I.lineHeight,m=o=0,!t0(P)&&!z1(P))m=hZ(Y,C.data,C.gc,m,P),o=g;else if(z1(P)){for(z=0,L=P.length;z<L;++z)if(i=P[z],!t0(i)&&!z1(i))m=hZ(Y,C.data,C.gc,m,i),o+=g}K.push(m),H.push(o),F=Math.max(m,F),R=Math.max(o,R)}rI(U,J);let s=K.indexOf(F),Q0=H.indexOf(R),p=(a)=>({width:K[a]||0,height:H[a]||0});return{first:p(0),last:p(J-1),widest:p(s),highest:p(Q0),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 VR(this._alignToPixels?U2(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 q=J[Q];return q.$context||(q.$context=nI(this.getContext(),Q,q))}return this.$context||(this.$context=sI(this.chart.getContext(),this))}_tickSize(){let Q=this.options.ticks,J=$6(this.labelRotation),q=Math.abs(Math.cos(J)),Y=Math.abs(Math.sin(J)),U=this._getLabelSizes(),K=Q.autoSkipPadding||0,H=U?U.widest.width+K:0,M=U?U.highest.height+K:0;return this.isHorizontal()?M*q>H*Y?H/q:M/Y:M*Y<H*q?M/q:H/Y}_isVisible(){let Q=this.options.display;if(Q!=="auto")return!!Q;return this.getMatchingVisibleMetas().length>0}_computeGridLineItems(Q){let J=this.axis,q=this.chart,Y=this.options,{grid:U,position:K,border:H}=Y,M=U.offset,F=this.isHorizontal(),T=this.ticks.length+(M?1:0),z=sZ(U),L=[],P=H.setContext(this.getContext()),I=P.display?P.width:0,A=I/2,C=function(l){return U2(q,l,I)},g,m,o,i,s,Q0,p,a,Y0,d,N0,w0;if(K==="top")g=C(this.bottom),Q0=this.bottom-z,a=g-A,d=C(Q.top)+A,w0=Q.bottom;else if(K==="bottom")g=C(this.top),d=Q.top,w0=C(Q.bottom)-A,Q0=g+A,a=this.top+z;else if(K==="left")g=C(this.right),s=this.right-z,p=g-A,Y0=C(Q.left)+A,N0=Q.right;else if(K==="right")g=C(this.left),Y0=Q.left,N0=C(Q.right)-A,s=g+A,p=this.left+z;else if(J==="x"){if(K==="center")g=C((Q.top+Q.bottom)/2+0.5);else if(n0(K)){let l=Object.keys(K)[0],J0=K[l];g=C(this.chart.scales[l].getPixelForValue(J0))}d=Q.top,w0=Q.bottom,Q0=g+A,a=Q0+z}else if(J==="y"){if(K==="center")g=C((Q.left+Q.right)/2);else if(n0(K)){let l=Object.keys(K)[0],J0=K[l];g=C(this.chart.scales[l].getPixelForValue(J0))}s=g-A,p=s-z,Y0=Q.left,N0=Q.right}let z0=h0(Y.ticks.maxTicksLimit,T),C0=Math.max(1,Math.ceil(T/z0));for(m=0;m<T;m+=C0){let l=this.getContext(m),J0=U.setContext(l),K0=H.setContext(l),d0=J0.lineWidth,k0=J0.color,S=K0.dash||[],n=K0.dashOffset,B0=J0.tickWidth,H0=J0.tickColor,b0=J0.tickBorderDash||[],D1=J0.tickBorderDashOffset;if(o=lI(this,m,M),o===void 0)continue;if(i=U2(q,o,d0),F)s=p=Y0=N0=i;else Q0=a=d=w0=i;L.push({tx1:s,ty1:Q0,tx2:p,ty2:a,x1:Y0,y1:d,x2:N0,y2:w0,width:d0,color:k0,borderDash:S,borderDashOffset:n,tickWidth:B0,tickColor:H0,tickBorderDash:b0,tickBorderDashOffset:D1})}return this._ticksLength=T,this._borderValue=g,L}_computeLabelItems(Q){let J=this.axis,q=this.options,{position:Y,ticks:U}=q,K=this.isHorizontal(),H=this.ticks,{align:M,crossAlign:F,padding:R,mirror:T}=U,z=sZ(q.grid),L=z+R,P=T?-R:L,I=-$6(this.labelRotation),A=[],C,g,m,o,i,s,Q0,p,a,Y0,d,N0,w0="middle";if(Y==="top")s=this.bottom-P,Q0=this._getXAxisLabelAlignment();else if(Y==="bottom")s=this.top+P,Q0=this._getXAxisLabelAlignment();else if(Y==="left"){let C0=this._getYAxisLabelAlignment(z);Q0=C0.textAlign,i=C0.x}else if(Y==="right"){let C0=this._getYAxisLabelAlignment(z);Q0=C0.textAlign,i=C0.x}else if(J==="x"){if(Y==="center")s=(Q.top+Q.bottom)/2+L;else if(n0(Y)){let C0=Object.keys(Y)[0],l=Y[C0];s=this.chart.scales[C0].getPixelForValue(l)+L}Q0=this._getXAxisLabelAlignment()}else if(J==="y"){if(Y==="center")i=(Q.left+Q.right)/2-L;else if(n0(Y)){let C0=Object.keys(Y)[0],l=Y[C0];i=this.chart.scales[C0].getPixelForValue(l)}Q0=this._getYAxisLabelAlignment(z).textAlign}if(J==="y"){if(M==="start")w0="top";else if(M==="end")w0="bottom"}let z0=this._getLabelSizes();for(C=0,g=H.length;C<g;++C){m=H[C],o=m.label;let C0=U.setContext(this.getContext(C));p=this.getPixelForTick(C)+U.labelOffset,a=this._resolveTickFontOptions(C),Y0=a.lineHeight,d=z1(o)?o.length:1;let l=d/2,J0=C0.color,K0=C0.textStrokeColor,d0=C0.textStrokeWidth,k0=Q0;if(K){if(i=p,Q0==="inner")if(C===g-1)k0=!this.options.reverse?"right":"left";else if(C===0)k0=!this.options.reverse?"left":"right";else k0="center";if(Y==="top")if(F==="near"||I!==0)N0=-d*Y0+Y0/2;else if(F==="center")N0=-z0.highest.height/2-l*Y0+Y0;else N0=-z0.highest.height+Y0/2;else if(F==="near"||I!==0)N0=Y0/2;else if(F==="center")N0=z0.highest.height/2-l*Y0;else N0=z0.highest.height-d*Y0;if(T)N0*=-1;if(I!==0&&!C0.showLabelBackdrop)i+=Y0/2*Math.sin(I)}else s=p,N0=(1-d)*Y0/2;let S;if(C0.showLabelBackdrop){let n=X5(C0.backdropPadding),B0=z0.heights[C],H0=z0.widths[C],b0=N0-n.top,D1=0-n.left;switch(w0){case"middle":b0-=B0/2;break;case"bottom":b0-=B0;break}switch(Q0){case"center":D1-=H0/2;break;case"right":D1-=H0;break;case"inner":if(C===g-1)D1-=H0;else if(C>0)D1-=H0/2;break}S={left:D1,top:b0,width:H0+n.width,height:B0+n.height,color:C0.backdropColor}}A.push({label:o,font:a,textOffset:N0,options:{rotation:I,color:J0,strokeColor:K0,strokeWidth:d0,textAlign:k0,textBaseline:w0,translation:[i,s],backdrop:S}})}return A}_getXAxisLabelAlignment(){let{position:Q,ticks:J}=this.options;if(-$6(this.labelRotation))return Q==="top"?"left":"right";let Y="center";if(J.align==="start")Y="left";else if(J.align==="end")Y="right";else if(J.align==="inner")Y="inner";return Y}_getYAxisLabelAlignment(Q){let{position:J,ticks:{crossAlign:q,mirror:Y,padding:U}}=this.options,K=this._getLabelSizes(),H=Q+U,M=K.widest.width,F,R;if(J==="left")if(Y)if(R=this.right+U,q==="near")F="left";else if(q==="center")F="center",R+=M/2;else F="right",R+=M;else if(R=this.right-H,q==="near")F="right";else if(q==="center")F="center",R-=M/2;else F="left",R=this.left;else if(J==="right")if(Y)if(R=this.left+U,q==="near")F="right";else if(q==="center")F="center",R-=M/2;else F="left",R-=M;else if(R=this.left+H,q==="near")F="left";else if(q==="center")F="center",R+=M/2;else F="right",R=this.right;else F="right";return{textAlign:F,x:R}}_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:q,top:Y,width:U,height:K}=this;if(J)Q.save(),Q.fillStyle=J,Q.fillRect(q,Y,U,K),Q.restore()}getLineWidthForValue(Q){let J=this.options.grid;if(!this._isVisible()||!J.display)return 0;let Y=this.ticks.findIndex((U)=>U.value===Q);if(Y>=0)return J.setContext(this.getContext(Y)).lineWidth;return 0}drawGrid(Q){let J=this.options.grid,q=this.ctx,Y=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(Q)),U,K,H=(M,F,R)=>{if(!R.width||!R.color)return;q.save(),q.lineWidth=R.width,q.strokeStyle=R.color,q.setLineDash(R.borderDash||[]),q.lineDashOffset=R.borderDashOffset,q.beginPath(),q.moveTo(M.x,M.y),q.lineTo(F.x,F.y),q.stroke(),q.restore()};if(J.display)for(U=0,K=Y.length;U<K;++U){let M=Y[U];if(J.drawOnChartArea)H({x:M.x1,y:M.y1},{x:M.x2,y:M.y2},M);if(J.drawTicks)H({x:M.tx1,y:M.ty1},{x:M.tx2,y:M.ty2},{color:M.tickColor,width:M.tickWidth,borderDash:M.tickBorderDash,borderDashOffset:M.tickBorderDashOffset})}}drawBorder(){let{chart:Q,ctx:J,options:{border:q,grid:Y}}=this,U=q.setContext(this.getContext()),K=q.display?U.width:0;if(!K)return;let H=Y.setContext(this.getContext(0)).lineWidth,M=this._borderValue,F,R,T,z;if(this.isHorizontal())F=U2(Q,this.left,K)-K/2,R=U2(Q,this.right,H)+H/2,T=z=M;else T=U2(Q,this.top,K)-K/2,z=U2(Q,this.bottom,H)+H/2,F=R=M;J.save(),J.lineWidth=U.width,J.strokeStyle=U.color,J.beginPath(),J.moveTo(F,T),J.lineTo(R,z),J.stroke(),J.restore()}drawLabels(Q){if(!this.options.ticks.display)return;let q=this.ctx,Y=this._computeLabelArea();if(Y)mZ(q,Y);let U=this.getLabelItems(Q);for(let K of U){let{options:H,font:M,label:F,textOffset:R}=K;N2(q,F,0,R,M,H)}if(Y)dZ(q)}drawTitle(){let{ctx:Q,options:{position:J,title:q,reverse:Y}}=this;if(!q.display)return;let U=p1(q.font),K=X5(q.padding),H=q.align,M=U.lineHeight/2;if(J==="bottom"||J==="center"||n0(J)){if(M+=K.bottom,z1(q.text))M+=U.lineHeight*(q.text.length-1)}else M+=K.top;let{titleX:F,titleY:R,maxWidth:T,rotation:z}=iI(this,M,J,H);N2(Q,q.text,0,0,U,{color:q.color,maxWidth:T,rotation:z,textAlign:oI(H,J,Y),textBaseline:"middle",translation:[F,R]})}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,q=h0(Q.grid&&Q.grid.z,-1),Y=h0(Q.border&&Q.border.z,0);if(!this._isVisible()||this.draw!==T$.prototype.draw)return[{z:J,draw:(U)=>{this.draw(U)}}];return[{z:q,draw:(U)=>{this.drawBackground(),this.drawGrid(U),this.drawTitle()}},{z:Y,draw:()=>{this.drawBorder()}},{z:J,draw:(U)=>{this.drawLabels(U)}}]}getMatchingVisibleMetas(Q){let J=this.chart.getSortedVisibleDatasetMetas(),q=this.axis+"AxisID",Y=[],U,K;for(U=0,K=J.length;U<K;++U){let H=J[U];if(H[q]===this.id&&(!Q||H.type===Q))Y.push(H)}return Y}_resolveTickFontOptions(Q){let J=this.options.ticks.setContext(this.getContext(Q));return p1(J.font)}_maxDigits(){let Q=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/Q}}class iZ{constructor(Q,J,q){this.type=Q,this.scope=J,this.override=q,this.items=Object.create(null)}isForType(Q){return Object.prototype.isPrototypeOf.call(this.type.prototype,Q.prototype)}register(Q){let J=Object.getPrototypeOf(Q),q;if(eI(J))q=this.register(J);let Y=this.items,U=Q.id,K=this.scope+"."+U;if(!U)throw Error("class does not have id: "+Q);if(U in Y)return K;if(Y[U]=Q,aI(Q,K,q),this.override)O1.override(Q.id,Q.overrides);return K}get(Q){return this.items[Q]}unregister(Q){let J=this.items,q=Q.id,Y=this.scope;if(q in J)delete J[q];if(Y&&q in O1[Y]){if(delete O1[Y][q],this.override)delete Y2[q]}}}function aI(Q,J,q){let Y=y9(Object.create(null),[q?O1.get(q):{},O1.get(J),Q.defaults]);if(O1.set(J,Y),Q.defaultRoutes)tI(J,Q.defaultRoutes);if(Q.descriptors)O1.describe(J,Q.descriptors)}function tI(Q,J){Object.keys(J).forEach((q)=>{let Y=q.split("."),U=Y.pop(),K=[Q].concat(Y).join("."),H=J[q].split("."),M=H.pop(),F=H.join(".");O1.route(K,U,F,M)})}function eI(Q){return"id"in Q&&"defaults"in Q}class $z{constructor(){this.controllers=new iZ(Wq,"datasets",!0),this.elements=new iZ(q6,"elements"),this.plugins=new iZ(Object,"plugins"),this.scales=new iZ(T$,"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,q){[...J].forEach((Y)=>{let U=q||this._getRegistryForType(Y);if(q||U.isForType(Y)||U===this.plugins&&Y.id)this._exec(Q,U,Y);else X1(Y,(K)=>{let H=q||this._getRegistryForType(K);this._exec(Q,H,K)})})}_exec(Q,J,q){let Y=iJ(Q);W1(q["before"+Y],[],q),J[Q](q),W1(q["after"+Y],[],q)}_getRegistryForType(Q){for(let J=0;J<this._typedRegistries.length;J++){let q=this._typedRegistries[J];if(q.isForType(Q))return q}return this.plugins}_get(Q,J,q){let Y=J.get(Q);if(Y===void 0)throw Error('"'+Q+'" is not a registered '+q+".");return Y}}var z8=new $z;class Zz{constructor(){this._init=void 0}notify(Q,J,q,Y){if(J==="beforeInit")this._init=this._createDescriptors(Q,!0),this._notify(this._init,Q,"install");if(this._init===void 0)return;let U=Y?this._descriptors(Q).filter(Y):this._descriptors(Q),K=this._notify(U,Q,J,q);if(J==="afterDestroy")this._notify(U,Q,"stop"),this._notify(this._init,Q,"uninstall"),this._init=void 0;return K}_notify(Q,J,q,Y){Y=Y||{};for(let U of Q){let K=U.plugin,H=K[q],M=[J,Y,U.options];if(W1(H,M,K)===!1&&Y.cancelable)return!1}return!0}invalidate(){if(!t0(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 q=Q&&Q.config,Y=h0(q.options&&q.options.plugins,{}),U=$j(q);return Y===!1&&!J?[]:Qj(Q,U,Y,J)}_notifyStateChanges(Q){let J=this._oldCache||[],q=this._cache,Y=(U,K)=>U.filter((H)=>!K.some((M)=>H.plugin.id===M.plugin.id));this._notify(Y(J,q),Q,"stop"),this._notify(Y(q,J),Q,"start")}}function $j(Q){let J={},q=[],Y=Object.keys(z8.plugins.items);for(let K=0;K<Y.length;K++)q.push(z8.getPlugin(Y[K]));let U=Q.plugins||[];for(let K=0;K<U.length;K++){let H=U[K];if(q.indexOf(H)===-1)q.push(H),J[H.id]=!0}return{plugins:q,localIds:J}}function Zj(Q,J){if(!J&&Q===!1)return null;if(Q===!0)return{};return Q}function Qj(Q,{plugins:J,localIds:q},Y,U){let K=[],H=Q.getContext();for(let M of J){let F=M.id,R=Zj(Y[F],U);if(R===null)continue;K.push({plugin:M,options:Gj(Q.config,{plugin:M,local:q[F]},R,H)})}return K}function Gj(Q,{plugin:J,local:q},Y,U){let K=Q.pluginScopeKeys(J),H=Q.getOptionScopes(Y,K);if(q&&J.defaults)H.push(J.defaults);return Q.createResolver(H,U,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function IN(Q,J){let q=O1.datasets[Q]||{};return((J.datasets||{})[Q]||{}).indexAxis||J.indexAxis||q.indexAxis||"x"}function Jj(Q,J){let q=Q;if(Q==="_index_")q=J;else if(Q==="_value_")q=J==="x"?"y":"x";return q}function qj(Q,J){return Q===J?"_index_":"_value_"}function MT(Q){if(Q==="x"||Q==="y"||Q==="r")return Q}function Xj(Q){if(Q==="top"||Q==="bottom")return"x";if(Q==="left"||Q==="right")return"y"}function jN(Q,...J){if(MT(Q))return Q;for(let q of J){let Y=q.axis||Xj(q.position)||Q.length>1&&MT(Q[0].toLowerCase());if(Y)return Y}throw Error(`Cannot determine type of '${Q}' axis. Please provide 'axis' or 'position' option.`)}function FT(Q,J,q){if(q[J+"AxisID"]===Q)return{axis:J}}function Yj(Q,J){if(J.data&&J.data.datasets){let q=J.data.datasets.filter((Y)=>Y.xAxisID===Q||Y.yAxisID===Q);if(q.length)return FT(Q,"x",q[0])||FT(Q,"y",q[0])}return{}}function Uj(Q,J){let q=Y2[Q.type]||{scales:{}},Y=J.scales||{},U=IN(Q.type,J),K=Object.create(null);return Object.keys(Y).forEach((H)=>{let M=Y[H];if(!n0(M))return console.error(`Invalid scale configuration for scale: ${H}`);if(M._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${H}`);let F=jN(H,M,Yj(H,Q),O1.scales[M.type]),R=qj(F,U),T=q.scales||{};K[H]=h9(Object.create(null),[{axis:F},M,T[F],T[R]])}),Q.data.datasets.forEach((H)=>{let M=H.type||Q.type,F=H.indexAxis||IN(M,J),T=(Y2[M]||{}).scales||{};Object.keys(T).forEach((z)=>{let L=Jj(z,F),P=H[L+"AxisID"]||L;K[P]=K[P]||Object.create(null),h9(K[P],[{axis:L},Y[P],T[z]])})}),Object.keys(K).forEach((H)=>{let M=K[H];h9(M,[O1.scales[M.type],O1.scale])}),K}function Qz(Q){let J=Q.options||(Q.options={});J.plugins=h0(J.plugins,{}),J.scales=Uj(Q,J)}function Gz(Q){return Q=Q||{},Q.datasets=Q.datasets||[],Q.labels=Q.labels||[],Q}function Nj(Q){return Q=Q||{},Q.data=Gz(Q.data),Qz(Q),Q}var WT=new Map,Jz=new Set;function Nq(Q,J){let q=WT.get(Q);if(!q)q=J(),WT.set(Q,q),Jz.add(q);return q}var nZ=(Q,J,q)=>{let Y=F$(J,q);if(Y!==void 0)Q.add(Y)};class qz{constructor(Q){this._config=Nj(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=Gz(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(),Qz(Q)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(Q){return Nq(Q,()=>[[`datasets.${Q}`,""]])}datasetAnimationScopeKeys(Q,J){return Nq(`${Q}.transition.${J}`,()=>[[`datasets.${Q}.transitions.${J}`,`transitions.${J}`],[`datasets.${Q}`,""]])}datasetElementScopeKeys(Q,J){return Nq(`${Q}-${J}`,()=>[[`datasets.${Q}.elements.${J}`,`datasets.${Q}`,`elements.${J}`,""]])}pluginScopeKeys(Q){let J=Q.id,q=this.type;return Nq(`${q}-plugin-${J}`,()=>[[`plugins.${J}`,...Q.additionalOptionScopes||[]]])}_cachedScopes(Q,J){let q=this._scopeCache,Y=q.get(Q);if(!Y||J)Y=new Map,q.set(Q,Y);return Y}getOptionScopes(Q,J,q){let{options:Y,type:U}=this,K=this._cachedScopes(Q,q),H=K.get(J);if(H)return H;let M=new Set;J.forEach((R)=>{if(Q)M.add(Q),R.forEach((T)=>nZ(M,Q,T));R.forEach((T)=>nZ(M,Y,T)),R.forEach((T)=>nZ(M,Y2[U]||{},T)),R.forEach((T)=>nZ(M,O1,T)),R.forEach((T)=>nZ(M,Zq,T))});let F=Array.from(M);if(F.length===0)F.push(Object.create(null));if(Jz.has(J))K.set(J,F);return F}chartOptionScopes(){let{options:Q,type:J}=this;return[Q,Y2[J]||{},O1.datasets[J]||{},{type:J},O1,Zq]}resolveNamedOptions(Q,J,q,Y=[""]){let U={$shared:!0},{resolver:K,subPrefixes:H}=wT(this._resolverCache,Q,Y),M=K;if(Bj(K,J)){U.$shared=!1,q=t8(q)?q():q;let F=this.createResolver(Q,q,H);M=M$(K,q,F)}for(let F of J)U[F]=M[F];return U}createResolver(Q,J,q=[""],Y){let{resolver:U}=wT(this._resolverCache,Q,q);return n0(J)?M$(U,J,void 0,Y):U}}function wT(Q,J,q){let Y=Q.get(J);if(!Y)Y=new Map,Q.set(J,Y);let U=q.join(),K=Y.get(U);if(!K)K={resolver:Gq(J,q),subPrefixes:q.filter((M)=>!M.toLowerCase().includes("hover"))},Y.set(U,K);return K}var Kj=(Q)=>n0(Q)&&Object.getOwnPropertyNames(Q).some((J)=>t8(Q[J]));function Bj(Q,J){let{isScriptable:q,isIndexable:Y}=qN(Q);for(let U of J){let K=q(U),H=Y(U),M=(H||K)&&Q[U];if(K&&(t8(M)||Kj(M))||H&&z1(M))return!0}return!1}var Hj="4.5.1",Mj=["top","bottom","left","right","chartArea"];function RT(Q,J){return Q==="top"||Q==="bottom"||Mj.indexOf(Q)===-1&&J==="x"}function TT(Q,J){return function(q,Y){return q[Q]===Y[Q]?q[J]-Y[J]:q[Q]-Y[Q]}}function zT(Q){let J=Q.chart,q=J.options.animation;J.notifyPlugins("afterRender"),W1(q&&q.onComplete,[Q],J)}function Fj(Q){let J=Q.chart,q=J.options.animation;W1(q&&q.onProgress,[Q],J)}function Xz(Q){if(Jq()&&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 Mq={},_T=(Q)=>{let J=Xz(Q);return Object.values(Mq).filter((q)=>q.canvas===J).pop()};function Wj(Q,J,q){let Y=Object.keys(Q);for(let U of Y){let K=+U;if(K>=J){let H=Q[U];if(delete Q[U],q>0||K>J)Q[K+q]=H}}}function wj(Q,J,q,Y){if(!q||Q.type==="mouseout")return null;if(Y)return J;return Q}class P5{static defaults=O1;static instances=Mq;static overrides=Y2;static registry=z8;static version=Hj;static getChart=_T;static register(...Q){z8.add(...Q),LT()}static unregister(...Q){z8.remove(...Q),LT()}constructor(Q,J){let q=this.config=new qz(J),Y=Xz(Q),U=_T(Y);if(U)throw Error("Canvas is already in use. Chart with ID '"+U.id+"' must be destroyed before the canvas with ID '"+U.canvas.id+"' can be reused.");let K=q.createResolver(q.chartOptionScopes(),this.getContext());this.platform=new(q.platform||gI(Y)),this.platform.updateConfig(q);let H=this.platform.acquireContext(Y,K.aspectRatio),M=H&&H.canvas,F=M&&M.height,R=M&&M.width;if(this.id=WR(),this.ctx=H,this.canvas=M,this.width=R,this.height=F,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 Zz,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=jR((T)=>this.update(T),K.resizeDelay||0),this._dataChanges=[],Mq[this.id]=this,!H||!M){console.error("Failed to create chart: can't acquire context from the given item");return}if(G6.listen(this,"complete",zT),G6.listen(this,"progress",Fj),this._initialize(),this.attached)this.update()}get aspectRatio(){let{options:{aspectRatio:Q,maintainAspectRatio:J},width:q,height:Y,_aspectRatio:U}=this;if(!t0(Q))return Q;if(J&&U)return U;return Y?q/Y: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 z8}_initialize(){if(this.notifyPlugins("beforeInit"),this.options.responsive)this.resize();else UN(this,this.options.devicePixelRatio);return this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return ZN(this.canvas,this.ctx),this}stop(){return G6.stop(this),this}resize(Q,J){if(!G6.running(this))this._resize(Q,J);else this._resizeBeforeDraw={width:Q,height:J}}_resize(Q,J){let q=this.options,Y=this.canvas,U=q.maintainAspectRatio&&this.aspectRatio,K=this.platform.getMaximumSize(Y,Q,J,U),H=q.devicePixelRatio||this.platform.getDevicePixelRatio(),M=this.width?"resize":"attach";if(this.width=K.width,this.height=K.height,this._aspectRatio=this.aspectRatio,!UN(this,H,!0))return;if(this.notifyPlugins("resize",{size:K}),W1(q.onResize,[this,K],this),this.attached){if(this._doResize(M))this.render()}}ensureScalesHaveIDs(){let J=this.options.scales||{};X1(J,(q,Y)=>{q.id=Y})}buildOrUpdateScales(){let Q=this.options,J=Q.scales,q=this.scales,Y=Object.keys(q).reduce((K,H)=>{return K[H]=!1,K},{}),U=[];if(J)U=U.concat(Object.keys(J).map((K)=>{let H=J[K],M=jN(K,H),F=M==="r",R=M==="x";return{options:H,dposition:F?"chartArea":R?"bottom":"left",dtype:F?"radialLinear":R?"category":"linear"}}));X1(U,(K)=>{let H=K.options,M=H.id,F=jN(M,H),R=h0(H.type,K.dtype);if(H.position===void 0||RT(H.position,F)!==RT(K.dposition))H.position=K.dposition;Y[M]=!0;let T=null;if(M in q&&q[M].type===R)T=q[M];else T=new(z8.getScale(R))({id:M,type:R,ctx:this.ctx,chart:this}),q[T.id]=T;T.init(H,Q)}),X1(Y,(K,H)=>{if(!K)delete q[H]}),X1(q,(K)=>{V4.configure(this,K,K.options),V4.addBox(this,K)})}_updateMetasets(){let Q=this._metasets,J=this.data.datasets.length,q=Q.length;if(Q.sort((Y,U)=>Y.index-U.index),q>J){for(let Y=J;Y<q;++Y)this._destroyDatasetMeta(Y);Q.splice(J,q-J)}this._sortedMetasets=Q.slice(0).sort(TT("order","index"))}_removeUnreferencedMetasets(){let{_metasets:Q,data:{datasets:J}}=this;if(Q.length>J.length)delete this._stacks;Q.forEach((q,Y)=>{if(J.filter((U)=>U===q._dataset).length===0)this._destroyDatasetMeta(Y)})}buildOrUpdateControllers(){let Q=[],J=this.data.datasets,q,Y;this._removeUnreferencedMetasets();for(q=0,Y=J.length;q<Y;q++){let U=J[q],K=this.getDatasetMeta(q),H=U.type||this.config.type;if(K.type&&K.type!==H)this._destroyDatasetMeta(q),K=this.getDatasetMeta(q);if(K.type=H,K.indexAxis=U.indexAxis||IN(H,this.options),K.order=U.order||0,K.index=q,K.label=""+U.label,K.visible=this.isDatasetVisible(q),K.controller)K.controller.updateIndex(q),K.controller.linkScales();else{let M=z8.getController(H),{datasetElementType:F,dataElementType:R}=O1.datasets[H];Object.assign(M,{dataElementType:z8.getElement(R),datasetElementType:F&&z8.getElement(F)}),K.controller=new M(this,q),Q.push(K.controller)}}return this._updateMetasets(),Q}_resetElements(){X1(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 q=this._options=J.createResolver(J.chartOptionScopes(),this.getContext()),Y=this._animationsDisabled=!q.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:Q,cancelable:!0})===!1)return;let U=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let K=0;for(let F=0,R=this.data.datasets.length;F<R;F++){let{controller:T}=this.getDatasetMeta(F),z=!Y&&U.indexOf(T)===-1;T.buildOrUpdateElements(z),K=Math.max(+T.getMaxOverflow(),K)}if(K=this._minPadding=q.layout.autoPadding?K:0,this._updateLayout(K),!Y)X1(U,(F)=>{F.reset()});this._updateDatasets(Q),this.notifyPlugins("afterUpdate",{mode:Q}),this._layers.sort(TT("z","_idx"));let{_active:H,_lastEvent:M}=this;if(M)this._eventHandler(M,!0);else if(H.length)this._updateHoverStyles(H,H,!0);this.render()}_updateScales(){X1(this.scales,(Q)=>{V4.removeBox(this,Q)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let Q=this.options,J=new Set(Object.keys(this._listeners)),q=new Set(Q.events);if(!cU(J,q)||!!this._responsiveListeners!==Q.responsive)this.unbindEvents(),this.bindEvents()}_updateHiddenIndices(){let{_hiddenIndices:Q}=this,J=this._getUniformDataChanges()||[];for(let{method:q,start:Y,count:U}of J){let K=q==="_removeElements"?-U:U;Wj(Q,Y,K)}}_getUniformDataChanges(){let Q=this._dataChanges;if(!Q||!Q.length)return;this._dataChanges=[];let J=this.data.datasets.length,q=(U)=>new Set(Q.filter((K)=>K[0]===U).map((K,H)=>H+","+K.splice(1).join(","))),Y=q(0);for(let U=1;U<J;U++)if(!cU(Y,q(U)))return;return Array.from(Y).map((U)=>U.split(",")).map((U)=>({method:U[1],start:+U[2],count:+U[3]}))}_updateLayout(Q){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;V4.update(this,this.width,this.height,Q);let J=this.chartArea,q=J.width<=0||J.height<=0;this._layers=[],X1(this.boxes,(Y)=>{if(q&&Y.position==="chartArea")return;if(Y.configure)Y.configure();this._layers.push(...Y._layers())},this),this._layers.forEach((Y,U)=>{Y._idx=U}),this.notifyPlugins("afterLayout")}_updateDatasets(Q){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:Q,cancelable:!0})===!1)return;for(let J=0,q=this.data.datasets.length;J<q;++J)this.getDatasetMeta(J).controller.configure();for(let J=0,q=this.data.datasets.length;J<q;++J)this._updateDataset(J,t8(Q)?Q({datasetIndex:J}):Q);this.notifyPlugins("afterDatasetsUpdate",{mode:Q})}_updateDataset(Q,J){let q=this.getDatasetMeta(Q),Y={meta:q,index:Q,mode:J,cancelable:!0};if(this.notifyPlugins("beforeDatasetUpdate",Y)===!1)return;q.controller._update(J),Y.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",Y)}render(){if(this.notifyPlugins("beforeRender",{cancelable:!0})===!1)return;if(G6.has(this)){if(this.attached&&!G6.running(this))G6.start(this)}else this.draw(),zT({chart:this})}draw(){let Q;if(this._resizeBeforeDraw){let{width:q,height:Y}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(q,Y)}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,q=[],Y,U;for(Y=0,U=J.length;Y<U;++Y){let K=J[Y];if(!Q||K.visible)q.push(K)}return q}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,q={meta:Q,index:Q.index,cancelable:!0},Y=FN(this,Q);if(this.notifyPlugins("beforeDatasetDraw",q)===!1)return;if(Y)mZ(J,Y);if(Q.controller.draw(),Y)dZ(J);q.cancelable=!1,this.notifyPlugins("afterDatasetDraw",q)}isPointInArea(Q){return w8(Q,this.chartArea,this._minPadding)}getElementsAtEventForMode(Q,J,q,Y){let U=TI.modes[J];if(typeof U==="function")return U(this,Q,q,Y);return[]}getDatasetMeta(Q){let J=this.data.datasets[Q],q=this._metasets,Y=q.filter((U)=>U&&U._dataset===J).pop();if(!Y)Y={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},q.push(Y);return Y}getContext(){return this.$context||(this.$context=Q6(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(Q){let J=this.data.datasets[Q];if(!J)return!1;let q=this.getDatasetMeta(Q);return typeof q.hidden==="boolean"?!q.hidden:!J.hidden}setDatasetVisibility(Q,J){let q=this.getDatasetMeta(Q);q.hidden=!J}toggleDataVisibility(Q){this._hiddenIndices[Q]=!this._hiddenIndices[Q]}getDataVisibility(Q){return!this._hiddenIndices[Q]}_updateVisibility(Q,J,q){let Y=q?"show":"hide",U=this.getDatasetMeta(Q),K=U.controller._resolveAnimations(void 0,Y);if(x9(J))U.data[J].hidden=!q,this.update();else this.setDatasetVisibility(Q,q),K.update(U,{visible:q}),this.update((H)=>H.datasetIndex===Q?Y: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(),G6.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(),ZN(Q,J),this.platform.releaseContext(J),this.canvas=null,this.ctx=null;delete Mq[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,q=(U,K)=>{J.addEventListener(this,U,K),Q[U]=K},Y=(U,K,H)=>{U.offsetX=K,U.offsetY=H,this._eventHandler(U)};X1(this.options.events,(U)=>q(U,Y))}bindResponsiveEvents(){if(!this._responsiveListeners)this._responsiveListeners={};let Q=this._responsiveListeners,J=this.platform,q=(M,F)=>{J.addEventListener(this,M,F),Q[M]=F},Y=(M,F)=>{if(Q[M])J.removeEventListener(this,M,F),delete Q[M]},U=(M,F)=>{if(this.canvas)this.resize(M,F)},K,H=()=>{Y("attach",H),this.attached=!0,this.resize(),q("resize",U),q("detach",K)};if(K=()=>{this.attached=!1,Y("resize",U),this._stop(),this._resize(0,0),q("attach",H)},J.isAttached(this.canvas))H();else K()}unbindEvents(){X1(this._listeners,(Q,J)=>{this.platform.removeEventListener(this,J,Q)}),this._listeners={},X1(this._responsiveListeners,(Q,J)=>{this.platform.removeEventListener(this,J,Q)}),this._responsiveListeners=void 0}updateHoverStyle(Q,J,q){let Y=q?"set":"remove",U,K,H,M;if(J==="dataset")U=this.getDatasetMeta(Q[0].datasetIndex),U.controller["_"+Y+"DatasetHoverStyle"]();for(H=0,M=Q.length;H<M;++H){K=Q[H];let F=K&&this.getDatasetMeta(K.datasetIndex).controller;if(F)F[Y+"HoverStyle"](K.element,K.datasetIndex,K.index)}}getActiveElements(){return this._active||[]}setActiveElements(Q){let J=this._active||[],q=Q.map(({datasetIndex:U,index:K})=>{let H=this.getDatasetMeta(U);if(!H)throw Error("No dataset found at index "+U);return{datasetIndex:U,element:H.data[K],index:K}});if(!xZ(q,J))this._active=q,this._lastEvent=null,this._updateHoverStyles(q,J)}notifyPlugins(Q,J,q){return this._plugins.notify(this,Q,J,q)}isPluginEnabled(Q){return this._plugins._cache.filter((J)=>J.plugin.id===Q).length===1}_updateHoverStyles(Q,J,q){let Y=this.options.hover,U=(M,F)=>M.filter((R)=>!F.some((T)=>R.datasetIndex===T.datasetIndex&&R.index===T.index)),K=U(J,Q),H=q?Q:U(Q,J);if(K.length)this.updateHoverStyle(K,Y.mode,!1);if(H.length&&Y.mode)this.updateHoverStyle(H,Y.mode,!0)}_eventHandler(Q,J){let q={event:Q,replay:J,cancelable:!0,inChartArea:this.isPointInArea(Q)},Y=(K)=>(K.options.events||this.options.events).includes(Q.native.type);if(this.notifyPlugins("beforeEvent",q,Y)===!1)return;let U=this._handleEvent(Q,J,q.inChartArea);if(q.cancelable=!1,this.notifyPlugins("afterEvent",q,Y),U||q.changed)this.render();return this}_handleEvent(Q,J,q){let{_active:Y=[],options:U}=this,K=J,H=this._getActiveElements(Q,Y,q,K),M=TR(Q),F=wj(Q,this._lastEvent,q,M);if(q){if(this._lastEvent=null,W1(U.onHover,[Q,H,this],this),M)W1(U.onClick,[Q,H,this],this)}let R=!xZ(H,Y);if(R||J)this._active=H,this._updateHoverStyles(H,Y,J);return this._lastEvent=F,R}_getActiveElements(Q,J,q,Y){if(Q.type==="mouseout")return[];if(!q)return J;let U=this.options.hover;return this.getElementsAtEventForMode(Q,U.mode,U,Y)}}function LT(){return X1(P5.instances,(Q)=>Q._plugins.invalidate())}function Yz(Q,J,q=J){Q.lineCap=h0(q.borderCapStyle,J.borderCapStyle),Q.setLineDash(h0(q.borderDash,J.borderDash)),Q.lineDashOffset=h0(q.borderDashOffset,J.borderDashOffset),Q.lineJoin=h0(q.borderJoinStyle,J.borderJoinStyle),Q.lineWidth=h0(q.borderWidth,J.borderWidth),Q.strokeStyle=h0(q.borderColor,J.borderColor)}function Rj(Q,J,q){Q.lineTo(q.x,q.y)}function Tj(Q){if(Q.stepped)return bR;if(Q.tension||Q.cubicInterpolationMode==="monotone")return fR;return Rj}function Uz(Q,J,q={}){let Y=Q.length,{start:U=0,end:K=Y-1}=q,{start:H,end:M}=J,F=Math.max(U,H),R=Math.min(K,M),T=U<H&&K<H||U>M&&K>M;return{count:Y,start:F,loop:J.loop,ilen:R<F&&!T?Y+R-F:R-F}}function zj(Q,J,q,Y){let{points:U,options:K}=J,{count:H,start:M,loop:F,ilen:R}=Uz(U,q,Y),T=Tj(K),{move:z=!0,reverse:L}=Y||{},P,I,A;for(P=0;P<=R;++P){if(I=U[(M+(L?R-P:P))%H],I.skip)continue;else if(z)Q.moveTo(I.x,I.y),z=!1;else T(Q,A,I,L,K.stepped);A=I}if(F)I=U[(M+(L?R:0))%H],T(Q,A,I,L,K.stepped);return!!F}function _j(Q,J,q,Y){let U=J.points,{count:K,start:H,ilen:M}=Uz(U,q,Y),{move:F=!0,reverse:R}=Y||{},T=0,z=0,L,P,I,A,C,g,m=(i)=>(H+(R?M-i:i))%K,o=()=>{if(A!==C)Q.lineTo(T,C),Q.lineTo(T,A),Q.lineTo(T,g)};if(F)P=U[m(0)],Q.moveTo(P.x,P.y);for(L=0;L<=M;++L){if(P=U[m(L)],P.skip)continue;let{x:i,y:s}=P,Q0=i|0;if(Q0===I){if(s<A)A=s;else if(s>C)C=s;T=(z*T+i)/++z}else o(),Q.lineTo(i,s),I=Q0,z=0,A=C=s;g=s}o()}function ON(Q){let J=Q.options,q=J.borderDash&&J.borderDash.length;return!Q._decimated&&!Q._loop&&!J.tension&&J.cubicInterpolationMode!=="monotone"&&!J.stepped&&!q?_j:zj}function Lj(Q){if(Q.stepped)return cR;if(Q.tension||Q.cubicInterpolationMode==="monotone")return lR;return J2}function Vj(Q,J,q,Y){let U=J._path;if(!U){if(U=J._path=new Path2D,J.path(U,q,Y))U.closePath()}Yz(Q,J.options),Q.stroke(U)}function Ej(Q,J,q,Y){let{segments:U,options:K}=J,H=ON(J);for(let M of U){if(Yz(Q,K,M.style),Q.beginPath(),H(Q,J,M,{start:q,end:q+Y-1}))Q.closePath();Q.stroke()}}var Pj=typeof Path2D==="function";function Cj(Q,J,q,Y){if(Pj&&!J.options.segment)Vj(Q,J,q,Y);else Ej(Q,J,q,Y)}class u5 extends q6{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 q=this.options;if((q.tension||q.cubicInterpolationMode==="monotone")&&!q.stepped&&!this._pointsUpdated){let Y=q.spanGaps?this._loop:this._fullLoop;mR(this._points,q,Q,Y,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=sR(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,q=Q.length;return q&&J[Q[q-1].end]}interpolate(Q,J){let q=this.options,Y=Q[J],U=this.points,K=MN(this,{property:J,start:Y,end:Y});if(!K.length)return;let H=[],M=Lj(q),F,R;for(F=0,R=K.length;F<R;++F){let{start:T,end:z}=K[F],L=U[T],P=U[z];if(L===P){H.push(L);continue}let I=Math.abs((Y-L[J])/(P[J]-L[J])),A=M(L,P,I,q.stepped);A[J]=Q[J],H.push(A)}return H.length===1?H[0]:H}pathSegment(Q,J,q){return ON(this)(Q,this,J,q)}path(Q,J,q){let Y=this.segments,U=ON(this),K=this._loop;J=J||0,q=q||this.points.length-J;for(let H of Y)K&=U(Q,this,H,{start:J,end:J+q-1});return!!K}draw(Q,J,q,Y){let U=this.options||{};if((this.points||[]).length&&U.borderWidth)Q.save(),Cj(Q,this,q,Y),Q.restore();if(this.animated)this._pointsUpdated=!1,this._path=void 0}}function VT(Q,J,q,Y){let U=Q.options,{[q]:K}=Q.getProps([q],Y);return Math.abs(J-K)<U.radius+U.hitRadius}class g4 extends q6{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,q){let Y=this.options,{x:U,y:K}=this.getProps(["x","y"],q);return Math.pow(Q-U,2)+Math.pow(J-K,2)<Math.pow(Y.hitRadius+Y.radius,2)}inXRange(Q,J){return VT(this,Q,"x",J)}inYRange(Q,J){return VT(this,Q,"y",J)}getCenterPoint(Q){let{x:J,y:q}=this.getProps(["x","y"],Q);return{x:J,y:q}}size(Q){Q=Q||this.options||{};let J=Q.radius||0;J=Math.max(J,J&&Q.hoverRadius||0);let q=J&&Q.borderWidth||0;return(J+q)*2}draw(Q,J){let q=this.options;if(this.skip||q.radius<0.1||!w8(this,J,this.size(q)/2))return;Q.strokeStyle=q.borderColor,Q.lineWidth=q.borderWidth,Q.fillStyle=q.backgroundColor,Qq(Q,q,this.x,this.y)}getRange(){let Q=this.options||{};return Q.radius+Q.hitRadius}}function Nz(Q,J){let{x:q,y:Y,base:U,width:K,height:H}=Q.getProps(["x","y","base","width","height"],J),M,F,R,T,z;if(Q.horizontal)z=H/2,M=Math.min(q,U),F=Math.max(q,U),R=Y-z,T=Y+z;else z=K/2,M=q-z,F=q+z,R=Math.min(Y,U),T=Math.max(Y,U);return{left:M,top:R,right:F,bottom:T}}function H2(Q,J,q,Y){return Q?0:y5(J,q,Y)}function Ij(Q,J,q){let Y=Q.options.borderWidth,U=Q.borderSkipped,K=JN(Y);return{t:H2(U.top,K.top,0,q),r:H2(U.right,K.right,0,J),b:H2(U.bottom,K.bottom,0,q),l:H2(U.left,K.left,0,J)}}function jj(Q,J,q){let{enableBorderRadius:Y}=Q.getProps(["enableBorderRadius"]),U=Q.options.borderRadius,K=K2(U),H=Math.min(J,q),M=Q.borderSkipped,F=Y||n0(U);return{topLeft:H2(!F||M.top||M.left,K.topLeft,0,H),topRight:H2(!F||M.top||M.right,K.topRight,0,H),bottomLeft:H2(!F||M.bottom||M.left,K.bottomLeft,0,H),bottomRight:H2(!F||M.bottom||M.right,K.bottomRight,0,H)}}function Oj(Q){let J=Nz(Q),q=J.right-J.left,Y=J.bottom-J.top,U=Ij(Q,q/2,Y/2),K=jj(Q,q/2,Y/2);return{outer:{x:J.left,y:J.top,w:q,h:Y,radius:K},inner:{x:J.left+U.l,y:J.top+U.t,w:q-U.l-U.r,h:Y-U.t-U.b,radius:{topLeft:Math.max(0,K.topLeft-Math.max(U.t,U.l)),topRight:Math.max(0,K.topRight-Math.max(U.t,U.r)),bottomLeft:Math.max(0,K.bottomLeft-Math.max(U.b,U.l)),bottomRight:Math.max(0,K.bottomRight-Math.max(U.b,U.r))}}}}function VN(Q,J,q,Y){let U=J===null,K=q===null,M=Q&&!(U&&K)&&Nz(Q,Y);return M&&(U||Z6(J,M.left,M.right))&&(K||Z6(q,M.top,M.bottom))}function Dj(Q){return Q.topLeft||Q.topRight||Q.bottomLeft||Q.bottomRight}function Aj(Q,J){Q.rect(J.x,J.y,J.w,J.h)}function EN(Q,J,q={}){let Y=Q.x!==q.x?-J:0,U=Q.y!==q.y?-J:0,K=(Q.x+Q.w!==q.x+q.w?J:0)-Y,H=(Q.y+Q.h!==q.y+q.h?J:0)-U;return{x:Q.x+Y,y:Q.y+U,w:Q.w+K,h:Q.h+H,radius:Q.radius}}class QQ extends q6{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:q,backgroundColor:Y}}=this,{inner:U,outer:K}=Oj(this),H=Dj(K.radius)?d9:Aj;if(Q.save(),K.w!==U.w||K.h!==U.h)Q.beginPath(),H(Q,EN(K,J,U)),Q.clip(),H(Q,EN(U,-J,K)),Q.fillStyle=q,Q.fill("evenodd");Q.beginPath(),H(Q,EN(U,J)),Q.fillStyle=Y,Q.fill(),Q.restore()}inRange(Q,J,q){return VN(this,Q,J,q)}inXRange(Q,J){return VN(this,Q,null,J)}inYRange(Q,J){return VN(this,null,Q,J)}getCenterPoint(Q){let{x:J,y:q,base:Y,horizontal:U}=this.getProps(["x","y","base","horizontal"],Q);return{x:U?(J+Y)/2:J,y:U?q:(q+Y)/2}}getRange(Q){return Q==="x"?this.width/2:this.height/2}}function Sj(Q,J,q){let{segments:Y,points:U}=Q,K=J.points,H=[];for(let M of Y){let{start:F,end:R}=M;R=wq(F,R,U);let T=DN(q,U[F],U[R],M.loop);if(!J.segments){H.push({source:M,target:T,start:U[F],end:U[R]});continue}let z=MN(J,T);for(let L of z){let P=DN(q,K[L.start],K[L.end],L.loop),I=HN(M,U,P);for(let A of I)H.push({source:A,target:L,start:{[q]:ET(T,P,"start",Math.max)},end:{[q]:ET(T,P,"end",Math.min)}})}}return H}function DN(Q,J,q,Y){if(Y)return;let U=J[Q],K=q[Q];if(Q==="angle")U=k5(U),K=k5(K);return{property:Q,start:U,end:K}}function vj(Q,J){let{x:q=null,y:Y=null}=Q||{},U=J.points,K=[];return J.segments.forEach(({start:H,end:M})=>{M=wq(H,M,U);let F=U[H],R=U[M];if(Y!==null)K.push({x:F.x,y:Y}),K.push({x:R.x,y:Y});else if(q!==null)K.push({x:q,y:F.y}),K.push({x:q,y:R.y})}),K}function wq(Q,J,q){for(;J>Q;J--){let Y=q[J];if(!isNaN(Y.x)&&!isNaN(Y.y))break}return J}function ET(Q,J,q,Y){if(Q&&J)return Y(Q[q],J[q]);return Q?Q[q]:J?J[q]:0}function Kz(Q,J){let q=[],Y=!1;if(z1(Q))Y=!0,q=Q;else q=vj(Q,J);return q.length?new u5({points:q,options:{tension:0},_loop:Y,_fullLoop:Y}):null}function PT(Q){return Q&&Q.fill!==!1}function kj(Q,J,q){let U=Q[J].fill,K=[J],H;if(!q)return U;while(U!==!1&&K.indexOf(U)===-1){if(!j1(U))return U;if(H=Q[U],!H)return!1;if(H.visible)return U;K.push(U),U=H.fill}return!1}function bj(Q,J,q){let Y=hj(Q);if(n0(Y))return isNaN(Y.value)?!1:Y;let U=parseFloat(Y);if(j1(U)&&Math.floor(U)===U)return fj(Y[0],J,U,q);return["origin","start","end","stack","shape"].indexOf(Y)>=0&&Y}function fj(Q,J,q,Y){if(Q==="-"||Q==="+")q=J+q;if(q===J||q<0||q>=Y)return!1;return q}function yj(Q,J){let q=null;if(Q==="start")q=J.bottom;else if(Q==="end")q=J.top;else if(n0(Q))q=J.getPixelForValue(Q.value);else if(J.getBasePixel)q=J.getBasePixel();return q}function gj(Q,J,q){let Y;if(Q==="start")Y=q;else if(Q==="end")Y=J.options.reverse?J.min:J.max;else if(n0(Q))Y=Q.value;else Y=J.getBaseValue();return Y}function hj(Q){let J=Q.options,q=J.fill,Y=h0(q&&q.target,q);if(Y===void 0)Y=!!J.backgroundColor;if(Y===!1||Y===null)return!1;if(Y===!0)return"origin";return Y}function xj(Q){let{scale:J,index:q,line:Y}=Q,U=[],K=Y.segments,H=Y.points,M=uj(J,q);M.push(Kz({x:null,y:J.bottom},Y));for(let F=0;F<K.length;F++){let R=K[F];for(let T=R.start;T<=R.end;T++)mj(U,H[T],M)}return new u5({points:U,options:{}})}function uj(Q,J){let q=[],Y=Q.getMatchingVisibleMetas("line");for(let U=0;U<Y.length;U++){let K=Y[U];if(K.index===J)break;if(!K.hidden)q.unshift(K.dataset)}return q}function mj(Q,J,q){let Y=[];for(let U=0;U<q.length;U++){let K=q[U],{first:H,last:M,point:F}=dj(K,J,"x");if(!F||H&&M)continue;if(H)Y.unshift(F);else if(Q.push(F),!M)break}Q.push(...Y)}function dj(Q,J,q){let Y=Q.interpolate(J,q);if(!Y)return{};let U=Y[q],K=Q.segments,H=Q.points,M=!1,F=!1;for(let R=0;R<K.length;R++){let T=K[R],z=H[T.start][q],L=H[T.end][q];if(Z6(U,z,L)){M=U===z,F=U===L;break}}return{first:M,last:F,point:Y}}class xN{constructor(Q){this.x=Q.x,this.y=Q.y,this.radius=Q.radius}pathSegment(Q,J,q){let{x:Y,y:U,radius:K}=this;return J=J||{start:0,end:f5},Q.arc(Y,U,K,J.end,J.start,!0),!q.bounds}interpolate(Q){let{x:J,y:q,radius:Y}=this,U=Q.angle;return{x:J+Math.cos(U)*Y,y:q+Math.sin(U)*Y,angle:U}}}function pj(Q){let{chart:J,fill:q,line:Y}=Q;if(j1(q))return cj(J,q);if(q==="stack")return xj(Q);if(q==="shape")return!0;let U=lj(Q);if(U instanceof xN)return U;return Kz(U,Y)}function cj(Q,J){let q=Q.getDatasetMeta(J);return q&&Q.isDatasetVisible(J)?q.dataset:null}function lj(Q){if((Q.scale||{}).getPointPositionForValue)return sj(Q);return rj(Q)}function rj(Q){let{scale:J={},fill:q}=Q,Y=yj(q,J);if(j1(Y)){let U=J.isHorizontal();return{x:U?Y:null,y:U?null:Y}}return null}function sj(Q){let{scale:J,fill:q}=Q,Y=J.options,U=J.getLabels().length,K=Y.reverse?J.max:J.min,H=gj(q,J,K),M=[];if(Y.grid.circular){let F=J.getPointPositionForValue(0,K);return new xN({x:F.x,y:F.y,radius:J.getDistanceFromCenterForValue(H)})}for(let F=0;F<U;++F)M.push(J.getPointPositionForValue(F,H));return M}function PN(Q,J,q){let Y=pj(J),{chart:U,index:K,line:H,scale:M,axis:F}=J,R=H.options,T=R.fill,z=R.backgroundColor,{above:L=z,below:P=z}=T||{},I=U.getDatasetMeta(K),A=FN(U,I);if(Y&&H.points.length)mZ(Q,q),nj(Q,{line:H,target:Y,above:L,below:P,area:q,scale:M,axis:F,clip:A}),dZ(Q)}function nj(Q,J){let{line:q,target:Y,above:U,below:K,area:H,scale:M,clip:F}=J,R=q._loop?"angle":J.axis;Q.save();let T=K;if(K!==U){if(R==="x")CT(Q,Y,H.top),CN(Q,{line:q,target:Y,color:U,scale:M,property:R,clip:F}),Q.restore(),Q.save(),CT(Q,Y,H.bottom);else if(R==="y")IT(Q,Y,H.left),CN(Q,{line:q,target:Y,color:K,scale:M,property:R,clip:F}),Q.restore(),Q.save(),IT(Q,Y,H.right),T=U}CN(Q,{line:q,target:Y,color:T,scale:M,property:R,clip:F}),Q.restore()}function CT(Q,J,q){let{segments:Y,points:U}=J,K=!0,H=!1;Q.beginPath();for(let M of Y){let{start:F,end:R}=M,T=U[F],z=U[wq(F,R,U)];if(K)Q.moveTo(T.x,T.y),K=!1;else Q.lineTo(T.x,q),Q.lineTo(T.x,T.y);if(H=!!J.pathSegment(Q,M,{move:H}),H)Q.closePath();else Q.lineTo(z.x,q)}Q.lineTo(J.first().x,q),Q.closePath(),Q.clip()}function IT(Q,J,q){let{segments:Y,points:U}=J,K=!0,H=!1;Q.beginPath();for(let M of Y){let{start:F,end:R}=M,T=U[F],z=U[wq(F,R,U)];if(K)Q.moveTo(T.x,T.y),K=!1;else Q.lineTo(q,T.y),Q.lineTo(T.x,T.y);if(H=!!J.pathSegment(Q,M,{move:H}),H)Q.closePath();else Q.lineTo(q,z.y)}Q.lineTo(q,J.first().y),Q.closePath(),Q.clip()}function CN(Q,J){let{line:q,target:Y,property:U,color:K,scale:H,clip:M}=J,F=Sj(q,Y,U);for(let{source:R,target:T,start:z,end:L}of F){let{style:{backgroundColor:P=K}={}}=R,I=Y!==!0;Q.save(),Q.fillStyle=P,oj(Q,H,M,I&&DN(U,z,L)),Q.beginPath();let A=!!q.pathSegment(Q,R),C;if(I){if(A)Q.closePath();else jT(Q,Y,L,U);let g=!!Y.pathSegment(Q,T,{move:A,reverse:!0});if(C=A&&g,!C)jT(Q,Y,z,U)}Q.closePath(),Q.fill(C?"evenodd":"nonzero"),Q.restore()}}function oj(Q,J,q,Y){let U=J.chart.chartArea,{property:K,start:H,end:M}=Y||{};if(K==="x"||K==="y"){let F,R,T,z;if(K==="x")F=H,R=U.top,T=M,z=U.bottom;else F=U.left,R=H,T=U.right,z=M;if(Q.beginPath(),q)F=Math.max(F,q.left),T=Math.min(T,q.right),R=Math.max(R,q.top),z=Math.min(z,q.bottom);Q.rect(F,R,T-F,z-R),Q.clip()}}function jT(Q,J,q,Y){let U=J.interpolate(q,Y);if(U)Q.lineTo(U.x,U.y)}var p9={id:"filler",afterDatasetsUpdate(Q,J,q){let Y=(Q.data.datasets||[]).length,U=[],K,H,M,F;for(H=0;H<Y;++H){if(K=Q.getDatasetMeta(H),M=K.dataset,F=null,M&&M.options&&M instanceof u5)F={visible:Q.isDatasetVisible(H),index:H,fill:bj(M,H,Y),chart:Q,axis:K.controller.options.indexAxis,scale:K.vScale,line:M};K.$filler=F,U.push(F)}for(H=0;H<Y;++H){if(F=U[H],!F||F.fill===!1)continue;F.fill=kj(U,H,q.propagate)}},beforeDraw(Q,J,q){let Y=q.drawTime==="beforeDraw",U=Q.getSortedVisibleDatasetMetas(),K=Q.chartArea;for(let H=U.length-1;H>=0;--H){let M=U[H].$filler;if(!M)continue;if(M.line.updateControlPoints(K,M.axis),Y&&M.fill)PN(Q.ctx,M,K)}},beforeDatasetsDraw(Q,J,q){if(q.drawTime!=="beforeDatasetsDraw")return;let Y=Q.getSortedVisibleDatasetMetas();for(let U=Y.length-1;U>=0;--U){let K=Y[U].$filler;if(PT(K))PN(Q.ctx,K,Q.chartArea)}},beforeDatasetDraw(Q,J,q){let Y=J.meta.$filler;if(!PT(Y)||q.drawTime!=="beforeDatasetDraw")return;PN(Q.ctx,Y,Q.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},OT=(Q,J)=>{let{boxHeight:q=J,boxWidth:Y=J}=Q;if(Q.usePointStyle)q=Math.min(q,J),Y=Q.pointStyleWidth||Math.min(Y,J);return{boxWidth:Y,boxHeight:q,itemHeight:Math.max(J,q)}},ij=(Q,J)=>Q!==null&&J!==null&&Q.datasetIndex===J.datasetIndex&&Q.index===J.index;class AN extends q6{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,q){this.maxWidth=Q,this.maxHeight=J,this._margins=q,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=W1(Q.generateLabels,[this.chart],this)||[];if(Q.filter)J=J.filter((q)=>Q.filter(q,this.chart.data));if(Q.sort)J=J.sort((q,Y)=>Q.sort(q,Y,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 q=Q.labels,Y=p1(q.font),U=Y.size,K=this._computeTitleHeight(),{boxWidth:H,itemHeight:M}=OT(q,U),F,R;if(J.font=Y.string,this.isHorizontal())F=this.maxWidth,R=this._fitRows(K,U,H,M)+10;else R=this.maxHeight,F=this._fitCols(K,Y,H,M)+10;this.width=Math.min(F,Q.maxWidth||this.maxWidth),this.height=Math.min(R,Q.maxHeight||this.maxHeight)}_fitRows(Q,J,q,Y){let{ctx:U,maxWidth:K,options:{labels:{padding:H}}}=this,M=this.legendHitBoxes=[],F=this.lineWidths=[0],R=Y+H,T=Q;U.textAlign="left",U.textBaseline="middle";let z=-1,L=-R;return this.legendItems.forEach((P,I)=>{let A=q+J/2+U.measureText(P.text).width;if(I===0||F[F.length-1]+A+2*H>K)T+=R,F[F.length-(I>0?0:1)]=0,L+=R,z++;M[I]={left:0,top:L,row:z,width:A,height:Y},F[F.length-1]+=A+H}),T}_fitCols(Q,J,q,Y){let{ctx:U,maxHeight:K,options:{labels:{padding:H}}}=this,M=this.legendHitBoxes=[],F=this.columnSizes=[],R=K-Q,T=H,z=0,L=0,P=0,I=0;return this.legendItems.forEach((A,C)=>{let{itemWidth:g,itemHeight:m}=aj(q,J,U,A,Y);if(C>0&&L+m+2*H>R)T+=z+H,F.push({width:z,height:L}),P+=z+H,I++,z=L=0;M[C]={left:P,top:L,col:I,width:g,height:m},z=Math.max(z,g),L+=m+H}),T+=z,F.push({width:z,height:L}),T}adjustHitBoxes(){if(!this.options.display)return;let Q=this._computeTitleHeight(),{legendHitBoxes:J,options:{align:q,labels:{padding:Y},rtl:U}}=this,K=W$(U,this.left,this.width);if(this.isHorizontal()){let H=0,M=q5(q,this.left+Y,this.right-this.lineWidths[H]);for(let F of J){if(H!==F.row)H=F.row,M=q5(q,this.left+Y,this.right-this.lineWidths[H]);F.top+=this.top+Q+Y,F.left=K.leftForLtr(K.x(M),F.width),M+=F.width+Y}}else{let H=0,M=q5(q,this.top+Q+Y,this.bottom-this.columnSizes[H].height);for(let F of J){if(F.col!==H)H=F.col,M=q5(q,this.top+Q+Y,this.bottom-this.columnSizes[H].height);F.top=M,F.left+=this.left+Y,F.left=K.leftForLtr(K.x(F.left),F.width),M+=F.height+Y}}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let Q=this.ctx;mZ(Q,this),this._draw(),dZ(Q)}}_draw(){let{options:Q,columnSizes:J,lineWidths:q,ctx:Y}=this,{align:U,labels:K}=Q,H=O1.color,M=W$(Q.rtl,this.left,this.width),F=p1(K.font),{padding:R}=K,T=F.size,z=T/2,L;this.drawTitle(),Y.textAlign=M.textAlign("left"),Y.textBaseline="middle",Y.lineWidth=0.5,Y.font=F.string;let{boxWidth:P,boxHeight:I,itemHeight:A}=OT(K,T),C=function(s,Q0,p){if(isNaN(P)||P<=0||isNaN(I)||I<0)return;Y.save();let a=h0(p.lineWidth,1);if(Y.fillStyle=h0(p.fillStyle,H),Y.lineCap=h0(p.lineCap,"butt"),Y.lineDashOffset=h0(p.lineDashOffset,0),Y.lineJoin=h0(p.lineJoin,"miter"),Y.lineWidth=a,Y.strokeStyle=h0(p.strokeStyle,H),Y.setLineDash(h0(p.lineDash,[])),K.usePointStyle){let Y0={radius:I*Math.SQRT2/2,pointStyle:p.pointStyle,rotation:p.rotation,borderWidth:a},d=M.xPlus(s,P/2),N0=Q0+z;QN(Y,Y0,d,N0,K.pointStyleWidth&&P)}else{let Y0=Q0+Math.max((T-I)/2,0),d=M.leftForLtr(s,P),N0=K2(p.borderRadius);if(Y.beginPath(),Object.values(N0).some((w0)=>w0!==0))d9(Y,{x:d,y:Y0,w:P,h:I,radius:N0});else Y.rect(d,Y0,P,I);if(Y.fill(),a!==0)Y.stroke()}Y.restore()},g=function(s,Q0,p){N2(Y,p.text,s,Q0+A/2,F,{strikethrough:p.hidden,textAlign:M.textAlign(p.textAlign)})},m=this.isHorizontal(),o=this._computeTitleHeight();if(m)L={x:q5(U,this.left+R,this.right-q[0]),y:this.top+R+o,line:0};else L={x:this.left+R,y:q5(U,this.top+o+R,this.bottom-J[0].height),line:0};KN(this.ctx,Q.textDirection);let i=A+R;this.legendItems.forEach((s,Q0)=>{Y.strokeStyle=s.fontColor,Y.fillStyle=s.fontColor;let p=Y.measureText(s.text).width,a=M.textAlign(s.textAlign||(s.textAlign=K.textAlign)),Y0=P+z+p,d=L.x,N0=L.y;if(M.setWidth(this.width),m){if(Q0>0&&d+Y0+R>this.right)N0=L.y+=i,L.line++,d=L.x=q5(U,this.left+R,this.right-q[L.line])}else if(Q0>0&&N0+i>this.bottom)d=L.x=d+J[L.line].width+R,L.line++,N0=L.y=q5(U,this.top+o+R,this.bottom-J[L.line].height);let w0=M.x(d);if(C(w0,N0,s),d=OR(a,d+P+z,m?d+Y0:this.right,Q.rtl),g(M.x(d),N0,s),m)L.x+=Y0+R;else if(typeof s.text!=="string"){let z0=F.lineHeight;L.y+=Bz(s,z0)+R}else L.y+=i}),BN(this.ctx,Q.textDirection)}drawTitle(){let Q=this.options,J=Q.title,q=p1(J.font),Y=X5(J.padding);if(!J.display)return;let U=W$(Q.rtl,this.left,this.width),K=this.ctx,H=J.position,M=q.size/2,F=Y.top+M,R,T=this.left,z=this.width;if(this.isHorizontal())z=Math.max(...this.lineWidths),R=this.top+F,T=q5(Q.align,T,this.right-z);else{let P=this.columnSizes.reduce((I,A)=>Math.max(I,A.height),0);R=F+q5(Q.align,this.top,this.bottom-P-Q.labels.padding-this._computeTitleHeight())}let L=q5(H,T,T+z);K.textAlign=U.textAlign(eJ(H)),K.textBaseline="middle",K.strokeStyle=J.color,K.fillStyle=J.color,K.font=q.string,N2(K,J.text,L,R,q)}_computeTitleHeight(){let Q=this.options.title,J=p1(Q.font),q=X5(Q.padding);return Q.display?J.lineHeight+q.height:0}_getLegendItemAt(Q,J){let q,Y,U;if(Z6(Q,this.left,this.right)&&Z6(J,this.top,this.bottom)){U=this.legendHitBoxes;for(q=0;q<U.length;++q)if(Y=U[q],Z6(Q,Y.left,Y.left+Y.width)&&Z6(J,Y.top,Y.top+Y.height))return this.legendItems[q]}return null}handleEvent(Q){let J=this.options;if(!$O(Q.type,J))return;let q=this._getLegendItemAt(Q.x,Q.y);if(Q.type==="mousemove"||Q.type==="mouseout"){let Y=this._hoveredItem,U=ij(Y,q);if(Y&&!U)W1(J.onLeave,[Q,Y,this],this);if(this._hoveredItem=q,q&&!U)W1(J.onHover,[Q,q,this],this)}else if(q)W1(J.onClick,[Q,q,this],this)}}function aj(Q,J,q,Y,U){let K=tj(Y,Q,J,q),H=ej(U,Y,J.lineHeight);return{itemWidth:K,itemHeight:H}}function tj(Q,J,q,Y){let U=Q.text;if(U&&typeof U!=="string")U=U.reduce((K,H)=>K.length>H.length?K:H);return J+q.size/2+Y.measureText(U).width}function ej(Q,J,q){let Y=Q;if(typeof J.text!=="string")Y=Bz(J,q);return Y}function Bz(Q,J){let q=Q.text?Q.text.length:0;return J*q}function $O(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 _8={id:"legend",_element:AN,start(Q,J,q){let Y=Q.legend=new AN({ctx:Q.ctx,options:q,chart:Q});V4.configure(Q,Y,q),V4.addBox(Q,Y)},stop(Q){V4.removeBox(Q,Q.legend),delete Q.legend},beforeUpdate(Q,J,q){let Y=Q.legend;V4.configure(Q,Y,q),Y.options=q},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,q){let Y=J.datasetIndex,U=q.chart;if(U.isDatasetVisible(Y))U.hide(Y),J.hidden=!0;else U.show(Y),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:q,pointStyle:Y,textAlign:U,color:K,useBorderRadius:H,borderRadius:M}}=Q.legend.options;return Q._getSortedDatasetMetas().map((F)=>{let R=F.controller.getStyle(q?0:void 0),T=X5(R.borderWidth);return{text:J[F.index].label,fillStyle:R.backgroundColor,fontColor:K,hidden:!F.visible,lineCap:R.borderCapStyle,lineDash:R.borderDash,lineDashOffset:R.borderDashOffset,lineJoin:R.borderJoinStyle,lineWidth:(T.width+T.height)/4,strokeStyle:R.borderColor,pointStyle:Y||R.pointStyle,rotation:R.rotation,textAlign:U||R.textAlign,borderRadius:H&&(M||R.borderRadius),datasetIndex:F.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 uN extends q6{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 q=this.options;if(this.left=0,this.top=0,!q.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=Q,this.height=this.bottom=J;let Y=z1(q.text)?q.text.length:1;this._padding=X5(q.padding);let U=Y*p1(q.font).lineHeight+this._padding.height;if(this.isHorizontal())this.height=U;else this.width=U}isHorizontal(){let Q=this.options.position;return Q==="top"||Q==="bottom"}_drawArgs(Q){let{top:J,left:q,bottom:Y,right:U,options:K}=this,H=K.align,M=0,F,R,T;if(this.isHorizontal())R=q5(H,q,U),T=J+Q,F=U-q;else{if(K.position==="left")R=q+Q,T=q5(H,Y,J),M=b1*-0.5;else R=U-Q,T=q5(H,J,Y),M=b1*0.5;F=Y-J}return{titleX:R,titleY:T,maxWidth:F,rotation:M}}draw(){let Q=this.ctx,J=this.options;if(!J.display)return;let q=p1(J.font),U=q.lineHeight/2+this._padding.top,{titleX:K,titleY:H,maxWidth:M,rotation:F}=this._drawArgs(U);N2(Q,J.text,0,0,q,{color:J.color,maxWidth:M,rotation:F,textAlign:eJ(J.align),textBaseline:"middle",translation:[K,H]})}}function ZO(Q,J){let q=new uN({ctx:Q.ctx,options:J,chart:Q});V4.configure(Q,q,J),V4.addBox(Q,q),Q.titleBlock=q}var L8={id:"title",_element:uN,start(Q,J,q){ZO(Q,q)},stop(Q){let J=Q.titleBlock;V4.removeBox(Q,J),delete Q.titleBlock},beforeUpdate(Q,J,q){let Y=Q.titleBlock;V4.configure(Q,Y,q),Y.options=q},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 aZ={average(Q){if(!Q.length)return!1;let J,q,Y=new Set,U=0,K=0;for(J=0,q=Q.length;J<q;++J){let M=Q[J].element;if(M&&M.hasValue()){let F=M.tooltipPosition();Y.add(F.x),U+=F.y,++K}}if(K===0||Y.size===0)return!1;return{x:[...Y].reduce((M,F)=>M+F)/Y.size,y:U/K}},nearest(Q,J){if(!Q.length)return!1;let{x:q,y:Y}=J,U=Number.POSITIVE_INFINITY,K,H,M;for(K=0,H=Q.length;K<H;++K){let F=Q[K].element;if(F&&F.hasValue()){let R=F.getCenterPoint(),T=nJ(J,R);if(T<U)U=T,M=F}}if(M){let F=M.tooltipPosition();q=F.x,Y=F.y}return{x:q,y:Y}}};function T8(Q,J){if(J)if(z1(J))Array.prototype.push.apply(Q,J);else Q.push(J);return Q}function J6(Q){if((typeof Q==="string"||Q instanceof String)&&Q.indexOf(`
|
|
256
256
|
`)>-1)return Q.split(`
|
|
257
|
-
`);return Q}function QO(Q,J){let{element:q,datasetIndex:Y,index:U}=J,K=Q.getDatasetMeta(Y).controller,{label:H,value:M}=K.getLabelAndValue(U);return{chart:Q,label:H,parsed:K.getParsed(U),raw:Q.data.datasets[Y].data[U],formattedValue:M,dataset:K.getDataset(),dataIndex:U,datasetIndex:Y,element:q}}function DT(Q,J){let q=Q.chart.ctx,{body:Y,footer:U,title:K}=Q,{boxWidth:H,boxHeight:M}=J,F=p1(J.bodyFont),R=p1(J.titleFont),T=p1(J.footerFont),z=K.length,L=U.length,P=Y.length,I=X5(J.padding),A=I.height,C=0,g=Y.reduce((i,s)=>i+s.before.length+s.lines.length+s.after.length,0);if(g+=Q.beforeBody.length+Q.afterBody.length,z)A+=z*R.lineHeight+(z-1)*J.titleSpacing+J.titleMarginBottom;if(g){let i=J.displayColors?Math.max(M,F.lineHeight):F.lineHeight;A+=P*i+(g-P)*F.lineHeight+(g-1)*J.bodySpacing}if(L)A+=J.footerMarginTop+L*T.lineHeight+(L-1)*J.footerSpacing;let m=0,o=function(i){C=Math.max(C,q.measureText(i).width+m)};return q.save(),q.font=R.string,X1(Q.title,o),q.font=F.string,X1(Q.beforeBody.concat(Q.afterBody),o),m=J.displayColors?H+2+J.boxPadding:0,X1(Y,(i)=>{X1(i.before,o),X1(i.lines,o),X1(i.after,o)}),m=0,q.font=T.string,X1(Q.footer,o),q.restore(),C+=I.width,{width:C,height:A}}function GO(Q,J){let{y:q,height:Y}=J;if(q<Y/2)return"top";else if(q>Q.height-Y/2)return"bottom";return"center"}function JO(Q,J,q,Y){let{x:U,width:K}=Y,H=q.caretSize+q.caretPadding;if(Q==="left"&&U+K+H>J.width)return!0;if(Q==="right"&&U-K-H<0)return!0}function qO(Q,J,q,Y){let{x:U,width:K}=q,{width:H,chartArea:{left:M,right:F}}=Q,R="center";if(Y==="center")R=U<=(M+F)/2?"left":"right";else if(U<=K/2)R="left";else if(U>=H-K/2)R="right";if(JO(R,Q,J,q))R="center";return R}function AT(Q,J,q){let Y=q.yAlign||J.yAlign||GO(Q,q);return{xAlign:q.xAlign||J.xAlign||qO(Q,J,q,Y),yAlign:Y}}function XO(Q,J){let{x:q,width:Y}=Q;if(J==="right")q-=Y;else if(J==="center")q-=Y/2;return q}function YO(Q,J,q){let{y:Y,height:U}=Q;if(J==="top")Y+=q;else if(J==="bottom")Y-=U+q;else Y-=U/2;return Y}function ST(Q,J,q,Y){let{caretSize:U,caretPadding:K,cornerRadius:H}=Q,{xAlign:M,yAlign:F}=q,R=U+K,{topLeft:T,topRight:z,bottomLeft:L,bottomRight:P}=K2(H),I=XO(J,M),A=YO(J,F,R);if(F==="center"){if(M==="left")I+=R;else if(M==="right")I-=R}else if(M==="left")I-=Math.max(T,L)+U;else if(M==="right")I+=Math.max(z,P)+U;return{x:y5(I,0,Y.width-J.width),y:y5(A,0,Y.height-J.height)}}function Kq(Q,J,q){let Y=X5(q.padding);return J==="center"?Q.x+Q.width/2:J==="right"?Q.x+Q.width-Y.right:Q.x+Y.left}function vT(Q){return T8([],J6(Q))}function UO(Q,J,q){return Q6(Q,{tooltip:J,tooltipItems:q,type:"tooltip"})}function kT(Q,J){let q=J&&J.dataset&&J.dataset.tooltip&&J.dataset.tooltip.callbacks;return q?Q.override(q):Q}var Hz={beforeTitle:R8,title(Q){if(Q.length>0){let J=Q[0],q=J.chart.data.labels,Y=q?q.length:0;if(this&&this.options&&this.options.mode==="dataset")return J.dataset.label||"";else if(J.label)return J.label;else if(Y>0&&J.dataIndex<Y)return q[J.dataIndex]}return""},afterTitle:R8,beforeBody:R8,beforeLabel:R8,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 q=Q.formattedValue;if(!t0(q))J+=q;return J},labelColor(Q){let q=Q.chart.getDatasetMeta(Q.datasetIndex).controller.getStyle(Q.dataIndex);return{borderColor:q.borderColor,backgroundColor:q.backgroundColor,borderWidth:q.borderWidth,borderDash:q.borderDash,borderDashOffset:q.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(Q){let q=Q.chart.getDatasetMeta(Q.datasetIndex).controller.getStyle(Q.dataIndex);return{pointStyle:q.pointStyle,rotation:q.rotation}},afterLabel:R8,afterBody:R8,beforeFooter:R8,footer:R8,afterFooter:R8};function h5(Q,J,q,Y){let U=Q[J].call(q,Y);if(typeof U>"u")return Hz[J].call(q,Y);return U}class SN extends q6{static positioners=aZ;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,q=this.options.setContext(this.getContext()),Y=q.enabled&&J.options.animation&&q.animations,U=new bN(this.chart,Y);if(Y._cacheable)this._cachedAnimations=Object.freeze(U);return U}getContext(){return this.$context||(this.$context=UO(this.chart.getContext(),this,this._tooltipItems))}getTitle(Q,J){let{callbacks:q}=J,Y=h5(q,"beforeTitle",this,Q),U=h5(q,"title",this,Q),K=h5(q,"afterTitle",this,Q),H=[];return H=T8(H,J6(Y)),H=T8(H,J6(U)),H=T8(H,J6(K)),H}getBeforeBody(Q,J){return vT(h5(J.callbacks,"beforeBody",this,Q))}getBody(Q,J){let{callbacks:q}=J,Y=[];return X1(Q,(U)=>{let K={before:[],lines:[],after:[]},H=kT(q,U);T8(K.before,J6(h5(H,"beforeLabel",this,U))),T8(K.lines,h5(H,"label",this,U)),T8(K.after,J6(h5(H,"afterLabel",this,U))),Y.push(K)}),Y}getAfterBody(Q,J){return vT(h5(J.callbacks,"afterBody",this,Q))}getFooter(Q,J){let{callbacks:q}=J,Y=h5(q,"beforeFooter",this,Q),U=h5(q,"footer",this,Q),K=h5(q,"afterFooter",this,Q),H=[];return H=T8(H,J6(Y)),H=T8(H,J6(U)),H=T8(H,J6(K)),H}_createItems(Q){let J=this._active,q=this.chart.data,Y=[],U=[],K=[],H=[],M,F;for(M=0,F=J.length;M<F;++M)H.push(QO(this.chart,J[M]));if(Q.filter)H=H.filter((R,T,z)=>Q.filter(R,T,z,q));if(Q.itemSort)H=H.sort((R,T)=>Q.itemSort(R,T,q));return X1(H,(R)=>{let T=kT(Q.callbacks,R);Y.push(h5(T,"labelColor",this,R)),U.push(h5(T,"labelPointStyle",this,R)),K.push(h5(T,"labelTextColor",this,R))}),this.labelColors=Y,this.labelPointStyles=U,this.labelTextColors=K,this.dataPoints=H,H}update(Q,J){let q=this.options.setContext(this.getContext()),Y=this._active,U,K=[];if(!Y.length){if(this.opacity!==0)U={opacity:0}}else{let H=aZ[q.position].call(this,Y,this._eventPosition);K=this._createItems(q),this.title=this.getTitle(K,q),this.beforeBody=this.getBeforeBody(K,q),this.body=this.getBody(K,q),this.afterBody=this.getAfterBody(K,q),this.footer=this.getFooter(K,q);let M=this._size=DT(this,q),F=Object.assign({},H,M),R=AT(this.chart,q,F),T=ST(q,F,R,this.chart);this.xAlign=R.xAlign,this.yAlign=R.yAlign,U={opacity:1,x:T.x,y:T.y,width:M.width,height:M.height,caretX:H.x,caretY:H.y}}if(this._tooltipItems=K,this.$context=void 0,U)this._resolveAnimations().update(this,U);if(Q&&q.external)q.external.call(this,{chart:this.chart,tooltip:this,replay:J})}drawCaret(Q,J,q,Y){let U=this.getCaretPosition(Q,q,Y);J.lineTo(U.x1,U.y1),J.lineTo(U.x2,U.y2),J.lineTo(U.x3,U.y3)}getCaretPosition(Q,J,q){let{xAlign:Y,yAlign:U}=this,{caretSize:K,cornerRadius:H}=q,{topLeft:M,topRight:F,bottomLeft:R,bottomRight:T}=K2(H),{x:z,y:L}=Q,{width:P,height:I}=J,A,C,g,m,o,i;if(U==="center"){if(o=L+I/2,Y==="left")A=z,C=A-K,m=o+K,i=o-K;else A=z+P,C=A+K,m=o-K,i=o+K;g=A}else{if(Y==="left")C=z+Math.max(M,R)+K;else if(Y==="right")C=z+P-Math.max(F,T)-K;else C=this.caretX;if(U==="top")m=L,o=m-K,A=C-K,g=C+K;else m=L+I,o=m+K,A=C+K,g=C-K;i=m}return{x1:A,x2:C,x3:g,y1:m,y2:o,y3:i}}drawTitle(Q,J,q){let Y=this.title,U=Y.length,K,H,M;if(U){let F=W$(q.rtl,this.x,this.width);Q.x=Kq(this,q.titleAlign,q),J.textAlign=F.textAlign(q.titleAlign),J.textBaseline="middle",K=p1(q.titleFont),H=q.titleSpacing,J.fillStyle=q.titleColor,J.font=K.string;for(M=0;M<U;++M)if(J.fillText(Y[M],F.x(Q.x),Q.y+K.lineHeight/2),Q.y+=K.lineHeight+H,M+1===U)Q.y+=q.titleMarginBottom-H}}_drawColorBox(Q,J,q,Y,U){let K=this.labelColors[q],H=this.labelPointStyles[q],{boxHeight:M,boxWidth:F}=U,R=p1(U.bodyFont),T=Kq(this,"left",U),z=Y.x(T),L=M<R.lineHeight?(R.lineHeight-M)/2:0,P=J.y+L;if(U.usePointStyle){let I={radius:Math.min(F,M)/2,pointStyle:H.pointStyle,rotation:H.rotation,borderWidth:1},A=Y.leftForLtr(z,F)+F/2,C=P+M/2;Q.strokeStyle=U.multiKeyBackground,Q.fillStyle=U.multiKeyBackground,Qq(Q,I,A,C),Q.strokeStyle=K.borderColor,Q.fillStyle=K.backgroundColor,Qq(Q,I,A,C)}else{Q.lineWidth=n0(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 I=Y.leftForLtr(z,F),A=Y.leftForLtr(Y.xPlus(z,1),F-2),C=K2(K.borderRadius);if(Object.values(C).some((g)=>g!==0))Q.beginPath(),Q.fillStyle=U.multiKeyBackground,d9(Q,{x:I,y:P,w:F,h:M,radius:C}),Q.fill(),Q.stroke(),Q.fillStyle=K.backgroundColor,Q.beginPath(),d9(Q,{x:A,y:P+1,w:F-2,h:M-2,radius:C}),Q.fill();else Q.fillStyle=U.multiKeyBackground,Q.fillRect(I,P,F,M),Q.strokeRect(I,P,F,M),Q.fillStyle=K.backgroundColor,Q.fillRect(A,P+1,F-2,M-2)}Q.fillStyle=this.labelTextColors[q]}drawBody(Q,J,q){let{body:Y}=this,{bodySpacing:U,bodyAlign:K,displayColors:H,boxHeight:M,boxWidth:F,boxPadding:R}=q,T=p1(q.bodyFont),z=T.lineHeight,L=0,P=W$(q.rtl,this.x,this.width),I=function(p){J.fillText(p,P.x(Q.x+L),Q.y+z/2),Q.y+=z+U},A=P.textAlign(K),C,g,m,o,i,s,Q0;J.textAlign=K,J.textBaseline="middle",J.font=T.string,Q.x=Kq(this,A,q),J.fillStyle=q.bodyColor,X1(this.beforeBody,I),L=H&&A!=="right"?K==="center"?F/2+R:F+2+R:0;for(o=0,s=Y.length;o<s;++o){if(C=Y[o],g=this.labelTextColors[o],J.fillStyle=g,X1(C.before,I),m=C.lines,H&&m.length)this._drawColorBox(J,Q,o,P,q),z=Math.max(T.lineHeight,M);for(i=0,Q0=m.length;i<Q0;++i)I(m[i]),z=T.lineHeight;X1(C.after,I)}L=0,z=T.lineHeight,X1(this.afterBody,I),Q.y-=U}drawFooter(Q,J,q){let Y=this.footer,U=Y.length,K,H;if(U){let M=W$(q.rtl,this.x,this.width);Q.x=Kq(this,q.footerAlign,q),Q.y+=q.footerMarginTop,J.textAlign=M.textAlign(q.footerAlign),J.textBaseline="middle",K=p1(q.footerFont),J.fillStyle=q.footerColor,J.font=K.string;for(H=0;H<U;++H)J.fillText(Y[H],M.x(Q.x),Q.y+K.lineHeight/2),Q.y+=K.lineHeight+q.footerSpacing}}drawBackground(Q,J,q,Y){let{xAlign:U,yAlign:K}=this,{x:H,y:M}=Q,{width:F,height:R}=q,{topLeft:T,topRight:z,bottomLeft:L,bottomRight:P}=K2(Y.cornerRadius);if(J.fillStyle=Y.backgroundColor,J.strokeStyle=Y.borderColor,J.lineWidth=Y.borderWidth,J.beginPath(),J.moveTo(H+T,M),K==="top")this.drawCaret(Q,J,q,Y);if(J.lineTo(H+F-z,M),J.quadraticCurveTo(H+F,M,H+F,M+z),K==="center"&&U==="right")this.drawCaret(Q,J,q,Y);if(J.lineTo(H+F,M+R-P),J.quadraticCurveTo(H+F,M+R,H+F-P,M+R),K==="bottom")this.drawCaret(Q,J,q,Y);if(J.lineTo(H+L,M+R),J.quadraticCurveTo(H,M+R,H,M+R-L),K==="center"&&U==="left")this.drawCaret(Q,J,q,Y);if(J.lineTo(H,M+T),J.quadraticCurveTo(H,M,H+T,M),J.closePath(),J.fill(),Y.borderWidth>0)J.stroke()}_updateAnimationTarget(Q){let J=this.chart,q=this.$animations,Y=q&&q.x,U=q&&q.y;if(Y||U){let K=aZ[Q.position].call(this,this._active,this._eventPosition);if(!K)return;let H=this._size=DT(this,Q),M=Object.assign({},K,this._size),F=AT(J,Q,M),R=ST(Q,M,F,J);if(Y._to!==R.x||U._to!==R.y)this.xAlign=F.xAlign,this.yAlign=F.yAlign,this.width=H.width,this.height=H.height,this.caretX=K.x,this.caretY=K.y,this._resolveAnimations().update(this,R)}}_willRender(){return!!this.opacity}draw(Q){let J=this.options.setContext(this.getContext()),q=this.opacity;if(!q)return;this._updateAnimationTarget(J);let Y={width:this.width,height:this.height},U={x:this.x,y:this.y};q=Math.abs(q)<0.001?0:q;let K=X5(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=q,this.drawBackground(U,Q,Y,J),KN(Q,J.textDirection),U.y+=K.top,this.drawTitle(U,Q,J),this.drawBody(U,Q,J),this.drawFooter(U,Q,J),BN(Q,J.textDirection),Q.restore()}getActiveElements(){return this._active||[]}setActiveElements(Q,J){let q=this._active,Y=Q.map(({datasetIndex:H,index:M})=>{let F=this.chart.getDatasetMeta(H);if(!F)throw Error("Cannot find a dataset at index "+H);return{datasetIndex:H,element:F.data[M],index:M}}),U=!xZ(q,Y),K=this._positionChanged(Y,J);if(U||K)this._active=Y,this._eventPosition=J,this._ignoreReplayEvents=!0,this.update(!0)}handleEvent(Q,J,q=!0){if(J&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let Y=this.options,U=this._active||[],K=this._getActiveElements(Q,U,J,q),H=this._positionChanged(K,Q),M=J||!xZ(K,U)||H;if(M){if(this._active=K,Y.enabled||Y.external)this._eventPosition={x:Q.x,y:Q.y},this.update(!0,J)}return M}_getActiveElements(Q,J,q,Y){let U=this.options;if(Q.type==="mouseout")return[];if(!Y)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,U.mode,U,q);if(U.reverse)K.reverse();return K}_positionChanged(Q,J){let{caretX:q,caretY:Y,options:U}=this,K=aZ[U.position].call(this,Q,J);return K!==!1&&(q!==K.x||Y!==K.y)}}var V8={id:"tooltip",_element:SN,positioners:aZ,afterInit(Q,J,q){if(q)Q.tooltip=new SN({chart:Q,options:q})},beforeUpdate(Q,J,q){if(Q.tooltip)Q.tooltip.initialize(q)},reset(Q,J,q){if(Q.tooltip)Q.tooltip.initialize(q)},afterDraw(Q){let J=Q.tooltip;if(J&&J._willRender()){let q={tooltip:J};if(Q.notifyPlugins("beforeTooltipDraw",{...q,cancelable:!0})===!1)return;J.draw(Q.ctx),Q.notifyPlugins("afterTooltipDraw",q)}},afterEvent(Q,J){if(Q.tooltip){let q=J.replay;if(Q.tooltip.handleEvent(J.event,q,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:Hz},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 NO=(Q,J,q,Y)=>{if(typeof J==="string")q=Q.push(J)-1,Y.unshift({index:q,label:J});else if(isNaN(J))q=null;return q};function KO(Q,J,q,Y){let U=Q.indexOf(J);if(U===-1)return NO(Q,J,q,Y);let K=Q.lastIndexOf(J);return U!==K?q:U}var BO=(Q,J)=>Q===null?null:y5(Math.round(Q),0,J);function bT(Q){let J=this.getLabels();if(Q>=0&&Q<J.length)return J[Q];return Q}class h4 extends T${static id="category";static defaults={ticks:{callback:bT}};constructor(Q){super(Q);this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(Q){let J=this._addedLabels;if(J.length){let q=this.getLabels();for(let{index:Y,label:U}of J)if(q[Y]===U)q.splice(Y,1);this._addedLabels=[]}super.init(Q)}parse(Q,J){if(t0(Q))return null;let q=this.getLabels();return J=isFinite(J)&&q[J]===Q?J:KO(q,Q,h0(J,Q),this._addedLabels),BO(J,q.length-1)}determineDataLimits(){let{minDefined:Q,maxDefined:J}=this.getUserBounds(),{min:q,max:Y}=this.getMinMax(!0);if(this.options.bounds==="ticks"){if(!Q)q=0;if(!J)Y=this.getLabels().length-1}this.min=q,this.max=Y}buildTicks(){let Q=this.min,J=this.max,q=this.options.offset,Y=[],U=this.getLabels();U=Q===0&&J===U.length-1?U:U.slice(Q,J+1),this._valueRange=Math.max(U.length-(q?0:1),1),this._startValue=this.min-(q?0.5:0);for(let K=Q;K<=J;K++)Y.push({value:K});return Y}getLabelForValue(Q){return bT.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 HO(Q,J){let q=[],Y=0.00000000000001,{bounds:U,step:K,min:H,max:M,precision:F,count:R,maxTicks:T,maxDigits:z,includeBounds:L}=Q,P=K||1,I=T-1,{min:A,max:C}=J,g=!t0(H),m=!t0(M),o=!t0(R),i=(C-A)/(z+1),s=lU((C-A)/I/P)*P,Q0,p,a,Y0;if(s<0.00000000000001&&!g&&!m)return[{value:A},{value:C}];if(Y0=Math.ceil(C/s)-Math.floor(A/s),Y0>I)s=lU(Y0*s/I/P)*P;if(!t0(F))Q0=Math.pow(10,F),s=Math.ceil(s*Q0)/Q0;if(U==="ticks")p=Math.floor(A/s)*s,a=Math.ceil(C/s)*s;else p=A,a=C;if(g&&m&&K&&_R((M-H)/K,s/1000))Y0=Math.round(Math.min((M-H)/s,T)),s=(M-H)/Y0,p=H,a=M;else if(o)p=g?H:p,a=m?M:a,Y0=R-1,s=(a-p)/Y0;else if(Y0=(a-p)/s,u9(Y0,Math.round(Y0),s/1000))Y0=Math.round(Y0);else Y0=Math.ceil(Y0);let d=Math.max(sU(s),sU(p));Q0=Math.pow(10,t0(F)?d:F),p=Math.round(p*Q0)/Q0,a=Math.round(a*Q0)/Q0;let N0=0;if(g){if(L&&p!==H){if(q.push({value:H}),p<H)N0++;if(u9(Math.round((p+N0*s)*Q0)/Q0,H,fT(H,i,Q)))N0++}else if(p<H)N0++}for(;N0<Y0;++N0){let w0=Math.round((p+N0*s)*Q0)/Q0;if(m&&w0>M)break;q.push({value:w0})}if(m&&L&&a!==M)if(q.length&&u9(q[q.length-1].value,M,fT(M,i,Q)))q[q.length-1].value=M;else q.push({value:M});else if(!m||a===M)q.push({value:a});return q}function fT(Q,J,{horizontal:q,minRotation:Y}){let U=$6(Y),K=(q?Math.sin(U):Math.cos(U))||0.001,H=0.75*J*(""+Q).length;return Math.min(J/K,H)}class eZ extends T${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(t0(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:q}=this.getUserBounds(),{min:Y,max:U}=this,K=(M)=>Y=J?Y:M,H=(M)=>U=q?U:M;if(Q){let M=y4(Y),F=y4(U);if(M<0&&F<0)H(0);else if(M>0&&F>0)K(0)}if(Y===U){let M=U===0?1:Math.abs(U*0.05);if(H(U+M),!Q)K(Y-M)}this.min=Y,this.max=U}getTickLimit(){let Q=this.options.ticks,{maxTicksLimit:J,stepSize:q}=Q,Y;if(q){if(Y=Math.ceil(this.max/q)-Math.floor(this.min/q)+1,Y>1000)console.warn(`scales.${this.id}.ticks.stepSize: ${q} would result generating up to ${Y} ticks. Limiting to 1000.`),Y=1000}else Y=this.computeTickLimit(),J=J||11;if(J)Y=Math.min(J,Y);return Y}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let Q=this.options,J=Q.ticks,q=this.getTickLimit();q=Math.max(2,q);let Y={maxTicks:q,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},U=this._range||this,K=HO(Y,U);if(Q.bounds==="ticks")rU(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,q=this.max;if(super.configure(),this.options.offset&&Q.length){let Y=(q-J)/Math.max(Q.length-1,1)/2;J-=Y,q+=Y}this._startValue=J,this._endValue=q,this._valueRange=q-J}getLabelForValue(Q){return $q(Q,this.chart.options.locale,this.options.ticks.format)}}class x4 extends eZ{static id="linear";static defaults={ticks:{callback:uZ.formatters.numeric}};determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!0);this.min=j1(Q)?Q:0,this.max=j1(J)?J:1,this.handleTickRangeOptions()}computeTickLimit(){let Q=this.isHorizontal(),J=Q?this.width:this.height,q=$6(this.options.ticks.minRotation),Y=(Q?Math.sin(q):Math.cos(q))||0.001,U=this._resolveTickFontOptions(0);return Math.ceil(J/Math.min(40,U.lineHeight/Y))}getPixelForValue(Q){return Q===null?NaN:this.getPixelForDecimal((Q-this._startValue)/this._valueRange)}getValueForPixel(Q){return this._startValue+this.getDecimalForPixel(Q)*this._valueRange}}var $Q=(Q)=>Math.floor(e8(Q)),R$=(Q,J)=>Math.pow(10,$Q(Q)+J);function yT(Q){return Q/Math.pow(10,$Q(Q))===1}function gT(Q,J,q){let Y=Math.pow(10,q),U=Math.floor(Q/Y);return Math.ceil(J/Y)-U}function MO(Q,J){let q=J-Q,Y=$Q(q);while(gT(Q,J,Y)>10)Y++;while(gT(Q,J,Y)<10)Y--;return Math.min(Y,$Q(Q))}function FO(Q,{min:J,max:q}){J=g5(Q.min,J);let Y=[],U=$Q(J),K=MO(J,q),H=K<0?Math.pow(10,Math.abs(K)):1,M=Math.pow(10,K),F=U>K?Math.pow(10,U):0,R=Math.round((J-F)*H)/H,T=Math.floor((J-F)/M/10)*M*10,z=Math.floor((R-T)/Math.pow(10,K)),L=g5(Q.min,Math.round((F+T+z*Math.pow(10,K))*H)/H);while(L<q){if(Y.push({value:L,major:yT(L),significand:z}),z>=10)z=z<15?15:20;else z++;if(z>=20)K++,z=2,H=K>=0?1:H;L=Math.round((F+T+z*Math.pow(10,K))*H)/H}let P=g5(Q.max,L);return Y.push({value:P,major:yT(P),significand:z}),Y}class WO extends T${static id="logarithmic";static defaults={ticks:{callback:uZ.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 q=eZ.prototype.parse.apply(this,[Q,J]);if(q===0){this._zero=!0;return}return j1(q)&&q>0?q:null}determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!0);if(this.min=j1(Q)?Math.max(0,Q):null,this.max=j1(J)?Math.max(0,J):null,this.options.beginAtZero)this._zero=!0;if(this._zero&&this.min!==this._suggestedMin&&!j1(this._userMin))this.min=Q===R$(this.min,0)?R$(this.min,-1):R$(this.min,0);this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:Q,maxDefined:J}=this.getUserBounds(),q=this.min,Y=this.max,U=(H)=>q=Q?q:H,K=(H)=>Y=J?Y:H;if(q===Y)if(q<=0)U(1),K(10);else U(R$(q,-1)),K(R$(Y,1));if(q<=0)U(R$(Y,-1));if(Y<=0)K(R$(q,1));this.min=q,this.max=Y}buildTicks(){let Q=this.options,J={min:this._userMin,max:this._userMax},q=FO(J,this);if(Q.bounds==="ticks")rU(q,this,"value");if(Q.reverse)q.reverse(),this.start=this.max,this.end=this.min;else this.start=this.min,this.end=this.max;return q}getLabelForValue(Q){return Q===void 0?"0":$q(Q,this.chart.options.locale,this.options.ticks.format)}configure(){let Q=this.min;super.configure(),this._startValue=e8(Q),this._valueRange=e8(this.max)-e8(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:(e8(Q)-this._startValue)/this._valueRange)}getValueForPixel(Q){let J=this.getDecimalForPixel(Q);return Math.pow(10,this._startValue+J*this._valueRange)}}function vN(Q){let J=Q.ticks;if(J.display&&Q.display){let q=X5(J.backdropPadding);return h0(J.font&&J.font.size,O1.font.size)+q.height}return 0}function wO(Q,J,q){return q=z1(q)?q:[q],{w:kR(Q,J.string,q),h:q.length*J.lineHeight}}function hT(Q,J,q,Y,U){if(Q===Y||Q===U)return{start:J-q/2,end:J+q/2};else if(Q<Y||Q>U)return{start:J-q,end:J};return{start:J,end:J+q}}function RO(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},q=Object.assign({},J),Y=[],U=[],K=Q._pointLabels.length,H=Q.options.pointLabels,M=H.centerPointLabels?b1/K:0;for(let F=0;F<K;F++){let R=H.setContext(Q.getPointLabelContext(F));U[F]=R.padding;let T=Q.getPointPosition(F,Q.drawingArea+U[F],M),z=p1(R.font),L=wO(Q.ctx,z,Q._pointLabels[F]);Y[F]=L;let P=k5(Q.getIndexAngle(F)+M),I=Math.round(aJ(P)),A=hT(I,T.x,L.w,0,180),C=hT(I,T.y,L.h,90,270);TO(q,J,P,A,C)}Q.setCenterPoint(J.l-q.l,q.r-J.r,J.t-q.t,q.b-J.b),Q._pointLabelItems=LO(Q,Y,U)}function TO(Q,J,q,Y,U){let K=Math.abs(Math.sin(q)),H=Math.abs(Math.cos(q)),M=0,F=0;if(Y.start<J.l)M=(J.l-Y.start)/K,Q.l=Math.min(Q.l,J.l-M);else if(Y.end>J.r)M=(Y.end-J.r)/K,Q.r=Math.max(Q.r,J.r+M);if(U.start<J.t)F=(J.t-U.start)/H,Q.t=Math.min(Q.t,J.t-F);else if(U.end>J.b)F=(U.end-J.b)/H,Q.b=Math.max(Q.b,J.b+F)}function zO(Q,J,q){let Y=Q.drawingArea,{extra:U,additionalAngle:K,padding:H,size:M}=q,F=Q.getPointPosition(J,Y+U+H,K),R=Math.round(aJ(k5(F.angle+b5))),T=PO(F.y,M.h,R),z=VO(R),L=EO(F.x,M.w,z);return{visible:!0,x:F.x,y:T,textAlign:z,left:L,top:T,right:L+M.w,bottom:T+M.h}}function _O(Q,J){if(!J)return!0;let{left:q,top:Y,right:U,bottom:K}=Q;return!(w8({x:q,y:Y},J)||w8({x:q,y:K},J)||w8({x:U,y:Y},J)||w8({x:U,y:K},J))}function LO(Q,J,q){let Y=[],U=Q._pointLabels.length,K=Q.options,{centerPointLabels:H,display:M}=K.pointLabels,F={extra:vN(K)/2,additionalAngle:H?b1/U:0},R;for(let T=0;T<U;T++){F.padding=q[T],F.size=J[T];let z=zO(Q,T,F);if(Y.push(z),M==="auto"){if(z.visible=_O(z,R),z.visible)R=z}}return Y}function VO(Q){if(Q===0||Q===180)return"center";else if(Q<180)return"left";return"right"}function EO(Q,J,q){if(q==="right")Q-=J;else if(q==="center")Q-=J/2;return Q}function PO(Q,J,q){if(q===90||q===270)Q-=J/2;else if(q>270||q<90)Q-=J;return Q}function CO(Q,J,q){let{left:Y,top:U,right:K,bottom:H}=q,{backdropColor:M}=J;if(!t0(M)){let F=K2(J.borderRadius),R=X5(J.backdropPadding);Q.fillStyle=M;let T=Y-R.left,z=U-R.top,L=K-Y+R.width,P=H-U+R.height;if(Object.values(F).some((I)=>I!==0))Q.beginPath(),d9(Q,{x:T,y:z,w:L,h:P,radius:F}),Q.fill();else Q.fillRect(T,z,L,P)}}function IO(Q,J){let{ctx:q,options:{pointLabels:Y}}=Q;for(let U=J-1;U>=0;U--){let K=Q._pointLabelItems[U];if(!K.visible)continue;let H=Y.setContext(Q.getPointLabelContext(U));CO(q,H,K);let M=p1(H.font),{x:F,y:R,textAlign:T}=K;N2(q,Q._pointLabels[U],F,R+M.lineHeight/2,M,{color:H.color,textAlign:T,textBaseline:"middle"})}}function Mz(Q,J,q,Y){let{ctx:U}=Q;if(q)U.arc(Q.xCenter,Q.yCenter,J,0,f5);else{let K=Q.getPointPosition(0,J);U.moveTo(K.x,K.y);for(let H=1;H<Y;H++)K=Q.getPointPosition(H,J),U.lineTo(K.x,K.y)}}function jO(Q,J,q,Y,U){let K=Q.ctx,H=J.circular,{color:M,lineWidth:F}=J;if(!H&&!Y||!M||!F||q<0)return;K.save(),K.strokeStyle=M,K.lineWidth=F,K.setLineDash(U.dash||[]),K.lineDashOffset=U.dashOffset,K.beginPath(),Mz(Q,q,H,Y),K.closePath(),K.stroke(),K.restore()}function OO(Q,J,q){return Q6(Q,{label:q,index:J,type:"pointLabel"})}class DO extends eZ{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:uZ.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=X5(vN(this.options)/2),J=this.width=this.maxWidth-Q.width,q=this.height=this.maxHeight-Q.height;this.xCenter=Math.floor(this.left+J/2+Q.left),this.yCenter=Math.floor(this.top+q/2+Q.top),this.drawingArea=Math.floor(Math.min(J,q)/2)}determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!1);this.min=j1(Q)&&!isNaN(Q)?Q:0,this.max=j1(J)&&!isNaN(J)?J:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/vN(this.options))}generateTickLabels(Q){eZ.prototype.generateTickLabels.call(this,Q),this._pointLabels=this.getLabels().map((J,q)=>{let Y=W1(this.options.pointLabels.callback,[J,q],this);return Y||Y===0?Y:""}).filter((J,q)=>this.chart.getDataVisibility(q))}fit(){let Q=this.options;if(Q.display&&Q.pointLabels.display)RO(this);else this.setCenterPoint(0,0,0,0)}setCenterPoint(Q,J,q,Y){this.xCenter+=Math.floor((Q-J)/2),this.yCenter+=Math.floor((q-Y)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(Q,J,q,Y))}getIndexAngle(Q){let J=f5/(this._pointLabels.length||1),q=this.options.startAngle||0;return k5(Q*J+$6(q))}getDistanceFromCenterForValue(Q){if(t0(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(t0(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 q=J[Q];return OO(this.getContext(),Q,q)}}getPointPosition(Q,J,q=0){let Y=this.getIndexAngle(Q)-b5+q;return{x:Math.cos(Y)*J+this.xCenter,y:Math.sin(Y)*J+this.yCenter,angle:Y}}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:q,right:Y,bottom:U}=this._pointLabelItems[Q];return{left:J,top:q,right:Y,bottom:U}}drawBackground(){let{backgroundColor:Q,grid:{circular:J}}=this.options;if(Q){let q=this.ctx;q.save(),q.beginPath(),Mz(this,this.getDistanceFromCenterForValue(this._endValue),J,this._pointLabels.length),q.closePath(),q.fillStyle=Q,q.fill(),q.restore()}}drawGrid(){let Q=this.ctx,J=this.options,{angleLines:q,grid:Y,border:U}=J,K=this._pointLabels.length,H,M,F;if(J.pointLabels.display)IO(this,K);if(Y.display)this.ticks.forEach((R,T)=>{if(T!==0||T===0&&this.min<0){M=this.getDistanceFromCenterForValue(R.value);let z=this.getContext(T),L=Y.setContext(z),P=U.setContext(z);jO(this,L,M,K,P)}});if(q.display){Q.save();for(H=K-1;H>=0;H--){let R=q.setContext(this.getPointLabelContext(H)),{color:T,lineWidth:z}=R;if(!z||!T)continue;Q.lineWidth=z,Q.strokeStyle=T,Q.setLineDash(R.borderDash),Q.lineDashOffset=R.borderDashOffset,M=this.getDistanceFromCenterForValue(J.reverse?this.min:this.max),F=this.getPointPosition(H,M),Q.beginPath(),Q.moveTo(this.xCenter,this.yCenter),Q.lineTo(F.x,F.y),Q.stroke()}Q.restore()}}drawBorder(){}drawLabels(){let Q=this.ctx,J=this.options,q=J.ticks;if(!q.display)return;let Y=this.getIndexAngle(0),U,K;Q.save(),Q.translate(this.xCenter,this.yCenter),Q.rotate(Y),Q.textAlign="center",Q.textBaseline="middle",this.ticks.forEach((H,M)=>{if(M===0&&this.min>=0&&!J.reverse)return;let F=q.setContext(this.getContext(M)),R=p1(F.font);if(U=this.getDistanceFromCenterForValue(this.ticks[M].value),F.showLabelBackdrop){Q.font=R.string,K=Q.measureText(H.label).width,Q.fillStyle=F.backdropColor;let T=X5(F.backdropPadding);Q.fillRect(-K/2-T.left,-U-R.size/2-T.top,K+T.width,R.size+T.height)}N2(Q,H.label,0,-U,R,{color:F.color,strokeColor:F.textStrokeColor,strokeWidth:F.textStrokeWidth})}),Q.restore()}drawTitle(){}}var Rq={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}},x5=Object.keys(Rq);function xT(Q,J){return Q-J}function uT(Q,J){if(t0(J))return null;let q=Q._adapter,{parser:Y,round:U,isoWeekday:K}=Q._parseOpts,H=J;if(typeof Y==="function")H=Y(H);if(!j1(H))H=typeof Y==="string"?q.parse(H,Y):q.parse(H);if(H===null)return null;if(U)H=U==="week"&&(m9(K)||K===!0)?q.startOf(H,"isoWeek",K):q.startOf(H,U);return+H}function mT(Q,J,q,Y){let U=x5.length;for(let K=x5.indexOf(Q);K<U-1;++K){let H=Rq[x5[K]],M=H.steps?H.steps:Number.MAX_SAFE_INTEGER;if(H.common&&Math.ceil((q-J)/(M*H.size))<=Y)return x5[K]}return x5[U-1]}function AO(Q,J,q,Y,U){for(let K=x5.length-1;K>=x5.indexOf(q);K--){let H=x5[K];if(Rq[H].common&&Q._adapter.diff(U,Y,H)>=J-1)return H}return x5[q?x5.indexOf(q):0]}function SO(Q){for(let J=x5.indexOf(Q)+1,q=x5.length;J<q;++J)if(Rq[x5[J]].common)return x5[J]}function dT(Q,J,q){if(!q)Q[J]=!0;else if(q.length){let{lo:Y,hi:U}=tJ(q,J),K=q[Y]>=J?q[Y]:q[U];Q[K]=!0}}function vO(Q,J,q,Y){let U=Q._adapter,K=+U.startOf(J[0].value,Y),H=J[J.length-1].value,M,F;for(M=K;M<=H;M=+U.add(M,1,Y))if(F=q[M],F>=0)J[F].major=!0;return J}function pT(Q,J,q){let Y=[],U={},K=J.length,H,M;for(H=0;H<K;++H)M=J[H],U[M]=H,Y.push({value:M,major:!1});return K===0||!q?Y:vO(Q,Y,U,q)}class kN extends T${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 q=Q.time||(Q.time={}),Y=this._adapter=new MI._date(Q.adapters.date);Y.init(J),h9(q.displayFormats,Y.formats()),this._parseOpts={parser:q.parser,round:q.round,isoWeekday:q.isoWeekday},super.init(Q),this._normalized=J.normalized}parse(Q,J){if(Q===void 0)return null;return uT(this,Q)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let Q=this.options,J=this._adapter,q=Q.time.unit||"day",{min:Y,max:U,minDefined:K,maxDefined:H}=this.getUserBounds();function M(F){if(!K&&!isNaN(F.min))Y=Math.min(Y,F.min);if(!H&&!isNaN(F.max))U=Math.max(U,F.max)}if(!K||!H){if(M(this._getLabelBounds()),Q.bounds!=="ticks"||Q.ticks.source!=="labels")M(this.getMinMax(!1))}Y=j1(Y)&&!isNaN(Y)?Y:+J.startOf(Date.now(),q),U=j1(U)&&!isNaN(U)?U:+J.endOf(Date.now(),q)+1,this.min=Math.min(Y,U-1),this.max=Math.max(Y+1,U)}_getLabelBounds(){let Q=this.getLabelTimestamps(),J=Number.POSITIVE_INFINITY,q=Number.NEGATIVE_INFINITY;if(Q.length)J=Q[0],q=Q[Q.length-1];return{min:J,max:q}}buildTicks(){let Q=this.options,J=Q.time,q=Q.ticks,Y=q.source==="labels"?this.getLabelTimestamps():this._generate();if(Q.bounds==="ticks"&&Y.length)this.min=this._userMin||Y[0],this.max=this._userMax||Y[Y.length-1];let U=this.min,K=this.max,H=PR(Y,U,K);if(this._unit=J.unit||(q.autoSkip?mT(J.minUnit,this.min,this.max,this._getLabelCapacity(U)):AO(this,H.length,J.minUnit,this.min,this.max)),this._majorUnit=!q.major.enabled||this._unit==="year"?void 0:SO(this._unit),this.initOffsets(Y),Q.reverse)H.reverse();return pT(this,H,this._majorUnit)}afterAutoSkip(){if(this.options.offsetAfterAutoskip)this.initOffsets(this.ticks.map((Q)=>+Q.value))}initOffsets(Q=[]){let J=0,q=0,Y,U;if(this.options.offset&&Q.length){if(Y=this.getDecimalForValue(Q[0]),Q.length===1)J=1-Y;else J=(this.getDecimalForValue(Q[1])-Y)/2;if(U=this.getDecimalForValue(Q[Q.length-1]),Q.length===1)q=U;else q=(U-this.getDecimalForValue(Q[Q.length-2]))/2}let K=Q.length<3?0.5:0.25;J=y5(J,0,K),q=y5(q,0,K),this._offsets={start:J,end:q,factor:1/(J+1+q)}}_generate(){let Q=this._adapter,J=this.min,q=this.max,Y=this.options,U=Y.time,K=U.unit||mT(U.minUnit,J,q,this._getLabelCapacity(J)),H=h0(Y.ticks.stepSize,1),M=K==="week"?U.isoWeekday:!1,F=m9(M)||M===!0,R={},T=J,z,L;if(F)T=+Q.startOf(T,"isoWeek",M);if(T=+Q.startOf(T,F?"day":K),Q.diff(q,J,K)>1e5*H)throw Error(J+" and "+q+" are too far apart with stepSize of "+H+" "+K);let P=Y.ticks.source==="data"&&this.getDataTimestamps();for(z=T,L=0;z<q;z=+Q.add(z,H,K),L++)dT(R,z,P);if(z===q||Y.bounds==="ticks"||L===1)dT(R,z,P);return Object.keys(R).sort(xT).map((I)=>+I)}getLabelForValue(Q){let J=this._adapter,q=this.options.time;if(q.tooltipFormat)return J.format(Q,q.tooltipFormat);return J.format(Q,q.displayFormats.datetime)}format(Q,J){let Y=this.options.time.displayFormats,U=this._unit,K=J||Y[U];return this._adapter.format(Q,K)}_tickFormatFunction(Q,J,q,Y){let U=this.options,K=U.ticks.callback;if(K)return W1(K,[Q,J,q],this);let H=U.time.displayFormats,M=this._unit,F=this._majorUnit,R=M&&H[M],T=F&&H[F],z=q[J],L=F&&T&&z&&z.major;return this._adapter.format(Q,Y||(L?T:R))}generateTickLabels(Q){let J,q,Y;for(J=0,q=Q.length;J<q;++J)Y=Q[J],Y.label=this._tickFormatFunction(Y.value,J,Q)}getDecimalForValue(Q){return Q===null?NaN:(Q-this.min)/(this.max-this.min)}getPixelForValue(Q){let J=this._offsets,q=this.getDecimalForValue(Q);return this.getPixelForDecimal((J.start+q)*J.factor)}getValueForPixel(Q){let J=this._offsets,q=this.getDecimalForPixel(Q)/J.factor-J.end;return this.min+q*(this.max-this.min)}_getLabelSize(Q){let J=this.options.ticks,q=this.ctx.measureText(Q).width,Y=$6(this.isHorizontal()?J.maxRotation:J.minRotation),U=Math.cos(Y),K=Math.sin(Y),H=this._resolveTickFontOptions(0).size;return{w:q*U+H*K,h:q*K+H*U}}_getLabelCapacity(Q){let J=this.options.time,q=J.displayFormats,Y=q[J.unit]||q.millisecond,U=this._tickFormatFunction(Q,0,pT(this,[Q],this._majorUnit),Y),K=this._getLabelSize(U),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,q;if(Q.length)return Q;let Y=this.getMatchingVisibleMetas();if(this._normalized&&Y.length)return this._cache.data=Y[0].controller.getAllParsedValues(this);for(J=0,q=Y.length;J<q;++J)Q=Q.concat(Y[J].controller.getAllParsedValues(this));return this._cache.data=this.normalize(Q)}getLabelTimestamps(){let Q=this._cache.labels||[],J,q;if(Q.length)return Q;let Y=this.getLabels();for(J=0,q=Y.length;J<q;++J)Q.push(uT(this,Y[J]));return this._cache.labels=this._normalized?Q:this.normalize(Q)}normalize(Q){return iU(Q.sort(xT))}}function Bq(Q,J,q){let Y=0,U=Q.length-1,K,H,M,F;if(q){if(J>=Q[Y].pos&&J<=Q[U].pos)({lo:Y,hi:U}=q2(Q,"pos",J));({pos:K,time:M}=Q[Y]),{pos:H,time:F}=Q[U]}else{if(J>=Q[Y].time&&J<=Q[U].time)({lo:Y,hi:U}=q2(Q,"time",J));({time:K,pos:M}=Q[Y]),{time:H,pos:F}=Q[U]}let R=H-K;return R?M+(F-M)*(J-K)/R:M}class kO extends kN{static id="timeseries";static defaults=kN.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=Bq(J,this.min),this._tableRange=Bq(J,this.max)-this._minPos,super.initOffsets(Q)}buildLookupTable(Q){let{min:J,max:q}=this,Y=[],U=[],K,H,M,F,R;for(K=0,H=Q.length;K<H;++K)if(F=Q[K],F>=J&&F<=q)Y.push(F);if(Y.length<2)return[{time:J,pos:0},{time:q,pos:1}];for(K=0,H=Y.length;K<H;++K)if(R=Y[K+1],M=Y[K-1],F=Y[K],Math.round((R+M)/2)!==F)U.push({time:F,pos:K/(H-1)});return U}_generate(){let Q=this.min,J=this.max,q=super.getDataTimestamps();if(!q.includes(Q)||!q.length)q.splice(0,0,Q);if(!q.includes(J)||q.length===1)q.push(J);return q.sort((Y,U)=>Y-U)}_getTimestampsForTable(){let Q=this._cache.all||[];if(Q.length)return Q;let J=this.getDataTimestamps(),q=this.getLabelTimestamps();if(J.length&&q.length)Q=this.normalize(J.concat(q));else Q=J.length?J:q;return Q=this._cache.all=Q,Q}getDecimalForValue(Q){return(Bq(this._table,Q)-this._minPos)/this._tableRange}getValueForPixel(Q){let J=this._offsets,q=this.getDecimalForPixel(Q)/J.factor-J.end;return Bq(this._table,q*this._tableRange+this._minPos,!0)}}var qQ=R0(e1(),1);var mN=R0(Fz(),1),q4=R0(e1(),1);var wz="label";function Wz(Q,J){if(typeof Q==="function")Q(J);else if(Q)Q.current=J}function fO(Q,J){let q=Q.options;if(q&&J)Object.assign(q,J)}function Rz(Q,J){Q.labels=J}function Tz(Q,J,q=wz){let Y=[];Q.datasets=J.map((U)=>{let K=Q.datasets.find((H)=>H[q]===U[q]);if(!K||!U.data||Y.includes(K))return{...U};return Y.push(K),Object.assign(K,U),K})}function yO(Q,J=wz){let q={labels:[],datasets:[]};return Rz(q,Q.labels),Tz(q,Q.datasets,J),q}function gO(Q,J){let{height:q=150,width:Y=300,redraw:U=!1,datasetIdKey:K,type:H,data:M,options:F,plugins:R=[],fallbackContent:T,updateMode:z,...L}=Q,P=q4.useRef(null),I=q4.useRef(null),A=()=>{if(!P.current)return;I.current=new P5(P.current,{type:H,data:yO(M,K),options:F&&{...F},plugins:R}),Wz(J,I.current)},C=()=>{if(Wz(J,null),I.current)I.current.destroy(),I.current=null};return q4.useEffect(()=>{if(!U&&I.current&&F)fO(I.current,F)},[U,F]),q4.useEffect(()=>{if(!U&&I.current)Rz(I.current.config.data,M.labels)},[U,M.labels]),q4.useEffect(()=>{if(!U&&I.current&&M.datasets)Tz(I.current.config.data,M.datasets,K)},[U,M.datasets]),q4.useEffect(()=>{if(!I.current)return;if(U)C(),setTimeout(A);else I.current.update(z)},[U,F,M.labels,M.datasets,z]),q4.useEffect(()=>{if(!I.current)return;C(),setTimeout(A)},[H]),q4.useEffect(()=>{return A(),()=>C()},[]),mN.jsx("canvas",{ref:P,role:"img",height:q,width:Y,...L,children:T})}var hO=q4.forwardRef(gO);function zz(Q,J){return P5.register(J),q4.forwardRef((q,Y)=>mN.jsx(hO,{...q,ref:Y,type:Q}))}var E4=zz("line",yN),Tq=zz("bar",fN);var zq=R0(e1(),1),_z="(prefers-color-scheme: dark)";function xO(){if(typeof window>"u")return"light";return window.matchMedia(_z).matches?"dark":"light"}function E8(){let[Q,J]=zq.useState(()=>xO());return zq.useEffect(()=>{let q=window.matchMedia(_z),Y=()=>{J(q.matches?"dark":"light")};return Y(),q.addEventListener("change",Y),()=>q.removeEventListener("change",Y)},[]),Q}var uO=Math.pow(10,8)*24*60*60*1000,Fv=-uO,_q=604800000,Lz=86400000;var GQ=43200,dN=1440;var pN=Symbol.for("constructDateFrom");function F5(Q,J){if(typeof Q==="function")return Q(J);if(Q&&typeof Q==="object"&&pN in Q)return Q[pN](J);if(Q instanceof Date)return new Q.constructor(J);return new Date(J)}function e0(Q,J){return F5(J||Q,Q)}var mO={};function P8(){return mO}function X6(Q,J){let q=P8(),Y=J?.weekStartsOn??J?.locale?.options?.weekStartsOn??q.weekStartsOn??q.locale?.options?.weekStartsOn??0,U=e0(Q,J?.in),K=U.getDay(),H=(K<Y?7:0)+K-Y;return U.setDate(U.getDate()-H),U.setHours(0,0,0,0),U}function _$(Q,J){return X6(Q,{...J,weekStartsOn:1})}function Lq(Q,J){let q=e0(Q,J?.in),Y=q.getFullYear(),U=F5(q,0);U.setFullYear(Y+1,0,4),U.setHours(0,0,0,0);let K=_$(U),H=F5(q,0);H.setFullYear(Y,0,4),H.setHours(0,0,0,0);let M=_$(H);if(q.getTime()>=K.getTime())return Y+1;else if(q.getTime()>=M.getTime())return Y;else return Y-1}function c9(Q){let J=e0(Q),q=new Date(Date.UTC(J.getFullYear(),J.getMonth(),J.getDate(),J.getHours(),J.getMinutes(),J.getSeconds(),J.getMilliseconds()));return q.setUTCFullYear(J.getFullYear()),+Q-+q}function M2(Q,...J){let q=F5.bind(null,Q||J.find((Y)=>typeof Y==="object"));return J.map(q)}function cN(Q,J){let q=e0(Q,J?.in);return q.setHours(0,0,0,0),q}function Vz(Q,J,q){let[Y,U]=M2(q?.in,Q,J),K=cN(Y),H=cN(U),M=+K-c9(K),F=+H-c9(H);return Math.round((M-F)/Lz)}function Ez(Q,J){let q=Lq(Q,J),Y=F5(J?.in||Q,0);return Y.setFullYear(q,0,4),Y.setHours(0,0,0,0),_$(Y)}function l9(Q,J){let q=+e0(Q)-+e0(J);if(q<0)return-1;else if(q>0)return 1;return q}function Pz(Q){return F5(Q,Date.now())}function Cz(Q){return Q instanceof Date||typeof Q==="object"&&Object.prototype.toString.call(Q)==="[object Date]"}function Iz(Q){return!(!Cz(Q)&&typeof Q!=="number"||isNaN(+e0(Q)))}function jz(Q,J,q){let[Y,U]=M2(q?.in,Q,J),K=Y.getFullYear()-U.getFullYear(),H=Y.getMonth()-U.getMonth();return K*12+H}function Oz(Q){return(J)=>{let Y=(Q?Math[Q]:Math.trunc)(J);return Y===0?0:Y}}function Dz(Q,J){return+e0(Q)-+e0(J)}function Az(Q,J){let q=e0(Q,J?.in);return q.setHours(23,59,59,999),q}function Sz(Q,J){let q=e0(Q,J?.in),Y=q.getMonth();return q.setFullYear(q.getFullYear(),Y+1,0),q.setHours(23,59,59,999),q}function vz(Q,J){let q=e0(Q,J?.in);return+Az(q,J)===+Sz(q,J)}function kz(Q,J,q){let[Y,U,K]=M2(q?.in,Q,Q,J),H=l9(U,K),M=Math.abs(jz(U,K));if(M<1)return 0;if(U.getMonth()===1&&U.getDate()>27)U.setDate(30);U.setMonth(U.getMonth()-H*M);let F=l9(U,K)===-H;if(vz(Y)&&M===1&&l9(Y,K)===1)F=!1;let R=H*(M-+F);return R===0?0:R}function bz(Q,J,q){let Y=Dz(Q,J)/1000;return Oz(q?.roundingMethod)(Y)}function fz(Q,J){let q=e0(Q,J?.in);return q.setFullYear(q.getFullYear(),0,1),q.setHours(0,0,0,0),q}var dO={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"}},yz=(Q,J,q)=>{let Y,U=dO[Q];if(typeof U==="string")Y=U;else if(J===1)Y=U.one;else Y=U.other.replace("{{count}}",J.toString());if(q?.addSuffix)if(q.comparison&&q.comparison>0)return"in "+Y;else return Y+" ago";return Y};function Vq(Q){return(J={})=>{let q=J.width?String(J.width):Q.defaultWidth;return Q.formats[q]||Q.formats[Q.defaultWidth]}}var pO={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},cO={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},lO={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},gz={date:Vq({formats:pO,defaultWidth:"full"}),time:Vq({formats:cO,defaultWidth:"full"}),dateTime:Vq({formats:lO,defaultWidth:"full"})};var rO={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},hz=(Q,J,q,Y)=>rO[Q];function r9(Q){return(J,q)=>{let Y=q?.context?String(q.context):"standalone",U;if(Y==="formatting"&&Q.formattingValues){let H=Q.defaultFormattingWidth||Q.defaultWidth,M=q?.width?String(q.width):H;U=Q.formattingValues[M]||Q.formattingValues[H]}else{let H=Q.defaultWidth,M=q?.width?String(q.width):Q.defaultWidth;U=Q.values[M]||Q.values[H]}let K=Q.argumentCallback?Q.argumentCallback(J):J;return U[K]}}var sO={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nO={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},oO={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"]},iO={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"]},aO={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"}},tO={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"}},eO=(Q,J)=>{let q=Number(Q),Y=q%100;if(Y>20||Y<10)switch(Y%10){case 1:return q+"st";case 2:return q+"nd";case 3:return q+"rd"}return q+"th"},xz={ordinalNumber:eO,era:r9({values:sO,defaultWidth:"wide"}),quarter:r9({values:nO,defaultWidth:"wide",argumentCallback:(Q)=>Q-1}),month:r9({values:oO,defaultWidth:"wide"}),day:r9({values:iO,defaultWidth:"wide"}),dayPeriod:r9({values:aO,defaultWidth:"wide",formattingValues:tO,defaultFormattingWidth:"wide"})};function s9(Q){return(J,q={})=>{let Y=q.width,U=Y&&Q.matchPatterns[Y]||Q.matchPatterns[Q.defaultMatchWidth],K=J.match(U);if(!K)return null;let H=K[0],M=Y&&Q.parsePatterns[Y]||Q.parsePatterns[Q.defaultParseWidth],F=Array.isArray(M)?ZD(M,(z)=>z.test(H)):$D(M,(z)=>z.test(H)),R;R=Q.valueCallback?Q.valueCallback(F):F,R=q.valueCallback?q.valueCallback(R):R;let T=J.slice(H.length);return{value:R,rest:T}}}function $D(Q,J){for(let q in Q)if(Object.prototype.hasOwnProperty.call(Q,q)&&J(Q[q]))return q;return}function ZD(Q,J){for(let q=0;q<Q.length;q++)if(J(Q[q]))return q;return}function uz(Q){return(J,q={})=>{let Y=J.match(Q.matchPattern);if(!Y)return null;let U=Y[0],K=J.match(Q.parsePattern);if(!K)return null;let H=Q.valueCallback?Q.valueCallback(K[0]):K[0];H=q.valueCallback?q.valueCallback(H):H;let M=J.slice(U.length);return{value:H,rest:M}}}var QD=/^(\d+)(th|st|nd|rd)?/i,GD=/\d+/i,JD={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},qD={any:[/^b/i,/^(a|c)/i]},XD={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]},UD={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},ND={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},MD={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}},mz={ordinalNumber:uz({matchPattern:QD,parsePattern:GD,valueCallback:(Q)=>parseInt(Q,10)}),era:s9({matchPatterns:JD,defaultMatchWidth:"wide",parsePatterns:qD,defaultParseWidth:"any"}),quarter:s9({matchPatterns:XD,defaultMatchWidth:"wide",parsePatterns:YD,defaultParseWidth:"any",valueCallback:(Q)=>Q+1}),month:s9({matchPatterns:UD,defaultMatchWidth:"wide",parsePatterns:ND,defaultParseWidth:"any"}),day:s9({matchPatterns:KD,defaultMatchWidth:"wide",parsePatterns:BD,defaultParseWidth:"any"}),dayPeriod:s9({matchPatterns:HD,defaultMatchWidth:"any",parsePatterns:MD,defaultParseWidth:"any"})};var JQ={code:"en-US",formatDistance:yz,formatLong:gz,formatRelative:hz,localize:xz,match:mz,options:{weekStartsOn:0,firstWeekContainsDate:1}};function dz(Q,J){let q=e0(Q,J?.in);return Vz(q,fz(q))+1}function pz(Q,J){let q=e0(Q,J?.in),Y=+_$(q)-+Ez(q);return Math.round(Y/_q)+1}function Eq(Q,J){let q=e0(Q,J?.in),Y=q.getFullYear(),U=P8(),K=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??U.firstWeekContainsDate??U.locale?.options?.firstWeekContainsDate??1,H=F5(J?.in||Q,0);H.setFullYear(Y+1,0,K),H.setHours(0,0,0,0);let M=X6(H,J),F=F5(J?.in||Q,0);F.setFullYear(Y,0,K),F.setHours(0,0,0,0);let R=X6(F,J);if(+q>=+M)return Y+1;else if(+q>=+R)return Y;else return Y-1}function cz(Q,J){let q=P8(),Y=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??q.firstWeekContainsDate??q.locale?.options?.firstWeekContainsDate??1,U=Eq(Q,J),K=F5(J?.in||Q,0);return K.setFullYear(U,0,Y),K.setHours(0,0,0,0),X6(K,J)}function lz(Q,J){let q=e0(Q,J?.in),Y=+X6(q,J)-+cz(q,J);return Math.round(Y/_q)+1}function Q1(Q,J){let q=Q<0?"-":"",Y=Math.abs(Q).toString().padStart(J,"0");return q+Y}var Y6={y(Q,J){let q=Q.getFullYear(),Y=q>0?q:1-q;return Q1(J==="yy"?Y%100:Y,J.length)},M(Q,J){let q=Q.getMonth();return J==="M"?String(q+1):Q1(q+1,2)},d(Q,J){return Q1(Q.getDate(),J.length)},a(Q,J){let q=Q.getHours()/12>=1?"pm":"am";switch(J){case"a":case"aa":return q.toUpperCase();case"aaa":return q;case"aaaaa":return q[0];case"aaaa":default:return q==="am"?"a.m.":"p.m."}},h(Q,J){return Q1(Q.getHours()%12||12,J.length)},H(Q,J){return Q1(Q.getHours(),J.length)},m(Q,J){return Q1(Q.getMinutes(),J.length)},s(Q,J){return Q1(Q.getSeconds(),J.length)},S(Q,J){let q=J.length,Y=Q.getMilliseconds(),U=Math.trunc(Y*Math.pow(10,q-3));return Q1(U,J.length)}};var n9={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},lN={G:function(Q,J,q){let Y=Q.getFullYear()>0?1:0;switch(J){case"G":case"GG":case"GGG":return q.era(Y,{width:"abbreviated"});case"GGGGG":return q.era(Y,{width:"narrow"});case"GGGG":default:return q.era(Y,{width:"wide"})}},y:function(Q,J,q){if(J==="yo"){let Y=Q.getFullYear(),U=Y>0?Y:1-Y;return q.ordinalNumber(U,{unit:"year"})}return Y6.y(Q,J)},Y:function(Q,J,q,Y){let U=Eq(Q,Y),K=U>0?U:1-U;if(J==="YY"){let H=K%100;return Q1(H,2)}if(J==="Yo")return q.ordinalNumber(K,{unit:"year"});return Q1(K,J.length)},R:function(Q,J){let q=Lq(Q);return Q1(q,J.length)},u:function(Q,J){let q=Q.getFullYear();return Q1(q,J.length)},Q:function(Q,J,q){let Y=Math.ceil((Q.getMonth()+1)/3);switch(J){case"Q":return String(Y);case"QQ":return Q1(Y,2);case"Qo":return q.ordinalNumber(Y,{unit:"quarter"});case"QQQ":return q.quarter(Y,{width:"abbreviated",context:"formatting"});case"QQQQQ":return q.quarter(Y,{width:"narrow",context:"formatting"});case"QQQQ":default:return q.quarter(Y,{width:"wide",context:"formatting"})}},q:function(Q,J,q){let Y=Math.ceil((Q.getMonth()+1)/3);switch(J){case"q":return String(Y);case"qq":return Q1(Y,2);case"qo":return q.ordinalNumber(Y,{unit:"quarter"});case"qqq":return q.quarter(Y,{width:"abbreviated",context:"standalone"});case"qqqqq":return q.quarter(Y,{width:"narrow",context:"standalone"});case"qqqq":default:return q.quarter(Y,{width:"wide",context:"standalone"})}},M:function(Q,J,q){let Y=Q.getMonth();switch(J){case"M":case"MM":return Y6.M(Q,J);case"Mo":return q.ordinalNumber(Y+1,{unit:"month"});case"MMM":return q.month(Y,{width:"abbreviated",context:"formatting"});case"MMMMM":return q.month(Y,{width:"narrow",context:"formatting"});case"MMMM":default:return q.month(Y,{width:"wide",context:"formatting"})}},L:function(Q,J,q){let Y=Q.getMonth();switch(J){case"L":return String(Y+1);case"LL":return Q1(Y+1,2);case"Lo":return q.ordinalNumber(Y+1,{unit:"month"});case"LLL":return q.month(Y,{width:"abbreviated",context:"standalone"});case"LLLLL":return q.month(Y,{width:"narrow",context:"standalone"});case"LLLL":default:return q.month(Y,{width:"wide",context:"standalone"})}},w:function(Q,J,q,Y){let U=lz(Q,Y);if(J==="wo")return q.ordinalNumber(U,{unit:"week"});return Q1(U,J.length)},I:function(Q,J,q){let Y=pz(Q);if(J==="Io")return q.ordinalNumber(Y,{unit:"week"});return Q1(Y,J.length)},d:function(Q,J,q){if(J==="do")return q.ordinalNumber(Q.getDate(),{unit:"date"});return Y6.d(Q,J)},D:function(Q,J,q){let Y=dz(Q);if(J==="Do")return q.ordinalNumber(Y,{unit:"dayOfYear"});return Q1(Y,J.length)},E:function(Q,J,q){let Y=Q.getDay();switch(J){case"E":case"EE":case"EEE":return q.day(Y,{width:"abbreviated",context:"formatting"});case"EEEEE":return q.day(Y,{width:"narrow",context:"formatting"});case"EEEEEE":return q.day(Y,{width:"short",context:"formatting"});case"EEEE":default:return q.day(Y,{width:"wide",context:"formatting"})}},e:function(Q,J,q,Y){let U=Q.getDay(),K=(U-Y.weekStartsOn+8)%7||7;switch(J){case"e":return String(K);case"ee":return Q1(K,2);case"eo":return q.ordinalNumber(K,{unit:"day"});case"eee":return q.day(U,{width:"abbreviated",context:"formatting"});case"eeeee":return q.day(U,{width:"narrow",context:"formatting"});case"eeeeee":return q.day(U,{width:"short",context:"formatting"});case"eeee":default:return q.day(U,{width:"wide",context:"formatting"})}},c:function(Q,J,q,Y){let U=Q.getDay(),K=(U-Y.weekStartsOn+8)%7||7;switch(J){case"c":return String(K);case"cc":return Q1(K,J.length);case"co":return q.ordinalNumber(K,{unit:"day"});case"ccc":return q.day(U,{width:"abbreviated",context:"standalone"});case"ccccc":return q.day(U,{width:"narrow",context:"standalone"});case"cccccc":return q.day(U,{width:"short",context:"standalone"});case"cccc":default:return q.day(U,{width:"wide",context:"standalone"})}},i:function(Q,J,q){let Y=Q.getDay(),U=Y===0?7:Y;switch(J){case"i":return String(U);case"ii":return Q1(U,J.length);case"io":return q.ordinalNumber(U,{unit:"day"});case"iii":return q.day(Y,{width:"abbreviated",context:"formatting"});case"iiiii":return q.day(Y,{width:"narrow",context:"formatting"});case"iiiiii":return q.day(Y,{width:"short",context:"formatting"});case"iiii":default:return q.day(Y,{width:"wide",context:"formatting"})}},a:function(Q,J,q){let U=Q.getHours()/12>=1?"pm":"am";switch(J){case"a":case"aa":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"});case"aaa":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return q.dayPeriod(U,{width:"narrow",context:"formatting"});case"aaaa":default:return q.dayPeriod(U,{width:"wide",context:"formatting"})}},b:function(Q,J,q){let Y=Q.getHours(),U;if(Y===12)U=n9.noon;else if(Y===0)U=n9.midnight;else U=Y/12>=1?"pm":"am";switch(J){case"b":case"bb":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"});case"bbb":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return q.dayPeriod(U,{width:"narrow",context:"formatting"});case"bbbb":default:return q.dayPeriod(U,{width:"wide",context:"formatting"})}},B:function(Q,J,q){let Y=Q.getHours(),U;if(Y>=17)U=n9.evening;else if(Y>=12)U=n9.afternoon;else if(Y>=4)U=n9.morning;else U=n9.night;switch(J){case"B":case"BB":case"BBB":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"});case"BBBBB":return q.dayPeriod(U,{width:"narrow",context:"formatting"});case"BBBB":default:return q.dayPeriod(U,{width:"wide",context:"formatting"})}},h:function(Q,J,q){if(J==="ho"){let Y=Q.getHours()%12;if(Y===0)Y=12;return q.ordinalNumber(Y,{unit:"hour"})}return Y6.h(Q,J)},H:function(Q,J,q){if(J==="Ho")return q.ordinalNumber(Q.getHours(),{unit:"hour"});return Y6.H(Q,J)},K:function(Q,J,q){let Y=Q.getHours()%12;if(J==="Ko")return q.ordinalNumber(Y,{unit:"hour"});return Q1(Y,J.length)},k:function(Q,J,q){let Y=Q.getHours();if(Y===0)Y=24;if(J==="ko")return q.ordinalNumber(Y,{unit:"hour"});return Q1(Y,J.length)},m:function(Q,J,q){if(J==="mo")return q.ordinalNumber(Q.getMinutes(),{unit:"minute"});return Y6.m(Q,J)},s:function(Q,J,q){if(J==="so")return q.ordinalNumber(Q.getSeconds(),{unit:"second"});return Y6.s(Q,J)},S:function(Q,J){return Y6.S(Q,J)},X:function(Q,J,q){let Y=Q.getTimezoneOffset();if(Y===0)return"Z";switch(J){case"X":return sz(Y);case"XXXX":case"XX":return L$(Y);case"XXXXX":case"XXX":default:return L$(Y,":")}},x:function(Q,J,q){let Y=Q.getTimezoneOffset();switch(J){case"x":return sz(Y);case"xxxx":case"xx":return L$(Y);case"xxxxx":case"xxx":default:return L$(Y,":")}},O:function(Q,J,q){let Y=Q.getTimezoneOffset();switch(J){case"O":case"OO":case"OOO":return"GMT"+rz(Y,":");case"OOOO":default:return"GMT"+L$(Y,":")}},z:function(Q,J,q){let Y=Q.getTimezoneOffset();switch(J){case"z":case"zz":case"zzz":return"GMT"+rz(Y,":");case"zzzz":default:return"GMT"+L$(Y,":")}},t:function(Q,J,q){let Y=Math.trunc(+Q/1000);return Q1(Y,J.length)},T:function(Q,J,q){return Q1(+Q,J.length)}};function rz(Q,J=""){let q=Q>0?"-":"+",Y=Math.abs(Q),U=Math.trunc(Y/60),K=Y%60;if(K===0)return q+String(U);return q+String(U)+J+Q1(K,2)}function sz(Q,J){if(Q%60===0)return(Q>0?"-":"+")+Q1(Math.abs(Q)/60,2);return L$(Q,J)}function L$(Q,J=""){let q=Q>0?"-":"+",Y=Math.abs(Q),U=Q1(Math.trunc(Y/60),2),K=Q1(Y%60,2);return q+U+J+K}var nz=(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"})}},oz=(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"})}},FD=(Q,J)=>{let q=Q.match(/(P+)(p+)?/)||[],Y=q[1],U=q[2];if(!U)return nz(Q,J);let K;switch(Y){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}}",nz(Y,J)).replace("{{time}}",oz(U,J))},iz={p:oz,P:FD};var WD=/^D+$/,wD=/^Y+$/,RD=["D","DD","YY","YYYY"];function az(Q){return WD.test(Q)}function tz(Q){return wD.test(Q)}function ez(Q,J,q){let Y=TD(Q,J,q);if(console.warn(Y),RD.includes(Q))throw RangeError(Y)}function TD(Q,J,q){let Y=Q[0]==="Y"?"years":"days of the month";return`Use \`${Q.toLowerCase()}\` instead of \`${Q}\` (in \`${J}\`) for formatting ${Y} to the input \`${q}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var zD=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,_D=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,LD=/^'([^]*?)'?$/,VD=/''/g,ED=/[a-zA-Z]/;function u4(Q,J,q){let Y=P8(),U=q?.locale??Y.locale??JQ,K=q?.firstWeekContainsDate??q?.locale?.options?.firstWeekContainsDate??Y.firstWeekContainsDate??Y.locale?.options?.firstWeekContainsDate??1,H=q?.weekStartsOn??q?.locale?.options?.weekStartsOn??Y.weekStartsOn??Y.locale?.options?.weekStartsOn??0,M=e0(Q,q?.in);if(!Iz(M))throw RangeError("Invalid time value");let F=J.match(_D).map((T)=>{let z=T[0];if(z==="p"||z==="P"){let L=iz[z];return L(T,U.formatLong)}return T}).join("").match(zD).map((T)=>{if(T==="''")return{isToken:!1,value:"'"};let z=T[0];if(z==="'")return{isToken:!1,value:PD(T)};if(lN[z])return{isToken:!0,value:T};if(z.match(ED))throw RangeError("Format string contains an unescaped latin alphabet character `"+z+"`");return{isToken:!1,value:T}});if(U.localize.preprocessor)F=U.localize.preprocessor(M,F);let R={firstWeekContainsDate:K,weekStartsOn:H,locale:U};return F.map((T)=>{if(!T.isToken)return T.value;let z=T.value;if(!q?.useAdditionalWeekYearTokens&&tz(z)||!q?.useAdditionalDayOfYearTokens&&az(z))ez(z,J,String(Q));let L=lN[z[0]];return L(M,z,U.localize,R)}).join("")}function PD(Q){let J=Q.match(LD);if(!J)return Q;return J[1].replace(VD,"'")}function $_(Q,J,q){let Y=P8(),U=q?.locale??Y.locale??JQ,K=2520,H=l9(Q,J);if(isNaN(H))throw RangeError("Invalid time value");let M=Object.assign({},q,{addSuffix:q?.addSuffix,comparison:H}),[F,R]=M2(q?.in,...H>0?[J,Q]:[Q,J]),T=bz(R,F),z=(c9(R)-c9(F))/1000,L=Math.round((T-z)/60),P;if(L<2)if(q?.includeSeconds)if(T<5)return U.formatDistance("lessThanXSeconds",5,M);else if(T<10)return U.formatDistance("lessThanXSeconds",10,M);else if(T<20)return U.formatDistance("lessThanXSeconds",20,M);else if(T<40)return U.formatDistance("halfAMinute",0,M);else if(T<60)return U.formatDistance("lessThanXMinutes",1,M);else return U.formatDistance("xMinutes",1,M);else if(L===0)return U.formatDistance("lessThanXMinutes",1,M);else return U.formatDistance("xMinutes",L,M);else if(L<45)return U.formatDistance("xMinutes",L,M);else if(L<90)return U.formatDistance("aboutXHours",1,M);else if(L<dN){let I=Math.round(L/60);return U.formatDistance("aboutXHours",I,M)}else if(L<2520)return U.formatDistance("xDays",1,M);else if(L<GQ){let I=Math.round(L/dN);return U.formatDistance("xDays",I,M)}else if(L<GQ*2)return P=Math.round(L/GQ),U.formatDistance("aboutXMonths",P,M);if(P=kz(R,F),P<12){let I=Math.round(L/GQ);return U.formatDistance("xMonths",I,M)}else{let I=P%12,A=Math.trunc(P/12);if(I<3)return U.formatDistance("aboutXYears",A,M);else if(I<9)return U.formatDistance("overXYears",A,M);else return U.formatDistance("almostXYears",A+1,M)}}function Z_(Q,J){return $_(Q,Pz(Q),J)}var m5=R0(G1(),1),Y5=["#a78bfa","#22d3ee","#ec4899","#4ade80","#fbbf24","#f87171","#60a5fa"],Pq={dark:{legendLabel:"#94a3b8",tooltipBackground:"#16161e",tooltipTitle:"#f8fafc",tooltipBody:"#94a3b8",tooltipBorder:"rgba(255, 255, 255, 0.1)",grid:"rgba(255, 255, 255, 0.06)",tick:"#64748b"},light:{legendLabel:"#475569",tooltipBackground:"#ffffff",tooltipTitle:"#0f172a",tooltipBody:"#334155",tooltipBorder:"rgba(15, 23, 42, 0.18)",grid:"rgba(15, 23, 42, 0.08)",tick:"#64748b"}};function Cq(Q){let{chartTheme:J,showLegend:q,defaultLabel:Y,formatValue:U,footer:K}=Q;return{legend:{display:q,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 M=H.dataset.label??Y,F=H.parsed.y??0;return`${M}: ${U(F)}`},...K?{footer:K}:{}}}}}function Iq(Q){let{chartTheme:J,formatY:q}=Q,Y={grid:{color:J.grid,drawBorder:!1},ticks:{color:J.tick,font:{size:11}}},U={...Y,ticks:{...Y.ticks,callback:(K)=>q(Number(K))},min:0};return{sharedScaleBase:Y,yScale:U}}function jq(Q){return{borderColor:Q,backgroundColor:`${Q}20`,fill:!0,tension:0,pointRadius:3,pointHoverRadius:4,borderWidth:2}}function Oq(Q){return{backgroundColor:Q,borderColor:Q,borderWidth:0,borderRadius:3}}function o9(Q,J){return Q.datasets.map((q,Y)=>({label:q.label,data:q.data,...J(Y)}))}function Dq(Q,J,q){if(Q.length===0)return{labels:[],datasets:[]};let{initBucket:Y,accumulate:U,bucketToValue:K}=q,H=new Map;for(let F of Q){let R=H.get(F.timestamp)??Y();U(R,F),H.set(F.timestamp,R)}let M=[...H.entries()].sort((F,R)=>F[0]-R[0]);return{labels:M.map(([F])=>u4(new Date(F),"MMM d")),datasets:[{label:J,data:M.map(([,F])=>K(F))}]}}function Aq(Q,J){if(Q.length===0)return{labels:[],datasets:[]};let{topN:q=5,rankWeight:Y,initBucket:U,accumulate:K,bucketToValue:H}=J,M=new Map;for(let g of Q){let m=`${g.model}::${g.provider}`,o=M.get(m);if(o)o.weight+=Y(g);else M.set(m,{model:g.model,provider:g.provider,weight:Y(g)})}let R=[...M.entries()].sort((g,m)=>m[1].weight-g[1].weight).slice(0,q),T=new Set(R.map(([g])=>g)),z=new Map;for(let[,{model:g}]of R)z.set(g,(z.get(g)??0)+1);let L=new Map;for(let[g,{model:m,provider:o}]of R)L.set(g,(z.get(m)??0)>1?`${m} (${o})`:m);let P=[...new Set(Q.map((g)=>g.timestamp))].sort((g,m)=>g-m),I=R.map(([g])=>L.get(g)??g);if(Q.some((g)=>!T.has(`${g.model}::${g.provider}`)))I.push("Other");let C=new Map;for(let g of P)C.set(g,{});for(let g of Q){let m=`${g.model}::${g.provider}`,o=T.has(m)?L.get(m)??g.model:"Other",i=C.get(g.timestamp);if(!i)continue;let s=i[o]??U();K(s,g),i[o]=s}return{labels:P.map((g)=>u4(new Date(g),"MMM d")),datasets:I.map((g)=>({label:g,data:P.map((m)=>{let o=C.get(m)?.[g];return o?H(o):0})}))}}function ID({byModel:Q,onChange:J}){return m5.jsxDEV("div",{className:"flex bg-[var(--bg-surface)] rounded-[var(--radius-sm)] p-0.5 border border-[var(--border-subtle)]",children:[m5.jsxDEV("button",{type:"button",onClick:()=>J(!1),className:`tab-btn text-xs ${!Q?"active":""}`,children:"All Models"},void 0,!1,void 0,this),m5.jsxDEV("button",{type:"button",onClick:()=>J(!0),className:`tab-btn text-xs ${Q?"active":""}`,children:"By Model"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function Sq({title:Q,subtitle:J,empty:q,emptyMessage:Y,controls:U,byModel:K,onByModelChange:H,children:M}){return m5.jsxDEV("div",{className:"surface overflow-hidden",children:[m5.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)] flex items-center justify-between gap-4 flex-wrap",children:[m5.jsxDEV("div",{children:[m5.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),m5.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-1",children:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m5.jsxDEV("div",{className:"flex items-center gap-2 flex-wrap",children:[U,m5.jsxDEV(ID,{byModel:K,onChange:H},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),m5.jsxDEV("div",{className:"p-5 min-h-[320px]",children:q?m5.jsxDEV("div",{className:"h-full flex items-center justify-center text-[var(--text-muted)] text-sm",children:Y},void 0,!1,void 0,this):m5.jsxDEV("div",{className:"h-[280px]",children:M},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var i9=R0(G1(),1);P5.register(h4,x4,QQ,u5,g4,L8,V8,_8,p9);var rN=[{value:"yelling",label:"Yelling"},{value:"profanity",label:"Profanity"},{value:"anguish",label:"Anguish (!!!, nooo, dude, ..)"},{value:"negation",label:"Negation (no/nope/wrong)"},{value:"repetition",label:"Repetition (i meant, still doesnt)"},{value:"blame",label:"Blame (you didnt, stop X-ing)"},{value:"frustration",label:"Frustration (neg + rep + blame)"},{value:"total",label:"All signals combined"}];function Q_(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 G_(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 J_(Q,J){if(J<=0)return 0;return Q/J*100}function jD(Q,J){let q=rN.find((Y)=>Y.value===J)?.label??"Hits";return Dq(Q,q,{initBucket:()=>({hits:0,messages:0}),accumulate:(Y,U)=>{Y.hits+=G_(U,J),Y.messages+=U.messages},bucketToValue:(Y)=>J_(Y.hits,Y.messages)})}function OD(Q,J){return Aq(Q,{rankWeight:(q)=>q.messages,initBucket:()=>({hits:0,messages:0}),accumulate:(q,Y)=>{q.hits+=G_(Y,J),q.messages+=Y.messages},bucketToValue:(q)=>J_(q.hits,q.messages)})}function q_({behaviorSeries:Q}){let[J,q]=qQ.useState(!1),[Y,U]=qQ.useState("total"),K=E8(),H=Pq[K],M=qQ.useMemo(()=>J?OD(Q,Y):jD(Q,Y),[Q,J,Y]),F=Cq({chartTheme:H,showLegend:J,defaultLabel:"Hits",formatValue:Q_}),{sharedScaleBase:R,yScale:T}=Iq({chartTheme:H,formatY:Q_}),z=rN.find((I)=>I.value===Y)?.label??"",L=i9.jsxDEV("div",{className:"flex bg-[var(--bg-surface)] rounded-[var(--radius-sm)] p-0.5 border border-[var(--border-subtle)]",children:rN.map((I)=>i9.jsxDEV("button",{type:"button",onClick:()=>U(I.value),className:`tab-btn text-xs ${Y===I.value?"active":""}`,children:I.label},I.value,!1,void 0,this))},void 0,!1,void 0,this),P;if(J){let I={labels:M.labels,datasets:o9(M,(C)=>jq(Y5[C%Y5.length]))};P=i9.jsxDEV(E4,{data:I,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:F,scales:{x:R,y:T}}},void 0,!1,void 0,this)}else{let I={labels:M.labels,datasets:o9(M,(C)=>Oq(Y5[C%Y5.length]))},A={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:F,scales:{x:{...R,stacked:!0},y:{...T,stacked:!0}},layout:{padding:{top:8}}};P=i9.jsxDEV(Tq,{data:I,options:A},void 0,!1,void 0,this)}return i9.jsxDEV(Sq,{title:"User Tantrums",subtitle:`${z} as % of user messages per day`,empty:M.labels.length===0,emptyMessage:"No behavioral data yet. Sync to scan your sessions.",controls:L,byModel:J,onByModelChange:q,children:P},void 0,!1,void 0,this)}var rq=R0(e1(),1);var bq=R0(e1(),1);var vq=(...Q)=>Q.filter((J,q,Y)=>{return Boolean(J)&&J.trim()!==""&&Y.indexOf(J)===q}).join(" ").trim();var X_=(Q)=>Q.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var Y_=(Q)=>Q.replace(/^([A-Z])|[\s-_]+(\w)/g,(J,q,Y)=>Y?Y.toUpperCase():q.toLowerCase());var sN=(Q)=>{let J=Y_(Q);return J.charAt(0).toUpperCase()+J.slice(1)};var XQ=R0(e1(),1);var kq={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 U_=(Q)=>{for(let J in Q)if(J.startsWith("aria-")||J==="role"||J==="title")return!0;return!1};var a9=R0(e1(),1),DD=a9.createContext({});var N_=()=>a9.useContext(DD);var K_=XQ.forwardRef(({color:Q,size:J,strokeWidth:q,absoluteStrokeWidth:Y,className:U="",children:K,iconNode:H,...M},F)=>{let{size:R=24,strokeWidth:T=2,absoluteStrokeWidth:z=!1,color:L="currentColor",className:P=""}=N_()??{},I=Y??z?Number(q??T)*24/Number(J??R):q??T;return XQ.createElement("svg",{ref:F,...kq,width:J??R??kq.width,height:J??R??kq.height,stroke:Q??L,strokeWidth:I,className:vq("lucide",P,U),...!K&&!U_(M)&&{"aria-hidden":"true"},...M},[...H.map(([A,C])=>XQ.createElement(A,C)),...Array.isArray(K)?K:[K]])});var x0=(Q,J)=>{let q=bq.forwardRef(({className:Y,...U},K)=>bq.createElement(K_,{ref:K,iconNode:J,className:vq(`lucide-${X_(sN(Q))}`,`lucide-${Q}`,Y),...U}));return q.displayName=sN(Q),q};var AD=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],F2=x0("chart-column",AD);var SD=[["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"}]],W2=x0("circle-alert",SD);var vD=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],w2=x0("circle-check",vD);var kD=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],R2=x0("circle-x",kD);var bD=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]],T2=x0("file-braces",bD);var fD=[["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"}]],E$=x0("activity",fD);var yD=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],YQ=x0("chevron-down",yD);var gD=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],UQ=x0("chevron-up",gD);var hD=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],NQ=x0("clock",hD);var xD=[["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"}]],KQ=x0("coins",xD);var uD=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],BQ=x0("database",uD);var mD=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],HQ=x0("download",mD);var dD=[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]],MQ=x0("gauge",dD);var pD=[["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"}]],FQ=x0("hash",pD);var cD=[["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"}]],WQ=x0("refresh-cw",cD);var lD=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],wQ=x0("server",lD);var rD=[["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"}]],P$=x0("star",rD);var sD=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],RQ=x0("upload",sD);var nD=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],TQ=x0("x",nD);var oD=[["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"}]],C$=x0("zap",oD);var P1=R0(G1(),1),fq={dark:{legendLabel:"#cbd5e1",tooltipBackground:"#16161e",tooltipTitle:"#f8fafc",tooltipBody:"#94a3b8",tooltipBorder:"rgba(255, 255, 255, 0.1)",grid:"rgba(255, 255, 255, 0.06)",tick:"#94a3b8"},light:{legendLabel:"#334155",tooltipBackground:"#ffffff",tooltipTitle:"#0f172a",tooltipBody:"#334155",tooltipBorder:"rgba(15, 23, 42, 0.18)",grid:"rgba(15, 23, 42, 0.08)",tick:"#475569"}};function U6(Q){return{borderColor:Q,backgroundColor:"transparent",tension:0.4,pointRadius:0,borderWidth:2}}function yq({timestamps:Q,values:J,color:q}){let Y={labels:Q.map((K)=>u4(new Date(K),"MMM d")),datasets:[{data:J,...U6(q)}]};return P1.jsxDEV(E4,{data:Y,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 gq(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 B_(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 H_(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 hq({title:Q,subtitle:J,children:q}){return P1.jsxDEV("div",{className:"surface overflow-hidden",children:[P1.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)]",children:[P1.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),J?P1.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),P1.jsxDEV("div",{className:"overflow-x-auto",children:q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function iD(Q){if(Q==="right")return"text-right";if(Q==="center")return"text-center";return""}function xq({columns:Q,gridTemplate:J}){return P1.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((q)=>P1.jsxDEV("div",{className:iD(q.align),children:q.label},q.label,!1,void 0,this)),P1.jsxDEV("div",{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function uq({children:Q}){return P1.jsxDEV("div",{className:"max-h-[calc(100vh-300px)] overflow-y-auto",children:Q},void 0,!1,void 0,this)}function mq({model:Q,provider:J}){return P1.jsxDEV("div",{children:[P1.jsxDEV("div",{className:"font-medium text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),P1.jsxDEV("div",{className:"text-xs text-[var(--text-muted)]",children:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function dq({gridTemplate:Q,cells:J,trendCell:q,isExpanded:Y,onToggle:U,expandedContent:K}){return P1.jsxDEV("div",{className:"border-t border-[var(--border-subtle)]",children:[P1.jsxDEV("button",{type:"button",onClick:U,className:"w-full bg-transparent border-none text-left px-5 py-3 cursor-pointer hover:bg-[var(--bg-hover)] transition-colors",children:P1.jsxDEV("div",{className:"grid gap-3 items-center",style:{gridTemplateColumns:Q},children:[J,P1.jsxDEV("div",{className:"h-10",children:q},void 0,!1,void 0,this),P1.jsxDEV("div",{className:"flex justify-center text-[var(--text-muted)]",children:Y?P1.jsxDEV(UQ,{size:16},void 0,!1,void 0,this):P1.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),Y?P1.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 pq(){return P1.jsxDEV("div",{className:"text-[var(--text-muted)] text-center text-sm",children:"-"},void 0,!1,void 0,this)}function cq({message:Q="No data available"}){return P1.jsxDEV("div",{className:"h-full flex items-center justify-center text-[var(--text-muted)] text-sm",children:Q},void 0,!1,void 0,this)}var r0=R0(G1(),1);P5.register(h4,x4,g4,u5,L8,V8,_8);var lq={yelling:"#fbbf24",profanity:"#f87171",anguish:"#a78bfa",frustration:"#22d3ee"},M_="2fr 0.9fr 0.8fr 0.8fr 0.8fr 0.9fr 0.8fr 140px 40px";function W_(Q){return Q.toLocaleString()}function F_(Q){if(Q.totalMessages===0)return 0;return(Q.totalYelling+Q.totalProfanity+Q.totalAnguish+Q.totalNegation+Q.totalRepetition+Q.totalBlame)/Q.totalMessages}function t9(Q,J){if(J===0)return"-";let q=Q/J*100;if(q===0)return"0%";if(q<1)return`${q.toFixed(1)}%`;return`${q.toFixed(0)}%`}function w_({models:Q,behaviorSeries:J}){let[q,Y]=rq.useState(null),U=E8(),K=fq[U],H=rq.useMemo(()=>tD(J),[J]),M=[...Q].sort((F,R)=>{if(R.totalMessages!==F.totalMessages)return R.totalMessages-F.totalMessages;return F_(R)-F_(F)});return r0.jsxDEV(hq,{title:"Behavior by Model",subtitle:"How often each model elicited a tantrum — rates are per user message",children:[r0.jsxDEV(xq,{gridTemplate:M_,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(uq,{children:[M.map((F,R)=>{let T=`${F.model}::${F.provider}`,z=H.get(T)?.data??[],L=Y5[R%Y5.length],P=q===T,I=F.totalNegation+F.totalRepetition+F.totalBlame,A=F.totalYelling+F.totalProfanity+F.totalAnguish+I;return r0.jsxDEV(dq,{gridTemplate:M_,isExpanded:P,onToggle:()=>Y(P?null:T),cells:[r0.jsxDEV(mq,{model:F.model,provider:F.provider},"name",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:W_(F.totalMessages)},"messages",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(F.totalYelling,F.totalMessages)},"caps",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(F.totalProfanity,F.totalMessages)},"profanity",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(F.totalAnguish,F.totalMessages)},"anguish",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(I,F.totalMessages)},"frustration",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(A,F.totalMessages)},"hits",!1,void 0,this)],trendCell:z.length===0?r0.jsxDEV(pq,{},void 0,!1,void 0,this):r0.jsxDEV(yq,{timestamps:z.map((C)=>C.timestamp),values:z.map((C)=>C.total),color:L},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(I$,{label:"Yelling (CAPS)",total:F.totalYelling,messages:F.totalMessages,valueClass:"text-[var(--accent-amber,#fbbf24)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Profanity",total:F.totalProfanity,messages:F.totalMessages,valueClass:"text-[var(--accent-red,#f87171)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Anguish (!!!, nooo, dude, ..)",total:F.totalAnguish,messages:F.totalMessages,valueClass:"text-[var(--accent-violet,#a78bfa)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Negation (no/nope/wrong)",total:F.totalNegation,messages:F.totalMessages,valueClass:"text-[var(--accent-cyan,#22d3ee)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Repetition (i meant, still doesnt)",total:F.totalRepetition,messages:F.totalMessages,valueClass:"text-[var(--accent-cyan,#22d3ee)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Blame (you didnt, stop X-ing)",total:F.totalBlame,messages:F.totalMessages,valueClass:"text-[var(--accent-cyan,#22d3ee)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Avg chars / msg",total:F.totalChars,messages:F.totalMessages,valueClass:"text-[var(--text-secondary)]",mode:"average"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),r0.jsxDEV("div",{className:"h-[200px]",children:z.length===0?r0.jsxDEV(cq,{},void 0,!1,void 0,this):r0.jsxDEV(aD,{data:z,chartTheme:K},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},T,!1,void 0,this)}),M.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 I$({label:Q,total:J,messages:q,valueClass:Y,mode:U="rate"}){let K=U==="rate"?"% of msgs":"Per msg",H=q>0?U==="rate"?t9(J,q):(J/q).toFixed(0):"-";return r0.jsxDEV("div",{children:[r0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:Q},void 0,!1,void 0,this),r0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[r0.jsxDEV("div",{className:"flex items-center justify-between",children:[r0.jsxDEV("span",{children:"Total"},void 0,!1,void 0,this),r0.jsxDEV("span",{className:`font-mono ${Y}`,children:W_(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",{children:K},void 0,!1,void 0,this),r0.jsxDEV("span",{className:"font-mono",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)}function aD({data:Q,chartTheme:J}){let q={labels:Q.map((U)=>u4(new Date(U.timestamp),"MMM d")),datasets:[{label:"CAPS",data:Q.map((U)=>U.yelling),...U6(lq.yelling)},{label:"Profanity",data:Q.map((U)=>U.profanity),...U6(lq.profanity)},{label:"Anguish",data:Q.map((U)=>U.anguish),...U6(lq.anguish)},{label:"Frustration",data:Q.map((U)=>U.frustration),...U6(lq.frustration)}]},Y={responsive:!0,maintainAspectRatio:!1,plugins:gq(J),scales:B_(J)};return r0.jsxDEV(E4,{data:q,options:Y},void 0,!1,void 0,this)}function tD(Q){if(Q.length===0)return new Map;let J=[...new Set(Q.map((U)=>U.timestamp))].sort((U,K)=>U-K),q=new Map;for(let U of Q){let K=`${U.model}::${U.provider}`,H=q.get(K);if(!H)H=new Map,q.set(K,H);let M=H.get(U.timestamp)??{timestamp:U.timestamp,yelling:0,profanity:0,anguish:0,frustration:0,total:0};M.yelling+=U.yelling,M.profanity+=U.profanity,M.anguish+=U.anguish,M.frustration+=U.negation+U.repetition+U.blame,M.total=M.yelling+M.profanity+M.anguish+M.frustration,H.set(U.timestamp,M)}let Y=new Map;for(let[U,K]of q){let H=J.map((M)=>K.get(M)??{timestamp:M,yelling:0,profanity:0,anguish:0,frustration:0,total:0});Y.set(U,{data:H})}return Y}var R_=R0(e1(),1),$7=R0(G1(),1);function e9(Q){return Q.toLocaleString()}function sq(Q,J){if(J<=0)return;return`${(Q/J).toFixed(2)} / msg`}function T_({overall:Q,behaviorSeries:J}){let q=R_.useMemo(()=>{let H=new Map;for(let F of J){let R=`${F.model}::${F.provider}`,T=H.get(R),z=F.yelling+F.profanity+F.anguish+F.negation+F.repetition+F.blame;if(T)T.score+=z;else H.set(R,{model:F.model,provider:F.provider,score:z})}let M=null;for(let F of H.values())if(!M||F.score>M.score)M=F;return M},[J]),Y=Q.totalNegation+Q.totalRepetition+Q.totalBlame,U=Q.totalMessages,K=[{label:"Messages",value:e9(Q.totalMessages),sub:U>0?"in selected range":void 0},{label:"Yelling",value:e9(Q.totalYelling),sub:sq(Q.totalYelling,U)},{label:"Profanity hits",value:e9(Q.totalProfanity),sub:sq(Q.totalProfanity,U)},{label:"Anguish",value:e9(Q.totalAnguish),sub:sq(Q.totalAnguish,U)},{label:"Frustration",value:e9(Y),sub:sq(Y,U)},{label:"Most yelled-at",value:q?.model??"—",sub:q?`${e9(q.score)} hits`:void 0}];return $7.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-6 gap-4",children:K.map((H)=>$7.jsxDEV("div",{className:"surface px-4 py-3",children:[$7.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mb-1",children:H.label},void 0,!1,void 0,this),$7.jsxDEV("p",{className:"text-lg font-semibold text-[var(--text-primary)] truncate",title:H.value,children:H.value},void 0,!1,void 0,this),H.sub&&$7.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-0.5",children:H.sub},void 0,!1,void 0,this)]},H.label,!0,void 0,this))},void 0,!1,void 0,this)}var L_=R0(e1(),1);var nN=3600000,nq=24*nN,z_={"1h":{windowLabel:"the last hour",trendLabel:"1h Trend",bucketMs:nN,bucketCount:1,tickFormat:"HH:mm"},"24h":{windowLabel:"the last 24 hours",trendLabel:"24h Trend",bucketMs:nN,bucketCount:24,tickFormat:"HH:mm"},"7d":{windowLabel:"the last 7 days",trendLabel:"7d Trend",bucketMs:nq,bucketCount:7,tickFormat:"MMM d"},"30d":{windowLabel:"the last 30 days",trendLabel:"30d Trend",bucketMs:nq,bucketCount:30,tickFormat:"MMM d"},"90d":{windowLabel:"the last 90 days",trendLabel:"90d Trend",bucketMs:nq,bucketCount:90,tickFormat:"MMM d"},all:{windowLabel:"all time",trendLabel:"Trend",bucketMs:nq,bucketCount:0,tickFormat:"MMM d"}};function oq(Q){return z_[Q]}function __(Q,J){return u4(new Date(Q),z_[J].tickFormat)}var N6=R0(G1(),1);P5.register(h4,x4,g4,u5,L8,V8,_8,p9);var iq=["#a78bfa","#22d3ee","#ec4899","#4ade80","#fbbf24","#f87171","#60a5fa"],eD={dark:{legendLabel:"#94a3b8",tooltipBackground:"#16161e",tooltipTitle:"#f8fafc",tooltipBody:"#94a3b8",tooltipBorder:"rgba(255, 255, 255, 0.1)",grid:"rgba(255, 255, 255, 0.06)",tick:"#64748b"},light:{legendLabel:"#475569",tooltipBackground:"#ffffff",tooltipTitle:"#0f172a",tooltipBody:"#334155",tooltipBorder:"rgba(15, 23, 42, 0.18)",grid:"rgba(15, 23, 42, 0.08)",tick:"#64748b"}};function V_({modelSeries:Q,timeRange:J}){let q=L_.useMemo(()=>$A(Q),[Q]),Y=E8(),U=eD[Y],K=oq(J),H={labels:q.data.map((F)=>__(F.timestamp,J)),datasets:q.series.map((F,R)=>({label:F,data:q.data.map((T)=>T[F]??0),borderColor:iq[R%iq.length],backgroundColor:`${iq[R%iq.length]}20`,fill:!0,tension:0.4,pointRadius:0,pointHoverRadius:4,borderWidth:2}))},M={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"top",align:"start",labels:{color:U.legendLabel,usePointStyle:!0,padding:16,font:{size:12},boxWidth:8}},tooltip:{backgroundColor:U.tooltipBackground,titleColor:U.tooltipTitle,bodyColor:U.tooltipBody,borderColor:U.tooltipBorder,borderWidth:1,padding:12,cornerRadius:8,callbacks:{label:(F)=>{let R=F.dataset.label??"",T=F.parsed.y;return`${R}: ${(T??0).toFixed(1)}%`}}}},scales:{x:{grid:{color:U.grid,drawBorder:!1},ticks:{color:U.tick,font:{size:11}}},y:{grid:{color:U.grid,drawBorder:!1},ticks:{color:U.tick,font:{size:11},callback:(F)=>`${F}%`},min:0,max:100}}};return N6.jsxDEV("div",{className:"surface overflow-hidden",children:[N6.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)]",children:[N6.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:"Model Preference"},void 0,!1,void 0,this),N6.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-1",children:["Share of requests over ",K.windowLabel]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),N6.jsxDEV("div",{className:"p-5 min-h-[320px]",children:q.data.length===0?N6.jsxDEV("div",{className:"h-full flex items-center justify-center text-[var(--text-muted)] text-sm",children:"No data available"},void 0,!1,void 0,this):N6.jsxDEV("div",{className:"h-[280px]",children:N6.jsxDEV(E4,{data:H,options: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)}function $A(Q,J=5){if(Q.length===0)return{data:[],series:[]};let q=new Map;for(let z of Q){let L=`${z.model}::${z.provider}`,P=q.get(L);if(P)P.total+=z.requests;else q.set(L,{model:z.model,provider:z.provider,total:z.requests})}let U=[...q.entries()].map(([z,L])=>({key:z,...L})).sort((z,L)=>L.total-z.total).slice(0,J),K=new Set(U.map((z)=>z.key)),H=new Map;for(let z of U)H.set(z.model,(H.get(z.model)??0)+1);let M=new Map;for(let z of U){let L=(H.get(z.model)??0)>1;M.set(z.key,L?`${z.model} (${z.provider})`:z.model)}let F=new Map;for(let z of Q){let L=`${z.model}::${z.provider}`,P=F.get(z.timestamp)??{timestamp:z.timestamp,total:0};P.total+=z.requests;let I=K.has(L)?M.get(L)??z.model:"Other";P[I]=(P[I]??0)+z.requests,F.set(z.timestamp,P)}let R=U.map((z)=>M.get(z.key)??z.model);if([...F.values()].some((z)=>(z.Other??0)>0))R.push("Other");return{data:[...F.values()].sort((z,L)=>(z.timestamp??0)-(L.timestamp??0)).map((z)=>{let L=z.total??0;for(let P of R)z[P]=L>0?(z[P]??0)/L*100:0;return z}),series:R}}var tq=R0(e1(),1);var aq=R0(G1(),1);P5.register(h4,x4,QQ,u5,g4,L8,V8,_8,p9);var ZA={dark:"rgba(248, 250, 252, 0.7)",light:"rgba(15, 23, 42, 0.6)"};function QA(Q){return{id:"costBarLabels",afterDatasetsDraw(J){let{ctx:q}=J;if(!J.data.datasets[0])return;let U=J.getDatasetMeta(0);q.save(),q.font="11px system-ui, sans-serif",q.fillStyle=Q,q.textAlign="center",q.textBaseline="bottom";for(let K of U.data){let H=K.$context.parsed.y;if(!H)continue;let M=`$${Math.round(H)}`,{x:F,y:R}=K.getProps(["x","y"],!0);q.fillText(M,F,R-3)}q.restore()}}}function GA(Q){return Dq(Q,"Cost",{initBucket:()=>({total:0}),accumulate:(J,q)=>{J.total+=q.cost},bucketToValue:(J)=>J.total})}function JA(Q){return Aq(Q,{rankWeight:(J)=>J.cost,initBucket:()=>({total:0}),accumulate:(J,q)=>{J.total+=q.cost},bucketToValue:(J)=>J.total})}function E_({costSeries:Q}){let[J,q]=tq.useState(!1),Y=E8(),U=Pq[Y],K=tq.useMemo(()=>J?JA(Q):GA(Q),[Q,J]),H=Cq({chartTheme:U,showLegend:J,defaultLabel:"Cost",formatValue:(T)=>`$${Math.round(T)}`,footer:(T)=>{if(!J||T.length<2)return;let z=T.reduce((L,P)=>L+(P.parsed.y??0),0);return`Total: $${Math.round(z)}`}}),{sharedScaleBase:M,yScale:F}=Iq({chartTheme:U,formatY:(T)=>`$${Math.round(T)}`}),R;if(J){let T={labels:K.labels,datasets:o9(K,(L)=>jq(Y5[L%Y5.length]))};R=aq.jsxDEV(E4,{data:T,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:H,scales:{x:M,y:F}}},void 0,!1,void 0,this)}else{let T={labels:K.labels,datasets:o9(K,(P)=>Oq(Y5[P%Y5.length]))},z=QA(ZA[Y]),L={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{...H,costBarLabels:{}},scales:{x:{...M,stacked:!0},y:{...F,stacked:!0}},layout:{padding:{top:24}}};R=aq.jsxDEV(Tq,{data:T,options:L,plugins:[z]},void 0,!1,void 0,this)}return aq.jsxDEV(Sq,{title:"Daily Cost",subtitle:"API spending over time",empty:K.labels.length===0,emptyMessage:"No cost data available",byModel:J,onByModelChange:q,children:R},void 0,!1,void 0,this)}var Z7=R0(G1(),1);function oN(Q){return`$${Math.round(Q)}`}function P_({costSeries:Q}){let J=Q.reduce((F,R)=>F+R.cost,0),q=new Set(Q.map((F)=>F.timestamp)).size,Y=q>0?J/q:0,U=new Map;for(let F of Q)U.set(F.model,(U.get(F.model)??0)+F.cost);let K="",H=0;for(let[F,R]of U)if(R>H)K=F,H=R;let M=[{label:"Total",value:oN(J)},{label:"Avg / day",value:oN(Y)},{label:"Top model",value:K||"—",sub:K?oN(H):void 0}];return Z7.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:M.map((F)=>Z7.jsxDEV("div",{className:"surface px-4 py-3",children:[Z7.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mb-1",children:F.label},void 0,!1,void 0,this),Z7.jsxDEV("p",{className:"text-lg font-semibold text-[var(--text-primary)] truncate",title:F.value,children:F.value},void 0,!1,void 0,this),F.sub&&Z7.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-0.5",children:F.sub},void 0,!1,void 0,this)]},F.label,!0,void 0,this))},void 0,!1,void 0,this)}var C5=R0(G1(),1),qA=["overview","requests","errors","models","costs","behavior"],XA=[{label:"1h",value:"1h"},{label:"24h",value:"24h"},{label:"7d",value:"7d"},{label:"30d",value:"30d"},{label:"90d",value:"90d"},{label:"All",value:"all"}];function C_({activeTab:Q,onTabChange:J,onSync:q,syncing:Y,timeRange:U,onTimeRangeChange:K}){return C5.jsxDEV("header",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-6 mb-8 border-b border-[var(--border-subtle)]",children:[C5.jsxDEV("div",{className:"flex items-center gap-3",children:[C5.jsxDEV("div",{className:"w-10 h-10 rounded-[var(--radius-md)] bg-gradient-to-br from-[var(--accent-pink)] to-[var(--accent-cyan)] flex items-center justify-center shadow-lg",children:C5.jsxDEV(E$,{className:"w-5 h-5 text-white"},void 0,!1,void 0,this)},void 0,!1,void 0,this),C5.jsxDEV("div",{children:[C5.jsxDEV("h1",{className:"text-xl font-semibold text-[var(--text-primary)]",children:"AI Usage"},void 0,!1,void 0,this),C5.jsxDEV("p",{className:"text-sm text-[var(--text-muted)]",children:"Statistics & Analytics"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),C5.jsxDEV("div",{className:"flex items-center gap-3",children:[C5.jsxDEV("div",{className:"flex bg-[var(--bg-surface)] rounded-[var(--radius-md)] p-1 border border-[var(--border-subtle)]",children:qA.map((H)=>C5.jsxDEV("button",{type:"button",onClick:()=>J(H),className:`tab-btn capitalize ${Q===H?"active":""}`,children:H},H,!1,void 0,this))},void 0,!1,void 0,this),C5.jsxDEV("div",{className:"flex bg-[var(--bg-surface)] rounded-[var(--radius-md)] p-1 border border-[var(--border-subtle)]",children:XA.map((H)=>C5.jsxDEV("button",{type:"button",onClick:()=>K(H.value),className:`tab-btn ${U===H.value?"active":""}`,title:H.value==="all"?"All time":`Last ${H.label}`,children:H.label},H.value,!1,void 0,this))},void 0,!1,void 0,this),C5.jsxDEV("button",{type:"button",onClick:q,disabled:Y,className:"btn btn-primary",children:[C5.jsxDEV(WQ,{size:16,className:Y?"spin":""},void 0,!1,void 0,this),Y?"Syncing...":"Sync"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var eq=R0(e1(),1);var s0=R0(G1(),1);P5.register(h4,x4,g4,u5,L8,V8,_8);var I_="2fr 0.9fr 0.9fr 1fr 0.8fr 0.8fr 140px 40px";function j_({models:Q,performanceSeries:J,timeRange:q}){let[Y,U]=eq.useState(null),K=oq(q),H=eq.useMemo(()=>UA(J,K.bucketCount,K.bucketMs),[J,K.bucketCount,K.bucketMs]),M=E8(),F=fq[M],R=[...Q].sort((T,z)=>z.totalInputTokens+z.totalOutputTokens-(T.totalInputTokens+T.totalOutputTokens));return s0.jsxDEV(hq,{title:"Model Statistics",children:[s0.jsxDEV(xq,{gridTemplate:I_,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),s0.jsxDEV(uq,{children:R.map((T,z)=>{let L=`${T.model}::${T.provider}`,I=H.get(L)?.data??[],A=Y5[z%Y5.length],C=Y===L,g=T.errorRate*100;return s0.jsxDEV(dq,{gridTemplate:I_,isExpanded:C,onToggle:()=>U(C?null:L),cells:[s0.jsxDEV(mq,{model:T.model,provider:T.provider},"name",!1,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:T.totalRequests.toLocaleString()},"requests",!1,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:["$",T.totalCost.toFixed(2)]},"cost",!0,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:(T.totalInputTokens+T.totalOutputTokens).toLocaleString()},"tokens",!1,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:T.avgTokensPerSecond?.toFixed(1)??"-"},"tps",!1,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:T.avgTtft?`${(T.avgTtft/1000).toFixed(2)}s`:"-"},"ttft",!1,void 0,this)],trendCell:I.length===0?s0.jsxDEV(pq,{},void 0,!1,void 0,this):s0.jsxDEV(yq,{timestamps:I.map((m)=>m.timestamp),values:I.map((m)=>m.avgTokensPerSecond??0),color:A},void 0,!1,void 0,this),expandedContent:s0.jsxDEV("div",{className:"grid gap-4",style:{gridTemplateColumns:"200px 1fr"},children:[s0.jsxDEV("div",{className:"space-y-4 text-sm",children:[s0.jsxDEV("div",{children:[s0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:"Quality"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[s0.jsxDEV("div",{className:"flex items-center justify-between",children:[s0.jsxDEV("span",{children:"Error rate"},void 0,!1,void 0,this),s0.jsxDEV("span",{className:g>5?"text-[var(--accent-red)]":"text-[var(--accent-green)]",children:[g.toFixed(1),"%"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"flex items-center justify-between",children:[s0.jsxDEV("span",{children:"Cache rate"},void 0,!1,void 0,this),s0.jsxDEV("span",{className:"text-[var(--accent-cyan)]",children:[(T.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),s0.jsxDEV("div",{children:[s0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:"Latency"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[s0.jsxDEV("div",{className:"flex items-center justify-between",children:[s0.jsxDEV("span",{children:"Avg duration"},void 0,!1,void 0,this),s0.jsxDEV("span",{className:"font-mono",children:T.avgDuration?`${(T.avgDuration/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"flex items-center justify-between",children:[s0.jsxDEV("span",{children:"Avg TTFT"},void 0,!1,void 0,this),s0.jsxDEV("span",{className:"font-mono",children:T.avgTtft?`${(T.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),s0.jsxDEV("div",{className:"h-[200px]",children:I.length===0?s0.jsxDEV(cq,{},void 0,!1,void 0,this):s0.jsxDEV(YA,{data:I,color:A,chartTheme:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},L,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function YA({data:Q,color:J,chartTheme:q}){let Y={labels:Q.map((K)=>u4(new Date(K.timestamp),"MMM d")),datasets:[{label:"TTFT",data:Q.map((K)=>K.avgTtftSeconds??null),...U6("#fbbf24"),yAxisID:"y"},{label:"Tokens/s",data:Q.map((K)=>K.avgTokensPerSecond??null),...U6(J),yAxisID:"y1"}]},U={responsive:!0,maintainAspectRatio:!1,plugins:gq(q),scales:H_(q)};return s0.jsxDEV(E4,{data:Y,options:U},void 0,!1,void 0,this)}function UA(Q,J,q){let Y=Q.reduce((z,L)=>Math.max(z,L.timestamp),0),U=Y>0?Y:Math.floor(Date.now()/q)*q,K=new Set(Q.map((z)=>z.timestamp)),H=J>0?J:Math.max(1,K.size),M=U-(H-1)*q,F=Array.from({length:H},(z,L)=>M+L*q),R=new Map(F.map((z,L)=>[z,L])),T=new Map;for(let z of Q){let L=`${z.model}::${z.provider}`,P=T.get(L);if(!P)P={label:`${z.model} (${z.provider})`,data:F.map((A)=>({timestamp:A,avgTtftSeconds:null,avgTokensPerSecond:null,requests:0}))},T.set(L,P);let I=R.get(z.timestamp);if(I===void 0)continue;P.data[I]={timestamp:z.timestamp,avgTtftSeconds:z.avgTtft!==null?z.avgTtft/1000:null,avgTokensPerSecond:z.avgTokensPerSecond,requests:z.requests}}return T}var zQ=R0(e1(),1);var X0=R0(G1(),1);function O_({id:Q,onClose:J}){let[q,Y]=zQ.useState(null),[U,K]=zQ.useState(!0);if(zQ.useEffect(()=>{ow(Q).then(Y).catch(console.error).finally(()=>K(!1))},[Q]),!q&&U)return X0.jsxDEV("div",{className:"fixed inset-0 bg-[var(--bg-overlay)] flex justify-center items-center z-[100]",children:X0.jsxDEV("div",{className:"surface px-8 py-6",children:X0.jsxDEV("div",{className:"flex items-center gap-3 text-[var(--text-secondary)]",children:[X0.jsxDEV("div",{className:"w-5 h-5 border-2 border-[var(--border-default)] border-t-[var(--accent-cyan)] rounded-full spin"},void 0,!1,void 0,this),X0.jsxDEV("span",{children:"Loading..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(!q)return null;return X0.jsxDEV("div",{role:"presentation",className:"fixed inset-0 bg-[var(--bg-overlay)] backdrop-blur-sm flex justify-end z-[100] animate-fade-in",onClick:J,children:X0.jsxDEV("div",{role:"dialog","aria-modal":"true",className:"w-[600px] max-w-full bg-[var(--bg-page)] h-full overflow-y-auto border-l border-[var(--border-subtle)] animate-slide-up",onClick:(H)=>H.stopPropagation(),children:[X0.jsxDEV("div",{className:"sticky top-0 bg-[var(--bg-page)]/95 backdrop-blur border-b border-[var(--border-subtle)] px-6 py-4 flex justify-between items-center z-10",children:[X0.jsxDEV("div",{className:"flex items-center gap-3",children:[X0.jsxDEV("div",{className:"w-8 h-8 rounded-[var(--radius-sm)] bg-gradient-to-br from-[var(--accent-pink)]/20 to-[var(--accent-cyan)]/20 flex items-center justify-center",children:X0.jsxDEV(T2,{size:16,className:"text-[var(--accent-cyan)]"},void 0,!1,void 0,this)},void 0,!1,void 0,this),X0.jsxDEV("h2",{className:"text-lg font-semibold text-[var(--text-primary)]",children:"Request Details"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("button",{type:"button",onClick:J,className:"p-2 rounded-[var(--radius-sm)] text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors",children:X0.jsxDEV(TQ,{size:20},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"p-6 space-y-6",children:[X0.jsxDEV("div",{className:"surface p-5",children:X0.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:[X0.jsxDEV("div",{children:[X0.jsxDEV("div",{className:"text-2xl font-bold text-[var(--text-primary)]",children:q.model},void 0,!1,void 0,this),X0.jsxDEV("div",{className:"text-sm text-[var(--text-muted)]",children:q.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q.errorMessage?X0.jsxDEV("span",{className:"badge badge-error",children:"Error"},void 0,!1,void 0,this):X0.jsxDEV("span",{className:"badge badge-success",children:"Success"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),X0.jsxDEV("div",{className:"grid grid-cols-2 gap-4",children:[X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(KQ,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Cost"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:["$",q.usage.cost.total.toFixed(4)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(P$,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Premium Reqs"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:(q.usage.premiumRequests??0).toLocaleString()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(FQ,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Tokens"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:q.usage.totalTokens.toLocaleString()},void 0,!1,void 0,this),X0.jsxDEV("div",{className:"text-xs text-[var(--text-muted)] mt-1",children:[q.usage.input.toLocaleString()," in · ",q.usage.output.toLocaleString()," out"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(NQ,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Duration"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:q.duration?`${(q.duration/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(C$,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"TTFT"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:q.ttft?`${(q.ttft/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),q.duration&&q.usage.output>0&&X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center justify-between",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)]",children:[X0.jsxDEV(MQ,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Throughput"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("span",{className:"text-2xl font-bold gradient-text",children:(q.usage.output*1000/q.duration).toFixed(1)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xs text-[var(--text-muted)] mt-1 text-right",children:"tokens/second"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{children:[X0.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)] mb-3",children:"Output"},void 0,!1,void 0,this),X0.jsxDEV("pre",{className:"surface bg-[var(--bg-elevated)] p-4 rounded-[var(--radius-md)] text-sm font-mono text-[var(--text-secondary)] overflow-x-auto",children:JSON.stringify(q.output,null,2)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{children:[X0.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)] mb-3",children:"Raw Metadata"},void 0,!1,void 0,this),X0.jsxDEV("pre",{className:"surface bg-[var(--bg-elevated)] p-4 rounded-[var(--radius-md)] text-xs font-mono text-[var(--text-muted)] overflow-x-auto",children:JSON.stringify(q,null,2)},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,!1,void 0,this)}var B1=R0(G1(),1);function _Q({requests:Q,onSelect:J,title:q}){return B1.jsxDEV("div",{className:"surface overflow-hidden flex flex-col h-full",children:[B1.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)]",children:B1.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:q},void 0,!1,void 0,this)},void 0,!1,void 0,this),B1.jsxDEV("div",{className:"overflow-auto flex-1",children:B1.jsxDEV("table",{className:"w-full",children:[B1.jsxDEV("thead",{className:"bg-[var(--bg-elevated)] sticky top-0 z-10",children:B1.jsxDEV("tr",{children:[B1.jsxDEV("th",{className:"text-left py-3 px-4 table-header",children:"Model"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-left py-3 px-4 table-header",children:"Time"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-right py-3 px-4 table-header",children:"Tokens"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-right py-3 px-4 table-header",children:"Cost"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-right py-3 px-4 table-header",children:"Duration"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-center py-3 px-4 table-header",children:"Status"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),B1.jsxDEV("tbody",{children:[Q.map((Y)=>B1.jsxDEV("tr",{onClick:()=>J(Y),className:"table-row cursor-pointer border-b border-[var(--border-subtle)] last:border-b-0",children:[B1.jsxDEV("td",{className:"py-3 px-4",children:[B1.jsxDEV("div",{className:"font-medium text-[var(--text-primary)] text-sm",children:Y.model},void 0,!1,void 0,this),B1.jsxDEV("div",{className:"text-xs text-[var(--text-muted)]",children:Y.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-sm text-[var(--text-secondary)]",children:Z_(Y.timestamp,{addSuffix:!0})},void 0,!1,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-right text-sm text-[var(--text-secondary)] font-mono",children:Y.usage.totalTokens.toLocaleString()},void 0,!1,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-right text-sm text-[var(--text-secondary)] font-mono",children:["$",Y.usage.cost.total.toFixed(4)]},void 0,!0,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-right text-sm text-[var(--text-secondary)] font-mono",children:Y.duration?`${(Y.duration/1000).toFixed(1)}s`:"-"},void 0,!1,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-center",children:Y.errorMessage?B1.jsxDEV(R2,{size:16,className:"text-[var(--accent-red)] mx-auto"},void 0,!1,void 0,this):B1.jsxDEV(w2,{size:16,className:"text-[var(--accent-green)] mx-auto"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},`${Y.sessionFile}-${Y.entryId}`,!0,void 0,this)),Q.length===0&&B1.jsxDEV("tr",{children:B1.jsxDEV("td",{colSpan:6,className:"py-12 text-center text-[var(--text-muted)] text-sm",children:"No requests found"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var K6=R0(G1(),1),NA=new Intl.NumberFormat(void 0,{notation:"compact",maximumFractionDigits:1});function D_(Q){return NA.format(Q)}function iN(Q){return Q.toLocaleString()}var LQ=(Q)=>Q.totalInputTokens+Q.totalOutputTokens,KA=[{key:"requests",title:"Total Requests",icon:wQ,color:"var(--accent-violet)",getValue:(Q)=>Q.totalRequests.toLocaleString(),getDetail:(Q)=>`${Q.successfulRequests.toLocaleString()} success · ${Q.failedRequests.toLocaleString()} errors`},{key:"cost",title:"Total Cost",icon:E$,color:"var(--accent-pink)",getValue:(Q)=>`$${Q.totalCost.toFixed(2)}`,getDetail:(Q)=>Q.totalRequests>0?`$${(Q.totalCost/Q.totalRequests).toFixed(4)} avg/req`:"-"},{key:"premiumRequests",title:"Premium Reqs",icon:P$,color:"var(--accent-amber)",getValue:(Q)=>iN(Q.totalPremiumRequests),getDetail:(Q)=>Q.totalRequests>0?`${(Q.totalPremiumRequests/Q.totalRequests*100).toFixed(1)}% of requests`:"-"},{key:"cache",title:"Cache Rate",icon:BQ,color:"var(--accent-cyan)",getValue:(Q)=>`${(Q.cacheRate*100).toFixed(1)}%`,getDetail:(Q)=>`${D_(Q.totalCacheReadTokens)} cached tokens`},{key:"inputTokens",title:"Input Tokens",icon:HQ,color:"var(--accent-violet)",getValue:(Q)=>iN(Q.totalInputTokens),getDetail:(Q)=>LQ(Q)>0?`${(Q.totalInputTokens/LQ(Q)*100).toFixed(1)}% of prompt+completion`:"-"},{key:"outputTokens",title:"Output Tokens",icon:RQ,color:"var(--accent-pink)",getValue:(Q)=>iN(Q.totalOutputTokens),getDetail:(Q)=>LQ(Q)>0?`${(Q.totalOutputTokens/LQ(Q)*100).toFixed(1)}% of prompt+completion`:"-"},{key:"errors",title:"Error Rate",icon:W2,color:"var(--accent-red)",getValue:(Q)=>`${(Q.errorRate*100).toFixed(1)}%`,getDetail:(Q)=>`${Q.failedRequests.toLocaleString()} failed requests`},{key:"tokens",title:"Tokens/Sec",icon:F2,color:"var(--accent-green)",getValue:(Q)=>Q.avgTokensPerSecond?.toFixed(1)??"-",getDetail:(Q)=>`${D_(LQ(Q))} total prompt+completion`},{key:"ttft",title:"TTFT",icon:C$,color:"var(--accent-amber)",getValue:(Q)=>Q.avgTtft?`${(Q.avgTtft/1000).toFixed(2)}s`:"-",getDetail:()=>"Time to first token"}];function A_({stats:Q}){return K6.jsxDEV("div",{className:"grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-9 gap-4 mb-8",children:KA.map((J)=>{let q=J.icon;return K6.jsxDEV("div",{className:"stat-card group",children:[K6.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[K6.jsxDEV("span",{className:"text-sm font-medium text-[var(--text-secondary)]",children:J.title},void 0,!1,void 0,this),K6.jsxDEV("div",{className:"p-2 rounded-[var(--radius-sm)] transition-colors",style:{backgroundColor:`${J.color}15`},children:K6.jsxDEV(q,{size:18,style:{color:J.color},className:"transition-transform group-hover:scale-110"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K6.jsxDEV("div",{className:"text-2xl font-bold text-[var(--text-primary)] mb-1",children:J.getValue(Q)},void 0,!1,void 0,this),K6.jsxDEV("div",{className:"text-xs text-[var(--text-muted)] truncate",children:J.getDetail(Q)},void 0,!1,void 0,this)]},J.key,!0,void 0,this)})},void 0,!1,void 0,this)}var m0=R0(G1(),1);function aN(){let[Q,J]=U5.useState(null),[q,Y]=U5.useState(null),[U,K]=U5.useState(null),[H,M]=U5.useState(null),[F,R]=U5.useState([]),[T,z]=U5.useState([]),[L,P]=U5.useState(null),[I,A]=U5.useState(!1),[C,g]=U5.useState("overview"),[m,o]=U5.useState("24h"),i=U5.useCallback(async()=>{try{let[p,a]=await Promise.all([sw(50),nw(50)]);R(p),z(a)}catch(p){console.error(p)}},[]),s=U5.useCallback(async()=>{try{if(C==="models"){Y(await lw(m));return}if(C==="costs"){K(await rw(m));return}if(C==="behavior"){M(await aw(m));return}if(C==="overview")J(await cw(m))}catch(p){console.error(p)}},[C,m]),Q0=async()=>{A(!0);try{await iw(),await Promise.all([s(),i()])}finally{A(!1)}};return U5.useEffect(()=>{i();let p=setInterval(i,30000);return()=>clearInterval(p)},[i]),U5.useEffect(()=>{s();let p=setInterval(s,30000);return()=>clearInterval(p)},[s]),m0.jsxDEV("div",{className:"min-h-screen",children:m0.jsxDEV("div",{className:"max-w-[1600px] mx-auto px-6 py-6",children:[m0.jsxDEV(C_,{activeTab:C,onTabChange:g,onSync:Q0,syncing:I,timeRange:m,onTimeRangeChange:o},void 0,!1,void 0,this),C==="overview"&&m0.jsxDEV("div",{className:"space-y-6 animate-fade-in",children:[Q?m0.jsxDEV(A_,{stats:Q.overall},void 0,!1,void 0,this):m0.jsxDEV($3,{label:"Loading overview..."},void 0,!1,void 0,this),m0.jsxDEV("div",{className:"grid lg:grid-cols-2 gap-6",children:[m0.jsxDEV(_Q,{title:"Recent Requests",requests:F.slice(0,10),onSelect:(p)=>p.id&&P(p.id)},void 0,!1,void 0,this),m0.jsxDEV(_Q,{title:"Recent Errors",requests:T.slice(0,10),onSelect:(p)=>p.id&&P(p.id)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),C==="requests"&&m0.jsxDEV("div",{className:"h-[calc(100vh-140px)] animate-fade-in",children:m0.jsxDEV(_Q,{title:"All Recent Requests",requests:F,onSelect:(p)=>p.id&&P(p.id)},void 0,!1,void 0,this)},void 0,!1,void 0,this),C==="errors"&&m0.jsxDEV("div",{className:"h-[calc(100vh-140px)] animate-fade-in",children:m0.jsxDEV(_Q,{title:"Failed Requests",requests:T,onSelect:(p)=>p.id&&P(p.id)},void 0,!1,void 0,this)},void 0,!1,void 0,this),C==="models"&&m0.jsxDEV("div",{className:"space-y-6 animate-fade-in",children:q?m0.jsxDEV(m0.Fragment,{children:[m0.jsxDEV(V_,{modelSeries:q.modelSeries,timeRange:m},void 0,!1,void 0,this),m0.jsxDEV(j_,{models:q.byModel,performanceSeries:q.modelPerformanceSeries,timeRange:m},void 0,!1,void 0,this)]},void 0,!0,void 0,this):m0.jsxDEV($3,{label:"Loading models..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),C==="costs"&&m0.jsxDEV("div",{className:"space-y-6 animate-fade-in",children:U?m0.jsxDEV(m0.Fragment,{children:[m0.jsxDEV(P_,{costSeries:U.costSeries},void 0,!1,void 0,this),m0.jsxDEV(E_,{costSeries:U.costSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this):m0.jsxDEV($3,{label:"Loading costs..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),C==="behavior"&&m0.jsxDEV("div",{className:"space-y-6 animate-fade-in",children:H?m0.jsxDEV(m0.Fragment,{children:[m0.jsxDEV(T_,{overall:H.overall,behaviorSeries:H.behaviorSeries},void 0,!1,void 0,this),m0.jsxDEV(q_,{behaviorSeries:H.behaviorSeries},void 0,!1,void 0,this),m0.jsxDEV(w_,{models:H.byModel,behaviorSeries:H.behaviorSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this):m0.jsxDEV($3,{label:"Loading behavior..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),L!==null&&m0.jsxDEV(O_,{id:L,onClose:()=>P(null)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function $3({label:Q}){return m0.jsxDEV("div",{className:"min-h-[180px] flex items-center justify-center",children:m0.jsxDEV("div",{className:"flex items-center gap-3 text-[var(--text-muted)]",children:[m0.jsxDEV("div",{className:"w-5 h-5 border-2 border-[var(--border-default)] border-t-[var(--accent-cyan)] rounded-full spin"},void 0,!1,void 0,this),m0.jsxDEV("span",{className:"text-sm",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var v_=R0(G1(),1),BA=S_.createRoot(document.getElementById("root"));BA.render(v_.jsxDEV(aN,{},void 0,!1,void 0,this));
|
|
257
|
+
`);return Q}function QO(Q,J){let{element:q,datasetIndex:Y,index:U}=J,K=Q.getDatasetMeta(Y).controller,{label:H,value:M}=K.getLabelAndValue(U);return{chart:Q,label:H,parsed:K.getParsed(U),raw:Q.data.datasets[Y].data[U],formattedValue:M,dataset:K.getDataset(),dataIndex:U,datasetIndex:Y,element:q}}function DT(Q,J){let q=Q.chart.ctx,{body:Y,footer:U,title:K}=Q,{boxWidth:H,boxHeight:M}=J,F=p1(J.bodyFont),R=p1(J.titleFont),T=p1(J.footerFont),z=K.length,L=U.length,P=Y.length,I=X5(J.padding),A=I.height,C=0,g=Y.reduce((i,s)=>i+s.before.length+s.lines.length+s.after.length,0);if(g+=Q.beforeBody.length+Q.afterBody.length,z)A+=z*R.lineHeight+(z-1)*J.titleSpacing+J.titleMarginBottom;if(g){let i=J.displayColors?Math.max(M,F.lineHeight):F.lineHeight;A+=P*i+(g-P)*F.lineHeight+(g-1)*J.bodySpacing}if(L)A+=J.footerMarginTop+L*T.lineHeight+(L-1)*J.footerSpacing;let m=0,o=function(i){C=Math.max(C,q.measureText(i).width+m)};return q.save(),q.font=R.string,X1(Q.title,o),q.font=F.string,X1(Q.beforeBody.concat(Q.afterBody),o),m=J.displayColors?H+2+J.boxPadding:0,X1(Y,(i)=>{X1(i.before,o),X1(i.lines,o),X1(i.after,o)}),m=0,q.font=T.string,X1(Q.footer,o),q.restore(),C+=I.width,{width:C,height:A}}function GO(Q,J){let{y:q,height:Y}=J;if(q<Y/2)return"top";else if(q>Q.height-Y/2)return"bottom";return"center"}function JO(Q,J,q,Y){let{x:U,width:K}=Y,H=q.caretSize+q.caretPadding;if(Q==="left"&&U+K+H>J.width)return!0;if(Q==="right"&&U-K-H<0)return!0}function qO(Q,J,q,Y){let{x:U,width:K}=q,{width:H,chartArea:{left:M,right:F}}=Q,R="center";if(Y==="center")R=U<=(M+F)/2?"left":"right";else if(U<=K/2)R="left";else if(U>=H-K/2)R="right";if(JO(R,Q,J,q))R="center";return R}function AT(Q,J,q){let Y=q.yAlign||J.yAlign||GO(Q,q);return{xAlign:q.xAlign||J.xAlign||qO(Q,J,q,Y),yAlign:Y}}function XO(Q,J){let{x:q,width:Y}=Q;if(J==="right")q-=Y;else if(J==="center")q-=Y/2;return q}function YO(Q,J,q){let{y:Y,height:U}=Q;if(J==="top")Y+=q;else if(J==="bottom")Y-=U+q;else Y-=U/2;return Y}function ST(Q,J,q,Y){let{caretSize:U,caretPadding:K,cornerRadius:H}=Q,{xAlign:M,yAlign:F}=q,R=U+K,{topLeft:T,topRight:z,bottomLeft:L,bottomRight:P}=K2(H),I=XO(J,M),A=YO(J,F,R);if(F==="center"){if(M==="left")I+=R;else if(M==="right")I-=R}else if(M==="left")I-=Math.max(T,L)+U;else if(M==="right")I+=Math.max(z,P)+U;return{x:y5(I,0,Y.width-J.width),y:y5(A,0,Y.height-J.height)}}function Kq(Q,J,q){let Y=X5(q.padding);return J==="center"?Q.x+Q.width/2:J==="right"?Q.x+Q.width-Y.right:Q.x+Y.left}function vT(Q){return T8([],J6(Q))}function UO(Q,J,q){return Q6(Q,{tooltip:J,tooltipItems:q,type:"tooltip"})}function kT(Q,J){let q=J&&J.dataset&&J.dataset.tooltip&&J.dataset.tooltip.callbacks;return q?Q.override(q):Q}var Hz={beforeTitle:R8,title(Q){if(Q.length>0){let J=Q[0],q=J.chart.data.labels,Y=q?q.length:0;if(this&&this.options&&this.options.mode==="dataset")return J.dataset.label||"";else if(J.label)return J.label;else if(Y>0&&J.dataIndex<Y)return q[J.dataIndex]}return""},afterTitle:R8,beforeBody:R8,beforeLabel:R8,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 q=Q.formattedValue;if(!t0(q))J+=q;return J},labelColor(Q){let q=Q.chart.getDatasetMeta(Q.datasetIndex).controller.getStyle(Q.dataIndex);return{borderColor:q.borderColor,backgroundColor:q.backgroundColor,borderWidth:q.borderWidth,borderDash:q.borderDash,borderDashOffset:q.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(Q){let q=Q.chart.getDatasetMeta(Q.datasetIndex).controller.getStyle(Q.dataIndex);return{pointStyle:q.pointStyle,rotation:q.rotation}},afterLabel:R8,afterBody:R8,beforeFooter:R8,footer:R8,afterFooter:R8};function h5(Q,J,q,Y){let U=Q[J].call(q,Y);if(typeof U>"u")return Hz[J].call(q,Y);return U}class SN extends q6{static positioners=aZ;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,q=this.options.setContext(this.getContext()),Y=q.enabled&&J.options.animation&&q.animations,U=new bN(this.chart,Y);if(Y._cacheable)this._cachedAnimations=Object.freeze(U);return U}getContext(){return this.$context||(this.$context=UO(this.chart.getContext(),this,this._tooltipItems))}getTitle(Q,J){let{callbacks:q}=J,Y=h5(q,"beforeTitle",this,Q),U=h5(q,"title",this,Q),K=h5(q,"afterTitle",this,Q),H=[];return H=T8(H,J6(Y)),H=T8(H,J6(U)),H=T8(H,J6(K)),H}getBeforeBody(Q,J){return vT(h5(J.callbacks,"beforeBody",this,Q))}getBody(Q,J){let{callbacks:q}=J,Y=[];return X1(Q,(U)=>{let K={before:[],lines:[],after:[]},H=kT(q,U);T8(K.before,J6(h5(H,"beforeLabel",this,U))),T8(K.lines,h5(H,"label",this,U)),T8(K.after,J6(h5(H,"afterLabel",this,U))),Y.push(K)}),Y}getAfterBody(Q,J){return vT(h5(J.callbacks,"afterBody",this,Q))}getFooter(Q,J){let{callbacks:q}=J,Y=h5(q,"beforeFooter",this,Q),U=h5(q,"footer",this,Q),K=h5(q,"afterFooter",this,Q),H=[];return H=T8(H,J6(Y)),H=T8(H,J6(U)),H=T8(H,J6(K)),H}_createItems(Q){let J=this._active,q=this.chart.data,Y=[],U=[],K=[],H=[],M,F;for(M=0,F=J.length;M<F;++M)H.push(QO(this.chart,J[M]));if(Q.filter)H=H.filter((R,T,z)=>Q.filter(R,T,z,q));if(Q.itemSort)H=H.sort((R,T)=>Q.itemSort(R,T,q));return X1(H,(R)=>{let T=kT(Q.callbacks,R);Y.push(h5(T,"labelColor",this,R)),U.push(h5(T,"labelPointStyle",this,R)),K.push(h5(T,"labelTextColor",this,R))}),this.labelColors=Y,this.labelPointStyles=U,this.labelTextColors=K,this.dataPoints=H,H}update(Q,J){let q=this.options.setContext(this.getContext()),Y=this._active,U,K=[];if(!Y.length){if(this.opacity!==0)U={opacity:0}}else{let H=aZ[q.position].call(this,Y,this._eventPosition);K=this._createItems(q),this.title=this.getTitle(K,q),this.beforeBody=this.getBeforeBody(K,q),this.body=this.getBody(K,q),this.afterBody=this.getAfterBody(K,q),this.footer=this.getFooter(K,q);let M=this._size=DT(this,q),F=Object.assign({},H,M),R=AT(this.chart,q,F),T=ST(q,F,R,this.chart);this.xAlign=R.xAlign,this.yAlign=R.yAlign,U={opacity:1,x:T.x,y:T.y,width:M.width,height:M.height,caretX:H.x,caretY:H.y}}if(this._tooltipItems=K,this.$context=void 0,U)this._resolveAnimations().update(this,U);if(Q&&q.external)q.external.call(this,{chart:this.chart,tooltip:this,replay:J})}drawCaret(Q,J,q,Y){let U=this.getCaretPosition(Q,q,Y);J.lineTo(U.x1,U.y1),J.lineTo(U.x2,U.y2),J.lineTo(U.x3,U.y3)}getCaretPosition(Q,J,q){let{xAlign:Y,yAlign:U}=this,{caretSize:K,cornerRadius:H}=q,{topLeft:M,topRight:F,bottomLeft:R,bottomRight:T}=K2(H),{x:z,y:L}=Q,{width:P,height:I}=J,A,C,g,m,o,i;if(U==="center"){if(o=L+I/2,Y==="left")A=z,C=A-K,m=o+K,i=o-K;else A=z+P,C=A+K,m=o-K,i=o+K;g=A}else{if(Y==="left")C=z+Math.max(M,R)+K;else if(Y==="right")C=z+P-Math.max(F,T)-K;else C=this.caretX;if(U==="top")m=L,o=m-K,A=C-K,g=C+K;else m=L+I,o=m+K,A=C+K,g=C-K;i=m}return{x1:A,x2:C,x3:g,y1:m,y2:o,y3:i}}drawTitle(Q,J,q){let Y=this.title,U=Y.length,K,H,M;if(U){let F=W$(q.rtl,this.x,this.width);Q.x=Kq(this,q.titleAlign,q),J.textAlign=F.textAlign(q.titleAlign),J.textBaseline="middle",K=p1(q.titleFont),H=q.titleSpacing,J.fillStyle=q.titleColor,J.font=K.string;for(M=0;M<U;++M)if(J.fillText(Y[M],F.x(Q.x),Q.y+K.lineHeight/2),Q.y+=K.lineHeight+H,M+1===U)Q.y+=q.titleMarginBottom-H}}_drawColorBox(Q,J,q,Y,U){let K=this.labelColors[q],H=this.labelPointStyles[q],{boxHeight:M,boxWidth:F}=U,R=p1(U.bodyFont),T=Kq(this,"left",U),z=Y.x(T),L=M<R.lineHeight?(R.lineHeight-M)/2:0,P=J.y+L;if(U.usePointStyle){let I={radius:Math.min(F,M)/2,pointStyle:H.pointStyle,rotation:H.rotation,borderWidth:1},A=Y.leftForLtr(z,F)+F/2,C=P+M/2;Q.strokeStyle=U.multiKeyBackground,Q.fillStyle=U.multiKeyBackground,Qq(Q,I,A,C),Q.strokeStyle=K.borderColor,Q.fillStyle=K.backgroundColor,Qq(Q,I,A,C)}else{Q.lineWidth=n0(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 I=Y.leftForLtr(z,F),A=Y.leftForLtr(Y.xPlus(z,1),F-2),C=K2(K.borderRadius);if(Object.values(C).some((g)=>g!==0))Q.beginPath(),Q.fillStyle=U.multiKeyBackground,d9(Q,{x:I,y:P,w:F,h:M,radius:C}),Q.fill(),Q.stroke(),Q.fillStyle=K.backgroundColor,Q.beginPath(),d9(Q,{x:A,y:P+1,w:F-2,h:M-2,radius:C}),Q.fill();else Q.fillStyle=U.multiKeyBackground,Q.fillRect(I,P,F,M),Q.strokeRect(I,P,F,M),Q.fillStyle=K.backgroundColor,Q.fillRect(A,P+1,F-2,M-2)}Q.fillStyle=this.labelTextColors[q]}drawBody(Q,J,q){let{body:Y}=this,{bodySpacing:U,bodyAlign:K,displayColors:H,boxHeight:M,boxWidth:F,boxPadding:R}=q,T=p1(q.bodyFont),z=T.lineHeight,L=0,P=W$(q.rtl,this.x,this.width),I=function(p){J.fillText(p,P.x(Q.x+L),Q.y+z/2),Q.y+=z+U},A=P.textAlign(K),C,g,m,o,i,s,Q0;J.textAlign=K,J.textBaseline="middle",J.font=T.string,Q.x=Kq(this,A,q),J.fillStyle=q.bodyColor,X1(this.beforeBody,I),L=H&&A!=="right"?K==="center"?F/2+R:F+2+R:0;for(o=0,s=Y.length;o<s;++o){if(C=Y[o],g=this.labelTextColors[o],J.fillStyle=g,X1(C.before,I),m=C.lines,H&&m.length)this._drawColorBox(J,Q,o,P,q),z=Math.max(T.lineHeight,M);for(i=0,Q0=m.length;i<Q0;++i)I(m[i]),z=T.lineHeight;X1(C.after,I)}L=0,z=T.lineHeight,X1(this.afterBody,I),Q.y-=U}drawFooter(Q,J,q){let Y=this.footer,U=Y.length,K,H;if(U){let M=W$(q.rtl,this.x,this.width);Q.x=Kq(this,q.footerAlign,q),Q.y+=q.footerMarginTop,J.textAlign=M.textAlign(q.footerAlign),J.textBaseline="middle",K=p1(q.footerFont),J.fillStyle=q.footerColor,J.font=K.string;for(H=0;H<U;++H)J.fillText(Y[H],M.x(Q.x),Q.y+K.lineHeight/2),Q.y+=K.lineHeight+q.footerSpacing}}drawBackground(Q,J,q,Y){let{xAlign:U,yAlign:K}=this,{x:H,y:M}=Q,{width:F,height:R}=q,{topLeft:T,topRight:z,bottomLeft:L,bottomRight:P}=K2(Y.cornerRadius);if(J.fillStyle=Y.backgroundColor,J.strokeStyle=Y.borderColor,J.lineWidth=Y.borderWidth,J.beginPath(),J.moveTo(H+T,M),K==="top")this.drawCaret(Q,J,q,Y);if(J.lineTo(H+F-z,M),J.quadraticCurveTo(H+F,M,H+F,M+z),K==="center"&&U==="right")this.drawCaret(Q,J,q,Y);if(J.lineTo(H+F,M+R-P),J.quadraticCurveTo(H+F,M+R,H+F-P,M+R),K==="bottom")this.drawCaret(Q,J,q,Y);if(J.lineTo(H+L,M+R),J.quadraticCurveTo(H,M+R,H,M+R-L),K==="center"&&U==="left")this.drawCaret(Q,J,q,Y);if(J.lineTo(H,M+T),J.quadraticCurveTo(H,M,H+T,M),J.closePath(),J.fill(),Y.borderWidth>0)J.stroke()}_updateAnimationTarget(Q){let J=this.chart,q=this.$animations,Y=q&&q.x,U=q&&q.y;if(Y||U){let K=aZ[Q.position].call(this,this._active,this._eventPosition);if(!K)return;let H=this._size=DT(this,Q),M=Object.assign({},K,this._size),F=AT(J,Q,M),R=ST(Q,M,F,J);if(Y._to!==R.x||U._to!==R.y)this.xAlign=F.xAlign,this.yAlign=F.yAlign,this.width=H.width,this.height=H.height,this.caretX=K.x,this.caretY=K.y,this._resolveAnimations().update(this,R)}}_willRender(){return!!this.opacity}draw(Q){let J=this.options.setContext(this.getContext()),q=this.opacity;if(!q)return;this._updateAnimationTarget(J);let Y={width:this.width,height:this.height},U={x:this.x,y:this.y};q=Math.abs(q)<0.001?0:q;let K=X5(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=q,this.drawBackground(U,Q,Y,J),KN(Q,J.textDirection),U.y+=K.top,this.drawTitle(U,Q,J),this.drawBody(U,Q,J),this.drawFooter(U,Q,J),BN(Q,J.textDirection),Q.restore()}getActiveElements(){return this._active||[]}setActiveElements(Q,J){let q=this._active,Y=Q.map(({datasetIndex:H,index:M})=>{let F=this.chart.getDatasetMeta(H);if(!F)throw Error("Cannot find a dataset at index "+H);return{datasetIndex:H,element:F.data[M],index:M}}),U=!xZ(q,Y),K=this._positionChanged(Y,J);if(U||K)this._active=Y,this._eventPosition=J,this._ignoreReplayEvents=!0,this.update(!0)}handleEvent(Q,J,q=!0){if(J&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let Y=this.options,U=this._active||[],K=this._getActiveElements(Q,U,J,q),H=this._positionChanged(K,Q),M=J||!xZ(K,U)||H;if(M){if(this._active=K,Y.enabled||Y.external)this._eventPosition={x:Q.x,y:Q.y},this.update(!0,J)}return M}_getActiveElements(Q,J,q,Y){let U=this.options;if(Q.type==="mouseout")return[];if(!Y)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,U.mode,U,q);if(U.reverse)K.reverse();return K}_positionChanged(Q,J){let{caretX:q,caretY:Y,options:U}=this,K=aZ[U.position].call(this,Q,J);return K!==!1&&(q!==K.x||Y!==K.y)}}var V8={id:"tooltip",_element:SN,positioners:aZ,afterInit(Q,J,q){if(q)Q.tooltip=new SN({chart:Q,options:q})},beforeUpdate(Q,J,q){if(Q.tooltip)Q.tooltip.initialize(q)},reset(Q,J,q){if(Q.tooltip)Q.tooltip.initialize(q)},afterDraw(Q){let J=Q.tooltip;if(J&&J._willRender()){let q={tooltip:J};if(Q.notifyPlugins("beforeTooltipDraw",{...q,cancelable:!0})===!1)return;J.draw(Q.ctx),Q.notifyPlugins("afterTooltipDraw",q)}},afterEvent(Q,J){if(Q.tooltip){let q=J.replay;if(Q.tooltip.handleEvent(J.event,q,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:Hz},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 NO=(Q,J,q,Y)=>{if(typeof J==="string")q=Q.push(J)-1,Y.unshift({index:q,label:J});else if(isNaN(J))q=null;return q};function KO(Q,J,q,Y){let U=Q.indexOf(J);if(U===-1)return NO(Q,J,q,Y);let K=Q.lastIndexOf(J);return U!==K?q:U}var BO=(Q,J)=>Q===null?null:y5(Math.round(Q),0,J);function bT(Q){let J=this.getLabels();if(Q>=0&&Q<J.length)return J[Q];return Q}class h4 extends T${static id="category";static defaults={ticks:{callback:bT}};constructor(Q){super(Q);this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(Q){let J=this._addedLabels;if(J.length){let q=this.getLabels();for(let{index:Y,label:U}of J)if(q[Y]===U)q.splice(Y,1);this._addedLabels=[]}super.init(Q)}parse(Q,J){if(t0(Q))return null;let q=this.getLabels();return J=isFinite(J)&&q[J]===Q?J:KO(q,Q,h0(J,Q),this._addedLabels),BO(J,q.length-1)}determineDataLimits(){let{minDefined:Q,maxDefined:J}=this.getUserBounds(),{min:q,max:Y}=this.getMinMax(!0);if(this.options.bounds==="ticks"){if(!Q)q=0;if(!J)Y=this.getLabels().length-1}this.min=q,this.max=Y}buildTicks(){let Q=this.min,J=this.max,q=this.options.offset,Y=[],U=this.getLabels();U=Q===0&&J===U.length-1?U:U.slice(Q,J+1),this._valueRange=Math.max(U.length-(q?0:1),1),this._startValue=this.min-(q?0.5:0);for(let K=Q;K<=J;K++)Y.push({value:K});return Y}getLabelForValue(Q){return bT.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 HO(Q,J){let q=[],Y=0.00000000000001,{bounds:U,step:K,min:H,max:M,precision:F,count:R,maxTicks:T,maxDigits:z,includeBounds:L}=Q,P=K||1,I=T-1,{min:A,max:C}=J,g=!t0(H),m=!t0(M),o=!t0(R),i=(C-A)/(z+1),s=lU((C-A)/I/P)*P,Q0,p,a,Y0;if(s<0.00000000000001&&!g&&!m)return[{value:A},{value:C}];if(Y0=Math.ceil(C/s)-Math.floor(A/s),Y0>I)s=lU(Y0*s/I/P)*P;if(!t0(F))Q0=Math.pow(10,F),s=Math.ceil(s*Q0)/Q0;if(U==="ticks")p=Math.floor(A/s)*s,a=Math.ceil(C/s)*s;else p=A,a=C;if(g&&m&&K&&_R((M-H)/K,s/1000))Y0=Math.round(Math.min((M-H)/s,T)),s=(M-H)/Y0,p=H,a=M;else if(o)p=g?H:p,a=m?M:a,Y0=R-1,s=(a-p)/Y0;else if(Y0=(a-p)/s,u9(Y0,Math.round(Y0),s/1000))Y0=Math.round(Y0);else Y0=Math.ceil(Y0);let d=Math.max(sU(s),sU(p));Q0=Math.pow(10,t0(F)?d:F),p=Math.round(p*Q0)/Q0,a=Math.round(a*Q0)/Q0;let N0=0;if(g){if(L&&p!==H){if(q.push({value:H}),p<H)N0++;if(u9(Math.round((p+N0*s)*Q0)/Q0,H,fT(H,i,Q)))N0++}else if(p<H)N0++}for(;N0<Y0;++N0){let w0=Math.round((p+N0*s)*Q0)/Q0;if(m&&w0>M)break;q.push({value:w0})}if(m&&L&&a!==M)if(q.length&&u9(q[q.length-1].value,M,fT(M,i,Q)))q[q.length-1].value=M;else q.push({value:M});else if(!m||a===M)q.push({value:a});return q}function fT(Q,J,{horizontal:q,minRotation:Y}){let U=$6(Y),K=(q?Math.sin(U):Math.cos(U))||0.001,H=0.75*J*(""+Q).length;return Math.min(J/K,H)}class eZ extends T${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(t0(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:q}=this.getUserBounds(),{min:Y,max:U}=this,K=(M)=>Y=J?Y:M,H=(M)=>U=q?U:M;if(Q){let M=y4(Y),F=y4(U);if(M<0&&F<0)H(0);else if(M>0&&F>0)K(0)}if(Y===U){let M=U===0?1:Math.abs(U*0.05);if(H(U+M),!Q)K(Y-M)}this.min=Y,this.max=U}getTickLimit(){let Q=this.options.ticks,{maxTicksLimit:J,stepSize:q}=Q,Y;if(q){if(Y=Math.ceil(this.max/q)-Math.floor(this.min/q)+1,Y>1000)console.warn(`scales.${this.id}.ticks.stepSize: ${q} would result generating up to ${Y} ticks. Limiting to 1000.`),Y=1000}else Y=this.computeTickLimit(),J=J||11;if(J)Y=Math.min(J,Y);return Y}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let Q=this.options,J=Q.ticks,q=this.getTickLimit();q=Math.max(2,q);let Y={maxTicks:q,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},U=this._range||this,K=HO(Y,U);if(Q.bounds==="ticks")rU(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,q=this.max;if(super.configure(),this.options.offset&&Q.length){let Y=(q-J)/Math.max(Q.length-1,1)/2;J-=Y,q+=Y}this._startValue=J,this._endValue=q,this._valueRange=q-J}getLabelForValue(Q){return $q(Q,this.chart.options.locale,this.options.ticks.format)}}class x4 extends eZ{static id="linear";static defaults={ticks:{callback:uZ.formatters.numeric}};determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!0);this.min=j1(Q)?Q:0,this.max=j1(J)?J:1,this.handleTickRangeOptions()}computeTickLimit(){let Q=this.isHorizontal(),J=Q?this.width:this.height,q=$6(this.options.ticks.minRotation),Y=(Q?Math.sin(q):Math.cos(q))||0.001,U=this._resolveTickFontOptions(0);return Math.ceil(J/Math.min(40,U.lineHeight/Y))}getPixelForValue(Q){return Q===null?NaN:this.getPixelForDecimal((Q-this._startValue)/this._valueRange)}getValueForPixel(Q){return this._startValue+this.getDecimalForPixel(Q)*this._valueRange}}var $Q=(Q)=>Math.floor(e8(Q)),R$=(Q,J)=>Math.pow(10,$Q(Q)+J);function yT(Q){return Q/Math.pow(10,$Q(Q))===1}function gT(Q,J,q){let Y=Math.pow(10,q),U=Math.floor(Q/Y);return Math.ceil(J/Y)-U}function MO(Q,J){let q=J-Q,Y=$Q(q);while(gT(Q,J,Y)>10)Y++;while(gT(Q,J,Y)<10)Y--;return Math.min(Y,$Q(Q))}function FO(Q,{min:J,max:q}){J=g5(Q.min,J);let Y=[],U=$Q(J),K=MO(J,q),H=K<0?Math.pow(10,Math.abs(K)):1,M=Math.pow(10,K),F=U>K?Math.pow(10,U):0,R=Math.round((J-F)*H)/H,T=Math.floor((J-F)/M/10)*M*10,z=Math.floor((R-T)/Math.pow(10,K)),L=g5(Q.min,Math.round((F+T+z*Math.pow(10,K))*H)/H);while(L<q){if(Y.push({value:L,major:yT(L),significand:z}),z>=10)z=z<15?15:20;else z++;if(z>=20)K++,z=2,H=K>=0?1:H;L=Math.round((F+T+z*Math.pow(10,K))*H)/H}let P=g5(Q.max,L);return Y.push({value:P,major:yT(P),significand:z}),Y}class WO extends T${static id="logarithmic";static defaults={ticks:{callback:uZ.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 q=eZ.prototype.parse.apply(this,[Q,J]);if(q===0){this._zero=!0;return}return j1(q)&&q>0?q:null}determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!0);if(this.min=j1(Q)?Math.max(0,Q):null,this.max=j1(J)?Math.max(0,J):null,this.options.beginAtZero)this._zero=!0;if(this._zero&&this.min!==this._suggestedMin&&!j1(this._userMin))this.min=Q===R$(this.min,0)?R$(this.min,-1):R$(this.min,0);this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:Q,maxDefined:J}=this.getUserBounds(),q=this.min,Y=this.max,U=(H)=>q=Q?q:H,K=(H)=>Y=J?Y:H;if(q===Y)if(q<=0)U(1),K(10);else U(R$(q,-1)),K(R$(Y,1));if(q<=0)U(R$(Y,-1));if(Y<=0)K(R$(q,1));this.min=q,this.max=Y}buildTicks(){let Q=this.options,J={min:this._userMin,max:this._userMax},q=FO(J,this);if(Q.bounds==="ticks")rU(q,this,"value");if(Q.reverse)q.reverse(),this.start=this.max,this.end=this.min;else this.start=this.min,this.end=this.max;return q}getLabelForValue(Q){return Q===void 0?"0":$q(Q,this.chart.options.locale,this.options.ticks.format)}configure(){let Q=this.min;super.configure(),this._startValue=e8(Q),this._valueRange=e8(this.max)-e8(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:(e8(Q)-this._startValue)/this._valueRange)}getValueForPixel(Q){let J=this.getDecimalForPixel(Q);return Math.pow(10,this._startValue+J*this._valueRange)}}function vN(Q){let J=Q.ticks;if(J.display&&Q.display){let q=X5(J.backdropPadding);return h0(J.font&&J.font.size,O1.font.size)+q.height}return 0}function wO(Q,J,q){return q=z1(q)?q:[q],{w:kR(Q,J.string,q),h:q.length*J.lineHeight}}function hT(Q,J,q,Y,U){if(Q===Y||Q===U)return{start:J-q/2,end:J+q/2};else if(Q<Y||Q>U)return{start:J-q,end:J};return{start:J,end:J+q}}function RO(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},q=Object.assign({},J),Y=[],U=[],K=Q._pointLabels.length,H=Q.options.pointLabels,M=H.centerPointLabels?b1/K:0;for(let F=0;F<K;F++){let R=H.setContext(Q.getPointLabelContext(F));U[F]=R.padding;let T=Q.getPointPosition(F,Q.drawingArea+U[F],M),z=p1(R.font),L=wO(Q.ctx,z,Q._pointLabels[F]);Y[F]=L;let P=k5(Q.getIndexAngle(F)+M),I=Math.round(aJ(P)),A=hT(I,T.x,L.w,0,180),C=hT(I,T.y,L.h,90,270);TO(q,J,P,A,C)}Q.setCenterPoint(J.l-q.l,q.r-J.r,J.t-q.t,q.b-J.b),Q._pointLabelItems=LO(Q,Y,U)}function TO(Q,J,q,Y,U){let K=Math.abs(Math.sin(q)),H=Math.abs(Math.cos(q)),M=0,F=0;if(Y.start<J.l)M=(J.l-Y.start)/K,Q.l=Math.min(Q.l,J.l-M);else if(Y.end>J.r)M=(Y.end-J.r)/K,Q.r=Math.max(Q.r,J.r+M);if(U.start<J.t)F=(J.t-U.start)/H,Q.t=Math.min(Q.t,J.t-F);else if(U.end>J.b)F=(U.end-J.b)/H,Q.b=Math.max(Q.b,J.b+F)}function zO(Q,J,q){let Y=Q.drawingArea,{extra:U,additionalAngle:K,padding:H,size:M}=q,F=Q.getPointPosition(J,Y+U+H,K),R=Math.round(aJ(k5(F.angle+b5))),T=PO(F.y,M.h,R),z=VO(R),L=EO(F.x,M.w,z);return{visible:!0,x:F.x,y:T,textAlign:z,left:L,top:T,right:L+M.w,bottom:T+M.h}}function _O(Q,J){if(!J)return!0;let{left:q,top:Y,right:U,bottom:K}=Q;return!(w8({x:q,y:Y},J)||w8({x:q,y:K},J)||w8({x:U,y:Y},J)||w8({x:U,y:K},J))}function LO(Q,J,q){let Y=[],U=Q._pointLabels.length,K=Q.options,{centerPointLabels:H,display:M}=K.pointLabels,F={extra:vN(K)/2,additionalAngle:H?b1/U:0},R;for(let T=0;T<U;T++){F.padding=q[T],F.size=J[T];let z=zO(Q,T,F);if(Y.push(z),M==="auto"){if(z.visible=_O(z,R),z.visible)R=z}}return Y}function VO(Q){if(Q===0||Q===180)return"center";else if(Q<180)return"left";return"right"}function EO(Q,J,q){if(q==="right")Q-=J;else if(q==="center")Q-=J/2;return Q}function PO(Q,J,q){if(q===90||q===270)Q-=J/2;else if(q>270||q<90)Q-=J;return Q}function CO(Q,J,q){let{left:Y,top:U,right:K,bottom:H}=q,{backdropColor:M}=J;if(!t0(M)){let F=K2(J.borderRadius),R=X5(J.backdropPadding);Q.fillStyle=M;let T=Y-R.left,z=U-R.top,L=K-Y+R.width,P=H-U+R.height;if(Object.values(F).some((I)=>I!==0))Q.beginPath(),d9(Q,{x:T,y:z,w:L,h:P,radius:F}),Q.fill();else Q.fillRect(T,z,L,P)}}function IO(Q,J){let{ctx:q,options:{pointLabels:Y}}=Q;for(let U=J-1;U>=0;U--){let K=Q._pointLabelItems[U];if(!K.visible)continue;let H=Y.setContext(Q.getPointLabelContext(U));CO(q,H,K);let M=p1(H.font),{x:F,y:R,textAlign:T}=K;N2(q,Q._pointLabels[U],F,R+M.lineHeight/2,M,{color:H.color,textAlign:T,textBaseline:"middle"})}}function Mz(Q,J,q,Y){let{ctx:U}=Q;if(q)U.arc(Q.xCenter,Q.yCenter,J,0,f5);else{let K=Q.getPointPosition(0,J);U.moveTo(K.x,K.y);for(let H=1;H<Y;H++)K=Q.getPointPosition(H,J),U.lineTo(K.x,K.y)}}function jO(Q,J,q,Y,U){let K=Q.ctx,H=J.circular,{color:M,lineWidth:F}=J;if(!H&&!Y||!M||!F||q<0)return;K.save(),K.strokeStyle=M,K.lineWidth=F,K.setLineDash(U.dash||[]),K.lineDashOffset=U.dashOffset,K.beginPath(),Mz(Q,q,H,Y),K.closePath(),K.stroke(),K.restore()}function OO(Q,J,q){return Q6(Q,{label:q,index:J,type:"pointLabel"})}class DO extends eZ{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:uZ.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=X5(vN(this.options)/2),J=this.width=this.maxWidth-Q.width,q=this.height=this.maxHeight-Q.height;this.xCenter=Math.floor(this.left+J/2+Q.left),this.yCenter=Math.floor(this.top+q/2+Q.top),this.drawingArea=Math.floor(Math.min(J,q)/2)}determineDataLimits(){let{min:Q,max:J}=this.getMinMax(!1);this.min=j1(Q)&&!isNaN(Q)?Q:0,this.max=j1(J)&&!isNaN(J)?J:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/vN(this.options))}generateTickLabels(Q){eZ.prototype.generateTickLabels.call(this,Q),this._pointLabels=this.getLabels().map((J,q)=>{let Y=W1(this.options.pointLabels.callback,[J,q],this);return Y||Y===0?Y:""}).filter((J,q)=>this.chart.getDataVisibility(q))}fit(){let Q=this.options;if(Q.display&&Q.pointLabels.display)RO(this);else this.setCenterPoint(0,0,0,0)}setCenterPoint(Q,J,q,Y){this.xCenter+=Math.floor((Q-J)/2),this.yCenter+=Math.floor((q-Y)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(Q,J,q,Y))}getIndexAngle(Q){let J=f5/(this._pointLabels.length||1),q=this.options.startAngle||0;return k5(Q*J+$6(q))}getDistanceFromCenterForValue(Q){if(t0(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(t0(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 q=J[Q];return OO(this.getContext(),Q,q)}}getPointPosition(Q,J,q=0){let Y=this.getIndexAngle(Q)-b5+q;return{x:Math.cos(Y)*J+this.xCenter,y:Math.sin(Y)*J+this.yCenter,angle:Y}}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:q,right:Y,bottom:U}=this._pointLabelItems[Q];return{left:J,top:q,right:Y,bottom:U}}drawBackground(){let{backgroundColor:Q,grid:{circular:J}}=this.options;if(Q){let q=this.ctx;q.save(),q.beginPath(),Mz(this,this.getDistanceFromCenterForValue(this._endValue),J,this._pointLabels.length),q.closePath(),q.fillStyle=Q,q.fill(),q.restore()}}drawGrid(){let Q=this.ctx,J=this.options,{angleLines:q,grid:Y,border:U}=J,K=this._pointLabels.length,H,M,F;if(J.pointLabels.display)IO(this,K);if(Y.display)this.ticks.forEach((R,T)=>{if(T!==0||T===0&&this.min<0){M=this.getDistanceFromCenterForValue(R.value);let z=this.getContext(T),L=Y.setContext(z),P=U.setContext(z);jO(this,L,M,K,P)}});if(q.display){Q.save();for(H=K-1;H>=0;H--){let R=q.setContext(this.getPointLabelContext(H)),{color:T,lineWidth:z}=R;if(!z||!T)continue;Q.lineWidth=z,Q.strokeStyle=T,Q.setLineDash(R.borderDash),Q.lineDashOffset=R.borderDashOffset,M=this.getDistanceFromCenterForValue(J.reverse?this.min:this.max),F=this.getPointPosition(H,M),Q.beginPath(),Q.moveTo(this.xCenter,this.yCenter),Q.lineTo(F.x,F.y),Q.stroke()}Q.restore()}}drawBorder(){}drawLabels(){let Q=this.ctx,J=this.options,q=J.ticks;if(!q.display)return;let Y=this.getIndexAngle(0),U,K;Q.save(),Q.translate(this.xCenter,this.yCenter),Q.rotate(Y),Q.textAlign="center",Q.textBaseline="middle",this.ticks.forEach((H,M)=>{if(M===0&&this.min>=0&&!J.reverse)return;let F=q.setContext(this.getContext(M)),R=p1(F.font);if(U=this.getDistanceFromCenterForValue(this.ticks[M].value),F.showLabelBackdrop){Q.font=R.string,K=Q.measureText(H.label).width,Q.fillStyle=F.backdropColor;let T=X5(F.backdropPadding);Q.fillRect(-K/2-T.left,-U-R.size/2-T.top,K+T.width,R.size+T.height)}N2(Q,H.label,0,-U,R,{color:F.color,strokeColor:F.textStrokeColor,strokeWidth:F.textStrokeWidth})}),Q.restore()}drawTitle(){}}var Rq={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}},x5=Object.keys(Rq);function xT(Q,J){return Q-J}function uT(Q,J){if(t0(J))return null;let q=Q._adapter,{parser:Y,round:U,isoWeekday:K}=Q._parseOpts,H=J;if(typeof Y==="function")H=Y(H);if(!j1(H))H=typeof Y==="string"?q.parse(H,Y):q.parse(H);if(H===null)return null;if(U)H=U==="week"&&(m9(K)||K===!0)?q.startOf(H,"isoWeek",K):q.startOf(H,U);return+H}function mT(Q,J,q,Y){let U=x5.length;for(let K=x5.indexOf(Q);K<U-1;++K){let H=Rq[x5[K]],M=H.steps?H.steps:Number.MAX_SAFE_INTEGER;if(H.common&&Math.ceil((q-J)/(M*H.size))<=Y)return x5[K]}return x5[U-1]}function AO(Q,J,q,Y,U){for(let K=x5.length-1;K>=x5.indexOf(q);K--){let H=x5[K];if(Rq[H].common&&Q._adapter.diff(U,Y,H)>=J-1)return H}return x5[q?x5.indexOf(q):0]}function SO(Q){for(let J=x5.indexOf(Q)+1,q=x5.length;J<q;++J)if(Rq[x5[J]].common)return x5[J]}function dT(Q,J,q){if(!q)Q[J]=!0;else if(q.length){let{lo:Y,hi:U}=tJ(q,J),K=q[Y]>=J?q[Y]:q[U];Q[K]=!0}}function vO(Q,J,q,Y){let U=Q._adapter,K=+U.startOf(J[0].value,Y),H=J[J.length-1].value,M,F;for(M=K;M<=H;M=+U.add(M,1,Y))if(F=q[M],F>=0)J[F].major=!0;return J}function pT(Q,J,q){let Y=[],U={},K=J.length,H,M;for(H=0;H<K;++H)M=J[H],U[M]=H,Y.push({value:M,major:!1});return K===0||!q?Y:vO(Q,Y,U,q)}class kN extends T${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 q=Q.time||(Q.time={}),Y=this._adapter=new MI._date(Q.adapters.date);Y.init(J),h9(q.displayFormats,Y.formats()),this._parseOpts={parser:q.parser,round:q.round,isoWeekday:q.isoWeekday},super.init(Q),this._normalized=J.normalized}parse(Q,J){if(Q===void 0)return null;return uT(this,Q)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let Q=this.options,J=this._adapter,q=Q.time.unit||"day",{min:Y,max:U,minDefined:K,maxDefined:H}=this.getUserBounds();function M(F){if(!K&&!isNaN(F.min))Y=Math.min(Y,F.min);if(!H&&!isNaN(F.max))U=Math.max(U,F.max)}if(!K||!H){if(M(this._getLabelBounds()),Q.bounds!=="ticks"||Q.ticks.source!=="labels")M(this.getMinMax(!1))}Y=j1(Y)&&!isNaN(Y)?Y:+J.startOf(Date.now(),q),U=j1(U)&&!isNaN(U)?U:+J.endOf(Date.now(),q)+1,this.min=Math.min(Y,U-1),this.max=Math.max(Y+1,U)}_getLabelBounds(){let Q=this.getLabelTimestamps(),J=Number.POSITIVE_INFINITY,q=Number.NEGATIVE_INFINITY;if(Q.length)J=Q[0],q=Q[Q.length-1];return{min:J,max:q}}buildTicks(){let Q=this.options,J=Q.time,q=Q.ticks,Y=q.source==="labels"?this.getLabelTimestamps():this._generate();if(Q.bounds==="ticks"&&Y.length)this.min=this._userMin||Y[0],this.max=this._userMax||Y[Y.length-1];let U=this.min,K=this.max,H=PR(Y,U,K);if(this._unit=J.unit||(q.autoSkip?mT(J.minUnit,this.min,this.max,this._getLabelCapacity(U)):AO(this,H.length,J.minUnit,this.min,this.max)),this._majorUnit=!q.major.enabled||this._unit==="year"?void 0:SO(this._unit),this.initOffsets(Y),Q.reverse)H.reverse();return pT(this,H,this._majorUnit)}afterAutoSkip(){if(this.options.offsetAfterAutoskip)this.initOffsets(this.ticks.map((Q)=>+Q.value))}initOffsets(Q=[]){let J=0,q=0,Y,U;if(this.options.offset&&Q.length){if(Y=this.getDecimalForValue(Q[0]),Q.length===1)J=1-Y;else J=(this.getDecimalForValue(Q[1])-Y)/2;if(U=this.getDecimalForValue(Q[Q.length-1]),Q.length===1)q=U;else q=(U-this.getDecimalForValue(Q[Q.length-2]))/2}let K=Q.length<3?0.5:0.25;J=y5(J,0,K),q=y5(q,0,K),this._offsets={start:J,end:q,factor:1/(J+1+q)}}_generate(){let Q=this._adapter,J=this.min,q=this.max,Y=this.options,U=Y.time,K=U.unit||mT(U.minUnit,J,q,this._getLabelCapacity(J)),H=h0(Y.ticks.stepSize,1),M=K==="week"?U.isoWeekday:!1,F=m9(M)||M===!0,R={},T=J,z,L;if(F)T=+Q.startOf(T,"isoWeek",M);if(T=+Q.startOf(T,F?"day":K),Q.diff(q,J,K)>1e5*H)throw Error(J+" and "+q+" are too far apart with stepSize of "+H+" "+K);let P=Y.ticks.source==="data"&&this.getDataTimestamps();for(z=T,L=0;z<q;z=+Q.add(z,H,K),L++)dT(R,z,P);if(z===q||Y.bounds==="ticks"||L===1)dT(R,z,P);return Object.keys(R).sort(xT).map((I)=>+I)}getLabelForValue(Q){let J=this._adapter,q=this.options.time;if(q.tooltipFormat)return J.format(Q,q.tooltipFormat);return J.format(Q,q.displayFormats.datetime)}format(Q,J){let Y=this.options.time.displayFormats,U=this._unit,K=J||Y[U];return this._adapter.format(Q,K)}_tickFormatFunction(Q,J,q,Y){let U=this.options,K=U.ticks.callback;if(K)return W1(K,[Q,J,q],this);let H=U.time.displayFormats,M=this._unit,F=this._majorUnit,R=M&&H[M],T=F&&H[F],z=q[J],L=F&&T&&z&&z.major;return this._adapter.format(Q,Y||(L?T:R))}generateTickLabels(Q){let J,q,Y;for(J=0,q=Q.length;J<q;++J)Y=Q[J],Y.label=this._tickFormatFunction(Y.value,J,Q)}getDecimalForValue(Q){return Q===null?NaN:(Q-this.min)/(this.max-this.min)}getPixelForValue(Q){let J=this._offsets,q=this.getDecimalForValue(Q);return this.getPixelForDecimal((J.start+q)*J.factor)}getValueForPixel(Q){let J=this._offsets,q=this.getDecimalForPixel(Q)/J.factor-J.end;return this.min+q*(this.max-this.min)}_getLabelSize(Q){let J=this.options.ticks,q=this.ctx.measureText(Q).width,Y=$6(this.isHorizontal()?J.maxRotation:J.minRotation),U=Math.cos(Y),K=Math.sin(Y),H=this._resolveTickFontOptions(0).size;return{w:q*U+H*K,h:q*K+H*U}}_getLabelCapacity(Q){let J=this.options.time,q=J.displayFormats,Y=q[J.unit]||q.millisecond,U=this._tickFormatFunction(Q,0,pT(this,[Q],this._majorUnit),Y),K=this._getLabelSize(U),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,q;if(Q.length)return Q;let Y=this.getMatchingVisibleMetas();if(this._normalized&&Y.length)return this._cache.data=Y[0].controller.getAllParsedValues(this);for(J=0,q=Y.length;J<q;++J)Q=Q.concat(Y[J].controller.getAllParsedValues(this));return this._cache.data=this.normalize(Q)}getLabelTimestamps(){let Q=this._cache.labels||[],J,q;if(Q.length)return Q;let Y=this.getLabels();for(J=0,q=Y.length;J<q;++J)Q.push(uT(this,Y[J]));return this._cache.labels=this._normalized?Q:this.normalize(Q)}normalize(Q){return iU(Q.sort(xT))}}function Bq(Q,J,q){let Y=0,U=Q.length-1,K,H,M,F;if(q){if(J>=Q[Y].pos&&J<=Q[U].pos)({lo:Y,hi:U}=q2(Q,"pos",J));({pos:K,time:M}=Q[Y]),{pos:H,time:F}=Q[U]}else{if(J>=Q[Y].time&&J<=Q[U].time)({lo:Y,hi:U}=q2(Q,"time",J));({time:K,pos:M}=Q[Y]),{time:H,pos:F}=Q[U]}let R=H-K;return R?M+(F-M)*(J-K)/R:M}class kO extends kN{static id="timeseries";static defaults=kN.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=Bq(J,this.min),this._tableRange=Bq(J,this.max)-this._minPos,super.initOffsets(Q)}buildLookupTable(Q){let{min:J,max:q}=this,Y=[],U=[],K,H,M,F,R;for(K=0,H=Q.length;K<H;++K)if(F=Q[K],F>=J&&F<=q)Y.push(F);if(Y.length<2)return[{time:J,pos:0},{time:q,pos:1}];for(K=0,H=Y.length;K<H;++K)if(R=Y[K+1],M=Y[K-1],F=Y[K],Math.round((R+M)/2)!==F)U.push({time:F,pos:K/(H-1)});return U}_generate(){let Q=this.min,J=this.max,q=super.getDataTimestamps();if(!q.includes(Q)||!q.length)q.splice(0,0,Q);if(!q.includes(J)||q.length===1)q.push(J);return q.sort((Y,U)=>Y-U)}_getTimestampsForTable(){let Q=this._cache.all||[];if(Q.length)return Q;let J=this.getDataTimestamps(),q=this.getLabelTimestamps();if(J.length&&q.length)Q=this.normalize(J.concat(q));else Q=J.length?J:q;return Q=this._cache.all=Q,Q}getDecimalForValue(Q){return(Bq(this._table,Q)-this._minPos)/this._tableRange}getValueForPixel(Q){let J=this._offsets,q=this.getDecimalForPixel(Q)/J.factor-J.end;return Bq(this._table,q*this._tableRange+this._minPos,!0)}}var qQ=R0(e1(),1);var mN=R0(Fz(),1),q4=R0(e1(),1);var wz="label";function Wz(Q,J){if(typeof Q==="function")Q(J);else if(Q)Q.current=J}function fO(Q,J){let q=Q.options;if(q&&J)Object.assign(q,J)}function Rz(Q,J){Q.labels=J}function Tz(Q,J,q=wz){let Y=[];Q.datasets=J.map((U)=>{let K=Q.datasets.find((H)=>H[q]===U[q]);if(!K||!U.data||Y.includes(K))return{...U};return Y.push(K),Object.assign(K,U),K})}function yO(Q,J=wz){let q={labels:[],datasets:[]};return Rz(q,Q.labels),Tz(q,Q.datasets,J),q}function gO(Q,J){let{height:q=150,width:Y=300,redraw:U=!1,datasetIdKey:K,type:H,data:M,options:F,plugins:R=[],fallbackContent:T,updateMode:z,...L}=Q,P=q4.useRef(null),I=q4.useRef(null),A=()=>{if(!P.current)return;I.current=new P5(P.current,{type:H,data:yO(M,K),options:F&&{...F},plugins:R}),Wz(J,I.current)},C=()=>{if(Wz(J,null),I.current)I.current.destroy(),I.current=null};return q4.useEffect(()=>{if(!U&&I.current&&F)fO(I.current,F)},[U,F]),q4.useEffect(()=>{if(!U&&I.current)Rz(I.current.config.data,M.labels)},[U,M.labels]),q4.useEffect(()=>{if(!U&&I.current&&M.datasets)Tz(I.current.config.data,M.datasets,K)},[U,M.datasets]),q4.useEffect(()=>{if(!I.current)return;if(U)C(),setTimeout(A);else I.current.update(z)},[U,F,M.labels,M.datasets,z]),q4.useEffect(()=>{if(!I.current)return;C(),setTimeout(A)},[H]),q4.useEffect(()=>{return A(),()=>C()},[]),mN.jsx("canvas",{ref:P,role:"img",height:q,width:Y,...L,children:T})}var hO=q4.forwardRef(gO);function zz(Q,J){return P5.register(J),q4.forwardRef((q,Y)=>mN.jsx(hO,{...q,ref:Y,type:Q}))}var E4=zz("line",yN),Tq=zz("bar",fN);var zq=R0(e1(),1),_z="(prefers-color-scheme: dark)";function xO(){if(typeof window>"u")return"light";return window.matchMedia(_z).matches?"dark":"light"}function E8(){let[Q,J]=zq.useState(()=>xO());return zq.useEffect(()=>{let q=window.matchMedia(_z),Y=()=>{J(q.matches?"dark":"light")};return Y(),q.addEventListener("change",Y),()=>q.removeEventListener("change",Y)},[]),Q}var uO=Math.pow(10,8)*24*60*60*1000,Fv=-uO,_q=604800000,Lz=86400000;var GQ=43200,dN=1440;var pN=Symbol.for("constructDateFrom");function F5(Q,J){if(typeof Q==="function")return Q(J);if(Q&&typeof Q==="object"&&pN in Q)return Q[pN](J);if(Q instanceof Date)return new Q.constructor(J);return new Date(J)}function e0(Q,J){return F5(J||Q,Q)}var mO={};function P8(){return mO}function X6(Q,J){let q=P8(),Y=J?.weekStartsOn??J?.locale?.options?.weekStartsOn??q.weekStartsOn??q.locale?.options?.weekStartsOn??0,U=e0(Q,J?.in),K=U.getDay(),H=(K<Y?7:0)+K-Y;return U.setDate(U.getDate()-H),U.setHours(0,0,0,0),U}function _$(Q,J){return X6(Q,{...J,weekStartsOn:1})}function Lq(Q,J){let q=e0(Q,J?.in),Y=q.getFullYear(),U=F5(q,0);U.setFullYear(Y+1,0,4),U.setHours(0,0,0,0);let K=_$(U),H=F5(q,0);H.setFullYear(Y,0,4),H.setHours(0,0,0,0);let M=_$(H);if(q.getTime()>=K.getTime())return Y+1;else if(q.getTime()>=M.getTime())return Y;else return Y-1}function c9(Q){let J=e0(Q),q=new Date(Date.UTC(J.getFullYear(),J.getMonth(),J.getDate(),J.getHours(),J.getMinutes(),J.getSeconds(),J.getMilliseconds()));return q.setUTCFullYear(J.getFullYear()),+Q-+q}function M2(Q,...J){let q=F5.bind(null,Q||J.find((Y)=>typeof Y==="object"));return J.map(q)}function cN(Q,J){let q=e0(Q,J?.in);return q.setHours(0,0,0,0),q}function Vz(Q,J,q){let[Y,U]=M2(q?.in,Q,J),K=cN(Y),H=cN(U),M=+K-c9(K),F=+H-c9(H);return Math.round((M-F)/Lz)}function Ez(Q,J){let q=Lq(Q,J),Y=F5(J?.in||Q,0);return Y.setFullYear(q,0,4),Y.setHours(0,0,0,0),_$(Y)}function l9(Q,J){let q=+e0(Q)-+e0(J);if(q<0)return-1;else if(q>0)return 1;return q}function Pz(Q){return F5(Q,Date.now())}function Cz(Q){return Q instanceof Date||typeof Q==="object"&&Object.prototype.toString.call(Q)==="[object Date]"}function Iz(Q){return!(!Cz(Q)&&typeof Q!=="number"||isNaN(+e0(Q)))}function jz(Q,J,q){let[Y,U]=M2(q?.in,Q,J),K=Y.getFullYear()-U.getFullYear(),H=Y.getMonth()-U.getMonth();return K*12+H}function Oz(Q){return(J)=>{let Y=(Q?Math[Q]:Math.trunc)(J);return Y===0?0:Y}}function Dz(Q,J){return+e0(Q)-+e0(J)}function Az(Q,J){let q=e0(Q,J?.in);return q.setHours(23,59,59,999),q}function Sz(Q,J){let q=e0(Q,J?.in),Y=q.getMonth();return q.setFullYear(q.getFullYear(),Y+1,0),q.setHours(23,59,59,999),q}function vz(Q,J){let q=e0(Q,J?.in);return+Az(q,J)===+Sz(q,J)}function kz(Q,J,q){let[Y,U,K]=M2(q?.in,Q,Q,J),H=l9(U,K),M=Math.abs(jz(U,K));if(M<1)return 0;if(U.getMonth()===1&&U.getDate()>27)U.setDate(30);U.setMonth(U.getMonth()-H*M);let F=l9(U,K)===-H;if(vz(Y)&&M===1&&l9(Y,K)===1)F=!1;let R=H*(M-+F);return R===0?0:R}function bz(Q,J,q){let Y=Dz(Q,J)/1000;return Oz(q?.roundingMethod)(Y)}function fz(Q,J){let q=e0(Q,J?.in);return q.setFullYear(q.getFullYear(),0,1),q.setHours(0,0,0,0),q}var dO={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"}},yz=(Q,J,q)=>{let Y,U=dO[Q];if(typeof U==="string")Y=U;else if(J===1)Y=U.one;else Y=U.other.replace("{{count}}",J.toString());if(q?.addSuffix)if(q.comparison&&q.comparison>0)return"in "+Y;else return Y+" ago";return Y};function Vq(Q){return(J={})=>{let q=J.width?String(J.width):Q.defaultWidth;return Q.formats[q]||Q.formats[Q.defaultWidth]}}var pO={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},cO={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},lO={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},gz={date:Vq({formats:pO,defaultWidth:"full"}),time:Vq({formats:cO,defaultWidth:"full"}),dateTime:Vq({formats:lO,defaultWidth:"full"})};var rO={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},hz=(Q,J,q,Y)=>rO[Q];function r9(Q){return(J,q)=>{let Y=q?.context?String(q.context):"standalone",U;if(Y==="formatting"&&Q.formattingValues){let H=Q.defaultFormattingWidth||Q.defaultWidth,M=q?.width?String(q.width):H;U=Q.formattingValues[M]||Q.formattingValues[H]}else{let H=Q.defaultWidth,M=q?.width?String(q.width):Q.defaultWidth;U=Q.values[M]||Q.values[H]}let K=Q.argumentCallback?Q.argumentCallback(J):J;return U[K]}}var sO={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nO={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},oO={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"]},iO={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"]},aO={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"}},tO={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"}},eO=(Q,J)=>{let q=Number(Q),Y=q%100;if(Y>20||Y<10)switch(Y%10){case 1:return q+"st";case 2:return q+"nd";case 3:return q+"rd"}return q+"th"},xz={ordinalNumber:eO,era:r9({values:sO,defaultWidth:"wide"}),quarter:r9({values:nO,defaultWidth:"wide",argumentCallback:(Q)=>Q-1}),month:r9({values:oO,defaultWidth:"wide"}),day:r9({values:iO,defaultWidth:"wide"}),dayPeriod:r9({values:aO,defaultWidth:"wide",formattingValues:tO,defaultFormattingWidth:"wide"})};function s9(Q){return(J,q={})=>{let Y=q.width,U=Y&&Q.matchPatterns[Y]||Q.matchPatterns[Q.defaultMatchWidth],K=J.match(U);if(!K)return null;let H=K[0],M=Y&&Q.parsePatterns[Y]||Q.parsePatterns[Q.defaultParseWidth],F=Array.isArray(M)?ZD(M,(z)=>z.test(H)):$D(M,(z)=>z.test(H)),R;R=Q.valueCallback?Q.valueCallback(F):F,R=q.valueCallback?q.valueCallback(R):R;let T=J.slice(H.length);return{value:R,rest:T}}}function $D(Q,J){for(let q in Q)if(Object.prototype.hasOwnProperty.call(Q,q)&&J(Q[q]))return q;return}function ZD(Q,J){for(let q=0;q<Q.length;q++)if(J(Q[q]))return q;return}function uz(Q){return(J,q={})=>{let Y=J.match(Q.matchPattern);if(!Y)return null;let U=Y[0],K=J.match(Q.parsePattern);if(!K)return null;let H=Q.valueCallback?Q.valueCallback(K[0]):K[0];H=q.valueCallback?q.valueCallback(H):H;let M=J.slice(U.length);return{value:H,rest:M}}}var QD=/^(\d+)(th|st|nd|rd)?/i,GD=/\d+/i,JD={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},qD={any:[/^b/i,/^(a|c)/i]},XD={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]},UD={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},ND={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},MD={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}},mz={ordinalNumber:uz({matchPattern:QD,parsePattern:GD,valueCallback:(Q)=>parseInt(Q,10)}),era:s9({matchPatterns:JD,defaultMatchWidth:"wide",parsePatterns:qD,defaultParseWidth:"any"}),quarter:s9({matchPatterns:XD,defaultMatchWidth:"wide",parsePatterns:YD,defaultParseWidth:"any",valueCallback:(Q)=>Q+1}),month:s9({matchPatterns:UD,defaultMatchWidth:"wide",parsePatterns:ND,defaultParseWidth:"any"}),day:s9({matchPatterns:KD,defaultMatchWidth:"wide",parsePatterns:BD,defaultParseWidth:"any"}),dayPeriod:s9({matchPatterns:HD,defaultMatchWidth:"any",parsePatterns:MD,defaultParseWidth:"any"})};var JQ={code:"en-US",formatDistance:yz,formatLong:gz,formatRelative:hz,localize:xz,match:mz,options:{weekStartsOn:0,firstWeekContainsDate:1}};function dz(Q,J){let q=e0(Q,J?.in);return Vz(q,fz(q))+1}function pz(Q,J){let q=e0(Q,J?.in),Y=+_$(q)-+Ez(q);return Math.round(Y/_q)+1}function Eq(Q,J){let q=e0(Q,J?.in),Y=q.getFullYear(),U=P8(),K=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??U.firstWeekContainsDate??U.locale?.options?.firstWeekContainsDate??1,H=F5(J?.in||Q,0);H.setFullYear(Y+1,0,K),H.setHours(0,0,0,0);let M=X6(H,J),F=F5(J?.in||Q,0);F.setFullYear(Y,0,K),F.setHours(0,0,0,0);let R=X6(F,J);if(+q>=+M)return Y+1;else if(+q>=+R)return Y;else return Y-1}function cz(Q,J){let q=P8(),Y=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??q.firstWeekContainsDate??q.locale?.options?.firstWeekContainsDate??1,U=Eq(Q,J),K=F5(J?.in||Q,0);return K.setFullYear(U,0,Y),K.setHours(0,0,0,0),X6(K,J)}function lz(Q,J){let q=e0(Q,J?.in),Y=+X6(q,J)-+cz(q,J);return Math.round(Y/_q)+1}function Q1(Q,J){let q=Q<0?"-":"",Y=Math.abs(Q).toString().padStart(J,"0");return q+Y}var Y6={y(Q,J){let q=Q.getFullYear(),Y=q>0?q:1-q;return Q1(J==="yy"?Y%100:Y,J.length)},M(Q,J){let q=Q.getMonth();return J==="M"?String(q+1):Q1(q+1,2)},d(Q,J){return Q1(Q.getDate(),J.length)},a(Q,J){let q=Q.getHours()/12>=1?"pm":"am";switch(J){case"a":case"aa":return q.toUpperCase();case"aaa":return q;case"aaaaa":return q[0];case"aaaa":default:return q==="am"?"a.m.":"p.m."}},h(Q,J){return Q1(Q.getHours()%12||12,J.length)},H(Q,J){return Q1(Q.getHours(),J.length)},m(Q,J){return Q1(Q.getMinutes(),J.length)},s(Q,J){return Q1(Q.getSeconds(),J.length)},S(Q,J){let q=J.length,Y=Q.getMilliseconds(),U=Math.trunc(Y*Math.pow(10,q-3));return Q1(U,J.length)}};var n9={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},lN={G:function(Q,J,q){let Y=Q.getFullYear()>0?1:0;switch(J){case"G":case"GG":case"GGG":return q.era(Y,{width:"abbreviated"});case"GGGGG":return q.era(Y,{width:"narrow"});case"GGGG":default:return q.era(Y,{width:"wide"})}},y:function(Q,J,q){if(J==="yo"){let Y=Q.getFullYear(),U=Y>0?Y:1-Y;return q.ordinalNumber(U,{unit:"year"})}return Y6.y(Q,J)},Y:function(Q,J,q,Y){let U=Eq(Q,Y),K=U>0?U:1-U;if(J==="YY"){let H=K%100;return Q1(H,2)}if(J==="Yo")return q.ordinalNumber(K,{unit:"year"});return Q1(K,J.length)},R:function(Q,J){let q=Lq(Q);return Q1(q,J.length)},u:function(Q,J){let q=Q.getFullYear();return Q1(q,J.length)},Q:function(Q,J,q){let Y=Math.ceil((Q.getMonth()+1)/3);switch(J){case"Q":return String(Y);case"QQ":return Q1(Y,2);case"Qo":return q.ordinalNumber(Y,{unit:"quarter"});case"QQQ":return q.quarter(Y,{width:"abbreviated",context:"formatting"});case"QQQQQ":return q.quarter(Y,{width:"narrow",context:"formatting"});case"QQQQ":default:return q.quarter(Y,{width:"wide",context:"formatting"})}},q:function(Q,J,q){let Y=Math.ceil((Q.getMonth()+1)/3);switch(J){case"q":return String(Y);case"qq":return Q1(Y,2);case"qo":return q.ordinalNumber(Y,{unit:"quarter"});case"qqq":return q.quarter(Y,{width:"abbreviated",context:"standalone"});case"qqqqq":return q.quarter(Y,{width:"narrow",context:"standalone"});case"qqqq":default:return q.quarter(Y,{width:"wide",context:"standalone"})}},M:function(Q,J,q){let Y=Q.getMonth();switch(J){case"M":case"MM":return Y6.M(Q,J);case"Mo":return q.ordinalNumber(Y+1,{unit:"month"});case"MMM":return q.month(Y,{width:"abbreviated",context:"formatting"});case"MMMMM":return q.month(Y,{width:"narrow",context:"formatting"});case"MMMM":default:return q.month(Y,{width:"wide",context:"formatting"})}},L:function(Q,J,q){let Y=Q.getMonth();switch(J){case"L":return String(Y+1);case"LL":return Q1(Y+1,2);case"Lo":return q.ordinalNumber(Y+1,{unit:"month"});case"LLL":return q.month(Y,{width:"abbreviated",context:"standalone"});case"LLLLL":return q.month(Y,{width:"narrow",context:"standalone"});case"LLLL":default:return q.month(Y,{width:"wide",context:"standalone"})}},w:function(Q,J,q,Y){let U=lz(Q,Y);if(J==="wo")return q.ordinalNumber(U,{unit:"week"});return Q1(U,J.length)},I:function(Q,J,q){let Y=pz(Q);if(J==="Io")return q.ordinalNumber(Y,{unit:"week"});return Q1(Y,J.length)},d:function(Q,J,q){if(J==="do")return q.ordinalNumber(Q.getDate(),{unit:"date"});return Y6.d(Q,J)},D:function(Q,J,q){let Y=dz(Q);if(J==="Do")return q.ordinalNumber(Y,{unit:"dayOfYear"});return Q1(Y,J.length)},E:function(Q,J,q){let Y=Q.getDay();switch(J){case"E":case"EE":case"EEE":return q.day(Y,{width:"abbreviated",context:"formatting"});case"EEEEE":return q.day(Y,{width:"narrow",context:"formatting"});case"EEEEEE":return q.day(Y,{width:"short",context:"formatting"});case"EEEE":default:return q.day(Y,{width:"wide",context:"formatting"})}},e:function(Q,J,q,Y){let U=Q.getDay(),K=(U-Y.weekStartsOn+8)%7||7;switch(J){case"e":return String(K);case"ee":return Q1(K,2);case"eo":return q.ordinalNumber(K,{unit:"day"});case"eee":return q.day(U,{width:"abbreviated",context:"formatting"});case"eeeee":return q.day(U,{width:"narrow",context:"formatting"});case"eeeeee":return q.day(U,{width:"short",context:"formatting"});case"eeee":default:return q.day(U,{width:"wide",context:"formatting"})}},c:function(Q,J,q,Y){let U=Q.getDay(),K=(U-Y.weekStartsOn+8)%7||7;switch(J){case"c":return String(K);case"cc":return Q1(K,J.length);case"co":return q.ordinalNumber(K,{unit:"day"});case"ccc":return q.day(U,{width:"abbreviated",context:"standalone"});case"ccccc":return q.day(U,{width:"narrow",context:"standalone"});case"cccccc":return q.day(U,{width:"short",context:"standalone"});case"cccc":default:return q.day(U,{width:"wide",context:"standalone"})}},i:function(Q,J,q){let Y=Q.getDay(),U=Y===0?7:Y;switch(J){case"i":return String(U);case"ii":return Q1(U,J.length);case"io":return q.ordinalNumber(U,{unit:"day"});case"iii":return q.day(Y,{width:"abbreviated",context:"formatting"});case"iiiii":return q.day(Y,{width:"narrow",context:"formatting"});case"iiiiii":return q.day(Y,{width:"short",context:"formatting"});case"iiii":default:return q.day(Y,{width:"wide",context:"formatting"})}},a:function(Q,J,q){let U=Q.getHours()/12>=1?"pm":"am";switch(J){case"a":case"aa":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"});case"aaa":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return q.dayPeriod(U,{width:"narrow",context:"formatting"});case"aaaa":default:return q.dayPeriod(U,{width:"wide",context:"formatting"})}},b:function(Q,J,q){let Y=Q.getHours(),U;if(Y===12)U=n9.noon;else if(Y===0)U=n9.midnight;else U=Y/12>=1?"pm":"am";switch(J){case"b":case"bb":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"});case"bbb":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return q.dayPeriod(U,{width:"narrow",context:"formatting"});case"bbbb":default:return q.dayPeriod(U,{width:"wide",context:"formatting"})}},B:function(Q,J,q){let Y=Q.getHours(),U;if(Y>=17)U=n9.evening;else if(Y>=12)U=n9.afternoon;else if(Y>=4)U=n9.morning;else U=n9.night;switch(J){case"B":case"BB":case"BBB":return q.dayPeriod(U,{width:"abbreviated",context:"formatting"});case"BBBBB":return q.dayPeriod(U,{width:"narrow",context:"formatting"});case"BBBB":default:return q.dayPeriod(U,{width:"wide",context:"formatting"})}},h:function(Q,J,q){if(J==="ho"){let Y=Q.getHours()%12;if(Y===0)Y=12;return q.ordinalNumber(Y,{unit:"hour"})}return Y6.h(Q,J)},H:function(Q,J,q){if(J==="Ho")return q.ordinalNumber(Q.getHours(),{unit:"hour"});return Y6.H(Q,J)},K:function(Q,J,q){let Y=Q.getHours()%12;if(J==="Ko")return q.ordinalNumber(Y,{unit:"hour"});return Q1(Y,J.length)},k:function(Q,J,q){let Y=Q.getHours();if(Y===0)Y=24;if(J==="ko")return q.ordinalNumber(Y,{unit:"hour"});return Q1(Y,J.length)},m:function(Q,J,q){if(J==="mo")return q.ordinalNumber(Q.getMinutes(),{unit:"minute"});return Y6.m(Q,J)},s:function(Q,J,q){if(J==="so")return q.ordinalNumber(Q.getSeconds(),{unit:"second"});return Y6.s(Q,J)},S:function(Q,J){return Y6.S(Q,J)},X:function(Q,J,q){let Y=Q.getTimezoneOffset();if(Y===0)return"Z";switch(J){case"X":return sz(Y);case"XXXX":case"XX":return L$(Y);case"XXXXX":case"XXX":default:return L$(Y,":")}},x:function(Q,J,q){let Y=Q.getTimezoneOffset();switch(J){case"x":return sz(Y);case"xxxx":case"xx":return L$(Y);case"xxxxx":case"xxx":default:return L$(Y,":")}},O:function(Q,J,q){let Y=Q.getTimezoneOffset();switch(J){case"O":case"OO":case"OOO":return"GMT"+rz(Y,":");case"OOOO":default:return"GMT"+L$(Y,":")}},z:function(Q,J,q){let Y=Q.getTimezoneOffset();switch(J){case"z":case"zz":case"zzz":return"GMT"+rz(Y,":");case"zzzz":default:return"GMT"+L$(Y,":")}},t:function(Q,J,q){let Y=Math.trunc(+Q/1000);return Q1(Y,J.length)},T:function(Q,J,q){return Q1(+Q,J.length)}};function rz(Q,J=""){let q=Q>0?"-":"+",Y=Math.abs(Q),U=Math.trunc(Y/60),K=Y%60;if(K===0)return q+String(U);return q+String(U)+J+Q1(K,2)}function sz(Q,J){if(Q%60===0)return(Q>0?"-":"+")+Q1(Math.abs(Q)/60,2);return L$(Q,J)}function L$(Q,J=""){let q=Q>0?"-":"+",Y=Math.abs(Q),U=Q1(Math.trunc(Y/60),2),K=Q1(Y%60,2);return q+U+J+K}var nz=(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"})}},oz=(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"})}},FD=(Q,J)=>{let q=Q.match(/(P+)(p+)?/)||[],Y=q[1],U=q[2];if(!U)return nz(Q,J);let K;switch(Y){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}}",nz(Y,J)).replace("{{time}}",oz(U,J))},iz={p:oz,P:FD};var WD=/^D+$/,wD=/^Y+$/,RD=["D","DD","YY","YYYY"];function az(Q){return WD.test(Q)}function tz(Q){return wD.test(Q)}function ez(Q,J,q){let Y=TD(Q,J,q);if(console.warn(Y),RD.includes(Q))throw RangeError(Y)}function TD(Q,J,q){let Y=Q[0]==="Y"?"years":"days of the month";return`Use \`${Q.toLowerCase()}\` instead of \`${Q}\` (in \`${J}\`) for formatting ${Y} to the input \`${q}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var zD=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,_D=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,LD=/^'([^]*?)'?$/,VD=/''/g,ED=/[a-zA-Z]/;function u4(Q,J,q){let Y=P8(),U=q?.locale??Y.locale??JQ,K=q?.firstWeekContainsDate??q?.locale?.options?.firstWeekContainsDate??Y.firstWeekContainsDate??Y.locale?.options?.firstWeekContainsDate??1,H=q?.weekStartsOn??q?.locale?.options?.weekStartsOn??Y.weekStartsOn??Y.locale?.options?.weekStartsOn??0,M=e0(Q,q?.in);if(!Iz(M))throw RangeError("Invalid time value");let F=J.match(_D).map((T)=>{let z=T[0];if(z==="p"||z==="P"){let L=iz[z];return L(T,U.formatLong)}return T}).join("").match(zD).map((T)=>{if(T==="''")return{isToken:!1,value:"'"};let z=T[0];if(z==="'")return{isToken:!1,value:PD(T)};if(lN[z])return{isToken:!0,value:T};if(z.match(ED))throw RangeError("Format string contains an unescaped latin alphabet character `"+z+"`");return{isToken:!1,value:T}});if(U.localize.preprocessor)F=U.localize.preprocessor(M,F);let R={firstWeekContainsDate:K,weekStartsOn:H,locale:U};return F.map((T)=>{if(!T.isToken)return T.value;let z=T.value;if(!q?.useAdditionalWeekYearTokens&&tz(z)||!q?.useAdditionalDayOfYearTokens&&az(z))ez(z,J,String(Q));let L=lN[z[0]];return L(M,z,U.localize,R)}).join("")}function PD(Q){let J=Q.match(LD);if(!J)return Q;return J[1].replace(VD,"'")}function $_(Q,J,q){let Y=P8(),U=q?.locale??Y.locale??JQ,K=2520,H=l9(Q,J);if(isNaN(H))throw RangeError("Invalid time value");let M=Object.assign({},q,{addSuffix:q?.addSuffix,comparison:H}),[F,R]=M2(q?.in,...H>0?[J,Q]:[Q,J]),T=bz(R,F),z=(c9(R)-c9(F))/1000,L=Math.round((T-z)/60),P;if(L<2)if(q?.includeSeconds)if(T<5)return U.formatDistance("lessThanXSeconds",5,M);else if(T<10)return U.formatDistance("lessThanXSeconds",10,M);else if(T<20)return U.formatDistance("lessThanXSeconds",20,M);else if(T<40)return U.formatDistance("halfAMinute",0,M);else if(T<60)return U.formatDistance("lessThanXMinutes",1,M);else return U.formatDistance("xMinutes",1,M);else if(L===0)return U.formatDistance("lessThanXMinutes",1,M);else return U.formatDistance("xMinutes",L,M);else if(L<45)return U.formatDistance("xMinutes",L,M);else if(L<90)return U.formatDistance("aboutXHours",1,M);else if(L<dN){let I=Math.round(L/60);return U.formatDistance("aboutXHours",I,M)}else if(L<2520)return U.formatDistance("xDays",1,M);else if(L<GQ){let I=Math.round(L/dN);return U.formatDistance("xDays",I,M)}else if(L<GQ*2)return P=Math.round(L/GQ),U.formatDistance("aboutXMonths",P,M);if(P=kz(R,F),P<12){let I=Math.round(L/GQ);return U.formatDistance("xMonths",I,M)}else{let I=P%12,A=Math.trunc(P/12);if(I<3)return U.formatDistance("aboutXYears",A,M);else if(I<9)return U.formatDistance("overXYears",A,M);else return U.formatDistance("almostXYears",A+1,M)}}function Z_(Q,J){return $_(Q,Pz(Q),J)}var m5=R0(G1(),1),Y5=["#a78bfa","#22d3ee","#ec4899","#4ade80","#fbbf24","#f87171","#60a5fa"],Pq={dark:{legendLabel:"#94a3b8",tooltipBackground:"#16161e",tooltipTitle:"#f8fafc",tooltipBody:"#94a3b8",tooltipBorder:"rgba(255, 255, 255, 0.1)",grid:"rgba(255, 255, 255, 0.06)",tick:"#64748b"},light:{legendLabel:"#475569",tooltipBackground:"#ffffff",tooltipTitle:"#0f172a",tooltipBody:"#334155",tooltipBorder:"rgba(15, 23, 42, 0.18)",grid:"rgba(15, 23, 42, 0.08)",tick:"#64748b"}};function Cq(Q){let{chartTheme:J,showLegend:q,defaultLabel:Y,formatValue:U,footer:K}=Q;return{legend:{display:q,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 M=H.dataset.label??Y,F=H.parsed.y??0;return`${M}: ${U(F)}`},...K?{footer:K}:{}}}}}function Iq(Q){let{chartTheme:J,formatY:q}=Q,Y={grid:{color:J.grid,drawBorder:!1},ticks:{color:J.tick,font:{size:11}}},U={...Y,ticks:{...Y.ticks,callback:(K)=>q(Number(K))},min:0};return{sharedScaleBase:Y,yScale:U}}function jq(Q){return{borderColor:Q,backgroundColor:`${Q}20`,fill:!0,tension:0,pointRadius:3,pointHoverRadius:4,borderWidth:2}}function Oq(Q){return{backgroundColor:Q,borderColor:Q,borderWidth:0,borderRadius:3}}function o9(Q,J){return Q.datasets.map((q,Y)=>({label:q.label,data:q.data,...J(Y)}))}function Dq(Q,J,q){if(Q.length===0)return{labels:[],datasets:[]};let{initBucket:Y,accumulate:U,bucketToValue:K}=q,H=new Map;for(let F of Q){let R=H.get(F.timestamp)??Y();U(R,F),H.set(F.timestamp,R)}let M=[...H.entries()].sort((F,R)=>F[0]-R[0]);return{labels:M.map(([F])=>u4(new Date(F),"MMM d")),datasets:[{label:J,data:M.map(([,F])=>K(F))}]}}function Aq(Q,J){if(Q.length===0)return{labels:[],datasets:[]};let{topN:q=5,rankWeight:Y,initBucket:U,accumulate:K,bucketToValue:H}=J,M=new Map;for(let g of Q){let m=`${g.model}::${g.provider}`,o=M.get(m);if(o)o.weight+=Y(g);else M.set(m,{model:g.model,provider:g.provider,weight:Y(g)})}let R=[...M.entries()].sort((g,m)=>m[1].weight-g[1].weight).slice(0,q),T=new Set(R.map(([g])=>g)),z=new Map;for(let[,{model:g}]of R)z.set(g,(z.get(g)??0)+1);let L=new Map;for(let[g,{model:m,provider:o}]of R)L.set(g,(z.get(m)??0)>1?`${m} (${o})`:m);let P=[...new Set(Q.map((g)=>g.timestamp))].sort((g,m)=>g-m),I=R.map(([g])=>L.get(g)??g);if(Q.some((g)=>!T.has(`${g.model}::${g.provider}`)))I.push("Other");let C=new Map;for(let g of P)C.set(g,{});for(let g of Q){let m=`${g.model}::${g.provider}`,o=T.has(m)?L.get(m)??g.model:"Other",i=C.get(g.timestamp);if(!i)continue;let s=i[o]??U();K(s,g),i[o]=s}return{labels:P.map((g)=>u4(new Date(g),"MMM d")),datasets:I.map((g)=>({label:g,data:P.map((m)=>{let o=C.get(m)?.[g];return o?H(o):0})}))}}function ID({byModel:Q,onChange:J}){return m5.jsxDEV("div",{className:"flex bg-[var(--bg-surface)] rounded-[var(--radius-sm)] p-0.5 border border-[var(--border-subtle)]",children:[m5.jsxDEV("button",{type:"button",onClick:()=>J(!1),className:`tab-btn text-xs ${!Q?"active":""}`,children:"All Models"},void 0,!1,void 0,this),m5.jsxDEV("button",{type:"button",onClick:()=>J(!0),className:`tab-btn text-xs ${Q?"active":""}`,children:"By Model"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function Sq({title:Q,subtitle:J,empty:q,emptyMessage:Y,controls:U,byModel:K,onByModelChange:H,children:M}){return m5.jsxDEV("div",{className:"surface overflow-hidden",children:[m5.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)] flex items-center justify-between gap-4 flex-wrap",children:[m5.jsxDEV("div",{children:[m5.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),m5.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-1",children:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this),m5.jsxDEV("div",{className:"flex items-center gap-2 flex-wrap",children:[U,m5.jsxDEV(ID,{byModel:K,onChange:H},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),m5.jsxDEV("div",{className:"p-5 min-h-[320px]",children:q?m5.jsxDEV("div",{className:"h-full flex items-center justify-center text-[var(--text-muted)] text-sm",children:Y},void 0,!1,void 0,this):m5.jsxDEV("div",{className:"h-[280px]",children:M},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var i9=R0(G1(),1);P5.register(h4,x4,QQ,u5,g4,L8,V8,_8,p9);var rN=[{value:"yelling",label:"Yelling"},{value:"profanity",label:"Profanity"},{value:"anguish",label:"Anguish (!!!, nooo, dude, ..)"},{value:"negation",label:"Negation (no/nope/wrong)"},{value:"repetition",label:"Repetition (i meant, still doesnt)"},{value:"blame",label:"Blame (you didnt, stop X-ing)"},{value:"frustration",label:"Frustration (neg + rep + blame)"},{value:"total",label:"All signals combined"}];function Q_(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 G_(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 J_(Q,J){if(J<=0)return 0;return Q/J*100}function jD(Q,J){let q=rN.find((Y)=>Y.value===J)?.label??"Hits";return Dq(Q,q,{initBucket:()=>({hits:0,messages:0}),accumulate:(Y,U)=>{Y.hits+=G_(U,J),Y.messages+=U.messages},bucketToValue:(Y)=>J_(Y.hits,Y.messages)})}function OD(Q,J){return Aq(Q,{rankWeight:(q)=>q.messages,initBucket:()=>({hits:0,messages:0}),accumulate:(q,Y)=>{q.hits+=G_(Y,J),q.messages+=Y.messages},bucketToValue:(q)=>J_(q.hits,q.messages)})}function q_({behaviorSeries:Q}){let[J,q]=qQ.useState(!1),[Y,U]=qQ.useState("total"),K=E8(),H=Pq[K],M=qQ.useMemo(()=>J?OD(Q,Y):jD(Q,Y),[Q,J,Y]),F=Cq({chartTheme:H,showLegend:J,defaultLabel:"Hits",formatValue:Q_}),{sharedScaleBase:R,yScale:T}=Iq({chartTheme:H,formatY:Q_}),z=rN.find((I)=>I.value===Y)?.label??"",L=i9.jsxDEV("div",{className:"flex bg-[var(--bg-surface)] rounded-[var(--radius-sm)] p-0.5 border border-[var(--border-subtle)]",children:rN.map((I)=>i9.jsxDEV("button",{type:"button",onClick:()=>U(I.value),className:`tab-btn text-xs ${Y===I.value?"active":""}`,children:I.label},I.value,!1,void 0,this))},void 0,!1,void 0,this),P;if(J){let I={labels:M.labels,datasets:o9(M,(C)=>jq(Y5[C%Y5.length]))};P=i9.jsxDEV(E4,{data:I,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:F,scales:{x:R,y:T}}},void 0,!1,void 0,this)}else{let I={labels:M.labels,datasets:o9(M,(C)=>Oq(Y5[C%Y5.length]))},A={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:F,scales:{x:{...R,stacked:!0},y:{...T,stacked:!0}},layout:{padding:{top:8}}};P=i9.jsxDEV(Tq,{data:I,options:A},void 0,!1,void 0,this)}return i9.jsxDEV(Sq,{title:"User Tantrums",subtitle:`${z} as % of user messages per day`,empty:M.labels.length===0,emptyMessage:"No behavioral data yet. Sync to scan your sessions.",controls:L,byModel:J,onByModelChange:q,children:P},void 0,!1,void 0,this)}var rq=R0(e1(),1);var bq=R0(e1(),1);var vq=(...Q)=>Q.filter((J,q,Y)=>{return Boolean(J)&&J.trim()!==""&&Y.indexOf(J)===q}).join(" ").trim();var X_=(Q)=>Q.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var Y_=(Q)=>Q.replace(/^([A-Z])|[\s-_]+(\w)/g,(J,q,Y)=>Y?Y.toUpperCase():q.toLowerCase());var sN=(Q)=>{let J=Y_(Q);return J.charAt(0).toUpperCase()+J.slice(1)};var XQ=R0(e1(),1);var kq={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 U_=(Q)=>{for(let J in Q)if(J.startsWith("aria-")||J==="role"||J==="title")return!0;return!1};var a9=R0(e1(),1),DD=a9.createContext({});var N_=()=>a9.useContext(DD);var K_=XQ.forwardRef(({color:Q,size:J,strokeWidth:q,absoluteStrokeWidth:Y,className:U="",children:K,iconNode:H,...M},F)=>{let{size:R=24,strokeWidth:T=2,absoluteStrokeWidth:z=!1,color:L="currentColor",className:P=""}=N_()??{},I=Y??z?Number(q??T)*24/Number(J??R):q??T;return XQ.createElement("svg",{ref:F,...kq,width:J??R??kq.width,height:J??R??kq.height,stroke:Q??L,strokeWidth:I,className:vq("lucide",P,U),...!K&&!U_(M)&&{"aria-hidden":"true"},...M},[...H.map(([A,C])=>XQ.createElement(A,C)),...Array.isArray(K)?K:[K]])});var x0=(Q,J)=>{let q=bq.forwardRef(({className:Y,...U},K)=>bq.createElement(K_,{ref:K,iconNode:J,className:vq(`lucide-${X_(sN(Q))}`,`lucide-${Q}`,Y),...U}));return q.displayName=sN(Q),q};var AD=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],F2=x0("chart-column",AD);var SD=[["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"}]],W2=x0("circle-alert",SD);var vD=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],w2=x0("circle-check",vD);var kD=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],R2=x0("circle-x",kD);var bD=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]],T2=x0("file-braces",bD);var fD=[["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"}]],E$=x0("activity",fD);var yD=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],YQ=x0("chevron-down",yD);var gD=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],UQ=x0("chevron-up",gD);var hD=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],NQ=x0("clock",hD);var xD=[["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"}]],KQ=x0("coins",xD);var uD=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],BQ=x0("database",uD);var mD=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],HQ=x0("download",mD);var dD=[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]],MQ=x0("gauge",dD);var pD=[["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"}]],FQ=x0("hash",pD);var cD=[["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"}]],WQ=x0("refresh-cw",cD);var lD=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],wQ=x0("server",lD);var rD=[["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"}]],P$=x0("star",rD);var sD=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],RQ=x0("upload",sD);var nD=[["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"}]],C$=x0("zap",nD);var oD=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],TQ=x0("x",oD);var P1=R0(G1(),1),fq={dark:{legendLabel:"#cbd5e1",tooltipBackground:"#16161e",tooltipTitle:"#f8fafc",tooltipBody:"#94a3b8",tooltipBorder:"rgba(255, 255, 255, 0.1)",grid:"rgba(255, 255, 255, 0.06)",tick:"#94a3b8"},light:{legendLabel:"#334155",tooltipBackground:"#ffffff",tooltipTitle:"#0f172a",tooltipBody:"#334155",tooltipBorder:"rgba(15, 23, 42, 0.18)",grid:"rgba(15, 23, 42, 0.08)",tick:"#475569"}};function U6(Q){return{borderColor:Q,backgroundColor:"transparent",tension:0.4,pointRadius:0,borderWidth:2}}function yq({timestamps:Q,values:J,color:q}){let Y={labels:Q.map((K)=>u4(new Date(K),"MMM d")),datasets:[{data:J,...U6(q)}]};return P1.jsxDEV(E4,{data:Y,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 gq(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 B_(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 H_(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 hq({title:Q,subtitle:J,children:q}){return P1.jsxDEV("div",{className:"surface overflow-hidden",children:[P1.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)]",children:[P1.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),J?P1.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),P1.jsxDEV("div",{className:"overflow-x-auto",children:q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function iD(Q){if(Q==="right")return"text-right";if(Q==="center")return"text-center";return""}function xq({columns:Q,gridTemplate:J}){return P1.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((q)=>P1.jsxDEV("div",{className:iD(q.align),children:q.label},q.label,!1,void 0,this)),P1.jsxDEV("div",{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function uq({children:Q}){return P1.jsxDEV("div",{className:"max-h-[calc(100vh-300px)] overflow-y-auto",children:Q},void 0,!1,void 0,this)}function mq({model:Q,provider:J}){return P1.jsxDEV("div",{children:[P1.jsxDEV("div",{className:"font-medium text-[var(--text-primary)]",children:Q},void 0,!1,void 0,this),P1.jsxDEV("div",{className:"text-xs text-[var(--text-muted)]",children:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function dq({gridTemplate:Q,cells:J,trendCell:q,isExpanded:Y,onToggle:U,expandedContent:K}){return P1.jsxDEV("div",{className:"border-t border-[var(--border-subtle)]",children:[P1.jsxDEV("button",{type:"button",onClick:U,className:"w-full bg-transparent border-none text-left px-5 py-3 cursor-pointer hover:bg-[var(--bg-hover)] transition-colors",children:P1.jsxDEV("div",{className:"grid gap-3 items-center",style:{gridTemplateColumns:Q},children:[J,P1.jsxDEV("div",{className:"h-10",children:q},void 0,!1,void 0,this),P1.jsxDEV("div",{className:"flex justify-center text-[var(--text-muted)]",children:Y?P1.jsxDEV(UQ,{size:16},void 0,!1,void 0,this):P1.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),Y?P1.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 pq(){return P1.jsxDEV("div",{className:"text-[var(--text-muted)] text-center text-sm",children:"-"},void 0,!1,void 0,this)}function cq({message:Q="No data available"}){return P1.jsxDEV("div",{className:"h-full flex items-center justify-center text-[var(--text-muted)] text-sm",children:Q},void 0,!1,void 0,this)}var r0=R0(G1(),1);P5.register(h4,x4,g4,u5,L8,V8,_8);var lq={yelling:"#fbbf24",profanity:"#f87171",anguish:"#a78bfa",frustration:"#22d3ee"},M_="2fr 0.9fr 0.8fr 0.8fr 0.8fr 0.9fr 0.8fr 140px 40px";function W_(Q){return Q.toLocaleString()}function F_(Q){if(Q.totalMessages===0)return 0;return(Q.totalYelling+Q.totalProfanity+Q.totalAnguish+Q.totalNegation+Q.totalRepetition+Q.totalBlame)/Q.totalMessages}function t9(Q,J){if(J===0)return"-";let q=Q/J*100;if(q===0)return"0%";if(q<1)return`${q.toFixed(1)}%`;return`${q.toFixed(0)}%`}function w_({models:Q,behaviorSeries:J}){let[q,Y]=rq.useState(null),U=E8(),K=fq[U],H=rq.useMemo(()=>tD(J),[J]),M=[...Q].sort((F,R)=>{if(R.totalMessages!==F.totalMessages)return R.totalMessages-F.totalMessages;return F_(R)-F_(F)});return r0.jsxDEV(hq,{title:"Behavior by Model",subtitle:"How often each model elicited a tantrum — rates are per user message",children:[r0.jsxDEV(xq,{gridTemplate:M_,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(uq,{children:[M.map((F,R)=>{let T=`${F.model}::${F.provider}`,z=H.get(T)?.data??[],L=Y5[R%Y5.length],P=q===T,I=F.totalNegation+F.totalRepetition+F.totalBlame,A=F.totalYelling+F.totalProfanity+F.totalAnguish+I;return r0.jsxDEV(dq,{gridTemplate:M_,isExpanded:P,onToggle:()=>Y(P?null:T),cells:[r0.jsxDEV(mq,{model:F.model,provider:F.provider},"name",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:W_(F.totalMessages)},"messages",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(F.totalYelling,F.totalMessages)},"caps",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(F.totalProfanity,F.totalMessages)},"profanity",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(F.totalAnguish,F.totalMessages)},"anguish",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(I,F.totalMessages)},"frustration",!1,void 0,this),r0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:t9(A,F.totalMessages)},"hits",!1,void 0,this)],trendCell:z.length===0?r0.jsxDEV(pq,{},void 0,!1,void 0,this):r0.jsxDEV(yq,{timestamps:z.map((C)=>C.timestamp),values:z.map((C)=>C.total),color:L},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(I$,{label:"Yelling (CAPS)",total:F.totalYelling,messages:F.totalMessages,valueClass:"text-[var(--accent-amber,#fbbf24)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Profanity",total:F.totalProfanity,messages:F.totalMessages,valueClass:"text-[var(--accent-red,#f87171)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Anguish (!!!, nooo, dude, ..)",total:F.totalAnguish,messages:F.totalMessages,valueClass:"text-[var(--accent-violet,#a78bfa)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Negation (no/nope/wrong)",total:F.totalNegation,messages:F.totalMessages,valueClass:"text-[var(--accent-cyan,#22d3ee)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Repetition (i meant, still doesnt)",total:F.totalRepetition,messages:F.totalMessages,valueClass:"text-[var(--accent-cyan,#22d3ee)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Blame (you didnt, stop X-ing)",total:F.totalBlame,messages:F.totalMessages,valueClass:"text-[var(--accent-cyan,#22d3ee)]"},void 0,!1,void 0,this),r0.jsxDEV(I$,{label:"Avg chars / msg",total:F.totalChars,messages:F.totalMessages,valueClass:"text-[var(--text-secondary)]",mode:"average"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),r0.jsxDEV("div",{className:"h-[200px]",children:z.length===0?r0.jsxDEV(cq,{},void 0,!1,void 0,this):r0.jsxDEV(aD,{data:z,chartTheme:K},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},T,!1,void 0,this)}),M.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 I$({label:Q,total:J,messages:q,valueClass:Y,mode:U="rate"}){let K=U==="rate"?"% of msgs":"Per msg",H=q>0?U==="rate"?t9(J,q):(J/q).toFixed(0):"-";return r0.jsxDEV("div",{children:[r0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:Q},void 0,!1,void 0,this),r0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[r0.jsxDEV("div",{className:"flex items-center justify-between",children:[r0.jsxDEV("span",{children:"Total"},void 0,!1,void 0,this),r0.jsxDEV("span",{className:`font-mono ${Y}`,children:W_(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",{children:K},void 0,!1,void 0,this),r0.jsxDEV("span",{className:"font-mono",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)}function aD({data:Q,chartTheme:J}){let q={labels:Q.map((U)=>u4(new Date(U.timestamp),"MMM d")),datasets:[{label:"CAPS",data:Q.map((U)=>U.yelling),...U6(lq.yelling)},{label:"Profanity",data:Q.map((U)=>U.profanity),...U6(lq.profanity)},{label:"Anguish",data:Q.map((U)=>U.anguish),...U6(lq.anguish)},{label:"Frustration",data:Q.map((U)=>U.frustration),...U6(lq.frustration)}]},Y={responsive:!0,maintainAspectRatio:!1,plugins:gq(J),scales:B_(J)};return r0.jsxDEV(E4,{data:q,options:Y},void 0,!1,void 0,this)}function tD(Q){if(Q.length===0)return new Map;let J=[...new Set(Q.map((U)=>U.timestamp))].sort((U,K)=>U-K),q=new Map;for(let U of Q){let K=`${U.model}::${U.provider}`,H=q.get(K);if(!H)H=new Map,q.set(K,H);let M=H.get(U.timestamp)??{timestamp:U.timestamp,yelling:0,profanity:0,anguish:0,frustration:0,total:0};M.yelling+=U.yelling,M.profanity+=U.profanity,M.anguish+=U.anguish,M.frustration+=U.negation+U.repetition+U.blame,M.total=M.yelling+M.profanity+M.anguish+M.frustration,H.set(U.timestamp,M)}let Y=new Map;for(let[U,K]of q){let H=J.map((M)=>K.get(M)??{timestamp:M,yelling:0,profanity:0,anguish:0,frustration:0,total:0});Y.set(U,{data:H})}return Y}var R_=R0(e1(),1),$7=R0(G1(),1);function e9(Q){return Q.toLocaleString()}function sq(Q,J){if(J<=0)return;return`${(Q/J).toFixed(2)} / msg`}function T_({overall:Q,behaviorSeries:J}){let q=R_.useMemo(()=>{let H=new Map;for(let F of J){let R=`${F.model}::${F.provider}`,T=H.get(R),z=F.yelling+F.profanity+F.anguish+F.negation+F.repetition+F.blame;if(T)T.score+=z;else H.set(R,{model:F.model,provider:F.provider,score:z})}let M=null;for(let F of H.values())if(!M||F.score>M.score)M=F;return M},[J]),Y=Q.totalNegation+Q.totalRepetition+Q.totalBlame,U=Q.totalMessages,K=[{label:"Messages",value:e9(Q.totalMessages),sub:U>0?"in selected range":void 0},{label:"Yelling",value:e9(Q.totalYelling),sub:sq(Q.totalYelling,U)},{label:"Profanity hits",value:e9(Q.totalProfanity),sub:sq(Q.totalProfanity,U)},{label:"Anguish",value:e9(Q.totalAnguish),sub:sq(Q.totalAnguish,U)},{label:"Frustration",value:e9(Y),sub:sq(Y,U)},{label:"Most yelled-at",value:q?.model??"—",sub:q?`${e9(q.score)} hits`:void 0}];return $7.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-6 gap-4",children:K.map((H)=>$7.jsxDEV("div",{className:"surface px-4 py-3",children:[$7.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mb-1",children:H.label},void 0,!1,void 0,this),$7.jsxDEV("p",{className:"text-lg font-semibold text-[var(--text-primary)] truncate",title:H.value,children:H.value},void 0,!1,void 0,this),H.sub&&$7.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-0.5",children:H.sub},void 0,!1,void 0,this)]},H.label,!0,void 0,this))},void 0,!1,void 0,this)}var L_=R0(e1(),1);var nN=3600000,nq=24*nN,z_={"1h":{windowLabel:"the last hour",trendLabel:"1h Trend",bucketMs:nN,bucketCount:1,tickFormat:"HH:mm"},"24h":{windowLabel:"the last 24 hours",trendLabel:"24h Trend",bucketMs:nN,bucketCount:24,tickFormat:"HH:mm"},"7d":{windowLabel:"the last 7 days",trendLabel:"7d Trend",bucketMs:nq,bucketCount:7,tickFormat:"MMM d"},"30d":{windowLabel:"the last 30 days",trendLabel:"30d Trend",bucketMs:nq,bucketCount:30,tickFormat:"MMM d"},"90d":{windowLabel:"the last 90 days",trendLabel:"90d Trend",bucketMs:nq,bucketCount:90,tickFormat:"MMM d"},all:{windowLabel:"all time",trendLabel:"Trend",bucketMs:nq,bucketCount:0,tickFormat:"MMM d"}};function oq(Q){return z_[Q]}function __(Q,J){return u4(new Date(Q),z_[J].tickFormat)}var N6=R0(G1(),1);P5.register(h4,x4,g4,u5,L8,V8,_8,p9);var iq=["#a78bfa","#22d3ee","#ec4899","#4ade80","#fbbf24","#f87171","#60a5fa"],eD={dark:{legendLabel:"#94a3b8",tooltipBackground:"#16161e",tooltipTitle:"#f8fafc",tooltipBody:"#94a3b8",tooltipBorder:"rgba(255, 255, 255, 0.1)",grid:"rgba(255, 255, 255, 0.06)",tick:"#64748b"},light:{legendLabel:"#475569",tooltipBackground:"#ffffff",tooltipTitle:"#0f172a",tooltipBody:"#334155",tooltipBorder:"rgba(15, 23, 42, 0.18)",grid:"rgba(15, 23, 42, 0.08)",tick:"#64748b"}};function V_({modelSeries:Q,timeRange:J}){let q=L_.useMemo(()=>$A(Q),[Q]),Y=E8(),U=eD[Y],K=oq(J),H={labels:q.data.map((F)=>__(F.timestamp,J)),datasets:q.series.map((F,R)=>({label:F,data:q.data.map((T)=>T[F]??0),borderColor:iq[R%iq.length],backgroundColor:`${iq[R%iq.length]}20`,fill:!0,tension:0.4,pointRadius:0,pointHoverRadius:4,borderWidth:2}))},M={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"top",align:"start",labels:{color:U.legendLabel,usePointStyle:!0,padding:16,font:{size:12},boxWidth:8}},tooltip:{backgroundColor:U.tooltipBackground,titleColor:U.tooltipTitle,bodyColor:U.tooltipBody,borderColor:U.tooltipBorder,borderWidth:1,padding:12,cornerRadius:8,callbacks:{label:(F)=>{let R=F.dataset.label??"",T=F.parsed.y;return`${R}: ${(T??0).toFixed(1)}%`}}}},scales:{x:{grid:{color:U.grid,drawBorder:!1},ticks:{color:U.tick,font:{size:11}}},y:{grid:{color:U.grid,drawBorder:!1},ticks:{color:U.tick,font:{size:11},callback:(F)=>`${F}%`},min:0,max:100}}};return N6.jsxDEV("div",{className:"surface overflow-hidden",children:[N6.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)]",children:[N6.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:"Model Preference"},void 0,!1,void 0,this),N6.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-1",children:["Share of requests over ",K.windowLabel]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),N6.jsxDEV("div",{className:"p-5 min-h-[320px]",children:q.data.length===0?N6.jsxDEV("div",{className:"h-full flex items-center justify-center text-[var(--text-muted)] text-sm",children:"No data available"},void 0,!1,void 0,this):N6.jsxDEV("div",{className:"h-[280px]",children:N6.jsxDEV(E4,{data:H,options: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)}function $A(Q,J=5){if(Q.length===0)return{data:[],series:[]};let q=new Map;for(let z of Q){let L=`${z.model}::${z.provider}`,P=q.get(L);if(P)P.total+=z.requests;else q.set(L,{model:z.model,provider:z.provider,total:z.requests})}let U=[...q.entries()].map(([z,L])=>({key:z,...L})).sort((z,L)=>L.total-z.total).slice(0,J),K=new Set(U.map((z)=>z.key)),H=new Map;for(let z of U)H.set(z.model,(H.get(z.model)??0)+1);let M=new Map;for(let z of U){let L=(H.get(z.model)??0)>1;M.set(z.key,L?`${z.model} (${z.provider})`:z.model)}let F=new Map;for(let z of Q){let L=`${z.model}::${z.provider}`,P=F.get(z.timestamp)??{timestamp:z.timestamp,total:0};P.total+=z.requests;let I=K.has(L)?M.get(L)??z.model:"Other";P[I]=(P[I]??0)+z.requests,F.set(z.timestamp,P)}let R=U.map((z)=>M.get(z.key)??z.model);if([...F.values()].some((z)=>(z.Other??0)>0))R.push("Other");return{data:[...F.values()].sort((z,L)=>(z.timestamp??0)-(L.timestamp??0)).map((z)=>{let L=z.total??0;for(let P of R)z[P]=L>0?(z[P]??0)/L*100:0;return z}),series:R}}var tq=R0(e1(),1);var aq=R0(G1(),1);P5.register(h4,x4,QQ,u5,g4,L8,V8,_8,p9);var ZA={dark:"rgba(248, 250, 252, 0.7)",light:"rgba(15, 23, 42, 0.6)"};function QA(Q){return{id:"costBarLabels",afterDatasetsDraw(J){let{ctx:q}=J;if(!J.data.datasets[0])return;let U=J.getDatasetMeta(0);q.save(),q.font="11px system-ui, sans-serif",q.fillStyle=Q,q.textAlign="center",q.textBaseline="bottom";for(let K of U.data){let H=K.$context.parsed.y;if(!H)continue;let M=`$${Math.round(H)}`,{x:F,y:R}=K.getProps(["x","y"],!0);q.fillText(M,F,R-3)}q.restore()}}}function GA(Q){return Dq(Q,"Cost",{initBucket:()=>({total:0}),accumulate:(J,q)=>{J.total+=q.cost},bucketToValue:(J)=>J.total})}function JA(Q){return Aq(Q,{rankWeight:(J)=>J.cost,initBucket:()=>({total:0}),accumulate:(J,q)=>{J.total+=q.cost},bucketToValue:(J)=>J.total})}function E_({costSeries:Q}){let[J,q]=tq.useState(!1),Y=E8(),U=Pq[Y],K=tq.useMemo(()=>J?JA(Q):GA(Q),[Q,J]),H=Cq({chartTheme:U,showLegend:J,defaultLabel:"Cost",formatValue:(T)=>`$${Math.round(T)}`,footer:(T)=>{if(!J||T.length<2)return;let z=T.reduce((L,P)=>L+(P.parsed.y??0),0);return`Total: $${Math.round(z)}`}}),{sharedScaleBase:M,yScale:F}=Iq({chartTheme:U,formatY:(T)=>`$${Math.round(T)}`}),R;if(J){let T={labels:K.labels,datasets:o9(K,(L)=>jq(Y5[L%Y5.length]))};R=aq.jsxDEV(E4,{data:T,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:H,scales:{x:M,y:F}}},void 0,!1,void 0,this)}else{let T={labels:K.labels,datasets:o9(K,(P)=>Oq(Y5[P%Y5.length]))},z=QA(ZA[Y]),L={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{...H,costBarLabels:{}},scales:{x:{...M,stacked:!0},y:{...F,stacked:!0}},layout:{padding:{top:24}}};R=aq.jsxDEV(Tq,{data:T,options:L,plugins:[z]},void 0,!1,void 0,this)}return aq.jsxDEV(Sq,{title:"Daily Cost",subtitle:"API spending over time",empty:K.labels.length===0,emptyMessage:"No cost data available",byModel:J,onByModelChange:q,children:R},void 0,!1,void 0,this)}var Z7=R0(G1(),1);function oN(Q){return`$${Math.round(Q)}`}function P_({costSeries:Q}){let J=Q.reduce((F,R)=>F+R.cost,0),q=new Set(Q.map((F)=>F.timestamp)).size,Y=q>0?J/q:0,U=new Map;for(let F of Q)U.set(F.model,(U.get(F.model)??0)+F.cost);let K="",H=0;for(let[F,R]of U)if(R>H)K=F,H=R;let M=[{label:"Total",value:oN(J)},{label:"Avg / day",value:oN(Y)},{label:"Top model",value:K||"—",sub:K?oN(H):void 0}];return Z7.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:M.map((F)=>Z7.jsxDEV("div",{className:"surface px-4 py-3",children:[Z7.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mb-1",children:F.label},void 0,!1,void 0,this),Z7.jsxDEV("p",{className:"text-lg font-semibold text-[var(--text-primary)] truncate",title:F.value,children:F.value},void 0,!1,void 0,this),F.sub&&Z7.jsxDEV("p",{className:"text-xs text-[var(--text-muted)] mt-0.5",children:F.sub},void 0,!1,void 0,this)]},F.label,!0,void 0,this))},void 0,!1,void 0,this)}var C5=R0(G1(),1),qA=["overview","requests","errors","models","costs","behavior"],XA=[{label:"1h",value:"1h"},{label:"24h",value:"24h"},{label:"7d",value:"7d"},{label:"30d",value:"30d"},{label:"90d",value:"90d"},{label:"All",value:"all"}];function C_({activeTab:Q,onTabChange:J,onSync:q,syncing:Y,timeRange:U,onTimeRangeChange:K}){return C5.jsxDEV("header",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-6 mb-8 border-b border-[var(--border-subtle)]",children:[C5.jsxDEV("div",{className:"flex items-center gap-3",children:[C5.jsxDEV("div",{className:"w-10 h-10 rounded-[var(--radius-md)] bg-gradient-to-br from-[var(--accent-pink)] to-[var(--accent-cyan)] flex items-center justify-center shadow-lg",children:C5.jsxDEV(E$,{className:"w-5 h-5 text-white"},void 0,!1,void 0,this)},void 0,!1,void 0,this),C5.jsxDEV("div",{children:[C5.jsxDEV("h1",{className:"text-xl font-semibold text-[var(--text-primary)]",children:"AI Usage"},void 0,!1,void 0,this),C5.jsxDEV("p",{className:"text-sm text-[var(--text-muted)]",children:"Statistics & Analytics"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),C5.jsxDEV("div",{className:"flex items-center gap-3",children:[C5.jsxDEV("div",{className:"flex bg-[var(--bg-surface)] rounded-[var(--radius-md)] p-1 border border-[var(--border-subtle)]",children:qA.map((H)=>C5.jsxDEV("button",{type:"button",onClick:()=>J(H),className:`tab-btn capitalize ${Q===H?"active":""}`,children:H},H,!1,void 0,this))},void 0,!1,void 0,this),C5.jsxDEV("div",{className:"flex bg-[var(--bg-surface)] rounded-[var(--radius-md)] p-1 border border-[var(--border-subtle)]",children:XA.map((H)=>C5.jsxDEV("button",{type:"button",onClick:()=>K(H.value),className:`tab-btn ${U===H.value?"active":""}`,title:H.value==="all"?"All time":`Last ${H.label}`,children:H.label},H.value,!1,void 0,this))},void 0,!1,void 0,this),C5.jsxDEV("button",{type:"button",onClick:q,disabled:Y,className:"btn btn-primary",children:[C5.jsxDEV(WQ,{size:16,className:Y?"spin":""},void 0,!1,void 0,this),Y?"Syncing...":"Sync"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var eq=R0(e1(),1);var s0=R0(G1(),1);P5.register(h4,x4,g4,u5,L8,V8,_8);var I_="2fr 0.9fr 0.9fr 1fr 0.8fr 0.8fr 140px 40px";function j_({models:Q,performanceSeries:J,timeRange:q}){let[Y,U]=eq.useState(null),K=oq(q),H=eq.useMemo(()=>UA(J,K.bucketCount,K.bucketMs),[J,K.bucketCount,K.bucketMs]),M=E8(),F=fq[M],R=[...Q].sort((T,z)=>z.totalInputTokens+z.totalOutputTokens-(T.totalInputTokens+T.totalOutputTokens));return s0.jsxDEV(hq,{title:"Model Statistics",children:[s0.jsxDEV(xq,{gridTemplate:I_,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),s0.jsxDEV(uq,{children:R.map((T,z)=>{let L=`${T.model}::${T.provider}`,I=H.get(L)?.data??[],A=Y5[z%Y5.length],C=Y===L,g=T.errorRate*100;return s0.jsxDEV(dq,{gridTemplate:I_,isExpanded:C,onToggle:()=>U(C?null:L),cells:[s0.jsxDEV(mq,{model:T.model,provider:T.provider},"name",!1,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:T.totalRequests.toLocaleString()},"requests",!1,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:["$",T.totalCost.toFixed(2)]},"cost",!0,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:(T.totalInputTokens+T.totalOutputTokens).toLocaleString()},"tokens",!1,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:T.avgTokensPerSecond?.toFixed(1)??"-"},"tps",!1,void 0,this),s0.jsxDEV("div",{className:"text-right text-[var(--text-secondary)] font-mono text-sm",children:T.avgTtft?`${(T.avgTtft/1000).toFixed(2)}s`:"-"},"ttft",!1,void 0,this)],trendCell:I.length===0?s0.jsxDEV(pq,{},void 0,!1,void 0,this):s0.jsxDEV(yq,{timestamps:I.map((m)=>m.timestamp),values:I.map((m)=>m.avgTokensPerSecond??0),color:A},void 0,!1,void 0,this),expandedContent:s0.jsxDEV("div",{className:"grid gap-4",style:{gridTemplateColumns:"200px 1fr"},children:[s0.jsxDEV("div",{className:"space-y-4 text-sm",children:[s0.jsxDEV("div",{children:[s0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:"Quality"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[s0.jsxDEV("div",{className:"flex items-center justify-between",children:[s0.jsxDEV("span",{children:"Error rate"},void 0,!1,void 0,this),s0.jsxDEV("span",{className:g>5?"text-[var(--accent-red)]":"text-[var(--accent-green)]",children:[g.toFixed(1),"%"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"flex items-center justify-between",children:[s0.jsxDEV("span",{children:"Cache rate"},void 0,!1,void 0,this),s0.jsxDEV("span",{className:"text-[var(--accent-cyan)]",children:[(T.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),s0.jsxDEV("div",{children:[s0.jsxDEV("div",{className:"text-[var(--text-primary)] font-medium mb-2",children:"Latency"},void 0,!1,void 0,this),s0.jsxDEV("div",{className:"space-y-1 text-[var(--text-secondary)]",children:[s0.jsxDEV("div",{className:"flex items-center justify-between",children:[s0.jsxDEV("span",{children:"Avg duration"},void 0,!1,void 0,this),s0.jsxDEV("span",{className:"font-mono",children:T.avgDuration?`${(T.avgDuration/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),s0.jsxDEV("div",{className:"flex items-center justify-between",children:[s0.jsxDEV("span",{children:"Avg TTFT"},void 0,!1,void 0,this),s0.jsxDEV("span",{className:"font-mono",children:T.avgTtft?`${(T.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),s0.jsxDEV("div",{className:"h-[200px]",children:I.length===0?s0.jsxDEV(cq,{},void 0,!1,void 0,this):s0.jsxDEV(YA,{data:I,color:A,chartTheme:F},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},L,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function YA({data:Q,color:J,chartTheme:q}){let Y={labels:Q.map((K)=>u4(new Date(K.timestamp),"MMM d")),datasets:[{label:"TTFT",data:Q.map((K)=>K.avgTtftSeconds??null),...U6("#fbbf24"),yAxisID:"y"},{label:"Tokens/s",data:Q.map((K)=>K.avgTokensPerSecond??null),...U6(J),yAxisID:"y1"}]},U={responsive:!0,maintainAspectRatio:!1,plugins:gq(q),scales:H_(q)};return s0.jsxDEV(E4,{data:Y,options:U},void 0,!1,void 0,this)}function UA(Q,J,q){let Y=Q.reduce((z,L)=>Math.max(z,L.timestamp),0),U=Y>0?Y:Math.floor(Date.now()/q)*q,K=new Set(Q.map((z)=>z.timestamp)),H=J>0?J:Math.max(1,K.size),M=U-(H-1)*q,F=Array.from({length:H},(z,L)=>M+L*q),R=new Map(F.map((z,L)=>[z,L])),T=new Map;for(let z of Q){let L=`${z.model}::${z.provider}`,P=T.get(L);if(!P)P={label:`${z.model} (${z.provider})`,data:F.map((A)=>({timestamp:A,avgTtftSeconds:null,avgTokensPerSecond:null,requests:0}))},T.set(L,P);let I=R.get(z.timestamp);if(I===void 0)continue;P.data[I]={timestamp:z.timestamp,avgTtftSeconds:z.avgTtft!==null?z.avgTtft/1000:null,avgTokensPerSecond:z.avgTokensPerSecond,requests:z.requests}}return T}var zQ=R0(e1(),1);var X0=R0(G1(),1);function O_({id:Q,onClose:J}){let[q,Y]=zQ.useState(null),[U,K]=zQ.useState(!0);if(zQ.useEffect(()=>{ow(Q).then(Y).catch(console.error).finally(()=>K(!1))},[Q]),!q&&U)return X0.jsxDEV("div",{className:"fixed inset-0 bg-[var(--bg-overlay)] flex justify-center items-center z-[100]",children:X0.jsxDEV("div",{className:"surface px-8 py-6",children:X0.jsxDEV("div",{className:"flex items-center gap-3 text-[var(--text-secondary)]",children:[X0.jsxDEV("div",{className:"w-5 h-5 border-2 border-[var(--border-default)] border-t-[var(--accent-cyan)] rounded-full spin"},void 0,!1,void 0,this),X0.jsxDEV("span",{children:"Loading..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);if(!q)return null;return X0.jsxDEV("div",{role:"presentation",className:"fixed inset-0 bg-[var(--bg-overlay)] backdrop-blur-sm flex justify-end z-[100] animate-fade-in",onClick:J,children:X0.jsxDEV("div",{role:"dialog","aria-modal":"true",className:"w-[600px] max-w-full bg-[var(--bg-page)] h-full overflow-y-auto border-l border-[var(--border-subtle)] animate-slide-up",onClick:(H)=>H.stopPropagation(),children:[X0.jsxDEV("div",{className:"sticky top-0 bg-[var(--bg-page)]/95 backdrop-blur border-b border-[var(--border-subtle)] px-6 py-4 flex justify-between items-center z-10",children:[X0.jsxDEV("div",{className:"flex items-center gap-3",children:[X0.jsxDEV("div",{className:"w-8 h-8 rounded-[var(--radius-sm)] bg-gradient-to-br from-[var(--accent-pink)]/20 to-[var(--accent-cyan)]/20 flex items-center justify-center",children:X0.jsxDEV(T2,{size:16,className:"text-[var(--accent-cyan)]"},void 0,!1,void 0,this)},void 0,!1,void 0,this),X0.jsxDEV("h2",{className:"text-lg font-semibold text-[var(--text-primary)]",children:"Request Details"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("button",{type:"button",onClick:J,className:"p-2 rounded-[var(--radius-sm)] text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors",children:X0.jsxDEV(TQ,{size:20},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"p-6 space-y-6",children:[X0.jsxDEV("div",{className:"surface p-5",children:X0.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:[X0.jsxDEV("div",{children:[X0.jsxDEV("div",{className:"text-2xl font-bold text-[var(--text-primary)]",children:q.model},void 0,!1,void 0,this),X0.jsxDEV("div",{className:"text-sm text-[var(--text-muted)]",children:q.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q.errorMessage?X0.jsxDEV("span",{className:"badge badge-error",children:"Error"},void 0,!1,void 0,this):X0.jsxDEV("span",{className:"badge badge-success",children:"Success"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),X0.jsxDEV("div",{className:"grid grid-cols-2 gap-4",children:[X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(KQ,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Cost"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:["$",q.usage.cost.total.toFixed(4)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(P$,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Premium Reqs"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:(q.usage.premiumRequests??0).toLocaleString()},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(FQ,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Tokens"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:q.usage.totalTokens.toLocaleString()},void 0,!1,void 0,this),X0.jsxDEV("div",{className:"text-xs text-[var(--text-muted)] mt-1",children:[q.usage.input.toLocaleString()," in · ",q.usage.output.toLocaleString()," out"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(NQ,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Duration"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:q.duration?`${(q.duration/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)] mb-2",children:[X0.jsxDEV(C$,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"TTFT"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xl font-semibold text-[var(--text-primary)]",children:q.ttft?`${(q.ttft/1000).toFixed(2)}s`:"-"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),q.duration&&q.usage.output>0&&X0.jsxDEV("div",{className:"surface p-4",children:[X0.jsxDEV("div",{className:"flex items-center justify-between",children:[X0.jsxDEV("div",{className:"flex items-center gap-2 text-[var(--text-muted)]",children:[X0.jsxDEV(MQ,{size:14},void 0,!1,void 0,this),X0.jsxDEV("span",{className:"text-xs uppercase tracking-wide",children:"Throughput"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("span",{className:"text-2xl font-bold gradient-text",children:(q.usage.output*1000/q.duration).toFixed(1)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{className:"text-xs text-[var(--text-muted)] mt-1 text-right",children:"tokens/second"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{children:[X0.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)] mb-3",children:"Output"},void 0,!1,void 0,this),X0.jsxDEV("pre",{className:"surface bg-[var(--bg-elevated)] p-4 rounded-[var(--radius-md)] text-sm font-mono text-[var(--text-secondary)] overflow-x-auto",children:JSON.stringify(q.output,null,2)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X0.jsxDEV("div",{children:[X0.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)] mb-3",children:"Raw Metadata"},void 0,!1,void 0,this),X0.jsxDEV("pre",{className:"surface bg-[var(--bg-elevated)] p-4 rounded-[var(--radius-md)] text-xs font-mono text-[var(--text-muted)] overflow-x-auto",children:JSON.stringify(q,null,2)},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,!1,void 0,this)}var B1=R0(G1(),1);function _Q({requests:Q,onSelect:J,title:q}){return B1.jsxDEV("div",{className:"surface overflow-hidden flex flex-col h-full",children:[B1.jsxDEV("div",{className:"px-5 py-4 border-b border-[var(--border-subtle)]",children:B1.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--text-primary)]",children:q},void 0,!1,void 0,this)},void 0,!1,void 0,this),B1.jsxDEV("div",{className:"overflow-auto flex-1",children:B1.jsxDEV("table",{className:"w-full",children:[B1.jsxDEV("thead",{className:"bg-[var(--bg-elevated)] sticky top-0 z-10",children:B1.jsxDEV("tr",{children:[B1.jsxDEV("th",{className:"text-left py-3 px-4 table-header",children:"Model"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-left py-3 px-4 table-header",children:"Time"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-right py-3 px-4 table-header",children:"Tokens"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-right py-3 px-4 table-header",children:"Cost"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-right py-3 px-4 table-header",children:"Duration"},void 0,!1,void 0,this),B1.jsxDEV("th",{className:"text-center py-3 px-4 table-header",children:"Status"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),B1.jsxDEV("tbody",{children:[Q.map((Y)=>B1.jsxDEV("tr",{onClick:()=>J(Y),className:"table-row cursor-pointer border-b border-[var(--border-subtle)] last:border-b-0",children:[B1.jsxDEV("td",{className:"py-3 px-4",children:[B1.jsxDEV("div",{className:"font-medium text-[var(--text-primary)] text-sm",children:Y.model},void 0,!1,void 0,this),B1.jsxDEV("div",{className:"text-xs text-[var(--text-muted)]",children:Y.provider},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-sm text-[var(--text-secondary)]",children:Z_(Y.timestamp,{addSuffix:!0})},void 0,!1,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-right text-sm text-[var(--text-secondary)] font-mono",children:Y.usage.totalTokens.toLocaleString()},void 0,!1,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-right text-sm text-[var(--text-secondary)] font-mono",children:["$",Y.usage.cost.total.toFixed(4)]},void 0,!0,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-right text-sm text-[var(--text-secondary)] font-mono",children:Y.duration?`${(Y.duration/1000).toFixed(1)}s`:"-"},void 0,!1,void 0,this),B1.jsxDEV("td",{className:"py-3 px-4 text-center",children:Y.errorMessage?B1.jsxDEV(R2,{size:16,className:"text-[var(--accent-red)] mx-auto"},void 0,!1,void 0,this):B1.jsxDEV(w2,{size:16,className:"text-[var(--accent-green)] mx-auto"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},`${Y.sessionFile}-${Y.entryId}`,!0,void 0,this)),Q.length===0&&B1.jsxDEV("tr",{children:B1.jsxDEV("td",{colSpan:6,className:"py-12 text-center text-[var(--text-muted)] text-sm",children:"No requests found"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var K6=R0(G1(),1),NA=new Intl.NumberFormat(void 0,{notation:"compact",maximumFractionDigits:1});function D_(Q){return NA.format(Q)}function iN(Q){return Q.toLocaleString()}var LQ=(Q)=>Q.totalInputTokens+Q.totalOutputTokens,KA=[{key:"requests",title:"Total Requests",icon:wQ,color:"var(--accent-violet)",getValue:(Q)=>Q.totalRequests.toLocaleString(),getDetail:(Q)=>`${Q.successfulRequests.toLocaleString()} success · ${Q.failedRequests.toLocaleString()} errors`},{key:"cost",title:"Total Cost",icon:E$,color:"var(--accent-pink)",getValue:(Q)=>`$${Q.totalCost.toFixed(2)}`,getDetail:(Q)=>Q.totalRequests>0?`$${(Q.totalCost/Q.totalRequests).toFixed(4)} avg/req`:"-"},{key:"premiumRequests",title:"Premium Reqs",icon:P$,color:"var(--accent-amber)",getValue:(Q)=>iN(Q.totalPremiumRequests),getDetail:(Q)=>Q.totalRequests>0?`${(Q.totalPremiumRequests/Q.totalRequests*100).toFixed(1)}% of requests`:"-"},{key:"cache",title:"Cache Rate",icon:BQ,color:"var(--accent-cyan)",getValue:(Q)=>`${(Q.cacheRate*100).toFixed(1)}%`,getDetail:(Q)=>`${D_(Q.totalCacheReadTokens)} cached tokens`},{key:"inputTokens",title:"Input Tokens",icon:HQ,color:"var(--accent-violet)",getValue:(Q)=>iN(Q.totalInputTokens),getDetail:(Q)=>LQ(Q)>0?`${(Q.totalInputTokens/LQ(Q)*100).toFixed(1)}% of prompt+completion`:"-"},{key:"outputTokens",title:"Output Tokens",icon:RQ,color:"var(--accent-pink)",getValue:(Q)=>iN(Q.totalOutputTokens),getDetail:(Q)=>LQ(Q)>0?`${(Q.totalOutputTokens/LQ(Q)*100).toFixed(1)}% of prompt+completion`:"-"},{key:"errors",title:"Error Rate",icon:W2,color:"var(--accent-red)",getValue:(Q)=>`${(Q.errorRate*100).toFixed(1)}%`,getDetail:(Q)=>`${Q.failedRequests.toLocaleString()} failed requests`},{key:"tokens",title:"Tokens/Sec",icon:F2,color:"var(--accent-green)",getValue:(Q)=>Q.avgTokensPerSecond?.toFixed(1)??"-",getDetail:(Q)=>`${D_(LQ(Q))} total prompt+completion`},{key:"ttft",title:"TTFT",icon:C$,color:"var(--accent-amber)",getValue:(Q)=>Q.avgTtft?`${(Q.avgTtft/1000).toFixed(2)}s`:"-",getDetail:()=>"Time to first token"}];function A_({stats:Q}){return K6.jsxDEV("div",{className:"grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-9 gap-4 mb-8",children:KA.map((J)=>{let q=J.icon;return K6.jsxDEV("div",{className:"stat-card group",children:[K6.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[K6.jsxDEV("span",{className:"text-sm font-medium text-[var(--text-secondary)]",children:J.title},void 0,!1,void 0,this),K6.jsxDEV("div",{className:"p-2 rounded-[var(--radius-sm)] transition-colors",style:{backgroundColor:`${J.color}15`},children:K6.jsxDEV(q,{size:18,style:{color:J.color},className:"transition-transform group-hover:scale-110"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K6.jsxDEV("div",{className:"text-2xl font-bold text-[var(--text-primary)] mb-1",children:J.getValue(Q)},void 0,!1,void 0,this),K6.jsxDEV("div",{className:"text-xs text-[var(--text-muted)] truncate",children:J.getDetail(Q)},void 0,!1,void 0,this)]},J.key,!0,void 0,this)})},void 0,!1,void 0,this)}var m0=R0(G1(),1);function aN(){let[Q,J]=U5.useState(null),[q,Y]=U5.useState(null),[U,K]=U5.useState(null),[H,M]=U5.useState(null),[F,R]=U5.useState([]),[T,z]=U5.useState([]),[L,P]=U5.useState(null),[I,A]=U5.useState(!1),[C,g]=U5.useState("overview"),[m,o]=U5.useState("24h"),i=U5.useCallback(async()=>{try{let[p,a]=await Promise.all([sw(50),nw(50)]);R(p),z(a)}catch(p){console.error(p)}},[]),s=U5.useCallback(async()=>{try{if(C==="models"){Y(await lw(m));return}if(C==="costs"){K(await rw(m));return}if(C==="behavior"){M(await aw(m));return}if(C==="overview")J(await cw(m))}catch(p){console.error(p)}},[C,m]),Q0=async()=>{A(!0);try{await iw(),await Promise.all([s(),i()])}finally{A(!1)}};return U5.useEffect(()=>{i();let p=setInterval(i,30000);return()=>clearInterval(p)},[i]),U5.useEffect(()=>{s();let p=setInterval(s,30000);return()=>clearInterval(p)},[s]),m0.jsxDEV("div",{className:"min-h-screen",children:m0.jsxDEV("div",{className:"max-w-[1600px] mx-auto px-6 py-6",children:[m0.jsxDEV(C_,{activeTab:C,onTabChange:g,onSync:Q0,syncing:I,timeRange:m,onTimeRangeChange:o},void 0,!1,void 0,this),C==="overview"&&m0.jsxDEV("div",{className:"space-y-6 animate-fade-in",children:[Q?m0.jsxDEV(A_,{stats:Q.overall},void 0,!1,void 0,this):m0.jsxDEV($3,{label:"Loading overview..."},void 0,!1,void 0,this),m0.jsxDEV("div",{className:"grid lg:grid-cols-2 gap-6",children:[m0.jsxDEV(_Q,{title:"Recent Requests",requests:F.slice(0,10),onSelect:(p)=>p.id&&P(p.id)},void 0,!1,void 0,this),m0.jsxDEV(_Q,{title:"Recent Errors",requests:T.slice(0,10),onSelect:(p)=>p.id&&P(p.id)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),C==="requests"&&m0.jsxDEV("div",{className:"h-[calc(100vh-140px)] animate-fade-in",children:m0.jsxDEV(_Q,{title:"All Recent Requests",requests:F,onSelect:(p)=>p.id&&P(p.id)},void 0,!1,void 0,this)},void 0,!1,void 0,this),C==="errors"&&m0.jsxDEV("div",{className:"h-[calc(100vh-140px)] animate-fade-in",children:m0.jsxDEV(_Q,{title:"Failed Requests",requests:T,onSelect:(p)=>p.id&&P(p.id)},void 0,!1,void 0,this)},void 0,!1,void 0,this),C==="models"&&m0.jsxDEV("div",{className:"space-y-6 animate-fade-in",children:q?m0.jsxDEV(m0.Fragment,{children:[m0.jsxDEV(V_,{modelSeries:q.modelSeries,timeRange:m},void 0,!1,void 0,this),m0.jsxDEV(j_,{models:q.byModel,performanceSeries:q.modelPerformanceSeries,timeRange:m},void 0,!1,void 0,this)]},void 0,!0,void 0,this):m0.jsxDEV($3,{label:"Loading models..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),C==="costs"&&m0.jsxDEV("div",{className:"space-y-6 animate-fade-in",children:U?m0.jsxDEV(m0.Fragment,{children:[m0.jsxDEV(P_,{costSeries:U.costSeries},void 0,!1,void 0,this),m0.jsxDEV(E_,{costSeries:U.costSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this):m0.jsxDEV($3,{label:"Loading costs..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),C==="behavior"&&m0.jsxDEV("div",{className:"space-y-6 animate-fade-in",children:H?m0.jsxDEV(m0.Fragment,{children:[m0.jsxDEV(T_,{overall:H.overall,behaviorSeries:H.behaviorSeries},void 0,!1,void 0,this),m0.jsxDEV(q_,{behaviorSeries:H.behaviorSeries},void 0,!1,void 0,this),m0.jsxDEV(w_,{models:H.byModel,behaviorSeries:H.behaviorSeries},void 0,!1,void 0,this)]},void 0,!0,void 0,this):m0.jsxDEV($3,{label:"Loading behavior..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),L!==null&&m0.jsxDEV(O_,{id:L,onClose:()=>P(null)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function $3({label:Q}){return m0.jsxDEV("div",{className:"min-h-[180px] flex items-center justify-center",children:m0.jsxDEV("div",{className:"flex items-center gap-3 text-[var(--text-muted)]",children:[m0.jsxDEV("div",{className:"w-5 h-5 border-2 border-[var(--border-default)] border-t-[var(--accent-cyan)] rounded-full spin"},void 0,!1,void 0,this),m0.jsxDEV("span",{className:"text-sm",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var v_=R0(G1(),1),BA=S_.createRoot(document.getElementById("root"));BA.render(v_.jsxDEV(aN,{},void 0,!1,void 0,this));
|
|
@@ -51,7 +51,7 @@ export declare function buildSharedPlugins(opts: {
|
|
|
51
51
|
position: "top";
|
|
52
52
|
align: "start";
|
|
53
53
|
labels: {
|
|
54
|
-
color: "#
|
|
54
|
+
color: "#94a3b8" | "#475569";
|
|
55
55
|
usePointStyle: boolean;
|
|
56
56
|
padding: number;
|
|
57
57
|
font: {
|
|
@@ -62,13 +62,14 @@ export declare function buildSharedPlugins(opts: {
|
|
|
62
62
|
};
|
|
63
63
|
tooltip: {
|
|
64
64
|
backgroundColor: "#16161e" | "#ffffff";
|
|
65
|
-
titleColor: "#
|
|
66
|
-
bodyColor: "#
|
|
67
|
-
borderColor: "rgba(
|
|
65
|
+
titleColor: "#f8fafc" | "#0f172a";
|
|
66
|
+
bodyColor: "#94a3b8" | "#334155";
|
|
67
|
+
borderColor: "rgba(255, 255, 255, 0.1)" | "rgba(15, 23, 42, 0.18)";
|
|
68
68
|
borderWidth: number;
|
|
69
69
|
padding: number;
|
|
70
70
|
cornerRadius: number;
|
|
71
71
|
callbacks: {
|
|
72
|
+
footer?: ((items: TooltipItem[]) => string | undefined) | undefined;
|
|
72
73
|
label: (ctx: {
|
|
73
74
|
dataset: {
|
|
74
75
|
label?: string;
|
|
@@ -77,7 +78,6 @@ export declare function buildSharedPlugins(opts: {
|
|
|
77
78
|
y: number | null;
|
|
78
79
|
};
|
|
79
80
|
}) => string;
|
|
80
|
-
footer?: ((items: TooltipItem[]) => string | undefined) | undefined;
|
|
81
81
|
};
|
|
82
82
|
};
|
|
83
83
|
};
|
|
@@ -88,7 +88,7 @@ export declare function buildSharedScales(opts: {
|
|
|
88
88
|
}): {
|
|
89
89
|
sharedScaleBase: {
|
|
90
90
|
grid: {
|
|
91
|
-
color: "rgba(
|
|
91
|
+
color: "rgba(255, 255, 255, 0.06)" | "rgba(15, 23, 42, 0.08)";
|
|
92
92
|
drawBorder: boolean;
|
|
93
93
|
};
|
|
94
94
|
ticks: {
|
|
@@ -99,18 +99,18 @@ export declare function buildSharedScales(opts: {
|
|
|
99
99
|
};
|
|
100
100
|
};
|
|
101
101
|
yScale: {
|
|
102
|
-
grid: {
|
|
103
|
-
color: "rgba(15, 23, 42, 0.08)" | "rgba(255, 255, 255, 0.06)";
|
|
104
|
-
drawBorder: boolean;
|
|
105
|
-
};
|
|
106
102
|
ticks: {
|
|
103
|
+
callback: (value: number | string) => string;
|
|
107
104
|
color: "#64748b";
|
|
108
105
|
font: {
|
|
109
106
|
size: number;
|
|
110
107
|
};
|
|
111
|
-
callback: (value: number | string) => string;
|
|
112
108
|
};
|
|
113
109
|
min: number;
|
|
110
|
+
grid: {
|
|
111
|
+
color: "rgba(255, 255, 255, 0.06)" | "rgba(15, 23, 42, 0.08)";
|
|
112
|
+
drawBorder: boolean;
|
|
113
|
+
};
|
|
114
114
|
};
|
|
115
115
|
};
|
|
116
116
|
/** Stylistic defaults for a single line dataset in a stacked/by-model chart. */
|
|
@@ -174,7 +174,7 @@ export declare function buildTopNByModelSeries<T extends ModelKeyedPoint, B>(poi
|
|
|
174
174
|
* chart-specific tabs (e.g. behavior metric picker); the by-model toggle and
|
|
175
175
|
* empty-state are part of the frame so callers don't redeclare them.
|
|
176
176
|
*/
|
|
177
|
-
export declare function ChartFrame({ title, subtitle, empty, emptyMessage, controls, byModel, onByModelChange, children }: {
|
|
177
|
+
export declare function ChartFrame({ title, subtitle, empty, emptyMessage, controls, byModel, onByModelChange, children, }: {
|
|
178
178
|
title: string;
|
|
179
179
|
subtitle: string;
|
|
180
180
|
empty: boolean;
|
|
@@ -40,7 +40,7 @@ export declare function lineSeriesStyle(color: string): {
|
|
|
40
40
|
* model row. Caller supplies the already-extracted numeric series so this
|
|
41
41
|
* stays agnostic of the row's underlying data shape.
|
|
42
42
|
*/
|
|
43
|
-
export declare function MiniSparkline({ timestamps, values, color }: {
|
|
43
|
+
export declare function MiniSparkline({ timestamps, values, color, }: {
|
|
44
44
|
timestamps: number[];
|
|
45
45
|
values: number[];
|
|
46
46
|
color: string;
|
|
@@ -64,9 +64,9 @@ export declare function detailChartPlugins(chartTheme: TableChartTheme): {
|
|
|
64
64
|
};
|
|
65
65
|
tooltip: {
|
|
66
66
|
backgroundColor: "#16161e" | "#ffffff";
|
|
67
|
-
titleColor: "#
|
|
68
|
-
bodyColor: "#
|
|
69
|
-
borderColor: "rgba(
|
|
67
|
+
titleColor: "#f8fafc" | "#0f172a";
|
|
68
|
+
bodyColor: "#94a3b8" | "#334155";
|
|
69
|
+
borderColor: "rgba(255, 255, 255, 0.1)" | "rgba(15, 23, 42, 0.18)";
|
|
70
70
|
borderWidth: number;
|
|
71
71
|
cornerRadius: number;
|
|
72
72
|
};
|
|
@@ -78,10 +78,10 @@ export declare function detailChartPlugins(chartTheme: TableChartTheme): {
|
|
|
78
78
|
export declare function detailChartScalesSingleAxis(chartTheme: TableChartTheme): {
|
|
79
79
|
x: {
|
|
80
80
|
grid: {
|
|
81
|
-
color: "rgba(
|
|
81
|
+
color: "rgba(255, 255, 255, 0.06)" | "rgba(15, 23, 42, 0.08)";
|
|
82
82
|
};
|
|
83
83
|
ticks: {
|
|
84
|
-
color: "#
|
|
84
|
+
color: "#94a3b8" | "#475569";
|
|
85
85
|
font: {
|
|
86
86
|
size: number;
|
|
87
87
|
};
|
|
@@ -89,10 +89,10 @@ export declare function detailChartScalesSingleAxis(chartTheme: TableChartTheme)
|
|
|
89
89
|
};
|
|
90
90
|
y: {
|
|
91
91
|
grid: {
|
|
92
|
-
color: "rgba(
|
|
92
|
+
color: "rgba(255, 255, 255, 0.06)" | "rgba(15, 23, 42, 0.08)";
|
|
93
93
|
};
|
|
94
94
|
ticks: {
|
|
95
|
-
color: "#
|
|
95
|
+
color: "#94a3b8" | "#475569";
|
|
96
96
|
font: {
|
|
97
97
|
size: number;
|
|
98
98
|
};
|
|
@@ -108,10 +108,10 @@ export declare function detailChartScalesSingleAxis(chartTheme: TableChartTheme)
|
|
|
108
108
|
export declare function detailChartScalesDualAxis(chartTheme: TableChartTheme): {
|
|
109
109
|
x: {
|
|
110
110
|
grid: {
|
|
111
|
-
color: "rgba(
|
|
111
|
+
color: "rgba(255, 255, 255, 0.06)" | "rgba(15, 23, 42, 0.08)";
|
|
112
112
|
};
|
|
113
113
|
ticks: {
|
|
114
|
-
color: "#
|
|
114
|
+
color: "#94a3b8" | "#475569";
|
|
115
115
|
font: {
|
|
116
116
|
size: number;
|
|
117
117
|
};
|
|
@@ -122,10 +122,10 @@ export declare function detailChartScalesDualAxis(chartTheme: TableChartTheme):
|
|
|
122
122
|
display: boolean;
|
|
123
123
|
position: "left";
|
|
124
124
|
grid: {
|
|
125
|
-
color: "rgba(
|
|
125
|
+
color: "rgba(255, 255, 255, 0.06)" | "rgba(15, 23, 42, 0.08)";
|
|
126
126
|
};
|
|
127
127
|
ticks: {
|
|
128
|
-
color: "#
|
|
128
|
+
color: "#94a3b8" | "#475569";
|
|
129
129
|
font: {
|
|
130
130
|
size: number;
|
|
131
131
|
};
|
|
@@ -139,7 +139,7 @@ export declare function detailChartScalesDualAxis(chartTheme: TableChartTheme):
|
|
|
139
139
|
drawOnChartArea: boolean;
|
|
140
140
|
};
|
|
141
141
|
ticks: {
|
|
142
|
-
color: "#
|
|
142
|
+
color: "#94a3b8" | "#475569";
|
|
143
143
|
font: {
|
|
144
144
|
size: number;
|
|
145
145
|
};
|
|
@@ -151,7 +151,7 @@ export interface TableColumn {
|
|
|
151
151
|
align?: "left" | "right" | "center";
|
|
152
152
|
}
|
|
153
153
|
/** Outer card + section title used by every model table. */
|
|
154
|
-
export declare function ModelTableShell({ title, subtitle, children }: {
|
|
154
|
+
export declare function ModelTableShell({ title, subtitle, children, }: {
|
|
155
155
|
title: string;
|
|
156
156
|
subtitle?: string;
|
|
157
157
|
children: React.ReactNode;
|
|
@@ -179,7 +179,7 @@ export declare function ModelNameCell({ model, provider }: {
|
|
|
179
179
|
* `ModelTableHeader` plus the trend cell at the end (caller controls the
|
|
180
180
|
* sparkline / placeholder). `expandedContent` is the panel revealed on toggle.
|
|
181
181
|
*/
|
|
182
|
-
export declare function ExpandableModelRow({ gridTemplate, cells, trendCell, isExpanded, onToggle, expandedContent }: {
|
|
182
|
+
export declare function ExpandableModelRow({ gridTemplate, cells, trendCell, isExpanded, onToggle, expandedContent, }: {
|
|
183
183
|
gridTemplate: string;
|
|
184
184
|
cells: React.ReactNode[];
|
|
185
185
|
trendCell: React.ReactNode;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@sayknow-cli/stats",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.15",
|
|
5
5
|
"description": "Local observability dashboard for pi AI usage statistics",
|
|
6
6
|
"homepage": "https://sayknow-cli.com",
|
|
7
7
|
"author": "jaybeyond",
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
"build": "bun run build.ts",
|
|
32
32
|
"dev": "bun run src/index.ts",
|
|
33
33
|
"check": "biome check . && bun run check:types",
|
|
34
|
-
"check:types": "
|
|
34
|
+
"check:types": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.client.json --noEmit",
|
|
35
35
|
"lint": "biome lint .",
|
|
36
36
|
"fix": "biome check --write --unsafe .",
|
|
37
37
|
"fmt": "biome format --write ."
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@sayknow-cli/ai": "0.3.
|
|
41
|
-
"@sayknow-cli/utils": "0.3.
|
|
40
|
+
"@sayknow-cli/ai": "0.3.15",
|
|
41
|
+
"@sayknow-cli/utils": "0.3.15",
|
|
42
42
|
"@tailwindcss/node": "^4.2.4",
|
|
43
43
|
"chart.js": "^4.5.1",
|
|
44
44
|
"date-fns": "^4.1.0",
|