vega-scenegraph
Advanced tools
Comparing version 3.2.3 to 4.0.0
@@ -1,1 +0,1 @@ | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("vega-util"),require("vega-canvas"),require("vega-loader"),require("d3-shape"),require("d3-path")):"function"==typeof define&&define.amd?define(["exports","vega-util","vega-canvas","vega-loader","d3-shape","d3-path"],e):e(t.vega={},t.vega,t.vega,t.vega,t.d3,t.d3)}(this,function(t,s,o,n,e,y){"use strict";function h(t){this.clear(),t&&this.union(t)}var i=h.prototype;i.clone=function(){return new h(this)},i.clear=function(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},i.empty=function(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},i.set=function(t,e,n,i){return n<t?(this.x2=t,this.x1=n):(this.x1=t,this.x2=n),i<e?(this.y2=e,this.y1=i):(this.y1=e,this.y2=i),this},i.add=function(t,e){return t<this.x1&&(this.x1=t),e<this.y1&&(this.y1=e),t>this.x2&&(this.x2=t),e>this.y2&&(this.y2=e),this},i.expand=function(t){return this.x1-=t,this.y1-=t,this.x2+=t,this.y2+=t,this},i.round=function(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},i.translate=function(t,e){return this.x1+=t,this.x2+=t,this.y1+=e,this.y2+=e,this},i.rotate=function(t,e,n){var i=Math.cos(t),r=Math.sin(t),o=e-e*i+n*r,a=n-e*r-n*i,s=this.x1,u=this.x2,l=this.y1,h=this.y2;return this.clear().add(i*s-r*l+o,r*s+i*l+a).add(i*s-r*h+o,r*s+i*h+a).add(i*u-r*l+o,r*u+i*l+a).add(i*u-r*h+o,r*u+i*h+a)},i.union=function(t){return t.x1<this.x1&&(this.x1=t.x1),t.y1<this.y1&&(this.y1=t.y1),t.x2>this.x2&&(this.x2=t.x2),t.y2>this.y2&&(this.y2=t.y2),this},i.intersect=function(t){return t.x1>this.x1&&(this.x1=t.x1),t.y1>this.y1&&(this.y1=t.y1),t.x2<this.x2&&(this.x2=t.x2),t.y2<this.y2&&(this.y2=t.y2),this},i.encloses=function(t){return t&&this.x1<=t.x1&&this.x2>=t.x2&&this.y1<=t.y1&&this.y2>=t.y2},i.alignsWith=function(t){return t&&(this.x1==t.x1||this.x2==t.x2||this.y1==t.y1||this.y2==t.y2)},i.intersects=function(t){return t&&!(this.x2<t.x1||this.x1>t.x2||this.y2<t.y1||this.y1>t.y2)},i.contains=function(t,e){return!(t<this.x1||t>this.x2||e<this.y1||e>this.y2)},i.width=function(){return this.x2-this.x1},i.height=function(){return this.y2-this.y1};var r=0;function a(t){this.mark=t,this.bounds=this.bounds||new h}function u(t){a.call(this,t),this.items=this.items||[]}function l(t){this._pending=0,this._loader=t||n.loader()}s.inherits(u,a);var c=l.prototype;function f(t){t._pending+=1}function d(t){t._pending-=1}c.pending=function(){return this._pending},c.sanitizeURL=function(t){var e=this;return f(e),e._loader.sanitize(t,{context:"href"}).then(function(t){return d(e),t}).catch(function(){return d(e),null})},c.loadImage=function(t){var i=this,r=o.image();return f(i),i._loader.sanitize(t,{context:"image"}).then(function(t){var e=t.href;if(!e||!r)throw{url:e};var n=new r;return n.onload=function(){d(i),n.loaded=!0},n.onerror=function(){d(i),n.loaded=!1},n.src=e,n}).catch(function(t){return d(i),{loaded:!1,width:0,height:0,src:t&&t.url||""}})},c.ready=function(){var i=this;return new Promise(function(n){!function t(e){i.pending()?setTimeout(function(){t(!0)},10):n(e)}(!1)})};var v={basis:{curve:e.curveBasis},"basis-closed":{curve:e.curveBasisClosed},"basis-open":{curve:e.curveBasisOpen},bundle:{curve:e.curveBundle,tension:"beta",value:.85},cardinal:{curve:e.curveCardinal,tension:"tension",value:0},"cardinal-open":{curve:e.curveCardinalOpen,tension:"tension",value:0},"cardinal-closed":{curve:e.curveCardinalClosed,tension:"tension",value:0},"catmull-rom":{curve:e.curveCatmullRom,tension:"alpha",value:.5},"catmull-rom-closed":{curve:e.curveCatmullRomClosed,tension:"alpha",value:.5},"catmull-rom-open":{curve:e.curveCatmullRomOpen,tension:"alpha",value:.5},linear:{curve:e.curveLinear},"linear-closed":{curve:e.curveLinearClosed},monotone:{horizontal:e.curveMonotoneY,vertical:e.curveMonotoneX},natural:{curve:e.curveNatural},step:{curve:e.curveStep},"step-after":{curve:e.curveStepAfter},"step-before":{curve:e.curveStepBefore}};function g(t,e,n){var i=v.hasOwnProperty(t)&&v[t],r=null;return i&&(r=i.curve||i[e||"vertical"],i.tension&&null!=n&&(r=r[i.tension](n))),r}var p={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},_=[/([MLHVCSQTAZmlhvcsqtaz])/g,/###/,/(\d)([-+])/g,/\s|,|###/];function m(t){var e,n,i,r,o,a,s,u,l,h,c,f=[];for(u=0,h=(e=t.slice().replace(_[0],"###$1").split(_[1]).slice(1)).length;u<h;++u){for(i=(n=e[u]).slice(1).trim().replace(_[2],"$1###$2").split(_[3]),r=[a=n.charAt(0)],l=0,c=i.length;l<c;++l)(o=+i[l])===o&&r.push(o);if(s=p[a.toLowerCase()],r.length-1>s)for(l=1,c=r.length;l<c;l+=s)f.push([a].concat(r.slice(l,l+s)));else f.push(r)}return f}var q={},C={},O=[].join;function x(t){var e=O.call(t);if(C[e])return C[e];var n=t[0],i=t[1],r=t[2],o=t[3],a=t[4],s=t[5],u=t[6],l=t[7],h=l*a,c=-u*s,f=u*a,d=l*s,v=Math.cos(r),g=Math.sin(r),p=Math.cos(o),y=Math.sin(o),_=.5*(o-r),m=Math.sin(.5*_),x=8/3*m*m/Math.sin(_),b=n+v-x*g,k=i+g+x*v,w=n+p,M=i+y,T=w+x*y,A=M-x*p;return C[e]=[h*b+c*k,f*b+d*k,h*T+c*A,f*T+d*A,h*w+c*M,f*w+d*M]}var b=["l",0,0,0,0,0,0,0];function k(t,e){var n=b[0]=t[0];if("a"===n||"A"===n)b[1]=e*t[1],b[2]=e*t[2],b[3]=t[3],b[4]=t[4],b[5]=t[5],b[6]=e*t[6],b[7]=e*t[7];else for(var i=1,r=t.length;i<r;++i)b[i]=e*t[i];return b}function w(t,e,n,i,r){var o,a,s,u,l,h=null,c=0,f=0,d=0,v=0;null==n&&(n=0),null==i&&(i=0),null==r&&(r=1),t.beginPath&&t.beginPath();for(var g=0,p=e.length;g<p;++g){switch(o=e[g],1!==r&&(o=k(o,r)),o[0]){case"l":c+=o[1],f+=o[2],t.lineTo(c+n,f+i);break;case"L":c=o[1],f=o[2],t.lineTo(c+n,f+i);break;case"h":c+=o[1],t.lineTo(c+n,f+i);break;case"H":c=o[1],t.lineTo(c+n,f+i);break;case"v":f+=o[1],t.lineTo(c+n,f+i);break;case"V":f=o[1],t.lineTo(c+n,f+i);break;case"m":c+=o[1],f+=o[2],t.moveTo(c+n,f+i);break;case"M":c=o[1],f=o[2],t.moveTo(c+n,f+i);break;case"c":a=c+o[5],s=f+o[6],d=c+o[3],v=f+o[4],t.bezierCurveTo(c+o[1]+n,f+o[2]+i,d+n,v+i,a+n,s+i),c=a,f=s;break;case"C":c=o[5],f=o[6],d=o[3],v=o[4],t.bezierCurveTo(o[1]+n,o[2]+i,d+n,v+i,c+n,f+i);break;case"s":a=c+o[3],s=f+o[4],d=2*c-d,v=2*f-v,t.bezierCurveTo(d+n,v+i,c+o[1]+n,f+o[2]+i,a+n,s+i),d=c+o[1],v=f+o[2],c=a,f=s;break;case"S":a=o[3],s=o[4],d=2*c-d,v=2*f-v,t.bezierCurveTo(d+n,v+i,o[1]+n,o[2]+i,a+n,s+i),c=a,f=s,d=o[1],v=o[2];break;case"q":a=c+o[3],s=f+o[4],d=c+o[1],v=f+o[2],t.quadraticCurveTo(d+n,v+i,a+n,s+i),c=a,f=s;break;case"Q":a=o[3],s=o[4],t.quadraticCurveTo(o[1]+n,o[2]+i,a+n,s+i),c=a,f=s,d=o[1],v=o[2];break;case"t":a=c+o[1],s=f+o[2],null===h[0].match(/[QqTt]/)?(d=c,v=f):"t"===h[0]?(d=2*c-u,v=2*f-l):"q"===h[0]&&(d=2*c-d,v=2*f-v),u=d,l=v,t.quadraticCurveTo(d+n,v+i,a+n,s+i),f=s,d=(c=a)+o[1],v=f+o[2];break;case"T":a=o[1],s=o[2],d=2*c-d,v=2*f-v,t.quadraticCurveTo(d+n,v+i,a+n,s+i),c=a,f=s;break;case"a":M(t,c+n,f+i,[o[1],o[2],o[3],o[4],o[5],o[6]+c+n,o[7]+f+i]),c+=o[6],f+=o[7];break;case"A":M(t,c+n,f+i,[o[1],o[2],o[3],o[4],o[5],o[6]+n,o[7]+i]),c=o[6],f=o[7];break;case"z":case"Z":t.closePath()}h=o}}function M(t,e,n,i){for(var r=function(t,e,n,i,r,o,a,s,u){var l=O.call(arguments);if(q[l])return q[l];var h=a*(Math.PI/180),c=Math.sin(h),f=Math.cos(h),d=f*(s-t)*.5+c*(u-e)*.5,v=f*(u-e)*.5-c*(s-t)*.5,g=d*d/((n=Math.abs(n))*n)+v*v/((i=Math.abs(i))*i);1<g&&(n*=g=Math.sqrt(g),i*=g);var p=f/n,y=c/n,_=-c/i,m=f/i,x=p*s+y*u,b=_*s+m*u,k=p*t+y*e,w=_*t+m*e,M=1/((k-x)*(k-x)+(w-b)*(w-b))-.25;M<0&&(M=0);var T=Math.sqrt(M);o==r&&(T=-T);var A=.5*(x+k)-T*(w-b),C=.5*(b+w)+T*(k-x),z=Math.atan2(b-C,x-A),P=Math.atan2(w-C,k-A)-z;P<0&&1===o?P+=2*Math.PI:0<P&&0===o&&(P-=2*Math.PI);for(var S=Math.ceil(Math.abs(P/(.5*Math.PI+.001))),L=[],R=0;R<S;++R){var I=z+R*P/S,N=z+(R+1)*P/S;L[R]=[A,C,I,N,n,i,c,f]}return q[l]=L}(i[5],i[6],i[0],i[1],i[3],i[4],i[2],e,n),o=0;o<r.length;++o){var a=x(r[o]);t.bezierCurveTo(a[0],a[1],a[2],a[3],a[4],a[5])}}var T=2*Math.PI,A=Math.sqrt(3)/2,z={circle:{draw:function(t,e){var n=Math.sqrt(e)/2;t.moveTo(n,0),t.arc(0,0,n,0,T)}},cross:{draw:function(t,e){var n=Math.sqrt(e)/2,i=n/2.5;t.moveTo(-n,-i),t.lineTo(-n,i),t.lineTo(-i,i),t.lineTo(-i,n),t.lineTo(i,n),t.lineTo(i,i),t.lineTo(n,i),t.lineTo(n,-i),t.lineTo(i,-i),t.lineTo(i,-n),t.lineTo(-i,-n),t.lineTo(-i,-i),t.closePath()}},diamond:{draw:function(t,e){var n=Math.sqrt(e)/2;t.moveTo(-n,0),t.lineTo(0,-n),t.lineTo(n,0),t.lineTo(0,n),t.closePath()}},square:{draw:function(t,e){var n=Math.sqrt(e),i=-n/2;t.rect(i,i,n,n)}},"triangle-up":{draw:function(t,e){var n=Math.sqrt(e)/2,i=A*n;t.moveTo(0,-i),t.lineTo(-n,i),t.lineTo(n,i),t.closePath()}},"triangle-down":{draw:function(t,e){var n=Math.sqrt(e)/2,i=A*n;t.moveTo(0,i),t.lineTo(-n,-i),t.lineTo(n,-i),t.closePath()}},"triangle-right":{draw:function(t,e){var n=Math.sqrt(e)/2,i=A*n;t.moveTo(i,0),t.lineTo(-i,-n),t.lineTo(-i,n),t.closePath()}},"triangle-left":{draw:function(t,e){var n=Math.sqrt(e)/2,i=A*n;t.moveTo(-i,0),t.lineTo(i,-n),t.lineTo(i,n),t.closePath()}}};function P(t){return z.hasOwnProperty(t)?z[t]:function(t){if(!S.hasOwnProperty(t)){var n=m(t);S[t]={draw:function(t,e){w(t,n,0,0,Math.sqrt(e)/2)}}}return S[t]}(t)}var S={};function L(t){return t.x}function R(t){return t.y}function I(t){return t.width}function N(t){return t.height}function E(t){return function(){return t}}function D(){var c=L,f=R,d=I,v=N,g=E(0),p=null;function e(t,e,n){var i,r=null!=e?e:+c.call(this,t),o=null!=n?n:+f.call(this,t),a=+d.call(this,t),s=+v.call(this,t),u=+g.call(this,t);if(p||(p=i=y.path()),u<=0)p.rect(r,o,a,s);else{var l=r+a,h=o+s;p.moveTo(r+u,o),p.lineTo(l-u,o),p.quadraticCurveTo(l,o,l,o+u),p.lineTo(l,h-u),p.quadraticCurveTo(l,h,l-u,h),p.lineTo(r+u,h),p.quadraticCurveTo(r,h,r,h-u),p.lineTo(r,o+u),p.quadraticCurveTo(r,o,r+u,o),p.closePath()}if(i)return p=null,i+""||null}return e.x=function(t){return arguments.length?(c="function"==typeof t?t:E(+t),e):c},e.y=function(t){return arguments.length?(f="function"==typeof t?t:E(+t),e):f},e.width=function(t){return arguments.length?(d="function"==typeof t?t:E(+t),e):d},e.height=function(t){return arguments.length?(v="function"==typeof t?t:E(+t),e):v},e.cornerRadius=function(t){return arguments.length?(g="function"==typeof t?t:E(+t),e):g},e.context=function(t){return arguments.length?(p=null==t?null:t,e):p},e}var V=Math.PI;function H(){var a,s,u,l,h,c,f,d,v=null;function g(t,e,n){var i=n/2;if(h){var r=f-e,o=t-c;if(r||o){var a=Math.sqrt(r*r+o*o),s=(r/=a)*d,u=(o/=a)*d,l=Math.atan2(o,r);v.moveTo(c-s,f-u),v.lineTo(t-r*i,e-o*i),v.arc(t,e,i,l-V,l),v.lineTo(c+s,f+u),v.arc(c,f,d,l,l+V)}else v.arc(t,e,i,0,2*V);v.closePath()}else h=1;c=t,f=e,d=i}function e(t){var e,n,i,r=t.length,o=!1;for(null==v&&(v=i=y.path()),e=0;e<=r;++e)!(e<r&&l(n=t[e],e,t))===o&&(o=!o)&&(h=0),o&&g(+a(n,e,t),+s(n,e,t),+u(n,e,t));if(i)return v=null,i+""||null}return e.x=function(t){return arguments.length?(a=t,e):a},e.y=function(t){return arguments.length?(s=t,e):s},e.size=function(t){return arguments.length?(u=t,e):u},e.defined=function(t){return arguments.length?(l=t,e):l},e.context=function(t){return arguments.length?(v=null==t?null:t,e):v},e}function W(t){return t.x||0}function G(t){return t.y||0}function B(t){return t.cornerRadius||0}function j(t){return!(!1===t.defined)}var U=e.arc().startAngle(function(t){return t.startAngle||0}).endAngle(function(t){return t.endAngle||0}).padAngle(function(t){return t.padAngle||0}).innerRadius(function(t){return t.innerRadius||0}).outerRadius(function(t){return t.outerRadius||0}).cornerRadius(B),X=e.area().x(W).y1(G).y0(function(t){return(t.y||0)+(t.height||0)}).defined(j),J=e.area().y(G).x1(W).x0(function(t){return(t.x||0)+(t.width||0)}).defined(j),F=e.line().x(W).y(G).defined(j),Q=D().x(W).y(G).width(function(t){return t.width||0}).height(function(t){return t.height||0}).cornerRadius(B),Y=e.symbol().type(function(t){return P(t.shape||"circle")}).size(function(t){return null==t.size?64:t.size}),Z=H().x(W).y(G).defined(j).size(function(t){return t.size||1});function $(t,e,n,i){return Q.context(t)(e,n,i)}function K(t,e){return e.stroke&&0!==e.opacity&&0!==e.strokeOpacity&&t.expand(null!=e.strokeWidth?+e.strokeWidth:1),t}var tt,et=2*Math.PI,nt=et/4,it=et-1e-8;function rt(t){return tt=t,rt}function ot(){}function at(t,e){tt.add(t,e)}function st(t,e,n){return n.id?function(t,e,n){for(var i=n.width(),r=n.height(),o=n.x1+e.x1*i,a=n.y1+e.y1*r,s=n.x1+e.x2*i,u=n.y1+e.y2*r,l=e.stops,h=0,c=l.length,f=t.createLinearGradient(o,a,s,u);h<c;++h)f.addColorStop(l[h].offset,l[h].color);return f}(t,n,e.bounds):n}function ut(t,e,n){return 0<(n*=null==e.fillOpacity?1:e.fillOpacity)&&(t.globalAlpha=n,t.fillStyle=st(t,e,e.fill),!0)}rt.beginPath=ot,rt.closePath=ot,rt.moveTo=at,rt.lineTo=at,rt.rect=function(t,e,n,i){at(t,e),at(t+n,e+i)},rt.quadraticCurveTo=function(t,e,n,i){at(t,e),at(n,i)},rt.bezierCurveTo=function(t,e,n,i,r,o){at(t,e),at(n,i),at(r,o)},rt.arc=function(t,e,n,i,r,o){if(Math.abs(r-i)>it)return at(t-n,e-n),void at(t+n,e+n);var a,s,u,l,h=1/0,c=-1/0,f=1/0,d=-1/0;function v(t){u=n*Math.cos(t),l=n*Math.sin(t),u<h&&(h=u),c<u&&(c=u),l<f&&(f=l),d<l&&(d=l)}if(v(i),v(r),r!==i)if((i%=et)<0&&(i+=et),(r%=et)<0&&(r+=et),r<i&&(o=!o,a=i,i=r,r=a),o)for(r-=et,a=i-i%nt,s=0;s<4&&r<a;++s,a-=nt)v(a);else for(a=i-i%nt+nt,s=0;s<4&&a<r;++s,a+=nt)v(a);at(t+h,e+f),at(t+c,e+d)};var lt=[];function ht(t,e,n){var i=null!=(i=e.strokeWidth)?i:1;return!(i<=0)&&(0<(n*=null==e.strokeOpacity?1:e.strokeOpacity)&&(t.globalAlpha=n,t.strokeStyle=st(t,e,e.stroke),t.lineWidth=i,t.lineCap=e.strokeCap||"butt",t.lineJoin=e.strokeJoin||"miter",t.miterLimit=e.strokeMiterLimit||10,t.setLineDash&&(t.setLineDash(e.strokeDash||lt),t.lineDashOffset=e.strokeDashOffset||0),!0))}function ct(t,e){return t.zindex-e.zindex||t.index-e.index}function ft(t){if(!t.zdirty)return t.zitems;var e,n,i,r=t.items,o=[];for(n=0,i=r.length;n<i;++n)(e=r[n]).index=n,e.zindex&&o.push(e);return t.zdirty=!1,t.zitems=o.sort(ct)}function dt(t,e){var n,i,r=t.items;if(r&&r.length){var o=ft(t);if(o&&o.length){for(n=0,i=r.length;n<i;++n)r[n].zindex||e(r[n]);r=o}for(n=0,i=r.length;n<i;++n)e(r[n])}}function vt(t,e){var n,i,r=t.items;if(!r||!r.length)return null;var o=ft(t);for(o&&o.length&&(r=o),i=r.length;0<=--i;)if(n=e(r[i]))return n;if(r===o)for(i=(r=t.items).length;0<=--i;)if(!r[i].zindex&&(n=e(r[i])))return n;return null}function gt(i){return function(e,t,n){dt(t,function(t){n&&!n.intersects(t.bounds)||pt(i,e,t,t)})}}function pt(t,e,n,i){var r=null==n.opacity?1:n.opacity;0!==r&&(t(e,i)||(n.fill&&ut(e,n,r)&&e.fill(),n.stroke&&ht(e,n,r)&&e.stroke()))}var yt=function(){return!0};function _t(s){return s||(s=yt),function(n,t,i,r,o,a){return i*=n.pixelRatio,r*=n.pixelRatio,vt(t,function(t){var e=t.bounds;if((!e||e.contains(o,a))&&e)return s(n,t,i,r,o,a)?t:void 0})}}function mt(l,h){return function(t,e,n,i){var r,o,a=Array.isArray(e)?e[0]:e,s=null==h?a.fill:h,u=a.stroke&&t.isPointInStroke;return u&&(r=a.strokeWidth,o=a.strokeCap,t.lineWidth=null!=r?r:1,t.lineCap=null!=o?o:"butt"),!l(t,e)&&(s&&t.isPointInPath(n,i)||u&&t.isPointInStroke(n,i))}}function xt(t){return _t(mt(t))}function bt(t,e){return"translate("+t+","+e+")"}function kt(t){return bt(t.x||0,t.y||0)}function wt(t,r){function e(t,e){var n=e.x||0,i=e.y||0;t.translate(n,i),t.beginPath(),r(t,e),t.translate(-n,-i)}return{type:t,tag:"path",nested:!1,attr:function(t,e){t("transform",kt(e)),t("d",r(null,e))},bound:function(t,e){return r(rt(t),e),K(t,e).translate(e.x||0,e.y||0)},draw:gt(e),pick:xt(e)}}var Mt=wt("arc",function(t,e){return U.context(t)(e)});function Tt(t,i,e){function n(t,e){t.beginPath(),i(t,e)}var r,u=mt(n);return{type:t,tag:"path",nested:!0,attr:function(t,e){var n=e.mark.items;n.length&&t("d",i(null,n))},bound:function(t,e){var n=e.items;return 0===n.length?t:(i(rt(t),n),K(t,n[0]))},draw:(r=n,function(t,e,n){!e.items.length||n&&!n.intersects(e.bounds)||pt(r,t,e.items[0],e.items)}),pick:function(t,e,n,i,r,o){var a=e.items,s=e.bounds;return!a||!a.length||s&&!s.contains(r,o)?null:(n*=t.pixelRatio,i*=t.pixelRatio,u(t,a,n,i)?a[0]:null)},tip:e}}var At=Tt("area",function(t,e){var n=e[0],i=n.interpolate||"linear";return("horizontal"===n.orient?J:X).curve(g(i,n.orient,n.tension)).context(t)(e)},function(t,e){for(var n,i,r="horizontal"===t[0].orient?e[1]:e[0],o="horizontal"===t[0].orient?"y":"x",a=t.length,s=1/0;0<=--a;)!1!==t[a].defined&&(i=Math.abs(t[a][o]-r))<s&&(s=i,n=t[a]);return n}),Ct=1;function zt(t,e,n){var i=e.clip,r=t._defs,o=e.clip_id||(e.clip_id="clip"+Ct++),a=r.clipping[o]||(r.clipping[o]={id:o});return s.isFunction(i)?a.path=i(null):(a.width=n.width||0,a.height=n.height||0),"url(#"+o+")"}var Pt=.5;function St(t,e){var n=e.stroke?Pt:0;t.beginPath(),$(t,e,n,n)}var Lt=mt(St);var Rt={type:"group",tag:"g",nested:!1,attr:function(t,e){t("transform",kt(e))},bound:function(t,e){if(!e.clip&&e.items)for(var n=e.items,i=0,r=n.length;i<r;++i)t.union(n[i].bounds);return(e.clip||e.width||e.height)&&!e.noBound&&t.add(0,0).add(e.width||0,e.height||0),K(t,e),t.translate(e.x||0,e.y||0)},draw:function(a,t,s){var u=this;dt(t,function(t){var e,n=t.x||0,i=t.y||0,r=t.width||0,o=t.height||0;a.save(),a.translate(n,i),(t.stroke||t.fill)&&0<(e=null==t.opacity?1:t.opacity)&&(St(a,t),t.fill&&ut(a,t,e)&&a.fill(),t.stroke&&ht(a,t,e)&&a.stroke()),t.clip&&(a.beginPath(),a.rect(0,0,r,o),a.clip()),s&&s.translate(-n,-i),dt(t,function(t){u.draw(a,t,s)}),s&&s.translate(n,i),a.restore()})},pick:function(i,a,s,u,l,h){if(a.bounds&&!a.bounds.contains(l,h)||!a.items)return null;var c=this,f=s*i.pixelRatio,d=u*i.pixelRatio;return vt(a,function(t){var e,r,o,n;if(!(n=t.bounds)||n.contains(l,h))return r=t.x||0,o=t.y||0,i.save(),i.translate(r,o),r=l-r,o=h-o,!(e=vt(t,function(t){return n=r,i=o,(!1!==(e=t).interactive||"group"===e.marktype)&&e.bounds&&e.bounds.contains(n,i)?c.pick(t,s,u,r,o):null;var e,n,i}))&&!1!==a.interactive&&(t.fill||t.stroke)&&Lt(i,t,f,d)&&(e=t),i.restore(),e||null})},background:function(t,e){var n=e.stroke?Pt:0;t("class","background"),t("d",$(null,e,n,n))},foreground:function(t,e,n){t("clip-path",e.clip?zt(n,e,e):null)}};function It(e,t){var n=e.image;return n&&n.url===e.url||(n={loaded:!1,width:0,height:0},t.loadImage(e.url).then(function(t){e.image=t,e.image.url=e.url})),n}function Nt(t,e){return"center"===t?e/2:"right"===t?e:0}function qt(t,e){return"middle"===t?e/2:"bottom"===t?e:0}var Ot={type:"image",tag:"image",nested:!1,attr:function(t,e,n){var i=It(e,n),r=e.x||0,o=e.y||0,a=(null!=e.width?e.width:i.width)||0,s=(null!=e.height?e.height:i.height)||0,u=!1===e.aspect?"none":"xMidYMid";r-=Nt(e.align,a),o-=qt(e.baseline,s),t("href",i.src||"","http://www.w3.org/1999/xlink","xlink:href"),t("transform",bt(r,o)),t("width",a),t("height",s),t("preserveAspectRatio",u)},bound:function(t,e){var n=e.image,i=e.x||0,r=e.y||0,o=(null!=e.width?e.width:n&&n.width)||0,a=(null!=e.height?e.height:n&&n.height)||0;return i-=Nt(e.align,o),r-=qt(e.baseline,a),t.set(i,r,i+o,r+a)},draw:function(h,t,c){var f=this;dt(t,function(t){if(!c||c.intersects(t.bounds)){var e,n,i,r,o=It(t,f),a=t.x||0,s=t.y||0,u=(null!=t.width?t.width:o.width)||0,l=(null!=t.height?t.height:o.height)||0;a-=Nt(t.align,u),s-=qt(t.baseline,l),!1!==t.aspect&&(n=o.width/o.height,i=t.width/t.height,n==n&&i==i&&n!==i&&(i<n?(s+=(l-(r=u/n))/2,l=r):(a+=(u-(r=l*n))/2,u=r))),o.loaded&&(h.globalAlpha=null!=(e=t.opacity)?e:1,h.drawImage(o,a,s,u,l))}})},pick:_t(),get:It,xOffset:Nt,yOffset:qt},Et=Tt("line",function(t,e){var n=e[0],i=n.interpolate||"linear";return F.curve(g(i,n.orient,n.tension)).context(t)(e)},function(t,e){for(var n,i,r=Math.pow(t[0].strokeWidth||1,2),o=t.length;0<=--o;)if(!1!==t[o].defined&&(n=t[o].x-e[0])*n+(i=t[o].y-e[1])*i<r)return t[o];return null});function Dt(t,e){var n=e.path;if(null==n)return!0;var i=e.pathCache;i&&i.path===n||((e.pathCache=i=m(n)).path=n),w(t,i,e.x,e.y)}var Vt={type:"path",tag:"path",nested:!1,attr:function(t,e){t("transform",kt(e)),t("d",e.path)},bound:function(t,e){return Dt(rt(t),e)?t.set(0,0,0,0):K(t,e)},draw:gt(Dt),pick:xt(Dt)};function Ht(t,e){t.beginPath(),$(t,e)}var Wt={type:"rect",tag:"path",nested:!1,attr:function(t,e){t("d",$(null,e))},bound:function(t,e){var n,i;return K(t.set(n=e.x||0,i=e.y||0,n+e.width||0,i+e.height||0),e)},draw:gt(Ht),pick:xt(Ht)};function Gt(t,e,n){var i,r,o,a;return!(!e.stroke||!ht(t,e,n))&&(i=e.x||0,r=e.y||0,o=null!=e.x2?e.x2:i,a=null!=e.y2?e.y2:r,t.beginPath(),t.moveTo(i,r),t.lineTo(o,a),!0)}var Bt,jt,Ut={type:"rule",tag:"line",nested:!1,attr:function(t,e){t("transform",kt(e)),t("x2",null!=e.x2?e.x2-(e.x||0):0),t("y2",null!=e.y2?e.y2-(e.y||0):0)},bound:function(t,e){var n,i;return K(t.set(n=e.x||0,i=e.y||0,null!=e.x2?e.x2:n,null!=e.y2?e.y2:i),e)},draw:function(n,t,i){dt(t,function(t){if(!i||i.intersects(t.bounds)){var e=null==t.opacity?1:t.opacity;e&&Gt(n,t,e)&&n.stroke()}})},pick:_t(function(t,e,n,i){return!!t.isPointInStroke&&Gt(t,e,1)&&t.isPointInStroke(n,i)})},Xt=wt("shape",function(t,e){return(e.mark.shape||e.shape).context(t)(e)}),Jt=wt("symbol",function(t,e){return Y.context(t)(e)}),Ft={height:Kt,measureWidth:Zt,estimateWidth:Qt,width:Qt,canvas:te};function Qt(t){return jt=Kt(t),Yt(ee(t))}function Yt(t){return~~(.8*t.length*jt)}function Zt(t){return Bt.font=ie(t),$t(ee(t))}function $t(t){return Bt.measureText(t).width}function Kt(t){return null!=t.fontSize?t.fontSize:11}function te(t){Bt=t&&(Bt=o.canvas(1,1))?Bt.getContext("2d"):null,Ft.width=Bt?Zt:Qt}function ee(t){var e=t.text;return null==e?"":0<t.limit?function(t){var e,n=+t.limit,i=t.text+"";e=Bt?(Bt.font=ie(t),$t):(jt=Kt(t),Yt);if(e(i)<n)return i;var r,o=t.ellipsis||"…",a="rtl"===t.dir,s=0,u=i.length;{if(n-=e(o),a){for(;s<u;)r=s+u>>>1,e(i.slice(r))>n?s=r+1:u=r;return o+i.slice(s)}for(;s<u;)r=1+(s+u>>>1),e(i.slice(0,r))<n?s=r:u=r-1;return i.slice(0,s)+o}}(t):e+""}function ne(t,e){var n=t.font;return(e&&n?String(n).replace(/"/g,"'"):n)||"sans-serif"}function ie(t,e){return(t.fontStyle?t.fontStyle+" ":"")+(t.fontVariant?t.fontVariant+" ":"")+(t.fontWeight?t.fontWeight+" ":"")+Kt(t)+"px "+ne(t,e)}function re(t){var e=t.baseline,n=Kt(t);return Math.round("top"===e?.79*n:"middle"===e?.3*n:"bottom"===e?-.21*n:0)}te(!0);var oe={left:"start",center:"middle",right:"end"},ae=new h;function se(t,e,n){var i,r,o=Ft.height(e),a=e.align,s=e.radius||0,u=e.x||0,l=e.y||0,h=e.dx||0,c=(e.dy||0)+re(e)-Math.round(.8*o);return s&&(r=(e.theta||0)-Math.PI/2,u+=s*Math.cos(r),l+=s*Math.sin(r)),i=Ft.width(e),"center"===a?h-=i/2:"right"===a&&(h-=i),t.set(h+=u,c+=l,h+i,c+o),e.angle&&!n&&t.rotate(e.angle*Math.PI/180,u,l),t.expand(n||!i?0:1)}var ue={arc:Mt,area:At,group:Rt,image:Ot,line:Et,path:Vt,rect:Wt,rule:Ut,shape:Xt,symbol:Jt,text:{type:"text",tag:"text",nested:!1,attr:function(t,e){var n,i=e.dx||0,r=(e.dy||0)+re(e),o=e.x||0,a=e.y||0,s=e.angle||0,u=e.radius||0;u&&(n=(e.theta||0)-Math.PI/2,o+=u*Math.cos(n),a+=u*Math.sin(n)),t("text-anchor",oe[e.align]||"start"),s?(n=bt(o,a)+" rotate("+s+")",(i||r)&&(n+=" "+bt(i,r))):n=bt(o+i,a+r),t("transform",n)},bound:se,draw:function(s,t,u){dt(t,function(t){var e,n,i,r,o,a;u&&!u.intersects(t.bounds)||(a=ee(t))&&0!==(e=null==t.opacity?1:t.opacity)&&(s.font=ie(t),s.textAlign=t.align||"left",n=t.x||0,i=t.y||0,(r=t.radius)&&(o=(t.theta||0)-Math.PI/2,n+=r*Math.cos(o),i+=r*Math.sin(o)),t.angle&&(s.save(),s.translate(n,i),s.rotate(t.angle*Math.PI/180),n=i=0),n+=t.dx||0,i+=(t.dy||0)+re(t),t.fill&&ut(s,t,e)&&s.fillText(a,n,i),t.stroke&&ht(s,t,e)&&s.strokeText(a,n,i),t.angle&&s.restore())})},pick:_t(function(t,e,n,i,r,o){if(e.fontSize<=0)return!1;if(!e.angle)return!0;var a=se(ae,e,!0),s=-e.angle*Math.PI/180,u=Math.cos(s),l=Math.sin(s),h=e.x,c=e.y,f=u*r-l*o+(h-h*u+c*l),d=l*r+u*o+(c-h*l-c*u);return a.contains(f,d)})},trail:Tt("trail",function(t,e){return Z.context(t)(e)},function(t,e){for(var n,i,r=t.length;0<=--r;)if(!1!==t[r].defined&&(n=t[r].x-e[0])*n+(i=t[r].y-e[1])*i<(n=t[r].size||1)*n)return t[r];return null})};function le(t,e,n){var i=ue[t.mark.marktype],r=e||i.bound;return i.nested&&(t=t.mark),r(t.bounds||(t.bounds=new h),t,n)}var he={mark:null};function ce(t,e,n){var i,r,o,a=ue[t.marktype],s=a.bound,u=t.items,l=u&&u.length;if(a.nested)return o=le(l?u[0]:(he.mark=t,he),s,n),e=e&&e.union(o)||o;if(e=e||t.bounds&&t.bounds.clear()||new h,l)for(i=0,r=u.length;i<r;++i)e.union(le(u[i],s,n));return t.bounds=e}var fe=["marktype","name","role","interactive","clip","items","zindex","x","y","width","height","align","baseline","fill","fillOpacity","opacity","stroke","strokeOpacity","strokeWidth","strokeCap","strokeDash","strokeDashOffset","startAngle","endAngle","innerRadius","outerRadius","cornerRadius","padAngle","interpolate","tension","orient","defined","url","path","x2","y2","size","shape","text","angle","theta","radius","dx","dy","font","fontSize","fontWeight","fontStyle","fontVariant"];function de(t,e){return JSON.stringify(t,fe,e)}function ve(t){return function t(e){var n,i,r,o=e.marktype,a=e.items;if(a)for(i=0,r=a.length;i<r;++i)n=o?"mark":"group",a[i][n]=e,a[i].zindex&&(a[i][n].zdirty=!0),"group"===(o||n)&&t(a[i]);o&&ce(e);return e}("string"==typeof t?JSON.parse(t):t)}function ge(t){arguments.length?this.root=ve(t):(this.root=ye({marktype:"group",name:"root",role:"frame"}),this.root.items=[new u(this.root)])}var pe=ge.prototype;function ye(t,e){return{bounds:new h,clip:!!t.clip,group:e,interactive:!1!==t.interactive,items:[],marktype:t.marktype,name:t.name||void 0,role:t.role||void 0,zindex:t.zindex||0}}function _e(t,e,n){return!t&&"undefined"!=typeof document&&document.createElement&&(t=document),t?n?t.createElementNS(n,e):t.createElement(e):null}function me(t,e){e=e.toLowerCase();for(var n=t.childNodes,i=0,r=n.length;i<r;++i)if(n[i].tagName.toLowerCase()===e)return n[i]}function xe(t,e,n,i){var r,o=t.childNodes[e];return o&&o.tagName.toLowerCase()===n.toLowerCase()||(r=o||null,o=_e(t.ownerDocument,n,i),t.insertBefore(o,r)),o}function be(t,e){for(var n=t.childNodes,i=n.length;e<i;)t.removeChild(n[--i]);return t}function ke(t){return"mark-"+t.marktype+(t.role?" role-"+t.role:"")+(t.name?" "+t.name:"")}function we(t,e){var n=e.getBoundingClientRect();return[t.clientX-n.left-(e.clientLeft||0),t.clientY-n.top-(e.clientTop||0)]}function Me(t,e){this._active=null,this._handlers={},this._loader=t||n.loader(),this._tooltip=e||Te}function Te(t,e,n,i){t.element().setAttribute("title",i||"")}pe.toJSON=function(t){return de(this.root,t||0)},pe.mark=function(t,e,n){var i=ye(t,e=e||this.root.items[0]);return(e.items[n]=i).zindex&&(i.group.zdirty=!0),i};var Ae=Me.prototype;function Ce(t){this._el=null,this._bgcolor=null,this._loader=new l(t)}Ae.initialize=function(t,e,n){return this._el=t,this._obj=n||null,this.origin(e)},Ae.element=function(){return this._el},Ae.canvas=function(){return this._el&&this._el.firstChild},Ae.origin=function(t){return arguments.length?(this._origin=t||[0,0],this):this._origin.slice()},Ae.scene=function(t){return arguments.length?(this._scene=t,this):this._scene},Ae.on=function(){},Ae.off=function(){},Ae._handlerIndex=function(t,e,n){for(var i=t?t.length:0;0<=--i;)if(t[i].type===e&&(!n||t[i].handler===n))return i;return-1},Ae.handlers=function(t){var e,n=this._handlers,i=[];if(t)i.push.apply(i,n[this.eventName(t)]);else for(e in n)i.push.apply(i,n[e]);return i},Ae.eventName=function(t){var e=t.indexOf(".");return e<0?t:t.slice(0,e)},Ae.handleHref=function(r,t,e){this._loader.sanitize(e,{context:"href"}).then(function(t){var e=new MouseEvent(r.type,r),n=_e(null,"a");for(var i in t)n.setAttribute(i,t[i]);n.dispatchEvent(e)}).catch(function(){})},Ae.handleTooltip=function(t,e,n){if(e&&null!=e.tooltip){e=function(t,e,n,i){var r,o,a=t&&t.mark;if(a&&(r=ue[a.marktype]).tip){for((o=we(e,n))[0]-=i[0],o[1]-=i[1];t=t.mark.group;)o[0]-=t.x||0,o[1]-=t.y||0;t=r.tip(a.items,o)}return t}(e,t,this.canvas(),this._origin);var i=n&&e&&e.tooltip||null;this._tooltip.call(this._obj,this,t,e,i)}},Ae.getItemBoundingClientRect=function(t){if(e=this.canvas()){for(var e,n=e.getBoundingClientRect(),i=this._origin,r=t.bounds,o=r.x1+i[0]+n.left,a=r.y1+i[1]+n.top,s=r.width(),u=r.height();t.mark&&(t=t.mark.group);)o+=t.x||0,a+=t.y||0;return{x:o,y:a,width:s,height:u,left:o,top:a,right:o+s,bottom:a+u}}};var ze=Ce.prototype;ze.initialize=function(t,e,n,i,r){return this._el=t,this.resize(e,n,i,r)},ze.element=function(){return this._el},ze.canvas=function(){return this._el&&this._el.firstChild},ze.background=function(t){return 0===arguments.length?this._bgcolor:(this._bgcolor=t,this)},ze.resize=function(t,e,n,i){return this._width=t,this._height=e,this._origin=n||[0,0],this._scale=i||1,this},ze.dirty=function(){},ze.render=function(t){var e=this;return e._call=function(){e._render(t)},e._call(),e._call=null,e},ze._render=function(){},ze.renderAsync=function(t){var e=this.render(t);return this._ready?this._ready.then(function(){return e}):Promise.resolve(e)},ze._load=function(t,e){var n=this,i=n._loader[t](e);if(!n._ready){var r=n._call;n._ready=n._loader.ready().then(function(t){t&&r(),n._ready=null})}return i},ze.sanitizeURL=function(t){return this._load("sanitizeURL",t)},ze.loadImage=function(t){return this._load("loadImage",t)};var Pe="mousemove",Se="mouseout",Le="click";function Re(t,e){Me.call(this,t,e),this._down=null,this._touch=null,this._first=!0}var Ie=s.inherits(Re,Me);function Ne(i,r,o){return function(t){var e=this._active,n=this.pickEvent(t);n===e||(e&&e.exit||this.fire(o,t),this._active=n,this.fire(r,t)),this.fire(i,t)}}function qe(e){return function(t){this.fire(e,t),this._active=null}}Ie.initialize=function(t,e,n){var i=this._canvas=t&&me(t,"canvas");if(i){var r=this;this.events.forEach(function(e){i.addEventListener(e,function(t){Ie[e]?Ie[e].call(r,t):r.fire(e,t)})})}return Me.prototype.initialize.call(this,t,e,n)},Ie.canvas=function(){return this._canvas},Ie.context=function(){return this._canvas.getContext("2d")},Ie.events=["keydown","keypress","keyup","dragenter","dragleave","dragover","mousedown","mouseup","mousemove","mouseout","mouseover","click","dblclick","wheel","mousewheel","touchstart","touchmove","touchend"],Ie.DOMMouseScroll=function(t){this.fire("mousewheel",t)},Ie.mousemove=Ne("mousemove","mouseover","mouseout"),Ie.dragover=Ne("dragover","dragenter","dragleave"),Ie.mouseout=qe("mouseout"),Ie.dragleave=qe("dragleave"),Ie.mousedown=function(t){this._down=this._active,this.fire("mousedown",t)},Ie.click=function(t){this._down===this._active&&(this.fire("click",t),this._down=null)},Ie.touchstart=function(t){this._touch=this.pickEvent(t.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire("touchstart",t,!0)},Ie.touchmove=function(t){this.fire("touchmove",t,!0)},Ie.touchend=function(t){this.fire("touchend",t,!0),this._touch=null},Ie.fire=function(t,e,n){var i,r,o=n?this._touch:this._active,a=this._handlers[t];if((e.vegaType=t)===Le&&o&&o.href?this.handleHref(e,o,o.href):t!==Pe&&t!==Se||this.handleTooltip(e,o,t!==Se),a)for(i=0,r=a.length;i<r;++i)a[i].handler.call(this._obj,e,o)},Ie.on=function(t,e){var n=this.eventName(t),i=this._handlers;return this._handlerIndex(i[n],t,e)<0&&(i[n]||(i[n]=[])).push({type:t,handler:e}),this},Ie.off=function(t,e){var n=this.eventName(t),i=this._handlers[n],r=this._handlerIndex(i,t,e);return 0<=r&&i.splice(r,1),this},Ie.pickEvent=function(t){var e=we(t,this._canvas),n=this._origin;return this.pick(this._scene,e[0],e[1],e[0]-n[0],e[1]-n[1])},Ie.pick=function(t,e,n,i,r){var o=this.context();return ue[t.marktype].pick.call(this,o,t,e,n,i,r)};var Oe="undefined"!=typeof window&&window.devicePixelRatio||1;function Ee(t){Ce.call(this,t),this._redraw=!1,this._dirty=new h}var De=s.inherits(Ee,Ce),Ve=Ce.prototype,He=new h;function We(t,e){Me.call(this,t,e);var n=this;n._hrefHandler=Be(n,function(t,e){e&&e.href&&n.handleHref(t,e,e.href)}),n._tooltipHandler=Be(n,function(t,e){n.handleTooltip(t,e,t.type!==Se)})}De.initialize=function(t,e,n,i,r){return this._canvas=o.canvas(1,1),t&&(be(t,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),Ve.initialize.call(this,t,e,n,i,r)},De.resize=function(t,e,n,i){var r,o,a,s,u,l,h,c;return Ve.resize.call(this,t,e,n,i),r=this._canvas,o=this._width,a=this._height,s=this._origin,u=this._scale,l="undefined"!=typeof HTMLElement&&r instanceof HTMLElement&&null!=r.parentNode,h=r.getContext("2d"),c=l?Oe:u,r.width=o*c,r.height=a*c,l&&1!==c&&(r.style.width=o+"px",r.style.height=a+"px"),h.pixelRatio=c,h.setTransform(c,0,0,c,c*s[0],c*s[1]),this._redraw=!0,this},De.canvas=function(){return this._canvas},De.context=function(){return this._canvas?this._canvas.getContext("2d"):null},De.dirty=function(t){var e=function(t,e){if(null==e)return t;for(var n=He.clear().union(t);null!=e;e=e.mark.group)n.translate(e.x||0,e.y||0);return n}(t.bounds,t.mark.group);this._dirty.union(e)},De._render=function(t){var e,n,i,r=this.context(),o=this._origin,a=this._width,s=this._height,u=this._dirty;return r.save(),u=this._redraw||u.empty()?(this._redraw=!1,null):(e=r,i=o,(n=u).expand(1).round(),n.translate(-i[0]%1,-i[1]%1),e.beginPath(),e.rect(n.x1,n.y1,n.width(),n.height()),e.clip(),n),this.clear(-o[0],-o[1],a,s),this.draw(r,t,u),r.restore(),this._dirty.clear(),this},De.draw=function(t,e,n){var i=ue[e.marktype];e.clip&&function(t,e){var n=e.clip;if(t.save(),t.beginPath(),s.isFunction(n))n(t);else{var i=e.group;t.rect(0,0,i.width||0,i.height||0)}t.clip()}(t,e),i.draw.call(this,t,e,n),e.clip&&t.restore()},De.clear=function(t,e,n,i){var r=this.context();r.clearRect(t,e,n,i),null!=this._bgcolor&&(r.fillStyle=this._bgcolor,r.fillRect(t,e,n,i))};var Ge=s.inherits(We,Me);function Be(n,i){return function(t){var e=t.target.__data__;t.vegaType=t.type,e=Array.isArray(e)?e[0]:e,i.call(n._obj,t,e)}}function je(t,e,n){var i,r,o="<"+t;if(e)for(i in e)null!=(r=e[i])&&(o+=" "+i+'="'+r+'"');return n&&(o+=" "+n),o+">"}function Ue(t){return"</"+t+">"}Ge.initialize=function(t,e,n){var i=this._svg;return i&&(i.removeEventListener(Le,this._hrefHandler),i.removeEventListener(Pe,this._tooltipHandler),i.removeEventListener(Se,this._tooltipHandler)),this._svg=i=t&&me(t,"svg"),i&&(i.addEventListener(Le,this._hrefHandler),i.addEventListener(Pe,this._tooltipHandler),i.addEventListener(Se,this._tooltipHandler)),Me.prototype.initialize.call(this,t,e,n)},Ge.canvas=function(){return this._svg},Ge.on=function(t,e){var n=this.eventName(t),i=this._handlers;if(this._handlerIndex(i[n],t,e)<0){var r={type:t,handler:e,listener:Be(this,e)};(i[n]||(i[n]=[])).push(r),this._svg&&this._svg.addEventListener(n,r.listener)}return this},Ge.off=function(t,e){var n=this.eventName(t),i=this._handlers[n],r=this._handlerIndex(i,t,e);return 0<=r&&(this._svg&&this._svg.removeEventListener(n,i[r].listener),i.splice(r,1)),this};var Xe={version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},Je={fill:"fill",fillOpacity:"fill-opacity",stroke:"stroke",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",strokeCap:"stroke-linecap",strokeJoin:"stroke-linejoin",strokeDash:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeMiterLimit:"stroke-miterlimit",opacity:"opacity"},Fe=Object.keys(Je),Qe=Xe.xmlns;function Ye(t){Ce.call(this,t),this._dirtyID=1,this._dirty=[],this._svg=null,this._root=null,this._defs=null}var Ze=s.inherits(Ye,Ce),$e=Ce.prototype;function Ke(t,e,n){var i,r,o;for((t=xe(t,n,"linearGradient",Qe)).setAttribute("id",e.id),t.setAttribute("x1",e.x1),t.setAttribute("x2",e.x2),t.setAttribute("y1",e.y1),t.setAttribute("y2",e.y2),i=0,r=e.stops.length;i<r;++i)(o=xe(t,i,"stop",Qe)).setAttribute("offset",e.stops[i].offset),o.setAttribute("stop-color",e.stops[i].color);be(t,i)}function tn(t,e,n){var i;(t=xe(t,n,"clipPath",Qe)).setAttribute("id",e.id),e.path?(i=xe(t,0,"path",Qe)).setAttribute("d",e.path):((i=xe(t,0,"rect",Qe)).setAttribute("x",0),i.setAttribute("y",0),i.setAttribute("width",e.width),i.setAttribute("height",e.height))}function en(t,e){for(;t&&t.dirty!==e;t=t.mark.group){if(t.dirty=e,!t.mark||t.mark.dirty===e)return;t.mark.dirty=e}}function nn(t,e,n,i,r){var o,a,s,u=t._svg;if(!u&&(u=_e(o=e.ownerDocument,i,Qe),t._svg=u,t.mark&&(u.__data__=t,u.__values__={fill:"default"},"g"===i))){var l=_e(o,"path",Qe);l.setAttribute("class","background"),u.appendChild(l),l.__data__=t;var h=_e(o,"g",Qe);u.appendChild(h),h.__data__=t}return(u.ownerSVGElement!==r||(s=(a=t).mark||a.group)&&1<s.items.length&&u.previousSibling!==n)&&e.insertBefore(u,n?n.nextSibling:e.firstChild),u}Ze.initialize=function(t,e,n,i){return t&&(this._svg=xe(t,0,"svg",Qe),this._svg.setAttribute("class","marks"),be(t,1),this._root=xe(this._svg,0,"g",Qe),be(this._svg,1)),this._defs={gradient:{},clipping:{}},this.background(this._bgcolor),$e.initialize.call(this,t,e,n,i)},Ze.background=function(t){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",t),$e.background.apply(this,arguments)},Ze.resize=function(t,e,n,i){return $e.resize.call(this,t,e,n,i),this._svg&&(this._svg.setAttribute("width",this._width*this._scale),this._svg.setAttribute("height",this._height*this._scale),this._svg.setAttribute("viewBox","0 0 "+this._width+" "+this._height),this._root.setAttribute("transform","translate("+this._origin+")")),this._dirty=[],this},Ze.canvas=function(){return this._svg},Ze.svg=function(){if(!this._svg)return null;var t={class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:"0 0 "+this._width+" "+this._height};for(var e in Xe)t[e]=Xe[e];var n=this._bgcolor?je("rect",{width:this._width,height:this._height,style:"fill: "+this._bgcolor+";"})+Ue("rect"):"";return je("svg",t)+n+this._svg.innerHTML+Ue("svg")},Ze._render=function(t){return this._dirtyCheck()&&(this._dirtyAll&&this._resetDefs(),this.draw(this._root,t),be(this._root,1)),this.updateDefs(),this._dirty=[],++this._dirtyID,this},Ze.updateDefs=function(){var t,e=this._svg,n=this._defs,i=n.el,r=0;for(t in n.gradient)i||(n.el=i=xe(e,0,"defs",Qe)),Ke(i,n.gradient[t],r++);for(t in n.clipping)i||(n.el=i=xe(e,0,"defs",Qe)),tn(i,n.clipping[t],r++);i&&(0===r?(e.removeChild(i),n.el=null):be(i,r))},Ze._resetDefs=function(){var t=this._defs;t.gradient={},t.clipping={}},Ze.dirty=function(t){t.dirty!==this._dirtyID&&(t.dirty=this._dirtyID,this._dirty.push(t))},Ze.isDirty=function(t){return this._dirtyAll||!t._svg||t.dirty===this._dirtyID},Ze._dirtyCheck=function(){this._dirtyAll=!0;var t=this._dirty;if(!t.length)return!0;var e,n,i,r,o,a,s,u=++this._dirtyID;for(o=0,a=t.length;o<a;++o)(n=(e=t[o]).mark).marktype!==i&&(i=n.marktype,r=ue[i]),n.zdirty&&n.dirty!==u&&(this._dirtyAll=!1,en(e,u),n.items.forEach(function(t){t.dirty=u})),n.zdirty||(e.exit?(r.nested&&n.items.length?(s=n.items[0])._svg&&this._update(r,s._svg,s):e._svg&&(s=e._svg.parentNode)&&s.removeChild(e._svg),e._svg=null):(e=r.nested?n.items[0]:e)._update!==u&&(e._svg&&e._svg.ownerSVGElement?this._update(r,e._svg,e):(this._dirtyAll=!1,en(e,u)),e._update=u));return!this._dirtyAll},Ze.draw=function(t,e,n){if(!this.isDirty(e))return e._svg;var i,r=this,o=this._svg,a=ue[e.marktype],s=!1===e.interactive?"none":null,u="g"===a.tag,l=null,h=0;function c(t){var e=r.isDirty(t),n=nn(t,i,l,a.tag,o);e&&(r._update(a,n,t),u&&function(e,n,t){n=n.lastChild;var i,r=0;dt(t,function(t){i=e.draw(n,t,i),++r}),be(n,1+r)}(r,n,t)),l=n,++h}return(i=nn(e,t,n,"g",o)).setAttribute("class",ke(e)),u||i.style.setProperty("pointer-events",s),e.clip?i.setAttribute("clip-path",zt(r,e,e.group)):i.removeAttribute("clip-path"),a.nested?e.items.length&&c(e.items[0]):dt(e,c),be(i,h),i};var rn=null,on=null,an={group:function(t,e,n){on=e.__values__,rn=e.childNodes[1],t.foreground(un,n,this),rn=e.childNodes[0],t.background(un,n,this);var i=!1===n.mark.interactive?"none":null;i!==on.events&&(rn.style.setProperty("pointer-events",i),on.events=i)},text:function(t,e,n){var i;(i=ee(n))!==on.text&&(e.textContent=i,on.text=i),sn(e,"font-family",ne(n)),sn(e,"font-size",Kt(n)+"px"),sn(e,"font-style",n.fontStyle),sn(e,"font-variant",n.fontVariant),sn(e,"font-weight",n.fontWeight)}};function sn(t,e,n){n!==on[e]&&(null==n?t.style.removeProperty(e):t.style.setProperty(e,n+""),on[e]=n)}function un(t,e,n){e!==on[t]&&(null!=e?n?rn.setAttributeNS(n,t,e):rn.setAttribute(t,e):n?rn.removeAttributeNS(n,t):rn.removeAttribute(t),on[t]=e)}function ln(t){Ce.call(this,t),this._text={head:"",bg:"",root:"",foot:"",defs:"",body:""},this._defs={gradient:{},clipping:{}}}Ze._update=function(t,e,n){on=(rn=e).__values__,t.attr(un,n,this);var i=an[t.type];i&&i.call(this,t,e,n),this.style(rn,n)},Ze.style=function(t,e){var n,i,r,o,a,s;if(null!=e)for(n=0,i=Fe.length;n<i;++n)a=e[r=Fe[n]],"font"===r&&(a=ne(e)),a!==on[r]&&(o=Je[r],null==a?"fill"===o?t.style.setProperty(o,"none"):t.style.removeProperty(o):(a.id&&(this._defs.gradient[a.id]=a,a="url("+(s=void 0,"undefined"==typeof window?"":(s=window.location).hash?s.href.slice(0,-s.hash.length):s.href)+"#"+a.id+")"),t.style.setProperty(o,a+"")),on[r]=a)};var hn,cn=s.inherits(ln,Ce),fn=Ce.prototype;function dn(t,e,n,i){hn[i||t]=e}function vn(t,e,n,i){if(null==t)return"";var r,o,a,s,u,l="";for("bgrect"===n&&!1===e.interactive&&(l+="pointer-events: none; "),"text"===n&&(l+="font-family: "+ne(t)+"; ",l+="font-size: "+Kt(t)+"px; ",t.fontStyle&&(l+="font-style: "+t.fontStyle+"; "),t.fontVariant&&(l+="font-variant: "+t.fontVariant+"; "),t.fontWeight&&(l+="font-weight: "+t.fontWeight+"; ")),r=0,o=Fe.length;r<o;++r)a=Fe[r],s=Je[a],null==(u=t[a])?"fill"===s&&(l+="fill: none; "):"transparent"!==u||"fill"!==s&&"stroke"!==s?(u.id&&(u="url(#"+(i.gradient[u.id]=u).id+")"),l+=s+": "+u+"; "):l+=s+": none; ";return l?'style="'+l.trim()+'"':null}cn.resize=function(t,e,n,i){fn.resize.call(this,t,e,n,i);var r=this._origin,o=this._text,a={class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:"0 0 "+this._width+" "+this._height};for(var s in Xe)a[s]=Xe[s];o.head=je("svg",a);var u=this._bgcolor;return"transparent"!==u&&"none"!==u||(u=null),o.bg=u?je("rect",{width:this._width,height:this._height,style:"fill: "+u+";"})+Ue("rect"):"",o.root=je("g",{transform:"translate("+r+")"}),o.foot=Ue("g")+Ue("svg"),this},cn.background=function(){var t=fn.background.apply(this,arguments);return arguments.length&&this._text.head&&this.resize(this._width,this._height,this._origin,this._scale),t},cn.svg=function(){var t=this._text;return t.head+t.bg+t.defs+t.root+t.body+t.foot},cn._render=function(t){return this._text.body=this.mark(t),this._text.defs=this.buildDefs(),this},cn.buildDefs=function(){var t,e,n,i,r=this._defs,o="";for(e in r.gradient){for(i=(n=r.gradient[e]).stops,o+=je("linearGradient",{id:e,x1:n.x1,x2:n.x2,y1:n.y1,y2:n.y2}),t=0;t<i.length;++t)o+=je("stop",{offset:i[t].offset,"stop-color":i[t].color})+Ue("stop");o+=Ue("linearGradient")}for(e in r.clipping)n=r.clipping[e],o+=je("clipPath",{id:e}),n.path?o+=je("path",{d:n.path})+Ue("path"):o+=je("rect",{x:0,y:0,width:n.width,height:n.height})+Ue("rect"),o+=Ue("clipPath");return 0<o.length?je("defs")+o+Ue("defs"):""},cn.attributes=function(t,e){return hn={},t(dn,e,this),hn},cn.href=function(t){var e,n=this,i=t.href;if(i){if(e=n._hrefs&&n._hrefs[i])return e;n.sanitizeURL(i).then(function(t){t["xlink:href"]=t.href,t.href=null,(n._hrefs||(n._hrefs={}))[i]=t})}return null},cn.mark=function(n){var i,r=this,o=ue[n.marktype],a=o.tag,s=this._defs,u="";function t(t){var e=r.href(t);e&&(u+=je("a",e)),i="g"!==a?vn(t,n,a,s):null,u+=je(a,r.attributes(o.attr,t),i),"text"===a?u+=ee(t).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"):"g"===a&&(u+=je("path",r.attributes(o.background,t),vn(t,n,"bgrect",s))+Ue("path"),u+=je("g",r.attributes(o.foreground,t))+r.markGroup(t)+Ue("g")),u+=Ue(a),e&&(u+=Ue("a"))}return"g"!==a&&!1===n.interactive&&(i='style="pointer-events: none;"'),u+=je("g",{class:ke(n),"clip-path":n.clip?zt(r,n,n.group):null},i),o.nested?n.items&&n.items.length&&t(n.items[0]):dt(n,t),u+Ue("g")},cn.markGroup=function(t){var e=this,n="";return dt(t,function(t){n+=e.mark(t)}),n};var gn={Canvas:"canvas",PNG:"png",SVG:"svg",None:"none"},pn={};pn.canvas=pn.png={renderer:Ee,headless:Ee,handler:Re},pn.svg={renderer:Ye,headless:ln,handler:We},pn.none={};var yn=new h;var _n=1e-9;function mn(t,e,n){return t===e||("path"===n?xn(t,e):t instanceof Date&&e instanceof Date?+t==+e:s.isNumber(t)&&s.isNumber(e)?Math.abs(t-e)<=_n:t&&e&&(s.isObject(t)||s.isObject(e))?null!=t&&null!=e&&function(t,e){var n,i,r=Object.keys(t),o=Object.keys(e);if(r.length!==o.length)return!1;for(r.sort(),o.sort(),i=r.length-1;0<=i;i--)if(r[i]!=o[i])return!1;for(i=r.length-1;0<=i;i--)if(n=r[i],!mn(t[n],e[n],n))return!1;return typeof t==typeof e}(t,e):t==e)}function xn(t,e){return mn(m(t),m(e))}t.Bounds=h,t.Gradient=function(t,e){var n,i=[];return n={id:"gradient_"+r++,x1:t?t[0]:0,y1:t?t[1]:0,x2:e?e[0]:1,y2:e?e[1]:0,stops:i,stop:function(t,e){return i.push({offset:t,color:e}),n}}},t.GroupItem=u,t.ResourceLoader=l,t.Item=a,t.Scenegraph=ge,t.Handler=Me,t.Renderer=Ce,t.CanvasHandler=Re,t.CanvasRenderer=Ee,t.SVGHandler=We,t.SVGRenderer=Ye,t.SVGStringRenderer=ln,t.RenderType=gn,t.renderModule=function(t,e){return t=String(t||"").toLowerCase(),1<arguments.length?(pn[t]=e,this):pn[t]},t.Marks=ue,t.boundClip=function(t){var e=t.clip;if(s.isFunction(e))e(rt(yn.clear()));else{if(!e)return;yn.set(0,0,t.group.width,t.group.height)}t.bounds.intersect(yn)},t.boundContext=rt,t.boundStroke=K,t.boundItem=le,t.boundMark=ce,t.pathCurves=g,t.pathSymbols=P,t.pathRectangle=D,t.pathTrail=H,t.pathParse=m,t.pathRender=w,t.point=we,t.domCreate=_e,t.domFind=me,t.domChild=xe,t.domClear=be,t.openTag=je,t.closeTag=Ue,t.font=ie,t.fontFamily=ne,t.fontSize=Kt,t.textMetrics=Ft,t.resetSVGClipId=function(){Ct=1},t.sceneEqual=mn,t.pathEqual=xn,t.sceneToJSON=de,t.sceneFromJSON=ve,t.sceneZOrder=ft,t.sceneVisit=dt,t.scenePickVisit=vt,Object.defineProperty(t,"__esModule",{value:!0})}); | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("vega-util"),require("vega-canvas"),require("vega-loader"),require("d3-shape"),require("d3-path")):"function"==typeof define&&define.amd?define(["exports","vega-util","vega-canvas","vega-loader","d3-shape","d3-path"],e):e((t=t||self).vega={},t.vega,t.vega,t.vega,t.d3,t.d3)}(this,function(t,e,n,i,r,o){"use strict";function s(t){this.clear(),t&&this.union(t)}var a=s.prototype;a.clone=function(){return new s(this)},a.clear=function(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},a.empty=function(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},a.set=function(t,e,n,i){return n<t?(this.x2=t,this.x1=n):(this.x1=t,this.x2=n),i<e?(this.y2=e,this.y1=i):(this.y1=e,this.y2=i),this},a.add=function(t,e){return t<this.x1&&(this.x1=t),e<this.y1&&(this.y1=e),t>this.x2&&(this.x2=t),e>this.y2&&(this.y2=e),this},a.expand=function(t){return this.x1-=t,this.y1-=t,this.x2+=t,this.y2+=t,this},a.round=function(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},a.translate=function(t,e){return this.x1+=t,this.x2+=t,this.y1+=e,this.y2+=e,this},a.rotate=function(t,e,n){const i=this.rotatedPoints(t,e,n);return this.clear().add(i[0],i[1]).add(i[2],i[3]).add(i[4],i[5]).add(i[6],i[7])},a.rotatedPoints=function(t,e,n){var{x1:i,y1:r,x2:o,y2:s}=this,a=Math.cos(t),u=Math.sin(t),l=e-e*a+n*u,h=n-e*u-n*a;return[a*i-u*r+l,u*i+a*r+h,a*i-u*s+l,u*i+a*s+h,a*o-u*r+l,u*o+a*r+h,a*o-u*s+l,u*o+a*s+h]},a.union=function(t){return t.x1<this.x1&&(this.x1=t.x1),t.y1<this.y1&&(this.y1=t.y1),t.x2>this.x2&&(this.x2=t.x2),t.y2>this.y2&&(this.y2=t.y2),this},a.intersect=function(t){return t.x1>this.x1&&(this.x1=t.x1),t.y1>this.y1&&(this.y1=t.y1),t.x2<this.x2&&(this.x2=t.x2),t.y2<this.y2&&(this.y2=t.y2),this},a.encloses=function(t){return t&&this.x1<=t.x1&&this.x2>=t.x2&&this.y1<=t.y1&&this.y2>=t.y2},a.alignsWith=function(t){return t&&(this.x1==t.x1||this.x2==t.x2||this.y1==t.y1||this.y2==t.y2)},a.intersects=function(t){return t&&!(this.x2<t.x1||this.x1>t.x2||this.y2<t.y1||this.y1>t.y2)},a.contains=function(t,e){return!(t<this.x1||t>this.x2||e<this.y1||e>this.y2)},a.width=function(){return this.x2-this.x1},a.height=function(){return this.y2-this.y1};var u=0;function l(t){this.mark=t,this.bounds=this.bounds||new s}function h(t){l.call(this,t),this.items=this.items||[]}function c(t){this._pending=0,this._loader=t||i.loader()}e.inherits(h,l);var f=c.prototype;function d(t){t._pending+=1}function v(t){t._pending-=1}f.pending=function(){return this._pending},f.sanitizeURL=function(t){var e=this;return d(e),e._loader.sanitize(t,{context:"href"}).then(function(t){return v(e),t}).catch(function(){return v(e),null})},f.loadImage=function(t){var e=this,i=n.image();return d(e),e._loader.sanitize(t,{context:"image"}).then(function(t){var n=t.href;if(!n||!i)throw{url:n};var r=new i;return r.onload=function(){v(e),r.loaded=!0},r.onerror=function(){v(e),r.loaded=!1},r.src=n,r}).catch(function(t){return v(e),{loaded:!1,width:0,height:0,src:t&&t.url||""}})},f.ready=function(){var t=this;return new Promise(function(e){!function n(i){t.pending()?setTimeout(function(){n(!0)},10):e(i)}(!1)})};var g={basis:{curve:r.curveBasis},"basis-closed":{curve:r.curveBasisClosed},"basis-open":{curve:r.curveBasisOpen},bundle:{curve:r.curveBundle,tension:"beta",value:.85},cardinal:{curve:r.curveCardinal,tension:"tension",value:0},"cardinal-open":{curve:r.curveCardinalOpen,tension:"tension",value:0},"cardinal-closed":{curve:r.curveCardinalClosed,tension:"tension",value:0},"catmull-rom":{curve:r.curveCatmullRom,tension:"alpha",value:.5},"catmull-rom-closed":{curve:r.curveCatmullRomClosed,tension:"alpha",value:.5},"catmull-rom-open":{curve:r.curveCatmullRomOpen,tension:"alpha",value:.5},linear:{curve:r.curveLinear},"linear-closed":{curve:r.curveLinearClosed},monotone:{horizontal:r.curveMonotoneY,vertical:r.curveMonotoneX},natural:{curve:r.curveNatural},step:{curve:r.curveStep},"step-after":{curve:r.curveStepAfter},"step-before":{curve:r.curveStepBefore}};function p(t,e,n){var i=g.hasOwnProperty(t)&&g[t],r=null;return i&&(r=i.curve||i[e||"vertical"],i.tension&&null!=n&&(r=r[i.tension](n))),r}var y={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},_=[/([MLHVCSQTAZmlhvcsqtaz])/g,/###/,/(\d)([-+])/g,/\s|,|###/];function m(t){var e,n,i,r,o,s,a,u,l,h,c,f=[];for(u=0,h=(e=t.slice().replace(_[0],"###$1").split(_[1]).slice(1)).length;u<h;++u){for(i=(n=e[u]).slice(1).trim().replace(_[2],"$1###$2").split(_[3]),r=[s=n.charAt(0)],l=0,c=i.length;l<c;++l)(o=+i[l])===o&&r.push(o);if(a=y[s.toLowerCase()],r.length-1>a)for(l=1,c=r.length;l<c;l+=a)f.push([s].concat(r.slice(l,l+a)));else f.push(r)}return f}var x=Math.PI/180,b=Math.PI/2,k=2*Math.PI,w=Math.sqrt(3)/2,T={},M={},A=[].join;function z(t){var e=A.call(t);if(M[e])return M[e];var n=t[0],i=t[1],r=t[2],o=t[3],s=t[4],a=t[5],u=t[6],l=t[7],h=l*s,c=-u*a,f=u*s,d=l*a,v=Math.cos(r),g=Math.sin(r),p=Math.cos(o),y=Math.sin(o),_=.5*(o-r),m=Math.sin(.5*_),x=8/3*m*m/Math.sin(_),b=n+v-x*g,k=i+g+x*v,w=n+p,T=i+y,z=w+x*y,C=T-x*p;return M[e]=[h*b+c*k,f*b+d*k,h*z+c*C,f*z+d*C,h*w+c*T,f*w+d*T]}var C=["l",0,0,0,0,0,0,0];function P(t,e){var n=C[0]=t[0];if("a"===n||"A"===n)C[1]=e*t[1],C[2]=e*t[2],C[3]=t[3],C[4]=t[4],C[5]=t[5],C[6]=e*t[6],C[7]=e*t[7];else for(var i=1,r=t.length;i<r;++i)C[i]=e*t[i];return C}function S(t,e,n,i,r){var o,s,a,u,l,h=null,c=0,f=0,d=0,v=0;null==n&&(n=0),null==i&&(i=0),null==r&&(r=1),t.beginPath&&t.beginPath();for(var g=0,p=e.length;g<p;++g){switch(o=e[g],1!==r&&(o=P(o,r)),o[0]){case"l":c+=o[1],f+=o[2],t.lineTo(c+n,f+i);break;case"L":c=o[1],f=o[2],t.lineTo(c+n,f+i);break;case"h":c+=o[1],t.lineTo(c+n,f+i);break;case"H":c=o[1],t.lineTo(c+n,f+i);break;case"v":f+=o[1],t.lineTo(c+n,f+i);break;case"V":f=o[1],t.lineTo(c+n,f+i);break;case"m":c+=o[1],f+=o[2],t.moveTo(c+n,f+i);break;case"M":c=o[1],f=o[2],t.moveTo(c+n,f+i);break;case"c":s=c+o[5],a=f+o[6],d=c+o[3],v=f+o[4],t.bezierCurveTo(c+o[1]+n,f+o[2]+i,d+n,v+i,s+n,a+i),c=s,f=a;break;case"C":c=o[5],f=o[6],d=o[3],v=o[4],t.bezierCurveTo(o[1]+n,o[2]+i,d+n,v+i,c+n,f+i);break;case"s":s=c+o[3],a=f+o[4],d=2*c-d,v=2*f-v,t.bezierCurveTo(d+n,v+i,c+o[1]+n,f+o[2]+i,s+n,a+i),d=c+o[1],v=f+o[2],c=s,f=a;break;case"S":s=o[3],a=o[4],d=2*c-d,v=2*f-v,t.bezierCurveTo(d+n,v+i,o[1]+n,o[2]+i,s+n,a+i),c=s,f=a,d=o[1],v=o[2];break;case"q":s=c+o[3],a=f+o[4],d=c+o[1],v=f+o[2],t.quadraticCurveTo(d+n,v+i,s+n,a+i),c=s,f=a;break;case"Q":s=o[3],a=o[4],t.quadraticCurveTo(o[1]+n,o[2]+i,s+n,a+i),c=s,f=a,d=o[1],v=o[2];break;case"t":s=c+o[1],a=f+o[2],null===h[0].match(/[QqTt]/)?(d=c,v=f):"t"===h[0]?(d=2*c-u,v=2*f-l):"q"===h[0]&&(d=2*c-d,v=2*f-v),u=d,l=v,t.quadraticCurveTo(d+n,v+i,s+n,a+i),f=a,d=(c=s)+o[1],v=f+o[2];break;case"T":s=o[1],a=o[2],d=2*c-d,v=2*f-v,t.quadraticCurveTo(d+n,v+i,s+n,a+i),c=s,f=a;break;case"a":L(t,c+n,f+i,[o[1],o[2],o[3],o[4],o[5],o[6]+c+n,o[7]+f+i]),c+=o[6],f+=o[7];break;case"A":L(t,c+n,f+i,[o[1],o[2],o[3],o[4],o[5],o[6]+n,o[7]+i]),c=o[6],f=o[7];break;case"z":case"Z":t.closePath()}h=o}}function L(t,e,n,i){for(var r=function(t,e,n,i,r,o,s,a,u){var l=A.call(arguments);if(T[l])return T[l];var h=s*x,c=Math.sin(h),f=Math.cos(h),d=f*(a-t)*.5+c*(u-e)*.5,v=f*(u-e)*.5-c*(a-t)*.5,g=d*d/((n=Math.abs(n))*n)+v*v/((i=Math.abs(i))*i);g>1&&(n*=g=Math.sqrt(g),i*=g);var p=f/n,y=c/n,_=-c/i,m=f/i,w=p*a+y*u,M=_*a+m*u,z=p*t+y*e,C=_*t+m*e,P=1/((z-w)*(z-w)+(C-M)*(C-M))-.25;P<0&&(P=0);var S=Math.sqrt(P);o==r&&(S=-S);var L=.5*(w+z)-S*(C-M),R=.5*(M+C)+S*(z-w),q=Math.atan2(M-R,w-L),N=Math.atan2(C-R,z-L)-q;N<0&&1===o?N+=k:N>0&&0===o&&(N-=k);for(var O=Math.ceil(Math.abs(N/(b+.001))),E=[],I=0;I<O;++I){var D=q+I*N/O,V=q+(I+1)*N/O;E[I]=[L,R,D,V,n,i,c,f]}return T[l]=E}(i[5],i[6],i[0],i[1],i[3],i[4],i[2],e,n),o=0;o<r.length;++o){var s=z(r[o]);t.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5])}}var R={circle:{draw:function(t,e){var n=Math.sqrt(e)/2;t.moveTo(n,0),t.arc(0,0,n,0,k)}},cross:{draw:function(t,e){var n=Math.sqrt(e)/2,i=n/2.5;t.moveTo(-n,-i),t.lineTo(-n,i),t.lineTo(-i,i),t.lineTo(-i,n),t.lineTo(i,n),t.lineTo(i,i),t.lineTo(n,i),t.lineTo(n,-i),t.lineTo(i,-i),t.lineTo(i,-n),t.lineTo(-i,-n),t.lineTo(-i,-i),t.closePath()}},diamond:{draw:function(t,e){var n=Math.sqrt(e)/2;t.moveTo(-n,0),t.lineTo(0,-n),t.lineTo(n,0),t.lineTo(0,n),t.closePath()}},square:{draw:function(t,e){var n=Math.sqrt(e),i=-n/2;t.rect(i,i,n,n)}},arrow:{draw:function(t,e){var n=Math.sqrt(e)/2,i=n/7,r=n/2.5,o=n/8;t.moveTo(-i,n),t.lineTo(i,n),t.lineTo(i,-o),t.lineTo(r,-o),t.lineTo(0,-n),t.lineTo(-r,-o),t.lineTo(-i,-o),t.closePath()}},wedge:{draw:function(t,e){var n=Math.sqrt(e)/2,i=w*n,r=i-.5773502691896257*n,o=n/4;t.moveTo(0,-i-r),t.lineTo(-o,i-r),t.lineTo(o,i-r),t.closePath()}},triangle:{draw:function(t,e){var n=Math.sqrt(e)/2,i=w*n,r=i-.5773502691896257*n;t.moveTo(0,-i-r),t.lineTo(-n,i-r),t.lineTo(n,i-r),t.closePath()}},"triangle-up":{draw:function(t,e){var n=Math.sqrt(e)/2,i=w*n;t.moveTo(0,-i),t.lineTo(-n,i),t.lineTo(n,i),t.closePath()}},"triangle-down":{draw:function(t,e){var n=Math.sqrt(e)/2,i=w*n;t.moveTo(0,i),t.lineTo(-n,-i),t.lineTo(n,-i),t.closePath()}},"triangle-right":{draw:function(t,e){var n=Math.sqrt(e)/2,i=w*n;t.moveTo(i,0),t.lineTo(-i,-n),t.lineTo(-i,n),t.closePath()}},"triangle-left":{draw:function(t,e){var n=Math.sqrt(e)/2,i=w*n;t.moveTo(-i,0),t.lineTo(i,-n),t.lineTo(i,n),t.closePath()}},stroke:{draw:function(t,e){var n=Math.sqrt(e)/2;t.moveTo(-n,0),t.lineTo(n,0)}}};function q(t){return R.hasOwnProperty(t)?R[t]:function(t){if(!N.hasOwnProperty(t)){var e=m(t);N[t]={draw:function(t,n){S(t,e,0,0,Math.sqrt(n)/2)}}}return N[t]}(t)}var N={};function O(t){return t.x}function E(t){return t.y}function I(t){return t.width}function D(t){return t.height}function V(t){return function(){return t}}function H(){var t=O,e=E,n=I,i=D,r=V(0),s=null;function a(a,u,l){var h,c=null!=u?u:+t.call(this,a),f=null!=l?l:+e.call(this,a),d=+n.call(this,a),v=+i.call(this,a),g=+r.call(this,a);if(s||(s=h=o.path()),g<=0)s.rect(c,f,d,v);else{var p=c+d,y=f+v;s.moveTo(c+g,f),s.lineTo(p-g,f),s.quadraticCurveTo(p,f,p,f+g),s.lineTo(p,y-g),s.quadraticCurveTo(p,y,p-g,y),s.lineTo(c+g,y),s.quadraticCurveTo(c,y,c,y-g),s.lineTo(c,f+g),s.quadraticCurveTo(c,f,c+g,f),s.closePath()}if(h)return s=null,h+""||null}return a.x=function(e){return arguments.length?(t="function"==typeof e?e:V(+e),a):t},a.y=function(t){return arguments.length?(e="function"==typeof t?t:V(+t),a):e},a.width=function(t){return arguments.length?(n="function"==typeof t?t:V(+t),a):n},a.height=function(t){return arguments.length?(i="function"==typeof t?t:V(+t),a):i},a.cornerRadius=function(t){return arguments.length?(r="function"==typeof t?t:V(+t),a):r},a.context=function(t){return arguments.length?(s=null==t?null:t,a):s},a}function W(){var t,e,n,i,r,s,a,u,l=null;function h(t,e,n){var i=n/2;if(r){var o=a-e,h=t-s;if(o||h){var c=Math.sqrt(o*o+h*h),f=(o/=c)*u,d=(h/=c)*u,v=Math.atan2(h,o);l.moveTo(s-f,a-d),l.lineTo(t-o*i,e-h*i),l.arc(t,e,i,v-Math.PI,v),l.lineTo(s+f,a+d),l.arc(s,a,u,v,v+Math.PI)}else l.arc(t,e,i,0,k);l.closePath()}else r=1;s=t,a=e,u=i}function c(s){var a,u,c,f=s.length,d=!1;for(null==l&&(l=c=o.path()),a=0;a<=f;++a)!(a<f&&i(u=s[a],a,s))===d&&(d=!d)&&(r=0),d&&h(+t(u,a,s),+e(u,a,s),+n(u,a,s));if(c)return l=null,c+""||null}return c.x=function(e){return arguments.length?(t=e,c):t},c.y=function(t){return arguments.length?(e=t,c):e},c.size=function(t){return arguments.length?(n=t,c):n},c.defined=function(t){return arguments.length?(i=t,c):i},c.context=function(t){return arguments.length?(l=null==t?null:t,c):l},c}function B(t){return t.x||0}function G(t){return t.y||0}function j(t){return t.cornerRadius||0}function U(t){return!(!1===t.defined)}var X=r.arc().startAngle(function(t){return t.startAngle||0}).endAngle(function(t){return t.endAngle||0}).padAngle(function(t){return t.padAngle||0}).innerRadius(function(t){return t.innerRadius||0}).outerRadius(function(t){return t.outerRadius||0}).cornerRadius(j),J=r.area().x(B).y1(G).y0(function(t){return(t.y||0)+(t.height||0)}).defined(U),F=r.area().y(G).x1(B).x0(function(t){return(t.x||0)+(t.width||0)}).defined(U),Q=r.line().x(B).y(G).defined(U),Y=H().x(B).y(G).width(function(t){return t.width||0}).height(function(t){return t.height||0}).cornerRadius(j),Z=r.symbol().type(function(t){return q(t.shape||"circle")}).size(function(t){return null==t.size?64:t.size}),$=W().x(B).y(G).defined(U).size(function(t){return t.size||1});function K(t,e,n,i){return Y.context(t)(e,n,i)}function tt(t,e){return e.stroke&&0!==e.opacity&&0!==e.strokeOpacity&&t.expand(null!=e.strokeWidth?+e.strokeWidth:1),t}var et,nt=k-1e-8;function it(t){return et=t,it}function rt(){}function ot(t,e){et.add(t,e)}it.beginPath=rt,it.closePath=rt,it.moveTo=ot,it.lineTo=ot,it.rect=function(t,e,n,i){ot(t,e),ot(t+n,e+i)},it.quadraticCurveTo=function(t,e,n,i){ot(t,e),ot(n,i)},it.bezierCurveTo=function(t,e,n,i,r,o){ot(t,e),ot(n,i),ot(r,o)},it.arc=function(t,e,n,i,r,o){if(Math.abs(r-i)>nt)return ot(t-n,e-n),void ot(t+n,e+n);var s,a,u,l,h=1/0,c=-1/0,f=1/0,d=-1/0;function v(t){u=n*Math.cos(t),l=n*Math.sin(t),u<h&&(h=u),u>c&&(c=u),l<f&&(f=l),l>d&&(d=l)}if(v(i),v(r),r!==i)if((i%=k)<0&&(i+=k),(r%=k)<0&&(r+=k),r<i&&(o=!o,s=i,i=r,r=s),o)for(r-=k,s=i-i%b,a=0;a<4&&s>r;++a,s-=b)v(s);else for(s=i-i%b+b,a=0;a<4&&s<r;++a,s+=b)v(s);ot(t+h,e+f),ot(t+c,e+d)};var st=(st=n.canvas(1,1))?st.getContext("2d"):null;const at=new s;function ut(t){return function(e,n){if(!st)return!0;t(st,e),at.clear().union(e.bounds).intersect(n).round();const{x1:i,y1:r,x2:o,y2:s}=at;for(let t=r;t<=s;++t)for(let e=i;e<=o;++e)if(st.isPointInPath(e,t))return!0;return!1}}function lt(t,e){return e.contains(t.x||0,t.y||0)}function ht(t,e){const n=t.x||0,i=t.y||0,r=t.width||0,o=t.height||0;return e.intersects(at.set(n,i,n+r,i+o))}function ct(t,e){const n=t.x||0,i=t.y||0;return ft(e,n,i,null!=t.x2?t.x2:n,null!=t.y2?t.y2:i)}function ft(t,e,n,i,r){const{x1:o,y1:s,x2:a,y2:u}=t,l=i-e,h=r-n;let c,f,d,v,g=0,p=1;for(v=0;v<4;++v){if(0===v&&(c=-l,f=-(o-e)),1===v&&(c=l,f=a-e),2===v&&(c=-h,f=-(s-n)),3===v&&(c=h,f=u-n),Math.abs(c)<1e-10&&f<0)return!1;if(d=f/c,c<0){if(d>p)return!1;d>g&&(g=d)}else if(c>0){if(d<g)return!1;d<p&&(p=d)}}return!0}function dt(t,e,n){return n.id?function(t,e,n){for(var i=n.width(),r=n.height(),o=n.x1+e.x1*i,s=n.y1+e.y1*r,a=n.x1+e.x2*i,u=n.y1+e.y2*r,l=e.stops,h=0,c=l.length,f=t.createLinearGradient(o,s,a,u);h<c;++h)f.addColorStop(l[h].offset,l[h].color);return f}(t,n,e.bounds):n}function vt(t,e,n){return(n*=null==e.fillOpacity?1:e.fillOpacity)>0&&(t.globalAlpha=n,t.fillStyle=dt(t,e,e.fill),!0)}var gt=[];function pt(t,e,n){var i=null!=(i=e.strokeWidth)?i:1;return!(i<=0)&&((n*=null==e.strokeOpacity?1:e.strokeOpacity)>0&&(t.globalAlpha=n,t.strokeStyle=dt(t,e,e.stroke),t.lineWidth=i,t.lineCap=e.strokeCap||"butt",t.lineJoin=e.strokeJoin||"miter",t.miterLimit=e.strokeMiterLimit||10,t.setLineDash&&(t.setLineDash(e.strokeDash||gt),t.lineDashOffset=e.strokeDashOffset||0),!0))}function yt(t,e){return t.zindex-e.zindex||t.index-e.index}function _t(t){if(!t.zdirty)return t.zitems;var e,n,i,r=t.items,o=[];for(n=0,i=r.length;n<i;++n)(e=r[n]).index=n,e.zindex&&o.push(e);return t.zdirty=!1,t.zitems=o.sort(yt)}function mt(t,e){var n,i,r=t.items;if(r&&r.length){var o=_t(t);if(o&&o.length){for(n=0,i=r.length;n<i;++n)r[n].zindex||e(r[n]);r=o}for(n=0,i=r.length;n<i;++n)e(r[n])}}function xt(t,e){var n,i,r=t.items;if(!r||!r.length)return null;var o=_t(t);for(o&&o.length&&(r=o),i=r.length;--i>=0;)if(n=e(r[i]))return n;if(r===o)for(i=(r=t.items).length;--i>=0;)if(!r[i].zindex&&(n=e(r[i])))return n;return null}function bt(t){return function(e,n,i){mt(n,function(n){i&&!i.intersects(n.bounds)||kt(t,e,n,n)})}}function kt(t,e,n,i){var r=null==n.opacity?1:n.opacity;0!==r&&(t(e,i)||(n.fill&&vt(e,n,r)&&e.fill(),n.stroke&&pt(e,n,r)&&e.stroke()))}function wt(t){return t=t||e.truthy,function(e,n,i,r,o,s){return i*=e.pixelRatio,r*=e.pixelRatio,xt(n,function(n){var a=n.bounds;if((!a||a.contains(o,s))&&a)return t(e,n,i,r,o,s)?n:void 0})}}function Tt(t,e){return function(n,i,r,o){var s,a,u=Array.isArray(i)?i[0]:i,l=null==e?u.fill:e,h=u.stroke&&n.isPointInStroke;return h&&(s=u.strokeWidth,a=u.strokeCap,n.lineWidth=null!=s?s:1,n.lineCap=null!=a?a:"butt"),!t(n,i)&&(l&&n.isPointInPath(r,o)||h&&n.isPointInStroke(r,o))}}function Mt(t){return wt(Tt(t))}function At(t,e){return"translate("+t+","+e+")"}function zt(t){return"rotate("+t+")"}function Ct(t){return At(t.x||0,t.y||0)}function Pt(t,e,n){function i(t,n){var i=n.x||0,r=n.y||0,o=n.angle||0;t.translate(i,r),o&&t.rotate(o*=x),t.beginPath(),e(t,n),o&&t.rotate(-o),t.translate(-i,-r)}return{type:t,tag:"path",nested:!1,attr:function(t,n){t("transform",function(t){return At(t.x||0,t.y||0)+(t.angle?" "+zt(t.angle):"")}(n)),t("d",e(null,n))},bound:function(t,n){var i=n.x||0,r=n.y||0;return e(it(t),n),tt(t,n).translate(i,r),n.angle&&t.rotate(n.angle*x,i,r),t},draw:bt(i),pick:Mt(i),isect:n||ut(i)}}var St=Pt("arc",function(t,e){return X.context(t)(e)});function Lt(t,e,n){function i(t,n){t.beginPath(),e(t,n)}var r,o=Tt(i);return{type:t,tag:"path",nested:!0,attr:function(t,n){var i=n.mark.items;i.length&&t("d",e(null,i))},bound:function(t,n){var i=n.items;return 0===i.length?t:(e(it(t),i),tt(t,i[0]))},draw:(r=i,function(t,e,n){!e.items.length||n&&!n.intersects(e.bounds)||kt(r,t,e.items[0],e.items)}),pick:function(t,e,n,i,r,s){var a=e.items,u=e.bounds;return!a||!a.length||u&&!u.contains(r,s)?null:(n*=t.pixelRatio,i*=t.pixelRatio,o(t,a,n,i)?a[0]:null)},isect:lt,tip:n}}var Rt=Lt("area",function(t,e){var n=e[0],i=n.interpolate||"linear";return("horizontal"===n.orient?F:J).curve(p(i,n.orient,n.tension)).context(t)(e)},function(t,e){for(var n,i,r="horizontal"===t[0].orient?e[1]:e[0],o="horizontal"===t[0].orient?"y":"x",s=t.length,a=1/0;--s>=0;)!1!==t[s].defined&&(i=Math.abs(t[s][o]-r))<a&&(a=i,n=t[s]);return n}),qt=1;function Nt(t,n,i){var r=n.clip,o=t._defs,s=n.clip_id||(n.clip_id="clip"+qt++),a=o.clipping[s]||(o.clipping[s]={id:s});return e.isFunction(r)?a.path=r(null):(a.width=i.width||0,a.height=i.height||0),"url(#"+s+")"}var Ot=.5;function Et(t,e){var n=e.stroke?Ot:0;t.beginPath(),K(t,e,n,n)}var It=Tt(Et);var Dt={type:"group",tag:"g",nested:!1,attr:function(t,e){t("transform",Ct(e))},bound:function(t,e){if(!e.clip&&e.items)for(var n=e.items,i=0,r=n.length;i<r;++i)t.union(n[i].bounds);return(e.clip||e.width||e.height)&&!e.noBound&&t.add(0,0).add(e.width||0,e.height||0),tt(t,e),t.translate(e.x||0,e.y||0)},draw:function(t,e,n){var i=this;mt(e,function(e){var r,o=e.x||0,s=e.y||0,a=e.width||0,u=e.height||0;t.save(),t.translate(o,s),(e.stroke||e.fill)&&(r=null==e.opacity?1:e.opacity)>0&&(Et(t,e),e.fill&&vt(t,e,r)&&t.fill(),e.stroke&&pt(t,e,r)&&t.stroke()),e.clip&&(t.beginPath(),t.rect(0,0,a,u),t.clip()),n&&n.translate(-o,-s),mt(e,function(e){i.draw(t,e,n)}),n&&n.translate(o,s),t.restore()})},pick:function(t,e,n,i,r,o){if(e.bounds&&!e.bounds.contains(r,o)||!e.items)return null;var s=this,a=n*t.pixelRatio,u=i*t.pixelRatio;return xt(e,function(l){var h,c,f,d;if(!(d=l.bounds)||d.contains(r,o))return c=l.x||0,f=l.y||0,t.save(),t.translate(c,f),c=r-c,f=o-f,!(h=xt(l,function(t){return function(t,e,n){return(!1!==t.interactive||"group"===t.marktype)&&t.bounds&&t.bounds.contains(e,n)}(t,c,f)?s.pick(t,n,i,c,f):null}))&&!1!==e.interactive&&(l.fill||l.stroke)&&It(t,l,a,u)&&(h=l),t.restore(),h||null})},isect:ht,background:function(t,e){var n=e.stroke?Ot:0;t("class","background"),t("d",K(null,e,n,n))},foreground:function(t,e,n){t("clip-path",e.clip?Nt(n,e,e):null)}};function Vt(t,e){var n=t.image;return n&&n.url===t.url||(n={loaded:!1,width:0,height:0},e.loadImage(t.url).then(function(e){t.image=e,t.image.url=t.url})),n}function Ht(t,e){return"center"===t?e/2:"right"===t?e:0}function Wt(t,e){return"middle"===t?e/2:"bottom"===t?e:0}var Bt={type:"image",tag:"image",nested:!1,attr:function(t,e,n){var i=Vt(e,n),r=e.x||0,o=e.y||0,s=(null!=e.width?e.width:i.width)||0,a=(null!=e.height?e.height:i.height)||0,u=!1===e.aspect?"none":"xMidYMid";r-=Ht(e.align,s),o-=Wt(e.baseline,a),t("href",i.src||"","http://www.w3.org/1999/xlink","xlink:href"),t("transform",At(r,o)),t("width",s),t("height",a),t("preserveAspectRatio",u)},bound:function(t,e){var n=e.image,i=e.x||0,r=e.y||0,o=(null!=e.width?e.width:n&&n.width)||0,s=(null!=e.height?e.height:n&&n.height)||0;return i-=Ht(e.align,o),r-=Wt(e.baseline,s),t.set(i,r,i+o,r+s)},draw:function(t,e,n){var i=this;mt(e,function(e){if(!n||n.intersects(e.bounds)){var r,o,s,a,u=Vt(e,i),l=e.x||0,h=e.y||0,c=(null!=e.width?e.width:u.width)||0,f=(null!=e.height?e.height:u.height)||0;l-=Ht(e.align,c),h-=Wt(e.baseline,f),!1!==e.aspect&&(o=u.width/u.height,s=e.width/e.height,o==o&&s==s&&o!==s&&(s<o?(h+=(f-(a=c/o))/2,f=a):(l+=(c-(a=f*o))/2,c=a))),u.loaded&&(t.globalAlpha=null!=(r=e.opacity)?r:1,t.drawImage(u,l,h,c,f))}})},pick:wt(),isect:e.truthy,get:Vt,xOffset:Ht,yOffset:Wt},Gt=Lt("line",function(t,e){var n=e[0],i=n.interpolate||"linear";return Q.curve(p(i,n.orient,n.tension)).context(t)(e)},function(t,e){for(var n,i,r=Math.pow(t[0].strokeWidth||1,2),o=t.length;--o>=0;)if(!1!==t[o].defined&&(n=t[o].x-e[0])*n+(i=t[o].y-e[1])*i<r)return t[o];return null});function jt(t,e){var n=e.path;if(null==n)return!0;var i=e.pathCache;i&&i.path===n||((e.pathCache=i=m(n)).path=n),S(t,i,e.x,e.y)}var Ut={type:"path",tag:"path",nested:!1,attr:function(t,e){t("transform",Ct(e)),t("d",e.path)},bound:function(t,e){return jt(it(t),e)?t.set(0,0,0,0):tt(t,e)},draw:bt(jt),pick:Mt(jt),isect:ut(jt)};function Xt(t,e){t.beginPath(),K(t,e)}var Jt={type:"rect",tag:"path",nested:!1,attr:function(t,e){t("d",K(null,e))},bound:function(t,e){var n,i;return tt(t.set(n=e.x||0,i=e.y||0,n+e.width||0,i+e.height||0),e)},draw:bt(Xt),pick:Mt(Xt),isect:ht};function Ft(t,e,n){var i,r,o,s;return!(!e.stroke||!pt(t,e,n))&&(i=e.x||0,r=e.y||0,o=null!=e.x2?e.x2:i,s=null!=e.y2?e.y2:r,t.beginPath(),t.moveTo(i,r),t.lineTo(o,s),!0)}var Qt,Yt={type:"rule",tag:"line",nested:!1,attr:function(t,e){t("transform",Ct(e)),t("x2",null!=e.x2?e.x2-(e.x||0):0),t("y2",null!=e.y2?e.y2-(e.y||0):0)},bound:function(t,e){var n,i;return tt(t.set(n=e.x||0,i=e.y||0,null!=e.x2?e.x2:n,null!=e.y2?e.y2:i),e)},draw:function(t,e,n){mt(e,function(e){if(!n||n.intersects(e.bounds)){var i=null==e.opacity?1:e.opacity;i&&Ft(t,e,i)&&t.stroke()}})},pick:wt(function(t,e,n,i){return!!t.isPointInStroke&&Ft(t,e,1)&&t.isPointInStroke(n,i)}),isect:ct},Zt=Pt("shape",function(t,e){return(e.mark.shape||e.shape).context(t)(e)}),$t=Pt("symbol",function(t,e){return Z.context(t)(e)},lt),Kt={height:re,measureWidth:ne,estimateWidth:te,width:te,canvas:oe};function te(t){return Qt=re(t),ee(se(t))}function ee(t){return~~(.8*t.length*Qt)}function ne(t){return re(t)<=0?0:(st.font=ue(t),ie(se(t)))}function ie(t){return st.measureText(t).width}function re(t){return null!=t.fontSize?t.fontSize:11}function oe(t){Kt.width=t&&st?ne:te}function se(t){var e=t.text;return null==e?"":t.limit>0?function(t){var e,n=+t.limit,i=t.text+"";Kt.width===ne?(st.font=ue(t),e=ie):(Qt=re(t),e=ee);if(e(i)<n)return i;var r,o=t.ellipsis||"…",s="rtl"===t.dir,a=0,u=i.length;if(n-=e(o),s){for(;a<u;)r=a+u>>>1,e(i.slice(r))>n?a=r+1:u=r;return o+i.slice(a)}for(;a<u;)r=1+(a+u>>>1),e(i.slice(0,r))<n?a=r:u=r-1;return i.slice(0,a)+o}(t):e+""}function ae(t,e){var n=t.font;return(e&&n?String(n).replace(/"/g,"'"):n)||"sans-serif"}function ue(t,e){return(t.fontStyle?t.fontStyle+" ":"")+(t.fontVariant?t.fontVariant+" ":"")+(t.fontWeight?t.fontWeight+" ":"")+re(t)+"px "+ae(t,e)}function le(t){var e=t.baseline,n=re(t);return Math.round("top"===e?.79*n:"middle"===e?.3*n:"bottom"===e?-.21*n:0)}oe(!0);var he={left:"start",center:"middle",right:"end"},ce=new s;function fe(t){var e,n=t.x||0,i=t.y||0,r=t.radius||0;return r&&(e=(t.theta||0)-b,n+=r*Math.cos(e),i+=r*Math.sin(e)),ce.x1=n,ce.y1=i,ce}function de(t,e,n){var i,r=Kt.height(e),o=e.align,s=fe(e),a=s.x1,u=s.y1,l=e.dx||0,h=(e.dy||0)+le(e)-Math.round(.8*r);if(i=Kt.width(e),"center"===o?l-=i/2:"right"===o&&(l-=i),t.set(l+=a,h+=u,l+i,h+r),e.angle&&!n)t.rotate(e.angle*x,a,u);else if(2===n)return t.rotatedPoints(e.angle*x,a,u);return t.expand(n||!i?0:1)}var ve={arc:St,area:Rt,group:Dt,image:Bt,line:Gt,path:Ut,rect:Jt,rule:Yt,shape:Zt,symbol:$t,text:{type:"text",tag:"text",nested:!1,attr:function(t,e){var n,i=e.dx||0,r=(e.dy||0)+le(e),o=fe(e),s=o.x1,a=o.y1,u=e.angle||0;t("text-anchor",he[e.align]||"start"),u?(n=At(s,a)+" "+zt(u),(i||r)&&(n+=" "+At(i,r))):n=At(s+i,a+r),t("transform",n)},bound:de,draw:function(t,e,n){mt(e,function(e){var i,r,o,s,a;n&&!n.intersects(e.bounds)||(a=se(e))&&(0===(i=null==e.opacity?1:e.opacity)||e.fontSize<=0||(t.font=ue(e),t.textAlign=e.align||"left",o=(r=fe(e)).x1,s=r.y1,e.angle&&(t.save(),t.translate(o,s),t.rotate(e.angle*x),o=s=0),o+=e.dx||0,s+=(e.dy||0)+le(e),e.fill&&vt(t,e,i)&&t.fillText(a,o,s),e.stroke&&pt(t,e,i)&&t.strokeText(a,o,s),e.angle&&t.restore()))})},pick:wt(function(t,e,n,i,r,o){if(e.fontSize<=0)return!1;if(!e.angle)return!0;var s=fe(e),a=s.x1,u=s.y1,l=de(ce,e,1),h=-e.angle*x,c=Math.cos(h),f=Math.sin(h),d=c*r-f*o+(a-c*a+f*u),v=f*r+c*o+(u-f*a-c*u);return l.contains(d,v)}),isect:function(t,e){var n=de(ce,t,2);return ft(e,n[0],n[1],n[2],n[3])||ft(e,n[0],n[1],n[4],n[5])||ft(e,n[4],n[5],n[6],n[7])||ft(e,n[2],n[3],n[6],n[7])}},trail:Lt("trail",function(t,e){return $.context(t)(e)},function(t,e){for(var n,i,r=t.length;--r>=0;)if(!1!==t[r].defined&&(n=t[r].x-e[0])*n+(i=t[r].y-e[1])*i<(n=t[r].size||1)*n)return t[r];return null})};function ge(t,e,n){var i=ve[t.mark.marktype],r=e||i.bound;return i.nested&&(t=t.mark),r(t.bounds||(t.bounds=new s),t,n)}var pe={mark:null};function ye(t,e,n){var i,r,o,a,u=ve[t.marktype],l=u.bound,h=t.items,c=h&&h.length;if(u.nested)return c?o=h[0]:(pe.mark=t,o=pe),a=ge(o,l,n),e=e&&e.union(a)||a;if(e=e||t.bounds&&t.bounds.clear()||new s,c)for(i=0,r=h.length;i<r;++i)e.union(ge(h[i],l,n));return t.bounds=e}var _e=["marktype","name","role","interactive","clip","items","zindex","x","y","width","height","align","baseline","fill","fillOpacity","opacity","stroke","strokeOpacity","strokeWidth","strokeCap","strokeDash","strokeDashOffset","startAngle","endAngle","innerRadius","outerRadius","cornerRadius","padAngle","interpolate","tension","orient","defined","url","path","x2","y2","size","shape","text","angle","theta","radius","dx","dy","font","fontSize","fontWeight","fontStyle","fontVariant"];function me(t,e){return JSON.stringify(t,_e,e)}function xe(t){return function t(e){var n,i,r,o=e.marktype,s=e.items;if(s)for(i=0,r=s.length;i<r;++i)n=o?"mark":"group",s[i][n]=e,s[i].zindex&&(s[i][n].zdirty=!0),"group"===(o||n)&&t(s[i]);o&&ye(e);return e}("string"==typeof t?JSON.parse(t):t)}function be(t){arguments.length?this.root=xe(t):(this.root=we({marktype:"group",name:"root",role:"frame"}),this.root.items=[new h(this.root)])}var ke=be.prototype;function we(t,e){return{bounds:new s,clip:!!t.clip,group:e,interactive:!1!==t.interactive,items:[],marktype:t.marktype,name:t.name||void 0,role:t.role||void 0,zindex:t.zindex||0}}function Te(t,e,n){return!t&&"undefined"!=typeof document&&document.createElement&&(t=document),t?n?t.createElementNS(n,e):t.createElement(e):null}function Me(t,e){e=e.toLowerCase();for(var n=t.childNodes,i=0,r=n.length;i<r;++i)if(n[i].tagName.toLowerCase()===e)return n[i]}function Ae(t,e,n,i){var r,o=t.childNodes[e];return o&&o.tagName.toLowerCase()===n.toLowerCase()||(r=o||null,o=Te(t.ownerDocument,n,i),t.insertBefore(o,r)),o}function ze(t,e){for(var n=t.childNodes,i=n.length;i>e;)t.removeChild(n[--i]);return t}function Ce(t){return"mark-"+t.marktype+(t.role?" role-"+t.role:"")+(t.name?" "+t.name:"")}function Pe(t,e){var n=e.getBoundingClientRect();return[t.clientX-n.left-(e.clientLeft||0),t.clientY-n.top-(e.clientTop||0)]}function Se(t,e){this._active=null,this._handlers={},this._loader=t||i.loader(),this._tooltip=e||Le}function Le(t,e,n,i){t.element().setAttribute("title",i||"")}ke.toJSON=function(t){return me(this.root,t||0)},ke.mark=function(t,e,n){var i=we(t,e=e||this.root.items[0]);return e.items[n]=i,i.zindex&&(i.group.zdirty=!0),i};var Re=Se.prototype;function qe(t){this._el=null,this._bgcolor=null,this._loader=new c(t)}Re.initialize=function(t,e,n){return this._el=t,this._obj=n||null,this.origin(e)},Re.element=function(){return this._el},Re.canvas=function(){return this._el&&this._el.firstChild},Re.origin=function(t){return arguments.length?(this._origin=t||[0,0],this):this._origin.slice()},Re.scene=function(t){return arguments.length?(this._scene=t,this):this._scene},Re.on=function(){},Re.off=function(){},Re._handlerIndex=function(t,e,n){for(var i=t?t.length:0;--i>=0;)if(t[i].type===e&&(!n||t[i].handler===n))return i;return-1},Re.handlers=function(t){var e,n=this._handlers,i=[];if(t)i.push.apply(i,n[this.eventName(t)]);else for(e in n)i.push.apply(i,n[e]);return i},Re.eventName=function(t){var e=t.indexOf(".");return e<0?t:t.slice(0,e)},Re.handleHref=function(t,e,n){this._loader.sanitize(n,{context:"href"}).then(function(e){var n=new MouseEvent(t.type,t),i=Te(null,"a");for(var r in e)i.setAttribute(r,e[r]);i.dispatchEvent(n)}).catch(function(){})},Re.handleTooltip=function(t,e,n){if(e&&null!=e.tooltip){e=function(t,e,n,i){var r,o,s=t&&t.mark;if(s&&(r=ve[s.marktype]).tip){for((o=Pe(e,n))[0]-=i[0],o[1]-=i[1];t=t.mark.group;)o[0]-=t.x||0,o[1]-=t.y||0;t=r.tip(s.items,o)}return t}(e,t,this.canvas(),this._origin);var i=n&&e&&e.tooltip||null;this._tooltip.call(this._obj,this,t,e,i)}},Re.getItemBoundingClientRect=function(t){if(e=this.canvas()){for(var e,n=e.getBoundingClientRect(),i=this._origin,r=t.bounds,o=r.x1+i[0]+n.left,s=r.y1+i[1]+n.top,a=r.width(),u=r.height();t.mark&&(t=t.mark.group);)o+=t.x||0,s+=t.y||0;return{x:o,y:s,width:a,height:u,left:o,top:s,right:o+a,bottom:s+u}}};var Ne=qe.prototype;Ne.initialize=function(t,e,n,i,r){return this._el=t,this.resize(e,n,i,r)},Ne.element=function(){return this._el},Ne.canvas=function(){return this._el&&this._el.firstChild},Ne.background=function(t){return 0===arguments.length?this._bgcolor:(this._bgcolor=t,this)},Ne.resize=function(t,e,n,i){return this._width=t,this._height=e,this._origin=n||[0,0],this._scale=i||1,this},Ne.dirty=function(){},Ne.render=function(t){var e=this;return e._call=function(){e._render(t)},e._call(),e._call=null,e},Ne._render=function(){},Ne.renderAsync=function(t){var e=this.render(t);return this._ready?this._ready.then(function(){return e}):Promise.resolve(e)},Ne._load=function(t,e){var n=this,i=n._loader[t](e);if(!n._ready){var r=n._call;n._ready=n._loader.ready().then(function(t){t&&r(),n._ready=null})}return i},Ne.sanitizeURL=function(t){return this._load("sanitizeURL",t)},Ne.loadImage=function(t){return this._load("loadImage",t)};var Oe="mouseout";function Ee(t,e){Se.call(this,t,e),this._down=null,this._touch=null,this._first=!0}var Ie=e.inherits(Ee,Se);function De(t,e,n){return function(i){var r=this._active,o=this.pickEvent(i);o===r?this.fire(t,i):(r&&r.exit||this.fire(n,i),this._active=o,this.fire(e,i),this.fire(t,i))}}function Ve(t){return function(e){this.fire(t,e),this._active=null}}Ie.initialize=function(t,e,n){var i=this._canvas=t&&Me(t,"canvas");if(i){var r=this;this.events.forEach(function(t){i.addEventListener(t,function(e){Ie[t]?Ie[t].call(r,e):r.fire(t,e)})})}return Se.prototype.initialize.call(this,t,e,n)},Ie.canvas=function(){return this._canvas},Ie.context=function(){return this._canvas.getContext("2d")},Ie.events=["keydown","keypress","keyup","dragenter","dragleave","dragover","mousedown","mouseup","mousemove","mouseout","mouseover","click","dblclick","wheel","mousewheel","touchstart","touchmove","touchend"],Ie.DOMMouseScroll=function(t){this.fire("mousewheel",t)},Ie.mousemove=De("mousemove","mouseover","mouseout"),Ie.dragover=De("dragover","dragenter","dragleave"),Ie.mouseout=Ve("mouseout"),Ie.dragleave=Ve("dragleave"),Ie.mousedown=function(t){this._down=this._active,this.fire("mousedown",t)},Ie.click=function(t){this._down===this._active&&(this.fire("click",t),this._down=null)},Ie.touchstart=function(t){this._touch=this.pickEvent(t.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire("touchstart",t,!0)},Ie.touchmove=function(t){this.fire("touchmove",t,!0)},Ie.touchend=function(t){this.fire("touchend",t,!0),this._touch=null},Ie.fire=function(t,e,n){var i,r,o=n?this._touch:this._active,s=this._handlers[t];if(e.vegaType=t,"click"===t&&o&&o.href?this.handleHref(e,o,o.href):"mousemove"!==t&&t!==Oe||this.handleTooltip(e,o,t!==Oe),s)for(i=0,r=s.length;i<r;++i)s[i].handler.call(this._obj,e,o)},Ie.on=function(t,e){var n=this.eventName(t),i=this._handlers;return this._handlerIndex(i[n],t,e)<0&&(i[n]||(i[n]=[])).push({type:t,handler:e}),this},Ie.off=function(t,e){var n=this.eventName(t),i=this._handlers[n],r=this._handlerIndex(i,t,e);return r>=0&&i.splice(r,1),this},Ie.pickEvent=function(t){var e=Pe(t,this._canvas),n=this._origin;return this.pick(this._scene,e[0],e[1],e[0]-n[0],e[1]-n[1])},Ie.pick=function(t,e,n,i,r){var o=this.context();return ve[t.marktype].pick.call(this,o,t,e,n,i,r)};var He="undefined"!=typeof window&&window.devicePixelRatio||1;function We(t){qe.call(this,t),this._redraw=!1,this._dirty=new s}var Be=e.inherits(We,qe),Ge=qe.prototype,je=new s;function Ue(t,e){Se.call(this,t,e);var n=this;n._hrefHandler=Je(n,function(t,e){e&&e.href&&n.handleHref(t,e,e.href)}),n._tooltipHandler=Je(n,function(t,e){n.handleTooltip(t,e,t.type!==Oe)})}Be.initialize=function(t,e,i,r,o,s){return this._options=s,this._canvas=n.canvas(1,1,s&&s.type),t&&(ze(t,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),Ge.initialize.call(this,t,e,i,r,o)},Be.resize=function(t,e,n,i){return Ge.resize.call(this,t,e,n,i),function(t,e,n,i,r,o){var s,a="undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&null!=t.parentNode,u=t.getContext("2d"),l=a?He:r;for(s in t.width=e*l,t.height=n*l,o)u[s]=o[s];a&&1!==l&&(t.style.width=e+"px",t.style.height=n+"px"),u.pixelRatio=l,u.setTransform(l,0,0,l,l*i[0],l*i[1])}(this._canvas,this._width,this._height,this._origin,this._scale,this._options&&this._options.context),this._redraw=!0,this},Be.canvas=function(){return this._canvas},Be.context=function(){return this._canvas?this._canvas.getContext("2d"):null},Be.dirty=function(t){var e=function(t,e){if(null==e)return t;for(var n=je.clear().union(t);null!=e;e=e.mark.group)n.translate(e.x||0,e.y||0);return n}(t.bounds,t.mark.group);this._dirty.union(e)},Be._render=function(t){var e=this.context(),n=this._origin,i=this._width,r=this._height,o=this._dirty;return e.save(),this._redraw||o.empty()?(this._redraw=!1,o=null):o=function(t,e,n){return e.expand(1).round(),e.translate(-n[0]%1,-n[1]%1),t.beginPath(),t.rect(e.x1,e.y1,e.width(),e.height()),t.clip(),e}(e,o,n),this.clear(-n[0],-n[1],i,r),this.draw(e,t,o),e.restore(),this._dirty.clear(),this},Be.draw=function(t,n,i){var r=ve[n.marktype];n.clip&&function(t,n){var i=n.clip;if(t.save(),t.beginPath(),e.isFunction(i))i(t);else{var r=n.group;t.rect(0,0,r.width||0,r.height||0)}t.clip()}(t,n),r.draw.call(this,t,n,i),n.clip&&t.restore()},Be.clear=function(t,e,n,i){var r=this.context();r.clearRect(t,e,n,i),null!=this._bgcolor&&(r.fillStyle=this._bgcolor,r.fillRect(t,e,n,i))};var Xe=e.inherits(Ue,Se);function Je(t,e){return function(n){var i=n.target.__data__;n.vegaType=n.type,i=Array.isArray(i)?i[0]:i,e.call(t._obj,n,i)}}function Fe(t,e,n){var i,r,o="<"+t;if(e)for(i in e)null!=(r=e[i])&&(o+=" "+i+'="'+r+'"');return n&&(o+=" "+n),o+">"}function Qe(t){return"</"+t+">"}Xe.initialize=function(t,e,n){var i=this._svg;return i&&(i.removeEventListener("click",this._hrefHandler),i.removeEventListener("mousemove",this._tooltipHandler),i.removeEventListener(Oe,this._tooltipHandler)),this._svg=i=t&&Me(t,"svg"),i&&(i.addEventListener("click",this._hrefHandler),i.addEventListener("mousemove",this._tooltipHandler),i.addEventListener(Oe,this._tooltipHandler)),Se.prototype.initialize.call(this,t,e,n)},Xe.canvas=function(){return this._svg},Xe.on=function(t,e){var n=this.eventName(t),i=this._handlers;if(this._handlerIndex(i[n],t,e)<0){var r={type:t,handler:e,listener:Je(this,e)};(i[n]||(i[n]=[])).push(r),this._svg&&this._svg.addEventListener(n,r.listener)}return this},Xe.off=function(t,e){var n=this.eventName(t),i=this._handlers[n],r=this._handlerIndex(i,t,e);return r>=0&&(this._svg&&this._svg.removeEventListener(n,i[r].listener),i.splice(r,1)),this};var Ye={version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},Ze={fill:"fill",fillOpacity:"fill-opacity",stroke:"stroke",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",strokeCap:"stroke-linecap",strokeJoin:"stroke-linejoin",strokeDash:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeMiterLimit:"stroke-miterlimit",opacity:"opacity"},$e=Object.keys(Ze),Ke=Ye.xmlns;function tn(t){qe.call(this,t),this._dirtyID=1,this._dirty=[],this._svg=null,this._root=null,this._defs=null}var en=e.inherits(tn,qe),nn=qe.prototype;function rn(t,e,n){var i,r,o;for((t=Ae(t,n,"linearGradient",Ke)).setAttribute("id",e.id),t.setAttribute("x1",e.x1),t.setAttribute("x2",e.x2),t.setAttribute("y1",e.y1),t.setAttribute("y2",e.y2),i=0,r=e.stops.length;i<r;++i)(o=Ae(t,i,"stop",Ke)).setAttribute("offset",e.stops[i].offset),o.setAttribute("stop-color",e.stops[i].color);ze(t,i)}function on(t,e,n){var i;(t=Ae(t,n,"clipPath",Ke)).setAttribute("id",e.id),e.path?(i=Ae(t,0,"path",Ke)).setAttribute("d",e.path):((i=Ae(t,0,"rect",Ke)).setAttribute("x",0),i.setAttribute("y",0),i.setAttribute("width",e.width),i.setAttribute("height",e.height))}function sn(t,e){for(;t&&t.dirty!==e;t=t.mark.group){if(t.dirty=e,!t.mark||t.mark.dirty===e)return;t.mark.dirty=e}}function an(t,e,n,i,r){var o,s=t._svg;if(!s&&(s=Te(o=e.ownerDocument,i,Ke),t._svg=s,t.mark&&(s.__data__=t,s.__values__={fill:"default"},"g"===i))){var a=Te(o,"path",Ke);a.setAttribute("class","background"),s.appendChild(a),a.__data__=t;var u=Te(o,"g",Ke);s.appendChild(u),u.__data__=t}return(s.ownerSVGElement!==r||function(t){var e=t.mark||t.group;return e&&e.items.length>1}(t)&&s.previousSibling!==n)&&e.insertBefore(s,n?n.nextSibling:e.firstChild),s}en.initialize=function(t,e,n,i){return t&&(this._svg=Ae(t,0,"svg",Ke),this._svg.setAttribute("class","marks"),ze(t,1),this._root=Ae(this._svg,0,"g",Ke),ze(this._svg,1)),this._defs={gradient:{},clipping:{}},this.background(this._bgcolor),nn.initialize.call(this,t,e,n,i)},en.background=function(t){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",t),nn.background.apply(this,arguments)},en.resize=function(t,e,n,i){return nn.resize.call(this,t,e,n,i),this._svg&&(this._svg.setAttribute("width",this._width*this._scale),this._svg.setAttribute("height",this._height*this._scale),this._svg.setAttribute("viewBox","0 0 "+this._width+" "+this._height),this._root.setAttribute("transform","translate("+this._origin+")")),this._dirty=[],this},en.canvas=function(){return this._svg},en.svg=function(){if(!this._svg)return null;var t={class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:"0 0 "+this._width+" "+this._height};for(var e in Ye)t[e]=Ye[e];var n=this._bgcolor?Fe("rect",{width:this._width,height:this._height,style:"fill: "+this._bgcolor+";"})+Qe("rect"):"";return Fe("svg",t)+n+this._svg.innerHTML+Qe("svg")},en._render=function(t){return this._dirtyCheck()&&(this._dirtyAll&&this._resetDefs(),this.draw(this._root,t),ze(this._root,1)),this.updateDefs(),this._dirty=[],++this._dirtyID,this},en.updateDefs=function(){var t,e=this._svg,n=this._defs,i=n.el,r=0;for(t in n.gradient)i||(n.el=i=Ae(e,0,"defs",Ke)),rn(i,n.gradient[t],r++);for(t in n.clipping)i||(n.el=i=Ae(e,0,"defs",Ke)),on(i,n.clipping[t],r++);i&&(0===r?(e.removeChild(i),n.el=null):ze(i,r))},en._resetDefs=function(){var t=this._defs;t.gradient={},t.clipping={}},en.dirty=function(t){t.dirty!==this._dirtyID&&(t.dirty=this._dirtyID,this._dirty.push(t))},en.isDirty=function(t){return this._dirtyAll||!t._svg||t.dirty===this._dirtyID},en._dirtyCheck=function(){this._dirtyAll=!0;var t=this._dirty;if(!t.length)return!0;var e,n,i,r,o,s,a,u=++this._dirtyID;for(o=0,s=t.length;o<s;++o)(n=(e=t[o]).mark).marktype!==i&&(i=n.marktype,r=ve[i]),n.zdirty&&n.dirty!==u&&(this._dirtyAll=!1,sn(e,u),n.items.forEach(function(t){t.dirty=u})),n.zdirty||(e.exit?(r.nested&&n.items.length?(a=n.items[0])._svg&&this._update(r,a._svg,a):e._svg&&(a=e._svg.parentNode)&&a.removeChild(e._svg),e._svg=null):(e=r.nested?n.items[0]:e)._update!==u&&(e._svg&&e._svg.ownerSVGElement?this._update(r,e._svg,e):(this._dirtyAll=!1,sn(e,u)),e._update=u));return!this._dirtyAll},en.draw=function(t,e,n){if(!this.isDirty(e))return e._svg;var i,r=this,o=this._svg,s=ve[e.marktype],a=!1===e.interactive?"none":null,u="g"===s.tag,l=null,h=0;function c(t){var e=r.isDirty(t),n=an(t,i,l,s.tag,o);e&&(r._update(s,n,t),u&&function(t,e,n){e=e.lastChild;var i,r=0;mt(n,function(n){i=t.draw(e,n,i),++r}),ze(e,1+r)}(r,n,t)),l=n,++h}return(i=an(e,t,n,"g",o)).setAttribute("class",Ce(e)),u||i.style.setProperty("pointer-events",a),e.clip?i.setAttribute("clip-path",Nt(r,e,e.group)):i.removeAttribute("clip-path"),s.nested?e.items.length&&c(e.items[0]):mt(e,c),ze(i,h),i};var un=null,ln=null,hn={group:function(t,e,n){ln=e.__values__,un=e.childNodes[1],t.foreground(fn,n,this),un=e.childNodes[0],t.background(fn,n,this);var i=!1===n.mark.interactive?"none":null;i!==ln.events&&(un.style.setProperty("pointer-events",i),ln.events=i)},text:function(t,e,n){var i;(i=se(n))!==ln.text&&(e.textContent=i,ln.text=i),cn(e,"font-family",ae(n)),cn(e,"font-size",re(n)+"px"),cn(e,"font-style",n.fontStyle),cn(e,"font-variant",n.fontVariant),cn(e,"font-weight",n.fontWeight)}};function cn(t,e,n){n!==ln[e]&&(null==n?t.style.removeProperty(e):t.style.setProperty(e,n+""),ln[e]=n)}function fn(t,e,n){e!==ln[t]&&(null!=e?n?un.setAttributeNS(n,t,e):un.setAttribute(t,e):n?un.removeAttributeNS(n,t):un.removeAttribute(t),ln[t]=e)}function dn(t){qe.call(this,t),this._text={head:"",bg:"",root:"",foot:"",defs:"",body:""},this._defs={gradient:{},clipping:{}}}en._update=function(t,e,n){un=e,ln=e.__values__,t.attr(fn,n,this);var i=hn[t.type];i&&i.call(this,t,e,n),this.style(un,n)},en.style=function(t,e){var n,i,r,o,s,a;if(null!=e)for(n=0,i=$e.length;n<i;++n)s=e[r=$e[n]],"font"===r&&(s=ae(e)),s!==ln[r]&&(o=Ze[r],null==s?"fill"===o?t.style.setProperty(o,"none"):t.style.removeProperty(o):(s.id&&(this._defs.gradient[s.id]=s,s="url("+(a=void 0,"undefined"==typeof window?"":(a=window.location).hash?a.href.slice(0,-a.hash.length):a.href)+"#"+s.id+")"),t.style.setProperty(o,s+"")),ln[r]=s)};var vn,gn=e.inherits(dn,qe),pn=qe.prototype;function yn(t,e,n,i){vn[i||t]=e}function _n(t,e,n,i){if(null==t)return"";var r,o,s,a,u,l="";for("bgrect"===n&&!1===e.interactive&&(l+="pointer-events: none; "),"text"===n&&(l+="font-family: "+ae(t)+"; ",l+="font-size: "+re(t)+"px; ",t.fontStyle&&(l+="font-style: "+t.fontStyle+"; "),t.fontVariant&&(l+="font-variant: "+t.fontVariant+"; "),t.fontWeight&&(l+="font-weight: "+t.fontWeight+"; ")),r=0,o=$e.length;r<o;++r)s=$e[r],a=Ze[s],null==(u=t[s])?"fill"===a&&(l+="fill: none; "):"transparent"!==u||"fill"!==a&&"stroke"!==a?(u.id&&(i.gradient[u.id]=u,u="url(#"+u.id+")"),l+=a+": "+u+"; "):l+=a+": none; ";return l?'style="'+l.trim()+'"':null}gn.resize=function(t,e,n,i){pn.resize.call(this,t,e,n,i);var r=this._origin,o=this._text,s={class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:"0 0 "+this._width+" "+this._height};for(var a in Ye)s[a]=Ye[a];o.head=Fe("svg",s);var u=this._bgcolor;return"transparent"!==u&&"none"!==u||(u=null),o.bg=u?Fe("rect",{width:this._width,height:this._height,style:"fill: "+u+";"})+Qe("rect"):"",o.root=Fe("g",{transform:"translate("+r+")"}),o.foot=Qe("g")+Qe("svg"),this},gn.background=function(){var t=pn.background.apply(this,arguments);return arguments.length&&this._text.head&&this.resize(this._width,this._height,this._origin,this._scale),t},gn.svg=function(){var t=this._text;return t.head+t.bg+t.defs+t.root+t.body+t.foot},gn._render=function(t){return this._text.body=this.mark(t),this._text.defs=this.buildDefs(),this},gn.buildDefs=function(){var t,e,n,i,r=this._defs,o="";for(e in r.gradient){for(i=(n=r.gradient[e]).stops,o+=Fe("linearGradient",{id:e,x1:n.x1,x2:n.x2,y1:n.y1,y2:n.y2}),t=0;t<i.length;++t)o+=Fe("stop",{offset:i[t].offset,"stop-color":i[t].color})+Qe("stop");o+=Qe("linearGradient")}for(e in r.clipping)n=r.clipping[e],o+=Fe("clipPath",{id:e}),n.path?o+=Fe("path",{d:n.path})+Qe("path"):o+=Fe("rect",{x:0,y:0,width:n.width,height:n.height})+Qe("rect"),o+=Qe("clipPath");return o.length>0?Fe("defs")+o+Qe("defs"):""},gn.attributes=function(t,e){return vn={},t(yn,e,this),vn},gn.href=function(t){var e,n=this,i=t.href;if(i){if(e=n._hrefs&&n._hrefs[i])return e;n.sanitizeURL(i).then(function(t){t["xlink:href"]=t.href,t.href=null,(n._hrefs||(n._hrefs={}))[i]=t})}return null},gn.mark=function(t){var e,n=this,i=ve[t.marktype],r=i.tag,o=this._defs,s="";function a(a){var u=n.href(a);u&&(s+=Fe("a",u)),e="g"!==r?_n(a,t,r,o):null,s+=Fe(r,n.attributes(i.attr,a),e),"text"===r?s+=se(a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"):"g"===r&&(s+=Fe("path",n.attributes(i.background,a),_n(a,t,"bgrect",o))+Qe("path"),s+=Fe("g",n.attributes(i.foreground,a))+n.markGroup(a)+Qe("g")),s+=Qe(r),u&&(s+=Qe("a"))}return"g"!==r&&!1===t.interactive&&(e='style="pointer-events: none;"'),s+=Fe("g",{class:Ce(t),"clip-path":t.clip?Nt(n,t,t.group):null},e),i.nested?t.items&&t.items.length&&a(t.items[0]):mt(t,a),s+Qe("g")},gn.markGroup=function(t){var e=this,n="";return mt(t,function(t){n+=e.mark(t)}),n};var mn={Canvas:"canvas",PNG:"png",SVG:"svg",None:"none"},xn={};function bn(t,e,n,i){if(function(t,e,n){return t.bounds&&e.intersects(t.bounds)&&("group"===t.marktype||!1!==t.interactive&&(!n||n(t)))}(t,e,n)){const r=t.items,o=t.marktype,s=r.length;let a=0;if("group"===o)for(;a<s;++a)kn(r[a],e,n,i);else for(const t=ve[o].isect;a<s;++a){let n=r[a];wn(n,e,t)&&i.push(n)}}return i}function kn(t,e,n,i){n&&n(t.mark)&&wn(t,e,ve.group.isect)&&i.push(t);const r=t.items,o=r&&r.length;if(o){const s=t.x||0,a=t.y||0;e.translate(-s,-a);for(let t=0;t<o;++t)bn(r[t],e,n,i);e.translate(s,a)}return i}function wn(t,e,n){const i=t.bounds;return e.encloses(i)||e.intersects(i)&&n(t,e)}xn.canvas=xn.png={renderer:We,headless:We,handler:Ee},xn.svg={renderer:tn,headless:dn,handler:Ue},xn.none={};var Tn=new s;var Mn=1e-9;function An(t,n,i){return t===n||("path"===i?zn(t,n):t instanceof Date&&n instanceof Date?+t==+n:e.isNumber(t)&&e.isNumber(n)?Math.abs(t-n)<=Mn:t&&n&&(e.isObject(t)||e.isObject(n))?null!=t&&null!=n&&function(t,e){var n,i,r=Object.keys(t),o=Object.keys(e);if(r.length!==o.length)return!1;for(r.sort(),o.sort(),i=r.length-1;i>=0;i--)if(r[i]!=o[i])return!1;for(i=r.length-1;i>=0;i--)if(n=r[i],!An(t[n],e[n],n))return!1;return typeof t==typeof e}(t,n):t==n)}function zn(t,e){return An(m(t),m(e))}t.Bounds=s,t.Gradient=function(t,e){var n,i=[];return n={id:"gradient_"+u++,x1:t?t[0]:0,y1:t?t[1]:0,x2:e?e[0]:1,y2:e?e[1]:0,stops:i,stop:function(t,e){return i.push({offset:t,color:e}),n}}},t.GroupItem=h,t.ResourceLoader=c,t.Item=l,t.Scenegraph=be,t.Handler=Se,t.Renderer=qe,t.CanvasHandler=Ee,t.CanvasRenderer=We,t.SVGHandler=Ue,t.SVGRenderer=tn,t.SVGStringRenderer=dn,t.RenderType=mn,t.renderModule=function(t,e){return t=String(t||"").toLowerCase(),arguments.length>1?(xn[t]=e,this):xn[t]},t.intersect=function(t,n,i){const r=[],o=(new s).union(n),a=t.marktype;return a?bn(t,o,i,r):"group"===a?kn(t,o,i,r):e.error("Intersect scene must be mark node or group item.")},t.Marks=ve,t.boundClip=function(t){var n=t.clip;if(e.isFunction(n))n(it(Tn.clear()));else{if(!n)return;Tn.set(0,0,t.group.width,t.group.height)}t.bounds.intersect(Tn)},t.boundContext=it,t.boundStroke=tt,t.boundItem=ge,t.boundMark=ye,t.pathCurves=p,t.pathSymbols=q,t.pathRectangle=H,t.pathTrail=W,t.pathParse=m,t.pathRender=S,t.point=Pe,t.domCreate=Te,t.domFind=Me,t.domChild=Ae,t.domClear=ze,t.openTag=Fe,t.closeTag=Qe,t.font=ue,t.fontFamily=ae,t.fontSize=re,t.textMetrics=Kt,t.resetSVGClipId=function(){qt=1},t.sceneEqual=An,t.pathEqual=zn,t.sceneToJSON=me,t.sceneFromJSON=xe,t.intersectPath=ut,t.intersectPoint=lt,t.intersectRule=ct,t.intersectBoxLine=ft,t.sceneZOrder=_t,t.sceneVisit=mt,t.scenePickVisit=xt,Object.defineProperty(t,"__esModule",{value:!0})}); |
@@ -16,2 +16,3 @@ export {default as Bounds} from './src/Bounds'; | ||
export {RenderType, renderModule} from './src/modules'; | ||
export {intersect} from './src/intersect'; | ||
@@ -42,2 +43,8 @@ export {default as Marks} from './src/marks/index'; | ||
export { | ||
intersectPath, | ||
intersectPoint, | ||
intersectRule, | ||
intersectBoxLine | ||
} from './src/util/intersect'; | ||
export { | ||
zorder as sceneZOrder, | ||
@@ -44,0 +51,0 @@ visit as sceneVisit, |
{ | ||
"name": "vega-scenegraph", | ||
"version": "3.2.3", | ||
"version": "4.0.0", | ||
"description": "Vega scenegraph and renderers.", | ||
"license": "BSD-3-Clause", | ||
"author": { | ||
"name": "Jeffrey Heer", | ||
"url": "http://idl.cs.washington.edu" | ||
}, | ||
"contributors": [ | ||
{ | ||
"name": "Arvind Satyanarayan", | ||
"url": "http://arvindsatya.com" | ||
}, | ||
{ | ||
"name": "Emily Gu", | ||
"url": "https://github.com/emilygu" | ||
} | ||
], | ||
"author": "Jeffrey Heer (http://idl.cs.washington.edu)", | ||
"main": "build/vega-scenegraph.js", | ||
"module": "index", | ||
"jsnext:main": "index", | ||
"repository": { | ||
"type": "git", | ||
"url": "http://github.com/vega/vega-scenegraph.git" | ||
}, | ||
"repository": "vega/vega", | ||
"scripts": { | ||
"build": "npm run test && uglifyjs build/vega-scenegraph.js -c -m -o build/vega-scenegraph.min.js", | ||
"pretest": "rm -rf build && mkdir build && rollup -f umd -g d3-path:d3,d3-shape:d3,vega-canvas:vega,vega-loader:vega,vega-util:vega -n vega -o build/vega-scenegraph.js -- index.js && bin/schema > build/vega-scenegraph-schema.json", | ||
"rollup": "rollup -f umd -g d3-path:d3,d3-shape:d3,vega-canvas:vega,vega-loader:vega,vega-util:vega -n vega -o build/vega-scenegraph.js -- index.js", | ||
"schema": "node schema > build/vega-scenegraph-schema.json", | ||
"prebuild": "rimraf build && mkdir build", | ||
"build": "yarn rollup && yarn schema", | ||
"postbuild": "terser build/vega-scenegraph.js -c -m -o build/vega-scenegraph.min.js", | ||
"pretest": "yarn prebuild && yarn rollup && yarn schema", | ||
"test": "tape 'test/**/*-test.js' && eslint index.js src test", | ||
"prepublishOnly": "npm run build", | ||
"postpublish": "git push && git push --tags && zip -j build/vega-scenegraph.zip -- LICENSE README.md build/vega-scenegraph-schema.json build/vega-scenegraph.js build/vega-scenegraph.min.js" | ||
"prepublishOnly": "yarn test && yarn build", | ||
"postpublish": "git push && git push --tags" | ||
}, | ||
"dependencies": { | ||
"d3-path": "^1.0.7", | ||
"d3-shape": "^1.2.2", | ||
"vega-canvas": "^1.1.0", | ||
"vega-loader": "^3.0.1", | ||
"vega-util": "^1.7.0" | ||
}, | ||
"devDependencies": { | ||
"canvas": "^1.6.13", | ||
"eslint": "5", | ||
"jsdom": "11", | ||
"rollup": "0.66.6", | ||
"tape": "4", | ||
"tv4": "1", | ||
"uglify-js": "3" | ||
"d3-shape": "^1.3.4", | ||
"vega-canvas": "^1.2.0", | ||
"vega-loader": "^4.0.0", | ||
"vega-util": "^1.8.0" | ||
} | ||
} |
# vega-scenegraph | ||
[Vega](http://github.com/vega/vega) scenegraph and renderers. | ||
[Vega](https://github.com/vega/vega) scenegraph and renderers. | ||
Renderers and event handlers for Vega's mark-based scenegraph. This module | ||
supports both pixel-based (canvas) and vector graphics (SVG) output. Renderers | ||
can either (re-)draw a complete scene or perform incremental re-rendering for | ||
a set of provided "dirty" items. A fast SVG string renderer is also provided | ||
to generate static SVG for export. | ||
Renderers and event handlers for Vega's mark-based scenegraph. This package supports both pixel-based (canvas) and vector graphics (SVG) output. Renderers can either (re-)draw a complete scene or perform incremental re-rendering for a set of provided "dirty" items. A fast SVG string renderer is also provided to generate static SVG for export. | ||
The [node-canvas](https://github.com/Automattic/node-canvas) library is used | ||
for server-side canvas rendering and bounds calculation. Node-canvas requires | ||
the native Cairo graphics library and attempts to compile native code as part | ||
of the installation process. In some instances this may result in installation | ||
hiccups. Should you run into issues, you are likely to resolve them more | ||
quickly if you first search for help regarding node-canvas (as opposed to | ||
vega-scenegraph) installation. However, node-canvas is an optional dependency, | ||
and is not needed for SVG rendering. Bounds calculation can be performed | ||
without node-canvas, though in the case of text marks the resulting bounds | ||
may be inaccurate due to approximate text size calculations. | ||
The [node-canvas](https://github.com/Automattic/node-canvas) library is used for server-side canvas rendering and bounds calculation. Node-canvas requires the native Cairo graphics library and may attempt to compile native code as part of the installation process. In some instances this may result in installation hiccups. Should you run into issues, you are likely to resolve them more quickly if you first search for help regarding node-canvas (as opposed to vega-scenegraph) installation. However, node-canvas is not a strict dependency, and is not needed for SVG rendering. Bounds calculation can be performed without node-canvas, though in the case of text marks the resulting bounds may be inaccurate due to approximate text size calculations. | ||
## Scenegraph Definition | ||
The Vega scenegraph is a hierarchical (tree) data structure. The levels of the | ||
tree alternate between an enclosing *mark* definition and contained sets of | ||
mark instances called *items*. | ||
The Vega scenegraph is a hierarchical (tree) data structure. The levels of the tree alternate between an enclosing *mark* definition and contained sets of mark instances called *items*. | ||
For example, here is a simple scenegraph containing three rectangles: | ||
``` | ||
```json | ||
{ | ||
@@ -40,11 +26,7 @@ "marktype": "rect", | ||
The supported mark types are rectangles (`rect`), plotting symbols (`symbol`), | ||
general paths or polygons (`path`), circular arcs (`arc`), filled areas | ||
(`area`), lines (`line`), images (`image`), text labels (`text`), and chart | ||
gridlines or rules (`rule`). Each item has a set of supported properties (`x`, | ||
`y`, `width`, `fill`, and so on) appropriate to the mark type. | ||
The supported mark types are rectangles (`rect`), plotting symbols (`symbol`), general paths or polygons (`path`), circular arcs (`arc`), filled areas (`area`), lines (`line`), images (`image`), text labels (`text`), and chart gridlines or rules (`rule`). Each item has a set of supported properties (`x`, `y`, `width`, `fill`, and so on) appropriate to the mark type. | ||
Scenegraphs may also contain `group` marks, which serve as containers for | ||
other marks. For example, a top-level group mark may look like: | ||
``` | ||
Scenegraphs may also contain `group` marks, which serve as containers for other marks. For example, a top-level group mark may look like: | ||
```json | ||
{ | ||
@@ -64,30 +46,12 @@ "marktype": "group", | ||
In this example, the group *mark* contains only a single group *item*. In | ||
practice, a group mark may contain any number of group items, for example to | ||
describe a scene with multiple layers or sub-plots. | ||
In this example, the group *mark* contains only a single group *item*. In practice, a group mark may contain any number of group items, for example to describe a scene with multiple layers or sub-plots. | ||
For more information regarding supported mark properties, please see the | ||
[Vega marks documentation](https://vega.github.io/vega/docs/marks/). | ||
For more information regarding supported mark properties, please see the [Vega marks documentation](https://vega.github.io/vega/docs/marks/). | ||
## Scenegraph Serialization | ||
The top-level export of this package includes `fromJSON` and `toJSON` methods | ||
to support scenegraph serialization. The `fromJSON` method expects a JSON | ||
string as input (similar to the examples listed above). It will then add | ||
additional parent pointers to the tree structure. For example, each item will | ||
have a `mark` property pointing to it's parent mark, and each mark will have a | ||
`group` property pointing to it's parent group (if any). The `toJSON` method | ||
maps a scenegraph instance to a JSON string, stripping any parent pointers or | ||
other non-standard properties. | ||
The top-level export of this package includes `fromJSON` and `toJSON` methods to support scenegraph serialization. The `fromJSON` method expects a JSON string as input (similar to the examples listed above). It will then add additional parent pointers to the tree structure. For example, each item will have a `mark` property pointing to it's parent mark, and each mark will have a `group` property pointing to it's parent group (if any). The `toJSON` method maps a scenegraph instance to a JSON string, stripping any parent pointers or other non-standard properties. | ||
## Test Suite | ||
The vega-scengraph test suite compares rendered output for both Canvas (PNG) | ||
and SVG (text) renderers. Due to differences among platforms, pixel-level | ||
rendering by node-canvas can differ across operating systems. | ||
As a result, some test cases may break when running on a system other than | ||
Mac OS X (our standard platform for testing). If you are running on Linux or | ||
Windows and experience test failures, it does not necessarily indicate an | ||
issue with vega-scenegraph. In such cases, we recommend running the | ||
node-canvas test-server (`npm run test-server` from the node-canvas | ||
repository) to compare server-side and client-side rendering. | ||
The vega-scengraph test suite compares rendered output for both Canvas (PNG) and SVG (text) renderers. Due to differences among platforms, pixel-level rendering by node-canvas can differ across operating systems. As a result, some test cases may break when running on a system other than Mac OS X (our standard platform for testing). If you are running on Linux or Windows and experience test failures, it does not necessarily indicate an issue with vega-scenegraph. In such cases, we recommend running the node-canvas test-server (`npm run test-server` from the node-canvas repository) to compare server-side and client-side rendering. |
@@ -0,5 +1,5 @@ | ||
import {HalfPi, Tau} from '../util/constants'; | ||
var bounds, | ||
tau = Math.PI * 2, | ||
halfPi = tau / 4, | ||
circleThreshold = tau - 1e-8; | ||
circleThreshold = Tau - 1e-8; | ||
@@ -64,4 +64,4 @@ export default function context(_) { | ||
if (ea !== sa) { | ||
sa = sa % tau; if (sa < 0) sa += tau; | ||
ea = ea % tau; if (ea < 0) ea += tau; | ||
sa = sa % Tau; if (sa < 0) sa += Tau; | ||
ea = ea % Tau; if (ea < 0) ea += Tau; | ||
@@ -74,8 +74,8 @@ if (ea < sa) { | ||
if (ccw) { | ||
ea -= tau; | ||
s = sa - (sa % halfPi); | ||
for (i=0; i<4 && s>ea; ++i, s-=halfPi) update(s); | ||
ea -= Tau; | ||
s = sa - (sa % HalfPi); | ||
for (i=0; i<4 && s>ea; ++i, s-=HalfPi) update(s); | ||
} else { | ||
s = sa - (sa % halfPi) + halfPi; | ||
for (i=0; i<4 && s<ea; ++i, s=s+halfPi) update(s); | ||
s = sa - (sa % HalfPi) + HalfPi; | ||
for (i=0; i<4 && s<ea; ++i, s=s+HalfPi) update(s); | ||
} | ||
@@ -82,0 +82,0 @@ } |
@@ -80,14 +80,23 @@ export default function Bounds(b) { | ||
prototype.rotate = function(angle, x, y) { | ||
var cos = Math.cos(angle), | ||
const p = this.rotatedPoints(angle, x, y); | ||
return this.clear() | ||
.add(p[0], p[1]) | ||
.add(p[2], p[3]) | ||
.add(p[4], p[5]) | ||
.add(p[6], p[7]); | ||
}; | ||
prototype.rotatedPoints = function(angle, x, y) { | ||
var {x1, y1, x2, y2} = this, | ||
cos = Math.cos(angle), | ||
sin = Math.sin(angle), | ||
cx = x - x*cos + y*sin, | ||
cy = y - x*sin - y*cos, | ||
x1 = this.x1, x2 = this.x2, | ||
y1 = this.y1, y2 = this.y2; | ||
cy = y - x*sin - y*cos; | ||
return this.clear() | ||
.add(cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy) | ||
.add(cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy) | ||
.add(cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy) | ||
.add(cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy); | ||
return [ | ||
cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy, | ||
cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy, | ||
cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy, | ||
cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy | ||
]; | ||
}; | ||
@@ -94,0 +103,0 @@ |
@@ -21,4 +21,6 @@ import Renderer from './Renderer'; | ||
prototype.initialize = function(el, width, height, origin, scaleFactor) { | ||
this._canvas = canvas(1, 1); // instantiate a small canvas | ||
prototype.initialize = function(el, width, height, origin, scaleFactor, options) { | ||
this._options = options; | ||
this._canvas = canvas(1, 1, options && options.type); // instantiate a small canvas | ||
if (el) { | ||
@@ -34,3 +36,4 @@ domClear(el, 0).appendChild(this._canvas); | ||
base.resize.call(this, width, height, origin, scaleFactor); | ||
resize(this._canvas, this._width, this._height, this._origin, this._scale); | ||
resize(this._canvas, this._width, this._height, | ||
this._origin, this._scale, this._options && this._options.context); | ||
this._redraw = true; | ||
@@ -37,0 +40,0 @@ return this; |
import {rectangle} from '../path/shapes'; | ||
import boundStroke from '../bound/boundStroke'; | ||
import {intersectRect} from '../util/intersect'; | ||
import {visit, pickVisit} from '../util/visit'; | ||
@@ -8,3 +9,3 @@ import stroke from '../util/canvas/stroke'; | ||
import clip from '../util/svg/clip'; | ||
import translateItem from '../util/svg/translateItem'; | ||
import {translateItem} from '../util/svg/transform'; | ||
@@ -159,4 +160,5 @@ var StrokeOffset = 0.5; | ||
pick: pick, | ||
isect: intersectRect, | ||
background: background, | ||
foreground: foreground | ||
}; |
import {visit} from '../util/visit'; | ||
import {pick} from '../util/canvas/pick'; | ||
import translate from '../util/svg/translate'; | ||
import {translate} from '../util/svg/transform'; | ||
import {truthy} from 'vega-util'; | ||
@@ -103,2 +104,3 @@ function getImage(item, renderer) { | ||
pick: pick(), | ||
isect: truthy, // bounds check is sufficient | ||
get: getImage, | ||
@@ -105,0 +107,0 @@ xOffset: imageXOffset, |
import boundStroke from '../bound/boundStroke'; | ||
import context from '../bound/boundContext'; | ||
import {intersectPath} from '../util/intersect'; | ||
import {drawAll} from '../util/canvas/draw'; | ||
import {pickPath} from '../util/canvas/pick'; | ||
import translateItem from '../util/svg/translateItem'; | ||
import {transformItem} from '../util/svg/transform'; | ||
import {DegToRad} from '../util/constants'; | ||
export default function(type, shape) { | ||
export default function(type, shape, isect) { | ||
function attr(emit, item) { | ||
emit('transform', translateItem(item)); | ||
emit('transform', transformItem(item)); | ||
emit('d', shape(null, item)); | ||
@@ -15,5 +17,12 @@ } | ||
function bound(bounds, item) { | ||
var x = item.x || 0, | ||
y = item.y || 0; | ||
shape(context(bounds), item); | ||
return boundStroke(bounds, item) | ||
.translate(item.x || 0, item.y || 0); | ||
boundStroke(bounds, item).translate(x, y); | ||
if (item.angle) { | ||
bounds.rotate(item.angle * DegToRad, x, y); | ||
} | ||
return bounds; | ||
} | ||
@@ -23,6 +32,10 @@ | ||
var x = item.x || 0, | ||
y = item.y || 0; | ||
y = item.y || 0, | ||
a = item.angle || 0; | ||
context.translate(x, y); | ||
if (a) context.rotate(a *= DegToRad); | ||
context.beginPath(); | ||
shape(context, item); | ||
if (a) context.rotate(-a); | ||
context.translate(-x, -y); | ||
@@ -38,5 +51,6 @@ } | ||
draw: drawAll(draw), | ||
pick: pickPath(draw) | ||
pick: pickPath(draw), | ||
isect: isect || intersectPath(draw) | ||
}; | ||
} |
import boundStroke from '../bound/boundStroke'; | ||
import context from '../bound/boundContext'; | ||
import {intersectPoint} from '../util/intersect'; | ||
import {drawOne} from '../util/canvas/draw'; | ||
@@ -51,2 +52,3 @@ import {hitPath} from '../util/canvas/pick'; | ||
pick: pick, | ||
isect: intersectPoint, | ||
tip: tip | ||
@@ -53,0 +55,0 @@ }; |
@@ -5,5 +5,6 @@ import boundStroke from '../bound/boundStroke'; | ||
import pathRender from '../path/render'; | ||
import {intersectPath} from '../util/intersect'; | ||
import {drawAll} from '../util/canvas/draw'; | ||
import {pickPath} from '../util/canvas/pick'; | ||
import translateItem from '../util/svg/translateItem'; | ||
import {translateItem} from '../util/svg/transform'; | ||
@@ -39,3 +40,4 @@ function attr(emit, item) { | ||
draw: drawAll(path), | ||
pick: pickPath(path) | ||
pick: pickPath(path), | ||
isect: intersectPath(path) | ||
}; |
import boundStroke from '../bound/boundStroke'; | ||
import {rectangle} from '../path/shapes'; | ||
import {intersectRect} from '../util/intersect'; | ||
import {drawAll} from '../util/canvas/draw'; | ||
@@ -32,3 +33,4 @@ import {pickPath} from '../util/canvas/pick'; | ||
draw: drawAll(draw), | ||
pick: pickPath(draw) | ||
pick: pickPath(draw), | ||
isect: intersectRect | ||
}; |
import boundStroke from '../bound/boundStroke'; | ||
import {intersectRule} from '../util/intersect'; | ||
import {visit} from '../util/visit'; | ||
import {pick} from '../util/canvas/pick'; | ||
import stroke from '../util/canvas/stroke'; | ||
import translateItem from '../util/svg/translateItem'; | ||
import {translateItem} from '../util/svg/transform'; | ||
function attr(emit, item) { | ||
emit('transform', translateItem(item)); | ||
emit('x2', item.x2 != null ? item.x2 - (item.x||0) : 0); | ||
emit('y2', item.y2 != null ? item.y2 - (item.y||0) : 0); | ||
emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0); | ||
emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0); | ||
} | ||
@@ -61,3 +62,4 @@ | ||
draw: draw, | ||
pick: pick(hit) | ||
pick: pick(hit), | ||
isect: intersectRule | ||
}; |
import {symbol} from '../path/shapes'; | ||
import {intersectPoint} from '../util/intersect'; | ||
import markItemPath from './markItemPath'; | ||
export default markItemPath('symbol', symbol); | ||
export default markItemPath('symbol', symbol, intersectPoint); |
import Bounds from '../Bounds'; | ||
import {DegToRad, HalfPi} from '../util/constants'; | ||
import {font, offset, textMetrics, textValue} from '../util/text'; | ||
import {intersectBoxLine} from '../util/intersect'; | ||
import {visit} from '../util/visit'; | ||
@@ -7,3 +9,3 @@ import fill from '../util/canvas/fill'; | ||
import stroke from '../util/canvas/stroke'; | ||
import translate from '../util/svg/translate'; | ||
import {translate, rotate} from '../util/svg/transform'; | ||
@@ -18,12 +20,9 @@ var textAlign = { | ||
function attr(emit, item) { | ||
var dx = item.dx || 0, | ||
dy = (item.dy || 0) + offset(item), | ||
x = item.x || 0, | ||
function anchorPoint(item) { | ||
var x = item.x || 0, | ||
y = item.y || 0, | ||
a = item.angle || 0, | ||
r = item.radius || 0, t; | ||
if (r) { | ||
t = (item.theta || 0) - Math.PI/2; | ||
t = (item.theta || 0) - HalfPi; | ||
x += r * Math.cos(t); | ||
@@ -33,6 +32,19 @@ y += r * Math.sin(t); | ||
tempBounds.x1 = x; | ||
tempBounds.y1 = y; | ||
return tempBounds; | ||
} | ||
function attr(emit, item) { | ||
var dx = item.dx || 0, | ||
dy = (item.dy || 0) + offset(item), | ||
p = anchorPoint(item), | ||
x = p.x1, | ||
y = p.y1, | ||
a = item.angle || 0, t; | ||
emit('text-anchor', textAlign[item.align] || 'start'); | ||
if (a) { | ||
t = translate(x, y) + ' rotate('+a+')'; | ||
t = translate(x, y) + ' ' + rotate(a); | ||
if (dx || dy) t += ' ' + translate(dx, dy); | ||
@@ -45,18 +57,12 @@ } else { | ||
function bound(bounds, item, noRotate) { | ||
function bound(bounds, item, mode) { | ||
var h = textMetrics.height(item), | ||
a = item.align, | ||
r = item.radius || 0, | ||
x = item.x || 0, | ||
y = item.y || 0, | ||
p = anchorPoint(item), | ||
x = p.x1, | ||
y = p.y1, | ||
dx = item.dx || 0, | ||
dy = (item.dy || 0) + offset(item) - Math.round(0.8*h), // use 4/5 offset | ||
w, t; | ||
w; | ||
if (r) { | ||
t = (item.theta || 0) - Math.PI/2; | ||
x += r * Math.cos(t); | ||
y += r * Math.sin(t); | ||
} | ||
// horizontal alignment | ||
@@ -73,6 +79,8 @@ w = textMetrics.width(item); | ||
bounds.set(dx+=x, dy+=y, dx+w, dy+h); | ||
if (item.angle && !noRotate) { | ||
bounds.rotate(item.angle*Math.PI/180, x, y); | ||
if (item.angle && !mode) { | ||
bounds.rotate(item.angle * DegToRad, x, y); | ||
} else if (mode === 2) { | ||
return bounds.rotatedPoints(item.angle * DegToRad, x, y); | ||
} | ||
return bounds.expand(noRotate || !w ? 0 : 1); | ||
return bounds.expand(mode || !w ? 0 : 1); | ||
} | ||
@@ -82,3 +90,3 @@ | ||
visit(scene, function(item) { | ||
var opacity, x, y, r, t, str; | ||
var opacity, p, x, y, str; | ||
if (bounds && !bounds.intersects(item.bounds)) return; // bounds check | ||
@@ -88,3 +96,3 @@ if (!(str = textValue(item))) return; // get text string | ||
opacity = item.opacity == null ? 1 : item.opacity; | ||
if (opacity === 0) return; | ||
if (opacity === 0 || item.fontSize <= 0) return; | ||
@@ -94,9 +102,5 @@ context.font = font(item); | ||
x = item.x || 0; | ||
y = item.y || 0; | ||
if ((r = item.radius)) { | ||
t = (item.theta || 0) - Math.PI/2; | ||
x += r * Math.cos(t); | ||
y += r * Math.sin(t); | ||
} | ||
p = anchorPoint(item); | ||
x = p.x1, | ||
y = p.y1; | ||
@@ -106,3 +110,3 @@ if (item.angle) { | ||
context.translate(x, y); | ||
context.rotate(item.angle * Math.PI/180); | ||
context.rotate(item.angle * DegToRad); | ||
x = y = 0; // reset x, y | ||
@@ -128,10 +132,11 @@ } | ||
// project point into space of unrotated bounds | ||
var b = bound(tempBounds, item, true), | ||
a = -item.angle * Math.PI / 180, | ||
var p = anchorPoint(item), | ||
ax = p.x1, | ||
ay = p.y1, | ||
b = bound(tempBounds, item, 1), | ||
a = -item.angle * DegToRad, | ||
cos = Math.cos(a), | ||
sin = Math.sin(a), | ||
ix = item.x, | ||
iy = item.y, | ||
px = cos*gx - sin*gy + (ix - ix*cos + iy*sin), | ||
py = sin*gx + cos*gy + (iy - ix*sin - iy*cos); | ||
px = cos * gx - sin * gy + (ax - cos * ax + sin * ay), | ||
py = sin * gx + cos * gy + (ay - sin * ax - cos * ay); | ||
@@ -141,2 +146,10 @@ return b.contains(px, py); | ||
function intersectText(item, box) { | ||
var p = bound(tempBounds, item, 2); | ||
return intersectBoxLine(box, p[0], p[1], p[2], p[3]) | ||
|| intersectBoxLine(box, p[0], p[1], p[4], p[5]) | ||
|| intersectBoxLine(box, p[4], p[5], p[6], p[7]) | ||
|| intersectBoxLine(box, p[2], p[3], p[6], p[7]); | ||
} | ||
export default { | ||
@@ -149,3 +162,4 @@ type: 'text', | ||
draw: draw, | ||
pick: pick(hit) | ||
pick: pick(hit), | ||
isect: intersectText | ||
}; |
@@ -0,1 +1,3 @@ | ||
import {DegToRad, HalfPi, Tau} from '../util/constants'; | ||
export var segmentCache = {}; | ||
@@ -13,3 +15,3 @@ export var bezierCache = {}; | ||
var th = rotateX * (Math.PI/180); | ||
var th = rotateX * DegToRad; | ||
var sin_th = Math.sin(th); | ||
@@ -50,8 +52,8 @@ var cos_th = Math.cos(th); | ||
if (th_arc < 0 && sweep === 1) { | ||
th_arc += 2 * Math.PI; | ||
th_arc += Tau; | ||
} else if (th_arc > 0 && sweep === 0) { | ||
th_arc -= 2 * Math.PI; | ||
th_arc -= Tau; | ||
} | ||
var segs = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); | ||
var segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001))); | ||
var result = []; | ||
@@ -58,0 +60,0 @@ for (var i=0; i<segs; ++i) { |
import pathParse from './parse'; | ||
import pathRender from './render'; | ||
import {Tau, HalfSqrt3} from '../util/constants'; | ||
var tau = 2 * Math.PI, | ||
halfSqrt3 = Math.sqrt(3) / 2; | ||
var Tan30 = 0.5773502691896257; | ||
@@ -12,3 +12,3 @@ var builtins = { | ||
context.moveTo(r, 0); | ||
context.arc(0, 0, r, 0, tau); | ||
context.arc(0, 0, r, 0, Tau); | ||
} | ||
@@ -52,6 +52,45 @@ }, | ||
}, | ||
'arrow': { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size) / 2, | ||
s = r / 7, | ||
t = r / 2.5, | ||
v = r / 8; | ||
context.moveTo(-s, r); | ||
context.lineTo(s, r); | ||
context.lineTo(s, -v); | ||
context.lineTo(t, -v); | ||
context.lineTo(0, -r); | ||
context.lineTo(-t, -v); | ||
context.lineTo(-s, -v); | ||
context.closePath(); | ||
} | ||
}, | ||
'wedge': { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size) / 2, | ||
h = HalfSqrt3 * r, | ||
o = (h - r * Tan30), | ||
b = r / 4; | ||
context.moveTo(0, -h - o); | ||
context.lineTo(-b, h - o); | ||
context.lineTo(b, h - o); | ||
context.closePath(); | ||
} | ||
}, | ||
'triangle': { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size) / 2, | ||
h = HalfSqrt3 * r, | ||
o = (h - r * Tan30); | ||
context.moveTo(0, -h - o); | ||
context.lineTo(-r, h - o); | ||
context.lineTo(r, h - o); | ||
context.closePath(); | ||
} | ||
}, | ||
'triangle-up': { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size) / 2, | ||
h = halfSqrt3 * r; | ||
h = HalfSqrt3 * r; | ||
context.moveTo(0, -h); | ||
@@ -66,3 +105,3 @@ context.lineTo(-r, h); | ||
var r = Math.sqrt(size) / 2, | ||
h = halfSqrt3 * r; | ||
h = HalfSqrt3 * r; | ||
context.moveTo(0, h); | ||
@@ -77,3 +116,3 @@ context.lineTo(-r, -h); | ||
var r = Math.sqrt(size) / 2, | ||
h = halfSqrt3 * r; | ||
h = HalfSqrt3 * r; | ||
context.moveTo(h, 0); | ||
@@ -88,3 +127,3 @@ context.lineTo(-h, -r); | ||
var r = Math.sqrt(size) / 2, | ||
h = halfSqrt3 * r; | ||
h = HalfSqrt3 * r; | ||
context.moveTo(-h, 0); | ||
@@ -95,2 +134,9 @@ context.lineTo(h, -r); | ||
} | ||
}, | ||
'stroke': { | ||
draw: function(context, size) { | ||
var r = Math.sqrt(size) / 2; | ||
context.moveTo(-r, 0); | ||
context.lineTo(r, 0); | ||
} | ||
} | ||
@@ -97,0 +143,0 @@ }; |
@@ -0,5 +1,4 @@ | ||
import {Tau} from '../util/constants'; | ||
import {path} from 'd3-path'; | ||
var pi = Math.PI; | ||
export default function() { | ||
@@ -30,7 +29,7 @@ var x, | ||
context.lineTo(x2 - ux * r2, y2 - uy * r2); | ||
context.arc(x2, y2, r2, t - pi, t); | ||
context.arc(x2, y2, r2, t - Math.PI, t); | ||
context.lineTo(x1 + rx, y1 + ry); | ||
context.arc(x1, y1, r1, t, t + pi); | ||
context.arc(x1, y1, r1, t, t + Math.PI); | ||
} else { | ||
context.arc(x2, y2, r2, 0, 2*pi); | ||
context.arc(x2, y2, r2, 0, Tau); | ||
} | ||
@@ -37,0 +36,0 @@ context.closePath(); |
import {pickVisit} from '../visit'; | ||
import {truthy} from 'vega-util'; | ||
var trueFunc = function() { return true; }; | ||
export function pick(test) { | ||
if (!test) test = trueFunc; | ||
test = test || truthy; | ||
@@ -8,0 +7,0 @@ return function(context, scene, x, y, gx, gy) { |
@@ -7,3 +7,3 @@ function devicePixelRatio() { | ||
export default function(canvas, width, height, origin, scaleFactor) { | ||
export default function(canvas, width, height, origin, scaleFactor, opt) { | ||
var inDOM = typeof HTMLElement !== 'undefined' | ||
@@ -14,3 +14,4 @@ && canvas instanceof HTMLElement | ||
var context = canvas.getContext('2d'), | ||
ratio = inDOM ? pixelRatio : scaleFactor; | ||
ratio = inDOM ? pixelRatio : scaleFactor, | ||
key; | ||
@@ -20,2 +21,6 @@ canvas.width = width * ratio; | ||
for (key in opt) { | ||
context[key] = opt[key]; | ||
} | ||
if (inDOM && ratio !== 1) { | ||
@@ -22,0 +27,0 @@ canvas.style.width = width + 'px'; |
@@ -1,5 +0,4 @@ | ||
import {canvas} from 'vega-canvas'; | ||
import {context} from './canvas/context'; | ||
var context, | ||
currFontHeight; | ||
var currFontHeight; | ||
@@ -28,4 +27,4 @@ export var textMetrics = { | ||
function measureWidth(item) { | ||
context.font = font(item); | ||
return measure(textValue(item)); | ||
return fontSize(item) <= 0 ? 0 | ||
: (context.font = font(item), measure(textValue(item))); | ||
} | ||
@@ -42,4 +41,3 @@ | ||
function useCanvas(use) { | ||
context = use && (context = canvas(1,1)) ? context.getContext('2d') : null; | ||
textMetrics.width = context ? measureWidth : estimateWidth; | ||
textMetrics.width = (use && context) ? measureWidth : estimateWidth; | ||
} | ||
@@ -61,6 +59,8 @@ | ||
if (context) { | ||
if (textMetrics.width === measureWidth) { | ||
// we are using canvas | ||
context.font = font(item); | ||
width = measure; | ||
} else { | ||
// we are relying on estimates | ||
currFontHeight = fontSize(item); | ||
@@ -67,0 +67,0 @@ width = estimate; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
348206
0
77
9690
56
1
+ Addedcommander@7.2.0(transitive)
+ Addedd3-array@3.2.4(transitive)
+ Addedd3-dsv@3.0.1(transitive)
+ Addedd3-format@3.1.0(transitive)
+ Addedd3-time@3.1.0(transitive)
+ Addedd3-time-format@4.1.0(transitive)
+ Addediconv-lite@0.6.3(transitive)
+ Addedinternmap@2.0.3(transitive)
+ Addedvega-format@1.1.2(transitive)
+ Addedvega-loader@4.5.2(transitive)
+ Addedvega-time@2.1.2(transitive)
- Removedd3-dsv@1.2.0(transitive)
- Removedd3-time@1.1.0(transitive)
- Removedd3-time-format@2.3.0(transitive)
- Removediconv-lite@0.4.24(transitive)
- Removedvega-loader@3.1.0(transitive)
Updatedd3-shape@^1.3.4
Updatedvega-canvas@^1.2.0
Updatedvega-loader@^4.0.0
Updatedvega-util@^1.8.0