!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).BarChart=e()}(this,function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function t(t){return function(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e<t.length;e++)i[e]=t[e];return i}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var u={series:[],labels:[],margin:{top:30,bottom:30},xAxis:{font:{size:13,family:"Arial",style:"#333"},line:{style:"#333",width:1},tick:{style:"#333",width:1,length:6}},yAxis:{font:{size:13,family:"Arial",style:"#333"},line:{style:"#333",width:1},tick:{style:"#333",width:1,length:6}},guideLine:{style:"#ccc",width:1},defaultBar:{style:{default:"rgba(16, 142, 233, 0.6)",select:"rgb(16, 142, 233)"}},duration:500,tooltip:{title:"",style:"rgba(0, 0, 0, 0.6)",height:50,radius:4,mark:{radius:5},font:{size:14,family:"Arial",style:"rgb(255, 255, 255)"}}},c=["x","y","w","h","val","d_style","a_style"];function r(t){var e=t.context,i=t.tick,n=t.phyScale*i[2],a=t.yAxis_left,o=t.areaW,r=t.areaH,l=r+Math.round(i[0]*t.phyScale);!function(t,e,i,n,a){t.beginPath(),t.strokeStyle=u.yAxis.line.style,t.lineWidth=u.yAxis.line.width,t.moveTo(i,u.margin.top),t.lineTo(i,a),t.stroke(),t.beginPath(),t.strokeStyle=u.xAxis.line.style,t.lineWidth=u.xAxis.line.width,t.moveTo(i,e),t.lineTo(n+i,e),t.stroke()}(e,l,a,o,r),function(t,e,i,n,a){var o=u.labels,r=n/(o.length+1),l=u.xAxis.tick.length;t.beginPath(),t.strokeStyle=u.xAxis.font.style,t.textAlign="center",t.font="".concat(u.xAxis.font.size,"px ").concat(u.xAxis.font.family),t.fillStyle=u.xAxis.font.style;for(var s=1;s<=o.length;s++){var c=Math.round(s*r);t.moveTo(i+c,e),t.lineTo(i+c,e+l),t.fillText(o[s-1],i+c,a+20)}t.closePath(),t.stroke()}(e,l,a,o,r),function(t,e,i,n,a,o){var r=u.yAxis.tick.length,l=e[0];t.textBaseline="middle",t.textAlign="right",t.font="".concat(u.yAxis.font.size,"px ").concat(u.yAxis.font.family),t.fillStyle=u.yAxis.font.style;for(var s=0;s<=e[3];s++,l+=e[2])t.beginPath(),t.fillText(l,i-10,Math.round(o-s*n)),t.strokeStyle=u.yAxis.tick.style,t.lineWidth=u.yAxis.tick.width,t.moveTo(i-r,Math.round(o-s*n)),t.lineTo(i,Math.round(o-s*n)),t.closePath(),t.stroke(),s!==Math.abs(e[0])/e[2]&&(t.beginPath(),t.strokeStyle=u.guideLine.style,t.lineWidth=u.guideLine.width,t.moveTo(i,Math.round(o-s*n)),t.lineTo(a+i,Math.round(o-s*n)),t.closePath(),t.stroke())}(e,i,a,n,o,r)}var y={isObject:function(t){return"object"===e(t)&&"[object Object]"===Object.prototype.toString.call(t)},formatTick:function(){var c=[];return function(t,e,i){if(!arguments.length)return c;!function(t,e,i){var n,a,o,r,l=(e-t)/i,s=Math.log10(l);a=0<=(a=(l/(n=Math.pow(10,parseInt(s))===l?Math.pow(10,parseInt(s)):Math.pow(10,parseInt(s+1)))).toFixed(6))&&a<=.1?.1:.100001<=a&&a<=.2?.2:.200001<=a&&a<=.25?.25:.250001<=a&&a<=.5?.5:1,a*=n,parseInt(t/a)!==t/a&&(t=t<0?-1*Math.ceil(Math.abs(t/a))*a:parseInt(t/a)*a),parseInt(e/a)!==e/a&&(e=(parseInt(e/a)+1)*a),(r=(e-t)/a)<i&&(e+=!(o=i-r)%2?a*parseInt(o/2):a*parseInt(o/2+1),t-=a*parseInt(o/2)),c.push([t,e,a,i])}(t,e,i)}},getSuitableStep:function(t,e){for(var i=this.formatTick(),n=10;5<=n;n--)i(t,e,n);var a,o=i(),r=Number.MAX_VALUE;return o.forEach(function(t,e){t[1]<=r&&(r=t[1],a=e)}),o[a]},getTick:function(t,e){return this.getSuitableStep(t,e)},requestAnimationFrame:function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)}}};function i(t){throw t}function n(t,e){this instanceof n||i(new Error('BarChart is constructor, should be involed with "new" operator!')),this._init(t,e)}return n.prototype._init=function(t,e){this.initContext(t),this.initOption(e),this.initData(),this.caculateScele(),this.initBars(),this.initEvent(t),this.render()},n.prototype.initEvent=function(t){var e=this,i=Object.create(null);t.addEventListener("mousemove",function(){i.x=event.clientX-e.boundingRect.left,i.y=event.clientY-e.boundingRect.top,clearTimeout(t);var t=setTimeout(function(){e.context.clearRect(0,0,e.canvasW,e.canvasH),r(e),e.drawBars(i)},1e3/60)})},n.prototype.initData=function(){1<u.series.length&&(this.series=!0),this.animIdx=0;var i=[];u.series.forEach(function(t,e){i=i.concat(t.data)}),this.min_data=Math.min.apply(Math,t(i)),this.max_data=Math.max.apply(Math,t(i)),this.max_abs_data=Math.max(Math.abs(this.min_data),Math.abs(this.max_data))},n.prototype.initContext=function(t){this.boundingRect=t.getBoundingClientRect(),t.nodeType===Node.ELEMENT_NODE&&"CANVAS"===t.nodeName?(this.canvasW=t.width,this.canvasH=t.height,this.context=t.getContext("2d")):i(new Error("Context should be a canvas DOM"))},n.prototype.initOption=function(t){!function e(i,n){Object.keys(i).forEach(function(t){i[t]&&!y.isObject(i[t])?n[t]=i[t]:y.isObject(i[t])&&e(i[t],n[t])})}(t,u)},n.prototype.initBars=function(){var a=this;a.bars=[],a.phyScale=(a.areaH-u.margin.top)/(a.tick[1]-a.tick[0]);var o=a.areaW/(u.labels.length+1),r=o/(2*u.series.length),l=0,s=0;u.series.forEach(function(n,t){l=0,s+=1.5*r,y.isObject(n.style)||(n.style=Object.create(null),n.style.default=u.defaultBar.style.default,n.style.active=u.defaultBar.style.select),n.data.forEach(function(t,e){var i=function(){var i=Object.create(null),n=arguments;return c.forEach(function(t,e){i[t]=n[e]}),i}(l+s+a.yAxis_left,a.areaH+a.tick[0]*a.phyScale,r,-1*t*a.phyScale,t,n.style.default,n.style.active);a.bars.push(i),l+=o})})},n.prototype.caculateScele=function(){var t=this;t.tick=y.getTick(0<=t.min_data?0:t.min_data,t.max_data),t.context.font="".concat(u.yAxis.font.size," ").concat(u.yAxis.font.size),t.yAxis_left=parseInt(3*t.context.measureText(t.tick[1]).width),t.areaW=t.canvasW-t.yAxis_left,t.areaH=t.canvasH-u.margin.bottom},n.prototype.render=function(){this.context.translate(.5,.5),r(this),this.animation()},n.prototype.drawBars=function(i){var n,a=this,o=!1,r=a.areaW/(u.labels.length+1);a.bars.forEach(function(t,e){i&&i.x>t.x&&i.x<t.x+t.w&&(i.y>t.y+t.h&&i.y<t.y||i.y>t.y&&i.y<t.y+t.h)?(o=!0,n={label_val:u.labels[Math.floor((i.x-a.yAxis_left)/r)],data_val:t.val,style:t.d_style}):o=!1,function(t,e,i){t.fillStyle=i?e.a_style:e.d_style,t.fillRect(e.x,e.y,e.w,e.h)}(a.context,t,o)}),n&&function(t,e,i){var n=u.tooltip.mark.radius,a="".concat(u.tooltip.title," ").concat(i.data_val);t.font="".concat(u.tooltip.font.size,"px ").concat(u.tooltip.font.family);var o=t.measureText(a).width,r=t.measureText(i.label_val).width,l=r<o?o:r;l+=3*n;var s=u.tooltip.radius,c=u.tooltip.height,y=e.x+10,f=e.y+10,h=[{x:y,y:f},{x:y+l+12,y:f},{x:y+l+12,y:f+c},{x:y,y:f+c}];t.beginPath(),t.fillStyle=u.tooltip.style,t.lineJoin="round",t.moveTo(h[0].x+u.tooltip.radius,h[0].y),t.arcTo(h[1].x,h[1].y,h[2].x,h[2].y,s),t.arcTo(h[2].x,h[2].y,h[3].x,h[3].y,s),t.arcTo(h[3].x,h[3].y,h[0].x,h[0].y,s),t.arcTo(h[0].x,h[0].y,h[1].x,h[1].y,s),t.fill(),t.beginPath(),t.fillStyle="#fff",t.textAlign="left",t.textBaseline="middle",t.fillStyle=u.tooltip.font.style,t.fillText(i.label_val,y+6,f+.85*c/3),t.fillText(a,y+6+3*n,f+2.1*c/3),t.closePath(),t.stroke(),t.beginPath(),t.fillStyle=i.style,t.arc(y+6+n,f+2*c/3,n,0,2*Math.PI),t.fill()}(a.context,i,n)},n.prototype.animation=function(){var t=this,e=t.context,i=t.max_abs_data*t.phyScale/(.001*u.duration*60),n=t.canvasH+t.tick[0]*t.phyScale-u.margin.bottom;e.clearRect(0,0,t.canvasW,t.canvasH),e.save(),r(t),t.animIdx-=i;var a=t.animIdx;if(e.beginPath(),e.rect(0,n-a,t.canvasW,2*a),e.closePath(),e.clip(),t.drawBars(),t.animIdx>-1*t.max_abs_data*t.phyScale){var o=t.animation.bind(t);y.requestAnimationFrame()(o)}e.restore()},n});