apexcharts
Version:
A JavaScript Chart Library
6 lines (5 loc) • 15.3 kB
JavaScript
/*!
* ApexCharts v5.10.5
* (c) 2018-2026 ApexCharts
*/
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("apexcharts/core");function e(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t)for(const a in t)if("default"!==a){const s=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(e,a,s.get?s:{enumerable:!0,get:()=>t[a]})}return e.default=t,Object.freeze(e)}const a=e(t),s=a.__apex_Animations,i=a.__apex_Fill,n=a.__apex_Utils,l=a.__apex_Graphics,r=a.__apex_Filters,o=a.__apex_Scales;class h{constructor(t){this.w=t}drawYAxisTexts(t,e,a,s){const i=this.w,n=i.config.yaxis[0],r=i.formatters.yLabelFormatters[0];return new l(this.w).drawText({x:t+n.labels.offsetX,y:e+n.labels.offsetY,text:r(s,a),textAnchor:"middle",fontSize:n.labels.style.fontSize,fontFamily:n.labels.style.fontFamily,foreColor:Array.isArray(n.labels.style.colors)?n.labels.style.colors[a]:n.labels.style.colors})}}class d{constructor(t,e){this.ctx=e,this.w=t,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels,this.lineColorArr=void 0!==t.globals.stroke.colors?t.globals.stroke.colors:t.globals.colors,this.defaultSize=Math.min(t.layout.gridWidth,t.layout.gridHeight),this.centerY=this.defaultSize/2,this.centerX=t.layout.gridWidth/2,"radialBar"===t.config.chart.type?this.fullAngle=360:this.fullAngle=Math.abs(t.config.plotOptions.pie.endAngle-t.config.plotOptions.pie.startAngle),this.initialAngle=t.config.plotOptions.pie.startAngle%this.fullAngle,t.globals.radialSize=this.defaultSize/2.05-t.config.stroke.width-(t.config.chart.sparkline.enabled?0:t.config.chart.dropShadow.blur),this.donutSize=t.globals.radialSize*parseInt(t.config.plotOptions.pie.donut.size,10)/100;const a=t.config.plotOptions.pie.customScale,s=t.layout.gridWidth/2,i=t.layout.gridHeight/2;this.translateX=s-s*a,this.translateY=i-i*a,this.dataLabelsGroup=new l(this.w).group({class:"apexcharts-datalabels-group",transform:`translate(${this.translateX}, ${this.translateY}) scale(${a})`}),this.maxY=0,this.sliceLabels=[],this.sliceSizes=[],this.prevSectorAngleArr=[]}draw(t){const e=this.w,a=new l(this.w),s=a.group({class:"apexcharts-pie"});if(e.globals.noData)return s;let i=0;for(let e=0;e<t.length;e++)i+=n.negToZero(t[e]);const r=[],o=a.group();0===i&&(i=1e-5),t.forEach(t=>{this.maxY=Math.max(this.maxY,t)}),e.config.yaxis[0].max&&(this.maxY=e.config.yaxis[0].max),"back"===e.config.grid.position&&"polarArea"===this.chartType&&this.drawPolarElements(s);for(let a=0;a<t.length;a++){const s=this.fullAngle*n.negToZero(t[a])/i;r.push(s),"polarArea"===this.chartType?(r[a]=this.fullAngle/t.length,this.sliceSizes.push(e.globals.radialSize*t[a]/this.maxY)):this.sliceSizes.push(e.globals.radialSize)}if(e.globals.dataChanged){let t,a=0;for(let t=0;t<e.globals.previousPaths.length;t++)a+=n.negToZero(e.globals.previousPaths[t]);for(let s=0;s<e.globals.previousPaths.length;s++)t=this.fullAngle*n.negToZero(e.globals.previousPaths[s])/a,this.prevSectorAngleArr.push(t)}if(this.donutSize<0&&(this.donutSize=0),"donut"===this.chartType){const t=a.drawCircle(this.donutSize);t.attr({cx:this.centerX,cy:this.centerY,fill:e.config.plotOptions.pie.donut.background?e.config.plotOptions.pie.donut.background:"transparent"}),o.add(t)}const h=this.drawArcs(r,t);if(this.sliceLabels.forEach(t=>{h.add(t)}),o.attr({transform:`translate(${this.translateX}, ${this.translateY}) scale(${e.config.plotOptions.pie.customScale})`}),o.add(h),s.add(o),this.donutDataLabels.show){const t=this.renderInnerDataLabels(this.dataLabelsGroup,this.donutDataLabels,{hollowSize:this.donutSize,centerX:this.centerX,centerY:this.centerY,opacity:this.donutDataLabels.show});s.add(t)}return"front"===e.config.grid.position&&"polarArea"===this.chartType&&this.drawPolarElements(s),s}drawArcs(t,e){const a=this.w,s=new r(this.w),o=new l(this.w),h=new i(this.w),d=o.group({class:"apexcharts-slices"});let c=this.initialAngle,g=this.initialAngle,p=this.initialAngle,f=this.initialAngle;this.strokeWidth=a.config.stroke.show?a.config.stroke.width:0;for(let i=0;i<t.length;i++){const r=o.group({class:"apexcharts-series apexcharts-pie-series",seriesName:n.escapeString(a.seriesData.seriesNames[i]),rel:i+1,"data:realIndex":i});d.add(r),c=p,g=f,p=c+t[i],f=g+this.prevSectorAngleArr[i];const u=p<c?this.fullAngle+p-c:p-c,A=h.fillPath({seriesNumber:i,size:this.sliceSizes[i],value:e[i]}),b=this.getChangedPath(g,f),m=o.drawPath({d:b,stroke:Array.isArray(this.lineColorArr)?this.lineColorArr[i]:this.lineColorArr,strokeWidth:0,fill:A,fillOpacity:a.config.fill.opacity,classes:`apexcharts-pie-area apexcharts-${this.chartType.toLowerCase()}-slice-${i}`});if(m.attr({index:0,j:i}),s.setSelectionFilter(m,0,i),a.config.chart.dropShadow.enabled){const t=a.config.chart.dropShadow;s.dropShadow(m,t,i)}this.addListeners(m,this.donutDataLabels);let w={x:0,y:0};const y=(c+u/2)%this.fullAngle;let x={x:this.centerX,y:this.centerY};"pie"===this.chartType||"polarArea"===this.chartType?(w=n.polarToCartesian(this.centerX,this.centerY,a.globals.radialSize/1.25+a.config.plotOptions.pie.dataLabels.offset,y),x=n.polarToCartesian(this.centerX,this.centerY,a.globals.radialSize/2,y)):"donut"===this.chartType&&(w=n.polarToCartesian(this.centerX,this.centerY,(a.globals.radialSize+this.donutSize)/2+a.config.plotOptions.pie.dataLabels.offset,y),x=n.polarToCartesian(this.centerX,this.centerY,(a.globals.radialSize+this.donutSize)/2,y)),l.setAttrs(m.node,{"data:angle":u,"data:startAngle":c,"data:strokeWidth":this.strokeWidth,"data:value":e[i],"data:cx":x.x,"data:cy":x.y}),r.add(m);let S=0;if(!this.initialAnim||a.globals.resized||a.globals.dataChanged?this.animBeginArr.push(0):(S=u/this.fullAngle*a.config.chart.animations.speed,0===S&&(S=1),this.animDur=S+this.animDur,this.animBeginArr.push(this.animDur)),this.dynamicAnim&&a.globals.dataChanged?this.animatePaths(m,{size:this.sliceSizes[i],endAngle:p,startAngle:c,prevStartAngle:g,prevEndAngle:f,animateStartingPos:!0,i:i,animBeginArr:this.animBeginArr,shouldSetPrevPaths:!0,dur:a.config.chart.animations.dynamicAnimation.speed}):this.animatePaths(m,{size:this.sliceSizes[i],endAngle:p,startAngle:c,i:i,totalItems:t.length-1,animBeginArr:this.animBeginArr,dur:S}),a.config.plotOptions.pie.expandOnClick&&"polarArea"!==this.chartType&&m.node.addEventListener("mouseup",this.pieClicked.bind(this,i)),void 0!==a.interact.selectedDataPoints[0]&&a.interact.selectedDataPoints[0].indexOf(i)>-1&&this.pieClicked(i),a.config.dataLabels.enabled){const e=w.x,n=w.y;let l=100*u/this.fullAngle+"%";if(0!==u&&a.config.plotOptions.pie.dataLabels.minAngleToShowLabel<t[i]){const t=a.config.dataLabels.formatter;void 0!==t&&(l=t(a.globals.seriesPercent[i][0],{seriesIndex:i,w:a}));const r=a.globals.dataLabels.style.colors[i],h=o.group({class:"apexcharts-datalabels"}),d=o.drawText({x:e,y:n,text:l,textAnchor:"middle",fontSize:a.config.dataLabels.style.fontSize,fontFamily:a.config.dataLabels.style.fontFamily,fontWeight:a.config.dataLabels.style.fontWeight,foreColor:r});if(h.add(d),a.config.dataLabels.dropShadow.enabled){const t=a.config.dataLabels.dropShadow;s.dropShadow(d,t)}d.node.classList.add("apexcharts-pie-label"),a.config.chart.animations.animate&&!1===a.globals.resized&&(d.node.classList.add("apexcharts-pie-label-delay"),d.node.style.animationDelay=a.config.chart.animations.speed/940+"s"),this.sliceLabels.push(h)}}}return d}addListeners(t,e){const a=new l(this.w);t.node.addEventListener("mouseenter",a.pathMouseEnter.bind(this,t)),t.node.addEventListener("mouseleave",a.pathMouseLeave.bind(this,t)),t.node.addEventListener("mouseleave",this.revertDataLabelsInner.bind(this)),t.node.addEventListener("mousedown",a.pathMouseDown.bind(this,t)),this.donutDataLabels.total.showAlways||(t.node.addEventListener("mouseenter",this.printDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener("mousedown",this.printDataLabelsInner.bind(this,t.node,e)))}animatePaths(t,e){const a=this.w;let s=e.endAngle<e.startAngle?this.fullAngle+e.endAngle-e.startAngle:e.endAngle-e.startAngle,i=s,n=e.startAngle;const l=e.startAngle;void 0!==e.prevStartAngle&&void 0!==e.prevEndAngle&&(n=e.prevEndAngle,i=e.prevEndAngle<e.prevStartAngle?this.fullAngle+e.prevEndAngle-e.prevStartAngle:e.prevEndAngle-e.prevStartAngle),e.i===a.config.series.length-1&&(s+l>this.fullAngle?e.endAngle=e.endAngle-(s+l):s+l<this.fullAngle&&(e.endAngle=e.endAngle+(this.fullAngle-(s+l)))),s===this.fullAngle&&(s=this.fullAngle-.01),this.animateArc(t,n,l,s,i,e)}animateArc(t,e,a,i,n,l){const r=this,o=this.w,h=new s(this.w),d=l.size;let c;(isNaN(e)||isNaN(n))&&(e=a,n=i,l.dur=0);let g=i,p=a;const f=e<a?this.fullAngle+e-a:e-a;o.globals.dataChanged&&l.shouldSetPrevPaths&&l.prevEndAngle&&(c=r.getPiePath({me:r,startAngle:l.prevStartAngle,angle:l.prevEndAngle<l.prevStartAngle?this.fullAngle+l.prevEndAngle-l.prevStartAngle:l.prevEndAngle-l.prevStartAngle,size:d}),t.attr({d:c})),0!==l.dur?t.animate(l.dur,l.animBeginArr[l.i]).after(function(){"pie"!==r.chartType&&"donut"!==r.chartType&&"polarArea"!==r.chartType||this.animate(o.config.chart.animations.dynamicAnimation.speed).attr({"stroke-width":r.strokeWidth}),l.i===o.config.series.length-1&&h.animationCompleted(t)}).during(s=>{g=f+(i-f)*s,l.animateStartingPos&&(g=n+(i-n)*s,p=e-n+(a-(e-n))*s),c=r.getPiePath({me:r,startAngle:p,angle:g,size:d}),t.node.setAttribute("data:pathOrig",c),t.attr({d:c})}):(c=r.getPiePath({me:r,startAngle:p,angle:i,size:d}),l.isTrack||(o.globals.animationEnded=!0),t.node.setAttribute("data:pathOrig",c),t.attr({d:c,"stroke-width":r.strokeWidth}))}pieClicked(t){const e=this.w,a=this,s=a.sliceSizes[t]+(e.config.plotOptions.pie.expandOnClick?4:0),i=e.dom.Paper.findOne(`.apexcharts-${a.chartType.toLowerCase()}-slice-${t}`);if("true"===i.attr("data:pieClicked")){i.attr({"data:pieClicked":"false"}),this.revertDataLabelsInner();const t=i.attr("data:pathOrig");return void i.attr({d:t})}{const a=e.dom.baseEl.getElementsByClassName("apexcharts-pie-area");Array.prototype.forEach.call(a,t=>{t.setAttribute("data:pieClicked","false");const e=t.getAttribute("data:pathOrig");e&&t.setAttribute("d",e)}),e.interact.capturedDataPointIndex=t,i.attr("data:pieClicked","true")}const n=parseInt(i.attr("data:startAngle"),10),l=parseInt(i.attr("data:angle"),10),r=a.getPiePath({me:a,startAngle:n,angle:l,size:s});360!==l&&i.plot(r)}getChangedPath(t,e){let a="";return this.dynamicAnim&&this.w.globals.dataChanged&&(a=this.getPiePath({me:this,startAngle:t,angle:e-t,size:this.size})),a}getPiePath({me:t,startAngle:e,angle:a,size:s}){let i;const r=new l(this.w),o=e,h=Math.PI*(o-90)/180;let d=a+e;Math.ceil(d)>=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(d=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(d)>this.fullAngle&&(d-=this.fullAngle);const c=Math.PI*(d-90)/180,g=t.centerX+s*Math.cos(h),p=t.centerY+s*Math.sin(h),f=t.centerX+s*Math.cos(c),u=t.centerY+s*Math.sin(c),A=n.polarToCartesian(t.centerX,t.centerY,t.donutSize,d),b=n.polarToCartesian(t.centerX,t.centerY,t.donutSize,o),m=a>180?1:0,w=["M",g,p,"A",s,s,0,m,1,f,u];return i="donut"===t.chartType?[...w,"L",A.x,A.y,"A",t.donutSize,t.donutSize,0,m,0,b.x,b.y,"L",g,p,"z"].join(" "):"pie"===t.chartType||"polarArea"===t.chartType?[...w,"L",t.centerX,t.centerY,"L",g,p].join(" "):[...w].join(" "),r.roundPathCorners(i,2*this.strokeWidth)}drawPolarElements(t){const e=this.w,a=new o(this.w),s=new l(this.w),i=new h(this.w),n=s.group(),r=s.group(),d=a.niceScale(0,Math.ceil(this.maxY),0),c=d.result.reverse(),g=d.result.length;this.maxY=d.niceMax;let p=e.globals.radialSize;const f=p/(g-1);for(let t=0;t<g-1;t++){const a=s.drawCircle(p);if(a.attr({cx:this.centerX,cy:this.centerY,fill:"none","stroke-width":e.config.plotOptions.polarArea.rings.strokeWidth,stroke:e.config.plotOptions.polarArea.rings.strokeColor}),e.config.yaxis[0].show){const a=i.drawYAxisTexts(this.centerX,this.centerY-p+parseInt(e.config.yaxis[0].labels.style.fontSize,10)/2,t,c[t]);r.add(a)}n.add(a),p-=f}this.drawSpokes(t),t.add(n),t.add(r)}renderInnerDataLabels(t,e,a){const s=this.w,i=new l(this.w),n=e.total.show;t.node.innerHTML="",t.node.style.opacity=a.opacity;const r=a.centerX,o=this.donutDataLabels.total.label?a.centerY:a.centerY-a.centerY/6;let h,d;h=void 0===e.name.color?s.globals.colors[0]:e.name.color;let c=e.name.fontSize,g=e.name.fontFamily,p=e.name.fontWeight;d=void 0===e.value.color?s.config.chart.foreColor:e.value.color;const f=e.value.formatter;let u="",A="";if(n?(h=e.total.color,c=e.total.fontSize,g=e.total.fontFamily,p=e.total.fontWeight,A=this.donutDataLabels.total.label?e.total.label:"",u=e.total.formatter(s)):1===s.seriesData.series.length&&(u=f(s.seriesData.series[0],s),A=s.seriesData.seriesNames[0]),A&&(A=e.name.formatter(A,e.total.show,s)),e.name.show){const a=i.drawText({x:r,y:o+parseFloat(e.name.offsetY),text:A,textAnchor:"middle",foreColor:h,fontSize:c,fontWeight:p,fontFamily:g});a.node.classList.add("apexcharts-datalabel-label"),t.add(a)}if(e.value.show){const a=e.name.show?parseFloat(e.value.offsetY)+16:e.value.offsetY,s=i.drawText({x:r,y:o+a,text:u,textAnchor:"middle",foreColor:d,fontWeight:e.value.fontWeight,fontSize:e.value.fontSize,fontFamily:e.value.fontFamily});s.node.classList.add("apexcharts-datalabel-value"),t.add(s)}return t}printInnerLabels(t,e,a,s){const i=this.w;let n;s?n=void 0===t.name.color?i.globals.colors[parseInt(s.parentNode.getAttribute("rel"),10)-1]:t.name.color:i.seriesData.series.length>1&&t.total.show&&(n=t.total.color);const l=i.dom.baseEl.querySelector(".apexcharts-datalabel-label"),r=i.dom.baseEl.querySelector(".apexcharts-datalabel-value");a=(0,t.value.formatter)(a,i),s||"function"!=typeof t.total.formatter||(a=t.total.formatter(i));const o=e===t.total.label;if(e=this.donutDataLabels.total.label?t.name.formatter(e,o,i):"",null!==l&&(l.textContent=e),null!==r&&(r.textContent=a),null!==l){l.style.fill=n}}printDataLabelsInner(t,e){const a=this.w,s=t.getAttribute("data:value"),i=a.seriesData.seriesNames[parseInt(t.parentNode.getAttribute("rel"),10)-1];a.seriesData.series.length>1&&this.printInnerLabels(e,i,s,t);const n=a.dom.baseEl.querySelector(".apexcharts-datalabels-group");if(null!==n){n.style.opacity="1"}}drawSpokes(t){const e=this.w,a=new l(this.w),s=e.config.plotOptions.polarArea.spokes;if(0===s.strokeWidth)return;const i=[],r=360/e.seriesData.series.length;for(let t=0;t<e.seriesData.series.length;t++)i.push(n.polarToCartesian(this.centerX,this.centerY,e.globals.radialSize,e.config.plotOptions.pie.startAngle+r*t));i.forEach((e,i)=>{const n=a.drawLine(e.x,e.y,this.centerX,this.centerY,Array.isArray(s.connectorColors)?s.connectorColors[i]:s.connectorColors);t.add(n)})}revertDataLabelsInner(){const t=this.w;if(this.donutDataLabels.show){const e=t.dom.Paper.findOne(".apexcharts-datalabels-group"),a=this.renderInnerDataLabels(e,this.donutDataLabels,{hollowSize:this.donutSize,centerX:this.centerX,centerY:this.centerY,opacity:this.donutDataLabels.show});t.dom.Paper.findOne(".apexcharts-radialbar, .apexcharts-pie").add(a)}}}t.use({pie:d,donut:d,polarArea:d}),exports.default=t;