2026-08-31 14:25:22 +03:00
var Zo = ( u , t )=>()=>{ try { return t || u (( t = { exports : {}}). exports , t ), t . exports } catch ( e ){ throw t = 0 , e }}; var qo = Zo (( Ve , ve )=>{ var Td = 200 , Do = "__lodash_hash_undefined__" , Pd = 800 , Rd = 16 , Eo = 9007199254740991 , To = "[object Arguments]" , Fd = "[object Array]" , Id = "[object AsyncFunction]" , Nd = "[object Boolean]" , Xd = "[object Date]" , Od = "[object Error]" , Po = "[object Function]" , Bd = "[object GeneratorFunction]" , Yd = "[object Map]" , zd = "[object Number]" , Wd = "[object Null]" , Ro = "[object Object]" , Hd = "[object Proxy]" , $d = "[object RegExp]" , Gd = "[object Set]" , Vd = "[object String]" , Ud = "[object Undefined]" , qd = "[object WeakMap]" , jd = "[object ArrayBuffer]" , Zd = "[object DataView]" , Kd = "[object Float32Array]" , Jd = "[object Float64Array]" , Qd = "[object Int8Array]" , tu = "[object Int16Array]" , eu = "[object Int32Array]" , su = "[object Uint8Array]" , iu = "[object Uint8ClampedArray]" , au = "[object Uint16Array]" , nu = "[object Uint32Array]" , ru = /[\\^$.*+?()[\]{}|]/g , ou = /^\[object .+?Constructor\]$/ , lu = /^(?:0|[1-9]\d*)$/ , nt = {}; nt [ Kd ] = nt [ Jd ] = nt [ Qd ] = nt [ tu ] = nt [ eu ] = nt [ su ] = nt [ iu ] = nt [ au ] = nt [ nu ] =! 0 ; nt [ To ] = nt [ Fd ] = nt [ jd ] = nt [ Nd ] = nt [ Zd ] = nt [ Xd ] = nt [ Od ] = nt [ Po ] = nt [ Yd ] = nt [ zd ] = nt [ Ro ] = nt [ $d ] = nt [ Gd ] = nt [ Vd ] = nt [ qd ] =! 1 ; var Fo = typeof global == "object" && global && global . Object === Object && global , cu = typeof self == "object" && self && self . Object === Object && self , je = Fo || cu || Function ( "return this" )(), Io = typeof Ve == "object" && Ve &&! Ve . nodeType && Ve , Ue = Io && typeof ve == "object" && ve &&! ve . nodeType && ve , No = Ue && Ue . exports === Io , Za = No && Fo . process , wo = ( function (){ try { var u = Ue && Ue . require && Ue . require ( "util" ). types ; return u || Za && Za . binding && Za . binding ( "util" )} catch {}})(), vo = wo && wo . isTypedArray ; function hu ( u , t , e ){ switch ( e . length ){ case 0 : return u . call ( t ); case 1 : return u . call ( t , e [ 0 ]); case 2 : return u . call ( t , e [ 0 ], e [ 1 ]); case 3 : return u . call ( t , e [ 0 ], e [ 1 ], e [ 2 ])} return u . apply ( t , e )} function du ( u , t ){ for ( var e =- 1 , s = Array ( u ); ++ e < u ;) s [ e ] = t ( e ); return s } function uu ( u ){ return function ( t ){ return u ( t )}} function fu ( u , t ){ return u ? .[ t ]} function gu ( u , t ){ return function ( e ){ return u ( t ( e ))}} var pu = Array . prototype , mu = Function . prototype , Fs = Object . prototype , Ka = je [ "__core-js_shared__" ], Is = mu . toString , Rt = Fs . hasOwnProperty , _o = ( function (){ var u = /[^.]+$/ . exec ( Ka && Ka . keys && Ka . keys . IE_PROTO || "" ); return u ? "Symbol(src)_1." + u : "" })(), Xo = Fs . toString , xu = Is . call ( Object ), bu = RegExp ( "^" + Is . call ( Rt ). replace ( ru , "\\$&" ). replace ( /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g , "$1.*?" ) + "$" ), Ps = No ? je . Buffer : void 0 , Ao = je . Symbol , So = je . Uint8Array , Co = Ps ? Ps . allocUnsafe : void 0 , Oo = gu ( Object . getPrototypeOf , Object ), ko = Object . create , yu = Fs . propertyIsEnumerable , wu = pu . splice , ne = Ao ? Ao . toStringTag : void 0 , Rs = ( function (){ try { var u = an ( Object , "defineProperty" ); return u ({}, "" ,{}), u } catch {}})(), vu = Ps ? Ps . isBuffer : void 0 , Mo = Math . max , _u = Date . now , Bo = an ( je , "Map" ), qe = an ( Object , "create" ), Au = ( function (){ function u (){} return function ( t ){ if ( ! oe ( t )) return {}; if ( ko ) return ko ( t ); u . prototype = t ; var e = new u ; return u . prototype = void 0 , e }})(); function re ( u ){ var t =- 1 , e = u == null ? 0 : u . length ; for ( this . clear (); ++ t < e ;){ var s = u [ t ]; this . set ( s [ 0 ], s [ 1 ])}} function Su (){ this . __data__ = qe ? qe ( null ) : {}, this . size = 0 } function Cu ( u ){ var t = this . has ( u ) && delete this . __data__ [ u ]; return this . size -= t ? 1 : 0 , t } function ku ( u ){ var t = this . __data__ ; if ( qe ){ var e = t [ u ]; return e === Do ? void 0 : e } return Rt . call ( t , u ) ? t [ u ] : void 0 } function Mu ( u ){ var t = this . __data__ ; return qe ? t [ u ] !== void 0 : Rt . call ( t , u )} function Lu ( u , t ){ var e = this . __data__ ; return this . size += this . has ( u ) ? 0 : 1 , e [ u ] = qe && t === void 0 ? Do : t , this } re . prototype . clear = Su ; re . prototype . delete = Cu ; re . prototype . get = ku ; re . prototype . has = Mu ; re . prototype . set = Lu ; function Ft ( u ){ var t =- 1 , e = u == null ? 0 : u . length ; for ( this . clear (); ++ t < e ;){ var s = u [ t ]; this . set ( s [ 0 ], s [ 1 ])}} function Du (){ this . __data__ = [], this . size = 0 } function Eu ( u ){ var t = this . __data__ , e = Ns ( t , u ); if ( e < 0 ) return ! 1 ; var s = t . length - 1 ; return e == s ? t . pop () : wu . call ( t , e , 1 ), -- this . size , ! 0 } function Tu ( u ){ var t = this . __data__ , e = Ns ( t , u ); return e < 0 ? void 0 : t [ e ][ 1 ]} function Pu ( u ){ return Ns ( this . __data__ , u ) >- 1 } function Ru ( u , t ){ var e = this . __data__ , s = Ns ( e , u ); return s < 0 ? ( ++ this . size , e . push ([ u , t ])) : e [ s ][ 1 ] = t , this } Ft . prototype . clear = Du ; Ft . prototype . delete = Eu ; Ft . prototype . get = Tu ; Ft . prototype . has = Pu ; Ft . prototype . set = Ru ; fun
$ { i }
2026-07-03 13:46:54 +00:00
< /span> <span class="separator">-</span> <span class="value end-value">
2026-08-31 14:25:22 +03:00
$ { a }
< /span>`;return u.w.globals.comboCharts?u.w.config.series[n].type==="rangeArea"||u.w.config.series[n].type==="rangeBar"?c=h:c=`<span>${l}</span>`:c=h,'<div class="apexcharts-tooltip-rangebar"><div> <span class="series-name" style="color: '+t+'">'+(e||"")+'</span></div><div> <span class="category">'+s+": </span> "+c+" </div></div>"},Lt=class u{constructor(t){this.opts=t}static forType(t){var e,s;let i=new u(t),a=["line","area","bar","candlestick","boxPlot","violin","rangeBar","rangeArea","bubble","scatter","heatmap","treemap","unit","sunburst","pie","polarArea","donut","radar","radialBar"],n=t.chart.requestedType,r;return n==="funnel"||n==="pyramid"?r=i[n]():n==="gauge"?r=i.gauge():n==="histogram"?r=i.histogram():a.indexOf(t.chart.type)!==-1?r=i[t.chart.type]():r=i.line(),(s=(e=t.plotOptions)==null?void 0:e.bar)!=null&&s.isFunnel&&(r=i.funnel()),t.chart.stacked&&t.chart.type==="bar"&&(r=i.stackedBars()),r}static handOverTypeDefaults(t,e,s){let i=t.chart.requestedType||t.chart.type;if(!e||e===i)return;let a=new wt().init(),n=T.extend(a,u.forType(ln(e,t))),r=T.extend(a,u.forType(ln(i,t)));for(let o of al){if(s&&Ke(s,o)!==void 0)continue;let l=Ke(n,o),c=Ke(r,o);l===void 0&&c===void 0||ol(Ke(t,o),l)&&nl(t,o,c)}}hideYAxis(){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text="",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0}line(){return{dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}sparkline(t){this.hideYAxis();let e={grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}};return T.extend(t,e)}slope(){return this.hideYAxis(),{chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!0,formatter(t,e){let s=e.w.config.series[e.seriesIndex].name;return t!==null?s+": "+t:""},background:{enabled:!1},offsetX:-5},grid:{xaxis:{lines:{show:!0}},yaxis:{lines:{show:!1}}},xaxis:{position:"top",labels:{style:{fontSize:14,fontWeight:900}},tooltip:{enabled:!1},crosshairs:{show:!1}},markers:{size:8,hover:{sizeOffset:1}},legend:{show:!1},tooltip:{shared:!1,intersect:!0,followCursor:!0},stroke:{width:5,curve:"straight"}}}bar(){return{chart:{stacked:!1},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]},background:{enabled:!1}},stroke:{width:0,lineCap:"square"},fill:{opacity:.85},legend:{markers:{shape:"square"}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:"between",crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}funnel(){return this.hideYAxis(),j(G({},this.bar()),{chart:{animations:{speed:800,animateGradually:{enabled:!1}}},plotOptions:{bar:{horizontal:!0,borderRadiusApplication:"around",borderRadius:0,dataLabels:{position:"center"}}},grid:{show:!1,padding:{left:0,right:0}},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}}})}pyramid(){return this.funnel()}gauge(){let t=this.radialBar();return j(G({},t),{plotOptions:{radialBar:{startAngle:-135,endAngle:135,hollow:{margin:0,size:"60%"},track:{background:"#e7e7e7",strokeWidth:"100%",margin:5},dataLabels:{name:{show:!1},value:{show:!0,fontSize:"32px",fontWeight:600,offsetY:8}}}}})}histogram(){var t,e,s,i;let a=Array.isArray((t=this.opts)==null?void 0:t.series)&&this.opts.series.length>1&&((i=(s=(e=this.opts)==null?void 0:e.plotOptions)==null?void 0:s.histogram)==null?void 0:i.overlap)!==!1;return j(G({},this.bar()),{chart:{stacked:!1,zoom:{enabled:!1},animations:{animateGradually:{enabled:!1}}},plotOptions:{bar:{columnWidth:"100%",borderRadius:0,dataLabels:{position:"top"}}},dataLabels:{enabled:!1},fill:a?{opacity:.65}:{},stroke:a?{show:!1}:{show:!0,width:1,colors:["#fff"]},xaxis:{type:"numeric",tooltip:{enabled:!1}},tooltip:{shared:a,intersect:!1,x:{formatter:(n,r)=>{var o,l;let c=(l=(o=r?.w)==null?void 0:o.hist
$ { h . name ? h . name : "series-" + ( e + 1 )} : < strong > $ { t . seriesData . series [ e ][ s ]} < /strong>
< /div>`:`<div class="apexcharts-tooltip-box apexcharts-tooltip-${t.config.chart.type}"><div>${i[0]}: <span class="value">`+n+`</span></div><div>${i[1]}: <span class="value">`+r+"</span></div>"+(o?`<div>${i[2]}: <span class="value">`+o+"</span></div>":"")+`<div>${i[3]}: <span class="value">`+l+`</span></div><div>${i[4]}: <span class="value">`+c+"</span></div></div>"}_getViolinTooltip(t,e,s){var i,a,n;let r=(i=t.violinData.seriesViolinMin[e])==null?void 0:i[s],o=(a=t.violinData.seriesViolinMax[e])==null?void 0:a[s],l=((n=t.violinData.seriesViolinPoints[e])==null?void 0:n[s])||[],c=t.config.series[e].name||"series-"+(e+1);return`<div class="apexcharts-tooltip-box apexcharts-tooltip-${t.config.chart.type}"><div class="apexcharts-tooltip-violin-name">${c}</div><div>Min: <span class="value">${r}</span></div><div>Max: <span class="value">${o}</span></div><div>Observations: <span class="value">${l.length}</span></div></div>`}},se=class{constructor(t){this.opts=t}init({responsiveOverride:t}){var e,s,i,a,n,r,o,l;let c=this.opts,h=new wt,d=new Lt(c);c=this.normalizeAliasedChartType(c),this.chartType=c.chart.type,c=this.extendYAxis(c),c=this.extendAnnotations(c);let f=h.init(),g={};if(c&&typeof c=="object"){let m=Lt.forType(c);(e=c.chart.brush)!=null&&e.enabled&&(m=d.brush(m)),(i=(s=c.plotOptions)==null?void 0:s.line)!=null&&i.isSlopeChart&&(m=d.slope()),c.chart.stacked&&c.chart.stackType==="100%"&&(c=d.stacked100(c)),(n=(a=c.plotOptions)==null?void 0:a.bar)!=null&&n.isDumbbell&&(c=d.dumbbell(c)),this.checkForDarkTheme(H.getApex()),this.checkForDarkTheme(c),c.xaxis=c.xaxis||H.getApex().xaxis||{},t||(c.xaxis.convertedCatToNumeric=!1),c=this.checkForCatToNumericXAxis(this.chartType,m,c),((r=c.chart.sparkline)!=null&&r.enabled||(l=(o=H.getApex().chart)==null?void 0:o.sparkline)!=null&&l.enabled)&&(m=d.sparkline(m)),g=T.extend(f,m)}let p=T.extend(g,H.getApex());return f=T.extend(p,c),f=this.handleUserInputErrors(f),f}normalizeAliasedChartType(t){if(!t||!t.chart)return t;let e=t.chart.type;return e!=="funnel"&&e!=="pyramid"&&e!=="gauge"&&e!=="waffle"&&e!=="histogram"||(t.chart.requestedType=e,e==="waffle"?(t.plotOptions=t.plotOptions||{},t.plotOptions.unit=t.plotOptions.unit||{},t.plotOptions.unit.layout==null&&(t.plotOptions.unit.layout="grid"),t.plotOptions.unit.shape==null&&(t.plotOptions.unit.shape="square"),t.chart.type="unit"):e==="funnel"||e==="pyramid"?(t.plotOptions=t.plotOptions||{},t.plotOptions.bar=t.plotOptions.bar||{},t.plotOptions.bar.isFunnel=!0,t.plotOptions.bar.horizontal=!0,t.chart.type="bar",e==="pyramid"?t.plotOptions.bar.isPyramid=!0:t.plotOptions.bar.isPyramid=!1):e==="gauge"?t.chart.type="radialBar":e==="histogram"&&(t.xaxis=t.xaxis||{},t.xaxis.type==null&&(t.xaxis.type="numeric"),t.chart.type="bar")),t}checkForCatToNumericXAxis(t,e,s){var i,a,n,r,o;let l=new Lt(s),c=(t==="bar"||t==="boxPlot"||t==="violin")&&((a=(i=s.plotOptions)==null?void 0:i.bar)==null?void 0:a.horizontal),h=t==="pie"||t==="polarArea"||t==="donut"||t==="radar"||t==="radialBar"||t==="heatmap"||t==="unit"||t==="sunburst",d=s.xaxis.type!=="datetime"&&s.xaxis.type!=="numeric",f=(t==="scatter"||t==="bubble")&&((o=(r=(n=s.plotOptions)==null?void 0:n.scatter)==null?void 0:r.jitter)==null?void 0:o.enabled),g=s.xaxis.tickPlacement?s.xaxis.tickPlacement:e.xaxis&&e.xaxis.tickPlacement;return!c&&!h&&!f&&d&&g!=="between"&&(s=l.convertCatToNumeric(s)),s}extendYAxis(t,e){let s=new wt;(typeof t.yaxis>"u"||!t.yaxis||Array.isArray(t.yaxis)&&t.yaxis.length===0)&&(t.yaxis={});let i=H.getApex();t.yaxis.constructor!==Array&&i.yaxis&&i.yaxis.constructor!==Array&&(t.yaxis=T.extend(t.yaxis,i.yaxis)),t.yaxis.constructor!==Array?t.yaxis=[T.extend(s.yAxis,t.yaxis)]:t.yaxis=T.extendArray(t.yaxis,s.yAxis);let a=!1;t.yaxis.forEach(r=>{r.logarithmic&&(a=!0)});let n=t.series;return e&&!n&&(n=e.config.series),a&&n.length!==t.yaxis.length&&n.length&&(t.yaxis=n.map((r,o)=>{if(r.name||(n[o].name=`series-${o+1}`),t.yaxis[o])return t.yaxis[o].seriesName=n[o].name,t.yaxis[o];{let l=T.extend(s.yAxis,t.yaxis[0]);return l.show=!1,l}})),a&&n.length>1&&n.length!==t.yaxis.length&&
$ { d } 0 0 0 $ { f }
0 $ { d } 0 0 $ { f }
0 0 $ { d } 0 $ { f }
0 0 0 1 0
`,in:"SourceGraphic",result:"brightness"}),l.enabled&&this.addShadow(g,e,l,"brightness")}),l.noUserSpaceOnUse||(n=(a=t.filterer())==null?void 0:a.node)==null||n.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize((r=t.filterer())==null?void 0:r.node))}addShadow(t,e,s,i){var a;let n=this.w,{blur:r,top:o,left:l,color:c,opacity:h}=s;if(c=Array.isArray(c)?c[e]:c,((a=n.config.chart.dropShadow.enabledOnSeries)==null?void 0:a.length)>0&&n.config.chart.dropShadow.enabledOnSeries.indexOf(e)===-1)return t;t.offset({in:i,dx:l,dy:o,result:"offset"}),t.gaussianBlur({in:"offset",stdDeviation:r,result:"blur"}),t.flood({"flood-color":c,"flood-opacity":h,result:"flood"}),t.composite({in:"flood",in2:"blur",operator:"in",result:"shadow"}),t.merge(["shadow",i])}dropShadow(t,e,s=0){var i,a,n,r,o;let l=this.w;return t.unfilter&&t.unfilter(!0),T.isMsEdge()&&l.config.chart.type==="radialBar"||((i=l.config.chart.dropShadow.enabledOnSeries)==null?void 0:i.length)>0&&((a=l.config.chart.dropShadow.enabledOnSeries)==null?void 0:a.indexOf(s))===-1||t.filterWith&&(t.filterWith(c=>{this.addShadow(c,s,e,"SourceGraphic")}),e.noUserSpaceOnUse||(r=(n=t.filterer())==null?void 0:n.node)==null||r.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize((o=t.filterer())==null?void 0:o.node)),t}setSelectionFilter(t,e,s){let i=this.w;if(typeof i.interact.selectedDataPoints[e]<"u"&&i.interact.selectedDataPoints[e].indexOf(s)>-1){if(t.node.setAttribute("selected",!0),u.sliceOffsetOwnsActiveState(i))return;let a=i.config.states.active.filter;a.type!=="none"&&this.applyFilter(t,e,a.type,a.value)}}_scaleFilterSize(t){if(!t)return;(s=>{for(let i in s)Object.prototype.hasOwnProperty.call(s,i)&&t.setAttribute(i,s[i])})({width:"200%",height:"200%",x:"-50%",y:"-50%"})}},B=class u{constructor(t,e=null){this.w=t,this.ctx=e}roundPathCorners(t,e){t.indexOf("NaN")>-1&&(t="");function s(C,M,k){var L=M.x-C.x,E=M.y-C.y,D=Math.sqrt(L*L+E*E);return i(C,M,Math.min(1,k/D))}function i(C,M,k){return{x:C.x+(M.x-C.x)*k,y:C.y+(M.y-C.y)*k}}function a(C,M){C.length>2&&(C[C.length-2]=M.x,C[C.length-1]=M.y)}function n(C){return{x:parseFloat(C[C.length-2]),y:parseFloat(C[C.length-1])}}var r=t.split(/[,\s]/).reduce(function(C,M){var k=M.match(/^([a-zA-Z])(.+)/);return k?(C.push(k[1]),C.push(k[2])):C.push(M),C},[]),o=r.reduce(function(C,M){return parseFloat(M)==M&&C.length?C[C.length-1].push(M):C.push([M]),C},[]),l=[];if(o.length>1){var c=n(o[0]),h=null;o[o.length-1][0]=="Z"&&o[0].length>2&&(h=["L",c.x,c.y],o[o.length-1]=h),l.push(o[0]);for(var d=1;d<o.length;d++){var f=l[l.length-1],g=o[d],p=g==h?o[1]:o[d+1];if(p&&f&&f.length>2&&g[0]=="L"&&p.length>2&&p[0]=="L"){var m=n(f),b=n(g),x=n(p),_,w;_=s(b,m,e),w=s(b,x,e),a(g,_),g.origPoint=b,l.push(g);var y=i(_,b,.5),v=i(b,w,.5),A=["C",y.x,y.y,v.x,v.y,w.x,w.y];A.origPoint=b,l.push(A)}else l.push(g)}if(h){var S=n(l[l.length-1]);l.push(["Z"]),a(l[0],S)}}else l=o;return l.reduce(function(C,M){return C+M.join(" ")+" "},"")}drawLine(t,e,s,i,a="#a8a8a8",n=0,r=null,o="butt"){return this.w.dom.Paper.line().attr({x1:t,y1:e,x2:s,y2:i,stroke:a,"stroke-dasharray":n,"stroke-width":r,"stroke-linecap":o})}drawRect(t=0,e=0,s=0,i=0,a=0,n="#fefefe",r=1,o=null,l=null,c=0){let d=this.w.dom.Paper.rect();return d.attr({x:t,y:e,width:s>0?s:0,height:i>0?i:0,rx:a,ry:a,opacity:r,"stroke-width":o!==null?o:0,stroke:l!==null?l:"none","stroke-dasharray":c}),d.node.setAttribute("fill",n),d}drawPolygon(t,e="#e1e1e1",s=1,i="none"){return this.w.dom.Paper.polygon(t).attr({fill:i,stroke:e,"stroke-width":s})}drawCircle(t,e=null){let s=this.w;t<0&&(t=0);let i=s.dom.Paper.circle(t*2);return e!==null&&i.attr(e),i}drawPath({d:t="",stroke:e="#a8a8a8",strokeWidth:s=1,fill:i,fillOpacity:a=1,strokeOpacity:n=1,classes:r,strokeLinecap:o=null,strokeDashArray:l=0}){let c=this.w;return o===null&&(o=c.config.stroke.lineCap),(t.indexOf("undefined")>-1||t.indexOf("NaN")>-1)&&(t=` M 0 $ { c . layout . gridHeight } `),c.dom.Paper.path(t).attr({fill:i,"fill-opacity":a,stroke:e,"stroke-opacity":n,"stroke-linecap":o,"stroke-width":s,"stroke-dasharray":l,class:r})}group(t=null){let s
L ${ t + i } ${ e + i }
L ${ t - i } ${ e + i }
Z` ; break ; case "square" : case "rect" : i = i / 1.125 , f = `M ${ t - i } ${ e - i }
L ${ t + i } ${ e - i }
L ${ t + i } ${ e + i }
L ${ t - i } ${ e + i }
Z` ; break ; case "diamond" : i = i * 1.05 , f = `M ${ t } ${ e - i }
L ${ t + i } ${ e }
L ${ t } ${ e + i }
L ${ t - i } ${ e }
Z` ; break ; case "line" : i = i / 1.1 , f = `M ${ t - i } ${ e }
L ${ t + i } ${ e } ` ; break ; default : i = i * 2 , f = `M ${ t } , ${ e }
m - ${ i / 2 } , 0
a ${ i / 2 } , ${ i / 2 } 0 1,0 ${ i } ,0
a ${ i / 2 } , ${ i / 2 } 0 1,0 - ${ i } ,0` ; break } return f } drawMarkerShape ( t , e , s , i , a ){ let n = this . drawPath ({ d : this . getMarkerPath ( t , e , s , i ), stroke : a . pointStrokeColor , strokeDashArray : a . pointStrokeDashArray , strokeWidth : a . pointStrokeWidth , fill : a . pointFillColor , fillOpacity : a . pointFillOpacity , strokeOpacity : a . pointStrokeOpacity }); return n . attr ({ cx : t , cy : e , shape : a . shape , class : a . class ? a . class : "" }), n } drawMarker ( t , e , s ){ t = t || 0 ; let i = s . pSize || 0 ; return T . isNumber ( e ) || ( i = 0 , e = 0 ), this . drawMarkerShape ( t , e , s ? . shape , i , G ( G ({}, s ), s . shape === "line" || s . shape === "plus" || s . shape === "cross" ? { pointStrokeColor : s . pointFillColor , pointStrokeOpacity : s . pointFillOpacity } : {}))} pathMouseEnter ( t , e ){ var s , i ; let a = this . w , n = new at ( this . w ), r = parseInt (( s = t . node . getAttribute ( "index" )) != null ? s : "" , 10 ), o = parseInt (( i = t . node . getAttribute ( "j" )) != null ? i : "" , 10 ); if ( ! ( isNaN ( r ) || isNaN ( o )) && ( typeof a . config . chart . events . dataPointMouseEnter == "function" && a . config . chart . events . dataPointMouseEnter ( e , this . ctx ,{ seriesIndex : r , dataPointIndex : o , w : a }), u . _fireEvent ( a , "dataPointMouseEnter" ,[ e , this . ctx ,{ seriesIndex : r , dataPointIndex : o , w : a }]), ! ( a . config . states . active . filter . type !== "none" && t . node . getAttribute ( "selected" ) === "true" ) &&! at . hoverOutlineOwnsHoverState ( a ) && a . config . states . hover . filter . type !== "none" &&! a . interact . isTouchDevice )){ let l = a . config . states . hover . filter ; n . applyFilter ( t , r , l . type , l . value )}} pathMouseLeave ( t , e ){ var s , i ; let a = this . w , n = new at ( this . w ), r = parseInt (( s = t . node . getAttribute ( "index" )) != null ? s : "" , 10 ), o = parseInt (( i = t . node . getAttribute ( "j" )) != null ? i : "" , 10 ); isNaN ( r ) || isNaN ( o ) || ( typeof a . config . chart . events . dataPointMouseLeave == "function" && a . config . chart . events . dataPointMouseLeave ( e , this . ctx ,{ seriesIndex : r , dataPointIndex : o , w : a }), u . _fireEvent ( a , "dataPointMouseLeave" ,[ e , this . ctx ,{ seriesIndex : r , dataPointIndex : o , w : a }]), ! ( a . config . states . active . filter . type !== "none" && t . node . getAttribute ( "selected" ) === "true" ) && ( at . hoverOutlineOwnsHoverState ( a ) || a . config . states . hover . filter . type !== "none" && n . getDefaultFilter ( t , r )))} _clearAllDataPointSelections ( t , e ){ let s = this . w ; s . interact . selectedDataPoints = []; let i = s . dom . Paper . find ( ".apexcharts-series path:not(.apexcharts-decoration-element)" ), a = s . dom . Paper . find ( ".apexcharts-series circle:not(.apexcharts-decoration-element), .apexcharts-series rect:not(.apexcharts-decoration-element)" ), n = r =>{ Array . prototype . forEach . call ( r , o =>{ o . node . setAttribute ( "selected" , "false" ), t . getDefaultFilter ( o , e )})}; n ( i ), n ( a )} _togglePointSelection ( t , e , s , i ){ let a = this . w ; if ( t . node . getAttribute ( "selected" ) === "true" ){ t . node . setAttribute ( "selected" , "false" ); let n = a . interact . selectedDataPoints [ s ]. indexOf ( i ); return n >- 1 && a . interact . selectedDataPoints [ s ]. splice ( n , 1 ), "false" } return ! a . config . states . active . allowMultipleDataPointsSelection && a . interact . selectedDataPoints . length > 0 && this . _clearAllDataPointSelections ( e , s ), t . node . setAttribute ( "selected" , "true" ), typeof a . interact . selectedDataPoints [ s ] > "u" && ( a . interact . selectedDataPoints [ s ] = []), a . interact . selectedDataPoints [ s ]. push ( i ), "true" } _applyPointSelectionFilter ( t , e , s , i ){ let a = this . w ; if ( ! at . sliceOffsetOwnsActiveState ( a )){ if ( i === "true" ){ let n = a . config . states . active . filter ; if ( n !== "none" ) e . applyFilter ( t , s , n . type , n . value ); else if ( a . config . states . hover . filter !== "none" &&! a . interact . isTouchDevice ){ let r = a . config . states . hover . filter ; e . applyFilter ( t , s , r . type , r . value )}} else if ( a . config . states . active . filter . type !== "none" ) if ( a . config . states . hover . filter . type !== "none" &&! a . interact . isTouchDevice ){ let n = a . config . states . hover . filter ; e . applyFilter ( t , s , n . type , n . value )} else e . getDefaultFilter ( t , s )}} pathMouseDown ( t , e ){ var s , i ; let a = this . w , n = new at ( this . w ), r = parseInt (( s = t . node . getAttribute ( "index" )) != null ? s : "" , 10 ), o = parseInt (( i = t . node . getAttribute ( "j" )) != null ? i : "" , 10 ); if ( isNaN ( r ) || isNaN ( o )) return ; let l = a . config . chart . link ; if ( !!! ( l && ( typeof l . dimension == "function" || l . enabled ))){ let h = this . _togglePointSelection ( t , n , r , o ); this . _applyPointSelectionFilter ( t , n , r , h )} typeof a . config . chart . events . dataPointSelection == "function" && a . config . chart . events . dataPointSelection ( e , this . ctx ,{ selectedDataPoints : a . interact . selectedDataPoints , seriesIndex : r , dataPointIndex : o , w : a }), e && u . _fire
. apexcharts - candlestick - series . apexcharts - series [ data \\ : realIndex = '${e}' ] path [ j = '${t}' ],
. apexcharts - boxPlot - series . apexcharts - series [ data \\ : realIndex = '${e}' ] path [ j = '${t}' ],
. apexcharts - violin - series . apexcharts - series [ data \\ : realIndex = '${e}' ] path [ j = '${t}' ],
. apexcharts - rangebar - series . apexcharts - series [ data \\ : realIndex = '${e}' ] path [ j = '${t}' ] `));let f=null,g=o.globals.barCanvasCoords;if(!d&&g&&(f=typeof e=="number"&&((s=g[e])==null?void 0:s[t])||null,!f)){for(let y in g)if((i=g[y])!=null&&i[t]){f=g[y][t];break}}let p=d?parseFloat((a=d.getAttribute("cx"))!=null?a:"0"):f?f.cx:0,m=d?parseFloat((n=d.getAttribute("cy"))!=null?n:"0"):f?f.cy:0,b=d?parseFloat((r=d.getAttribute("barWidth"))!=null?r:"0"):f?f.barWidth:0,x=l.getElGrid();if(!x)return;let _=x.getBoundingClientRect(),w=d&&(d.classList.contains("apexcharts-candlestick-area")||d.classList.contains("apexcharts-boxPlot-area"));if(o.axisFlags.isXNumeric){if(d&&!w){let y=this._datapointCenterXFromBars(t);y!=null?p=y:p=p-(c%2!==0?b/2:0)}d&&w&&(p=p-b/2)}else!o.globals.isBarHorizontal&&!f&&(p=l.xAxisTicksPositions[t-1]+l.dataPointsDividedWidth/2,isNaN(p)&&(p=l.xAxisTicksPositions[t]-l.dataPointsDividedWidth/2));if(o.globals.isBarHorizontal?m=m-l.tooltipRect.ttHeight:o.config.tooltip.followCursor?m=l.e.clientY-_.top-l.tooltipRect.ttHeight/2:m+l.tooltipRect.ttHeight+15>o.layout.gridHeight&&(m=o.layout.gridHeight),o.globals.isBarHorizontal||this.moveXCrosshairs(p),!l.fixedTooltip){if(o.globals.isBarHorizontal&&!o.config.tooltip.followCursor&&this.placeHorizontalSharedTooltip(t))return;this.moveTooltip(p,m||o.layout.gridHeight)}}_datapointCenterXFromBars(t){var e,s;let i=this.w,a=i.dom.baseEl.querySelectorAll(` . apexcharts - bar - series path [ j = '${t}' ],. apexcharts - rangebar - series path [ j = '${t}' ] `);if(!a.length)return null;let n=1/0,r=-1/0;for(let o of a){let l=o.parentNode;if((s=(e=l?.classList)==null?void 0:e.contains)!=null&&s.call(e,"apexcharts-series-collapsed"))continue;let c=o.getBoundingClientRect();c.width===0&&c.height===0||(c.left<n&&(n=c.left),c.right>r&&(r=c.right))}return isFinite(n)?_t.screenXToPlotPx(i,(n+r)/2):null}placeHorizontalSharedTooltip(t){var e,s;let i=this.w,a=this.ttCtx,n=a.getElTooltip();if(!n)return!1;let r=a.getElGrid();if(!r)return!1;let o=r.getBoundingClientRect(),l=i.dom.baseEl.querySelectorAll(` . apexcharts - bar - series path [ j = '${t}' ],. apexcharts - rangebar - series path [ j = '${t}' ],. apexcharts - boxPlot - series path [ j = '${t}' ] `);if(!l.length)return!1;let c=1/0,h=-1/0,d=1/0,f=-1/0;for(let k of l){let L=k.parentNode;if((s=(e=L?.classList)==null?void 0:e.contains)!=null&&s.call(e,"apexcharts-series-collapsed"))continue;let E=k.getBoundingClientRect();E.width===0&&E.height===0||(E.left<c&&(c=E.left),E.right>h&&(h=E.right),E.top<d&&(d=E.top),E.bottom>f&&(f=E.bottom))}if(!isFinite(c))return!1;let g=a.tooltipRect.ttWidth||0,p=a.tooltipRect.ttHeight||0,m=(c+h)/2-o.left+i.layout.translateX,b=d-o.top+i.layout.translateY,x=f-o.top+i.layout.translateY,_=i.layout.translateY,w=i.layout.translateY+i.layout.gridHeight,y=i.layout.translateX,v=i.layout.translateX+i.layout.gridWidth,A="top",S=b-p-kt;if(S<_){let k=x+kt;k+p<=w&&(A="bottom",S=k)}let C=m-g/2;C<y&&(C=y),C+g>v&&(C=v-g);let M=Math.max(10,Math.min(g-10,m-C));return this.applyTooltipPosition(n,{x:C,y:S,placement:A,arrowY:null,arrowX:M}),!0}};function gc(u){let t=e=>` < svg viewBox = "0 0 12 12" xmlns = "http://www.w3.org/2000/svg" aria - hidden = "true" > $ { e } < /svg>`;switch(u){case"square":case"rect":return t('<rect x="1" y="1" width="10" height="10" rx="1" fill="currentColor"/ > ');case"line":return t(' < rect x = "0" y = "5" width = "12" height = "2" rx = "1" fill = "currentColor" /> ');case"diamond":return t(' < path d = "M6 0.5 L11.5 6 L6 11.5 L0.5 6 Z" fill = "currentColor" /> ');case"triangle":return t(' < path d = "M6 1 L11.2 10.5 L0.8 10.5 Z" fill = "currentColor" /> ');case"cross":return t(' < path d = "M2 2 L10 10 M10 2 L2 10" stroke = "currentColor" stroke - width = "2" stroke - linecap = "round" /> ');case"plus":return t(' < path d = "M6 1 L6 11 M1 6 L11 6" stroke = "currentColor" stroke - width = "2" stroke - linecap = "round" /> ');case"star":return t(' < path d = "M6 0.5 L7.5 4.4 L11.5 4.7 L8.4 7.2 L9.5 11.1 L6 8.9 L2.5 11.1 L3.6 7.2 L0.5 4.7 L4.5 4.4 Z" fill = "currentColor" /> ');case"sparkle":return t(' < path d = "M6 0.5 L7 5 L11.5 6 L7 7 L6 11.5 L5 7 L0.5 6 L5 5 Z" fill = "currentColor" /> ');default:return t(' < circle cx = "6" cy = "6" r = "5" fill = "
2026-07-03 13:46:54 +00:00
0% {
opacity: 0
}
to {
opacity: 1
}
}
@keyframes resizeanim {
0%,
to {
opacity: 0
}
}
.apexcharts-canvas {
position: relative;
direction: ltr !important;
2026-08-31 14:25:22 +03:00
user-select: none;
/* Focus indicator colour. Themes override below. */
--apexcharts-focus-color: #008FFB;
}
/* Dark theme & high-contrast: brighter focus colour for sufficient contrast. */
.apexcharts-canvas .apexcharts-theme-dark,
.apexcharts-theme-dark.apexcharts-canvas {
--apexcharts-focus-color: #FFD500;
}
.apexcharts-canvas.apexcharts-high-contrast,
.apexcharts-high-contrast.apexcharts-canvas {
--apexcharts-focus-color: #FFFF00;
}
/* Visually-hidden aria-live status region (WCAG 4.1.3 Status Messages). */
.apexcharts-sr-status {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* Respect OS-level reduced-motion preference (WCAG 2.3.3). */
@media (prefers-reduced-motion: reduce) {
.apexcharts-canvas *,
.apexcharts-canvas *::before,
.apexcharts-canvas *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
2026-07-03 13:46:54 +00:00
}
.apexcharts-canvas ::-webkit-scrollbar {
-webkit-appearance: none;
width: 6px
}
.apexcharts-canvas ::-webkit-scrollbar-thumb {
border-radius: 4px;
background-color: rgba(0, 0, 0, .5);
box-shadow: 0 0 1px rgba(255, 255, 255, .5);
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5)
}
.apexcharts-inner {
position: relative
}
.apexcharts-text tspan {
font-family: inherit
}
rect.legend-mouseover-inactive,
.legend-mouseover-inactive rect,
.legend-mouseover-inactive path,
.legend-mouseover-inactive circle,
.legend-mouseover-inactive line,
.legend-mouseover-inactive text.apexcharts-yaxis-title-text,
.legend-mouseover-inactive text.apexcharts-yaxis-label {
transition: .15s ease all;
opacity: .2
}
2026-08-31 14:25:22 +03:00
/* Linked Views (#4): per-mark crossfilter dim. Applied to individual data
marks (not whole series) whose x is outside the brushed range. Opacity is
overridable per chart via the --apx-cf-dim custom property. */
.apexcharts-crossfilter-dimmed {
transition: opacity .25s ease;
opacity: var(--apx-cf-dim, .2)
}
/* Linked Views (#4): default styling for the built-in crossfilter data table
(cf.dataTable). Deliberately light so host styles can override. */
.apexcharts-cf-table {
border-collapse: collapse;
width: 100%;
font-size: 13px;
}
.apexcharts-cf-table caption {
caption-side: bottom;
text-align: right;
padding: 6px 2px;
font-size: 12px;
opacity: .7
}
.apexcharts-cf-table th,
.apexcharts-cf-table td {
padding: 6px 10px;
text-align: left;
border-bottom: 1px solid rgba(0, 0, 0, .08)
}
.apexcharts-cf-table th {
font-weight: 600;
border-bottom-width: 2px
}
.apexcharts-cf-table tbody tr:hover {
background: rgba(99, 102, 241, .06)
}
/* Measure ruler (#18): measure / delta ruler.
Theme via these classes or the --apx-measure-* custom properties below
(config \`chart.measure.colors\` overrides both). The ruler group also carries
a direction class: apexcharts-measure-up | -down | -flat.
Element classes:
.apexcharts-measure-band shaded span band
.apexcharts-measure-vline vertical guide lines
.apexcharts-measure-line free-mode diagonal line
.apexcharts-measure-label-bg readout box .apexcharts-measure-label text
Colors are applied as SVG presentation attributes, so any rule you write on
these classes overrides them. */
.apexcharts-canvas {
--apx-measure-up: #16a34a;
--apx-measure-down: #dc2626;
--apx-measure-neutral: #64748b;
--apx-measure-guide: #94a3b8;
}
.apexcharts-measure-capture {
cursor: crosshair;
}
/* Radial Actions (#chrome): right-click context menu. Theme via these classes
or the --apx-menu-* custom properties. */
.apexcharts-canvas {
--apx-menu-bg: #ffffff;
--apx-menu-fg: #1e293b;
--apx-menu-border: #e2e8f0;
--apx-menu-hover: #f1f5f9;
--apx-menu-shadow: rgba(15, 23, 42, 0.18);
}
.apexcharts-context-menu {
min-width: 168px;
padding: 4px;
border-radius: 8px;
background: var(--apx-menu-bg);
border: 1px solid var(--apx-menu-border);
box-shadow: 0 6px 22px var(--apx-menu-shadow);
font-family: Helvetica, Arial, sans-serif;
font-size: 13px;
z-index: 20;
user-select: none;
}
.apexcharts-context-menu-item {
display: block;
width: 100%;
box-sizing: border-box;
text-align: left;
padding: 7px 12px;
border: 0;
border-radius: 5px;
background: transparent;
color: var(--apx-menu-fg);
font: inherit;
cursor: pointer;
}
.apexcharts-context-menu-item:hover,
.apexcharts-context-menu-item--active {
background: var(--apx-menu-hover);
}
.apexcharts-context-menu-item:focus {
outline: none;
}
/* Ink Layer (#7): the floating note editor card, opened by clicking an
ink-managed annotation. Theme via these classes or the --apx-ink-* vars. */
.apexcharts-canvas {
--apx-ink-card-bg: #ffffff;
--apx-ink-card-fg: #1e293b;
--apx-ink-card-border: #e2e8f0;
--apx-ink-card-hover: #f1f5f9;
--apx-ink-card-accent: #6366f1;
--apx-ink-card-shadow: rgba(15, 23, 42, 0.18);
}
.apexcharts-ink-card {
position: absolute;
z-index: 25;
display: flex;
flex-direction: column;
gap: 6px;
padding: 8px;
border-radius: 8px;
background: var(--apx-ink-card-bg);
border: 1px solid var(--apx-ink-card-border);
box-shadow: 0 6px 22px var(--apx-ink-card-shadow);
font-family: Helvetica, Arial, sans-serif;
font-size: 12px;
color: var(--apx-ink-card-fg);
user-select: none;
}
.apexcharts-ink-card-row {
display: flex;
align-items: center;
gap: 4px;
}
.apexcharts-ink-card input.apexcharts-ink-editor {
flex: 1 1 auto;
width: 150px;
min-width: 0;
box-sizing: border-box;
padding: 4px 6px;
font: inherit;
color: inherit;
background: transparent;
border: 1px solid var(--apx-ink-card-border);
border-radius: 5px;
}
.apexcharts-ink-card input.apexcharts-ink-editor:focus {
outline: none;
border-color: var(--apx-ink-card-accent);
}
.apexcharts-ink-btn {
flex: 0 0 auto;
width: 24px;
height: 24px;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
border: 0;
border-radius: 5px;
background: transparent;
color: inherit;
font: inherit;
font-size: 12px;
line-height: 1;
cursor: pointer;
}
.apexcharts-ink-btn:hover,
.apexcharts-ink-btn--active {
background: var(--apx-ink-card-hover);
}
.apexcharts-ink-btn:focus-visible,
.apexcharts-ink-swatch:focus-visible {
outline: 2px solid var(--apx-ink-card-accent);
outline-offset: 1px;
}
.apexcharts-ink-btn--bold {
font-weight: 700;
}
.apexcharts-ink-btn--delete:hover {
color: #dc2626;
}
.apexcharts-ink-swatch {
flex: 0 0 auto;
width: 16px;
height: 16px;
padding: 0;
border: 1px solid rgba(100, 116, 139, 0.45);
border-radius: 50%;
cursor: pointer;
}
.apexcharts-ink-swatch--active {
box-shadow:
0 0 0 2px var(--apx-ink-card-bg),
0 0 0 4px var(--apx-ink-card-accent);
}
.apexcharts-ink-sep {
flex: 0 0 auto;
width: 1px;
height: 16px;
margin: 0 2px;
background: var(--apx-ink-card-border);
}
.apexcharts-ink-cardlabel {
flex: 0 0 auto;
font-size: 10px;
letter-spacing: 0.4px;
text-transform: uppercase;
opacity: 0.65;
margin-right: 2px;
}
.apexcharts-ink-marker-size {
flex: 0 0 auto;
min-width: 16px;
text-align: center;
font-variant-numeric: tabular-nums;
}
2026-07-03 13:46:54 +00:00
.apexcharts-legend-text {
padding-left: 15px;
margin-left: -15px;
}
2026-08-31 14:25:22 +03:00
.apexcharts-legend-series[role=" button "]:focus {
outline: 2px solid var(--apexcharts-focus-color, #008FFB);
outline-offset: 2px;
}
.apexcharts-legend-series[role=" button "]:focus:not(:focus-visible) {
outline: none;
}
.apexcharts-legend-series[role=" button "]:focus-visible {
outline: 2px solid var(--apexcharts-focus-color, #008FFB);
outline-offset: 2px;
}
2026-07-03 13:46:54 +00:00
.apexcharts-series-collapsed {
opacity: 0
}
2026-08-31 14:25:22 +03:00
.apexcharts-canvas svg:focus:not(:focus-visible) {
outline: none;
}
/* Keyboard navigation focus indicator on SVG data elements.
SVG elements don't support CSS outline, so we use stroke. */
.apexcharts-bar-area.apexcharts-keyboard-focused,
.apexcharts-candlestick-area.apexcharts-keyboard-focused,
.apexcharts-boxPlot-area.apexcharts-keyboard-focused,
.apexcharts-rangebar-area.apexcharts-keyboard-focused,
.apexcharts-pie-area.apexcharts-keyboard-focused,
.apexcharts-heatmap-rect.apexcharts-keyboard-focused,
.apexcharts-treemap-rect.apexcharts-keyboard-focused {
stroke: var(--apexcharts-focus-color, #008FFB);
stroke-width: 2;
stroke-opacity: 1;
}
2026-07-03 13:46:54 +00:00
.apexcharts-tooltip {
2026-08-31 14:25:22 +03:00
--apx-tt-bg: #ffffff;
/* Shared by the body and the arrow's two outward facets, so the
* hairline reads as one continuous outline around the whole shape.
* Keep it strong enough to survive on its own: the shadow below is
* elevation, not edge definition. */
--apx-tt-border: rgba(15, 23, 42, 0.12);
/* Elevation, in three layers: a tight contact shadow that anchors the
* bottom edge, a directional key shadow for the lift, and a wide
* ambient one that grounds the whole box. Each is weaker and more
* diffuse than the last.
*
* A tooltip is unusual in that it floats over *data*, so reach costs
* more than it does on a page: every pixel the shadow travels tints a
* bar or a line the reader is trying to compare. These numbers are
* tuned to keep the near-edge contrast that reads as elevation while
* dropping the long low haze that only muddies the plot.
*
* Note there is deliberately no \`0 0 0 1px\` ring layer. That used to
* stand in for edge definition back when --apx-tt-border was barely
* visible; now that the border is a real hairline (and the arrow
* shares it) a ring only double-draws the outline, and being spread
* rather than offset it leaked ink upward too, flattening the lift.
*
* \`--apx-tt-shadow-dir\` flips the whole stack's Y in one place \u2014 see
* the \`[data-placement=" bottom "]\` rule further down. */
--apx-tt-shadow-dir: 1;
--apx-tt-shadow: 0 calc(var(--apx-tt-shadow-dir) * 1px) 2px rgba(15, 23, 42, 0.06), 0 calc(var(--apx-tt-shadow-dir) * 4px) 8px -2px rgba(15, 23, 42, 0.10), 0 calc(var(--apx-tt-shadow-dir) * 12px) 20px -8px rgba(15, 23, 42, 0.14);
--apx-tt-arrow-bg: var(--apx-tt-bg);
--apx-tt-color: #0f172a;
--apx-tt-color-muted: rgba(15, 23, 42, 0.55);
border-radius: 8px;
background: var(--apx-tt-bg);
border: 1px solid var(--apx-tt-border);
box-shadow: var(--apx-tt-shadow);
color: var(--apx-tt-color);
2026-07-03 13:46:54 +00:00
cursor: default;
2026-08-31 14:25:22 +03:00
font-size: 13px;
left: 0;
top: 0;
2026-07-03 13:46:54 +00:00
opacity: 0;
pointer-events: none;
position: absolute;
display: flex;
flex-direction: column;
2026-08-31 14:25:22 +03:00
padding: 2px 0;
2026-07-03 13:46:54 +00:00
white-space: nowrap;
z-index: 12;
2026-08-31 14:25:22 +03:00
transition: opacity .12s ease
2026-07-03 13:46:54 +00:00
}
2026-08-31 14:25:22 +03:00
/* While the tooltip is visible, smoothly animate position changes
* between data points. Kept short (160 ms) and ease-out so it stays
* responsive \u2014 too long would feel laggy when sweeping across many
* points fast. The position transition is only attached after the
* first paint (Position.applyTooltipPosition flips \`data-positioned\`
* once the tooltip has been placed) so the *first* show doesn't slide
* the tooltip in from the previously-stale (0,0) coordinates. */
2026-07-03 13:46:54 +00:00
.apexcharts-tooltip.apexcharts-active {
opacity: 1;
2026-08-31 14:25:22 +03:00
transition: opacity .12s ease
}
.apexcharts-tooltip.apexcharts-active[data-positioned=" true "] {
transition: opacity .12s ease, left .16s ease-out, top .16s ease-out
2026-07-03 13:46:54 +00:00
}
.apexcharts-tooltip.apexcharts-theme-light {
2026-08-31 14:25:22 +03:00
/* defaults already set above; class kept for backward-compat selectors */
2026-07-03 13:46:54 +00:00
}
.apexcharts-tooltip.apexcharts-theme-dark {
2026-08-31 14:25:22 +03:00
--apx-tt-bg: #1c1c1f;
--apx-tt-border: rgba(255, 255, 255, 0.16);
/* Dark needs more alpha than light to register at all, but not as much
* as it used to: the light rim above now carries the edge, so the
* shadow is free to be pure elevation instead of doubling as an
* outline. Same geometry as light, heavier ink. */
--apx-tt-shadow: 0 calc(var(--apx-tt-shadow-dir) * 1px) 2px rgba(0, 0, 0, 0.24), 0 calc(var(--apx-tt-shadow-dir) * 4px) 8px -2px rgba(0, 0, 0, 0.30), 0 calc(var(--apx-tt-shadow-dir) * 12px) 20px -8px rgba(0, 0, 0, 0.38);
--apx-tt-color: #f3f4f6;
--apx-tt-color-muted: rgba(243, 244, 246, 0.55);
2026-07-03 13:46:54 +00:00
}
.apexcharts-tooltip * {
font-family: inherit
}
2026-08-31 14:25:22 +03:00
/* Point-annotation hover tooltip (apexcharts/apexcharts.js#2424). Reuses the
* glass body/border/shadow from \`.apexcharts-tooltip\` but holds free-form
* content, so it needs its own padding, wrapping and a sane max width. */
.apexcharts-tooltip.apexcharts-annotation-tooltip {
padding: 6px 10px;
max-width: 240px;
white-space: normal;
line-height: 1.4;
pointer-events: none;
z-index: 13
2026-07-03 13:46:54 +00:00
}
2026-08-31 14:25:22 +03:00
.apexcharts-tooltip-title {
padding: 8px 12px 4px;
font-size: 12px;
font-weight: 600;
letter-spacing: 0.01em;
color: var(--apx-tt-color-muted);
background: transparent;
border-bottom: none;
margin-bottom: 0
2026-07-03 13:46:54 +00:00
}
2026-08-31 14:25:22 +03:00
.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,
2026-07-03 13:46:54 +00:00
.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {
2026-08-31 14:25:22 +03:00
background: transparent;
border-bottom: none
}
/* \`fillSeriesColor\`: each series-group already paints itself with the
* series colour. Drop the glass body entirely (transparent bg, no
* border, no backdrop-filter, no padding) and clip the coloured
* series-group(s) to the tooltip's rounded corners so they fill the
* shell edge-to-edge. Text inside the coloured group is forced to
* white for contrast. */
.apexcharts-tooltip.apexcharts-tooltip-fill-series {
background: transparent;
-webkit-backdrop-filter: none;
backdrop-filter: none;
border: none;
padding: 0;
overflow: hidden;
color: #fff
}
.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-title {
background: rgba(0, 0, 0, 0.22);
color: #fff;
opacity: 1;
padding: 6px 12px
}
.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-series-group {
color: #fff
}
/* Arrow connector \u2014 a 45\xB0-rotated square straddling the body's edge, so
* the body's 1px border runs continuously out across the arrow and back.
* The two facets that face away from the tooltip carry the border; the
* two that face into it carry none, and the square's opaque fill covers
* the segment of the body's own border it sits on, hiding the seam.
*
* This is why it's a rotated square and not a triangle: \`clip-path\`
* erases \`border\` and \`box-shadow\` along with everything outside the
* polygon, which left \`filter: drop-shadow\` as the only way to suggest
* an edge \u2014 and a drop-shadow can only ever blur one, never draw a
* hairline. Nothing here needs a filter.
*
* Geometry: a square of side S rotated 45\xB0 reaches S/\u221A2 from its centre
* to each corner, so S = 10px gives the ~7px tip overhang that
* ARROW_TIP_OVERHANG assumes (tooltip/constants.js) over a ~14px base.
* The offsets park the square's *centre* 1px outside the padding box
* (-6px = -1px border - 10px/2), i.e. exactly on the body's border line,
* so the two borders meet end to end instead of overlapping or gapping.
* \`box-sizing\` must be border-box or the bordered sides would grow the
* square asymmetrically and knock its centre off that line. */
.apexcharts-tooltip-arrow {
position: absolute;
box-sizing: border-box;
width: 10px;
height: 10px;
background: var(--apx-tt-arrow-bg);
transform: rotate(45deg);
pointer-events: none;
top: calc(var(--apx-tt-arrow-y, 50%) - 5px)
}
/* Which two sides face outward depends on the placement. Under
* \`rotate(45deg)\` the square's bottom-left corner swings to the left,
* top-right to the right, top-left to the top and bottom-right to the
* bottom \u2014 so the pair of borders below is always the two sharing the
* corner that ends up as the tip. */
.apexcharts-tooltip[data-placement=" right "] .apexcharts-tooltip-arrow {
left: -6px;
border-left: 1px solid var(--apx-tt-border);
border-bottom: 1px solid var(--apx-tt-border)
}
.apexcharts-tooltip[data-placement=" left "] .apexcharts-tooltip-arrow {
right: -6px;
border-top: 1px solid var(--apx-tt-border);
border-right: 1px solid var(--apx-tt-border)
}
/* Vertical arrow variants: tooltip is above/below the data point and the
* arrow points down/up. The base rule above uses \`--apx-tt-arrow-y\` for
* left/right placement; for top/bottom we centre on \`--apx-tt-arrow-x\`
* instead (set by applyTooltipPosition). */
.apexcharts-tooltip[data-placement=" top "] .apexcharts-tooltip-arrow,
.apexcharts-tooltip[data-placement=" bottom "] .apexcharts-tooltip-arrow {
top: auto;
left: calc(var(--apx-tt-arrow-x, 50%) - 5px)
}
.apexcharts-tooltip[data-placement=" top "] .apexcharts-tooltip-arrow {
bottom: -6px;
border-right: 1px solid var(--apx-tt-border);
border-bottom: 1px solid var(--apx-tt-border)
}
.apexcharts-tooltip[data-placement=" bottom "] .apexcharts-tooltip-arrow {
top: -6px;
border-top: 1px solid var(--apx-tt-border);
border-left: 1px solid var(--apx-tt-border)
}
/* When the tooltip is flipped below the data point, the default
* downward-biased shadow leaves its top edge undefined. Negating the
* direction casts the whole elevation upward instead, so the shadow
* falls between the tooltip and the mark above it. One multiplier flips
* all three layers together; the arrow needs no counterpart, since its
* border doesn't depend on light direction. */
.apexcharts-tooltip[data-placement=" bottom "] {
--apx-tt-shadow-dir: -1
2026-07-03 13:46:54 +00:00
}
.apexcharts-tooltip-text-goals-value,
.apexcharts-tooltip-text-y-value,
.apexcharts-tooltip-text-z-value {
display: inline-block;
margin-left: 5px;
font-weight: 600
}
.apexcharts-tooltip-text-goals-label:empty,
.apexcharts-tooltip-text-goals-value:empty,
.apexcharts-tooltip-text-y-label:empty,
.apexcharts-tooltip-text-y-value:empty,
.apexcharts-tooltip-text-z-value:empty,
.apexcharts-tooltip-title:empty {
display: none
}
.apexcharts-tooltip-text-goals-label,
.apexcharts-tooltip-text-goals-value {
padding: 6px 0 5px
}
.apexcharts-tooltip-goals-group,
.apexcharts-tooltip-text-goals-label,
.apexcharts-tooltip-text-goals-value {
display: flex
}
.apexcharts-tooltip-text-goals-label:not(:empty),
.apexcharts-tooltip-text-goals-value:not(:empty) {
margin-top: -6px
}
.apexcharts-tooltip-marker {
2026-08-31 14:25:22 +03:00
display: inline-flex;
align-items: center;
justify-content: center;
2026-07-03 13:46:54 +00:00
position: relative;
2026-08-31 14:25:22 +03:00
width: 12px;
height: 12px;
margin-right: 6px;
2026-07-03 13:46:54 +00:00
vertical-align: middle;
color: inherit;
}
2026-08-31 14:25:22 +03:00
.apexcharts-tooltip-marker svg {
2026-07-03 13:46:54 +00:00
width: 100%;
2026-08-31 14:25:22 +03:00
height: 100%;
display: block;
2026-07-03 13:46:54 +00:00
}
.apexcharts-tooltip-series-group {
2026-08-31 14:25:22 +03:00
padding: 4px 12px;
2026-07-03 13:46:54 +00:00
display: none;
2026-08-31 14:25:22 +03:00
gap: 8px;
2026-07-03 13:46:54 +00:00
text-align: left;
justify-content: left;
align-items: center
}
.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {
opacity: 1
}
2026-08-31 14:25:22 +03:00
.apexcharts-tooltip-series-group.apexcharts-active:last-child,
2026-07-03 13:46:54 +00:00
.apexcharts-tooltip-series-group:last-child {
2026-08-31 14:25:22 +03:00
padding-bottom: 8px
2026-07-03 13:46:54 +00:00
}
.apexcharts-tooltip-y-group {
padding: 6px 0 5px
}
.apexcharts-custom-tooltip,
.apexcharts-tooltip-box {
padding: 4px 8px
}
.apexcharts-tooltip-boxPlot {
display: flex;
flex-direction: column-reverse
}
.apexcharts-tooltip-box>div {
margin: 4px 0
}
.apexcharts-tooltip-box span.value {
font-weight: 700
}
.apexcharts-tooltip-rangebar {
padding: 5px 8px
}
.apexcharts-tooltip-rangebar .category {
font-weight: 600;
color: #777
}
.apexcharts-tooltip-rangebar .series-name {
font-weight: 700;
display: block;
margin-bottom: 5px
}
2026-08-31 14:25:22 +03:00
/* X/Y axis tooltips \u2014 small popovers that label the crosshair on the
* axes. Restyled to match the modern data-tooltip palette: solid white
* body with a subtle border + soft drop-shadow, smaller font, rounded
* corners. The arrows still use the CSS border-triangle technique
* (cheap, crisp at small sizes); their colours flow from CSS variables
* so light/dark themes only need one override per axis. */
2026-07-03 13:46:54 +00:00
.apexcharts-xaxistooltip,
.apexcharts-yaxistooltip {
2026-08-31 14:25:22 +03:00
--apx-axt-bg: #ffffff;
--apx-axt-border: rgba(15, 23, 42, 0.08);
--apx-axt-color: #0f172a;
--apx-axt-shadow: 0 4px 12px -4px rgba(15, 23, 42, 0.18), 0 1px 3px -1px rgba(15, 23, 42, 0.12);
2026-07-03 13:46:54 +00:00
opacity: 0;
pointer-events: none;
2026-08-31 14:25:22 +03:00
color: var(--apx-axt-color);
font-size: 12px;
font-weight: 500;
2026-07-03 13:46:54 +00:00
text-align: center;
2026-08-31 14:25:22 +03:00
border-radius: 6px;
2026-07-03 13:46:54 +00:00
position: absolute;
z-index: 10;
2026-08-31 14:25:22 +03:00
background: var(--apx-axt-bg);
border: 1px solid var(--apx-axt-border);
box-shadow: var(--apx-axt-shadow)
2026-07-03 13:46:54 +00:00
}
2026-08-31 14:25:22 +03:00
.apexcharts-xaxistooltip.apexcharts-theme-dark,
.apexcharts-yaxistooltip.apexcharts-theme-dark {
--apx-axt-bg: #1c1c1f;
--apx-axt-border: rgba(255, 255, 255, 0.1);
--apx-axt-color: #f3f4f6;
--apx-axt-shadow: 0 4px 12px -4px rgba(0, 0, 0, 0.55), 0 1px 3px -1px rgba(0, 0, 0, 0.45)
2026-07-03 13:46:54 +00:00
}
2026-08-31 14:25:22 +03:00
.apexcharts-xaxistooltip {
padding: 4px 8px;
transition: .15s ease all
2026-07-03 13:46:54 +00:00
}
.apexcharts-xaxistooltip:after,
.apexcharts-xaxistooltip:before {
left: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none
}
2026-08-31 14:25:22 +03:00
/* :before paints the 1px border outline of the triangle (slightly larger
* than :after); :after sits inside and paints the fill \u2014 leaves a 1px
* ring of :before visible at the edges. */
2026-07-03 13:46:54 +00:00
.apexcharts-xaxistooltip:after {
border-color: transparent;
2026-08-31 14:25:22 +03:00
border-width: 5px;
margin-left: -5px
2026-07-03 13:46:54 +00:00
}
.apexcharts-xaxistooltip:before {
border-color: transparent;
2026-08-31 14:25:22 +03:00
border-width: 6px;
margin-left: -6px
2026-07-03 13:46:54 +00:00
}
.apexcharts-xaxistooltip-bottom:after,
.apexcharts-xaxistooltip-bottom:before {
bottom: 100%
}
.apexcharts-xaxistooltip-top:after,
.apexcharts-xaxistooltip-top:before {
top: 100%
}
.apexcharts-xaxistooltip-bottom:after {
2026-08-31 14:25:22 +03:00
border-bottom-color: var(--apx-axt-bg)
2026-07-03 13:46:54 +00:00
}
.apexcharts-xaxistooltip-bottom:before {
2026-08-31 14:25:22 +03:00
border-bottom-color: var(--apx-axt-border)
2026-07-03 13:46:54 +00:00
}
.apexcharts-xaxistooltip-top:after {
2026-08-31 14:25:22 +03:00
border-top-color: var(--apx-axt-bg)
2026-07-03 13:46:54 +00:00
}
.apexcharts-xaxistooltip-top:before {
2026-08-31 14:25:22 +03:00
border-top-color: var(--apx-axt-border)
2026-07-03 13:46:54 +00:00
}
.apexcharts-xaxistooltip.apexcharts-active {
opacity: 1;
transition: .15s ease all
}
.apexcharts-yaxistooltip {
2026-08-31 14:25:22 +03:00
padding: 3px 8px
2026-07-03 13:46:54 +00:00
}
.apexcharts-yaxistooltip:after,
.apexcharts-yaxistooltip:before {
top: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none
}
.apexcharts-yaxistooltip:after {
border-color: transparent;
2026-08-31 14:25:22 +03:00
border-width: 5px;
margin-top: -5px
2026-07-03 13:46:54 +00:00
}
.apexcharts-yaxistooltip:before {
border-color: transparent;
2026-08-31 14:25:22 +03:00
border-width: 6px;
margin-top: -6px
2026-07-03 13:46:54 +00:00
}
.apexcharts-yaxistooltip-left:after,
.apexcharts-yaxistooltip-left:before {
left: 100%
}
.apexcharts-yaxistooltip-right:after,
.apexcharts-yaxistooltip-right:before {
right: 100%
}
.apexcharts-yaxistooltip-left:after {
2026-08-31 14:25:22 +03:00
border-left-color: var(--apx-axt-bg)
2026-07-03 13:46:54 +00:00
}
.apexcharts-yaxistooltip-left:before {
2026-08-31 14:25:22 +03:00
border-left-color: var(--apx-axt-border)
2026-07-03 13:46:54 +00:00
}
.apexcharts-yaxistooltip-right:after {
2026-08-31 14:25:22 +03:00
border-right-color: var(--apx-axt-bg)
2026-07-03 13:46:54 +00:00
}
.apexcharts-yaxistooltip-right:before {
2026-08-31 14:25:22 +03:00
border-right-color: var(--apx-axt-border)
2026-07-03 13:46:54 +00:00
}
.apexcharts-yaxistooltip.apexcharts-active {
opacity: 1
}
.apexcharts-yaxistooltip-hidden {
display: none
}
.apexcharts-xcrosshairs,
.apexcharts-ycrosshairs {
pointer-events: none;
opacity: 0;
transition: .15s ease all
}
.apexcharts-xcrosshairs.apexcharts-active,
.apexcharts-ycrosshairs.apexcharts-active {
opacity: 1;
transition: .15s ease all
}
.apexcharts-ycrosshairs-hidden {
opacity: 0
}
.apexcharts-selection-rect {
cursor: move
}
.svg_select_shape {
stroke-width: 1;
stroke-dasharray: 10 10;
stroke: black;
stroke-opacity: 0.1;
pointer-events: none;
fill: none;
}
.svg_select_handle {
stroke-width: 3;
stroke: black;
fill: none;
}
.svg_select_handle_r {
cursor: e-resize;
}
.svg_select_handle_l {
cursor: w-resize;
}
.apexcharts-svg.apexcharts-zoomable.hovering-zoom {
cursor: crosshair
}
.apexcharts-svg.apexcharts-zoomable.hovering-pan {
cursor: move
}
.apexcharts-menu-icon,
2026-08-31 14:25:22 +03:00
.apexcharts-measure-icon,
2026-07-03 13:46:54 +00:00
.apexcharts-pan-icon,
.apexcharts-reset-icon,
.apexcharts-selection-icon,
.apexcharts-toolbar-custom-icon,
.apexcharts-zoom-icon,
.apexcharts-zoomin-icon,
.apexcharts-zoomout-icon {
cursor: pointer;
2026-08-31 14:25:22 +03:00
/* WCAG 2.5.8 Target Size (Minimum): 24\xD724 CSS px hit target. */
width: 26px;
height: 24px;
2026-07-03 13:46:54 +00:00
line-height: 24px;
color: #6e8192;
2026-08-31 14:25:22 +03:00
text-align: center;
/* Reset native <button> chrome \u2014 these are styled via SVG icons. */
padding: 0;
margin: 0;
background: transparent;
border: 0;
border-radius: 5px;
display: inline-flex;
align-items: center;
justify-content: center;
transition: background-color .12s ease, color .12s ease;
2026-07-03 13:46:54 +00:00
}
.apexcharts-menu-icon svg,
2026-08-31 14:25:22 +03:00
.apexcharts-measure-icon svg,
.apexcharts-pan-icon svg,
2026-07-03 13:46:54 +00:00
.apexcharts-reset-icon svg,
2026-08-31 14:25:22 +03:00
.apexcharts-selection-icon svg,
2026-07-03 13:46:54 +00:00
.apexcharts-zoom-icon svg,
.apexcharts-zoomin-icon svg,
.apexcharts-zoomout-icon svg {
2026-08-31 14:25:22 +03:00
width: 18px;
height: 18px;
fill: none;
stroke: currentColor;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round
}
.apexcharts-theme-dark .apexcharts-menu-icon,
.apexcharts-theme-dark .apexcharts-measure-icon,
.apexcharts-theme-dark .apexcharts-pan-icon,
.apexcharts-theme-dark .apexcharts-reset-icon,
.apexcharts-theme-dark .apexcharts-selection-icon,
.apexcharts-theme-dark .apexcharts-toolbar-custom-icon,
.apexcharts-theme-dark .apexcharts-zoom-icon,
.apexcharts-theme-dark .apexcharts-zoomin-icon,
.apexcharts-theme-dark .apexcharts-zoomout-icon {
color: #d4d6dc
}
.apexcharts-canvas .apexcharts-measure-icon.apexcharts-selected,
.apexcharts-canvas .apexcharts-pan-icon.apexcharts-selected,
.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected,
.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected,
.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected {
background: rgba(0, 143, 251, 0.12);
color: #008ffb
}
.apexcharts-theme-light .apexcharts-menu-icon:hover,
.apexcharts-theme-light .apexcharts-measure-icon:not(.apexcharts-selected):hover,
.apexcharts-theme-light .apexcharts-pan-icon:not(.apexcharts-selected):hover,
.apexcharts-theme-light .apexcharts-reset-icon:hover,
.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover,
.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover,
.apexcharts-theme-light .apexcharts-zoomin-icon:hover,
.apexcharts-theme-light .apexcharts-zoomout-icon:hover {
background: rgba(15, 23, 42, 0.06);
color: #1f2937
}
.apexcharts-theme-dark .apexcharts-menu-icon:hover,
.apexcharts-theme-dark .apexcharts-measure-icon:not(.apexcharts-selected):hover,
.apexcharts-theme-dark .apexcharts-pan-icon:not(.apexcharts-selected):hover,
.apexcharts-theme-dark .apexcharts-reset-icon:hover,
.apexcharts-theme-dark .apexcharts-selection-icon:not(.apexcharts-selected):hover,
.apexcharts-theme-dark .apexcharts-zoom-icon:not(.apexcharts-selected):hover,
.apexcharts-theme-dark .apexcharts-zoomin-icon:hover,
.apexcharts-theme-dark .apexcharts-zoomout-icon:hover {
background: rgba(255, 255, 255, 0.08);
color: #fff
2026-07-03 13:46:54 +00:00
}
.apexcharts-menu-icon,
.apexcharts-selection-icon {
position: relative
}
.apexcharts-toolbar {
position: absolute;
z-index: 11;
2026-08-31 14:25:22 +03:00
display: inline-flex;
align-items: center;
gap: 1px;
padding: 3px;
border-radius: 8px;
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
}
.apexcharts-theme-dark .apexcharts-toolbar {
background: rgba(28, 28, 31, 0.82);
2026-07-03 13:46:54 +00:00
}
.apexcharts-menu {
2026-08-31 14:25:22 +03:00
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
2026-07-03 13:46:54 +00:00
position: absolute;
2026-08-31 14:25:22 +03:00
top: calc(100% + 4px);
border: 1px solid rgba(15, 23, 42, 0.08);
border-radius: 8px;
padding: 4px;
right: 0;
2026-07-03 13:46:54 +00:00
opacity: 0;
2026-08-31 14:25:22 +03:00
min-width: 120px;
transition: opacity .15s ease, transform .15s ease;
transform: translateY(-2px);
pointer-events: none;
box-shadow: 0 4px 16px -4px rgba(15, 23, 42, 0.12), 0 2px 4px -1px rgba(15, 23, 42, 0.06)
2026-07-03 13:46:54 +00:00
}
.apexcharts-menu.apexcharts-menu-open {
opacity: 1;
2026-08-31 14:25:22 +03:00
transform: translateY(0);
pointer-events: all
2026-07-03 13:46:54 +00:00
}
.apexcharts-menu-item {
2026-08-31 14:25:22 +03:00
padding: 6px 9px;
2026-07-03 13:46:54 +00:00
font-size: 12px;
2026-08-31 14:25:22 +03:00
border-radius: 5px;
2026-07-03 13:46:54 +00:00
cursor: pointer
}
.apexcharts-theme-light .apexcharts-menu-item:hover {
2026-08-31 14:25:22 +03:00
background: rgba(15, 23, 42, 0.06)
2026-07-03 13:46:54 +00:00
}
.apexcharts-theme-dark .apexcharts-menu {
2026-08-31 14:25:22 +03:00
background: rgba(28, 28, 31, 0.92);
border-color: rgba(255, 255, 255, 0.08);
color: #f3f4f6;
box-shadow: 0 4px 16px -4px rgba(0, 0, 0, 0.5), 0 2px 4px -1px rgba(0, 0, 0, 0.4)
}
.apexcharts-theme-dark .apexcharts-menu-item:hover {
background: rgba(255, 255, 255, 0.08)
2026-07-03 13:46:54 +00:00
}
@media screen and (min-width:768px) {
.apexcharts-canvas:hover .apexcharts-toolbar {
opacity: 1
}
}
2026-08-31 14:25:22 +03:00
/* Toolbar keyboard accessibility: show toolbar when any button inside it is focused */
.apexcharts-toolbar:focus-within {
opacity: 1
}
/* Focus indicator for toolbar icon buttons */
.apexcharts-menu-icon:focus-visible,
.apexcharts-measure-icon:focus-visible,
.apexcharts-pan-icon:focus-visible,
.apexcharts-reset-icon:focus-visible,
.apexcharts-selection-icon:focus-visible,
.apexcharts-toolbar-custom-icon:focus-visible,
.apexcharts-zoom-icon:focus-visible,
.apexcharts-zoomin-icon:focus-visible,
.apexcharts-zoomout-icon:focus-visible {
outline: 2px solid var(--apexcharts-focus-color, #008FFB);
outline-offset: 1px;
border-radius: 5px
}
/* Focus indicator for hamburger menu items */
.apexcharts-menu-item:focus-visible {
outline: 2px solid var(--apexcharts-focus-color, #008FFB);
outline-offset: -2px;
background: #eee
}
2026-07-03 13:46:54 +00:00
.apexcharts-canvas .apexcharts-element-hidden,
.apexcharts-datalabel.apexcharts-element-hidden,
.apexcharts-hide .apexcharts-series-points {
opacity: 0;
}
.apexcharts-hidden-element-shown {
opacity: 1;
transition: 0.25s ease all;
}
.apexcharts-datalabel,
.apexcharts-datalabel-label,
.apexcharts-datalabel-value,
.apexcharts-datalabels,
2026-08-31 14:25:22 +03:00
.apexcharts-pie-label,
.apexcharts-pie-name-label,
.apexcharts-pie-name-label-group,
.apexcharts-pie-label-connector,
.apexcharts-unit-outer-label,
.apexcharts-unit-outer-label-group,
.apexcharts-unit-label-connector {
2026-07-03 13:46:54 +00:00
cursor: default;
pointer-events: none
}
2026-08-31 14:25:22 +03:00
.apexcharts-pie-label-connector,
.apexcharts-unit-label-connector {
fill: none
}
.apexcharts-pie-label-delay,
.apexcharts-unit-label-delay {
2026-07-03 13:46:54 +00:00
opacity: 0;
animation-name: opaque;
animation-duration: .3s;
animation-fill-mode: forwards;
animation-timing-function: ease
}
2026-08-31 14:25:22 +03:00
/* Slower than the pie's, on purpose: these come in while the dots are still
easing into place, so a longer fade reads as arriving WITH the crowd. */
.apexcharts-unit-label-delay {
animation-duration: .5s
}
2026-07-03 13:46:54 +00:00
.apexcharts-radialbar-label {
cursor: pointer;
}
.apexcharts-annotation-rect,
.apexcharts-area-series .apexcharts-area,
.apexcharts-gridline,
.apexcharts-line,
.apexcharts-point-annotation-label,
.apexcharts-radar-series path:not(.apexcharts-marker),
.apexcharts-radar-series polygon,
.apexcharts-toolbar svg,
.apexcharts-tooltip .apexcharts-marker,
.apexcharts-xaxis-annotation-label,
.apexcharts-yaxis-annotation-label,
.apexcharts-zoom-rect,
.no-pointer-events {
pointer-events: none
}
.apexcharts-tooltip-active .apexcharts-marker {
transition: .15s ease all
}
.apexcharts-radar-series .apexcharts-yaxis {
pointer-events: none;
}
.resize-triggers {
animation: 1ms resizeanim;
visibility: hidden;
opacity: 0;
height: 100%;
width: 100%;
overflow: hidden
}
.contract-trigger:before,
.resize-triggers,
.resize-triggers>div {
content: " ";
display: block;
position: absolute;
top: 0;
left: 0
}
.resize-triggers>div {
height: 100%;
width: 100%;
background: #eee;
overflow: auto
}
.contract-trigger:before {
overflow: hidden;
width: 200%;
height: 200%
}
.apexcharts-bar-goals-markers {
pointer-events: none
}
.apexcharts-bar-shadows {
pointer-events: none
}
.apexcharts-rangebar-goals-markers {
pointer-events: none
}
2026-08-31 14:25:22 +03:00
.apexcharts-drilldown-target {
cursor: pointer
}
.apexcharts-breadcrumb {
position: absolute;
z-index: 11;
display: inline-flex;
align-items: center;
gap: 2px;
font-size: 12px;
font-family: inherit;
padding: 2px 4px
}
.apexcharts-breadcrumb-item {
background: transparent;
border: none;
padding: 2px 6px;
border-radius: 3px;
font: inherit;
color: inherit;
cursor: pointer;
line-height: 1.2
}
.apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {
background: rgba(0, 0, 0, 0.08)
}
.apexcharts-breadcrumb-arrow {
margin-right: 4px;
font-weight: 600;
user-select: none
}
.apexcharts-breadcrumb-current {
cursor: default;
font-weight: 600;
opacity: 0.85
}
.apexcharts-breadcrumb-separator {
opacity: 0.5;
user-select: none
}
.apexcharts-theme-dark .apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {
background: rgba(255, 255, 255, 0.12)
}
.apexcharts-drilldown-loading {
position: absolute;
inset: 0;
z-index: 12;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
font-size: 13px;
font-family: inherit;
color: inherit;
background: rgba(255, 255, 255, 0.62);
/* The chart underneath stays interactive-looking but must not take clicks
while a level is resolving, or a second drill can start mid-fetch. */
cursor: progress
}
.apexcharts-drilldown-loading-spinner {
width: 26px;
height: 26px;
border-radius: 50%;
border: 2.5px solid rgba(0, 0, 0, 0.16);
border-top-color: rgba(0, 0, 0, 0.55);
animation: apexcharts-drilldown-spin 0.7s linear infinite
}
.apexcharts-drilldown-loading-text {
opacity: 0.8
}
.apexcharts-theme-dark .apexcharts-drilldown-loading {
background: rgba(30, 30, 30, 0.62)
}
.apexcharts-theme-dark .apexcharts-drilldown-loading-spinner {
border-color: rgba(255, 255, 255, 0.22);
border-top-color: rgba(255, 255, 255, 0.7)
}
@keyframes apexcharts-drilldown-spin {
to {
transform: rotate(360deg)
}
}
@media (prefers-reduced-motion: reduce) {
.apexcharts-drilldown-loading-spinner {
animation: apexcharts-drilldown-pulse 1.4s ease-in-out infinite
}
@keyframes apexcharts-drilldown-pulse {
0%, 100% {
opacity: 0.35
}
50% {
opacity: 1
}
}
}
2026-07-03 13:46:54 +00:00
.apexcharts-disable-transitions * {
transition: none !important;
2026-08-31 14:25:22 +03:00
}`,Ur=globalThis.console;function On(u){Ur.error(u)}function Bn(u){Ur.warn(u)}var Yn=" APEX - ",Pc=new Date(" 2027 - 07 - 31 T00 : 00 : 00 Z "),zn=" __apex_license_v1__ ";function ke(){let u=globalThis,t=u[zn];return t||(t={key:null,listeners:new Set,result:null},u[zn]=t),t}var de=class{static get licenseKey(){return ke().key}static set licenseKey(u){ke().key=u}static get listeners(){return ke().listeners}static get validationResult(){return ke().result}static set validationResult(u){ke().result=u}static getKey(){return this.licenseKey}static getLicenseStatus(){return this.licenseKey?(this.validationResult=this.validateKey(this.licenseKey),this.validationResult):{expired:!1,signatureVerified:!1,valid:!1}}static isKeyValid(u){return!!u&&this.validateKey(u).valid}static isLicenseValid(){return this.getLicenseStatus().valid}static onChange(u){return this.listeners.add(u),()=>{this.listeners.delete(u)}}static setLicense(u){var t,e;if(!u)return this.licenseKey=null,void this.publish({expired:!1,signatureVerified:!1,valid:!1});let s=this.validateKey(u);s.valid||u===this.licenseKey||!((e=this.validationResult)!=null&&e.valid)?(this.licenseKey=u,this.publish(s),s.valid||On(`[Apex] ${s.message}`)):Bn(`[Apex] Ignoring license key: ${(t=s.message)!=null?t:" it is not valid "} A valid license is already active on this page.`)}static validateKey(u){let t=this.parseKey(u),e=this.validateStructure(u,t);if(!e.valid||!t?.signature)return e;let s=this.verdicts.get(u);return s===!1?{data:t.data,expired:!1,message:" Invalid license key . The license signature does not verify . ",signatureVerified:!0,valid:!1}:(s===void 0&&this.verifySignature(u,t,e),j(G({},e),{signatureVerified:s===!0}))}static _resetSignatureState(){this.verdicts.clear(),this.verifying.clear(),this.warnedUnverifiable=!1,this.epoch++}static base64ToBytes(u){let t=u.replace(/-/g," + ").replace(/_/g," / "),e=t.padEnd(4*Math.ceil(t.length/4)," = "),s=globalThis.atob;if(typeof s!=" function ")throw new Error(" no base64 decoder available ");let i=s(e),a=new Uint8Array(i.length);for(let n=0;n<i.length;n++)a[n]=i.charCodeAt(n);return a}static canonicalPayload(u){let t=u.domains&&u.domains.length>0?u.domains.join(" , "):"";return`v1|${u.issueDate}|${u.expiryDate}|${u.plan}|${t}`}static notify(u){for(let t of this.listeners)try{t(u)}catch{}}static parseKey(u){if(typeof u!=" string "||!u.startsWith(Yn))return null;let t=u.slice(5);if(!t)return null;try{let e=new TextDecoder().decode(this.base64ToBytes(t)),s=JSON.parse(e);return s.issueDate&&s.expiryDate&&s.plan?{data:{domains:Array.isArray(s.domains)?s.domains:void 0,expiryDate:s.expiryDate,issueDate:s.issueDate,plan:s.plan,valid:!0},signature:typeof s.sig==" string "&&s.sig?s.sig:null}:null}catch{return null}}static publish(u){this.validationResult=u,this.notify(u)}static validateStructure(u,t){let e=a=>({expired:!1,message:a,signatureVerified:!1,valid:!1});if(typeof u!=" string "||!u.startsWith(Yn))return e('Invalid license key format. License key must start with " APEX - ".');if(!t)return e(" Invalid license key . Unable to decode license data . ");let{data:s,signature:i}=t;if(!i&&new Date>=Pc)return e(" This license key is in the old unsigned format , which is no longer accepted . Please request a replacement key . ");if(new Date(s.expiryDate)<new Date)return{data:s,expired:!0,message:`License expired on ${s.expiryDate}. Please renew your license.`,signatureVerified:!1,valid:!1};if(s.domains&&s.domains.length>0){let a=typeof location>" u "?"":location.hostname;if(!s.domains.some((n=>a===n||a.endsWith(`.${n}`))))return{data:s,expired:!1,message:`License is not valid for this domain (${a}). Allowed domains: ${s.domains.join(" , ")}.`,signatureVerified:!1,valid:!1}}return{data:s,expired:!1,signatureVerified:!1,valid:!0}}static verifySignature(u,t,e){return _r(this,null,function*(){var s;if(this.verifying.has(u)||this.verdicts.has(u))return;this.verifying.add(u);let i=this.epoch,a=(s=globalThis.crypto)==null?void 0:s.subtle;if(!a||this.publicKeysSpki.length===0)return this.verifying.delete(u),void(this.warnedUnverifiable||(this.warnedUnverifiable=!0,Bn(a?" [ Apex ] No license signing key i
< svg xmlns = "http://www.w3.org/2000/svg" width = "300" height = "200" >
< text
x = "50%"
y = "50%"
dominant - baseline = "middle"
text - anchor = "middle"
font - family = "-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Arial, sans-serif"
font - size = "18"
font - weight = "600"
fill = "rgba(134, 134, 134, 0.1)"
transform = "rotate(-35, 100, 60)"
> $ { u } < /text>
< /svg>
`.trim())}")` } static erase ( u ){ var t ;( t = this . node ( u )) == null || t . remove ()} static paint ( u ){ let t = this . node ( u ); return t || ( t = document . createElement ( "div" ), t . setAttribute ( this . WATERMARK_ATTR , "" ), u . appendChild ( t )), this . applyStyles ( t ), typeof getComputedStyle == "function" && getComputedStyle ( u ). position === "static" && ( u . style . position = "relative" ), t } static reconcile (){ let u = Ht . isLicenseValid (); for ( let t of this . managed ) t . isConnected ? u ? this . erase ( t ) : this . paint ( t ) : this . managed . delete ( t )} static setManaged ( u , t ){ t ? . manage !==! 1 ? this . track ( u ) : this . managed . delete ( u )} static track ( u ){ this . managed . add ( u ), this . subscribed || ( this . subscribed =! 0 , Ht . onChange ((()=>{ this . reconcile ()})))}}; Zt . WATERMARK_ATTR = "data-apexcharts-watermark" , Zt . WATERMARK_TEXT = "APEXCHARTS" , Zt . ATTR = "data-apexcharts-watermark" , Zt . CRITICAL_STYLES = { bottom : "0" , display : "block" , left : "0" , msUserSelect : "none" , opacity : "1" , pointerEvents : "none" , position : "absolute" , right : "0" , top : "0" , userSelect : "none" , visibility : "visible" , webkitUserSelect : "none" , zIndex : "10000" }, Zt . managed = new Set , Zt . subscribed =! 1 ; var Fe = Zt , Rc = . 05 , Fc = . 05 , Ic = 1 / 45 ; function Wn ( u , t , e , s ){ return { value : u , velocity : 0 , target : u , stiffness : t , damping : e }} function Hn ( u , t ){ if ( t <= 0 ) return Gn ( u ); let e = t ; for (; e > 0 ;){ let s = Math . min ( e , Ic ), i =- u . stiffness * ( u . value - u . target ) - u . damping * u . velocity ; u . velocity += i * s , u . value += u . velocity * s , e -= s } return !! Gn ( u ) && ( u . value = u . target , u . velocity = 0 , ! 0 )} function $n ( u , t ){ u . target = t } function Gn ( u ){ var t , e ; let s = ( t = u . restVelocity ) != null ? t : Rc , i = ( e = u . restDisplacement ) != null ? e : Fc ; return Math . abs ( u . velocity ) < s && Math . abs ( u . value - u . target ) < i } var Vn = { crisp : [ 210 , 26 ], gentle : [ 120 , 20 ], snappy : [ 320 , 30 ]}; function Nc ( u ){ var t ; return ( t = Vn [ u ?? "crisp" ]) != null ? t : Vn . crisp } var Ks = "__apexcharts_crossfilters__" ; function Kt ( u ){ if ( ! Number . isFinite ( u )) return u ; let t = Number ( u . toPrecision ( 12 )); return Object . is ( t , - 0 ) ? 0 : t } function Jt ( u ){ return typeof u == "number" && Number . isFinite ( u )} function Xc ( u ){ if ( typeof u == "function" ) return u ; if ( u && typeof u == "object" ){ if ( typeof u . sum == "string" ){ let t = u . sum ; return e => e . reduce ((( s , i )=> s + ( Number ( i [ t ]) || 0 )), 0 )} if ( typeof u . avg == "string" ){ let t = u . avg ; return e => e . length ? e . reduce ((( s , i )=> s + ( Number ( i [ t ]) || 0 )), 0 ) / e . length : 0 } if ( typeof u . min == "string" ){ let t = u . min ; return e => e . length ? Math . min (... e . map (( s => Number ( s [ t ]) || 0 ))) : 0 } if ( typeof u . max == "string" ){ let t = u . max ; return e => e . length ? Math . max (... e . map (( s => Number ( s [ t ]) || 0 ))) : 0 }} return t => t . length } function Js ( u , t ){ return typeof t == "function" ? u . slice (). sort ( t ) : t === "asc" ? u . slice (). sort ((( e , s )=> e > s ? 1 : e < s ?- 1 : 0 )) : t === "desc" ? u . slice (). sort ((( e , s )=> e < s ? 1 : e > s ?- 1 : 0 )) : u } function Oc ( u , t ){ if ( ! Jt ( u )) return - 1 ; let e = t . length - 1 ; if ( u < t [ 0 ] || u > t [ e ]) return - 1 ; if ( u === t [ e ]) return e - 1 ; for ( let s = 0 ; s < e ; s ++ ) if ( u >= t [ s ] && u < t [ s + 1 ]) return s ; return - 1 } function Un ( u ){ let t = []; for ( let e = 0 ; e < u . length - 1 ; e ++ ) t . push ( Kt (( u [ e ] + u [ e + 1 ]) / 2 )); return t } var We = class u { constructor ( t , e ){ this . dims = new Map , this . listeners = new Map , this . id = t , this . records = Array . isArray ( e ) ? e : []} static store (){ let t = globalThis ; return t [ Ks ] || ( t [ Ks ] = new Map ), t [ Ks ]} static getOrCreate ( t ){ if ( ! t || typeof t . id != "string" ) throw new Error ( "Crossfilter.getOrCreate requires an { id } string." ); let e = u . store (), s = e . get ( t . id ); if ( s ) return t . records && s . setRecords ( t . records ), s ; let i = new u ( t . id , t . records ); return e . set ( t . id , i ), i } static get ( t ){ return u . store (). get ( t ) || null } setRecords ( t ){ return this . records = Array . isArray ( t ) ? t : [], this . dims . forEach (( e => this . recomputeDomain ( e ))), this . emit ( "records" , this . state ()), this . emit ( "change" , this . state ()), this } registerDimension ( t , e ){ if ( ! e || typeof e . dimension != "function" ) throw new Error ( `crossfilter.registerDimension(" ${ t } ") needs a dimension function.` ); let s = e . type || ( e . bins ? "range" : "category" ), i = { accessor : e . dimension , reducer : Xc ( e . reduce ), type : s , bins : e . bins , order : e . order , filter : null , labels : [], edges : null , xLabels : [], yLabels : []}; return this . dims . set ( t , i ), this . recomputeDomain ( i ), e . filter != null && this . setFilterOn ( i , e . filter ), this } hasDimension ( t ){ return this . dims . has ( t )} removeDimension ( t ){ let e = this . dims . get ( t ), s =!! e && this . hasFilter ( e ); return this . dims . delete ( t ), s && this . emit ( "change" , this . state ()), this } recomputeDomain ( t ){ if ( t . type === "matrix" ){ l
`);if(!a)return;let n=document.createElementNS(et,"style");n.textContent=a,t.insertBefore(n,t.firstChild)}).catch(()=>{}):Promise.resolve()}inlineFontFaceUrls(t){let e=[],s=/url\(\s*(['"]?)([^'")]+)\1\s*\)/gi,i;for(;(i=s.exec(t))!==null;)i[2].startsWith("data:")||e.push(i[2]);return e.length?Promise.all(e.map(a=>this.fetchAsDataUri(a).then(n=>({url:a,dataUri:n})).catch(()=>({url:a,dataUri:null})))).then(a=>{let n=t,r=0;return a.forEach(({url:o,dataUri:l})=>{l&&(n=n.split(o).join(l),r++)}),r?n:null}):Promise.resolve(t.includes("data:")?t:null)}fetchAsDataUri(t){return typeof fetch!="function"||typeof btoa!="function"?Promise.reject(new Error("fetch unavailable")):fetch(t).then(e=>{if(!e.ok)throw new Error(` HTTP $ { e . status } for $ { t } `);let s=e.headers.get("content-type")||"application/octet-stream";return e.arrayBuffer().then(i=>{let a=new Uint8Array(i),n="",r=32768;for(let o=0;o<a.length;o+=r)n+=String.fromCharCode.apply(null,a.subarray(o,o+r));return` data : $ { s }; base64 , $ { btoa ( n )} `})})}getSvgString(t){return new Promise(e=>{let s=this.w,i=t||s.config.chart.toolbar.export.scale||s.config.chart.toolbar.export.width/s.globals.svgWidth;i||(i=1);let a=s.globals.svgWidth*i,n=s.globals.svgHeight*i,r=s.dom.elWrap.cloneNode(!0);r.style.width=a+"px",r.style.height=n+"px",this.inlineCanvasLayers(r),this.applyExportStyles(r);let o=new XMLSerializer().serializeToString(r),l=`
< svg xmlns = "http://www.w3.org/2000/svg"
version = "1.1"
xmlns : xlink = "http://www.w3.org/1999/xlink"
class = "apexcharts-svg"
xmlns : data = "ApexChartsNS"
transform = "translate(0, 0)"
width = "${s.globals.svgWidth}px" height = "${s.globals.svgHeight}px" >
< foreignObject width = "100%" height = "100%" >
< div xmlns = "http://www.w3.org/1999/xhtml" style = "width:${a}px; height:${n}px;" >
$ { o }
< /div>
< /foreignObject>
< /svg>
`,c=this.svgStringToNode(l);i!==1&&this.scaleSvgNode(c,i),Promise.all([this.convertImagesToBase64(c),this.embedFonts(c)]).then(()=>{l=new XMLSerializer().serializeToString(c),e(l.replace(/ /g," "))})})}convertImagesToBase64(t){let e="http://www.w3.org/1999/xlink",s=t.getElementsByTagName("image"),i=Array.from(s).map(a=>{let n=a.getAttributeNS(e,"href"),r=a.getAttribute("href"),o=n||r;if(!o||o.startsWith("data:"))return Promise.resolve();let l=c=>{n&&a.setAttributeNS(e,"href",c),(r||!n)&&a.setAttribute("href",c)};return this.fetchAsDataUri(o).then(l).catch(()=>this.getBase64FromUrl(o).then(l).catch(c=>{console.error("Error converting image to base64:",c)}))});return Promise.all(i)}getBase64FromUrl(t){return H.isSSR()?Promise.resolve(t):new Promise((e,s)=>{let i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{let a=document.createElement("canvas");a.width=i.width,a.height=i.height;let n=a.getContext("2d");n&&n.drawImage(i,0,0),e(a.toDataURL())},i.onerror=s,i.src=t})}svgUrl(){return new Promise(t=>{this.getSvgString().then(e=>{let s=new Blob([e],{type:"image/svg+xml;charset=utf-8"});t(URL.createObjectURL(s))})})}dataURI(t){return H.isSSR()?Promise.resolve({imgURI:""}):new Promise(e=>{let s=this.w,i=t?t.scale||t.width/s.globals.svgWidth:1,a=document.createElement("canvas");a.width=s.globals.svgWidth*i,a.height=parseInt(s.dom.elWrap.style.height,10)*i;let n=this.resolveExportBackground(),r=a.getContext("2d");r&&(r.fillStyle=n,r.fillRect(0,0,a.width,a.height),this.getSvgString(i).then(o=>{let l="data:image/svg+xml,"+encodeURIComponent(o),c=new Image;c.crossOrigin="anonymous",c.onload=()=>{r.drawImage(c,0,0);let h=a;if(h.msToBlob){let d=h.msToBlob();e({blob:d})}else{let d=a.toDataURL("image/png");e({imgURI:d})}},c.src=l}))})}exportToSVG(){this.svgUrl().then(t=>{this.triggerDownload(t,this.w.config.chart.toolbar.export.svg.filename,".svg")})}exportToPng(){let t=this.w.config.chart.toolbar.export.scale,e=this.w.config.chart.toolbar.export.width,s=t?{scale:t}:e?{width:e}:void 0;this.dataURI(s).then(({imgURI:i,blob:a})=>{a?navigator.msSaveOrOpenBlob(a,this.w.globals.chartID+".png"):this.triggerDownload(i,this.w.config.chart.toolbar.export.png.filename,".png")})}exportToCSV({series:t,fileName:e,columnDelimiter:s=",",lineDelimiter:i=`
`}){let a=this.w;t||(t=a.config.series);let n=[],r=[],o="",l="\uFEFF",c=a.seriesData.series.map((y,v)=>a.globals.collapsedSeriesIndices.indexOf(v)===-1?y:[]),h=y=>{if(y==null||T.isNumber(y))return y;let v=String(y);return/^[=+\-@\t\r]/.test(v)?` '${v}`:v},d=y=>typeof a.config.chart.toolbar.export.csv.categoryFormatter=="function"?a.config.chart.toolbar.export.csv.categoryFormatter(y):a.config.xaxis.type==="datetime"&&String(y).length>=10?new Date(y).toDateString():T.isNumber(y)?y:h(y.split(s).join("")),f=y=>typeof a.config.chart.toolbar.export.csv.valueFormatter=="function"?a.config.chart.toolbar.export.csv.valueFormatter(y):h(y),g=Math.max(...t.map(y=>y.data?y.data.length:0)),p=new Ye(this.w),m=new Ct(this.w,{theme:this.ctx.theme,timeScale:this.ctx.timeScale}),b=y=>{let v="";if(!a.globals.axisCharts)v=a.config.labels[y];else{if(a.config.xaxis.type==="category"||a.config.xaxis.convertedCatToNumeric)if(a.globals.isBarHorizontal){let A=a.formatters.yLabelFormatters[0],C=new ct(this.ctx.w).getActiveConfigSeriesIndex();v=A(a.labelData.labels[y],{seriesIndex:C,dataPointIndex:y,w:a})}else v=m.getLabel(a.labelData.labels,a.labelData.timescaleLabels,0,y).text;a.config.xaxis.type==="datetime"&&(a.config.xaxis.categories.length?v=a.config.xaxis.categories[y]:a.config.labels.length&&(v=a.config.labels[y]))}return v===null?"nullvalue":(Array.isArray(v)&&(v=v.join(" ")),T.isNumber(v)?v:v.split(s).join(""))},x=()=>[...Array(g)].map(()=>""),_=(y,v)=>{var A,S,C,M,k,L;if(n.length&&v===0&&r.push(n.join(s)),y.data){let E=y.data.length?y.data:x();for(let D=0;D<E.length;D++){n=[];let P=b(D);if(P!=="nullvalue"){if(P||(p.isFormatXY()?P=t[v].data[D].x:p.isFormat2DArray()&&(P=t[v].data[D]?t[v].data[D][0]:"")),v===0){n.push(d(P));for(let F=0;F<a.seriesData.series.length;F++){let R=p.isFormatXY()?(A=t[F].data[D])==null?void 0:A.y:c[F][D];n.push(f(R))}}(a.config.chart.type==="candlestick"||y.type&&y.type==="candlestick")&&(n.pop(),n.push(a.candleData.seriesCandleO[v][D]),n.push(a.candleData.seriesCandleH[v][D]),n.push(a.candleData.seriesCandleL[v][D]),n.push(a.candleData.seriesCandleC[v][D])),(a.config.chart.type==="boxPlot"||y.type&&y.type==="boxPlot")&&(n.pop(),n.push(a.candleData.seriesCandleO[v][D]),n.push(a.candleData.seriesCandleH[v][D]),n.push(a.candleData.seriesCandleM[v][D]),n.push(a.candleData.seriesCandleL[v][D]),n.push(a.candleData.seriesCandleC[v][D])),a.config.chart.type==="rangeBar"&&(n.pop(),n.push(a.rangeData.seriesRangeStart[v][D]),n.push(a.rangeData.seriesRangeEnd[v][D])),(a.config.chart.type==="violin"||y.type&&y.type==="violin")&&(n.pop(),n.push((S=a.violinData.seriesViolinMin[v])==null?void 0:S[D]),n.push((C=a.violinData.seriesViolinMax[v])==null?void 0:C[D]),n.push((L=(k=(M=a.violinData.seriesViolinPoints[v])==null?void 0:M[D])==null?void 0:k.length)!=null?L:0)),n.length&&r.push(n.join(s))}}}},w=()=>{let y=new Set,v={};t.forEach((A,S)=>{A?.data.forEach(C=>{let M,k;if(p.isFormatXY())M=C.x,k=C.y;else if(p.isFormat2DArray())M=C[0],k=C[1];else return;v[M]||(v[M]=Array(t.length).fill("")),v[M][S]=f(k),y.add(M)})}),n.length&&r.push(n.join(s)),Array.from(y).sort().forEach(A=>{let S=v[A];r.push([d(A),...S].join(s))})};n.push(a.config.chart.toolbar.export.csv.headerCategory),a.config.chart.type==="boxPlot"?(n.push("minimum"),n.push("q1"),n.push("median"),n.push("q3"),n.push("maximum")):a.config.chart.type==="candlestick"?(n.push("open"),n.push("high"),n.push("low"),n.push("close")):a.config.chart.type==="rangeBar"?(n.push("minimum"),n.push("maximum")):a.config.chart.type==="violin"?(n.push("minimum"),n.push("maximum"),n.push("observations")):t.map((y,v)=>{let A=(y.name?y.name:`series-${v}`)+"";a.globals.axisCharts&&n.push(A.split(s).join("")?A.split(s).join(""):`series-${v}`)}),a.globals.axisCharts||(n.push(a.config.chart.toolbar.export.csv.headerValue),r.push(n.join(s))),!a.globals.allSeriesHasEqualX&&a.globals.axisCharts&&!a.config.xaxis.categories.length&&!a.config.labels.length?w():t.map((y,v)=>{a.globals.axisCharts?_(y,v):(n=[],n.push(d(a.labelData.labels[v])),n.push(f(c[v])),r.push(n.join(s)))}),o+=r.join(i),this.triggerDownload
transform: scaleY(-1) translateY(-100%);
transform-origin: top;
transform-box: fill-box;
}
.apexcharts-flip-x {
transform: scaleX(-1);
transform-origin: center;
transform-box: fill-box;
}
.apexcharts-legend {
display: flex;
overflow: auto;
padding: 0 10px;
}
.apexcharts-legend.apexcharts-legend-group-horizontal {
flex-direction: column;
}
.apexcharts-legend-group {
display: flex;
}
.apexcharts-legend-group-vertical {
flex-direction: column-reverse;
}
.apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {
flex-wrap: wrap
}
.apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {
flex-direction: column;
bottom: 0;
}
.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {
justify-content: flex-start;
align-items: flex-start;
}
.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {
justify-content: center;
align-items: center;
}
.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {
justify-content: flex-end;
align-items: flex-end;
}
.apexcharts-legend-series {
cursor: pointer;
line-height: normal;
display: flex;
align-items: center;
}
.apexcharts-legend-text {
position: relative;
font-size: 14px;
}
.apexcharts-legend-text *, .apexcharts-legend-marker * {
pointer-events: none;
}
.apexcharts-legend-marker {
position: relative;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
margin-right: 1px;
}
.apexcharts-legend-series.apexcharts-no-click {
cursor: auto;
}
.apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {
display: none !important;
}
.apexcharts-inactive-legend {
opacity: 0.45;
} `,Uc=class{constructor(t){this.w=t.w,this.lgCtx=t}getLegendStyles(){if(H.isSSR())return null;let t=document.createElement("style");t.setAttribute("type","text/css");let e=this.w.config.chart.nonce;e&&t.setAttribute("nonce",e);let s=document.createTextNode(Vc);return t.appendChild(s),t}getLegendDimensions(){let e=this.w.dom.baseEl.querySelector(".apexcharts-legend");if(!e)return{clwh:0,clww:0};let{width:s,height:i}=e.getBoundingClientRect();return{clwh:i,clww:s}}appendToForeignObject(){var t;let e=this.getLegendStyles();this.w.config.chart.injectStyleSheet!==!1&&e&&((t=this.w.dom.elLegendForeign)==null||t.appendChild(e))}toggleDataSeries(t,e){var s,i,a;let n=this.w;if(n.globals.axisCharts||n.config.chart.type==="radialBar"){n.globals.resized=!0;let r=null,o=null;if(n.globals.risingSeries=[],n.globals.axisCharts){if(r=(s=Array.prototype.find.call(n.dom.baseEl.querySelectorAll(".apexcharts-series"),l=>l.getAttribute("data:realIndex")===String(t)))!=null?s:null,!r)return;o=parseInt((i=r.getAttribute("data:realIndex"))!=null?i:"",10)}else{if(r=n.dom.baseEl.querySelector(`.apexcharts-series[rel=' $ { t + 1 } ' ] `),!r)return;o=parseInt((a=r.getAttribute("rel"))!=null?a:"",10)-1}if(e?[{cs:n.globals.collapsedSeries,csi:n.globals.collapsedSeriesIndices},{cs:n.globals.ancillaryCollapsedSeries,csi:n.globals.ancillaryCollapsedSeriesIndices}].forEach(c=>{let h=c.cs,d=c.csi;this.riseCollapsedSeries(h,d,o)}):this.hideSeries({seriesEl:r,realIndex:o}),n.config.chart.accessibility.enabled){let l=n.dom.baseEl.querySelector(` . apexcharts - legend - series [ rel = "${t+1}" ] `);if(l){let c=n.globals.collapsedSeriesIndices.includes(o)||n.globals.ancillaryCollapsedSeriesIndices.includes(o);l.setAttribute("aria-pressed",c?"true":"false");let h=l.querySelector(".apexcharts-legend-text"),d=h?h.textContent:n.seriesData.seriesNames[t],f=c?"hidden":"visible";l.setAttribute("aria-label",` $ { d }, $ { f }. Press Enter or Space to toggle . `)}}}else{if(n.globals.resized=!0,n.globals.risingSeries=[],e)this.riseCollapsedSeries(n.globals.collapsedSeries,n.globals.collapsedSeriesIndices,t);else{let r=this.getSeriesAfterCollapsing({realIndex:t});this.lgCtx.updateSeries(r,n.config.chart.animations.dynamicAnimation.enabled)}if(n.config.chart.accessibility.enabled){let r=n.dom.baseEl.querySelector(` . apexcharts - legend - series [ rel = "${t+1}" ] `);if(r){let o=n.globals.collapsedSeriesIndices.includes(t);r.setAttribute("aria-pressed",o?"true":"false");let l=r.querySelector(".apexcharts-legend-text"),c=l?l.textContent:n.seriesData.seriesNames[t],h=o?"hidden":"visible";r.setAttribute("aria-label",` $ { c }, $ { h }. Press Enter or Space to toggle . `)}}}}_nonAxisSliceContainer(t){let e=this.w.config.chart.type;return(e==="pie"||e==="donut"||e==="polarArea"||e==="sunburst")&&t.length===1&&t[0]&&typeof t[0]=="object"&&Array.isArray(t[0].data)?t[0].data:t}_readSliceValue(t){return this.w.config.chart.type==="unit"&&t&&Array.isArray(t.data)?t.data:t&&typeof t=="object"?t.y:t}_writeSliceValue(t,e,s){let i=t[e];if(this.w.config.chart.type==="unit"&&i&&Array.isArray(i.data)){i.data=Array.isArray(s)?s:[];return}i&&typeof i=="object"?i.y=s:t[e]=s}getSeriesAfterCollapsing({realIndex:t}){var e,s;let i=this.w,a=i.globals,n=T.clone(i.config.series);if(a.axisCharts){let o=i.config.yaxis[a.seriesYAxisReverseMap[t]],l={index:t,data:n[t].data.slice(),type:n[t].type||i.config.chart.type,name:(a.seriesNames||[])[t]};if(o&&o.show&&o.showAlways)a.ancillaryCollapsedSeriesIndices.indexOf(t)<0&&(a.ancillaryCollapsedSeries.push(l),a.ancillaryCollapsedSeriesIndices.push(t));else if(a.collapsedSeriesIndices.indexOf(t)<0){a.collapsedSeries.push(l),a.collapsedSeriesIndices.push(t);let c=a.risingSeries.indexOf(t);a.risingSeries.splice(c,1)}}else if(a.collapsedSeriesIndices.indexOf(t)<0){let o=this._nonAxisSliceContainer(n);a.collapsedSeries.push({index:t,data:this._readSliceValue(o[t]),type:(s=(e=i.config.series[t])==null?void 0:e.type)!=null?s:"line",name:(a.seriesNames||[])[t]}),a.collapsedSeriesIndices.push(t)}let r=a.axisCharts?i.config.series.length:this._nonAxisSliceContainer(n).length;return a.allSeriesCollapsed=a.collapsedSer
<path d="M5 9 2 12l3 3"/>
<path d="M9 5l3-3 3 3"/>
<path d="M15 19l-3 3-3-3"/>
<path d="M19 9l3 3-3 3"/>
<path d="M2 12h20"/>
<path d="M12 2v20"/>
</svg>
` , Jc = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="11" cy="11" r="7"/>
<path d="m21 21-4.3-4.3M8 11h6M11 8v6"/>
</svg>
` , Qc = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/>
<path d="M3 3v5h5"/>
</svg>
` , th = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 5v14M5 12h14"/>
</svg>
` , eh = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5 12h14"/>
</svg>
` , sh = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5 3a2 2 0 0 0-2 2"/>
<path d="M19 3a2 2 0 0 1 2 2"/>
<path d="M21 19a2 2 0 0 1-2 2"/>
<path d="M5 21a2 2 0 0 1-2-2"/>
<path d="M9 3h1M14 3h1M9 21h1M14 21h1M3 9v1M3 14v1M21 9v1M21 14v1"/>
</svg>
` , ih = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.4 2.4 0 0 1 0-3.4l2.6-2.6a2.4 2.4 0 0 1 3.4 0Z"/>
<path d="m14.5 12.5 2-2"/>
<path d="m11.5 9.5 2-2"/>
<path d="m8.5 6.5 2-2"/>
<path d="m17.5 15.5 2-2"/>
</svg>
` , ah = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 6h16M4 12h16M4 18h16"/>
</svg>
` , _s = class { constructor ( t , e ){ this . w = t , this . ctx = e , this . ev = this . w . config . chart . events , this . selectedClass = "apexcharts-selected" , this . localeValues = this . w . globals . locale . toolbar , this . minX = t . globals . minX , this . maxX = t . globals . maxX , this . elZoom = null , this . elZoomIn = null , this . elZoomOut = null , this . elPan = null , this . elSelection = null , this . elMeasure = null , this . elZoomReset = null , this . elMenuIcon = null , this . elMenu = null , this . elMenuItems = [], this . t = null } createToolbar (){ var t , e ; let s = this . w , i = ()=> O . createElementNS ( "http://www.w3.org/1999/xhtml" , "div" ), a = ()=>{ let c = O . createElementNS ( "http://www.w3.org/1999/xhtml" , "button" ); return c . setAttribute ( "type" , "button" ), c }, n = i (); if ( n . setAttribute ( "class" , "apexcharts-toolbar" ), n . style . top = s . config . chart . toolbar . offsetY + "px" , n . style . right =- s . config . chart . toolbar . offsetX + 3 + "px" , s . dom . elWrap . appendChild ( n ), this . elZoom = a (), this . elZoomIn = a (), this . elZoomOut = a (), this . elPan = a (), this . elSelection = a (), this . elMeasure = a (), this . elZoomReset = a (), this . elMenuIcon = a (), this . elMenu = i (), this . elCustomIcons = [], this . t = s . config . chart . toolbar . tools , Array . isArray ( this . t . customIcons )) for ( let c = 0 ; c < this . t . customIcons . length ; c ++ ) this . elCustomIcons . push ( a ()); let r = [], o = ( c , h , d )=>{ let f = c . toLowerCase (); this . t [ f ] && s . config . chart . zoom . enabled && r . push ({ el : h , icon : typeof this . t [ f ] == "string" ? this . t [ f ] : d , title : this . localeValues [ c ], class : `apexcharts- ${ f } -icon` })}; o ( "zoomIn" , this . elZoomIn , th ), o ( "zoomOut" , this . elZoomOut , eh ); let l = c =>{ this . t [ c ] && s . config . chart [ c ]. enabled && r . push ({ el : c === "zoom" ? this . elZoom : this . elSelection , icon : typeof this . t [ c ] == "string" ? this . t [ c ] : c === "zoom" ? Jc : sh , title : this . localeValues [ c === "zoom" ? "selectionZoom" : "selection" ], class : `apexcharts- ${ c } -icon` })}; l ( "zoom" ), l ( "selection" ), this . t . pan && s . config . chart . zoom . enabled && r . push ({ el : this . elPan , icon : typeof this . t . pan == "string" ? this . t . pan : Kc , title : this . localeValues . pan , class : "apexcharts-pan-icon" }), this . t . measure && s . config . chart . measure && s . config . chart . measure . enabled && r . push ({ el : this . elMeasure , icon : typeof this . t . measure == "string" ? this . t . measure : ih , title : this . localeValues . measure || "Measure" , class : "apexcharts-measure-icon" }), o ( "reset" , this . elZoomReset , Qc ), this . t . download && r . push ({ el : this . elMenuIcon , icon : typeof this . t . download == "string" ? this . t . download : ah , title : this . localeValues . menu , class : "apexcharts-menu-icon" }); for ( let c = 0 ; c < this . elCustomIcons . length ; c ++ ) r . push ({ el : this . elCustomIcons [ c ], icon : this . t . customIcons [ c ]. icon , title : this . t . customIcons [ c ]. title , index : this . t . customIcons [ c ]. index , class : "apexcharts-toolbar-custom-icon " + this . t . customIcons [ c ]. class }); r . forEach (( c , h )=>{ c . index && T . moveIndexInArray ( r , h , c . index )}); for ( let c = 0 ; c < r . length ; c ++ ) B . setAttrs ( r [ c ]. el ,{ class : r [ c ]. class , title : r [ c ]. title , "aria-label" : r [ c ]. title }), r [ c ]. el . innerHTML = r [ c ]. icon , n . appendChild ( r [ c ]. el ); this . elZoom . parentNode && this . elZoom . setAttribute ( "aria-pressed" , String ( !! s . interact . zoomEnabled )), this . elSelection . parentNode && this . elSelection . setAttribute ( "aria-pressed" , String ( !! s . interact . selectionEnabled )), this . elPan . parentNode && this . elPan . setAttribute ( "aria-pressed" , String ( !! s . interact . panEnabled )), this . elMeasure . parentNode && this . elMeasure . setAttribute ( "aria-pressed" , String ( !! s . interact . measureEnabled )), this . elMenuIcon . parentNode && ( this . elMenuIcon . setAttribute ( "aria-haspopup" , "true" ), this . elMenuIcon . setAttribute ( "aria-expanded" , "false" )), this . _createHamburgerMenu ( n ), s . interact . zoomEnabled ? this . elZoom . classList . add ( this . selectedClass ) : s . interact . panEnabled ? this . elPan . classList . add ( this . selectedClass ) : s . interact . selectionEnabled ? this . elSelection . classList . add ( this . selectedClass ) : s . interact . measureEnabled && this . elMeasure && ( this . elMeasure . classList . add ( this . selectedClass ),( e = ( t = this . ctx . measure ) == null ? void 0 : t . startMeasure ) == null || e . call ( t )), this . addToolbarEventListeners ()} _createHamburgerMenu ( t ){ this . elMenuItems = [], t . appendChild ( this . elMenu ), B . setAttrs ( this . elMenu ,{ class : "apexcharts-menu" , role : "menu" }); let e = [{ name : "exportSVG" , title : this . localeValues . exportToSVG },{ name : "exportPNG" , title : this . localeValues . exportToPNG },{ name : "exportCSV" , title : this . localeValues . exportToCSV }]; for ( let s = 0 ; s < e . length ; s ++ ) this . elMenuItems . push ( O .
`)).map(i=>i==null?"":` $ { i } `)}reserveExternalLabelSpace(){let t=this.w,e=new me(t),s=(t.seriesData.seriesNames||[]).map((d,f)=>this.getExternalLabelLines(f)),i=e.getMaxLabelWidth(s.flat(),{fontSize:this.externalLabelStyle.fontSize,fontFamily:this.externalLabelStyle.fontFamily});this.externalLabelMaxLines=s.reduce((d,f)=>Math.max(d,f.length),1),this.externalLabelLineH=Math.round((parseFloat(this.externalLabelStyle.fontSize)||12)*1.35);let a=this.externalCfg.connector,n=this.externalLabelMaxLines*this.externalLabelLineH,r=i+(a.length||0)+(a.gap||0)+12,o=n/2+(a.gap||0)+6,l=Math.min(t.globals.radialSize,t.layout.gridWidth/2-r,t.layout.gridHeight/2-o);t.globals.radialSize=Math.max(l,this.defaultSize*.15),t.globals.pieExternalLabelMarginY=o;let c=t.config.chart.height?String(t.config.chart.height):"",h=c!==""&&c!=="auto";this.centerY=h?t.layout.gridHeight/2:t.globals.radialSize+o}draw(t){var e;let s=this,i=this.w,a=new B(this.w),n=a.group({class:"apexcharts-pie"});if(i.globals.noData)return n;let r=0;for(let g=0;g<t.length;g++)r+=T.negToZero(t[g]);let o=[],l=a.group();r===0&&(r=1e-5),t.forEach(g=>{this.maxY=Math.max(this.maxY,g)}),i.config.yaxis[0].max&&(this.maxY=i.config.yaxis[0].max),i.config.grid.position==="back"&&this.chartType==="polarArea"&&this.drawPolarElements(n);let c=i.globals.collapsedSeriesIndices||[],h=1;if(this.chartType==="polarArea"){let g=0;for(let p=0;p<t.length;p++)c.indexOf(p)===-1&&g++;h=Math.max(1,g)}for(let g=0;g<t.length;g++){let p=this.fullAngle*T.negToZero(t[g])/r;o.push(p),this.chartType==="polarArea"?(o[g]=c.indexOf(g)>-1?0:this.fullAngle/h,this.sliceSizes.push(i.globals.radialSize*t[g]/(this.maxY||1))):this.sliceSizes.push(i.globals.radialSize)}let d=((e=this.ctx.morphTypeChange)==null?void 0:e.isActive())===!0;if(i.globals.dataChanged&&!d)if(this.chartType==="polarArea"){let g=i.globals.previousPaths,p=i.globals.prevPolarAngles;if(Array.isArray(p)&&p.length===g.length)this.prevSectorAngleArr=p.slice();else for(let b=0;b<g.length;b++)this.prevSectorAngleArr.push(this.fullAngle/Math.max(1,g.length));let m=0;for(let b=0;b<g.length;b++)m=Math.max(m,T.negToZero(g[b]));i.config.yaxis[0].max&&(m=i.config.yaxis[0].max),this.prevSliceSizes=g.map(b=>i.globals.radialSize*T.negToZero(b)/(m||1))}else{let g=0;for(let m=0;m<i.globals.previousPaths.length;m++)g+=T.negToZero(i.globals.previousPaths[m]);let p;for(let m=0;m<i.globals.previousPaths.length;m++)p=this.fullAngle*T.negToZero(i.globals.previousPaths[m])/g,this.prevSectorAngleArr.push(p)}if(this.chartType==="polarArea"&&(i.globals.prevPolarAngles=o.slice()),this.donutSize<0&&(this.donutSize=0),this.chartType==="donut"){let g=a.drawCircle(this.donutSize);g.attr({cx:this.centerX,cy:this.centerY,fill:i.config.plotOptions.pie.donut.background?i.config.plotOptions.pie.donut.background:"transparent"}),l.add(g)}let f=s.drawArcs(o,t);if(this.sliceLabels.forEach(g=>{f.add(g)}),l.attr({transform:` translate ( $ { this . translateX }, $ { this . translateY }) scale ( $ { i . config . plotOptions . pie . customScale }) `}),l.add(f),n.add(l),this.donutDataLabels.show){let g=this.initialAnim&&!i.globals.resized&&!i.globals.dataChanged&&this.animDur>0,p=this.renderInnerDataLabels(this.dataLabelsGroup,this.donutDataLabels,{hollowSize:this.donutSize,centerX:this.centerX,centerY:this.centerY,opacity:g?0:this.donutDataLabels.show});if(g){let m=this.dataLabelsGroup.node;m.style.transition="opacity 280ms ease-out",setTimeout(()=>{m.style.opacity="1"},this.animDur)}n.add(p)}return i.config.grid.position==="front"&&this.chartType==="polarArea"&&this.drawPolarElements(n),n}drawArcs(t,e){var s,i,a,n,r;let o=this.w,l=new at(this.w),c=new B(this.w),h=new pt(this.w),d=c.group({class:"apexcharts-slices"});this.elHoverOutline=c.group({class:"apexcharts-pie-hover-outline"}),this.elHoverOutline.node.style.pointerEvents="none",this.elHoverOutline.node.style.opacity="0",o.config.chart.animations.enabled&&(this.elHoverOutline.node.style.transition=yd),d.add(this.elHoverOutline);let f=this.initialAngle,g=this.initialAngle,p=this.initialAngle,m=this.initialAngle;this.strokeWidth=o.config.stroke.show?o.config.stroke
${ r . toFixed ( 1 ) } %` ; return String ( l ). split ( `
` )} _outerLabelGutter ( t , e ){ let s = this . w , i = e . clusterLabels , a = i . external . connector || {}, n = t . reduce (( d , f )=> d + f , 0 ), r = []; if ( t . forEach (( d , f )=>{ d > 0 && r . push (... this . _outerLabelLines ( f , d , n , e ))}), ! r . length ) return 0 ; let o = md ( s , r ,{ fontSize : i . fontSize , fontFamily : i . fontFamily || s . config . chart . fontFamily }), l = a . gap != null ? a . gap : 8 , c = a . length != null ? a . length : 22 , h = o + l + c + 8 + Math . abs ( parseFloat ( i . external . offsetX ) || 0 ); return Math . min ( h , s . layout . gridWidth * . 25 )} _drawOuterLabels ( t , e , s , i , a , n ){ let r = this . w ; if ( ! H . isBrowser ()) return ; let o = a . clusterLabels , l = o . external , c = l . connector || {}, h = c . gap != null ? c . gap : 8 , d = c . length != null ? c . length : 22 , f = parseFloat ( l . offsetX ) || 0 , g = parseFloat ( l . offsetY ) || 0 , p = r . layout . gridWidth , m = r . layout . gridHeight , b = this . _lastDotR , x = e . filter ( E => E . dots . length > 0 ); if ( ! x . length ) return ; let _ = 0 , w = 0 ; if ( x . length > 1 ){ let E = x . map ( P => P . cx ), D = x . map ( P => P . cy ); _ = Math . max (... E ) - Math . min (... E ), w = Math . max (... D ) - Math . min (... D )} let y = _ > w , v = parseFloat ( o . fontSize ) || 13 , A = Math . round ( v * 1.35 ), S = []; if ( x . slice (). sort (( E , D )=> E . cy - D . cy ). forEach (( E , D )=>{ let P = this . _outerLabelLines ( E . i , s [ E . i ], i , a ); if ( ! P . some ( Y => Y !== "" )) return ; let F = y ? E . cx >= p / 2 ? "right" : "left" : D % 2 === 0 ? "right" : "left" , R = F === "right" ? 1 :- 1 , N = E . dots [ 0 ], z =- 1 / 0 ; E . dots . forEach ( Y =>{ let I = R * Y . x - . 75 * Math . abs ( Y . y - E . cy ); I > z && ( z = I , N = Y )}); let $ = { x : N . x + R * ( N . r || b ), y : N . y }, W = { x : $ . x + R * h , y : $ . y }; S . push ({ i : E . i , lines : P , anchor : $ , elbow : W , labelX : W . x + R * d + f , idealY : $ . y + g , labelY : $ . y + g , side : F })}), ! S . length ) return ; let M = S . reduce (( E , D )=> Math . max ( E , D . lines . length ), 1 ) * A , k = M / 2 ;[ "left" , "right" ]. forEach ( E =>{ mo ( S . filter ( D => D . side === E ), M + 2 , m - k , k )}); let L = new B ( r , this . ctx ). group ({ class : "apexcharts-unit-outer-labels" }); if ( n ){ let E = Math . max ( 1 , r . config . chart . animations . speed || 800 ); L . node . classList . add ( "apexcharts-unit-label-delay" ), L . node . style . animationDelay = ` ${ Math . min ( E * . 45 , 600 ) / 1e3 } s` } S . forEach ( E =>{ let D = r . globals . colors [ E . i ] || r . globals . colors [ 0 ] || "#008FFB" ; L . add ( po ( r ,{ lines : E . lines , lineHeight : A , anchor : E . anchor , elbow : E . elbow , labelX : E . labelX , labelY : E . labelY , side : E . side , connector : { show : c . show !==! 1 , width : c . width != null ? c . width : 1.5 , color : c . color || D }, style : { fontSize : o . fontSize , fontFamily : o . fontFamily || r . config . chart . fontFamily , fontWeight : o . fontWeight }, foreColor : o . color || r . config . chart . foreColor , groupClass : "apexcharts-unit-outer-label-group" , textClass : "apexcharts-unit-outer-label" , connectorClass : "apexcharts-unit-label-connector" }))}), t . add ( L )} _drawClusterLabel ( t , e , s , i , a , n ){ let r = this . w ; if ( ! H . isBrowser ()) return ; let o = "http://www.w3.org/2000/svg" , l = r . seriesData . seriesNames [ e . i ] || `series- ${ e . i + 1 } ` , c = i > 0 ? s / i * 100 : 0 , h = a . clusterLabels , d = parseFloat ( h . fontSize ) || 13 , f ; typeof h . formatter == "function" ? f = h . formatter ( l ,{ seriesIndex : e . i , value : s , percent : c , w : r }) : f = ` ${ l } ( ${ c . toFixed ( 1 ) } %)` ; let g = typeof f == "string" ? f : String ( f ), p = O . createElementNS ( o , "text" ); p . setAttribute ( "class" , "apexcharts-unit-label" ), p . setAttribute ( "text-anchor" , "middle" ), p . setAttribute ( "font-size" , ` ${ d } px` ), p . setAttribute ( "font-family" , h . fontFamily || r . config . chart . fontFamily || "inherit" ), p . setAttribute ( "font-weight" , String ( h . fontWeight || 600 )), p . setAttribute ( "fill" , h . color || n ); let m = h . position === "bottom" , b = e . outerR + d * . 6 + 3 + ( h . offsetY || 0 ), x = g . length * d * . 55 ; if ( ! m &&! e . flat && h . curved !==! 1 && x <= Math . PI * b * . 95 ){ let w = e . cy , y = e . cx - b , v = e . cx + b , A = `M ${ y } ${ w } A ${ b } ${ b } 0 0 1 ${ v } ${ w } ` , S = `apexcharts-unit-label- ${ r . globals . chartID } - ${ e . i } ` , C = O . createElementNS ( o , "path" ); C . setAttribute ( "id" , S ), C . setAttribute ( "d" , A ), C . setAttribute ( "fill" , "none" ), C . setAttribute ( "stroke" , "none" ); let M = O . createElementNS ( o , "textPath" ); M . setAttribute ( "href" , `# ${ S } ` ), M . setAttributeNS ( "http://www.w3.org/1999/xlink" , "xlink:href" , `# ${ S } ` ), M . setAttribute ( "startOffset" , "50%" ), M . textContent = g , p . appendChild ( M ), t . node . appendChild ( C )} else { p . setAttribute ( "x" , String ( e . cx )); let w = m ? e . cy + e . outerR + d + 6 + ( h . offsetY || 0 ) : e . cy - e . outerR - 6 - ( h . offsetY || 0 ); p . setAttribute ( "y" , String ( w )), p . textContent = g } t . node . appendChild ( p )}}, ns = Math . PI / 180 , yr = 180 / Math . PI , ri = "http://www.w3.org/2000/svg" , he = "http://www.w3.org/1999/xhtml" , Le = ( u , t , e )=> u + ( t - u ) * e , Ba = class { constructor ( t , e ){ this . ctx = e , this . w = t ; let s = t . config ; this . cfg = s . plotOptions . sunburst , this . strokeWidth = s . stroke . show ? s . s
2026-07-03 13:46:54 +00:00
/*! Bundled license information:
apexcharts/dist/apexcharts.esm.js:
(*!
2026-08-31 14:25:22 +03:00
* ApexCharts v6.10.0
* (c) 2018-2026 ApexCharts
2026-07-03 13:46:54 +00:00
*)
(*!
2026-08-31 14:25:22 +03:00
* Path morphing for SVG path animations
* Based on svg.pathmorphing.js by Ulrich-Matthias Schäfer (MIT License)
* Refactored to be standalone (no SVG.js dependency)
*
* Two algorithms are exported:
* - morphPaths() — command-level interpolation; preserves curves but can
* produce "wings/flips" when two shapes have very
* different topology (e.g. bar rect → pie arc).
* - morphPolygons() — resamples both shapes into N evenly-spaced perimeter
* points and tweens point-by-point with rotation-search
* alignment; always smooth and non-self-intersecting,
* at the cost of throwing away curve smoothness.
*)
2026-07-03 13:46:54 +00:00
*/