From 6defff5c3014b43cc1de3bf9f1719db768ec2a4b Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Fri, 9 Oct 2015 11:27:39 -0700 Subject: [PATCH] release 0.7.18 19a3399e1f1b478c7172a45dca755bf2709f2791 --- spec.json | 1 - vega-lite.js | 62 +++++++++++++++++++++----------------------- vega-lite.min.js | 10 +++---- vega-lite.min.js.map | 2 +- 4 files changed, 35 insertions(+), 40 deletions(-) diff --git a/spec.json b/spec.json index ac77757d56..c12931e923 100644 --- a/spec.json +++ b/spec.json @@ -1022,7 +1022,6 @@ "filterNull": { "type": "object", "properties": { - "N": {"type": "boolean","default": false}, "O": {"type": "boolean","default": false}, "Q": {"type": "boolean","default": true}, "T": {"type": "boolean","default": true} diff --git a/vega-lite.js b/vega-lite.js index ca7be4ad5c..30b7ed5154 100644 --- a/vega-lite.js +++ b/vega-lite.js @@ -2447,7 +2447,25 @@ module.exports = (function() { }; proto.filter = function() { - return this._filter; + var filterNull = [], + fields = this.fields(), + self = this; + + util.forEach(fields, function(fieldList, fieldName) { + if (fieldName === '*') return; //count + + if ((self.config('filterNull').Q && fieldList.containsType[Q]) || + (self.config('filterNull').T && fieldList.containsType[T]) || + (self.config('filterNull').O && fieldList.containsType[O]) || + (self.config('filterNull').N && fieldList.containsType[N])) { + filterNull.push({ + operands: [fieldName], + operator: 'notNull' + }); + } + }); + + return filterNull.concat(this._filter); }; // get "field" reference for vega @@ -3174,10 +3192,8 @@ data.raw.formatParse = function(encoding) { * transforms for time unit, binning and filtering. */ data.raw.transform = function(encoding) { - // null filter comes first so transforms are not performed on null values // time and bin should come before filter so we can filter by time and bin - return data.raw.transform.nullFilter(encoding).concat( - data.raw.transform.time(encoding), + return data.raw.transform.time(encoding).concat( data.raw.transform.bin(encoding), data.raw.transform.filter(encoding) ); @@ -3221,33 +3237,6 @@ data.raw.transform.bin = function(encoding) { }, []); }; -/** - * @return {Object} An array that might contain a filter transform for filtering null value based on filterNul config - */ -data.raw.transform.nullFilter = function(encoding) { - var filteredFields = util.reduce(encoding.fields(), - function(filteredFields, fieldList, fieldName) { - if (fieldName === '*') return filteredFields; //count - - // TODO(#597) revise how filterNull is structured. - if ((encoding.config('filterNull').Q && fieldList.containsType[Q]) || - (encoding.config('filterNull').T && fieldList.containsType[T]) || - (encoding.config('filterNull').O && fieldList.containsType[O]) || - (encoding.config('filterNull').N && fieldList.containsType[N])) { - filteredFields.push(fieldName); - } - return filteredFields; - }, []); - - return filteredFields.length > 0 ? - [{ - type: 'filter', - test: filteredFields.map(function(fieldName) { - return fieldName + '!==null'; - }).join(' && ') - }] : []; -}; - data.raw.transform.filter = function(encoding) { var filters = encoding.filter().reduce(function(f, filter) { var condition = ''; @@ -3265,6 +3254,14 @@ data.raw.transform.filter = function(encoding) { var op1 = operands[0]; var op2 = operands[1]; condition = d + op1 + ' ' + operator + ' ' + op2; + } else if (operator === 'notNull') { + // expects a number of fields + for (var j=0; j180||-180>n?n-360*Math.round(n/360):n}function n(){}function a(e){var t;return e=(e+"").trim().toLowerCase(),(t=D.exec(e))?(t=parseInt(t[1],16),i(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t)):(t=N.exec(e))?r(parseInt(t[1],16)):(t=L.exec(e))?i(t[1],t[2],t[3]):(t=Y.exec(e))?i(2.55*t[1],2.55*t[2],2.55*t[3]):(t=A.exec(e))?c(t[1],.01*t[2],.01*t[3]):U.hasOwnProperty(e)?r(U[e]):null}function r(e){return i(e>>16&255,e>>8&255,255&e)}function i(e,t,r){return 1===arguments.length&&(e instanceof n||(e=a(e)),e?(e=e.rgb(),r=e.b,t=e.g,e=e.r):e=t=r=NaN),new f(e,t,r)}function f(e,t,n){this.r=+e,this.g=+t,this.b=+n}function o(e,t,n){return"#"+(isNaN(e)?"00":(e=Math.round(e))<16?"0"+Math.max(0,e).toString(16):Math.min(255,e).toString(16))+(isNaN(t)?"00":(t=Math.round(t))<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16))+(isNaN(n)?"00":(n=Math.round(n))<16?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16))}function c(e,t,r){if(1===arguments.length)if(e instanceof u)r=e.l,t=e.s,e=e.h;else if(e instanceof n||(e=a(e)),e){if(e instanceof u)return e;e=e.rgb();var i=e.r/255,f=e.g/255,o=e.b/255,c=Math.min(i,f,o),s=Math.max(i,f,o),d=s-c;r=(s+c)/2,d?(t=.5>r?d/(s+c):d/(2-s-c),e=i===s?(f-o)/d+6*(o>f):f===s?(o-i)/d+2:(i-f)/d+4,e*=60):(e=NaN,t=r>0&&1>r?0:e)}else e=t=r=NaN;return new u(e,t,r)}function u(e,t,n){this.h=+e,this.s=+t,this.l=+n}function s(e,t,n){return 255*(60>e?t+(n-t)*e/60:180>e?n:240>e?t+(n-t)*(240-e)/60:t)}function d(e,t,n){if(1===arguments.length)if(e instanceof l)n=e.b,t=e.a,e=e.l;else if(e instanceof y){var a=e.h*J;n=Math.sin(a)*e.c,t=Math.cos(a)*e.c,e=e.l}else{e instanceof f||(e=i(e));var r=g(e.r),o=g(e.g),n=g(e.b),c=b((.4124564*r+.3575761*o+.1804375*n)/_),u=b((.2126729*r+.7151522*o+.072175*n)/H),s=b((.0193339*r+.119192*o+.9503041*n)/W);n=200*(u-s),t=500*(c-u),e=116*u-16}return new l(e,t,n)}function l(e,t,n){this.l=+e,this.a=+t,this.b=+n}function b(e){return e>q?Math.pow(e,1/3):e/B+$}function h(e){return e>P?e*e*e:B*(e-$)}function m(e){return 255*(.0031308>=e?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function g(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function p(e,t,n){return 1===arguments.length&&(e instanceof y?(n=e.l,t=e.c,e=e.h):(e instanceof l||(e=d(e)),n=e.l,t=Math.sqrt(e.a*e.a+e.b*e.b),e=Math.atan2(e.b,e.a)*G,0>e&&(e+=360))),new y(e,t,n)}function y(e,t,n){this.h=+e,this.c=+t,this.l=+n}function v(e,t,n){if(1===arguments.length)if(e instanceof M)n=e.l,t=e.s,e=e.h;else{e instanceof f||(e=i(e));var a=e.r/255,r=e.g/255,o=e.b/255;n=(re*o+ne*a-ae*r)/(re+ne-ae);var c=o-n,u=(te*(r-n)-K*c)/ee;t=Math.sqrt(u*u+c*c)/(te*n*(1-n)),e=t?Math.atan2(u,c)*G-120:NaN,0>e&&(e+=360)}return new M(e,t,n)}function M(e,t,n){this.h=+e,this.s=+t,this.l=+n}function x(e){return function(n,a){n=v(n),a=v(a);var r=isNaN(n.h)?a.h:n.h,i=isNaN(n.s)?a.s:n.s,f=n.l,o=isNaN(a.h)?0:t(a.h,r),c=isNaN(a.s)?0:a.s-i,u=a.l-f;return function(t){return n.h=r+o*t,n.s=i+c*t,n.l=f+u*Math.pow(t,e),n+""}}}function S(e){return function(t,n){t=v(t),n=v(n);var a=isNaN(t.h)?n.h:t.h,r=isNaN(t.s)?n.s:t.s,i=t.l,f=isNaN(n.h)?0:n.h-a,o=isNaN(n.s)?0:n.s-r,c=n.l-i;return function(n){return t.h=a+f*n,t.s=r+o*n,t.l=i+c*Math.pow(n,e),t+""}}}function O(e,t){e=p(e),t=p(t);var n=isNaN(e.h)?t.h:e.h,a=isNaN(e.c)?t.c:e.c,r=e.l,i=isNaN(t.h)?0:t.h-n,f=isNaN(t.c)?0:t.c-a,o=t.l-r;return function(t){return e.h=n+i*t,e.c=a+f*t,e.l=r+o*t,e+""}}function w(e,n){e=p(e),n=p(n);var a=isNaN(e.h)?n.h:e.h,r=isNaN(e.c)?n.c:e.c,i=e.l,f=isNaN(n.h)?0:t(n.h,a),o=isNaN(n.c)?0:n.c-r,c=n.l-i;return function(t){return e.h=a+f*t,e.c=r+o*t,e.l=i+c*t,e+""}}function T(e,t){e=d(e),t=d(t);var n=e.l,a=e.a,r=e.b,i=t.l-n,f=t.a-a,o=t.b-r;return function(t){return e.l=n+i*t,e.a=a+f*t,e.b=r+o*t,e+""}}function k(e,t){e=c(e),t=c(t);var n=isNaN(e.h)?t.h:e.h,a=isNaN(e.s)?t.s:e.s,r=e.l,i=isNaN(t.h)?0:t.h-n,f=isNaN(t.s)?0:t.s-a,o=t.l-r;return function(t){return e.h=n+i*t,e.s=a+f*t,e.l=r+o*t,e+""}}function C(e,n){e=c(e),n=c(n);var a=isNaN(e.h)?n.h:e.h,r=isNaN(e.s)?n.s:e.s,i=e.l,f=isNaN(n.h)?0:t(n.h,a),o=isNaN(n.s)?0:n.s-r,u=n.l-i;return function(t){return e.h=a+f*t,e.s=r+o*t,e.l=i+u*t,e+""}}function R(e,t){e=i(e),t=i(t);var n=e.r,a=e.g,r=e.b,f=t.r-n,c=t.g-a,u=t.b-r;return function(e){return o(Math.round(n+f*e),Math.round(a+c*e),Math.round(r+u*e))}}var D=/^#([0-9a-f]{3})$/,N=/^#([0-9a-f]{6})$/,L=/^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/,Y=/^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/,A=/^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;a.prototype=n.prototype={displayable:function(){return this.rgb().displayable()},toString:function(){return this.rgb()+""}};var U={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},E=.7,X=1/E,j=i.prototype=f.prototype=new n;j.brighter=function(e){return e=null==e?X:Math.pow(X,e),new f(this.r*e,this.g*e,this.b*e)},j.darker=function(e){return e=null==e?E:Math.pow(E,e),new f(this.r*e,this.g*e,this.b*e)},j.rgb=function(){return this},j.displayable=function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255},j.toString=function(){return o(this.r,this.g,this.b)};var z=c.prototype=u.prototype=new n;z.brighter=function(e){return e=null==e?X:Math.pow(X,e),new u(this.h,this.s,this.l*e)},z.darker=function(e){return e=null==e?E:Math.pow(E,e),new u(this.h,this.s,this.l*e)},z.rgb=function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,a=n+(.5>n?n:1-n)*t,r=2*n-a;return new f(s(e>=240?e-240:e+120,r,a),s(e,r,a),s(120>e?e+240:e-120,r,a))},z.displayable=function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1};var F=18,_=.95047,H=1,W=1.08883,$=4/29,P=6/29,B=3*P*P,q=P*P*P,I=d.prototype=l.prototype=new n;I.brighter=function(e){return new l(this.l+F*(null==e?1:e),this.a,this.b)},I.darker=function(e){return new l(this.l-F*(null==e?1:e),this.a,this.b)},I.rgb=function(){var e=(this.l+16)/116,t=isNaN(this.a)?e:e+this.a/500,n=isNaN(this.b)?e:e-this.b/200;return e=H*h(e),t=_*h(t),n=W*h(n),new f(m(3.2404542*t-1.5371385*e-.4985314*n),m(-.969266*t+1.8760108*e+.041556*n),m(.0556434*t-.2040259*e+1.0572252*n))};var J=Math.PI/180,G=180/Math.PI,Z=p.prototype=y.prototype=new n;Z.brighter=function(e){return new y(this.h,this.c,this.l+F*(null==e?1:e))},Z.darker=function(e){return new y(this.h,this.c,this.l-F*(null==e?1:e))},Z.rgb=function(){return d(this).rgb()};var Q=-.14861,V=1.78277,K=-.29227,ee=-.90649,te=1.97294,ne=te*ee,ae=te*V,re=V*K-ee*Q,ie=v.prototype=M.prototype=new n;ie.brighter=function(e){return e=null==e?X:Math.pow(X,e),new M(this.h,this.s,this.l*e)},ie.darker=function(e){return e=null==e?E:Math.pow(E,e),new M(this.h,this.s,this.l*e)},ie.rgb=function(){var e=isNaN(this.h)?0:(this.h+120)*J,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),a=Math.cos(e),r=Math.sin(e);return new f(255*(t+n*(Q*a+V*r)),255*(t+n*(K*a+ee*r)),255*(t+n*(te*a)))};var fe=x(1),oe=S(1);e.interpolateCubehelix=fe,e.interpolateCubehelixLong=oe,e.color=a,e.rgb=i,e.hsl=c,e.lab=d,e.hcl=p,e.cubehelix=v,e.interpolateRgb=R,e.interpolateHsl=C,e.interpolateHslLong=k,e.interpolateLab=T,e.interpolateHcl=w,e.interpolateHclLong=O,e.interpolateCubehelixGamma=x,e.interpolateCubehelixGammaLong=S})},{}],5:[function(t,n,a){"undefined"==typeof Map?(Map=function(){this.clear()},Map.prototype={set:function(e,t){return this._[e]=t,this},get:function(e){return this._[e]},has:function(e){return e in this._},"delete":function(e){return e in this._&&delete this._[e]},clear:function(){this._=Object.create(null)},get size(){var e=0;for(var t in this._)++e;return e},forEach:function(e){for(var t in this._)e(this._[t],t,this)}}):function(){var e=new Map;e.set(0,0)!==e&&(e=e.set,Map.prototype.set=function(){return e.apply(this,arguments),this})}(),function(t,r){"object"==typeof a&&"undefined"!=typeof n?r(a):"function"==typeof e&&e.amd?e(["exports"],r):r(t.format={})}(this,function(e){"use strict";function t(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,a=e.slice(0,n);return[a.length>1?a[0]+a.slice(2):a,+e.slice(n+1)]}function n(e){return e=t(Math.abs(e)),e?e[1]:NaN}function a(e,n){var a=t(e,n);if(!a)return e+"";var r=a[0],i=a[1],f=i-(m=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return f===o?r:f>o?r+new Array(f-o+1).join("0"):f>0?r.slice(0,f)+"."+r.slice(f):"0."+new Array(1-f).join("0")+t(e,n+f-1)[0]}function r(e,n){var a=t(e,n);if(!a)return e+"";var r=a[0],i=a[1];return 0>i?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}function i(e,t){e=e.toPrecision(t);e:for(var n,a=e.length,r=1,i=-1;a>r;++r)switch(e[r]){case".":i=n=r;break;case"0":0===i&&(i=r),n=r;break;case"e":break e;default:i>0&&(i=0)}return i>0?e.slice(0,i)+e.slice(n+1):e}function f(e){return new o(e)}function o(e){if(!(t=E.exec(e)))throw new Error("invalid format: "+e);var t,n=t[1]||" ",a=t[2]||">",r=t[3]||"-",i=t[4]||"",f=!!t[5],o=t[6]&&+t[6],c=!!t[7],u=t[8]&&+t[8].slice(1),s=t[9]||"";"n"===s?(c=!0,s="g"):U[s]||(s=""),(f||"0"===n&&"="===a)&&(f=!0,n="0",a="="),this.fill=n,this.align=a,this.sign=r,this.symbol=i,this.zero=f,this.width=o,this.comma=c,this.precision=u,this.type=s}function c(e,t){return function(n,a){for(var r=n.length,i=[],f=0,o=e[0],c=0;r>0&&o>0&&(c+o+1>a&&(o=Math.max(1,a-c)),i.push(n.substring(r-=o,r+o)),!((c+=o+1)>a));)o=e[f=(f+1)%e.length];return i.reverse().join(t)}}function u(e){return e}function s(e){function t(e){e=f(e);var t=e.fill,n=e.align,a=e.sign,c=e.symbol,u=e.zero,s=e.width,d=e.comma,l=e.precision,b=e.type,h="$"===c?i[0]:"#"===c&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",g="$"===c?i[1]:/[%p]/.test(b)?"%":"",p=U[b],y=!b||/[defgprs%]/.test(b);return l=null==l?b?6:12:/[gprs]/.test(b)?Math.max(1,Math.min(21,l)):Math.max(0,Math.min(20,l)),function(e){var i=h,f=g;if("c"===b)f=p(e)+f,e="";else{e=+e;var c=(0>e||0>1/e)&&(e*=-1,!0);if(e=p(e,l),i=(c?"("===a?a:"-":"-"===a||"("===a?"":a)+i, -f=f+("s"===b?X[8+m/3]:"")+(c&&"("===a?")":""),y)for(var v,M=-1,x=e.length;++Mv||v>57){f=(46===v?o+e.slice(M+1):e.slice(M))+f,e=e.slice(0,M);break}}d&&!u&&(e=r(e,1/0));var S=i.length+e.length+f.length,O=s>S?new Array(s-S+1).join(t):"";switch(d&&u&&(e=r(O+e,O.length?s-f.length:1/0),O=""),n){case"<":return i+e+f+O;case"=":return i+O+e+f;case"^":return O.slice(0,S=O.length>>1)+i+e+f+O.slice(S)}return O+i+e+f}}function a(e,a){var r=t((e=f(e),e.type="f",e)),i=3*Math.max(-8,Math.min(8,Math.floor(n(a)/3))),o=Math.pow(10,-i),c=X[8+i/3];return function(e){return r(o*e)+c}}var r=e.grouping&&e.thousands?c(e.grouping,e.thousands):u,i=e.currency,o=e.decimal;return{format:t,formatPrefix:a}}function d(e,t){return Math.max(0,n(Math.abs(t))-n(Math.abs(e)))+1}function l(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(n(t)/3)))-n(Math.abs(e)))}function b(e){return Math.max(0,-n(Math.abs(e)))}function h(e){return"string"!=typeof e||(e=j.get(e))?s(e):null}var m,g={decimal:".",thousands:",",grouping:[3],currency:["¥",""]},p={decimal:",",thousands:" ",grouping:[3],currency:[""," руб."]},y={decimal:",",thousands:".",grouping:[3],currency:["R$",""]},v={decimal:",",thousands:".",grouping:[3],currency:["","zł"]},M={decimal:",",thousands:".",grouping:[3],currency:["€ ",""]},x={decimal:",",thousands:".",grouping:[3],currency:[""," ден."]},S={decimal:".",thousands:",",grouping:[3],currency:["","円"]},O={decimal:",",thousands:".",grouping:[3],currency:["€",""]},w={decimal:".",thousands:",",grouping:[3],currency:["₪",""]},T={decimal:",",thousands:".",grouping:[3],currency:[""," €"]},k={decimal:",",thousands:" ",grouping:[3],currency:["","$"]},C={decimal:",",thousands:" ",grouping:[3],currency:[""," €"]},R={decimal:",",thousands:".",grouping:[3],currency:[""," €"]},D={decimal:".",thousands:",",grouping:[3],currency:["$",""]},N={decimal:".",thousands:",",grouping:[3],currency:["£",""]},L={decimal:".",thousands:",",grouping:[3],currency:["$",""]},Y={decimal:",",thousands:".",grouping:[3],currency:[""," €"]},A={decimal:",",thousands:".",grouping:[3],currency:[""," €"]},U={"":i,"%":function(e,t){return(100*e).toFixed(t)},b:function(e){return Math.round(e).toString(2)},c:function(e){return e+""},d:function(e){return Math.round(e).toString(10)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},g:function(e,t){return e.toPrecision(t)},o:function(e){return Math.round(e).toString(8)},p:function(e,t){return r(100*e,t)},r:r,s:a,X:function(e){return Math.round(e).toString(16).toUpperCase()},x:function(e){return Math.round(e).toString(16)}},E=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;o.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var X=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],j=(new Map).set("ca-ES",A).set("de-DE",Y).set("en-CA",L).set("en-GB",N).set("en-US",D).set("es-ES",R).set("fi-FI",C).set("fr-CA",k).set("fr-FR",T).set("he-IL",w).set("it-IT",O).set("ja-JP",S).set("mk-MK",x).set("nl-NL",M).set("pl-PL",v).set("pt-BR",y).set("ru-RU",p).set("zh-CN",g),z=s(D);e.format=z.format,e.formatPrefix=z.formatPrefix,e.localeFormat=h,e.formatSpecifier=f,e.precisionFixed=b,e.precisionPrefix=l,e.precisionRound=d})},{}],6:[function(t,n,a){"undefined"==typeof Map?(Map=function(){this.clear()},Map.prototype={set:function(e,t){return this._[e]=t,this},get:function(e){return this._[e]},has:function(e){return e in this._},"delete":function(e){return e in this._&&delete this._[e]},clear:function(){this._=Object.create(null)},get size(){var e=0;for(var t in this._)++e;return e},forEach:function(e){for(var t in this._)e(this._[t],t,this)}}):function(){var e=new Map;e.set(0,0)!==e&&(e=e.set,Map.prototype.set=function(){return e.apply(this,arguments),this})}(),function(t,r){"object"==typeof a&&"undefined"!=typeof n?r(a):"function"==typeof e&&e.amd?e(["exports"],r):r(t.timeFormat={})}(this,function(e){"use strict";function t(e,n,a){function r(t){return e(t=new Date(+t)),t}return r.floor=r,r.round=function(t){var a=new Date(+t),r=new Date(t-1);return e(a),e(r),n(r,1),r-t>t-a?a:r},r.ceil=function(t){return e(t=new Date(t-1)),n(t,1),t},r.offset=function(e,t){return n(e=new Date(+e),null==t?1:Math.floor(t)),e},r.range=function(t,a,r){var i=[];if(t=new Date(t-1),a=new Date(+a),r=null==r?1:Math.floor(r),!(a>t&&r>0))return i;for(n(t,1),e(t),a>t&&i.push(new Date(+t));n(t,r),e(t),a>t;)i.push(new Date(+t));return i},r.filter=function(a){return t(function(t){for(;e(t),!a(t);)t.setTime(t-1)},function(e,t){for(;--t>=0;)for(;n(e,1),!a(e););})},a&&(r.count=function(t,n){return Me.setTime(+t),xe.setTime(+n),e(Me),e(xe),Math.floor(a(Me,xe))}),r}function n(e){return t(function(t){t.setHours(0,0,0,0),t.setDate(t.getDate()-(t.getDay()+7-e)%7)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/6048e5})}function a(e){return t(function(t){t.setUTCHours(0,0,0,0),t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/6048e5})}function r(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function i(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function f(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}function o(e){function t(e,t){return function(n){for(var a,r,i,f=[],o=-1,c=0,u=e.length;++of;){if(a>=c)return-1;if(r=t.charCodeAt(f++),37===r){if(r=t.charAt(f++),i=Xe[r in Ne?t.charAt(f++):r],!i||(a=i(e,n,a))<0)return-1}else if(r!=n.charCodeAt(a++))return-1}return a}function o(e,t,n){var a=Ce.exec(t.slice(n));return a?(e.w=Re.get(a[0].toLowerCase()),n+a[0].length):-1}function c(e,t,n){var a=Te.exec(t.slice(n));return a?(e.w=ke.get(a[0].toLowerCase()),n+a[0].length):-1}function u(e,t,n){var a=Ye.exec(t.slice(n));return a?(e.m=Ae.get(a[0].toLowerCase()),n+a[0].length):-1}function te(e,t,n){var a=De.exec(t.slice(n));return a?(e.m=Le.get(a[0].toLowerCase()),n+a[0].length):-1}function ne(e,t,n){return a(e,ge,t,n)}function ae(e,t,n){return a(e,pe,t,n)}function re(e,t,n){return a(e,ye,t,n)}function ie(e,t,n){var a=we.get(t.slice(n,n+=2).toLowerCase());return null==a?-1:(e.p=a,n)}function fe(e){return xe[e.getDay()]}function oe(e){return Me[e.getDay()]}function ce(e){return Oe[e.getMonth()]}function ue(e){return Se[e.getMonth()]}function se(e){return ve[+(e.getHours()>=12)]}function de(e){return xe[e.getUTCDay()]}function le(e){return Me[e.getUTCDay()]}function be(e){return Oe[e.getUTCMonth()]}function he(e){return Se[e.getUTCMonth()]}function me(e){return ve[+(e.getUTCHours()>=12)]}var ge=e.dateTime,pe=e.date,ye=e.time,ve=e.periods,Me=e.days,xe=e.shortDays,Se=e.months,Oe=e.shortMonths,we=d(ve),Te=s(Me),ke=d(Me),Ce=s(xe),Re=d(xe),De=s(Se),Le=d(Se),Ye=s(Oe),Ae=d(Oe),Ue={a:fe,A:oe,b:ce,B:ue,c:null,d:k,e:k,H:C,I:R,j:D,L:N,m:L,M:Y,p:se,S:A,U:U,w:E,W:X,x:null,X:null,y:j,Y:z,Z:F,"%":ee},Ee={a:de,A:le,b:be,B:he,c:null,d:_,e:_,H:H,I:W,j:$,L:P,m:B,M:q,p:me,S:I,U:J,w:G,W:Z,x:null,X:null,y:Q,Y:V,Z:K,"%":ee},Xe={a:o,A:c,b:u,B:te,c:ne,d:v,e:v,H:x,I:x,j:M,L:w,m:y,M:S,p:ie,S:O,U:b,w:l,W:h,x:ae,X:re,y:g,Y:m,Z:p,"%":T};return Ue.x=t(pe,Ue),Ue.X=t(ye,Ue),Ue.c=t(ge,Ue),Ee.x=t(pe,Ee),Ee.X=t(ye,Ee),Ee.c=t(ge,Ee),{format:function(e){var a=t(e+="",Ue);return a.parse=n(e,r),a.toString=function(){return e},a},utcFormat:function(e){var a=t(e+="",Ee);return a.parse=n(e,i),a.toString=function(){return e},a}}}function c(e,t,n){var a=0>e?"-":"",r=(a?-e:e)+"",i=r.length;return a+(n>i?new Array(n-i+1).join(t)+r:r)}function u(e){return e.replace(Ae,"\\$&")}function s(e){return new RegExp("^(?:"+e.map(u).join("|")+")","i")}function d(e){for(var t=new Map,n=-1,a=e.length;++n68?1900:2e3),n+a[0].length):-1}function p(e,t,n){return/^[+-]\d{4}$/.test(t=t.slice(n,n+5))?(e.Z=-t,n+5):-1}function y(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.m=a[0]-1,n+a[0].length):-1}function v(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.d=+a[0],n+a[0].length):-1}function M(e,t,n){var a=Le.exec(t.slice(n,n+3));return a?(e.m=0,e.d=+a[0],n+a[0].length):-1}function x(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.H=+a[0],n+a[0].length):-1}function S(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.M=+a[0],n+a[0].length):-1}function O(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.S=+a[0],n+a[0].length):-1}function w(e,t,n){var a=Le.exec(t.slice(n,n+3));return a?(e.L=+a[0],n+a[0].length):-1}function T(e,t,n){var a=Ye.exec(t.slice(n,n+1));return a?n+a[0].length:-1}function k(e,t){return c(e.getDate(),t,2)}function C(e,t){return c(e.getHours(),t,2)}function R(e,t){return c(e.getHours()%12||12,t,2)}function D(e,t){return c(1+Se.count(Te(e),e),t,3)}function N(e,t){return c(e.getMilliseconds(),t,3)}function L(e,t){return c(e.getMonth()+1,t,2)}function Y(e,t){return c(e.getMinutes(),t,2)}function A(e,t){return c(e.getSeconds(),t,2)}function U(e,t){return c(Oe.count(Te(e),e),t,2)}function E(e){return e.getDay()}function X(e,t){return c(we.count(Te(e),e),t,2)}function j(e,t){return c(e.getFullYear()%100,t,2)}function z(e,t){return c(e.getFullYear()%1e4,t,4)}function F(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+c(t/60|0,"0",2)+c(t%60,"0",2)}function _(e,t){return c(e.getUTCDate(),t,2)}function H(e,t){return c(e.getUTCHours(),t,2)}function W(e,t){return c(e.getUTCHours()%12||12,t,2)}function $(e,t){return c(1+ke.count(De(e),e),t,3)}function P(e,t){return c(e.getUTCMilliseconds(),t,3)}function B(e,t){return c(e.getUTCMonth()+1,t,2)}function q(e,t){return c(e.getUTCMinutes(),t,2)}function I(e,t){return c(e.getUTCSeconds(),t,2)}function J(e,t){return c(Ce.count(De(e),e),t,2)}function G(e){return e.getUTCDay()}function Z(e,t){return c(Re.count(De(e),e),t,2)}function Q(e,t){return c(e.getUTCFullYear()%100,t,2)}function V(e,t){return c(e.getUTCFullYear()%1e4,t,4)}function K(){return"+0000"}function ee(){return"%"}function te(e){return e.toISOString()}function ne(e){return"string"!=typeof e||(e=je.get(e))?o(e):null}var ae={dateTime:"%a %b %e %X %Y",date:"%Y/%-m/%-d",time:"%H:%M:%S",periods:["上午","下午"],days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],shortDays:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],shortMonths:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},re={dateTime:"%A, %e %B %Y г. %X",date:"%d.%m.%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],shortDays:["вс","пн","вт","ср","чт","пт","сб"],months:["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],shortMonths:["янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек"]},ie={dateTime:"%A, %e de %B de %Y. %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],shortDays:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],shortMonths:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"]},fe={dateTime:"%A, %e %B %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],shortDays:["Niedz.","Pon.","Wt.","Śr.","Czw.","Pt.","Sob."],months:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],shortMonths:["Stycz.","Luty","Marz.","Kwie.","Maj","Czerw.","Lipc.","Sierp.","Wrz.","Paźdz.","Listop.","Grudz."]},oe={dateTime:"%a %e %B %Y %T",date:"%d-%m-%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],shortDays:["zo","ma","di","wo","do","vr","za"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],shortMonths:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"]},ce={dateTime:"%A, %e %B %Y г. %X",date:"%d.%m.%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["недела","понеделник","вторник","среда","четврток","петок","сабота"],shortDays:["нед","пон","вто","сре","чет","пет","саб"],months:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],shortMonths:["јан","фев","мар","апр","мај","јун","јул","авг","сеп","окт","ное","дек"]},ue={dateTime:"%A %e %B %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],shortDays:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],shortMonths:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"]},se={dateTime:"%A, %e ב%B %Y %X",date:"%d.%m.%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],shortDays:["א׳","ב׳","ג׳","ד׳","ה׳","ו׳","ש׳"],months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],shortMonths:["ינו׳","פבר׳","מרץ","אפר׳","מאי","יוני","יולי","אוג׳","ספט׳","אוק׳","נוב׳","דצמ׳"]},de={dateTime:"%A, le %e %B %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],shortDays:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],shortMonths:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."]},le={dateTime:"%a %e %b %Y %X",date:"%Y-%m-%d",time:"%H:%M:%S",periods:["",""],days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],shortDays:["dim","lun","mar","mer","jeu","ven","sam"],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],shortMonths:["jan","fév","mar","avr","mai","jui","jul","aoû","sep","oct","nov","déc"]},be={dateTime:"%A, %-d. %Bta %Y klo %X",date:"%-d.%-m.%Y",time:"%H:%M:%S",periods:["a.m.","p.m."],days:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],shortDays:["Su","Ma","Ti","Ke","To","Pe","La"],months:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],shortMonths:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"]},he={dateTime:"%A, %e de %B de %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],shortDays:["dom","lun","mar","mié","jue","vie","sáb"],months:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],shortMonths:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"]},me={dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},ge={dateTime:"%a %e %b %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},pe={dateTime:"%a %b %e %X %Y",date:"%Y-%m-%d",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},ye={dateTime:"%A, der %e. %B %Y, %X",date:"%d.%m.%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],shortDays:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],shortMonths:["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"]},ve={dateTime:"%A, %e de %B de %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],shortDays:["dg.","dl.","dt.","dc.","dj.","dv.","ds."],months:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],shortMonths:["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."]},Me=new Date,xe=new Date,Se=t(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5}),Oe=n(0),we=n(1),Te=t(function(e){e.setHours(0,0,0,0),e.setMonth(0,1)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()}),ke=t(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5}),Ce=a(0),Re=a(1),De=t(function(e){e.setUTCHours(0,0,0,0),e.setUTCMonth(0,1)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()}),Ne={"-":"",_:" ",0:"0"},Le=/^\s*\d+/,Ye=/^%/,Ae=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,Ue="%Y-%m-%dT%H:%M:%S.%LZ";te.parse=function(e){var t=new Date(e);return isNaN(t)?null:t},te.toString=function(){return Ue};var Ee=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?te:me.utcFormat(Ue),Xe=Ee,je=(new Map).set("ca-ES",ve).set("de-DE",ye).set("en-CA",pe).set("en-GB",ge).set("en-US",me).set("es-ES",he).set("fi-FI",be).set("fr-CA",le).set("fr-FR",de).set("he-IL",se).set("it-IT",ue).set("mk-MK",ce).set("nl-NL",oe).set("pl-PL",fe).set("pt-BR",ie).set("ru-RU",re).set("zh-CN",ae),ze=o(me);e.format=ze.format,e.utcFormat=ze.utcFormat,e.localeFormat=ne,e.isoFormat=Xe})},{}],7:[function(e,t,n){"use strict";e("./globals");var a=e("./consts"),r=e("./util"),i=e("./field"),f=e("./enc"),o=e("./schema/schema");t.exports=function(){function e(e,t){var n=o.instantiate(),a=o.util.merge(n,t||{},e);this._data=a.data,this._marktype=a.marktype,this._enc=a.encoding,this._config=a.config,this._filter=a.filter}var t=e.prototype;return e.fromShorthand=function(t,n,r,i){var o=a.shorthand,c=t.split(o.delim),u=c.shift().split(o.assign)[1].trim(),s=f.fromShorthand(c);return new e({data:n,marktype:u,encoding:s,config:r,filter:[]},i)},e.fromSpec=function(t,n){return new e(t,n)},t.toShorthand=function(){var e=a.shorthand;return"mark"+e.assign+this._marktype+e.delim+f.shorthand(this._enc)},e.shorthand=function(e){var t=a.shorthand;return"mark"+t.assign+e.marktype+t.delim+f.shorthand(e.encoding)},e.specFromShorthand=function(t,n,a,r){return e.fromShorthand(t,n,a).toSpec(r)},t.toSpec=function(e,t){var n,a=r.duplicate(this._enc);n={marktype:this._marktype,encoding:a,filter:this._filter},e||(n.config=r.duplicate(this._config)),t||(n.data=r.duplicate(this._data));var i=o.instantiate();return o.util.subtract(n,i)},t.marktype=function(){return this._marktype},t.is=function(e){return this._marktype===e},t.has=function(e){return void 0!==this._enc[e].name},t.field=function(e){return this._enc[e]},t.filter=function(){return this._filter},t.fieldRef=function(e,t){return t=t||{},t.data=!this._vega2&&t.data!==!1,i.fieldRef(this._enc[e],t)},t.fieldName=function(e){return this._enc[e].name},t.fields=function(){return f.fields(this._enc)},t.fieldTitle=function(e){if(i.isCount(this._enc[e]))return i.count.displayName;var t=this._enc[e].aggregate||this._enc[e].timeUnit||this._enc[e].bin&&"bin";if(t){var n="avg"===t?"MEAN":t.toUpperCase();return n+"("+this._enc[e].name+")"}return this._enc[e].name},t.scale=function(e){return this._enc[e].scale||{}},t.axis=function(e){return this._enc[e].axis||{}},t.bandSize=function(e,t){return t=t||e===Y&&this.has(ROW)&&this.has(Y)||e===X&&this.has(COL)&&this.has(X),this.field(e).band.size||this.config(t?"smallBandSize":"largeBandSize")},t.aggregate=function(e){return this._enc[e].aggregate},t.bin=function(e){var t=this._enc[e].bin;return t==={}?!1:t===!0?{maxbins:o.MAXBINS_DEFAULT}:t},t.value=function(e){return this._enc[e].value},t.numberFormat=function(e){var t=e.max>this.config("maxSmallNumber")?"largeNumberFormat":"smallNumberFormat";return this.config(t)},t.sort=function(t,n){var a=this._enc[t].sort,r=this._enc,f=i.isTypes;if((!a||0===a.length)&&e.toggleSort.support({encoding:this._enc},n,!0)&&this.config("toggleSort")===Q){var o=f(r.x,[N,O])?r.y:r.x;f(r[t],[N,O])&&(a=[{name:o.name,aggregate:o.aggregate,type:o.type,reverse:!0}])}return a},t.map=function(e){return f.map(this._enc,e)},t.reduce=function(e,t){return f.reduce(this._enc,e,t)},t.forEach=function(e){return f.forEach(this._enc,e)},t.type=function(e){return this.has(e)?this._enc[e].type:null},t.isType=function(e,t){var n=this.field(e);return n&&i.isType(n,t)},t.isTypes=function(e,t){var n=this.field(e);return n&&i.isTypes(n,t)},e.isOrdinalScale=function(e,t){return i.isOrdinalScale(e.field(t))},e.isDimension=function(e,t){return i.isDimension(e.field(t))},e.isMeasure=function(e,t){return i.isMeasure(e.field(t))},t.isOrdinalScale=function(t){return this.has(t)&&e.isOrdinalScale(this,t)},t.isDimension=function(t){return this.has(t)&&e.isDimension(this,t)},t.isMeasure=function(t){return this.has(t)&&e.isMeasure(this,t)},t.isAggregate=function(){return f.isAggregate(this._enc)},t.dataTable=function(){return this.isAggregate()?AGGREGATE:RAW},e.isAggregate=function(e){return f.isAggregate(e.encoding)},e.alwaysNoOcclusion=function(e){return f.isAggregate(e.encoding)},e.isStack=function(e){return("bar"===e.marktype||"area"===e.marktype)&&e.encoding.color},t.isStack=function(){return(this.is("bar")||this.is("area"))&&this.has("color")},t.details=function(){var e=this;return this.reduce(function(t,n,a){return n.aggregate||a===X||a===Y||t.push(e.fieldRef(a)),t},[])},t.facets=function(){var e=this;return this.reduce(function(t,n,a){return n.aggregate||a!=ROW&&a!=COL||t.push(e.fieldRef(a)),t},[])},t.cardinality=function(e,t){return i.cardinality(this.field(e),t,this.config("filterNull"))},t.isRaw=function(){return!this.isAggregate()},t.data=function(){return this._data},t.hasValues=function(){var e=this.data().values;return e&&e.length},t.config=function(e){return this._config[e]},e.transpose=function(e){var t=e.encoding,n=r.duplicate(e.encoding);return n.x=t.y,n.y=t.x,n.row=t.col,n.col=t.row,e.encoding=n,e},e.toggleSort=function(e){return e.config=e.config||{},e.config.toggleSort=e.config.toggleSort===Q?N:Q,e},e.toggleSort.direction=function(t){if(e.toggleSort.support(t)){var n=t.encoding;return n.x.type===N?"x":"y"}},e.toggleSort.mode=function(e){return e.config.toggleSort},e.toggleSort.support=function(t,n){var a=t.encoding,r=i.isTypes;return!f.has(a,ROW)&&!f.has(a,COL)&&f.has(a,X)&&f.has(a,Y)&&e.alwaysNoOcclusion(t,n)?r(a.x,[N,O])&&i.isMeasure(a.y)?"x":r(a.y,[N,O])&&i.isMeasure(a.x)?"y":!1:!1},e.toggleFilterNullO=function(e){return e.config=e.config||{},e.config.filterNull=e.config.filterNull||{T:!0,Q:!0},e.config.filterNull.O=!e.config.filterNull.O,e},e.toggleFilterNullO.support=function(e,t){var n=f.fields(e.encoding);for(var a in n){var r=n[a];if(r.containsType.O&&a in t&&t[a].nulls>0)return!0}return!1},e}()},{"./consts":21,"./enc":23,"./field":24,"./globals":25,"./schema/schema":27,"./util":29}],8:[function(e,t,n){"use strict";e("../globals");var a=e("../util"),r=a.setter,i=a.getter,f=e("./time"),o=t.exports={};o.def=function(e,t,n,a,r){var f=e==COL,c=e==ROW,u=f?"x":c?"y":e,s={type:u,scale:e,properties:{},layer:t.field(e).axis.layer,orient:o.orient(e,t,a)};return s=o.labels.scale(s,t,e),s=o.labels.format(s,e,t,a),s=o.labels.angle(s,t,e),e==X&&(!t.isDimension(X)&&!t.isType(X,T)||"angle"in i(s,["properties","labels"])?s.ticks=t.field(e).axis.ticks:s=o.labels.rotate(s)),s.titleOffset=o.titleOffset(t,n,e),c&&(s.offset=o.titleOffset(t,n,Y)+20),s=o.grid(s,e,t,n),s=o.title(s,e,t,n,r),(c||f)&&(s=o.hideTicks(s)),s},o.orient=function(e,t,n){var a=t.field(e).axis.orient;return a?a:e===COL?"top":e===X&&t.has(Y)&&t.isOrdinalScale(Y)&&t.cardinality(Y,n)>30?"top":void 0},o.grid=function(e,t,n,a){var r=a.cellPadding,i=t==COL,f=t==ROW;return n.axis(t).grid&&(e.grid=!0,i?e.properties.grid={x:{offset:a.cellWidth*(1+r/2),scale:"col"},y:{value:-a.cellHeight*(r/2)},stroke:{value:n.config("cellGridColor")},opacity:{value:n.config("cellGridOpacity")}}:f?e.properties.grid={y:{offset:-a.cellHeight*(r/2),scale:"row"},x:{value:e.offset},x2:{offset:e.offset+.05*a.cellWidth,group:"mark.group.width",mult:1},stroke:{value:n.config("cellGridColor")},opacity:{value:n.config("cellGridOpacity")}}:e.properties.grid={stroke:{value:n.config("gridColor")},opacity:{value:n.config("gridOpacity")}}),e},o.hideTicks=function(e){return e.properties.ticks={opacity:{value:0}},e.properties.majorTicks={opacity:{value:0}},e.properties.axis={opacity:{value:0}},e},o.title=function(e,t,n,r){var i=n.field(t).axis;if(i.title)e.title=i.title;else{var f,o=n.fieldTitle(t);i.titleMaxLength?f=i.titleMaxLength:t===X?f=r.cellWidth/n.config("characterWidth"):t===Y&&(f=r.cellHeight/n.config("characterWidth")),e.title=f?a.truncate(o,f):o}return t===ROW&&(e.properties.title={angle:{value:0},align:{value:"right"},baseline:{value:"middle"},dy:{value:-r.height/2-20}}),e},o.labels={},o.labels.scale=function(e,t,n){var a=t.field(n).timeUnit;return t.isType(n,T)&&a&&f.hasScale(a)&&r(e,["properties","labels","text","scale"],"time-"+a),e},o.labels.format=function(e,t,n,a){var i=a[n.field(t).name];if(n.axis(t).format)e.format=n.axis(t).format;else if(n.isType(t,Q)||"number"===i.type)e.format=n.numberFormat(i);else if(n.isType(t,T)){var f=n.field(t).timeUnit;f?"year"===f&&(e.format="d"):e.format=n.config("timeFormat")}else n.isTypes(t,[N,O])&&n.axis(t).maxLabelLength&&r(e,["properties","labels","text","template"],"{{data | truncate:"+n.axis(t).maxLabelLength+"}}");return e},o.labels.angle=function(e,t,n){var a=t.axis(n).labelAngle;return"undefined"==typeof a?e:(r(e,["properties","labels","angle","value"],a),e)},o.labels.rotate=function(e){var t="top"===e.orient?"left":"right";return r(e,["properties","labels","angle","value"],270),r(e,["properties","labels","align","value"],t),r(e,["properties","labels","baseline","value"],"middle"),e},o.titleOffset=function(e,t,n){var a=e.axis(n).titleOffset;if(a)return a;switch(n){case ROW:return 0;case COL:return 35}return i(t,[n,"axisTitleOffset"])}},{"../globals":25,"../util":29,"./time":20}],9:[function(e,t,n){"use strict";var a=t.exports=e("datalib/src/stats").summary;e("../globals");var r=t.exports={},i=e("../Encoding"),f=r.axis=e("./axis"),o=r.legend=e("./legend"),c=r.marks=e("./marks"),u=r.scale=e("./scale");r.data=e("./data"),r.facet=e("./facet"),r.layout=e("./layout"),r.sort=e("./sort"),r.stack=e("./stack"),r.style=e("./style"),r.subfacet=e("./subfacet"),r.time=e("./time"),r.compile=function(e,t,n){return r.compileEncoding(i.fromSpec(e,n),t)},r.shorthand=function(e,t,n,a){return r.compileEncoding(i.fromShorthand(e,n,a),t)},r.compileEncoding=function(e,t){t||(e.hasValues()?t=a(e.data().values).reduce(function(e,t){return e[t.field]=t,e},{}):console.error("No stats provided and data is not embedded."));var n=r.layout(e,t),i={width:n.width,height:n.height,padding:"auto",data:r.data(e),scales:r.time.scales(e),marks:[{_name:"cell",type:"group",properties:{enter:{width:n.cellWidth?{value:n.cellWidth}:{group:"width"},height:n.cellHeight?{value:n.cellHeight}:{group:"height"}}}}]},s=i.marks[0];i.data=r.sort(i.data,e,t);var d=r.style(e,t),l=s.marks=c.def(e,n,d,t),b=l[l.length-1],h=c[e.marktype()].line,m=e.details(),g=e.isAggregate()&&m.length>0&&r.stack(i.data,e,b);if(m.length>0&&(g||h)&&r.subfacet(s,b,m,g,e),h&&e.config("autoSortLine")){var p=e.isMeasure(X)&&e.isDimension(Y)?Y:X;b.from||(b.from={}),b.from.transform=[{type:"sort",by:"-"+e.fieldRef(p)}]}var y=[].concat.apply([],l.map(function(e){return u.names(e.properties.update)}));return e.has(ROW)||e.has(COL)?(i=r.facet(s,e,n,i,y,g,t),i.legends=o.defs(e,d)):(s.scales=u.defs(y,e,n,t,{stack:g}),s.axes=[],e.has(X)&&s.axes.push(f.def(X,e,n,t)),e.has(Y)&&s.axes.push(f.def(Y,e,n,t)),s.legends=o.defs(e,d)),i}},{"../Encoding":7,"../globals":25,"./axis":8,"./data":10,"./facet":11,"./layout":12,"./legend":13,"./marks":14,"./scale":15,"./sort":16,"./stack":17,"./style":18,"./subfacet":19,"./time":20,"datalib/src/stats":35}],10:[function(e,t,n){"use strict";function a(e){var t=[a.raw(e)],n=a.aggregate(e);return n&&t.push(a.aggregate(e)),a.filterNonPositive(t[t.length-1],e),t}e("../globals"),t.exports=a;var r=e("../field"),i=e("../util"),f=e("./time");a.raw=function(e){var t={name:RAW};e.hasValues()?t.values=e.data().values:(t.url=e.data().url,t.format={type:e.data().formatType});var n=a.raw.formatParse(e);return n&&(t.format=t.format||{},t.format.parse=n),t.transform=a.raw.transform(e),t},a.raw.formatParse=function(e){var t;return e.forEach(function(e){if(e.type==T)t=t||{},t[e.name]="date";else if(e.type==Q){if(r.isCount(e))return;t=t||{},t[e.name]="number"}}),t},a.raw.transform=function(e){return a.raw.transform.nullFilter(e).concat(a.raw.transform.time(e),a.raw.transform.bin(e),a.raw.transform.filter(e))};var o={">":!0,">=":!0,"=":!0,"!=":!0,"<":!0,"<=":!0};a.raw.transform.time=function(e){return e.reduce(function(t,n,a){return n.type===T&&n.timeUnit&&t.push({type:"formula",field:e.fieldRef(a),expr:f.formula(n.timeUnit,e.fieldRef(a,{nofn:!0,d:!0}))}),t},[])},a.raw.transform.bin=function(e){return e.reduce(function(t,n,a){return e.bin(a)&&t.push({type:"bin",field:e.fieldRef(a,{nofn:!0}),output:e.fieldRef(a),maxbins:e.bin(a).maxbins}),t},[])},a.raw.transform.nullFilter=function(e){var t=i.reduce(e.fields(),function(t,n,a){return"*"===a?t:((e.config("filterNull").Q&&n.containsType[Q]||e.config("filterNull").T&&n.containsType[T]||e.config("filterNull").O&&n.containsType[O]||e.config("filterNull").N&&n.containsType[N])&&t.push(a), -t)},[]);return t.length>0?[{type:"filter",test:t.map(function(e){return e+"!==null"}).join(" && ")}]:[]},a.raw.transform.filter=function(e){var t=e.filter().reduce(function(t,n){var a="",r=n.operator,f=n.operands,c="d."+(e._vega2?"":"data.");if(!o[r])return i.warn("Unsupported operator: ",r),t;"="===r&&(r="==");var u=f[0],s=f[1];return a=c+u+" "+r+" "+s,t.push("("+a+")"),t},[]);return 0===t.length?[]:[{type:"filter",test:t.join(" && ")}]},a.aggregate=function(e){var t={},n={};return e.forEach(function(a,r){a.aggregate?"count"===a.aggregate?n.count={op:"count",field:"*"}:n[a.aggregate+"|"+a.name]={op:a.aggregate,field:e.fieldRef(r,{nofn:!0})}:t[a.name]=e.fieldRef(r)}),t=i.vals(t),n=i.vals(n),n.length>0?{name:AGGREGATE,source:RAW,transform:[{type:"aggregate",groupby:t,fields:n}]}:null},a.filterNonPositive=function(e,t){t.forEach(function(n,a){"log"===t.scale(a).type&&e.transform.push({type:"filter",test:t.fieldRef(a,{d:1})+" > 0"})})}},{"../field":24,"../globals":25,"../util":29,"./time":20}],11:[function(e,t,n){"use strict";function a(e,t){return t=t||{},{_name:e||void 0,type:"group",from:t.from,properties:{enter:{x:t.x||void 0,y:t.y||void 0,width:t.width||{group:"width"},height:t.height||{group:"height"}}},scales:t.scales||void 0,axes:t.axes||void 0,marks:t.marks||[]}}function r(e,t,n,r,c,u,s){var d,l,b=e.properties.enter,h=[],m=[],g=t.has(ROW),p=t.has(COL);b.fill={value:t.config("cellBackgroundColor")},e.from={data:e.marks[0].from.data};for(var y=0;y0&&(e.axes=m);var M=e.from.transform||(e.from.transform=[]);return M.unshift({type:"facet",keys:h}),r}e("../globals");var i=e("../util"),f=e("./axis"),o=e("./scale");t.exports=r},{"../globals":25,"../util":29,"./axis":8,"./scale":15}],12:[function(e,t,n){"use strict";function a(e,t){var n=r(e,t);return n=o(e,t,n)}function r(e,t){var n,a,r=e.has(ROW),i=e.has(COL),f=e.has(X),o=e.has(Y),c=e.marktype(),u=f&&e.isDimension(X)?e.cardinality(X,t):1,s=o&&e.isDimension(Y)?e.cardinality(Y,t):1,d=u>e.config("largeBandMaxCardinality")||s>e.config("largeBandMaxCardinality"),l=e.config("cellPadding");n=f?e.isOrdinalScale(X)?(u+e.field(X).band.padding)*e.bandSize(X,d):i||r?e.field(COL).width:e.config("singleWidth"):c===TEXT?e.config("textCellWidth"):e.bandSize(X),a=o?e.isOrdinalScale(Y)?(s+e.field(Y).band.padding)*e.bandSize(Y,d):i||r?e.field(ROW).height:e.config("singleHeight"):e.bandSize(Y);var b=n,h=a;if(i){var m=e.cardinality(COL,t);b=n*((1+l)*(m-1)+1)}if(r){var g=e.cardinality(ROW,t);h=a*((1+l)*(g-1)+1)}return{cellWidth:n,cellHeight:a,cellPadding:l,width:b,height:h,x:{useSmallBand:d},y:{useSmallBand:d}}}function i(e,t,n){var a=e.numberFormat(t,n);return d.format(a)(n.max).length}function f(e,t,n){var a=e.field(n),r=t[a.name];return a.bin?i(e,n,r):e.isType(n,Q)?i(e,n,r):e.isType(n,T)?s.maxLength(e.field(n).timeUnit,e):e.isTypes(n,[N,O])?"number"===r.type?i(e,n,r):Math.min(r.max,e.axis(n).maxLabelLength||1/0):void 0}function o(e,t,n){return[X,Y].forEach(function(a){var r,i=a===X?20:22;e.isDimension(a)||e.isType(a,T)?r=f(e,t,a):(e.isType(a,Q)||"count"===e.aggregate(a))&&a===Y&&(r=f(e,t,a)),r?u(n,[a,"axisTitleOffset"],e.config("characterWidth")*r+i):u(n,[a,"axisTitleOffset"],3*e.config("characterWidth")+i)}),n}e("../globals");var c=e("../util"),u=c.setter,s=e("./time"),d=e("d3-format");t.exports=a},{"../globals":25,"../util":29,"./time":20,"d3-format":5}],13:[function(e,t,n){"use strict";e("../globals");var a=e("./time"),r=e("../util"),i=r.setter,f=r.getter,o=t.exports={};o.defs=function(e,t){var n=[];return e.has(COLOR)&&e.field(COLOR).legend&&n.push(o.def(COLOR,e,{fill:COLOR,orient:"right"},t)),e.has(SIZE)&&e.field(SIZE).legend&&n.push(o.def(SIZE,e,{size:SIZE,orient:1===n.length?"left":"right"},t)),e.has(SHAPE)&&e.field(SHAPE).legend&&(2===n.length&&console.error("Vega-lite currently only supports two legends"),n.push(o.def(SHAPE,e,{shape:SHAPE,orient:1===n.length?"left":"right"},t))),n},o.def=function(e,t,n,r){var f=t.field(e).timeUnit;return n.title=o.title(e,t),n=o.style(e,t,n,r),t.isType(e,T)&&f&&a.hasScale(f)&&i(n,["properties","labels","text","scale"],"time-"+f),n},o.style=function(e,t,n,a){var r=f(n,["properties","symbols"]),i=t.marktype();switch(i){case"bar":case"tick":case"text":r.stroke={value:"transparent"},r.shape={value:"square"};break;case"circle":case"square":r.shape={value:i};case"point":t.field(SHAPE).filled?(t.has(COLOR)&&e===COLOR?r.fill={scale:COLOR,field:"data"}:r.fill={value:t.value(COLOR)},r.stroke={value:"transparent"}):(t.has(COLOR)&&e===COLOR?r.stroke={scale:COLOR,field:"data"}:r.stroke={value:t.value(COLOR)},r.fill={value:"transparent"},r.strokeWidth={value:t.config("strokeWidth")});break;case"line":case"area":}var o=t.field(COLOR).opacity||a.opacity;return o&&(r.opacity={value:o}),n},o.title=function(e,t){var n=t.field(e).legend;return n.title?n.title:t.fieldTitle(e)}},{"../globals":25,"../util":29,"./time":20}],14:[function(e,t,n){"use strict";function a(e,t,n){var a={};e.isMeasure(X)?(a.x={scale:X,field:e.fieldRef(X)},(!e.has(Y)||e.isDimension(Y))&&(a.x2={value:0})):e.has(X)?a.xc={scale:X,field:e.fieldRef(X)}:a.x={value:0,offset:e.config("singleBarOffset")},a.x2||(!e.has(X)||e.isOrdinalScale(X)?e.has(SIZE)?a.width={scale:SIZE,field:e.fieldRef(SIZE)}:a.width={value:e.bandSize(X,t.x.useSmallBand),offset:-1}:a.width={value:2}),e.isMeasure(Y)?(a.y={scale:Y,field:e.fieldRef(Y)},a.y2={group:"height"}):(e.has(Y)?a.yc={scale:Y,field:e.fieldRef(Y)}:a.y2={group:"height",offset:-e.config("singleBarOffset")},e.has(SIZE)?a.height={scale:SIZE,field:e.fieldRef(SIZE)}:a.height={value:e.bandSize(Y,t.y.useSmallBand),offset:-1}),e.has(COLOR)?a.fill={scale:COLOR,field:e.fieldRef(COLOR)}:a.fill={value:e.value(COLOR)};var r=e.field(COLOR).opacity;return r&&(a.opacity={value:r}),a}function r(e,t,n){var a={};e.has(X)?a.x={scale:X,field:e.fieldRef(X)}:e.has(X)||(a.x={value:e.bandSize(X,t.x.useSmallBand)/2}),e.has(Y)?a.y={scale:Y,field:e.fieldRef(Y)}:e.has(Y)||(a.y={value:e.bandSize(Y,t.y.useSmallBand)/2}),e.has(SIZE)?a.size={scale:SIZE,field:e.fieldRef(SIZE)}:e.has(SIZE)||(a.size={value:e.value(SIZE)}),e.has(SHAPE)?a.shape={scale:SHAPE,field:e.fieldRef(SHAPE)}:e.has(SHAPE)||(a.shape={value:e.value(SHAPE)}),e.field(SHAPE).filled?e.has(COLOR)?a.fill={scale:COLOR,field:e.fieldRef(COLOR)}:e.has(COLOR)||(a.fill={value:e.value(COLOR)}):(e.has(COLOR)?a.stroke={scale:COLOR,field:e.fieldRef(COLOR)}:e.has(COLOR)||(a.stroke={value:e.value(COLOR)}),a.strokeWidth={value:e.config("strokeWidth")});var r=e.field(COLOR).opacity||n.opacity;return r&&(a.opacity={value:r}),a}function i(e,t,n){var a={};e.has(X)?a.x={scale:X,field:e.fieldRef(X)}:e.has(X)||(a.x={value:0}),e.has(Y)?a.y={scale:Y,field:e.fieldRef(Y)}:e.has(Y)||(a.y={group:"height"}),e.has(COLOR)?a.stroke={scale:COLOR,field:e.fieldRef(COLOR)}:e.has(COLOR)||(a.stroke={value:e.value(COLOR)});var r=e.field(COLOR).opacity;return r&&(a.opacity={value:r}),a.strokeWidth={value:e.config("strokeWidth")},a}function f(e,t,n){var a={};e.isMeasure(X)?(a.x={scale:X,field:e.fieldRef(X)},e.isDimension(Y)&&(a.x2={scale:X,value:0},a.orient={value:"horizontal"})):e.has(X)?a.x={scale:X,field:e.fieldRef(X)}:a.x={value:0},e.isMeasure(Y)?(a.y={scale:Y,field:e.fieldRef(Y)},a.y2={scale:Y,value:0}):e.has(Y)?a.y={scale:Y,field:e.fieldRef(Y)}:a.y={group:"height"},e.has(COLOR)?a.fill={scale:COLOR,field:e.fieldRef(COLOR)}:e.has(COLOR)||(a.fill={value:e.value(COLOR)});var r=e.field(COLOR).opacity;return r&&(a.opacity={value:r}),a}function o(e,t,n){var a={};e.has(X)?(a.x={scale:X,field:e.fieldRef(X)},e.isDimension(X)&&(a.x.offset=-e.bandSize(X,t.x.useSmallBand)/3)):e.has(X)||(a.x={value:0}),e.has(Y)?(a.y={scale:Y,field:e.fieldRef(Y)},e.isDimension(Y)&&(a.y.offset=-e.bandSize(Y,t.y.useSmallBand)/3)):e.has(Y)||(a.y={value:0}),!e.has(X)||e.isDimension(X)?a.width={value:e.bandSize(X,t.y.useSmallBand)/1.5}:a.width={value:1},!e.has(Y)||e.isDimension(Y)?a.height={value:e.bandSize(Y,t.y.useSmallBand)/1.5}:a.height={value:1},e.has(COLOR)?a.fill={scale:COLOR,field:e.fieldRef(COLOR)}:a.fill={value:e.value(COLOR)};var r=e.field(COLOR).opacity||n.opacity;return r&&(a.opacity={value:r}),a}function c(e){return function(t,n,a){var r={};t.has(X)?r.x={scale:X,field:t.fieldRef(X)}:t.has(X)||(r.x={value:t.bandSize(X,n.x.useSmallBand)/2}),t.has(Y)?r.y={scale:Y,field:t.fieldRef(Y)}:t.has(Y)||(r.y={value:t.bandSize(Y,n.y.useSmallBand)/2}),t.has(SIZE)?r.size={scale:SIZE,field:t.fieldRef(SIZE)}:t.has(X)||(r.size={value:t.value(SIZE)}),r.shape={value:e},t.has(COLOR)?r.fill={scale:COLOR,field:t.fieldRef(COLOR)}:t.has(COLOR)||(r.fill={value:t.value(COLOR)});var i=t.field(COLOR).opacity||a.opacity;return i&&(r.opacity={value:i}),r}}function u(e,t,n,a){var r={},i=e.field(TEXT);e.has(X)?r.x={scale:X,field:e.fieldRef(X)}:e.has(X)||(e.has(TEXT)&&e.isType(TEXT,Q)?r.x={value:t.cellWidth-5}:r.x={value:e.bandSize(X,t.x.useSmallBand)/2}),e.has(Y)?r.y={scale:Y,field:e.fieldRef(Y)}:e.has(Y)||(r.y={value:e.bandSize(Y,t.y.useSmallBand)/2}),e.has(SIZE)?r.fontSize={scale:SIZE,field:e.fieldRef(SIZE)}:e.has(SIZE)||(r.fontSize={value:i.font.size}),r.fill={value:i.color};var f=e.field(COLOR).opacity||n.opacity;if(f&&(r.opacity={value:f}),e.has(TEXT))if(e.isType(TEXT,Q)){var o=a[e.fieldName(TEXT)],c=i.format||e.numberFormat(o);r.text={template:"{{"+e.fieldRef(TEXT)+" | number:'"+c+"'}}"},r.align={value:i.align}}else r.text={field:e.fieldRef(TEXT)};else r.text={value:i.placeholder};return r.font={value:i.font.family},r.fontWeight={value:i.font.weight},r.fontStyle={value:i.font.style},r.baseline={value:i.baseline},r}e("../globals");var s=t.exports={};s.def=function(e,t,n,a){var r=[],i=s[e.marktype()],f=e.dataTable();if(e.marktype()===TEXT&&e.has(COLOR)){var o={x:{value:0},y:{value:0},x2:{value:t.cellWidth},y2:{value:t.cellHeight},fill:{scale:COLOR,field:e.fieldRef(COLOR)}};r.push({type:"rect",from:{data:f},properties:{enter:o,update:o}})}var c=i.prop(e,t,n,a);return r.push({type:i.type,from:{data:f},properties:{enter:c,update:c}}),r},s.bar={type:"rect",stack:!0,prop:a,supportedEncoding:{row:1,col:1,x:1,y:1,size:1,color:1}},s.line={type:"line",line:!0,prop:i,requiredEncoding:["x","y"],supportedEncoding:{row:1,col:1,x:1,y:1,color:1,detail:1}},s.area={type:"area",stack:!0,line:!0,requiredEncoding:["x","y"],prop:f,supportedEncoding:{row:1,col:1,x:1,y:1,color:1}},s.tick={type:"rect",prop:o,supportedEncoding:{row:1,col:1,x:1,y:1,color:1,detail:1}},s.circle={type:"symbol",prop:c("circle"),supportedEncoding:{row:1,col:1,x:1,y:1,size:1,color:1,detail:1}},s.square={type:"symbol",prop:c("square"),supportedEncoding:s.circle.supportedEncoding},s.point={type:"symbol",prop:r,supportedEncoding:{row:1,col:1,x:1,y:1,size:1,color:1,shape:1,detail:1}},s.text={type:"text",prop:u,requiredEncoding:["text"],supportedEncoding:{row:1,col:1,size:1,color:1,text:1}}},{"../globals":25}],15:[function(e,t,n){"use strict";e("../globals");var a=e("../util"),r=e("./time"),i=e("colorbrewer"),f=e("d3-color").interpolateHsl,o=e("../schema/schema"),c=e("./sort"),u=t.exports={};u.names=function(e){return a.keys(a.keys(e).reduce(function(t,n){return e[n]&&e[n].scale&&(t[e[n].scale]=1),t},{}))},u.defs=function(e,t,n,a,r){return r=r||{},e.reduce(function(e,i){var f={name:i,type:u.type(i,t),domain:u.domain(i,t,a,r)};return f.sort=u.sort(f,t,i)||void 0,u.range(f,t,n,a,r),e.push(f),e},[])},u.sort=function(e,t,n){return"ordinal"===e.type&&(!!t.bin(n)||0===t.sort(n).length)},u.type=function(e,t){switch(t.type(e)){case N:case O:return"ordinal";case T:var n=t.field(e).timeUnit;return n?r.scale.type(n,e):"time";case Q:return t.bin(e)?e===COLOR?"linear":"ordinal":t.scale(e).type}},u.domain=function(e,t,n,i){var f=t.field(e);if(t.isType(e,T)){var u=r.scale.domain(f.timeUnit,e);if(u)return u}if(f.bin){var s=n[f.name],d=a.getbins(s,f.bin.maxbins||o.MAXBINS_DEFAULT),l=(d.stop-d.start)/d.step;return a.range(l).map(function(e){return d.start+d.step*e})}if(e==i.stack)return{data:STACKED,field:t.fieldRef(e,{data:!t._vega2,prefn:(i.facet?"max_":"")+"sum_"})};var b=t.aggregate(e),h=f.timeUnit,m=t.scale(e).useRawDomain,g=void 0!==m?m:t.config("useRawDomain"),p=!b||"count"!==b&&"sum"!==b;if(g&&p&&(t.isType(e,Q)&&!f.bin||t.isType(e,T)&&(!h||!r.isOrdinalFn(h))))return{data:RAW,field:t.fieldRef(e,{nofn:!h})};var y=t.sort(e,n).length>0?c.getDataName(e):t.dataTable();return{data:y,field:t.fieldRef(e)}},u.range=function(e,t,n,a){var r=t.scale(e.name),i=t.field(e.name),f=i.timeUnit;switch(e.name){case X:e.range=n.cellWidth?[0,n.cellWidth]:"width","ordinal"===e.type?e.bandWidth=t.bandSize(X,n.x.useSmallBand):(t.isType(e.name,T)&&"year"===f?e.zero=!1:e.zero=void 0===r.zero?!0:r.zero,e.reverse=r.reverse),e.round=!0,"time"===e.type?e.nice=f||t.config("timeScaleNice"):e.nice=!0;break;case Y:"ordinal"===e.type?(e.range=n.cellHeight?i.bin?[n.cellHeight,0]:[0,n.cellHeight]:"height",e.bandWidth=t.bandSize(Y,n.y.useSmallBand)):(e.range=n.cellHeight?[n.cellHeight,0]:"height",t.isType(e.name,T)&&"year"===f?e.zero=!1:e.zero=void 0===r.zero?!0:r.zero,e.reverse=r.reverse),e.round=!0,"time"===e.type?e.nice=f||t.config("timeScaleNice"):e.nice=!0;break;case ROW:e.bandWidth=n.cellHeight,e.round=!0,e.nice=!0;break;case COL:e.bandWidth=n.cellWidth,e.round=!0,e.nice=!0;break;case SIZE:if(t.is("bar"))e.range=[3,Math.max(t.bandSize(X),t.bandSize(Y))];else if(t.is(TEXT))e.range=[8,40];else{var o=Math.min(t.bandSize(X),t.bandSize(Y))-1;e.range=[10,.8*o*o]}e.round=!0,e.zero=!1;break;case SHAPE:e.range="shapes";break;case COLOR:e.range=u.color(e,t,a),"ordinal"!==e.type&&(e.zero=!1);break;default:throw new Error("Unknown encoding name: "+e.name)}switch(e.name){case ROW:case COL:e.padding=t.config("cellPadding"),e.outerPadding=0;break;case X:case Y:"ordinal"===e.type&&(e.points=!0,e.padding=t.field(e.name).band.padding)}},u.color=function(e,t,n){var a=t.scale(COLOR),r=a.range,i=t.cardinality(COLOR,n),f=t.type(COLOR);if(void 0===r){var o=a.ordinalPalette,c=a.quantitativeRange;return"ordinal"===e.type?f===N?(r=10>=i?a.c10palette:a.c20palette,u.color.palette(r,i,f)):o?u.color.palette(o,i,f):u.color.interpolate(c[0],c[1],i):[c[0],c[1]]}},u.color.palette=function(e,t,n){switch(e){case"category10k":return["#2ca02c","#e377c2","#7f7f7f","#17becf","#8c564b","#d62728","#bcbd22","#9467bd","#ff7f0e","#1f77b4"];case"category10":return["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"];case"category20":return["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];case"category20b":return["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"];case"category20c":return["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"]}if(e in i){var r=i[e];if(t in r)return r[t];if(n===N)return r[Math.max.apply(null,a.keys(r))];var f=3>t?3:Math.max.apply(null,a.keys(r)),o=0,c=f-1;return u.color.interpolate(r[f][o],r[f][c],t)}return e},u.color.interpolate=function(e,t,n){var r=f(e,t);return a.range(n).map(function(e){return r(1*e/(n-1))})}},{"../globals":25,"../schema/schema":27,"../util":29,"./sort":16,"./time":20,colorbrewer:3,"d3-color":4}],16:[function(e,t,n){"use strict";function a(e,t,n,i){var f={};return t.forEach(function(i,o){var c=t.sort(o,n);if(c.length>0){var u=c.map(function(e){return{op:e.aggregate,field:r.fieldRef(e,{nofn:!0,data:!t._vega2})}}),s=c.map(function(e){var n=e.reverse?"-":"";return n+r.fieldRef(e,{data:!t._vega2})}),d=a.getDataName(o),l=[{type:"aggregate",groupby:[t.fieldRef(o)],fields:u},{type:"sort",by:s}];e.push({name:d,source:RAW,transform:l}),f[o]=d}}),e}e("../globals");var r=e("../field");t.exports=a,a.getDataName=function(e){return"sorted-"+e}},{"../field":24,"../globals":25}],17:[function(e,t,n){"use strict";function a(e,t,n){if(!r[t.marktype()].stack)return!1;if(!t.has(COLOR))return!1;var a=null,i=null,f=null,o=t.isMeasure(X),c=t.isMeasure(Y),u=t.facets();if(o&&!c)a=Y,i=X,f=0;else{if(!c||o)return null;a=X,i=Y,f=1}var s={name:STACKED,source:t.dataTable(),transform:[{type:"aggregate",groupby:[t.fieldRef(a)].concat(u),fields:[{op:"sum",field:t.fieldRef(i)}]}]};return u&&u.length>0&&s.transform.push({type:"aggregate",groupby:u,fields:[{op:"max",field:t.fieldName(i,{fn:"sum"})}]}),e.push(s),n.from.transform=[{type:"stack",point:t.fieldRef(a),height:t.fieldRef(i),output:{y1:i,y0:i+"2"}}],n.properties.update[i]=n.properties.enter[i]={scale:i,field:i},n.properties.update[i+"2"]=n.properties.enter[i+"2"]={scale:i,field:i+"2"},i}e("../globals");var r=e("./marks");t.exports=a},{"../globals":25,"./marks":14}],18:[function(e,t,n){"use strict";function a(e,t){if(!t)return 1;var n=0;if(e.isAggregate())n=1,e.forEach(function(a,i){i===ROW||i===COL||(i===X||i===Y)&&r.isOrdinalScale(a)||(n*=e.cardinality(i,t))});else{if(!t["*"])return 1;n=t["*"].max;var a=1;e.has(ROW)&&(a*=e.cardinality(ROW,t)),e.has(COL)&&(a*=e.cardinality(COL,t)),n/=a}var i=0;return i=25>=n?1:200>n?.8:1e3>n||e.is("tick")?.7:.3}e("../globals");var r=e("../field");t.exports=function(e,t){return{opacity:a(e,t)}}},{"../field":24,"../globals":25}],19:[function(e,t,n){"use strict";function a(e,t,n,a,r){var i=e.marks,f={_name:"subfacet",type:"group",from:t.from,properties:{enter:{width:{group:"width"},height:{group:"height"}}},marks:i};e.marks=[f],delete t.from;var o=f.from.transform||(f.from.transform=[]);o.unshift({type:"facet",keys:n}),a&&r.has(COLOR)&&o.unshift({type:"sort",by:r.fieldRef(COLOR)})}e("../globals"),t.exports=a},{"../globals":25}],20:[function(e,t,n){"use strict";var a=e("../util"),r=e("d3-time-format"),i=t.exports={},f=new Date(Date.UTC(2014,8,17));i.cardinality=function(e,t,n,a){var r=e.timeUnit;switch(r){case"seconds":return 60;case"minutes":return 60;case"hours":return 24;case"day":return 7;case"date":return 31;case"month":return 12;case"year":var i=t[e.name],f=t["year_"+e.name];return f?f.distinct-(i.nulls>0&&n[a]?1:0):null}return null},i.formula=function(e,t){var n="utc"+e;return n+"("+t+")"},i.maxLength=function(e,t){switch(e){case"seconds":case"minutes":case"hours":case"date":return 2;case"month":case"day":var n=i.range(e,t);return n?Math.max.apply(null,n.map(function(e){return e.length})):2;case"year":return 4}var a=t.config("timeFormat");return r.utcFormat(a)(f).length},i.range=function(e,t){var n,a=t.config("timeScaleLabelLength");switch(e){case"day":n=t.config("dayScaleLabel");break;case"month":n=t.config("monthScaleLabel")}return n?a?n.map(function(e){return e.substr(0,a)}):n:void 0},i.scales=function(e){var t=e.reduce(function(t,n){var a=n.timeUnit;if(n.type===T&&a&&!t[a]){var r=i.scale.def(n.timeUnit,e);r&&(t[a]=r)}return t},{});return a.vals(t)},i.scale={},i.scale.def=function(e,t){var n=i.range(e,t);return n?{name:"time-"+e,type:"ordinal",domain:i.scale.domain(e),range:n}:null},i.isOrdinalFn=function(e){switch(e){case"seconds":case"minutes":case"hours":case"day":case"date":case"month":return!0}return!1},i.scale.type=function(e,t){return t===COLOR?"linear":i.isOrdinalFn(e)||t===COL||t===ROW?"ordinal":"linear"},i.scale.domain=function(e,t){var n=t===COLOR;switch(e){case"seconds":case"minutes":return n?[0,59]:a.range(0,60);case"hours":return n?[0,23]:a.range(0,24);case"day":return n?[0,6]:a.range(0,7);case"date":return n?[1,31]:a.range(1,32);case"month":return n?[0,11]:a.range(0,12)}return null},i.hasScale=function(e){switch(e){case"day":case"month":return!0}return!1}},{"../util":29,"d3-time-format":6}],21:[function(e,t,n){"use strict";e("./globals");var a=t.exports={};a.encodingTypes=[X,Y,ROW,COL,SIZE,SHAPE,COLOR,TEXT,DETAIL],a.shorthand={delim:"|",assign:"=",type:",",func:"_"}},{"./globals":25}],22:[function(e,t,n){"use strict";e("./globals");var a=e("datalib/src/stats"),r=t.exports={};r.types={"boolean":N,number:Q,integer:Q,date:T,string:N},r.stats=function(e){var t=a.summary(e);return t.reduce(function(e,t){return e[t.field]=t,e},{"*":{max:e.length,min:0}})}},{"./globals":25,"datalib/src/stats":35}],23:[function(e,t,n){"use strict";var a=e("./consts"),r=a.shorthand,i=e("./field"),f=e("./util"),o=e("./schema/schema"),c=o.encTypes,u=t.exports={};u.countRetinal=function(e){var t=0;return e.color&&t++,e.size&&t++,e.shape&&t++,t},u.has=function(e,t){var n=e&&e[t];return n&&n.name},u.isAggregate=function(e){for(var t in e)if(u.has(e,t)&&e[t].aggregate)return!0;return!1},u.forEach=function(e,t){var n=0;c.forEach(function(a){u.has(e,a)&&t(e[a],a,n++)})},u.map=function(e,t){var n=[];return c.forEach(function(a){u.has(e,a)&&n.push(t(e[a],a,e))}),n},u.reduce=function(e,t,n){var a=n;return c.forEach(function(n){u.has(e,n)&&(a=t(a,e[n],n,e))}),a},u.fields=function(e){return u.reduce(e,function(e,t){var n=e[t.name]=e[t.name]||[],a=n.containsType=n.containsType||{};return-1===n.indexOf(t)&&(n.push(t),a[t.type]=!0),e},{})},u.shorthand=function(e){return u.map(e,function(e,t){return t+r.assign+i.shorthand(e)}).join(r.delim)},u.fromShorthand=function(e){var t=f.isArray(e)?e:e.split(r.delim);return t.reduce(function(e,t){var n=t.split(r.assign),a=n[0].trim(),f=n[1];return e[a]=i.fromShorthand(f),e},{})}},{"./consts":21,"./field":24,"./schema/schema":27,"./util":29}],24:[function(e,t,n){"use strict";function a(e){return d(e,[N,O])||!!e.bin||s(e,T)&&!!e.timeUnit}e("./globals");var r=e("./consts"),i=r.shorthand,f=e("./compiler/time"),o=e("./util"),c=e("./schema/schema"),u=t.exports={};u.fieldRef=function(e,t){t=t||{};var n=(t.d?"d.":"")+(t.data?"data.":"")+(t.prefn||""),a=t.nofn||t.fn,r=e.name;return u.isCount(e)?n+"count":!a&&e.bin?n+"bin_"+r:!a&&e.aggregate?n+e.aggregate+"_"+r:!a&&e.timeUnit?n+e.timeUnit+"_"+r:t.fn?n+t.fn+"_"+r:n+r},u.shorthand=function(e){var t=r.shorthand;return(e.aggregate?e.aggregate+t.func:"")+(e.timeUnit?e.timeUnit+t.func:"")+(e.bin?"bin"+t.func:"")+(e.name||"")+t.type+e.type},u.shorthands=function(e,t){return t=t||i.delim,e.map(u.shorthand).join(t)},u.fromShorthand=function(e){var t,n=e.split(i.type),a={name:n[0].trim(),type:n[1].trim()};for(t in c.aggregate["enum"]){var r=c.aggregate["enum"][t];if(0===a.name.indexOf(r+"_")){a.name=a.name.substr(r.length+1),"count"==r&&0===a.name.length&&(a.name="*"),a.aggregate=r;break}}for(t in c.timefns){var f=c.timefns[t];if(a.name&&0===a.name.indexOf(f+"_")){a.name=a.name.substr(a.length+1),a.timeUnit=f;break}}return a.name&&0===a.name.indexOf("bin_")&&(a.name=a.name.substr(4),a.bin=!0),a};var s=u.isType=function(e,t){return e.type===t},d=u.isTypes=function(e,t){for(var n=0;n0&&n[r]?1:0)}},{"./compiler/time":20,"./consts":21,"./globals":25,"./schema/schema":27,"./util":29}],25:[function(e,t,n){(function(e){"use strict";var t=e||window;t.AGGREGATE="aggregate",t.RAW="raw",t.STACKED="stacked",t.INDEX="index",t.X="x",t.Y="y",t.ROW="row",t.COL="col",t.SIZE="size",t.SHAPE="shape",t.COLOR="color",t.TEXT="text",t.DETAIL="detail",t.N="N",t.O="O",t.Q="Q",t.T="T"}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],26:[function(e,t,n){"use strict";t.exports=function(e){var t=["error","info","debug","warn","log"];return t.reduce(function(t,n){var a=console[n]?n:"log";return"undefined"===console[a].bind?t[n]=Function.prototype.bind.call(console[a],console,e):t[n]=console[a].bind(console,e),t},{})}},{}],27:[function(e,t,n){"use strict";e("../globals");var a=t.exports={},r=e("../util"),i=r.toMap,f=e("colorbrewer");a.util=e("./schemautil"),a.marktype={type:"string","enum":["point","tick","bar","line","area","circle","square","text"]},a.aggregate={type:"string","enum":["avg","sum","median","min","max","count"],supportedEnums:{Q:["avg","median","sum","min","max","count"],O:["median","min","max"],N:[],T:["avg","median","min","max"],"":["count"]},supportedTypes:i([Q,N,O,T,""])},a.getSupportedRole=function(e){return a.schema.properties.encoding.properties[e].supportedRole},a.timeUnits=["year","month","day","date","hours","minutes","seconds"],a.defaultTimeFn="month",a.timeUnit={type:"string","enum":a.timeUnits,supportedTypes:i([T])},a.scale_type={type:"string","enum":["linear","log","pow","sqrt","quantile"],"default":"linear",supportedTypes:i([Q])},a.field={type:"object",properties:{name:{type:"string"}}};var o=r.duplicate,c=a.util.merge;a.MAXBINS_DEFAULT=15;var u={type:["boolean","object"],"default":!1,properties:{maxbins:{type:"integer","default":a.MAXBINS_DEFAULT,minimum:2,description:"Maximum number of bins."}},supportedTypes:i([Q])},s=c(o(a.field),{type:"object",properties:{type:{type:"string","enum":[N,O,Q,T]},aggregate:a.aggregate,timeUnit:a.timeUnit,bin:u,scale:{type:"object",properties:{type:a.scale_type,reverse:{type:"boolean","default":!1,supportedTypes:i([Q,T])},nice:{type:"string","enum":["second","minute","hour","day","week","month","year"],supportedTypes:i([T])},zero:{type:"boolean",description:"Include zero","default":!0,supportedTypes:i([Q,T])},useRawDomain:{type:"boolean","default":void 0,description:"Use the raw data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."}}}}}),d=c(o(a.field),{type:"object",supportedRole:{dimension:!0},properties:{type:{type:"string","enum":[N,O,Q,T]},timeUnit:a.timeUnit,bin:u,aggregate:{type:"string","enum":["count"],supportedTypes:i([N,O])}}}),l={type:"object",supportedMarktypes:{point:!0,tick:!0,bar:!0,line:!0,area:!0,circle:!0,square:!0},properties:{axis:{type:"object",properties:{format:{type:"string","default":void 0,description:"The formatting pattern for axis labels. If not undefined, this will be determined by small/largeNumberFormat and the max value of the field."},grid:{type:"boolean","default":!0,description:"A flag indicate if gridlines should be created in addition to ticks."},layer:{type:"string","default":"back",description:'A string indicating if the axis (and any gridlines) should be placed above or below the data marks. One of "front" (default) or "back".'},orient:{type:"string","default":void 0,"enum":["top","right","left","bottom"],description:"The orientation of the axis. One of top, bottom, left or right. The orientation can be used to further specialize the axis type (e.g., a y axis oriented for the right edge of the chart)."},ticks:{type:"integer","default":5,minimum:0,description:'A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are "nice" (multiples of 2, 5, 10) and lie within the underlying scale\'s range.'},title:{type:"string","default":void 0,description:"A title for the axis. (Shows field name and its function by default.)"},maxLabelLength:{type:"integer","default":25,minimum:0,description:"Truncate labels that are too long."},labelAngle:{type:"integer","default":void 0,minimum:0,maximum:360,description:"Angle by which to rotate labels. Set to 0 to force horizontal."},titleMaxLength:{type:"integer","default":void 0,minimum:0,description:"Max length for axis title if the title is automatically generated from the field's description"},titleOffset:{type:"integer","default":void 0,description:"A title offset value for the axis."}}}}},b={type:"object",properties:{sort:{type:"array","default":[],items:{type:"object",supportedTypes:i([N,O]),required:["name","aggregate"],properties:{name:{type:"string"},aggregate:{type:"string","enum":["avg","sum","min","max","count"]},reverse:{type:"boolean","default":!1}}}}}},h={type:"object",properties:{band:{type:"object",properties:{size:{type:"integer",minimum:0,"default":void 0},padding:{type:"integer",minimum:0,"default":1}}}}},m={type:"object",properties:{legend:{type:"object",description:"Properties of a legend.",properties:{title:{type:"string","default":void 0,description:"A title for the legend. (Shows field name and its function by default.)"}}}}},g={type:"object",supportedMarktypes:{text:!0},properties:{align:{type:"string","default":"right"},baseline:{type:"string","default":"middle"},color:{type:"string",role:"color","default":"#000000"},margin:{type:"integer","default":4,minimum:0},placeholder:{type:"string","default":"Abc"},font:{type:"object",properties:{weight:{type:"string","enum":["normal","bold"],"default":"normal"},size:{type:"integer","default":10,minimum:0},family:{type:"string","default":"Helvetica Neue"},style:{type:"string","default":"normal","enum":["normal","italic"]}}},format:{type:"string","default":void 0,description:"The formatting pattern for text value. If not undefined, this will be determined by small/largeNumberFormat and the max value of the field."}}},p={type:"object",supportedMarktypes:{point:!0,bar:!0,circle:!0,square:!0,text:!0},properties:{value:{type:"integer","default":30,minimum:0,description:"Size of marks."}}},y={type:"object",supportedMarktypes:{point:!0,tick:!0,bar:!0,line:!0,area:!0,circle:!0,square:!0,text:!0},properties:{value:{type:"string",role:"color","default":"#4682b4",description:"Color to be used for marks."},opacity:{type:"number","default":void 0,minimum:0,maximum:1},scale:{type:"object",properties:{range:{type:["string","array"],"default":void 0,description:"Color palette, if undefined vega-lite will use data propertyto pick one from c10palette, c20palette, or ordinalPalette."},c10palette:{type:"string","default":"category10","enum":["category10","category10k","Pastel1","Pastel2","Set1","Set2","Set3"]},c20palette:{type:"string","default":"category20","enum":["category20","category20b","category20c"]},ordinalPalette:{type:"string","default":void 0,description:"Color palette to encode ordinal variables.","enum":r.keys(f)},quantitativeRange:{type:"array","default":["#AFC6A3","#09622A"],description:"Color range to encode quantitative variables.",minItems:2,maxItems:2,items:{type:"string",role:"color"}}}}}},v={type:"object",supportedMarktypes:{point:!0,circle:!0,square:!0},properties:{value:{type:"string","enum":["circle","square","cross","diamond","triangle-up","triangle-down"],"default":"circle", -description:"Mark to be used."},filled:{type:"boolean","default":!1,description:"Whether the shape's color should be used as fill color instead of stroke color."}}},M={type:"object",supportedMarktypes:{point:!0,tick:!0,line:!0,circle:!0,square:!0}},x={properties:{height:{type:"number",minimum:0,"default":150}}},S={properties:{width:{type:"number",minimum:0,"default":150},axis:{properties:{maxLabelLength:{type:"integer","default":12,minimum:0,description:"Truncate labels that are too long."}}}}},w={type:"object",supportedMarktypes:{point:!0,tick:!0,bar:!0,line:!0,area:!0,circle:!0,square:!0,text:!0},properties:{padding:{type:"number",minimum:0,maximum:1,"default":.1}}},k={required:["name","type"]},C=c(o(s),{supportedRole:{measure:!0,dimension:!0}}),R=c(o(s),{supportedRole:{measure:!0,dimension:"ordinal-only"}}),D=c(o(s),{supportedRole:{measure:!0}}),L=c(o(C),l,h,k,b),Y=o(L),A=c(o(d),k,w,b),U=c(o(A),l,x),E=c(o(A),l,S),X=c(o(R),m,p,b),j=c(o(C),m,y,b),z=c(o(d),m,v,b),F=c(o(d),M,b),_=c(o(D),g,b),H={type:"array",items:{type:"object",properties:{operands:{type:"array",items:{type:["string","boolean","integer","number"]}},operator:{type:"string","enum":[">",">=","=","!=","<","<=","notNull"]}}}},W={type:"object",properties:{formatType:{type:"string","enum":["json","csv"],"default":"json"},url:{type:"string","default":void 0},values:{type:"array","default":void 0,description:"Pass array of objects instead of a url to a file.",items:{type:"object",additionalProperties:!0}}}},$={type:"object",properties:{width:{type:"integer","default":void 0},height:{type:"integer","default":void 0},viewport:{type:"array",items:{type:"integer"},"default":void 0},gridColor:{type:"string",role:"color","default":"#000000"},gridOpacity:{type:"number",minimum:0,maximum:1,"default":.08},filterNull:{type:"object",properties:{N:{type:"boolean","default":!1},O:{type:"boolean","default":!1},Q:{type:"boolean","default":!0},T:{type:"boolean","default":!0}}},toggleSort:{type:"string","default":O},autoSortLine:{type:"boolean","default":!0},singleHeight:{type:"integer","default":200,minimum:0},singleWidth:{type:"integer","default":200,minimum:0},largeBandSize:{type:"integer","default":21,minimum:0},smallBandSize:{type:"integer","default":12,minimum:0},largeBandMaxCardinality:{type:"integer","default":10},cellPadding:{type:"number","default":.1},cellGridColor:{type:"string",role:"color","default":"#000000"},cellGridOpacity:{type:"number",minimum:0,maximum:1,"default":.15},cellBackgroundColor:{type:"string",role:"color","default":"rgba(0,0,0,0)"},textCellWidth:{type:"integer","default":90,minimum:0},strokeWidth:{type:"integer","default":2,minimum:0},singleBarOffset:{type:"integer","default":5,minimum:0},timeScaleLabelLength:{type:"integer","default":3,minimum:0,description:"Max length for values in dayScaleLabel and monthScaleLabel. Zero means using full names in dayScaleLabel/monthScaleLabel."},dayScaleLabel:{type:"array",items:{type:"string"},"default":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],description:"Axis labels for day of week, starting from Sunday.(Consistent with Javascript -- See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay."},monthScaleLabel:{type:"array",items:{type:"string"},"default":["January","February","March","April","May","June","July","August","September","October","November","December"],description:"Axis labels for month."},characterWidth:{type:"integer","default":6},maxSmallNumber:{type:"number","default":1e4,description:"maximum number that a field will be considered smallNumber.Used for axis labelling."},smallNumberFormat:{type:"string","default":"",description:"D3 Number format for axis labels and text tables for number <= maxSmallNumber. Used for axis labelling."},largeNumberFormat:{type:"string","default":".3s",description:"D3 Number format for axis labels and text tables for number > maxSmallNumber."},timeFormat:{type:"string","default":"%Y-%m-%d",description:"Date format for axis labels."},useRawDomain:{type:"boolean","default":!1,description:"Use the raw data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."}}};a.schema={$schema:"http://json-schema.org/draft-04/schema#",description:"Schema for Vega-lite specification",type:"object",required:["marktype","encoding","data"],properties:{data:W,marktype:a.marktype,encoding:{type:"object",properties:{x:L,y:Y,row:U,col:E,size:X,color:j,shape:z,text:_,detail:F}},filter:H,config:$}},a.encTypes=r.keys(a.schema.properties.encoding.properties),a.instantiate=function(){return a.util.instantiate(a.schema)}},{"../globals":25,"../util":29,"./schemautil":28,colorbrewer:3}],28:[function(e,t,n){"use strict";function a(e,t){if("object"!=typeof t||null===t)return e;for(var n in t)t.hasOwnProperty(n)&&void 0!==t[n]&&("object"!=typeof t[n]||null===t[n]?e[n]=t[n]:"object"!=typeof e[n]||null===e[n]?e[n]=a(t[n].constructor===Array?[]:{},t[n]):a(e[n],t[n]));return e}var r=t.exports={},i=e("../util"),f=function(e){return 0===Object.keys(e).length};r.extend=function(e,t){return r.merge(r.instantiate(t),e)},r.instantiate=function(e){var t;if(void 0===e)return void 0;if("default"in e)return t=e["default"],i.isObject(t)?i.duplicate(t):t;if("object"===e.type){var n={};for(var a in e.properties)t=r.instantiate(e.properties[a]),void 0!==t&&(n[a]=t);return n}return"array"===e.type?[]:void 0},r.subtract=function(e,t){var n={};for(var a in e){var o=t[a],c=e[a];if(!t||o!==c)if("object"==typeof c&&!i.isArray(c)&&o){var u=r.subtract(c,o);f(u)||(n[a]=u)}else(!i.isArray(c)||c.length>0)&&(n[a]=c)}return n},r.merge=function(){for(var e=arguments[0],t=1;tt-a?a:r},f.ceil=function(t){return e(t=new Date(t-1)),n(t,1),t},f.offset=function(e,t){return n(e=new Date(+e),null==t?1:Math.floor(t)),e},f.range=function(t,a,r){var i=[];if(t=new Date(t-1),a=new Date(+a),r=null==r?1:Math.floor(r),!(a>t&&r>0))return i;for(n(t,1),e(t),a>t&&i.push(new Date(+t));n(t,r),e(t),a>t;)i.push(new Date(+t));return i},f.filter=function(a){return t(function(t){for(;e(t),!a(t);)t.setTime(t-1)},function(e,t){for(;--t>=0;)for(;n(e,1),!a(e););})},a&&(f.count=function(t,n){return i.setTime(+t),r.setTime(+n),e(i),e(r),Math.floor(a(i,r))}),f}function n(e){return t(function(t){t.setHours(0,0,0,0),t.setDate(t.getDate()-(t.getDay()+7-e)%7)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/6048e5})}function a(e){return t(function(t){t.setUTCHours(0,0,0,0),t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/6048e5})}var r=new Date,i=new Date,f=t(function(e){e.setMilliseconds(0)},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3});e.seconds=f.range;var o=t(function(e){e.setSeconds(0,0)},function(e,t){e.setTime(+e+6e4*t)},function(e,t){return(t-e)/6e4});e.minutes=o.range;var c=t(function(e){e.setMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5});e.hours=c.range;var u=t(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5});e.days=u.range,e.sunday=n(0),e.sundays=e.sunday.range,e.monday=n(1),e.mondays=e.monday.range,e.tuesday=n(2),e.tuesdays=e.tuesday.range,e.wednesday=n(3),e.wednesdays=e.wednesday.range,e.thursday=n(4),e.thursdays=e.thursday.range,e.friday=n(5),e.fridays=e.friday.range,e.saturday=n(6),e.saturdays=e.saturday.range;var s=e.sunday;e.weeks=s.range;var d=t(function(e){e.setHours(0,0,0,0),e.setDate(1)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())});e.months=d.range;var l=t(function(e){e.setHours(0,0,0,0),e.setMonth(0,1)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()});e.years=l.range;var b=t(function(e){e.setUTCMilliseconds(0)},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3});e.utcSeconds=b.range;var h=t(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+6e4*t)},function(e,t){return(t-e)/6e4});e.utcMinutes=h.range;var m=t(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5});e.utcHours=m.range;var g=t(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5});e.utcDays=g.range,e.utcSunday=a(0),e.utcSundays=e.utcSunday.range,e.utcMonday=a(1),e.utcMondays=e.utcMonday.range,e.utcTuesday=a(2),e.utcTuesdays=e.utcTuesday.range,e.utcWednesday=a(3),e.utcWednesdays=e.utcWednesday.range,e.utcThursday=a(4),e.utcThursdays=e.utcThursday.range,e.utcFriday=a(5),e.utcFridays=e.utcFriday.range,e.utcSaturday=a(6),e.utcSaturdays=e.utcSaturday.range;var p=e.utcSunday;e.utcWeeks=p.range;var y=t(function(e){e.setUTCHours(0,0,0,0),e.setUTCDate(1)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())});e.utcMonths=y.range;var v=t(function(e){e.setUTCHours(0,0,0,0),e.setUTCMonth(0,1)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()});e.utcYears=v.range,e.interval=t,e.second=f,e.minute=o,e.hour=c,e.day=u,e.week=s,e.month=d,e.year=l,e.utcSecond=b,e.utcMinute=h,e.utcHour=m,e.utcDay=g,e.utcWeek=p,e.utcMonth=y,e.utcYear=v})},{}],32:[function(e,t,n){function a(e){if(!e)throw Error("Missing binning options.");var t,n,a,o,c,u,s,d=e.maxbins||15,l=e.base||10,b=Math.log(l),h=e.div||[5,2],m=e.min,g=e.max,p=g-m;if(e.step)t=e.step;else if(e.steps)t=e.steps[Math.min(e.steps.length-1,r(e.steps,p/d,0,e.steps.length))];else{n=Math.ceil(Math.log(d)/b),a=e.minstep||0,t=Math.max(a,Math.pow(l,Math.round(Math.log(p)/b)-n));do t*=l;while(Math.ceil(p/t)>d);for(u=0;u=a&&d>=p/c&&(t=c)}return c=Math.log(t),o=c>=0?0:~~(-c/b)+1,s=Math.pow(l,-o-1),m=Math.min(m,Math.floor(m/t+s)*t),g=Math.ceil(g/t)*t,{start:m,stop:g,step:t,unit:{precision:o},value:i,index:f}}function r(e,t,n,a){for(;a>n;){var r=n+a>>>1;u.cmp(e[r],t)<0?n=r+1:a=r}return n}function i(e){return this.step*Math.floor(e/this.step+d)}function f(e){return Math.floor((e-this.start)/this.step+d)}function o(e){return this.unit.date(i.call(this,e))}function c(e){return f.call(this,this.unit.unit(e))}var u=e("../util"),s=e("../time"),d=1e-15;a.date=function(e){if(!e)throw Error("Missing date binning options.");var t=e.utc?s.utc:s,n=e.min,r=e.max,i=e.maxbins||20,f=e.minbins||4,u=+r-+n,d=e.unit?t[e.unit]:t.find(u,f,i),l=a({min:null!=d.min?d.min:d.unit(n),max:null!=d.max?d.max:d.unit(r),maxbins:i,minstep:d.minstep,steps:d.step});return l.unit=d,l.index=c,e.raw||(l.value=o),l},t.exports=a},{"../time":36,"../util":37}],33:[function(e,t,n){var a=t.exports={};a.repeat=function(e,t){var n,a=Array(t);for(n=0;t>n;++n)a[n]=e;return a},a.zeros=function(e){return a.repeat(0,e)},a.range=function(e,t,n){if(arguments.length<3&&(n=1,arguments.length<2&&(t=e,e=0)),(t-e)/n==1/0)throw new Error("Infinite range");var a,r=[],i=-1;if(0>n)for(;(a=e+n*++i)>t;)r.push(a);else for(;(a=e+n*++i)1);return r=Math.sqrt(-2*Math.log(a)/a),n=e+f*r*t,e+i*r*t};return r.samples=function(e){return a.zeros(e).map(r)},r}},{}],34:[function(e,t,n){function a(e,t){return t?void(e[u]=t):e&&e[u]||null}function r(e,t){t=c.$(t);var n,a,r;if(e[u]&&(n=t(e[u]),c.isString(n)))return n;for(a=0,r=e.length;!c.isValid(n)&&r>a;++a)n=t?t(e[a]):e[a];return c.isDate(n)?"date":c.isNumber(n)?"number":c.isBoolean(n)?"boolean":c.isString(n)?"string":null}function i(e,t){return e.length?(t=t||c.keys(e[0]),t.reduce(function(t,n){return t[n]=r(e,n),t},{})):void 0}function f(e,t){t=c.$(t);var n,a,r,i=["boolean","integer","number","date"];for(n=0;ni;++i)r=t?t(e[i]):e[i],r in o||(o[r]=1,n.push(r));return n},f.count=function(e){return e&&e.length||0},f.count.valid=function(e,t){t=a.$(t);var n,r,i,f=0;for(r=0,i=e.length;i>r;++r)n=t?t(e[r]):e[r],a.isValid(n)&&(f+=1);return f},f.count.missing=function(e,t){t=a.$(t);var n,r,i,f=0;for(r=0,i=e.length;i>r;++r)n=t?t(e[r]):e[r],null==n&&(f+=1);return f},f.count.distinct=function(e,t){t=a.$(t);var n,r,i,f={},o=0;for(r=0,i=e.length;i>r;++r)n=t?t(e[r]):e[r],n in f||(f[n]=1,o+=1);return o},f.count.map=function(e,t){t=a.$(t);var n,r,i,f={};for(r=0,i=e.length;i>r;++r)n=t?t(e[r]):e[r],f[n]=n in f?f[n]+1:1;return f},f.median=function(e,t){return t&&(e=e.map(a.$(t))),e=e.filter(a.isValid).sort(a.cmp),f.quantile(e,.5)},f.quartile=function(e,t){t&&(e=e.map(a.$(t))),e=e.filter(a.isValid).sort(a.cmp);var n=f.quantile;return[n(e,.25),n(e,.5),n(e,.75)]},f.quantile=function(e,t,n){void 0===n&&(n=t,t=a.identity),t=a.$(t);var r=(e.length-1)*n+1,i=Math.floor(r),f=+t(e[i-1]),o=r-i;return o?f+o*(t(e[i])-f):f},f.sum=function(e,t){t=a.$(t);for(var n,r=0,i=0,f=e.length;f>i;++i)n=t?t(e[i]):e[i],a.isValid(n)&&(r+=n);return r},f.mean=function(e,t){t=a.$(t);var n,r,i,f,o,c=0;for(r=0,f=0,i=e.length;i>r;++r)o=t?t(e[r]):e[r],a.isValid(o)&&(n=o-c,c+=n/++f);return c},f.variance=function(e,t){if(t=a.$(t),!a.isArray(e)||e.length<2)return 0;var n,r,i,f,o=0,c=0;for(r=0,i=0;rf;++f)if(i=t?t(e[f]):e[f],a.isValid(i)){n=r=i;break}for(;o>f;++f)i=t?t(e[f]):e[f],a.isValid(i)&&(n>i&&(n=i),i>r&&(r=i));return[n,r]},f.extent.index=function(e,t){t=a.$(t);var n,r,i,f,o=-1,c=-1,u=e.length;for(f=0;u>f;++f)if(i=t?t(e[f]):e[f],a.isValid(i)){n=r=i,o=c=f;break}for(;u>f;++f)i=t?t(e[f]):e[f],a.isValid(i)&&(n>i&&(n=i,o=f),i>r&&(r=i,c=f));return[o,c]},f.dot=function(e,t,n){var r,i,f=0;if(n)for(t=a.$(t),n=a.$(n),r=0;rn;++n){if(r=f[n].val,0>u&&s===r)u=n-1;else if(u>-1&&s!==r){for(i=1+(n-1+u)/2;n>u;++u)c[f[u].idx]=i;u=-1}c[f[n].idx]=n+1,s=r}if(u>-1)for(i=1+(o-1+u)/2;o>u;++u)c[f[u].idx]=i;return c},f.cor=function(e,t,n){var r=n;n=r?e.map(a.$(n)):t,t=r?e.map(a.$(t)):e;var i=f.dot(t,n),o=f.mean(t),c=f.mean(n),u=f.stdev(t),s=f.stdev(n),d=e.length;return(i-d*o*c)/((d-1)*u*s)},f.cor.rank=function(e,t,n){var r,i,o,c=n?f.rank(e,a.$(t)):f.rank(e),u=n?f.rank(e,a.$(n)):f.rank(t),s=e.length;for(r=0,i=0;s>r;++r)o=c[r]-u[r],i+=o*o;return 1-6*i/(s*(s*s-1))},f.cor.dist=function(e,t,n){var r,i,o,c,u=n?e.map(a.$(t)):e,s=n?e.map(a.$(n)):t,d=f.dist.mat(u),l=f.dist.mat(s),b=d.length;for(r=0,i=0,o=0,c=0;b>r;++r)i+=d[r]*d[r],o+=l[r]*l[r],c+=d[r]*l[r];return Math.sqrt(c/Math.sqrt(i*o))},f.dist=function(e,t,n,r){var i,f,o=a.isFunction(n)||a.isString(n),c=e,u=o?e:t,s=o?r:n,d=2===s||null==s,l=e.length,b=0;for(o&&(t=a.$(t),n=a.$(n)),f=0;l>f;++f)i=o?t(c[f])-n(u[f]):c[f]-u[f],b+=d?i*i:Math.pow(Math.abs(i),s);return d?Math.sqrt(b):Math.pow(b,1/s)},f.dist.mat=function(e){var t,n,a,r=e.length,f=r*r,o=Array(f),c=i.zeros(r),u=0;for(n=0;r>n;++n)for(o[n*r+n]=0,a=n+1;r>a;++a)o[n*r+a]=t=Math.abs(e[n]-e[a]),o[a*r+n]=t,c[n]+=t,c[a]+=t;for(n=0;r>n;++n)u+=c[n],c[n]/=r;for(u/=f,n=0;r>n;++n)for(a=n;r>a;++a)o[n*r+a]+=u-c[n]-c[a],o[a*r+n]=o[n*r+a];return o},f.entropy=function(e,t){t=a.$(t);var n,r,i=0,f=0,o=e.length;for(n=0;o>n;++n)i+=t?t(e[n]):e[n];if(0===i)return 0;for(n=0;o>n;++n)r=(t?t(e[n]):e[n])/i,r&&(f+=r*Math.log(r));return-f/Math.LN2},f.mutual=function(e,t,n,r){var i,f,o,c=r?e.map(a.$(t)):e,u=r?e.map(a.$(n)):t,s=r?e.map(a.$(r)):n,d={},l={},b=s.length,h=0,m=0,g=0;for(o=0;b>o;++o)d[c[o]]=0,l[u[o]]=0;for(o=0;b>o;++o)d[c[o]]+=s[o],l[u[o]]+=s[o],h+=s[o];for(f=1/(h*Math.LN2),o=0;b>o;++o)0!==s[o]&&(i=h*s[o]/(d[c[o]]*l[u[o]]),m+=s[o]*f*Math.log(i),g+=s[o]*f*Math.log(s[o]/h));return[m,1+m/g]},f.mutual.info=function(e,t,n,a){return f.mutual(e,t,n,a)[0]},f.mutual.dist=function(e,t,n,a){return f.mutual(e,t,n,a)[1]},f.profile=function(e,t){var n,i,o,c,u,s=0,d=0,l=0,b=0,h=null,m=null,g=0,p=[],y={};for(o=0;ou)&&(h=u),(null===m||u>m)&&(m=u),n=u-s,s+=n/++d,g+=n*(u-s),p.push(u));return g/=d-1,i=Math.sqrt(g),p.sort(a.cmp),{type:r(e,t),unique:y,count:e.length,valid:d,missing:l,distinct:b,min:h,max:m,mean:s,stdev:i,median:c=f.quantile(p,.5),q1:f.quantile(p,.25),q3:f.quantile(p,.75),modeskew:0===i?0:(s-c)/i}},f.summary=function(e,t){t=t||a.keys(e[0]);var n=t.map(function(t){var n=f.profile(e,a.$(t));return n.field=t,n});return n.__summary__=!0,n},t.exports=f},{"./generate":33,"./import/type":34,"./util":37}],36:[function(e,t,n){function a(e){return u.setTime(+e),u}function r(e,t,n,a,r,i){var f={type:e,date:t,unit:n};return a?f.step=a:f.minstep=1,null!=r&&(f.min=r),null!=i&&(f.max=i),f}function i(e,t,n,a,i,f){return r(e,function(e){return t.offset(n,e)},function(e){return t.count(n,e)},a,i,f)}function f(e,t,n,a){var r,i,f,o=h[0];for(r=1,i=h.length;i>r;++r)if(o=h[r],t>o[0]){if(f=t/o[0],f>a)return e[h[r-1][1]];if(f>=n)return e[o[1]]}return e[h[i-1][1]]}function o(e){var t,n,a={};for(t=0,n=e.length;n>t;++t)a[e[t].type]=e[t];return a.find=function(t,n,a){return f(e,t,n,a)},a}var c=e("d3-time"),u=new Date,s=new Date(0,0,1).setFullYear(0),d=new Date(Date.UTC(0,0,1)).setUTCFullYear(0),l=[i("second",c.second,s),i("minute",c.minute,s),i("hour",c.hour,s),i("day",c.day,s,[1,7]),i("month",c.month,s,[1,3,6]),i("year",c.year,s),r("seconds",function(e){return new Date(1970,0,1,0,0,e)},function(e){return a(e).getSeconds()},null,0,59),r("minutes",function(e){return new Date(1970,0,1,0,e)},function(e){return a(e).getMinutes()},null,0,59),r("hours",function(e){return new Date(1970,0,1,e)},function(e){return a(e).getHours()},null,0,23),r("weekdays",function(e){return new Date(1970,0,4+e)},function(e){return a(e).getDay()},[1],0,6),r("dates",function(e){return new Date(1970,0,e)},function(e){return a(e).getDate()},[1],1,31),r("months",function(e){return new Date(1970,e%12,1)},function(e){return a(e).getMonth()},[1],0,11)],b=[i("second",c.utcSecond,d),i("minute",c.utcMinute,d),i("hour",c.utcHour,d),i("day",c.utcDay,d,[1,7]),i("month",c.utcMonth,d,[1,3,6]),i("year",c.utcYear,d),r("seconds",function(e){return new Date(Date.UTC(1970,0,1,0,0,e))},function(e){return a(e).getUTCSeconds()},null,0,59),r("minutes",function(e){return new Date(Date.UTC(1970,0,1,0,e))},function(e){return a(e).getUTCMinutes()},null,0,59),r("hours",function(e){return new Date(Date.UTC(1970,0,1,e))},function(e){return a(e).getUTCHours()},null,0,23),r("weekdays",function(e){return new Date(Date.UTC(1970,0,4+e))},function(e){return a(e).getUTCDay()},[1],0,6),r("dates",function(e){return new Date(Date.UTC(1970,0,e))},function(e){return a(e).getUTCDate()},[1],1,31),r("months",function(e){return new Date(Date.UTC(1970,e%12,1))},function(e){return a(e).getUTCMonth()},[1],0,11)],h=[[31536e6,5],[7776e6,4],[2592e6,4],[12096e5,3],[6048e5,3],[1728e5,3],[864e5,3],[432e5,2],[216e5,2],[108e5,2],[36e5,2],[18e5,1],[9e5,1],[3e5,1],[6e4,1],[3e4,0],[15e3,0],[5e3,0],[1e3,0]];t.exports=o(l),t.exports.utc=o(b)},{"d3-time":31}],37:[function(e,t,n){function a(e){return e.replace(l,"$1\\'")}function r(e,t){var n,a="";for(n=0;e>n;++n)a+=t;return a}function i(e,t,n){var a=0,r=e.split(b);return e=n?(r=r.reverse()).filter(function(e){return a+=e.length,t>=a}).reverse():r.filter(function(e){return a+=e.length,t>=a}),e.length?e.join("").trim():r[0].slice(0,t)}var f=e("buffer"),o=e("./time"),c=o.utc,u=t.exports={},s="__name__";u.namedfunc=function(e,t){return t[s]=e,t},u.name=function(e){return null==e?null:e[s]},u.identity=function(e){return e},u["true"]=u.namedfunc("true",function(){return!0}),u["false"]=u.namedfunc("false",function(){return!1}),u.duplicate=function(e){return JSON.parse(JSON.stringify(e))},u.equal=function(e,t){return JSON.stringify(e)===JSON.stringify(t)},u.extend=function(e){for(var t,n,a=1,r=arguments.length;r>a;++a){t=arguments[a];for(n in t)e[n]=t[n]}return e},u.length=function(e){return null!=e&&null!=e.length?e.length:null},u.keys=function(e){var t,n=[];for(t in e)n.push(t);return n},u.vals=function(e){var t,n=[];for(t in e)n.push(e[t]);return n},u.toMap=function(e,t){return(t=u.$(t))?e.reduce(function(e,n){return e[t(n)]=1,e},{}):e.reduce(function(e,t){return e[t]=1,e},{})},u.keystr=function(e){var t=e.length;if(!t)return"";for(var n=String(e[0]),a=1;t>a;++a)n+="|"+String(e[a]);return n};var d=Object.prototype.toString;u.isObject=function(e){return e===Object(e)},u.isFunction=function(e){return"[object Function]"===d.call(e)},u.isString=function(e){return"string"==typeof value||"[object String]"===d.call(e)},u.isArray=Array.isArray||function(e){return"[object Array]"===d.call(e)},u.isNumber=function(e){return"number"==typeof e||"[object Number]"===d.call(e)},u.isBoolean=function(e){return e===!0||e===!1||"[object Boolean]"==d.call(e)},u.isDate=function(e){return"[object Date]"===d.call(e)},u.isValid=function(e){return null!=e&&e===e},u.isBuffer=f.Buffer&&f.Buffer.isBuffer||u["false"],u.number=function(e){return null==e||""===e?null:+e},u["boolean"]=function(e){return null==e||""===e?null:"false"===e?!1:!!e},u.date=function(e){return null==e||""===e?null:Date.parse(e)},u.array=function(e){return null!=e?u.isArray(e)?e:[e]:[]},u.str=function(e){return u.isArray(e)?"["+e.map(u.str)+"]":u.isObject(e)?JSON.stringify(e):u.isString(e)?"'"+a(e)+"'":e};var l=/(^|[^\\])'/g;u.field=function(e){return String(e).split("\\.").map(function(e){return e.split(".")}).reduce(function(e,t){return e.length&&(e[e.length-1]+="."+t.shift()),e.push.apply(e,t),e},[])},u.accessor=function(e){var t;return null==e||u.isFunction(e)?e:u.namedfunc(e,(t=u.field(e)).length>1?function(e){return t.reduce(function(e,t){return e[t]},e)}:function(t){return t[e]})},u.$=u.accessor,u.mutator=function(e){var t;return u.isString(e)&&(t=u.field(e)).length>1?function(e,n){for(var a=0;ar;++r){if(f=e[r],o=f(n),c=f(a),c>o)return-1*t[r];if(o>c)return t[r]}return 0}},u.cmp=function(e,t){return t>e?-1:e>t?1:e>=t?0:null===e?-1:null===t?1:NaN},u.numcmp=function(e,t){return e-t},u.stablesort=function(e,t,n){var a=e.reduce(function(e,t,a){return e[n(t)]=a,e},{});return e.sort(function(e,r){var i=t(e),f=t(r);return f>i?-1:i>f?1:a[n(e)]-a[n(r)]}),e},u.pad=function(e,t,n,a){a=a||" ";var i=t-e.length;if(0>=i)return e;switch(n){case"left":return r(i,a)+e;case"middle":case"center":return r(Math.floor(i/2),a)+e+r(Math.ceil(i/2),a);default:return e+r(i,a)}},u.truncate=function(e,t,n,a,r){var f=e.length;if(t>=f)return e;r=void 0!==r?String(r):"…";var o=Math.max(0,t-r.length);switch(n){case"left":return r+(a?i(e,o,1):e.slice(f-o));case"middle":case"center":var c=Math.ceil(o/2),u=Math.floor(o/2);return(a?i(e,c):e.slice(0,c))+r+(a?i(e,u,1):e.slice(f-u));default:return(a?i(e,o):e.slice(0,o))+r}};var b=/([\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF])/},{"./time":36,buffer:1}]},{},[30])(30)}); -//# sourceMappingURL=vega-lite.min.js.map \ No newline at end of file +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.vl=e()}}(function(){var e;return function t(e,n,a){function r(f,o){if(!n[f]){if(!e[f]){var c="function"==typeof require&&require;if(!o&&c)return c(f,!0);if(i)return i(f,!0);var u=new Error("Cannot find module '"+f+"'");throw u.code="MODULE_NOT_FOUND",u}var s=n[f]={exports:{}};e[f][0].call(s.exports,function(t){var n=e[f][1][t];return r(n?n:t)},s,s.exports,t,e,n,a)}return n[f].exports}for(var i="function"==typeof require&&require,f=0;f180||-180>n?n-360*Math.round(n/360):n}function n(){}function a(e){var t;return e=(e+"").trim().toLowerCase(),(t=D.exec(e))?(t=parseInt(t[1],16),i(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t)):(t=N.exec(e))?r(parseInt(t[1],16)):(t=L.exec(e))?i(t[1],t[2],t[3]):(t=Y.exec(e))?i(2.55*t[1],2.55*t[2],2.55*t[3]):(t=A.exec(e))?c(t[1],.01*t[2],.01*t[3]):E.hasOwnProperty(e)?r(E[e]):null}function r(e){return i(e>>16&255,e>>8&255,255&e)}function i(e,t,r){return 1===arguments.length&&(e instanceof n||(e=a(e)),e?(e=e.rgb(),r=e.b,t=e.g,e=e.r):e=t=r=NaN),new f(e,t,r)}function f(e,t,n){this.r=+e,this.g=+t,this.b=+n}function o(e,t,n){return"#"+(isNaN(e)?"00":(e=Math.round(e))<16?"0"+Math.max(0,e).toString(16):Math.min(255,e).toString(16))+(isNaN(t)?"00":(t=Math.round(t))<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16))+(isNaN(n)?"00":(n=Math.round(n))<16?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16))}function c(e,t,r){if(1===arguments.length)if(e instanceof u)r=e.l,t=e.s,e=e.h;else if(e instanceof n||(e=a(e)),e){if(e instanceof u)return e;e=e.rgb();var i=e.r/255,f=e.g/255,o=e.b/255,c=Math.min(i,f,o),s=Math.max(i,f,o),d=s-c;r=(s+c)/2,d?(t=.5>r?d/(s+c):d/(2-s-c),e=i===s?(f-o)/d+6*(o>f):f===s?(o-i)/d+2:(i-f)/d+4,e*=60):(e=NaN,t=r>0&&1>r?0:e)}else e=t=r=NaN;return new u(e,t,r)}function u(e,t,n){this.h=+e,this.s=+t,this.l=+n}function s(e,t,n){return 255*(60>e?t+(n-t)*e/60:180>e?n:240>e?t+(n-t)*(240-e)/60:t)}function d(e,t,n){if(1===arguments.length)if(e instanceof l)n=e.b,t=e.a,e=e.l;else if(e instanceof y){var a=e.h*J;n=Math.sin(a)*e.c,t=Math.cos(a)*e.c,e=e.l}else{e instanceof f||(e=i(e));var r=m(e.r),o=m(e.g),n=m(e.b),c=b((.4124564*r+.3575761*o+.1804375*n)/_),u=b((.2126729*r+.7151522*o+.072175*n)/H),s=b((.0193339*r+.119192*o+.9503041*n)/W);n=200*(u-s),t=500*(c-u),e=116*u-16}return new l(e,t,n)}function l(e,t,n){this.l=+e,this.a=+t,this.b=+n}function b(e){return e>q?Math.pow(e,1/3):e/B+$}function h(e){return e>P?e*e*e:B*(e-$)}function g(e){return 255*(.0031308>=e?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function m(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function p(e,t,n){return 1===arguments.length&&(e instanceof y?(n=e.l,t=e.c,e=e.h):(e instanceof l||(e=d(e)),n=e.l,t=Math.sqrt(e.a*e.a+e.b*e.b),e=Math.atan2(e.b,e.a)*G,0>e&&(e+=360))),new y(e,t,n)}function y(e,t,n){this.h=+e,this.c=+t,this.l=+n}function v(e,t,n){if(1===arguments.length)if(e instanceof M)n=e.l,t=e.s,e=e.h;else{e instanceof f||(e=i(e));var a=e.r/255,r=e.g/255,o=e.b/255;n=(re*o+ne*a-ae*r)/(re+ne-ae);var c=o-n,u=(te*(r-n)-K*c)/ee;t=Math.sqrt(u*u+c*c)/(te*n*(1-n)),e=t?Math.atan2(u,c)*G-120:NaN,0>e&&(e+=360)}return new M(e,t,n)}function M(e,t,n){this.h=+e,this.s=+t,this.l=+n}function x(e){return function(n,a){n=v(n),a=v(a);var r=isNaN(n.h)?a.h:n.h,i=isNaN(n.s)?a.s:n.s,f=n.l,o=isNaN(a.h)?0:t(a.h,r),c=isNaN(a.s)?0:a.s-i,u=a.l-f;return function(t){return n.h=r+o*t,n.s=i+c*t,n.l=f+u*Math.pow(t,e),n+""}}}function S(e){return function(t,n){t=v(t),n=v(n);var a=isNaN(t.h)?n.h:t.h,r=isNaN(t.s)?n.s:t.s,i=t.l,f=isNaN(n.h)?0:n.h-a,o=isNaN(n.s)?0:n.s-r,c=n.l-i;return function(n){return t.h=a+f*n,t.s=r+o*n,t.l=i+c*Math.pow(n,e),t+""}}}function O(e,t){e=p(e),t=p(t);var n=isNaN(e.h)?t.h:e.h,a=isNaN(e.c)?t.c:e.c,r=e.l,i=isNaN(t.h)?0:t.h-n,f=isNaN(t.c)?0:t.c-a,o=t.l-r;return function(t){return e.h=n+i*t,e.c=a+f*t,e.l=r+o*t,e+""}}function w(e,n){e=p(e),n=p(n);var a=isNaN(e.h)?n.h:e.h,r=isNaN(e.c)?n.c:e.c,i=e.l,f=isNaN(n.h)?0:t(n.h,a),o=isNaN(n.c)?0:n.c-r,c=n.l-i;return function(t){return e.h=a+f*t,e.c=r+o*t,e.l=i+c*t,e+""}}function T(e,t){e=d(e),t=d(t);var n=e.l,a=e.a,r=e.b,i=t.l-n,f=t.a-a,o=t.b-r;return function(t){return e.l=n+i*t,e.a=a+f*t,e.b=r+o*t,e+""}}function k(e,t){e=c(e),t=c(t);var n=isNaN(e.h)?t.h:e.h,a=isNaN(e.s)?t.s:e.s,r=e.l,i=isNaN(t.h)?0:t.h-n,f=isNaN(t.s)?0:t.s-a,o=t.l-r;return function(t){return e.h=n+i*t,e.s=a+f*t,e.l=r+o*t,e+""}}function C(e,n){e=c(e),n=c(n);var a=isNaN(e.h)?n.h:e.h,r=isNaN(e.s)?n.s:e.s,i=e.l,f=isNaN(n.h)?0:t(n.h,a),o=isNaN(n.s)?0:n.s-r,u=n.l-i;return function(t){return e.h=a+f*t,e.s=r+o*t,e.l=i+u*t,e+""}}function R(e,t){e=i(e),t=i(t);var n=e.r,a=e.g,r=e.b,f=t.r-n,c=t.g-a,u=t.b-r;return function(e){return o(Math.round(n+f*e),Math.round(a+c*e),Math.round(r+u*e))}}var D=/^#([0-9a-f]{3})$/,N=/^#([0-9a-f]{6})$/,L=/^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/,Y=/^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/,A=/^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;a.prototype=n.prototype={displayable:function(){return this.rgb().displayable()},toString:function(){return this.rgb()+""}};var E={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},U=.7,X=1/U,j=i.prototype=f.prototype=new n;j.brighter=function(e){return e=null==e?X:Math.pow(X,e),new f(this.r*e,this.g*e,this.b*e)},j.darker=function(e){return e=null==e?U:Math.pow(U,e),new f(this.r*e,this.g*e,this.b*e)},j.rgb=function(){return this},j.displayable=function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255},j.toString=function(){return o(this.r,this.g,this.b)};var z=c.prototype=u.prototype=new n;z.brighter=function(e){return e=null==e?X:Math.pow(X,e),new u(this.h,this.s,this.l*e)},z.darker=function(e){return e=null==e?U:Math.pow(U,e),new u(this.h,this.s,this.l*e)},z.rgb=function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,a=n+(.5>n?n:1-n)*t,r=2*n-a;return new f(s(e>=240?e-240:e+120,r,a),s(e,r,a),s(120>e?e+240:e-120,r,a))},z.displayable=function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1};var F=18,_=.95047,H=1,W=1.08883,$=4/29,P=6/29,B=3*P*P,q=P*P*P,I=d.prototype=l.prototype=new n;I.brighter=function(e){return new l(this.l+F*(null==e?1:e),this.a,this.b)},I.darker=function(e){return new l(this.l-F*(null==e?1:e),this.a,this.b)},I.rgb=function(){var e=(this.l+16)/116,t=isNaN(this.a)?e:e+this.a/500,n=isNaN(this.b)?e:e-this.b/200;return e=H*h(e),t=_*h(t),n=W*h(n),new f(g(3.2404542*t-1.5371385*e-.4985314*n),g(-.969266*t+1.8760108*e+.041556*n),g(.0556434*t-.2040259*e+1.0572252*n))};var J=Math.PI/180,G=180/Math.PI,Z=p.prototype=y.prototype=new n;Z.brighter=function(e){return new y(this.h,this.c,this.l+F*(null==e?1:e))},Z.darker=function(e){return new y(this.h,this.c,this.l-F*(null==e?1:e))},Z.rgb=function(){return d(this).rgb()};var Q=-.14861,V=1.78277,K=-.29227,ee=-.90649,te=1.97294,ne=te*ee,ae=te*V,re=V*K-ee*Q,ie=v.prototype=M.prototype=new n;ie.brighter=function(e){return e=null==e?X:Math.pow(X,e),new M(this.h,this.s,this.l*e)},ie.darker=function(e){return e=null==e?U:Math.pow(U,e),new M(this.h,this.s,this.l*e)},ie.rgb=function(){var e=isNaN(this.h)?0:(this.h+120)*J,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),a=Math.cos(e),r=Math.sin(e);return new f(255*(t+n*(Q*a+V*r)),255*(t+n*(K*a+ee*r)),255*(t+n*(te*a)))};var fe=x(1),oe=S(1);e.interpolateCubehelix=fe,e.interpolateCubehelixLong=oe,e.color=a,e.rgb=i,e.hsl=c,e.lab=d,e.hcl=p,e.cubehelix=v,e.interpolateRgb=R,e.interpolateHsl=C,e.interpolateHslLong=k,e.interpolateLab=T,e.interpolateHcl=w,e.interpolateHclLong=O,e.interpolateCubehelixGamma=x,e.interpolateCubehelixGammaLong=S})},{}],5:[function(t,n,a){"undefined"==typeof Map?(Map=function(){this.clear()},Map.prototype={set:function(e,t){return this._[e]=t,this},get:function(e){return this._[e]},has:function(e){return e in this._},"delete":function(e){return e in this._&&delete this._[e]},clear:function(){this._=Object.create(null)},get size(){var e=0;for(var t in this._)++e;return e},forEach:function(e){for(var t in this._)e(this._[t],t,this)}}):function(){var e=new Map;e.set(0,0)!==e&&(e=e.set,Map.prototype.set=function(){return e.apply(this,arguments),this})}(),function(t,r){"object"==typeof a&&"undefined"!=typeof n?r(a):"function"==typeof e&&e.amd?e(["exports"],r):r(t.format={})}(this,function(e){"use strict";function t(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,a=e.slice(0,n);return[a.length>1?a[0]+a.slice(2):a,+e.slice(n+1)]}function n(e){return e=t(Math.abs(e)),e?e[1]:NaN}function a(e,n){var a=t(e,n);if(!a)return e+"";var r=a[0],i=a[1],f=i-(g=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return f===o?r:f>o?r+new Array(f-o+1).join("0"):f>0?r.slice(0,f)+"."+r.slice(f):"0."+new Array(1-f).join("0")+t(e,n+f-1)[0]}function r(e,n){var a=t(e,n);if(!a)return e+"";var r=a[0],i=a[1];return 0>i?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}function i(e,t){e=e.toPrecision(t);e:for(var n,a=e.length,r=1,i=-1;a>r;++r)switch(e[r]){case".":i=n=r;break;case"0":0===i&&(i=r),n=r;break;case"e":break e;default:i>0&&(i=0)}return i>0?e.slice(0,i)+e.slice(n+1):e}function f(e){return new o(e)}function o(e){if(!(t=U.exec(e)))throw new Error("invalid format: "+e);var t,n=t[1]||" ",a=t[2]||">",r=t[3]||"-",i=t[4]||"",f=!!t[5],o=t[6]&&+t[6],c=!!t[7],u=t[8]&&+t[8].slice(1),s=t[9]||"";"n"===s?(c=!0,s="g"):E[s]||(s=""),(f||"0"===n&&"="===a)&&(f=!0,n="0",a="="),this.fill=n,this.align=a,this.sign=r,this.symbol=i,this.zero=f,this.width=o,this.comma=c,this.precision=u,this.type=s}function c(e,t){return function(n,a){for(var r=n.length,i=[],f=0,o=e[0],c=0;r>0&&o>0&&(c+o+1>a&&(o=Math.max(1,a-c)),i.push(n.substring(r-=o,r+o)),!((c+=o+1)>a));)o=e[f=(f+1)%e.length];return i.reverse().join(t)}}function u(e){return e}function s(e){function t(e){e=f(e);var t=e.fill,n=e.align,a=e.sign,c=e.symbol,u=e.zero,s=e.width,d=e.comma,l=e.precision,b=e.type,h="$"===c?i[0]:"#"===c&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",m="$"===c?i[1]:/[%p]/.test(b)?"%":"",p=E[b],y=!b||/[defgprs%]/.test(b);return l=null==l?b?6:12:/[gprs]/.test(b)?Math.max(1,Math.min(21,l)):Math.max(0,Math.min(20,l)),function(e){var i=h,f=m;if("c"===b)f=p(e)+f,e="";else{e=+e;var c=(0>e||0>1/e)&&(e*=-1,!0);if(e=p(e,l),i=(c?"("===a?a:"-":"-"===a||"("===a?"":a)+i, +f=f+("s"===b?X[8+g/3]:"")+(c&&"("===a?")":""),y)for(var v,M=-1,x=e.length;++Mv||v>57){f=(46===v?o+e.slice(M+1):e.slice(M))+f,e=e.slice(0,M);break}}d&&!u&&(e=r(e,1/0));var S=i.length+e.length+f.length,O=s>S?new Array(s-S+1).join(t):"";switch(d&&u&&(e=r(O+e,O.length?s-f.length:1/0),O=""),n){case"<":return i+e+f+O;case"=":return i+O+e+f;case"^":return O.slice(0,S=O.length>>1)+i+e+f+O.slice(S)}return O+i+e+f}}function a(e,a){var r=t((e=f(e),e.type="f",e)),i=3*Math.max(-8,Math.min(8,Math.floor(n(a)/3))),o=Math.pow(10,-i),c=X[8+i/3];return function(e){return r(o*e)+c}}var r=e.grouping&&e.thousands?c(e.grouping,e.thousands):u,i=e.currency,o=e.decimal;return{format:t,formatPrefix:a}}function d(e,t){return Math.max(0,n(Math.abs(t))-n(Math.abs(e)))+1}function l(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(n(t)/3)))-n(Math.abs(e)))}function b(e){return Math.max(0,-n(Math.abs(e)))}function h(e){return"string"!=typeof e||(e=j.get(e))?s(e):null}var g,m={decimal:".",thousands:",",grouping:[3],currency:["¥",""]},p={decimal:",",thousands:" ",grouping:[3],currency:[""," руб."]},y={decimal:",",thousands:".",grouping:[3],currency:["R$",""]},v={decimal:",",thousands:".",grouping:[3],currency:["","zł"]},M={decimal:",",thousands:".",grouping:[3],currency:["€ ",""]},x={decimal:",",thousands:".",grouping:[3],currency:[""," ден."]},S={decimal:".",thousands:",",grouping:[3],currency:["","円"]},O={decimal:",",thousands:".",grouping:[3],currency:["€",""]},w={decimal:".",thousands:",",grouping:[3],currency:["₪",""]},T={decimal:",",thousands:".",grouping:[3],currency:[""," €"]},k={decimal:",",thousands:" ",grouping:[3],currency:["","$"]},C={decimal:",",thousands:" ",grouping:[3],currency:[""," €"]},R={decimal:",",thousands:".",grouping:[3],currency:[""," €"]},D={decimal:".",thousands:",",grouping:[3],currency:["$",""]},N={decimal:".",thousands:",",grouping:[3],currency:["£",""]},L={decimal:".",thousands:",",grouping:[3],currency:["$",""]},Y={decimal:",",thousands:".",grouping:[3],currency:[""," €"]},A={decimal:",",thousands:".",grouping:[3],currency:[""," €"]},E={"":i,"%":function(e,t){return(100*e).toFixed(t)},b:function(e){return Math.round(e).toString(2)},c:function(e){return e+""},d:function(e){return Math.round(e).toString(10)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},g:function(e,t){return e.toPrecision(t)},o:function(e){return Math.round(e).toString(8)},p:function(e,t){return r(100*e,t)},r:r,s:a,X:function(e){return Math.round(e).toString(16).toUpperCase()},x:function(e){return Math.round(e).toString(16)}},U=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;o.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var X=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],j=(new Map).set("ca-ES",A).set("de-DE",Y).set("en-CA",L).set("en-GB",N).set("en-US",D).set("es-ES",R).set("fi-FI",C).set("fr-CA",k).set("fr-FR",T).set("he-IL",w).set("it-IT",O).set("ja-JP",S).set("mk-MK",x).set("nl-NL",M).set("pl-PL",v).set("pt-BR",y).set("ru-RU",p).set("zh-CN",m),z=s(D);e.format=z.format,e.formatPrefix=z.formatPrefix,e.localeFormat=h,e.formatSpecifier=f,e.precisionFixed=b,e.precisionPrefix=l,e.precisionRound=d})},{}],6:[function(t,n,a){"undefined"==typeof Map?(Map=function(){this.clear()},Map.prototype={set:function(e,t){return this._[e]=t,this},get:function(e){return this._[e]},has:function(e){return e in this._},"delete":function(e){return e in this._&&delete this._[e]},clear:function(){this._=Object.create(null)},get size(){var e=0;for(var t in this._)++e;return e},forEach:function(e){for(var t in this._)e(this._[t],t,this)}}):function(){var e=new Map;e.set(0,0)!==e&&(e=e.set,Map.prototype.set=function(){return e.apply(this,arguments),this})}(),function(t,r){"object"==typeof a&&"undefined"!=typeof n?r(a):"function"==typeof e&&e.amd?e(["exports"],r):r(t.timeFormat={})}(this,function(e){"use strict";function t(e,n,a){function r(t){return e(t=new Date(+t)),t}return r.floor=r,r.round=function(t){var a=new Date(+t),r=new Date(t-1);return e(a),e(r),n(r,1),r-t>t-a?a:r},r.ceil=function(t){return e(t=new Date(t-1)),n(t,1),t},r.offset=function(e,t){return n(e=new Date(+e),null==t?1:Math.floor(t)),e},r.range=function(t,a,r){var i=[];if(t=new Date(t-1),a=new Date(+a),r=null==r?1:Math.floor(r),!(a>t&&r>0))return i;for(n(t,1),e(t),a>t&&i.push(new Date(+t));n(t,r),e(t),a>t;)i.push(new Date(+t));return i},r.filter=function(a){return t(function(t){for(;e(t),!a(t);)t.setTime(t-1)},function(e,t){for(;--t>=0;)for(;n(e,1),!a(e););})},a&&(r.count=function(t,n){return Me.setTime(+t),xe.setTime(+n),e(Me),e(xe),Math.floor(a(Me,xe))}),r}function n(e){return t(function(t){t.setHours(0,0,0,0),t.setDate(t.getDate()-(t.getDay()+7-e)%7)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/6048e5})}function a(e){return t(function(t){t.setUTCHours(0,0,0,0),t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/6048e5})}function r(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function i(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function f(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}function o(e){function t(e,t){return function(n){for(var a,r,i,f=[],o=-1,c=0,u=e.length;++of;){if(a>=c)return-1;if(r=t.charCodeAt(f++),37===r){if(r=t.charAt(f++),i=Xe[r in Ne?t.charAt(f++):r],!i||(a=i(e,n,a))<0)return-1}else if(r!=n.charCodeAt(a++))return-1}return a}function o(e,t,n){var a=Ce.exec(t.slice(n));return a?(e.w=Re.get(a[0].toLowerCase()),n+a[0].length):-1}function c(e,t,n){var a=Te.exec(t.slice(n));return a?(e.w=ke.get(a[0].toLowerCase()),n+a[0].length):-1}function u(e,t,n){var a=Ye.exec(t.slice(n));return a?(e.m=Ae.get(a[0].toLowerCase()),n+a[0].length):-1}function te(e,t,n){var a=De.exec(t.slice(n));return a?(e.m=Le.get(a[0].toLowerCase()),n+a[0].length):-1}function ne(e,t,n){return a(e,me,t,n)}function ae(e,t,n){return a(e,pe,t,n)}function re(e,t,n){return a(e,ye,t,n)}function ie(e,t,n){var a=we.get(t.slice(n,n+=2).toLowerCase());return null==a?-1:(e.p=a,n)}function fe(e){return xe[e.getDay()]}function oe(e){return Me[e.getDay()]}function ce(e){return Oe[e.getMonth()]}function ue(e){return Se[e.getMonth()]}function se(e){return ve[+(e.getHours()>=12)]}function de(e){return xe[e.getUTCDay()]}function le(e){return Me[e.getUTCDay()]}function be(e){return Oe[e.getUTCMonth()]}function he(e){return Se[e.getUTCMonth()]}function ge(e){return ve[+(e.getUTCHours()>=12)]}var me=e.dateTime,pe=e.date,ye=e.time,ve=e.periods,Me=e.days,xe=e.shortDays,Se=e.months,Oe=e.shortMonths,we=d(ve),Te=s(Me),ke=d(Me),Ce=s(xe),Re=d(xe),De=s(Se),Le=d(Se),Ye=s(Oe),Ae=d(Oe),Ee={a:fe,A:oe,b:ce,B:ue,c:null,d:k,e:k,H:C,I:R,j:D,L:N,m:L,M:Y,p:se,S:A,U:E,w:U,W:X,x:null,X:null,y:j,Y:z,Z:F,"%":ee},Ue={a:de,A:le,b:be,B:he,c:null,d:_,e:_,H:H,I:W,j:$,L:P,m:B,M:q,p:ge,S:I,U:J,w:G,W:Z,x:null,X:null,y:Q,Y:V,Z:K,"%":ee},Xe={a:o,A:c,b:u,B:te,c:ne,d:v,e:v,H:x,I:x,j:M,L:w,m:y,M:S,p:ie,S:O,U:b,w:l,W:h,x:ae,X:re,y:m,Y:g,Z:p,"%":T};return Ee.x=t(pe,Ee),Ee.X=t(ye,Ee),Ee.c=t(me,Ee),Ue.x=t(pe,Ue),Ue.X=t(ye,Ue),Ue.c=t(me,Ue),{format:function(e){var a=t(e+="",Ee);return a.parse=n(e,r),a.toString=function(){return e},a},utcFormat:function(e){var a=t(e+="",Ue);return a.parse=n(e,i),a.toString=function(){return e},a}}}function c(e,t,n){var a=0>e?"-":"",r=(a?-e:e)+"",i=r.length;return a+(n>i?new Array(n-i+1).join(t)+r:r)}function u(e){return e.replace(Ae,"\\$&")}function s(e){return new RegExp("^(?:"+e.map(u).join("|")+")","i")}function d(e){for(var t=new Map,n=-1,a=e.length;++n68?1900:2e3),n+a[0].length):-1}function p(e,t,n){return/^[+-]\d{4}$/.test(t=t.slice(n,n+5))?(e.Z=-t,n+5):-1}function y(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.m=a[0]-1,n+a[0].length):-1}function v(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.d=+a[0],n+a[0].length):-1}function M(e,t,n){var a=Le.exec(t.slice(n,n+3));return a?(e.m=0,e.d=+a[0],n+a[0].length):-1}function x(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.H=+a[0],n+a[0].length):-1}function S(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.M=+a[0],n+a[0].length):-1}function O(e,t,n){var a=Le.exec(t.slice(n,n+2));return a?(e.S=+a[0],n+a[0].length):-1}function w(e,t,n){var a=Le.exec(t.slice(n,n+3));return a?(e.L=+a[0],n+a[0].length):-1}function T(e,t,n){var a=Ye.exec(t.slice(n,n+1));return a?n+a[0].length:-1}function k(e,t){return c(e.getDate(),t,2)}function C(e,t){return c(e.getHours(),t,2)}function R(e,t){return c(e.getHours()%12||12,t,2)}function D(e,t){return c(1+Se.count(Te(e),e),t,3)}function N(e,t){return c(e.getMilliseconds(),t,3)}function L(e,t){return c(e.getMonth()+1,t,2)}function Y(e,t){return c(e.getMinutes(),t,2)}function A(e,t){return c(e.getSeconds(),t,2)}function E(e,t){return c(Oe.count(Te(e),e),t,2)}function U(e){return e.getDay()}function X(e,t){return c(we.count(Te(e),e),t,2)}function j(e,t){return c(e.getFullYear()%100,t,2)}function z(e,t){return c(e.getFullYear()%1e4,t,4)}function F(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+c(t/60|0,"0",2)+c(t%60,"0",2)}function _(e,t){return c(e.getUTCDate(),t,2)}function H(e,t){return c(e.getUTCHours(),t,2)}function W(e,t){return c(e.getUTCHours()%12||12,t,2)}function $(e,t){return c(1+ke.count(De(e),e),t,3)}function P(e,t){return c(e.getUTCMilliseconds(),t,3)}function B(e,t){return c(e.getUTCMonth()+1,t,2)}function q(e,t){return c(e.getUTCMinutes(),t,2)}function I(e,t){return c(e.getUTCSeconds(),t,2)}function J(e,t){return c(Ce.count(De(e),e),t,2)}function G(e){return e.getUTCDay()}function Z(e,t){return c(Re.count(De(e),e),t,2)}function Q(e,t){return c(e.getUTCFullYear()%100,t,2)}function V(e,t){return c(e.getUTCFullYear()%1e4,t,4)}function K(){return"+0000"}function ee(){return"%"}function te(e){return e.toISOString()}function ne(e){return"string"!=typeof e||(e=je.get(e))?o(e):null}var ae={dateTime:"%a %b %e %X %Y",date:"%Y/%-m/%-d",time:"%H:%M:%S",periods:["上午","下午"],days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],shortDays:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],shortMonths:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},re={dateTime:"%A, %e %B %Y г. %X",date:"%d.%m.%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],shortDays:["вс","пн","вт","ср","чт","пт","сб"],months:["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],shortMonths:["янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек"]},ie={dateTime:"%A, %e de %B de %Y. %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],shortDays:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],shortMonths:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"]},fe={dateTime:"%A, %e %B %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],shortDays:["Niedz.","Pon.","Wt.","Śr.","Czw.","Pt.","Sob."],months:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],shortMonths:["Stycz.","Luty","Marz.","Kwie.","Maj","Czerw.","Lipc.","Sierp.","Wrz.","Paźdz.","Listop.","Grudz."]},oe={dateTime:"%a %e %B %Y %T",date:"%d-%m-%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],shortDays:["zo","ma","di","wo","do","vr","za"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],shortMonths:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"]},ce={dateTime:"%A, %e %B %Y г. %X",date:"%d.%m.%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["недела","понеделник","вторник","среда","четврток","петок","сабота"],shortDays:["нед","пон","вто","сре","чет","пет","саб"],months:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],shortMonths:["јан","фев","мар","апр","мај","јун","јул","авг","сеп","окт","ное","дек"]},ue={dateTime:"%A %e %B %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],shortDays:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],shortMonths:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"]},se={dateTime:"%A, %e ב%B %Y %X",date:"%d.%m.%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],shortDays:["א׳","ב׳","ג׳","ד׳","ה׳","ו׳","ש׳"],months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],shortMonths:["ינו׳","פבר׳","מרץ","אפר׳","מאי","יוני","יולי","אוג׳","ספט׳","אוק׳","נוב׳","דצמ׳"]},de={dateTime:"%A, le %e %B %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],shortDays:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],shortMonths:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."]},le={dateTime:"%a %e %b %Y %X",date:"%Y-%m-%d",time:"%H:%M:%S",periods:["",""],days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],shortDays:["dim","lun","mar","mer","jeu","ven","sam"],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],shortMonths:["jan","fév","mar","avr","mai","jui","jul","aoû","sep","oct","nov","déc"]},be={dateTime:"%A, %-d. %Bta %Y klo %X",date:"%-d.%-m.%Y",time:"%H:%M:%S",periods:["a.m.","p.m."],days:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],shortDays:["Su","Ma","Ti","Ke","To","Pe","La"],months:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],shortMonths:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"]},he={dateTime:"%A, %e de %B de %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],shortDays:["dom","lun","mar","mié","jue","vie","sáb"],months:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],shortMonths:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"]},ge={dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},me={dateTime:"%a %e %b %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},pe={dateTime:"%a %b %e %X %Y",date:"%Y-%m-%d",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},ye={dateTime:"%A, der %e. %B %Y, %X",date:"%d.%m.%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],shortDays:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],shortMonths:["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"]},ve={dateTime:"%A, %e de %B de %Y, %X",date:"%d/%m/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],shortDays:["dg.","dl.","dt.","dc.","dj.","dv.","ds."],months:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],shortMonths:["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."]},Me=new Date,xe=new Date,Se=t(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5}),Oe=n(0),we=n(1),Te=t(function(e){e.setHours(0,0,0,0),e.setMonth(0,1)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()}),ke=t(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5}),Ce=a(0),Re=a(1),De=t(function(e){e.setUTCHours(0,0,0,0),e.setUTCMonth(0,1)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()}),Ne={"-":"",_:" ",0:"0"},Le=/^\s*\d+/,Ye=/^%/,Ae=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,Ee="%Y-%m-%dT%H:%M:%S.%LZ";te.parse=function(e){var t=new Date(e);return isNaN(t)?null:t},te.toString=function(){return Ee};var Ue=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?te:ge.utcFormat(Ee),Xe=Ue,je=(new Map).set("ca-ES",ve).set("de-DE",ye).set("en-CA",pe).set("en-GB",me).set("en-US",ge).set("es-ES",he).set("fi-FI",be).set("fr-CA",le).set("fr-FR",de).set("he-IL",se).set("it-IT",ue).set("mk-MK",ce).set("nl-NL",oe).set("pl-PL",fe).set("pt-BR",ie).set("ru-RU",re).set("zh-CN",ae),ze=o(ge);e.format=ze.format,e.utcFormat=ze.utcFormat,e.localeFormat=ne,e.isoFormat=Xe})},{}],7:[function(e,t,n){"use strict";e("./globals");var a=e("./consts"),r=e("./util"),i=e("./field"),f=e("./enc"),o=e("./schema/schema");t.exports=function(){function e(e,t){var n=o.instantiate(),a=o.util.merge(n,t||{},e);this._data=a.data,this._marktype=a.marktype,this._enc=a.encoding,this._config=a.config,this._filter=a.filter}var t=e.prototype;return e.fromShorthand=function(t,n,r,i){var o=a.shorthand,c=t.split(o.delim),u=c.shift().split(o.assign)[1].trim(),s=f.fromShorthand(c);return new e({data:n,marktype:u,encoding:s,config:r,filter:[]},i)},e.fromSpec=function(t,n){return new e(t,n)},t.toShorthand=function(){var e=a.shorthand;return"mark"+e.assign+this._marktype+e.delim+f.shorthand(this._enc)},e.shorthand=function(e){var t=a.shorthand;return"mark"+t.assign+e.marktype+t.delim+f.shorthand(e.encoding)},e.specFromShorthand=function(t,n,a,r){return e.fromShorthand(t,n,a).toSpec(r)},t.toSpec=function(e,t){var n,a=r.duplicate(this._enc);n={marktype:this._marktype,encoding:a,filter:this._filter},e||(n.config=r.duplicate(this._config)),t||(n.data=r.duplicate(this._data));var i=o.instantiate();return o.util.subtract(n,i)},t.marktype=function(){return this._marktype},t.is=function(e){return this._marktype===e},t.has=function(e){return void 0!==this._enc[e].name},t.field=function(e){return this._enc[e]},t.filter=function(){var e=[],t=this.fields(),n=this;return r.forEach(t,function(t,a){"*"!==a&&(n.config("filterNull").Q&&t.containsType[Q]||n.config("filterNull").T&&t.containsType[T]||n.config("filterNull").O&&t.containsType[O]||n.config("filterNull").N&&t.containsType[N])&&e.push({operands:[a],operator:"notNull"})}),e.concat(this._filter)},t.fieldRef=function(e,t){return t=t||{},t.data=!this._vega2&&t.data!==!1,i.fieldRef(this._enc[e],t)},t.fieldName=function(e){return this._enc[e].name},t.fields=function(){return f.fields(this._enc)},t.fieldTitle=function(e){if(i.isCount(this._enc[e]))return i.count.displayName;var t=this._enc[e].aggregate||this._enc[e].timeUnit||this._enc[e].bin&&"bin";if(t){var n="avg"===t?"MEAN":t.toUpperCase();return n+"("+this._enc[e].name+")"}return this._enc[e].name},t.scale=function(e){return this._enc[e].scale||{}},t.axis=function(e){return this._enc[e].axis||{}},t.bandSize=function(e,t){return t=t||e===Y&&this.has(ROW)&&this.has(Y)||e===X&&this.has(COL)&&this.has(X),this.field(e).band.size||this.config(t?"smallBandSize":"largeBandSize")},t.aggregate=function(e){return this._enc[e].aggregate},t.bin=function(e){var t=this._enc[e].bin;return t==={}?!1:t===!0?{maxbins:o.MAXBINS_DEFAULT}:t},t.value=function(e){return this._enc[e].value},t.numberFormat=function(e){var t=e.max>this.config("maxSmallNumber")?"largeNumberFormat":"smallNumberFormat";return this.config(t)},t.sort=function(t,n){var a=this._enc[t].sort,r=this._enc,f=i.isTypes;if((!a||0===a.length)&&e.toggleSort.support({encoding:this._enc},n,!0)&&this.config("toggleSort")===Q){var o=f(r.x,[N,O])?r.y:r.x;f(r[t],[N,O])&&(a=[{name:o.name,aggregate:o.aggregate,type:o.type,reverse:!0}])}return a},t.map=function(e){return f.map(this._enc,e)},t.reduce=function(e,t){return f.reduce(this._enc,e,t)},t.forEach=function(e){return f.forEach(this._enc,e)},t.type=function(e){return this.has(e)?this._enc[e].type:null},t.isType=function(e,t){var n=this.field(e);return n&&i.isType(n,t)},t.isTypes=function(e,t){var n=this.field(e);return n&&i.isTypes(n,t)},e.isOrdinalScale=function(e,t){return i.isOrdinalScale(e.field(t))},e.isDimension=function(e,t){return i.isDimension(e.field(t))},e.isMeasure=function(e,t){return i.isMeasure(e.field(t))},t.isOrdinalScale=function(t){return this.has(t)&&e.isOrdinalScale(this,t)},t.isDimension=function(t){return this.has(t)&&e.isDimension(this,t)},t.isMeasure=function(t){return this.has(t)&&e.isMeasure(this,t)},t.isAggregate=function(){return f.isAggregate(this._enc)},t.dataTable=function(){return this.isAggregate()?AGGREGATE:RAW},e.isAggregate=function(e){return f.isAggregate(e.encoding)},e.alwaysNoOcclusion=function(e){return f.isAggregate(e.encoding)},e.isStack=function(e){return("bar"===e.marktype||"area"===e.marktype)&&e.encoding.color},t.isStack=function(){return(this.is("bar")||this.is("area"))&&this.has("color")},t.details=function(){var e=this;return this.reduce(function(t,n,a){return n.aggregate||a===X||a===Y||t.push(e.fieldRef(a)),t},[])},t.facets=function(){var e=this;return this.reduce(function(t,n,a){return n.aggregate||a!=ROW&&a!=COL||t.push(e.fieldRef(a)),t},[])},t.cardinality=function(e,t){return i.cardinality(this.field(e),t,this.config("filterNull"))},t.isRaw=function(){return!this.isAggregate()},t.data=function(){return this._data},t.hasValues=function(){var e=this.data().values;return e&&e.length},t.config=function(e){return this._config[e]},e.transpose=function(e){var t=e.encoding,n=r.duplicate(e.encoding);return n.x=t.y,n.y=t.x,n.row=t.col,n.col=t.row,e.encoding=n,e},e.toggleSort=function(e){return e.config=e.config||{},e.config.toggleSort=e.config.toggleSort===Q?N:Q,e},e.toggleSort.direction=function(t){if(e.toggleSort.support(t)){var n=t.encoding;return n.x.type===N?"x":"y"}},e.toggleSort.mode=function(e){return e.config.toggleSort},e.toggleSort.support=function(t,n){var a=t.encoding,r=i.isTypes;return!f.has(a,ROW)&&!f.has(a,COL)&&f.has(a,X)&&f.has(a,Y)&&e.alwaysNoOcclusion(t,n)?r(a.x,[N,O])&&i.isMeasure(a.y)?"x":r(a.y,[N,O])&&i.isMeasure(a.x)?"y":!1:!1},e.toggleFilterNullO=function(e){return e.config=e.config||{},e.config.filterNull=e.config.filterNull||{T:!0,Q:!0},e.config.filterNull.O=!e.config.filterNull.O,e},e.toggleFilterNullO.support=function(e,t){var n=f.fields(e.encoding);for(var a in n){var r=n[a];if(r.containsType.O&&a in t&&t[a].nulls>0)return!0}return!1},e}()},{"./consts":21,"./enc":23,"./field":24,"./globals":25,"./schema/schema":27,"./util":29}],8:[function(e,t,n){"use strict";e("../globals");var a=e("../util"),r=a.setter,i=a.getter,f=e("./time"),o=t.exports={};o.def=function(e,t,n,a,r){var f=e==COL,c=e==ROW,u=f?"x":c?"y":e,s={type:u,scale:e,properties:{},layer:t.field(e).axis.layer,orient:o.orient(e,t,a)};return s=o.labels.scale(s,t,e),s=o.labels.format(s,e,t,a),s=o.labels.angle(s,t,e),e==X&&(!t.isDimension(X)&&!t.isType(X,T)||"angle"in i(s,["properties","labels"])?s.ticks=t.field(e).axis.ticks:s=o.labels.rotate(s)),s.titleOffset=o.titleOffset(t,n,e),c&&(s.offset=o.titleOffset(t,n,Y)+20),s=o.grid(s,e,t,n),s=o.title(s,e,t,n,r),(c||f)&&(s=o.hideTicks(s)),s},o.orient=function(e,t,n){var a=t.field(e).axis.orient;return a?a:e===COL?"top":e===X&&t.has(Y)&&t.isOrdinalScale(Y)&&t.cardinality(Y,n)>30?"top":void 0},o.grid=function(e,t,n,a){var r=a.cellPadding,i=t==COL,f=t==ROW;return n.axis(t).grid&&(e.grid=!0,i?e.properties.grid={x:{offset:a.cellWidth*(1+r/2),scale:"col"},y:{value:-a.cellHeight*(r/2)},stroke:{value:n.config("cellGridColor")},opacity:{value:n.config("cellGridOpacity")}}:f?e.properties.grid={y:{offset:-a.cellHeight*(r/2),scale:"row"},x:{value:e.offset},x2:{offset:e.offset+.05*a.cellWidth,group:"mark.group.width",mult:1},stroke:{value:n.config("cellGridColor")},opacity:{value:n.config("cellGridOpacity")}}:e.properties.grid={stroke:{value:n.config("gridColor")},opacity:{value:n.config("gridOpacity")}}),e},o.hideTicks=function(e){return e.properties.ticks={opacity:{value:0}},e.properties.majorTicks={opacity:{value:0}},e.properties.axis={opacity:{value:0}},e},o.title=function(e,t,n,r){var i=n.field(t).axis;if(i.title)e.title=i.title;else{var f,o=n.fieldTitle(t);i.titleMaxLength?f=i.titleMaxLength:t===X?f=r.cellWidth/n.config("characterWidth"):t===Y&&(f=r.cellHeight/n.config("characterWidth")),e.title=f?a.truncate(o,f):o}return t===ROW&&(e.properties.title={angle:{value:0},align:{value:"right"},baseline:{value:"middle"},dy:{value:-r.height/2-20}}),e},o.labels={},o.labels.scale=function(e,t,n){var a=t.field(n).timeUnit;return t.isType(n,T)&&a&&f.hasScale(a)&&r(e,["properties","labels","text","scale"],"time-"+a),e},o.labels.format=function(e,t,n,a){var i=a[n.field(t).name];if(n.axis(t).format)e.format=n.axis(t).format;else if(n.isType(t,Q)||"number"===i.type)e.format=n.numberFormat(i);else if(n.isType(t,T)){var f=n.field(t).timeUnit;f?"year"===f&&(e.format="d"):e.format=n.config("timeFormat")}else n.isTypes(t,[N,O])&&n.axis(t).maxLabelLength&&r(e,["properties","labels","text","template"],"{{data | truncate:"+n.axis(t).maxLabelLength+"}}");return e},o.labels.angle=function(e,t,n){var a=t.axis(n).labelAngle;return"undefined"==typeof a?e:(r(e,["properties","labels","angle","value"],a),e)},o.labels.rotate=function(e){var t="top"===e.orient?"left":"right";return r(e,["properties","labels","angle","value"],270),r(e,["properties","labels","align","value"],t),r(e,["properties","labels","baseline","value"],"middle"),e},o.titleOffset=function(e,t,n){var a=e.axis(n).titleOffset;if(a)return a;switch(n){case ROW:return 0;case COL:return 35}return i(t,[n,"axisTitleOffset"])}},{"../globals":25,"../util":29,"./time":20}],9:[function(e,t,n){"use strict";var a=t.exports=e("datalib/src/stats").summary;e("../globals");var r=t.exports={},i=e("../Encoding"),f=r.axis=e("./axis"),o=r.legend=e("./legend"),c=r.marks=e("./marks"),u=r.scale=e("./scale");r.data=e("./data"),r.facet=e("./facet"),r.layout=e("./layout"),r.sort=e("./sort"),r.stack=e("./stack"),r.style=e("./style"),r.subfacet=e("./subfacet"),r.time=e("./time"),r.compile=function(e,t,n){return r.compileEncoding(i.fromSpec(e,n),t)},r.shorthand=function(e,t,n,a){return r.compileEncoding(i.fromShorthand(e,n,a),t)},r.compileEncoding=function(e,t){t||(e.hasValues()?t=a(e.data().values).reduce(function(e,t){return e[t.field]=t,e},{}):console.error("No stats provided and data is not embedded."));var n=r.layout(e,t),i={width:n.width,height:n.height,padding:"auto",data:r.data(e),scales:r.time.scales(e),marks:[{_name:"cell",type:"group",properties:{enter:{width:n.cellWidth?{value:n.cellWidth}:{group:"width"},height:n.cellHeight?{value:n.cellHeight}:{group:"height"}}}}]},s=i.marks[0];i.data=r.sort(i.data,e,t);var d=r.style(e,t),l=s.marks=c.def(e,n,d,t),b=l[l.length-1],h=c[e.marktype()].line,g=e.details(),m=e.isAggregate()&&g.length>0&&r.stack(i.data,e,b);if(g.length>0&&(m||h)&&r.subfacet(s,b,g,m,e),h&&e.config("autoSortLine")){var p=e.isMeasure(X)&&e.isDimension(Y)?Y:X;b.from||(b.from={}),b.from.transform=[{type:"sort",by:"-"+e.fieldRef(p)}]}var y=[].concat.apply([],l.map(function(e){return u.names(e.properties.update)}));return e.has(ROW)||e.has(COL)?(i=r.facet(s,e,n,i,y,m,t),i.legends=o.defs(e,d)):(s.scales=u.defs(y,e,n,t,{stack:m}),s.axes=[],e.has(X)&&s.axes.push(f.def(X,e,n,t)),e.has(Y)&&s.axes.push(f.def(Y,e,n,t)),s.legends=o.defs(e,d)),i}},{"../Encoding":7,"../globals":25,"./axis":8,"./data":10,"./facet":11,"./layout":12,"./legend":13,"./marks":14,"./scale":15,"./sort":16,"./stack":17,"./style":18,"./subfacet":19,"./time":20,"datalib/src/stats":35}],10:[function(e,t,n){"use strict";function a(e){var t=[a.raw(e)],n=a.aggregate(e);return n&&t.push(a.aggregate(e)),a.filterNonPositive(t[t.length-1],e),t}e("../globals"),t.exports=a;var r=e("../field"),i=e("../util"),f=e("./time");a.raw=function(e){var t={name:RAW};e.hasValues()?t.values=e.data().values:(t.url=e.data().url,t.format={type:e.data().formatType});var n=a.raw.formatParse(e);return n&&(t.format=t.format||{},t.format.parse=n),t.transform=a.raw.transform(e),t},a.raw.formatParse=function(e){var t;return e.forEach(function(e){if(e.type==T)t=t||{},t[e.name]="date";else if(e.type==Q){if(r.isCount(e))return;t=t||{},t[e.name]="number"}}),t},a.raw.transform=function(e){return a.raw.transform.time(e).concat(a.raw.transform.bin(e),a.raw.transform.filter(e))};var o={">":!0,">=":!0,"=":!0,"!=":!0,"<":!0,"<=":!0};a.raw.transform.time=function(e){return e.reduce(function(t,n,a){return n.type===T&&n.timeUnit&&t.push({type:"formula",field:e.fieldRef(a),expr:f.formula(n.timeUnit,e.fieldRef(a,{nofn:!0,d:!0}))}),t},[])},a.raw.transform.bin=function(e){return e.reduce(function(t,n,a){return e.bin(a)&&t.push({type:"bin",field:e.fieldRef(a,{nofn:!0}),output:e.fieldRef(a),maxbins:e.bin(a).maxbins}),t},[])},a.raw.transform.filter=function(e){ +var t=e.filter().reduce(function(t,n){var a="",r=n.operator,f=n.operands,c="d."+(e._vega2?"":"data.");if(o[r]){"="===r&&(r="==");var u=f[0],s=f[1];a=c+u+" "+r+" "+s}else{if("notNull"!==r)return i.warn("Unsupported operator: ",r),t;for(var d=0;d0?{name:AGGREGATE,source:RAW,transform:[{type:"aggregate",groupby:t,fields:n}]}:null},a.filterNonPositive=function(e,t){t.forEach(function(n,a){"log"===t.scale(a).type&&e.transform.push({type:"filter",test:t.fieldRef(a,{d:1})+" > 0"})})}},{"../field":24,"../globals":25,"../util":29,"./time":20}],11:[function(e,t,n){"use strict";function a(e,t){return t=t||{},{_name:e||void 0,type:"group",from:t.from,properties:{enter:{x:t.x||void 0,y:t.y||void 0,width:t.width||{group:"width"},height:t.height||{group:"height"}}},scales:t.scales||void 0,axes:t.axes||void 0,marks:t.marks||[]}}function r(e,t,n,r,c,u,s){var d,l,b=e.properties.enter,h=[],g=[],m=t.has(ROW),p=t.has(COL);b.fill={value:t.config("cellBackgroundColor")},e.from={data:e.marks[0].from.data};for(var y=0;y0&&(e.axes=g);var M=e.from.transform||(e.from.transform=[]);return M.unshift({type:"facet",keys:h}),r}e("../globals");var i=e("../util"),f=e("./axis"),o=e("./scale");t.exports=r},{"../globals":25,"../util":29,"./axis":8,"./scale":15}],12:[function(e,t,n){"use strict";function a(e,t){var n=r(e,t);return n=o(e,t,n)}function r(e,t){var n,a,r=e.has(ROW),i=e.has(COL),f=e.has(X),o=e.has(Y),c=e.marktype(),u=f&&e.isDimension(X)?e.cardinality(X,t):1,s=o&&e.isDimension(Y)?e.cardinality(Y,t):1,d=u>e.config("largeBandMaxCardinality")||s>e.config("largeBandMaxCardinality"),l=e.config("cellPadding");n=f?e.isOrdinalScale(X)?(u+e.field(X).band.padding)*e.bandSize(X,d):i||r?e.field(COL).width:e.config("singleWidth"):c===TEXT?e.config("textCellWidth"):e.bandSize(X),a=o?e.isOrdinalScale(Y)?(s+e.field(Y).band.padding)*e.bandSize(Y,d):i||r?e.field(ROW).height:e.config("singleHeight"):e.bandSize(Y);var b=n,h=a;if(i){var g=e.cardinality(COL,t);b=n*((1+l)*(g-1)+1)}if(r){var m=e.cardinality(ROW,t);h=a*((1+l)*(m-1)+1)}return{cellWidth:n,cellHeight:a,cellPadding:l,width:b,height:h,x:{useSmallBand:d},y:{useSmallBand:d}}}function i(e,t,n){var a=e.numberFormat(t,n);return d.format(a)(n.max).length}function f(e,t,n){var a=e.field(n),r=t[a.name];return a.bin?i(e,n,r):e.isType(n,Q)?i(e,n,r):e.isType(n,T)?s.maxLength(e.field(n).timeUnit,e):e.isTypes(n,[N,O])?"number"===r.type?i(e,n,r):Math.min(r.max,e.axis(n).maxLabelLength||1/0):void 0}function o(e,t,n){return[X,Y].forEach(function(a){var r,i=a===X?20:22;e.isDimension(a)||e.isType(a,T)?r=f(e,t,a):(e.isType(a,Q)||"count"===e.aggregate(a))&&a===Y&&(r=f(e,t,a)),r?u(n,[a,"axisTitleOffset"],e.config("characterWidth")*r+i):u(n,[a,"axisTitleOffset"],3*e.config("characterWidth")+i)}),n}e("../globals");var c=e("../util"),u=c.setter,s=e("./time"),d=e("d3-format");t.exports=a},{"../globals":25,"../util":29,"./time":20,"d3-format":5}],13:[function(e,t,n){"use strict";e("../globals");var a=e("./time"),r=e("../util"),i=r.setter,f=r.getter,o=t.exports={};o.defs=function(e,t){var n=[];return e.has(COLOR)&&e.field(COLOR).legend&&n.push(o.def(COLOR,e,{fill:COLOR,orient:"right"},t)),e.has(SIZE)&&e.field(SIZE).legend&&n.push(o.def(SIZE,e,{size:SIZE,orient:1===n.length?"left":"right"},t)),e.has(SHAPE)&&e.field(SHAPE).legend&&(2===n.length&&console.error("Vega-lite currently only supports two legends"),n.push(o.def(SHAPE,e,{shape:SHAPE,orient:1===n.length?"left":"right"},t))),n},o.def=function(e,t,n,r){var f=t.field(e).timeUnit;return n.title=o.title(e,t),n=o.style(e,t,n,r),t.isType(e,T)&&f&&a.hasScale(f)&&i(n,["properties","labels","text","scale"],"time-"+f),n},o.style=function(e,t,n,a){var r=f(n,["properties","symbols"]),i=t.marktype();switch(i){case"bar":case"tick":case"text":r.stroke={value:"transparent"},r.shape={value:"square"};break;case"circle":case"square":r.shape={value:i};case"point":t.field(SHAPE).filled?(t.has(COLOR)&&e===COLOR?r.fill={scale:COLOR,field:"data"}:r.fill={value:t.value(COLOR)},r.stroke={value:"transparent"}):(t.has(COLOR)&&e===COLOR?r.stroke={scale:COLOR,field:"data"}:r.stroke={value:t.value(COLOR)},r.fill={value:"transparent"},r.strokeWidth={value:t.config("strokeWidth")});break;case"line":case"area":}var o=t.field(COLOR).opacity||a.opacity;return o&&(r.opacity={value:o}),n},o.title=function(e,t){var n=t.field(e).legend;return n.title?n.title:t.fieldTitle(e)}},{"../globals":25,"../util":29,"./time":20}],14:[function(e,t,n){"use strict";function a(e,t,n){var a={};e.isMeasure(X)?(a.x={scale:X,field:e.fieldRef(X)},(!e.has(Y)||e.isDimension(Y))&&(a.x2={value:0})):e.has(X)?a.xc={scale:X,field:e.fieldRef(X)}:a.x={value:0,offset:e.config("singleBarOffset")},a.x2||(!e.has(X)||e.isOrdinalScale(X)?e.has(SIZE)?a.width={scale:SIZE,field:e.fieldRef(SIZE)}:a.width={value:e.bandSize(X,t.x.useSmallBand),offset:-1}:a.width={value:2}),e.isMeasure(Y)?(a.y={scale:Y,field:e.fieldRef(Y)},a.y2={group:"height"}):(e.has(Y)?a.yc={scale:Y,field:e.fieldRef(Y)}:a.y2={group:"height",offset:-e.config("singleBarOffset")},e.has(SIZE)?a.height={scale:SIZE,field:e.fieldRef(SIZE)}:a.height={value:e.bandSize(Y,t.y.useSmallBand),offset:-1}),e.has(COLOR)?a.fill={scale:COLOR,field:e.fieldRef(COLOR)}:a.fill={value:e.value(COLOR)};var r=e.field(COLOR).opacity;return r&&(a.opacity={value:r}),a}function r(e,t,n){var a={};e.has(X)?a.x={scale:X,field:e.fieldRef(X)}:e.has(X)||(a.x={value:e.bandSize(X,t.x.useSmallBand)/2}),e.has(Y)?a.y={scale:Y,field:e.fieldRef(Y)}:e.has(Y)||(a.y={value:e.bandSize(Y,t.y.useSmallBand)/2}),e.has(SIZE)?a.size={scale:SIZE,field:e.fieldRef(SIZE)}:e.has(SIZE)||(a.size={value:e.value(SIZE)}),e.has(SHAPE)?a.shape={scale:SHAPE,field:e.fieldRef(SHAPE)}:e.has(SHAPE)||(a.shape={value:e.value(SHAPE)}),e.field(SHAPE).filled?e.has(COLOR)?a.fill={scale:COLOR,field:e.fieldRef(COLOR)}:e.has(COLOR)||(a.fill={value:e.value(COLOR)}):(e.has(COLOR)?a.stroke={scale:COLOR,field:e.fieldRef(COLOR)}:e.has(COLOR)||(a.stroke={value:e.value(COLOR)}),a.strokeWidth={value:e.config("strokeWidth")});var r=e.field(COLOR).opacity||n.opacity;return r&&(a.opacity={value:r}),a}function i(e,t,n){var a={};e.has(X)?a.x={scale:X,field:e.fieldRef(X)}:e.has(X)||(a.x={value:0}),e.has(Y)?a.y={scale:Y,field:e.fieldRef(Y)}:e.has(Y)||(a.y={group:"height"}),e.has(COLOR)?a.stroke={scale:COLOR,field:e.fieldRef(COLOR)}:e.has(COLOR)||(a.stroke={value:e.value(COLOR)});var r=e.field(COLOR).opacity;return r&&(a.opacity={value:r}),a.strokeWidth={value:e.config("strokeWidth")},a}function f(e,t,n){var a={};e.isMeasure(X)?(a.x={scale:X,field:e.fieldRef(X)},e.isDimension(Y)&&(a.x2={scale:X,value:0},a.orient={value:"horizontal"})):e.has(X)?a.x={scale:X,field:e.fieldRef(X)}:a.x={value:0},e.isMeasure(Y)?(a.y={scale:Y,field:e.fieldRef(Y)},a.y2={scale:Y,value:0}):e.has(Y)?a.y={scale:Y,field:e.fieldRef(Y)}:a.y={group:"height"},e.has(COLOR)?a.fill={scale:COLOR,field:e.fieldRef(COLOR)}:e.has(COLOR)||(a.fill={value:e.value(COLOR)});var r=e.field(COLOR).opacity;return r&&(a.opacity={value:r}),a}function o(e,t,n){var a={};e.has(X)?(a.x={scale:X,field:e.fieldRef(X)},e.isDimension(X)&&(a.x.offset=-e.bandSize(X,t.x.useSmallBand)/3)):e.has(X)||(a.x={value:0}),e.has(Y)?(a.y={scale:Y,field:e.fieldRef(Y)},e.isDimension(Y)&&(a.y.offset=-e.bandSize(Y,t.y.useSmallBand)/3)):e.has(Y)||(a.y={value:0}),!e.has(X)||e.isDimension(X)?a.width={value:e.bandSize(X,t.y.useSmallBand)/1.5}:a.width={value:1},!e.has(Y)||e.isDimension(Y)?a.height={value:e.bandSize(Y,t.y.useSmallBand)/1.5}:a.height={value:1},e.has(COLOR)?a.fill={scale:COLOR,field:e.fieldRef(COLOR)}:a.fill={value:e.value(COLOR)};var r=e.field(COLOR).opacity||n.opacity;return r&&(a.opacity={value:r}),a}function c(e){return function(t,n,a){var r={};t.has(X)?r.x={scale:X,field:t.fieldRef(X)}:t.has(X)||(r.x={value:t.bandSize(X,n.x.useSmallBand)/2}),t.has(Y)?r.y={scale:Y,field:t.fieldRef(Y)}:t.has(Y)||(r.y={value:t.bandSize(Y,n.y.useSmallBand)/2}),t.has(SIZE)?r.size={scale:SIZE,field:t.fieldRef(SIZE)}:t.has(X)||(r.size={value:t.value(SIZE)}),r.shape={value:e},t.has(COLOR)?r.fill={scale:COLOR,field:t.fieldRef(COLOR)}:t.has(COLOR)||(r.fill={value:t.value(COLOR)});var i=t.field(COLOR).opacity||a.opacity;return i&&(r.opacity={value:i}),r}}function u(e,t,n,a){var r={},i=e.field(TEXT);e.has(X)?r.x={scale:X,field:e.fieldRef(X)}:e.has(X)||(e.has(TEXT)&&e.isType(TEXT,Q)?r.x={value:t.cellWidth-5}:r.x={value:e.bandSize(X,t.x.useSmallBand)/2}),e.has(Y)?r.y={scale:Y,field:e.fieldRef(Y)}:e.has(Y)||(r.y={value:e.bandSize(Y,t.y.useSmallBand)/2}),e.has(SIZE)?r.fontSize={scale:SIZE,field:e.fieldRef(SIZE)}:e.has(SIZE)||(r.fontSize={value:i.font.size}),r.fill={value:i.color};var f=e.field(COLOR).opacity||n.opacity;if(f&&(r.opacity={value:f}),e.has(TEXT))if(e.isType(TEXT,Q)){var o=a[e.fieldName(TEXT)],c=i.format||e.numberFormat(o);r.text={template:"{{"+e.fieldRef(TEXT)+" | number:'"+c+"'}}"},r.align={value:i.align}}else r.text={field:e.fieldRef(TEXT)};else r.text={value:i.placeholder};return r.font={value:i.font.family},r.fontWeight={value:i.font.weight},r.fontStyle={value:i.font.style},r.baseline={value:i.baseline},r}e("../globals");var s=t.exports={};s.def=function(e,t,n,a){var r=[],i=s[e.marktype()],f=e.dataTable();if(e.marktype()===TEXT&&e.has(COLOR)){var o={x:{value:0},y:{value:0},x2:{value:t.cellWidth},y2:{value:t.cellHeight},fill:{scale:COLOR,field:e.fieldRef(COLOR)}};r.push({type:"rect",from:{data:f},properties:{enter:o,update:o}})}var c=i.prop(e,t,n,a);return r.push({type:i.type,from:{data:f},properties:{enter:c,update:c}}),r},s.bar={type:"rect",stack:!0,prop:a,supportedEncoding:{row:1,col:1,x:1,y:1,size:1,color:1}},s.line={type:"line",line:!0,prop:i,requiredEncoding:["x","y"],supportedEncoding:{row:1,col:1,x:1,y:1,color:1,detail:1}},s.area={type:"area",stack:!0,line:!0,requiredEncoding:["x","y"],prop:f,supportedEncoding:{row:1,col:1,x:1,y:1,color:1}},s.tick={type:"rect",prop:o,supportedEncoding:{row:1,col:1,x:1,y:1,color:1,detail:1}},s.circle={type:"symbol",prop:c("circle"),supportedEncoding:{row:1,col:1,x:1,y:1,size:1,color:1,detail:1}},s.square={type:"symbol",prop:c("square"),supportedEncoding:s.circle.supportedEncoding},s.point={type:"symbol",prop:r,supportedEncoding:{row:1,col:1,x:1,y:1,size:1,color:1,shape:1,detail:1}},s.text={type:"text",prop:u,requiredEncoding:["text"],supportedEncoding:{row:1,col:1,size:1,color:1,text:1}}},{"../globals":25}],15:[function(e,t,n){"use strict";e("../globals");var a=e("../util"),r=e("./time"),i=e("colorbrewer"),f=e("d3-color").interpolateHsl,o=e("../schema/schema"),c=e("./sort"),u=t.exports={};u.names=function(e){return a.keys(a.keys(e).reduce(function(t,n){return e[n]&&e[n].scale&&(t[e[n].scale]=1),t},{}))},u.defs=function(e,t,n,a,r){return r=r||{},e.reduce(function(e,i){var f={name:i,type:u.type(i,t),domain:u.domain(i,t,a,r)};return f.sort=u.sort(f,t,i)||void 0,u.range(f,t,n,a,r),e.push(f),e},[])},u.sort=function(e,t,n){return"ordinal"===e.type&&(!!t.bin(n)||0===t.sort(n).length)},u.type=function(e,t){switch(t.type(e)){case N:case O:return"ordinal";case T:var n=t.field(e).timeUnit;return n?r.scale.type(n,e):"time";case Q:return t.bin(e)?e===COLOR?"linear":"ordinal":t.scale(e).type}},u.domain=function(e,t,n,i){var f=t.field(e);if(t.isType(e,T)){var u=r.scale.domain(f.timeUnit,e);if(u)return u}if(f.bin){var s=n[f.name],d=a.getbins(s,f.bin.maxbins||o.MAXBINS_DEFAULT),l=(d.stop-d.start)/d.step;return a.range(l).map(function(e){return d.start+d.step*e})}if(e==i.stack)return{data:STACKED,field:t.fieldRef(e,{data:!t._vega2,prefn:(i.facet?"max_":"")+"sum_"})};var b=t.aggregate(e),h=f.timeUnit,g=t.scale(e).useRawDomain,m=void 0!==g?g:t.config("useRawDomain"),p=!b||"count"!==b&&"sum"!==b;if(m&&p&&(t.isType(e,Q)&&!f.bin||t.isType(e,T)&&(!h||!r.isOrdinalFn(h))))return{data:RAW,field:t.fieldRef(e,{nofn:!h})};var y=t.sort(e,n).length>0?c.getDataName(e):t.dataTable();return{data:y,field:t.fieldRef(e)}},u.range=function(e,t,n,a){var r=t.scale(e.name),i=t.field(e.name),f=i.timeUnit;switch(e.name){case X:e.range=n.cellWidth?[0,n.cellWidth]:"width","ordinal"===e.type?e.bandWidth=t.bandSize(X,n.x.useSmallBand):(t.isType(e.name,T)&&"year"===f?e.zero=!1:e.zero=void 0===r.zero?!0:r.zero,e.reverse=r.reverse),e.round=!0,"time"===e.type?e.nice=f||t.config("timeScaleNice"):e.nice=!0;break;case Y:"ordinal"===e.type?(e.range=n.cellHeight?i.bin?[n.cellHeight,0]:[0,n.cellHeight]:"height",e.bandWidth=t.bandSize(Y,n.y.useSmallBand)):(e.range=n.cellHeight?[n.cellHeight,0]:"height",t.isType(e.name,T)&&"year"===f?e.zero=!1:e.zero=void 0===r.zero?!0:r.zero,e.reverse=r.reverse),e.round=!0,"time"===e.type?e.nice=f||t.config("timeScaleNice"):e.nice=!0;break;case ROW:e.bandWidth=n.cellHeight,e.round=!0,e.nice=!0;break;case COL:e.bandWidth=n.cellWidth,e.round=!0,e.nice=!0;break;case SIZE:if(t.is("bar"))e.range=[3,Math.max(t.bandSize(X),t.bandSize(Y))];else if(t.is(TEXT))e.range=[8,40];else{var o=Math.min(t.bandSize(X),t.bandSize(Y))-1;e.range=[10,.8*o*o]}e.round=!0,e.zero=!1;break;case SHAPE:e.range="shapes";break;case COLOR:e.range=u.color(e,t,a),"ordinal"!==e.type&&(e.zero=!1);break;default:throw new Error("Unknown encoding name: "+e.name)}switch(e.name){case ROW:case COL:e.padding=t.config("cellPadding"),e.outerPadding=0;break;case X:case Y:"ordinal"===e.type&&(e.points=!0,e.padding=t.field(e.name).band.padding)}},u.color=function(e,t,n){var a=t.scale(COLOR),r=a.range,i=t.cardinality(COLOR,n),f=t.type(COLOR);if(void 0===r){var o=a.ordinalPalette,c=a.quantitativeRange;return"ordinal"===e.type?f===N?(r=10>=i?a.c10palette:a.c20palette,u.color.palette(r,i,f)):o?u.color.palette(o,i,f):u.color.interpolate(c[0],c[1],i):[c[0],c[1]]}},u.color.palette=function(e,t,n){switch(e){case"category10k":return["#2ca02c","#e377c2","#7f7f7f","#17becf","#8c564b","#d62728","#bcbd22","#9467bd","#ff7f0e","#1f77b4"];case"category10":return["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"];case"category20":return["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];case"category20b":return["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"];case"category20c":return["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"]}if(e in i){var r=i[e];if(t in r)return r[t];if(n===N)return r[Math.max.apply(null,a.keys(r))];var f=3>t?3:Math.max.apply(null,a.keys(r)),o=0,c=f-1;return u.color.interpolate(r[f][o],r[f][c],t)}return e},u.color.interpolate=function(e,t,n){var r=f(e,t);return a.range(n).map(function(e){return r(1*e/(n-1))})}},{"../globals":25,"../schema/schema":27,"../util":29,"./sort":16,"./time":20,colorbrewer:3,"d3-color":4}],16:[function(e,t,n){"use strict";function a(e,t,n,i){var f={};return t.forEach(function(i,o){var c=t.sort(o,n);if(c.length>0){var u=c.map(function(e){return{op:e.aggregate,field:r.fieldRef(e,{nofn:!0,data:!t._vega2})}}),s=c.map(function(e){var n=e.reverse?"-":"";return n+r.fieldRef(e,{data:!t._vega2})}),d=a.getDataName(o),l=[{type:"aggregate",groupby:[t.fieldRef(o)],fields:u},{type:"sort",by:s}];e.push({name:d,source:RAW,transform:l}),f[o]=d}}),e}e("../globals");var r=e("../field");t.exports=a,a.getDataName=function(e){return"sorted-"+e}},{"../field":24,"../globals":25}],17:[function(e,t,n){"use strict";function a(e,t,n){if(!r[t.marktype()].stack)return!1;if(!t.has(COLOR))return!1;var a=null,i=null,f=null,o=t.isMeasure(X),c=t.isMeasure(Y),u=t.facets();if(o&&!c)a=Y,i=X,f=0;else{if(!c||o)return null;a=X,i=Y,f=1}var s={name:STACKED,source:t.dataTable(),transform:[{type:"aggregate",groupby:[t.fieldRef(a)].concat(u),fields:[{op:"sum",field:t.fieldRef(i)}]}]};return u&&u.length>0&&s.transform.push({type:"aggregate",groupby:u,fields:[{op:"max",field:t.fieldName(i,{fn:"sum"})}]}),e.push(s),n.from.transform=[{type:"stack",point:t.fieldRef(a),height:t.fieldRef(i),output:{y1:i,y0:i+"2"}}],n.properties.update[i]=n.properties.enter[i]={scale:i,field:i},n.properties.update[i+"2"]=n.properties.enter[i+"2"]={scale:i,field:i+"2"},i}e("../globals");var r=e("./marks");t.exports=a},{"../globals":25,"./marks":14}],18:[function(e,t,n){"use strict";function a(e,t){if(!t)return 1;var n=0;if(e.isAggregate())n=1,e.forEach(function(a,i){i===ROW||i===COL||(i===X||i===Y)&&r.isOrdinalScale(a)||(n*=e.cardinality(i,t))});else{if(!t["*"])return 1;n=t["*"].max;var a=1;e.has(ROW)&&(a*=e.cardinality(ROW,t)),e.has(COL)&&(a*=e.cardinality(COL,t)),n/=a}var i=0;return i=25>=n?1:200>n?.8:1e3>n||e.is("tick")?.7:.3}e("../globals");var r=e("../field");t.exports=function(e,t){return{opacity:a(e,t)}}},{"../field":24,"../globals":25}],19:[function(e,t,n){"use strict";function a(e,t,n,a,r){var i=e.marks,f={_name:"subfacet",type:"group",from:t.from,properties:{enter:{width:{group:"width"},height:{group:"height"}}},marks:i};e.marks=[f],delete t.from;var o=f.from.transform||(f.from.transform=[]);o.unshift({type:"facet",keys:n}),a&&r.has(COLOR)&&o.unshift({type:"sort",by:r.fieldRef(COLOR)})}e("../globals"),t.exports=a},{"../globals":25}],20:[function(e,t,n){"use strict";var a=e("../util"),r=e("d3-time-format"),i=t.exports={},f=new Date(Date.UTC(2014,8,17));i.cardinality=function(e,t,n,a){var r=e.timeUnit;switch(r){case"seconds":return 60;case"minutes":return 60;case"hours":return 24;case"day":return 7;case"date":return 31;case"month":return 12;case"year":var i=t[e.name],f=t["year_"+e.name];return f?f.distinct-(i.nulls>0&&n[a]?1:0):null}return null},i.formula=function(e,t){var n="utc"+e;return n+"("+t+")"},i.maxLength=function(e,t){switch(e){case"seconds":case"minutes":case"hours":case"date":return 2;case"month":case"day":var n=i.range(e,t);return n?Math.max.apply(null,n.map(function(e){return e.length})):2;case"year":return 4}var a=t.config("timeFormat");return r.utcFormat(a)(f).length},i.range=function(e,t){var n,a=t.config("timeScaleLabelLength");switch(e){case"day":n=t.config("dayScaleLabel");break;case"month":n=t.config("monthScaleLabel")}return n?a?n.map(function(e){return e.substr(0,a)}):n:void 0},i.scales=function(e){var t=e.reduce(function(t,n){var a=n.timeUnit;if(n.type===T&&a&&!t[a]){var r=i.scale.def(n.timeUnit,e);r&&(t[a]=r)}return t},{});return a.vals(t)},i.scale={},i.scale.def=function(e,t){var n=i.range(e,t);return n?{name:"time-"+e,type:"ordinal",domain:i.scale.domain(e),range:n}:null},i.isOrdinalFn=function(e){switch(e){case"seconds":case"minutes":case"hours":case"day":case"date":case"month":return!0}return!1},i.scale.type=function(e,t){return t===COLOR?"linear":i.isOrdinalFn(e)||t===COL||t===ROW?"ordinal":"linear"},i.scale.domain=function(e,t){var n=t===COLOR;switch(e){case"seconds":case"minutes":return n?[0,59]:a.range(0,60);case"hours":return n?[0,23]:a.range(0,24);case"day":return n?[0,6]:a.range(0,7);case"date":return n?[1,31]:a.range(1,32);case"month":return n?[0,11]:a.range(0,12)}return null},i.hasScale=function(e){switch(e){case"day":case"month":return!0}return!1}},{"../util":29,"d3-time-format":6}],21:[function(e,t,n){"use strict";e("./globals");var a=t.exports={};a.encodingTypes=[X,Y,ROW,COL,SIZE,SHAPE,COLOR,TEXT,DETAIL],a.shorthand={delim:"|",assign:"=",type:",",func:"_"}},{"./globals":25}],22:[function(e,t,n){"use strict";e("./globals");var a=e("datalib/src/stats"),r=t.exports={};r.types={"boolean":N,number:Q,integer:Q,date:T,string:N},r.stats=function(e){var t=a.summary(e);return t.reduce(function(e,t){return e[t.field]=t,e},{"*":{max:e.length,min:0}})}},{"./globals":25,"datalib/src/stats":35}],23:[function(e,t,n){"use strict";var a=e("./consts"),r=a.shorthand,i=e("./field"),f=e("./util"),o=e("./schema/schema"),c=o.encTypes,u=t.exports={};u.countRetinal=function(e){var t=0;return e.color&&t++,e.size&&t++,e.shape&&t++,t},u.has=function(e,t){var n=e&&e[t];return n&&n.name},u.isAggregate=function(e){for(var t in e)if(u.has(e,t)&&e[t].aggregate)return!0;return!1},u.forEach=function(e,t){var n=0;c.forEach(function(a){u.has(e,a)&&t(e[a],a,n++)})},u.map=function(e,t){var n=[];return c.forEach(function(a){u.has(e,a)&&n.push(t(e[a],a,e))}),n},u.reduce=function(e,t,n){var a=n;return c.forEach(function(n){u.has(e,n)&&(a=t(a,e[n],n,e))}),a},u.fields=function(e){return u.reduce(e,function(e,t){var n=e[t.name]=e[t.name]||[],a=n.containsType=n.containsType||{};return-1===n.indexOf(t)&&(n.push(t),a[t.type]=!0),e},{})},u.shorthand=function(e){return u.map(e,function(e,t){return t+r.assign+i.shorthand(e)}).join(r.delim)},u.fromShorthand=function(e){var t=f.isArray(e)?e:e.split(r.delim);return t.reduce(function(e,t){var n=t.split(r.assign),a=n[0].trim(),f=n[1];return e[a]=i.fromShorthand(f),e},{})}},{"./consts":21,"./field":24,"./schema/schema":27,"./util":29}],24:[function(e,t,n){"use strict";function a(e){return d(e,[N,O])||!!e.bin||s(e,T)&&!!e.timeUnit}e("./globals");var r=e("./consts"),i=r.shorthand,f=e("./compiler/time"),o=e("./util"),c=e("./schema/schema"),u=t.exports={};u.fieldRef=function(e,t){t=t||{};var n=(t.d?"d.":"")+(t.data?"data.":"")+(t.prefn||""),a=t.nofn||t.fn,r=e.name;return u.isCount(e)?n+"count":!a&&e.bin?n+"bin_"+r:!a&&e.aggregate?n+e.aggregate+"_"+r:!a&&e.timeUnit?n+e.timeUnit+"_"+r:t.fn?n+t.fn+"_"+r:n+r},u.shorthand=function(e){var t=r.shorthand;return(e.aggregate?e.aggregate+t.func:"")+(e.timeUnit?e.timeUnit+t.func:"")+(e.bin?"bin"+t.func:"")+(e.name||"")+t.type+e.type},u.shorthands=function(e,t){return t=t||i.delim,e.map(u.shorthand).join(t)},u.fromShorthand=function(e){var t,n=e.split(i.type),a={name:n[0].trim(),type:n[1].trim()};for(t in c.aggregate["enum"]){var r=c.aggregate["enum"][t];if(0===a.name.indexOf(r+"_")){a.name=a.name.substr(r.length+1),"count"==r&&0===a.name.length&&(a.name="*"),a.aggregate=r;break}}for(t in c.timefns){var f=c.timefns[t];if(a.name&&0===a.name.indexOf(f+"_")){a.name=a.name.substr(a.length+1),a.timeUnit=f;break}}return a.name&&0===a.name.indexOf("bin_")&&(a.name=a.name.substr(4),a.bin=!0),a};var s=u.isType=function(e,t){return e.type===t},d=u.isTypes=function(e,t){for(var n=0;n0&&n[r]?1:0)}},{"./compiler/time":20,"./consts":21,"./globals":25,"./schema/schema":27,"./util":29}],25:[function(e,t,n){(function(e){"use strict";var t=e||window;t.AGGREGATE="aggregate",t.RAW="raw",t.STACKED="stacked",t.INDEX="index",t.X="x",t.Y="y",t.ROW="row",t.COL="col",t.SIZE="size",t.SHAPE="shape",t.COLOR="color",t.TEXT="text",t.DETAIL="detail",t.N="N",t.O="O",t.Q="Q",t.T="T"}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],26:[function(e,t,n){"use strict";t.exports=function(e){var t=["error","info","debug","warn","log"];return t.reduce(function(t,n){var a=console[n]?n:"log";return"undefined"===console[a].bind?t[n]=Function.prototype.bind.call(console[a],console,e):t[n]=console[a].bind(console,e),t},{})}},{}],27:[function(e,t,n){"use strict";e("../globals");var a=t.exports={},r=e("../util"),i=r.toMap,f=e("colorbrewer");a.util=e("./schemautil"),a.marktype={type:"string","enum":["point","tick","bar","line","area","circle","square","text"]},a.aggregate={type:"string","enum":["avg","sum","median","min","max","count"],supportedEnums:{Q:["avg","median","sum","min","max","count"],O:["median","min","max"],N:[],T:["avg","median","min","max"],"":["count"]},supportedTypes:i([Q,N,O,T,""])},a.getSupportedRole=function(e){return a.schema.properties.encoding.properties[e].supportedRole},a.timeUnits=["year","month","day","date","hours","minutes","seconds"],a.defaultTimeFn="month",a.timeUnit={type:"string","enum":a.timeUnits,supportedTypes:i([T])},a.scale_type={type:"string","enum":["linear","log","pow","sqrt","quantile"],"default":"linear",supportedTypes:i([Q])},a.field={type:"object",properties:{name:{type:"string"}}};var o=r.duplicate,c=a.util.merge;a.MAXBINS_DEFAULT=15;var u={type:["boolean","object"],"default":!1,properties:{maxbins:{type:"integer","default":a.MAXBINS_DEFAULT,minimum:2,description:"Maximum number of bins."}},supportedTypes:i([Q])},s=c(o(a.field),{type:"object",properties:{type:{type:"string","enum":[N,O,Q,T]},aggregate:a.aggregate,timeUnit:a.timeUnit,bin:u,scale:{type:"object",properties:{type:a.scale_type,reverse:{type:"boolean","default":!1,supportedTypes:i([Q,T])},nice:{type:"string","enum":["second","minute","hour","day","week","month","year"],supportedTypes:i([T])},zero:{type:"boolean",description:"Include zero","default":!0,supportedTypes:i([Q,T])},useRawDomain:{type:"boolean","default":void 0,description:"Use the raw data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."}}}}}),d=c(o(a.field),{type:"object",supportedRole:{dimension:!0},properties:{type:{type:"string","enum":[N,O,Q,T]},timeUnit:a.timeUnit,bin:u,aggregate:{type:"string","enum":["count"],supportedTypes:i([N,O])}}}),l={type:"object",supportedMarktypes:{point:!0,tick:!0,bar:!0,line:!0,area:!0,circle:!0,square:!0},properties:{axis:{type:"object",properties:{format:{type:"string","default":void 0,description:"The formatting pattern for axis labels. If not undefined, this will be determined by small/largeNumberFormat and the max value of the field."},grid:{type:"boolean","default":!0,description:"A flag indicate if gridlines should be created in addition to ticks."},layer:{type:"string","default":"back",description:'A string indicating if the axis (and any gridlines) should be placed above or below the data marks. One of "front" (default) or "back".'},orient:{type:"string","default":void 0,"enum":["top","right","left","bottom"],description:"The orientation of the axis. One of top, bottom, left or right. The orientation can be used to further specialize the axis type (e.g., a y axis oriented for the right edge of the chart)."},ticks:{type:"integer","default":5,minimum:0,description:'A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are "nice" (multiples of 2, 5, 10) and lie within the underlying scale\'s range.'},title:{type:"string","default":void 0,description:"A title for the axis. (Shows field name and its function by default.)"},maxLabelLength:{type:"integer","default":25,minimum:0,description:"Truncate labels that are too long."},labelAngle:{type:"integer","default":void 0,minimum:0,maximum:360,description:"Angle by which to rotate labels. Set to 0 to force horizontal."},titleMaxLength:{type:"integer","default":void 0,minimum:0,description:"Max length for axis title if the title is automatically generated from the field's description"},titleOffset:{type:"integer","default":void 0,description:"A title offset value for the axis."}}}}},b={type:"object",properties:{sort:{type:"array","default":[],items:{type:"object",supportedTypes:i([N,O]),required:["name","aggregate"],properties:{name:{type:"string"},aggregate:{type:"string","enum":["avg","sum","min","max","count"]},reverse:{type:"boolean","default":!1}}}}}},h={type:"object",properties:{band:{type:"object",properties:{size:{type:"integer",minimum:0,"default":void 0},padding:{type:"integer",minimum:0,"default":1}}}}},g={type:"object",properties:{legend:{type:"object",description:"Properties of a legend.",properties:{title:{type:"string","default":void 0,description:"A title for the legend. (Shows field name and its function by default.)"}}}}},m={type:"object",supportedMarktypes:{text:!0},properties:{align:{type:"string","default":"right"},baseline:{type:"string","default":"middle"},color:{type:"string",role:"color","default":"#000000"},margin:{type:"integer","default":4,minimum:0},placeholder:{type:"string","default":"Abc"},font:{type:"object",properties:{weight:{type:"string","enum":["normal","bold"],"default":"normal"},size:{type:"integer","default":10,minimum:0},family:{type:"string","default":"Helvetica Neue"},style:{type:"string","default":"normal","enum":["normal","italic"]}}},format:{type:"string","default":void 0,description:"The formatting pattern for text value. If not undefined, this will be determined by small/largeNumberFormat and the max value of the field."}}},p={type:"object",supportedMarktypes:{point:!0,bar:!0,circle:!0,square:!0,text:!0},properties:{value:{type:"integer","default":30,minimum:0,description:"Size of marks."}}},y={type:"object",supportedMarktypes:{point:!0,tick:!0,bar:!0,line:!0,area:!0,circle:!0,square:!0,text:!0},properties:{value:{type:"string",role:"color","default":"#4682b4",description:"Color to be used for marks."},opacity:{type:"number","default":void 0,minimum:0,maximum:1},scale:{type:"object",properties:{range:{type:["string","array"],"default":void 0,description:"Color palette, if undefined vega-lite will use data propertyto pick one from c10palette, c20palette, or ordinalPalette."},c10palette:{type:"string","default":"category10","enum":["category10","category10k","Pastel1","Pastel2","Set1","Set2","Set3"]},c20palette:{type:"string","default":"category20","enum":["category20","category20b","category20c"]},ordinalPalette:{type:"string","default":void 0,description:"Color palette to encode ordinal variables.","enum":r.keys(f)},quantitativeRange:{type:"array","default":["#AFC6A3","#09622A"],description:"Color range to encode quantitative variables.",minItems:2,maxItems:2,items:{type:"string",role:"color"}}}}}},v={type:"object",supportedMarktypes:{point:!0,circle:!0,square:!0},properties:{value:{type:"string","enum":["circle","square","cross","diamond","triangle-up","triangle-down"],"default":"circle",description:"Mark to be used."},filled:{ +type:"boolean","default":!1,description:"Whether the shape's color should be used as fill color instead of stroke color."}}},M={type:"object",supportedMarktypes:{point:!0,tick:!0,line:!0,circle:!0,square:!0}},x={properties:{height:{type:"number",minimum:0,"default":150}}},S={properties:{width:{type:"number",minimum:0,"default":150},axis:{properties:{maxLabelLength:{type:"integer","default":12,minimum:0,description:"Truncate labels that are too long."}}}}},w={type:"object",supportedMarktypes:{point:!0,tick:!0,bar:!0,line:!0,area:!0,circle:!0,square:!0,text:!0},properties:{padding:{type:"number",minimum:0,maximum:1,"default":.1}}},k={required:["name","type"]},C=c(o(s),{supportedRole:{measure:!0,dimension:!0}}),R=c(o(s),{supportedRole:{measure:!0,dimension:"ordinal-only"}}),D=c(o(s),{supportedRole:{measure:!0}}),L=c(o(C),l,h,k,b),Y=o(L),A=c(o(d),k,w,b),E=c(o(A),l,x),U=c(o(A),l,S),X=c(o(R),g,p,b),j=c(o(C),g,y,b),z=c(o(d),g,v,b),F=c(o(d),M,b),_=c(o(D),m,b),H={type:"array",items:{type:"object",properties:{operands:{type:"array",items:{type:["string","boolean","integer","number"]}},operator:{type:"string","enum":[">",">=","=","!=","<","<=","notNull"]}}}},W={type:"object",properties:{formatType:{type:"string","enum":["json","csv"],"default":"json"},url:{type:"string","default":void 0},values:{type:"array","default":void 0,description:"Pass array of objects instead of a url to a file.",items:{type:"object",additionalProperties:!0}}}},$={type:"object",properties:{width:{type:"integer","default":void 0},height:{type:"integer","default":void 0},viewport:{type:"array",items:{type:"integer"},"default":void 0},gridColor:{type:"string",role:"color","default":"#000000"},gridOpacity:{type:"number",minimum:0,maximum:1,"default":.08},filterNull:{type:"object",properties:{O:{type:"boolean","default":!1},Q:{type:"boolean","default":!0},T:{type:"boolean","default":!0}}},toggleSort:{type:"string","default":O},autoSortLine:{type:"boolean","default":!0},singleHeight:{type:"integer","default":200,minimum:0},singleWidth:{type:"integer","default":200,minimum:0},largeBandSize:{type:"integer","default":21,minimum:0},smallBandSize:{type:"integer","default":12,minimum:0},largeBandMaxCardinality:{type:"integer","default":10},cellPadding:{type:"number","default":.1},cellGridColor:{type:"string",role:"color","default":"#000000"},cellGridOpacity:{type:"number",minimum:0,maximum:1,"default":.15},cellBackgroundColor:{type:"string",role:"color","default":"rgba(0,0,0,0)"},textCellWidth:{type:"integer","default":90,minimum:0},strokeWidth:{type:"integer","default":2,minimum:0},singleBarOffset:{type:"integer","default":5,minimum:0},timeScaleLabelLength:{type:"integer","default":3,minimum:0,description:"Max length for values in dayScaleLabel and monthScaleLabel. Zero means using full names in dayScaleLabel/monthScaleLabel."},dayScaleLabel:{type:"array",items:{type:"string"},"default":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],description:"Axis labels for day of week, starting from Sunday.(Consistent with Javascript -- See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay."},monthScaleLabel:{type:"array",items:{type:"string"},"default":["January","February","March","April","May","June","July","August","September","October","November","December"],description:"Axis labels for month."},characterWidth:{type:"integer","default":6},maxSmallNumber:{type:"number","default":1e4,description:"maximum number that a field will be considered smallNumber.Used for axis labelling."},smallNumberFormat:{type:"string","default":"",description:"D3 Number format for axis labels and text tables for number <= maxSmallNumber. Used for axis labelling."},largeNumberFormat:{type:"string","default":".3s",description:"D3 Number format for axis labels and text tables for number > maxSmallNumber."},timeFormat:{type:"string","default":"%Y-%m-%d",description:"Date format for axis labels."},useRawDomain:{type:"boolean","default":!1,description:"Use the raw data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."}}};a.schema={$schema:"http://json-schema.org/draft-04/schema#",description:"Schema for Vega-lite specification",type:"object",required:["marktype","encoding","data"],properties:{data:W,marktype:a.marktype,encoding:{type:"object",properties:{x:L,y:Y,row:E,col:U,size:X,color:j,shape:z,text:_,detail:F}},filter:H,config:$}},a.encTypes=r.keys(a.schema.properties.encoding.properties),a.instantiate=function(){return a.util.instantiate(a.schema)}},{"../globals":25,"../util":29,"./schemautil":28,colorbrewer:3}],28:[function(e,t,n){"use strict";function a(e,t){if("object"!=typeof t||null===t)return e;for(var n in t)t.hasOwnProperty(n)&&void 0!==t[n]&&("object"!=typeof t[n]||null===t[n]?e[n]=t[n]:"object"!=typeof e[n]||null===e[n]?e[n]=a(t[n].constructor===Array?[]:{},t[n]):a(e[n],t[n]));return e}var r=t.exports={},i=e("../util"),f=function(e){return 0===Object.keys(e).length};r.extend=function(e,t){return r.merge(r.instantiate(t),e)},r.instantiate=function(e){var t;if(void 0===e)return void 0;if("default"in e)return t=e["default"],i.isObject(t)?i.duplicate(t):t;if("object"===e.type){var n={};for(var a in e.properties)t=r.instantiate(e.properties[a]),void 0!==t&&(n[a]=t);return n}return"array"===e.type?[]:void 0},r.subtract=function(e,t){var n={};for(var a in e){var o=t[a],c=e[a];if(!t||o!==c)if("object"==typeof c&&!i.isArray(c)&&o){var u=r.subtract(c,o);f(u)||(n[a]=u)}else(!i.isArray(c)||c.length>0)&&(n[a]=c)}return n},r.merge=function(){for(var e=arguments[0],t=1;tt-a?a:r},f.ceil=function(t){return e(t=new Date(t-1)),n(t,1),t},f.offset=function(e,t){return n(e=new Date(+e),null==t?1:Math.floor(t)),e},f.range=function(t,a,r){var i=[];if(t=new Date(t-1),a=new Date(+a),r=null==r?1:Math.floor(r),!(a>t&&r>0))return i;for(n(t,1),e(t),a>t&&i.push(new Date(+t));n(t,r),e(t),a>t;)i.push(new Date(+t));return i},f.filter=function(a){return t(function(t){for(;e(t),!a(t);)t.setTime(t-1)},function(e,t){for(;--t>=0;)for(;n(e,1),!a(e););})},a&&(f.count=function(t,n){return i.setTime(+t),r.setTime(+n),e(i),e(r),Math.floor(a(i,r))}),f}function n(e){return t(function(t){t.setHours(0,0,0,0),t.setDate(t.getDate()-(t.getDay()+7-e)%7)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/6048e5})}function a(e){return t(function(t){t.setUTCHours(0,0,0,0),t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/6048e5})}var r=new Date,i=new Date,f=t(function(e){e.setMilliseconds(0)},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3});e.seconds=f.range;var o=t(function(e){e.setSeconds(0,0)},function(e,t){e.setTime(+e+6e4*t)},function(e,t){return(t-e)/6e4});e.minutes=o.range;var c=t(function(e){e.setMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5});e.hours=c.range;var u=t(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5});e.days=u.range,e.sunday=n(0),e.sundays=e.sunday.range,e.monday=n(1),e.mondays=e.monday.range,e.tuesday=n(2),e.tuesdays=e.tuesday.range,e.wednesday=n(3),e.wednesdays=e.wednesday.range,e.thursday=n(4),e.thursdays=e.thursday.range,e.friday=n(5),e.fridays=e.friday.range,e.saturday=n(6),e.saturdays=e.saturday.range;var s=e.sunday;e.weeks=s.range;var d=t(function(e){e.setHours(0,0,0,0),e.setDate(1)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())});e.months=d.range;var l=t(function(e){e.setHours(0,0,0,0),e.setMonth(0,1)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()});e.years=l.range;var b=t(function(e){e.setUTCMilliseconds(0)},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3});e.utcSeconds=b.range;var h=t(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+6e4*t)},function(e,t){return(t-e)/6e4});e.utcMinutes=h.range;var g=t(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5});e.utcHours=g.range;var m=t(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5});e.utcDays=m.range,e.utcSunday=a(0),e.utcSundays=e.utcSunday.range,e.utcMonday=a(1),e.utcMondays=e.utcMonday.range,e.utcTuesday=a(2),e.utcTuesdays=e.utcTuesday.range,e.utcWednesday=a(3),e.utcWednesdays=e.utcWednesday.range,e.utcThursday=a(4),e.utcThursdays=e.utcThursday.range,e.utcFriday=a(5),e.utcFridays=e.utcFriday.range,e.utcSaturday=a(6),e.utcSaturdays=e.utcSaturday.range;var p=e.utcSunday;e.utcWeeks=p.range;var y=t(function(e){e.setUTCHours(0,0,0,0),e.setUTCDate(1)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())});e.utcMonths=y.range;var v=t(function(e){e.setUTCHours(0,0,0,0),e.setUTCMonth(0,1)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()});e.utcYears=v.range,e.interval=t,e.second=f,e.minute=o,e.hour=c,e.day=u,e.week=s,e.month=d,e.year=l,e.utcSecond=b,e.utcMinute=h,e.utcHour=g,e.utcDay=m,e.utcWeek=p,e.utcMonth=y,e.utcYear=v})},{}],32:[function(e,t,n){function a(e){if(!e)throw Error("Missing binning options.");var t,n,a,o,c,u,s,d=e.maxbins||15,l=e.base||10,b=Math.log(l),h=e.div||[5,2],g=e.min,m=e.max,p=m-g;if(e.step)t=e.step;else if(e.steps)t=e.steps[Math.min(e.steps.length-1,r(e.steps,p/d,0,e.steps.length))];else{n=Math.ceil(Math.log(d)/b),a=e.minstep||0,t=Math.max(a,Math.pow(l,Math.round(Math.log(p)/b)-n));do t*=l;while(Math.ceil(p/t)>d);for(u=0;u=a&&d>=p/c&&(t=c)}return c=Math.log(t),o=c>=0?0:~~(-c/b)+1,s=Math.pow(l,-o-1),g=Math.min(g,Math.floor(g/t+s)*t),m=Math.ceil(m/t)*t,{start:g,stop:m,step:t,unit:{precision:o},value:i,index:f}}function r(e,t,n,a){for(;a>n;){var r=n+a>>>1;u.cmp(e[r],t)<0?n=r+1:a=r}return n}function i(e){return this.step*Math.floor(e/this.step+d)}function f(e){return Math.floor((e-this.start)/this.step+d)}function o(e){return this.unit.date(i.call(this,e))}function c(e){return f.call(this,this.unit.unit(e))}var u=e("../util"),s=e("../time"),d=1e-15;a.date=function(e){if(!e)throw Error("Missing date binning options.");var t=e.utc?s.utc:s,n=e.min,r=e.max,i=e.maxbins||20,f=e.minbins||4,u=+r-+n,d=e.unit?t[e.unit]:t.find(u,f,i),l=a({min:null!=d.min?d.min:d.unit(n),max:null!=d.max?d.max:d.unit(r),maxbins:i,minstep:d.minstep,steps:d.step});return l.unit=d,l.index=c,e.raw||(l.value=o),l},t.exports=a},{"../time":36,"../util":37}],33:[function(e,t,n){var a=t.exports={};a.repeat=function(e,t){var n,a=Array(t);for(n=0;t>n;++n)a[n]=e;return a},a.zeros=function(e){return a.repeat(0,e)},a.range=function(e,t,n){if(arguments.length<3&&(n=1,arguments.length<2&&(t=e,e=0)),(t-e)/n==1/0)throw new Error("Infinite range");var a,r=[],i=-1;if(0>n)for(;(a=e+n*++i)>t;)r.push(a);else for(;(a=e+n*++i)1);return r=Math.sqrt(-2*Math.log(a)/a),n=e+f*r*t,e+i*r*t};return r.samples=function(e){return a.zeros(e).map(r)},r}},{}],34:[function(e,t,n){function a(e,t){return t?void(e[u]=t):e&&e[u]||null}function r(e,t){t=c.$(t);var n,a,r;if(e[u]&&(n=t(e[u]),c.isString(n)))return n;for(a=0,r=e.length;!c.isValid(n)&&r>a;++a)n=t?t(e[a]):e[a];return c.isDate(n)?"date":c.isNumber(n)?"number":c.isBoolean(n)?"boolean":c.isString(n)?"string":null}function i(e,t){return e.length?(t=t||c.keys(e[0]),t.reduce(function(t,n){return t[n]=r(e,n),t},{})):void 0}function f(e,t){t=c.$(t);var n,a,r,i=["boolean","integer","number","date"];for(n=0;ni;++i)r=t?t(e[i]):e[i],r in o||(o[r]=1,n.push(r));return n},f.count=function(e){return e&&e.length||0},f.count.valid=function(e,t){t=a.$(t);var n,r,i,f=0;for(r=0,i=e.length;i>r;++r)n=t?t(e[r]):e[r],a.isValid(n)&&(f+=1);return f},f.count.missing=function(e,t){t=a.$(t);var n,r,i,f=0;for(r=0,i=e.length;i>r;++r)n=t?t(e[r]):e[r],null==n&&(f+=1);return f},f.count.distinct=function(e,t){t=a.$(t);var n,r,i,f={},o=0;for(r=0,i=e.length;i>r;++r)n=t?t(e[r]):e[r],n in f||(f[n]=1,o+=1);return o},f.count.map=function(e,t){t=a.$(t);var n,r,i,f={};for(r=0,i=e.length;i>r;++r)n=t?t(e[r]):e[r],f[n]=n in f?f[n]+1:1;return f},f.median=function(e,t){return t&&(e=e.map(a.$(t))),e=e.filter(a.isValid).sort(a.cmp),f.quantile(e,.5)},f.quartile=function(e,t){t&&(e=e.map(a.$(t))),e=e.filter(a.isValid).sort(a.cmp);var n=f.quantile;return[n(e,.25),n(e,.5),n(e,.75)]},f.quantile=function(e,t,n){void 0===n&&(n=t,t=a.identity),t=a.$(t);var r=(e.length-1)*n+1,i=Math.floor(r),f=+t(e[i-1]),o=r-i;return o?f+o*(t(e[i])-f):f},f.sum=function(e,t){t=a.$(t);for(var n,r=0,i=0,f=e.length;f>i;++i)n=t?t(e[i]):e[i],a.isValid(n)&&(r+=n);return r},f.mean=function(e,t){t=a.$(t);var n,r,i,f,o,c=0;for(r=0,f=0,i=e.length;i>r;++r)o=t?t(e[r]):e[r],a.isValid(o)&&(n=o-c,c+=n/++f);return c},f.variance=function(e,t){if(t=a.$(t),!a.isArray(e)||e.length<2)return 0;var n,r,i,f,o=0,c=0;for(r=0,i=0;rf;++f)if(i=t?t(e[f]):e[f],a.isValid(i)){n=r=i;break}for(;o>f;++f)i=t?t(e[f]):e[f],a.isValid(i)&&(n>i&&(n=i),i>r&&(r=i));return[n,r]},f.extent.index=function(e,t){t=a.$(t);var n,r,i,f,o=-1,c=-1,u=e.length;for(f=0;u>f;++f)if(i=t?t(e[f]):e[f],a.isValid(i)){n=r=i,o=c=f;break}for(;u>f;++f)i=t?t(e[f]):e[f],a.isValid(i)&&(n>i&&(n=i,o=f),i>r&&(r=i,c=f));return[o,c]},f.dot=function(e,t,n){var r,i,f=0;if(n)for(t=a.$(t),n=a.$(n),r=0;rn;++n){if(r=f[n].val,0>u&&s===r)u=n-1;else if(u>-1&&s!==r){for(i=1+(n-1+u)/2;n>u;++u)c[f[u].idx]=i;u=-1}c[f[n].idx]=n+1,s=r}if(u>-1)for(i=1+(o-1+u)/2;o>u;++u)c[f[u].idx]=i;return c},f.cor=function(e,t,n){var r=n;n=r?e.map(a.$(n)):t,t=r?e.map(a.$(t)):e;var i=f.dot(t,n),o=f.mean(t),c=f.mean(n),u=f.stdev(t),s=f.stdev(n),d=e.length;return(i-d*o*c)/((d-1)*u*s)},f.cor.rank=function(e,t,n){var r,i,o,c=n?f.rank(e,a.$(t)):f.rank(e),u=n?f.rank(e,a.$(n)):f.rank(t),s=e.length;for(r=0,i=0;s>r;++r)o=c[r]-u[r],i+=o*o;return 1-6*i/(s*(s*s-1))},f.cor.dist=function(e,t,n){var r,i,o,c,u=n?e.map(a.$(t)):e,s=n?e.map(a.$(n)):t,d=f.dist.mat(u),l=f.dist.mat(s),b=d.length;for(r=0,i=0,o=0,c=0;b>r;++r)i+=d[r]*d[r],o+=l[r]*l[r],c+=d[r]*l[r];return Math.sqrt(c/Math.sqrt(i*o))},f.dist=function(e,t,n,r){var i,f,o=a.isFunction(n)||a.isString(n),c=e,u=o?e:t,s=o?r:n,d=2===s||null==s,l=e.length,b=0;for(o&&(t=a.$(t),n=a.$(n)),f=0;l>f;++f)i=o?t(c[f])-n(u[f]):c[f]-u[f],b+=d?i*i:Math.pow(Math.abs(i),s);return d?Math.sqrt(b):Math.pow(b,1/s)},f.dist.mat=function(e){var t,n,a,r=e.length,f=r*r,o=Array(f),c=i.zeros(r),u=0;for(n=0;r>n;++n)for(o[n*r+n]=0,a=n+1;r>a;++a)o[n*r+a]=t=Math.abs(e[n]-e[a]),o[a*r+n]=t,c[n]+=t,c[a]+=t;for(n=0;r>n;++n)u+=c[n],c[n]/=r;for(u/=f,n=0;r>n;++n)for(a=n;r>a;++a)o[n*r+a]+=u-c[n]-c[a],o[a*r+n]=o[n*r+a];return o},f.entropy=function(e,t){t=a.$(t);var n,r,i=0,f=0,o=e.length;for(n=0;o>n;++n)i+=t?t(e[n]):e[n];if(0===i)return 0;for(n=0;o>n;++n)r=(t?t(e[n]):e[n])/i,r&&(f+=r*Math.log(r));return-f/Math.LN2},f.mutual=function(e,t,n,r){var i,f,o,c=r?e.map(a.$(t)):e,u=r?e.map(a.$(n)):t,s=r?e.map(a.$(r)):n,d={},l={},b=s.length,h=0,g=0,m=0;for(o=0;b>o;++o)d[c[o]]=0,l[u[o]]=0;for(o=0;b>o;++o)d[c[o]]+=s[o],l[u[o]]+=s[o],h+=s[o];for(f=1/(h*Math.LN2),o=0;b>o;++o)0!==s[o]&&(i=h*s[o]/(d[c[o]]*l[u[o]]),g+=s[o]*f*Math.log(i),m+=s[o]*f*Math.log(s[o]/h));return[g,1+g/m]},f.mutual.info=function(e,t,n,a){return f.mutual(e,t,n,a)[0]},f.mutual.dist=function(e,t,n,a){return f.mutual(e,t,n,a)[1]},f.profile=function(e,t){var n,i,o,c,u,s=0,d=0,l=0,b=0,h=null,g=null,m=0,p=[],y={};for(o=0;ou)&&(h=u),(null===g||u>g)&&(g=u),n=u-s,s+=n/++d,m+=n*(u-s),p.push(u));return m/=d-1,i=Math.sqrt(m),p.sort(a.cmp),{type:r(e,t),unique:y,count:e.length,valid:d,missing:l,distinct:b,min:h,max:g,mean:s,stdev:i,median:c=f.quantile(p,.5),q1:f.quantile(p,.25),q3:f.quantile(p,.75),modeskew:0===i?0:(s-c)/i}},f.summary=function(e,t){t=t||a.keys(e[0]);var n=t.map(function(t){var n=f.profile(e,a.$(t));return n.field=t,n});return n.__summary__=!0,n},t.exports=f},{"./generate":33,"./import/type":34,"./util":37}],36:[function(e,t,n){function a(e){return u.setTime(+e),u}function r(e,t,n,a,r,i){var f={type:e,date:t,unit:n};return a?f.step=a:f.minstep=1,null!=r&&(f.min=r),null!=i&&(f.max=i),f}function i(e,t,n,a,i,f){return r(e,function(e){return t.offset(n,e)},function(e){return t.count(n,e)},a,i,f)}function f(e,t,n,a){var r,i,f,o=h[0];for(r=1,i=h.length;i>r;++r)if(o=h[r],t>o[0]){if(f=t/o[0],f>a)return e[h[r-1][1]];if(f>=n)return e[o[1]]}return e[h[i-1][1]]}function o(e){var t,n,a={};for(t=0,n=e.length;n>t;++t)a[e[t].type]=e[t];return a.find=function(t,n,a){return f(e,t,n,a)},a}var c=e("d3-time"),u=new Date,s=new Date(0,0,1).setFullYear(0),d=new Date(Date.UTC(0,0,1)).setUTCFullYear(0),l=[i("second",c.second,s),i("minute",c.minute,s),i("hour",c.hour,s),i("day",c.day,s,[1,7]),i("month",c.month,s,[1,3,6]),i("year",c.year,s),r("seconds",function(e){return new Date(1970,0,1,0,0,e)},function(e){return a(e).getSeconds()},null,0,59),r("minutes",function(e){return new Date(1970,0,1,0,e)},function(e){return a(e).getMinutes()},null,0,59),r("hours",function(e){return new Date(1970,0,1,e)},function(e){return a(e).getHours()},null,0,23),r("weekdays",function(e){return new Date(1970,0,4+e)},function(e){return a(e).getDay()},[1],0,6),r("dates",function(e){return new Date(1970,0,e)},function(e){return a(e).getDate()},[1],1,31),r("months",function(e){return new Date(1970,e%12,1)},function(e){return a(e).getMonth()},[1],0,11)],b=[i("second",c.utcSecond,d),i("minute",c.utcMinute,d),i("hour",c.utcHour,d),i("day",c.utcDay,d,[1,7]),i("month",c.utcMonth,d,[1,3,6]),i("year",c.utcYear,d),r("seconds",function(e){return new Date(Date.UTC(1970,0,1,0,0,e))},function(e){return a(e).getUTCSeconds()},null,0,59),r("minutes",function(e){return new Date(Date.UTC(1970,0,1,0,e))},function(e){return a(e).getUTCMinutes()},null,0,59),r("hours",function(e){return new Date(Date.UTC(1970,0,1,e))},function(e){return a(e).getUTCHours()},null,0,23),r("weekdays",function(e){return new Date(Date.UTC(1970,0,4+e))},function(e){return a(e).getUTCDay()},[1],0,6),r("dates",function(e){return new Date(Date.UTC(1970,0,e))},function(e){return a(e).getUTCDate()},[1],1,31),r("months",function(e){return new Date(Date.UTC(1970,e%12,1))},function(e){return a(e).getUTCMonth()},[1],0,11)],h=[[31536e6,5],[7776e6,4],[2592e6,4],[12096e5,3],[6048e5,3],[1728e5,3],[864e5,3],[432e5,2],[216e5,2],[108e5,2],[36e5,2],[18e5,1],[9e5,1],[3e5,1],[6e4,1],[3e4,0],[15e3,0],[5e3,0],[1e3,0]];t.exports=o(l),t.exports.utc=o(b)},{"d3-time":31}],37:[function(e,t,n){function a(e){return e.replace(l,"$1\\'")}function r(e,t){var n,a="";for(n=0;e>n;++n)a+=t;return a}function i(e,t,n){var a=0,r=e.split(b);return e=n?(r=r.reverse()).filter(function(e){return a+=e.length,t>=a}).reverse():r.filter(function(e){return a+=e.length,t>=a}),e.length?e.join("").trim():r[0].slice(0,t)}var f=e("buffer"),o=e("./time"),c=o.utc,u=t.exports={},s="__name__";u.namedfunc=function(e,t){return t[s]=e,t},u.name=function(e){return null==e?null:e[s]},u.identity=function(e){return e},u["true"]=u.namedfunc("true",function(){return!0}),u["false"]=u.namedfunc("false",function(){return!1}),u.duplicate=function(e){return JSON.parse(JSON.stringify(e))},u.equal=function(e,t){return JSON.stringify(e)===JSON.stringify(t)},u.extend=function(e){for(var t,n,a=1,r=arguments.length;r>a;++a){t=arguments[a];for(n in t)e[n]=t[n]}return e},u.length=function(e){return null!=e&&null!=e.length?e.length:null},u.keys=function(e){var t,n=[];for(t in e)n.push(t);return n},u.vals=function(e){var t,n=[];for(t in e)n.push(e[t]);return n},u.toMap=function(e,t){return(t=u.$(t))?e.reduce(function(e,n){return e[t(n)]=1,e},{}):e.reduce(function(e,t){return e[t]=1,e},{})},u.keystr=function(e){var t=e.length;if(!t)return"";for(var n=String(e[0]),a=1;t>a;++a)n+="|"+String(e[a]);return n};var d=Object.prototype.toString;u.isObject=function(e){return e===Object(e)},u.isFunction=function(e){return"[object Function]"===d.call(e)},u.isString=function(e){return"string"==typeof value||"[object String]"===d.call(e)},u.isArray=Array.isArray||function(e){return"[object Array]"===d.call(e)},u.isNumber=function(e){return"number"==typeof e||"[object Number]"===d.call(e)},u.isBoolean=function(e){return e===!0||e===!1||"[object Boolean]"==d.call(e)},u.isDate=function(e){return"[object Date]"===d.call(e)},u.isValid=function(e){return null!=e&&e===e},u.isBuffer=f.Buffer&&f.Buffer.isBuffer||u["false"],u.number=function(e){return null==e||""===e?null:+e},u["boolean"]=function(e){return null==e||""===e?null:"false"===e?!1:!!e},u.date=function(e){return null==e||""===e?null:Date.parse(e)},u.array=function(e){return null!=e?u.isArray(e)?e:[e]:[]},u.str=function(e){return u.isArray(e)?"["+e.map(u.str)+"]":u.isObject(e)?JSON.stringify(e):u.isString(e)?"'"+a(e)+"'":e};var l=/(^|[^\\])'/g;u.field=function(e){return String(e).split("\\.").map(function(e){return e.split(".")}).reduce(function(e,t){return e.length&&(e[e.length-1]+="."+t.shift()),e.push.apply(e,t),e},[])},u.accessor=function(e){var t;return null==e||u.isFunction(e)?e:u.namedfunc(e,(t=u.field(e)).length>1?function(e){return t.reduce(function(e,t){return e[t]},e)}:function(t){return t[e]})},u.$=u.accessor,u.mutator=function(e){var t;return u.isString(e)&&(t=u.field(e)).length>1?function(e,n){for(var a=0;ar;++r){if(f=e[r],o=f(n),c=f(a),c>o)return-1*t[r];if(o>c)return t[r]}return 0}},u.cmp=function(e,t){return t>e?-1:e>t?1:e>=t?0:null===e?-1:null===t?1:NaN},u.numcmp=function(e,t){return e-t},u.stablesort=function(e,t,n){var a=e.reduce(function(e,t,a){return e[n(t)]=a,e},{});return e.sort(function(e,r){var i=t(e),f=t(r);return f>i?-1:i>f?1:a[n(e)]-a[n(r)]}),e},u.pad=function(e,t,n,a){a=a||" ";var i=t-e.length;if(0>=i)return e;switch(n){case"left":return r(i,a)+e;case"middle":case"center":return r(Math.floor(i/2),a)+e+r(Math.ceil(i/2),a);default:return e+r(i,a)}},u.truncate=function(e,t,n,a,r){var f=e.length;if(t>=f)return e;r=void 0!==r?String(r):"…";var o=Math.max(0,t-r.length);switch(n){case"left":return r+(a?i(e,o,1):e.slice(f-o));case"middle":case"center":var c=Math.ceil(o/2),u=Math.floor(o/2);return(a?i(e,c):e.slice(0,c))+r+(a?i(e,u,1):e.slice(f-u));default:return(a?i(e,o):e.slice(0,o))+r}};var b=/([\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF])/},{"./time":36,buffer:1}]},{},[30])(30)}); +//# sourceMappingURL=vega-lite.min.js.map diff --git a/vega-lite.min.js.map b/vega-lite.min.js.map index 6565cc3516..241586604f 100644 --- a/vega-lite.min.js.map +++ b/vega-lite.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browserify/node_modules/browser-pack/_prelude.js","vega-lite.js","node_modules/colorbrewer/colorbrewer.js","node_modules/colorbrewer/index.js","node_modules/d3-color/build/color.js","node_modules/d3-format/build/format.js","node_modules/d3-time-format/build/timeFormat.js","src/Encoding.js","src/compiler/axis.js","src/compiler/compiler.js","src/compiler/data.js","src/compiler/facet.js","src/compiler/layout.js","src/compiler/legend.js","src/compiler/marks.js","src/compiler/scale.js","src/compiler/sort.js","src/compiler/stack.js","src/compiler/style.js","src/compiler/subfacet.js","src/compiler/time.js","src/consts.js","src/data.js","src/enc.js","src/field.js","src/globals.js","src/logger.js","src/schema/schema.js","src/schema/schemautil.js","src/util.js","src/vl","../../../../../usr/local/lib/node_modules/datalib/node_modules/d3-time/build/time.js","../../../../../usr/local/lib/node_modules/datalib/src/bins/bins.js","../../../../../usr/local/lib/node_modules/datalib/src/generate.js","../../../../../usr/local/lib/node_modules/datalib/src/import/type.js","../../../../../usr/local/lib/node_modules/datalib/src/stats.js","../../../../../usr/local/lib/node_modules/datalib/src/time.js","../../../../../usr/local/lib/node_modules/datalib/src/util.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","vl","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,2,"colorbrewer","YlGn",3,4,5,6,7,8,9,"YlGnBu","GnBu","BuGn","PuBuGn","PuBu","BuPu","RdPu","PuRd","OrRd","YlOrRd","YlOrBr","Purples","Blues","Greens","Oranges","Reds","Greys","PuOr",10,11,"BrBG","PRGn","PiYG","RdBu","RdGy","RdYlBu","Spectral","RdYlGn","Accent","Dark2","Paired",12,"Pastel1","Pastel2","Set1","Set2","Set3","./colorbrewer.js","factory","color","deltaHue","h1","h0","delta","Math","round","Color","format","m","trim","toLowerCase","reHex3","exec","parseInt","rgb","reHex6","rgbn","reRgbInteger","reRgbPercent","reHslPercent","hsl","named","hasOwnProperty","b","arguments","NaN","Rgb","_format","isNaN","max","toString","min","h","Hsl","range","hsl2rgb","m1","m2","lab","Lab","Hcl","deg2rad","sin","c","cos","rgb2xyz","x","xyz2lab","Xn","y","Yn","z","Zn","t3","pow","t2","t0","lab2xyz","t1","xyz2rgb","hcl","sqrt","atan2","rad2deg","cubehelix","Cubehelix","BC_DA","ED","EB","bl","k","E","C","D","interpolateCubehelixGamma","gamma","ah","as","al","bh","bs","interpolateCubehelixGammaLong","interpolateHclLong","ac","bc","interpolateHcl","interpolateLab","aa","ab","ba","bb","interpolateHslLong","interpolateHsl","interpolateRgb","ar","ag","br","bg","prototype","displayable","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","darker","brighter","____prototype","___prototype","Kn","__prototype","PI","_prototype","A","B","cosh","sinh","interpolateCubehelix","interpolateCubehelixLong","Map","clear","set","v","_","get","has","delete","Object","create",{"end":{"file":"?","comments_before":[],"nlb":false,"endpos":38757,"endcol":12,"endline":980,"pos":38753,"col":8,"line":980,"value":"size","type":"name"},"start":{"file":"?","comments_before":[],"nlb":false,"endpos":38757,"endcol":12,"endline":980,"pos":38753,"col":8,"line":980,"value":"size","type":"name"},"name":"size"},"size","forEach","apply","formatDecimal","p","toExponential","indexOf","coefficient","slice","exponent","abs","formatPrefixAuto","d","prefixExponent","floor","Array","join","formatRounded","formatDefault","toPrecision","out","i1","i0","formatSpecifier","specifier","FormatSpecifier","match","re","fill","align","sign","symbol","zero","width","comma","precision","type","formatTypes","formatGroup","grouping","thousands","value","j","push","substring","reverse","identity","locale","prefix","currency","test","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","prefixes","charCodeAt","decimal","group","Infinity","padding","formatPrefix","precisionRound","step","precisionPrefix","precisionFixed","localeFormat","definition","localeDefinitions","zhCn","ruRu","ptBr","plPl","nlNl","mkMk","jaJp","itIt","heIl","frFr","frCa","fiFi","esEs","enUs","enGb","enCa","deDe","caEs","%","toFixed","X","toUpperCase","defaultLocale","timeFormat","newInterval","floori","offseti","count","interval","date","Date","d0","d1","ceil","offset","start","stop","filter","setTime","end","weekday","setHours","setDate","getDate","getDay","getTimezoneOffset","utcWeekday","setUTCHours","setUTCDate","getUTCDate","getUTCDay","localDate","H","M","S","L","setFullYear","utcDate","UTC","setUTCFullYear","newYear","newFormat","formats","pad","string","pads","charAt","newParse","newDate","parseSpecifier","day","U","W","w","Z","parse","parses","parseShortWeekday","shortWeekdayRe","shortWeekdayLookup","parseWeekday","weekdayRe","weekdayLookup","parseShortMonth","shortMonthRe","shortMonthLookup","parseMonth","monthRe","monthLookup","parseLocaleDateTime","locale_dateTime","parseLocaleDate","locale_date","parseLocaleTime","locale_time","parsePeriod","periodLookup","formatShortWeekday","locale_shortWeekdays","formatWeekday","locale_weekdays","formatShortMonth","locale_shortMonths","getMonth","formatMonth","locale_months","formatPeriod","locale_periods","getHours","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","getUTCMonth","formatUTCMonth","formatUTCPeriod","getUTCHours","dateTime","time","periods","days","shortDays","months","shortMonths","formatLookup","formatRe","formatDayOfMonth","formatHour24","I","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekNumberSunday","formatWeekdayNumber","formatWeekNumberMonday","formatYear","Y","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekNumberSunday","formatUTCWeekdayNumber","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parseDayOfMonth","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseSeconds","parseWeekNumberSunday","parseWeekdayNumber","parseWeekNumberMonday","parseYear","parseFullYear","parseZone","parseLiteralPercent","utcFormat","requote","replace","requoteRe","names","RegExp","map","numberRe","percentRe","year","getMilliseconds","getMinutes","getSeconds","sunday","monday","getFullYear","utcDay","utcYear","getUTCMilliseconds","getUTCMinutes","getUTCSeconds","utcSunday","utcMonday","getUTCFullYear","formatIsoNative","toISOString","setMonth","setUTCMonth","-","0","isoSpecifier","formatIso","isoFormat","consts","util","vlfield","vlenc","schema","Encoding","spec","theme","defaults","instantiate","specExtended","merge","_data","data","_marktype","marktype","_enc","encoding","_config","config","_filter","proto","fromShorthand","shorthand","split","delim","shift","assign","enc","fromSpec","toShorthand","specFromShorthand","excludeConfig","toSpec","excludeData","duplicate","subtract","is","encType","undefined","name","field","et","fieldRef","opt","_vega2","fieldName","fields","fieldTitle","isCount","displayName","fn","aggregate","timeUnit","bin","uppercase","scale","axis","bandSize","useSmallBand","ROW","COL","band","maxbins","MAXBINS_DEFAULT","numberFormat","fieldStats","formatConfig","sort","stats","isTypes","toggleSort","support","Q","qField","N","O","reduce","init","isType","isOrdinalScale","isDimension","isMeasure","isAggregate","dataTable","AGGREGATE","RAW","alwaysNoOcclusion","isStack","details","refs","facets","cardinality","isRaw","hasValues","vals","values","transpose","oldenc","row","col","direction","mode","toggleFilterNullO","filterNull","T","fieldList","containsType","nulls","./consts","./enc","./field","./globals","./schema/schema","./util","setter","getter","def","layout","isCol","isRow","properties","layer","orient","labels","angle","ticks","rotate","titleOffset","grid","title","hideTicks","cellPadding","cellWidth","cellHeight","stroke","opacity","x2","mult","majorTicks","ax","maxLength","titleMaxLength","truncate","baseline","dy","height","hasScale","maxLabelLength","labelAngle","../globals","../util","./time","summary","compiler","legend","marks","facet","stack","style","subfacet","compile","compileEncoding","console","error","scales","_name","enter","mdefs","mdef","lineType","line","from","transform","by","singleScaleNames","concat","markProps","update","legends","defs","axes","../Encoding","./axis","./data","./facet","./layout","./legend","./marks","./scale","./sort","./stack","./style","./subfacet","datalib/src/stats","raw","filterNonPositive","url","formatParse","nullFilter","BINARY",">",">=","=","!=","<","<=","expr","formula","nofn","output","filteredFields","filters","condition","operator","operands","warn","op1","op2","dims","meas","op","source","groupby","../field","groupdef","faceting","axesGrp","facetKeys","cellAxes","hasRow","hasCol","mark","unshift","keys","trans","vllayout","box","hasX","hasY","xCardinality","yCardinality","TEXT","colCardinality","rowCardinality","getMaxNumberLength","d3_format","getMaxLength","extraOffset","d3-format",13,"COLOR","SIZE","SHAPE","shape","symbols","filled","strokeWidth","leg",14,"bar_props","xc","y2","yc","point_props","line_props","area_props","tick_props","filled_point_props","text_props","fontSize","font","text","template","placeholder","family","fontWeight","weight","fontStyle","prop","bar","supportedEncoding","requiredEncoding","detail","area","tick","circle","square","point",15,"interpolate","vlsort","props","domain","fieldStat","bins","getbins","numbins","STACKED","prefn","scaleUseRawDomain","useRawDomain","notCountOrSum","isOrdinalFn","getDataName","bandWidth","nice","outerPadding","points","colorScale","ordinalPalette","quantitativeRange","c10palette","c20palette","palette","ps","to","interpolator","../schema/schema","d3-color",16,"datasetMapping","sortBy","byClause","dataName","transforms",17,"stacking","dim","val","idx","isXMeasure","isYMeasure","stacked","y1","y0",18,"estimateOpacity","numPoints","numMultiples",19,"subfaceting",20,"d3_time_format","LONG_DATE","stat","yearstat","distinct","scaleLabel","labelLength","substr","isColor","d3-time-format",21,"encodingTypes","DETAIL","func",22,"vldata","types","boolean","number","integer","profile","*",23,"encTypes","countRetinal","fieldDef","arr","isArray","enctype",24,"shorthands","timefns","tu","./compiler/time",25,"INDEX",26,"METHODS","logger","cfn","bind","Function",27,"toMap","enum","supportedEnums","supportedTypes","getSupportedRole","supportedRole","timeUnits","defaultTimeFn","scale_type","default","clone","minimum","description","typicalField","onlyOrdinalField","dimension","axisMixin","supportedMarktypes","maximum","sortMixin","items","required","bandMixin","legendMixin","textMixin","role","margin","sizeMixin","colorMixin","minItems","maxItems","shapeMixin","detailMixin","rowMixin","colMixin","facetMixin","requiredNameType","multiRoleField","measure","quantitativeField","onlyQuantitativeField","additionalProperties","viewport","gridColor","gridOpacity","autoSortLine","singleHeight","singleWidth","largeBandSize","smallBandSize","largeBandMaxCardinality","cellGridColor","cellGridOpacity","cellBackgroundColor","textCellWidth","singleBarOffset","timeScaleLabelLength","dayScaleLabel","monthScaleLabel","characterWidth","maxSmallNumber","smallNumberFormat","largeNumberFormat","$schema","./schemautil",28,"dest","src","constructor","schemautil","isEmpty","obj","extend","instance","isObject","changes","ins",29,"isin","item","array","thisArg","any","all","noaugment","./logger","datalib/src/bins/bins","datalib/src/generate","datalib/src/util",30,"./Encoding","./compiler/compiler",31,"second","setMilliseconds","seconds","minute","setSeconds","minutes","hour","setMinutes","hours","sundays","mondays","tuesday","tuesdays","wednesday","wednesdays","thursday","thursdays","friday","fridays","saturday","saturdays","week","weeks","month","years","utcSecond","setUTCMilliseconds","utcSeconds","utcMinute","setUTCSeconds","utcMinutes","utcHour","setUTCMinutes","utcHours","utcDays","utcSundays","utcMondays","utcTuesday","utcTuesdays","utcWednesday","utcWednesdays","utcThursday","utcThursdays","utcFriday","utcFridays","utcSaturday","utcSaturdays","utcWeek","utcWeeks","utcMonth","utcMonths","utcYears",32,"level","minstep","eps","maxb","base","logb","log","div","span","steps","bisect","unit","index","lo","hi","mid","cmp","EPSILON","date_value","date_index","units","utc","dmin","dmax","minb","minbins","find","../time",33,"gen","repeat","zeros","random","uniform","samples","normal","mean","stdev","next","rds",34,"annotation","TYPES","$","isString","isValid","isDate","isNumber","isBoolean","typeAll","infer","TESTS","splice","inferAll","PARSERS","parsers",35,"unique","results","valid","missing","median","quantile","quartile","q","sum","variance","M2","modeskew","avg","med","std","extent","dot","rank","mu","comparator","tie","cor","mua","mub","sda","sdb","ra","rb","dist","mat","exp","isFunction","L2","R","entropy","counts","LN2","mutual","px","py","info","sd","q1","q3","__summary__","./generate","./import/type",36,"tempDate","entry","STEPS","toUnitMap","d3_time","baseDate","utcBaseDate","d3-time",37,"util_escape_str","escape_str_re","strrep","str","truncateOnWord","len","rev","cnt","tok","truncate_word_re","buffer","FNAME","namedfunc","JSON","stringify","equal","list","keystr","String","isBuffer","Buffer","accessor","mutator","$func","$valid","$length","$in","$year","$month","$date","dates","$day","weekdays","$hour","$minute","$second","$utcYear","$utcMonth","$utcDate","$utcDay","$utcHour","$utcMinute","$utcSecond","numcmp","stablesort","keyFn","indices","sa","sb","pos","padchar","word","ellipsis","l1","l2"],"mappings":"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","file":"vega-lite.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 180 || delta < -180\n ? delta - 360 * Math.round(delta / 360)\n : delta;\n }\n\n function Color() {}var reHex3 = /^#([0-9a-f]{3})$/;\n var reHex6 = /^#([0-9a-f]{6})$/;\n var reRgbInteger = /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\n var reRgbPercent = /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var reHslPercent = /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n color.prototype = Color.prototype = {\n displayable: function() {\n return this.rgb().displayable();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n };\n\n function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf))) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? rgb(m[1], m[2], m[3]) // rgb(255,0,0)\n : (m = reRgbPercent.exec(format)) ? rgb(m[1] * 2.55, m[2] * 2.55, m[3] * 2.55) // rgb(100%,0%,0%)\n : (m = reHslPercent.exec(format)) ? hsl(m[1], m[2] * .01, m[3] * .01) // hsl(120,50%,50%)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : null;\n }function rgbn(n) {\n return rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff);\n }\n\n var named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n };\n\n var darker = .7;\n var brighter = 1 / darker;\n\n function rgb(r, g, b) {\n if (arguments.length === 1) {\n if (!(r instanceof Color)) r = color(r);\n if (r) {\n r = r.rgb();\n b = r.b;\n g = r.g;\n r = r.r;\n } else {\n r = g = b = NaN;\n }\n }\n return new Rgb(r, g, b);\n }function Rgb(r, g, b) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n }var ____prototype = rgb.prototype = Rgb.prototype = new Color;\n\n ____prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k);\n };\n\n ____prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k);\n };\n\n ____prototype.rgb = function() {\n return this;\n };\n\n ____prototype.displayable = function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255);\n };\n\n ____prototype.toString = function() {\n return _format(this.r, this.g, this.b);\n };\n\n function _format(r, g, b) {\n return \"#\"\n + (isNaN(r) ? \"00\" : (r = Math.round(r)) < 16 ? \"0\" + Math.max(0, r).toString(16) : Math.min(255, r).toString(16))\n + (isNaN(g) ? \"00\" : (g = Math.round(g)) < 16 ? \"0\" + Math.max(0, g).toString(16) : Math.min(255, g).toString(16))\n + (isNaN(b) ? \"00\" : (b = Math.round(b)) < 16 ? \"0\" + Math.max(0, b).toString(16) : Math.min(255, b).toString(16));\n }\n\n function hsl(h, s, l) {\n if (arguments.length === 1) {\n if (h instanceof Hsl) {\n l = h.l;\n s = h.s;\n h = h.h;\n } else {\n if (!(h instanceof Color)) h = color(h);\n if (h) {\n if (h instanceof Hsl) return h;\n h = h.rgb();\n var r = h.r / 255,\n g = h.g / 255,\n b = h.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n range = max - min;\n l = (max + min) / 2;\n if (range) {\n s = l < .5 ? range / (max + min) : range / (2 - max - min);\n if (r === max) h = (g - b) / range + (g < b) * 6;\n else if (g === max) h = (b - r) / range + 2;\n else h = (r - g) / range + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n } else {\n h = s = l = NaN;\n }\n }\n }\n return new Hsl(h, s, l);\n }function Hsl(h, s, l) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n }var ___prototype = hsl.prototype = Hsl.prototype = new Color;\n\n ___prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k);\n };\n\n ___prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k);\n };\n\n ___prototype.rgb = function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < .5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2)\n );\n };\n\n ___prototype.displayable = function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1);\n };\n\n /* From FvD 13.37, CSS Color Module Level 3 */\n function hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n }\n\n var Kn = 18;\n\n var Xn = 0.950470;\n var Yn = 1;\n var Zn = 1.088830;\n var t0 = 4 / 29;\n var t1 = 6 / 29;\n var t2 = 3 * t1 * t1;\n var t3 = t1 * t1 * t1;\n function lab(l, a, b) {\n if (arguments.length === 1) {\n if (l instanceof Lab) {\n b = l.b;\n a = l.a;\n l = l.l;\n } else if (l instanceof Hcl) {\n var h = l.h * deg2rad;\n b = Math.sin(h) * l.c;\n a = Math.cos(h) * l.c;\n l = l.l;\n } else {\n if (!(l instanceof Rgb)) l = rgb(l);\n var r = rgb2xyz(l.r),\n g = rgb2xyz(l.g),\n b = rgb2xyz(l.b),\n x = xyz2lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / Xn),\n y = xyz2lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / Yn),\n z = xyz2lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / Zn);\n b = 200 * (y - z);\n a = 500 * (x - y);\n l = 116 * y - 16;\n }\n }\n return new Lab(l, a, b);\n }function Lab(l, a, b) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n }var __prototype = lab.prototype = Lab.prototype = new Color;\n\n __prototype.brighter = function(k) {\n return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b);\n };\n\n __prototype.darker = function(k) {\n return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b);\n };\n\n __prototype.rgb = function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Rgb(\n xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z)\n );\n };\n\n function xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n }\n\n function lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n }\n\n function xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n }\n\n function rgb2xyz(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n }\n\n var deg2rad = Math.PI / 180;\n var rad2deg = 180 / Math.PI;\n\n function hcl(h, c, l) {\n if (arguments.length === 1) {\n if (h instanceof Hcl) {\n l = h.l;\n c = h.c;\n h = h.h;\n } else {\n if (!(h instanceof Lab)) h = lab(h);\n l = h.l;\n c = Math.sqrt(h.a * h.a + h.b * h.b);\n h = Math.atan2(h.b, h.a) * rad2deg;\n if (h < 0) h += 360;\n }\n }\n return new Hcl(h, c, l);\n }function Hcl(h, c, l) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n }var _prototype = hcl.prototype = Hcl.prototype = new Color;\n\n _prototype.brighter = function(k) {\n return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k));\n };\n\n _prototype.darker = function(k) {\n return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k));\n };\n\n _prototype.rgb = function() {\n return lab(this).rgb();\n };\n\n var A = -0.14861;\n var B = +1.78277;\n var C = -0.29227;\n var D = -0.90649;\n var E = +1.97294;\n var ED = E * D;\n var EB = E * B;\n var BC_DA = B * C - D * A;\n function cubehelix(h, s, l) {\n if (arguments.length === 1) {\n if (h instanceof Cubehelix) {\n l = h.l;\n s = h.s;\n h = h.h;\n } else {\n if (!(h instanceof Rgb)) h = rgb(h);\n var r = h.r / 255, g = h.g / 255, b = h.b / 255;\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB);\n var bl = b - l, k = (E * (g - l) - C * bl) / D;\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)); // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n if (h < 0) h += 360;\n }\n }\n return new Cubehelix(h, s, l);\n }function Cubehelix(h, s, l) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n }var prototype = cubehelix.prototype = Cubehelix.prototype = new Color;\n\n prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k);\n };\n\n prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k);\n };\n\n prototype.rgb = function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh))\n );\n };\n\n function interpolateCubehelixGamma(gamma) {\n return function(a, b) {\n a = cubehelix(a);\n b = cubehelix(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * Math.pow(t, gamma);\n return a + \"\";\n };\n };\n }\n\n function interpolateCubehelixGammaLong(gamma) {\n return function(a, b) {\n a = cubehelix(a);\n b = cubehelix(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * Math.pow(t, gamma);\n return a + \"\";\n };\n };\n }\n\n function interpolateHclLong(a, b) {\n a = hcl(a);\n b = hcl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n ac = isNaN(a.c) ? b.c : a.c,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bc = isNaN(b.c) ? 0 : b.c - ac,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.c = ac + bc * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateHcl(a, b) {\n a = hcl(a);\n b = hcl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n ac = isNaN(a.c) ? b.c : a.c,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bc = isNaN(b.c) ? 0 : b.c - ac,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.c = ac + bc * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateLab(a, b) {\n a = lab(a);\n b = lab(b);\n var al = a.l,\n aa = a.a,\n ab = a.b,\n bl = b.l - al,\n ba = b.a - aa,\n bb = b.b - ab;\n return function(t) {\n a.l = al + bl * t;\n a.a = aa + ba * t;\n a.b = ab + bb * t;\n return a + \"\";\n };\n }\n\n function interpolateHslLong(a, b) {\n a = hsl(a);\n b = hsl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateHsl(a, b) {\n a = hsl(a);\n b = hsl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateRgb(a, b) {\n a = rgb(a);\n b = rgb(b);\n var ar = a.r,\n ag = a.g,\n ab = a.b,\n br = b.r - ar,\n bg = b.g - ag,\n bb = b.b - ab;\n return function(t) {\n return _format(Math.round(ar + br * t), Math.round(ag + bg * t), Math.round(ab + bb * t));\n };\n }\n\n var interpolateCubehelix = interpolateCubehelixGamma(1);\n var interpolateCubehelixLong = interpolateCubehelixGammaLong(1);\n\n exports.interpolateCubehelix = interpolateCubehelix;\n exports.interpolateCubehelixLong = interpolateCubehelixLong;\n exports.color = color;\n exports.rgb = rgb;\n exports.hsl = hsl;\n exports.lab = lab;\n exports.hcl = hcl;\n exports.cubehelix = cubehelix;\n exports.interpolateRgb = interpolateRgb;\n exports.interpolateHsl = interpolateHsl;\n exports.interpolateHslLong = interpolateHslLong;\n exports.interpolateLab = interpolateLab;\n exports.interpolateHcl = interpolateHcl;\n exports.interpolateHclLong = interpolateHclLong;\n exports.interpolateCubehelixGamma = interpolateCubehelixGamma;\n exports.interpolateCubehelixGammaLong = interpolateCubehelixGammaLong;\n\n}));\n},{}],5:[function(require,module,exports){\nif (typeof Map === \"undefined\") {\n Map = function() { this.clear(); };\n Map.prototype = {\n set: function(k, v) { this._[k] = v; return this; },\n get: function(k) { return this._[k]; },\n has: function(k) { return k in this._; },\n delete: function(k) { return k in this._ && delete this._[k]; },\n clear: function() { this._ = Object.create(null); },\n get size() { var n = 0; for (var k in this._) ++n; return n; },\n forEach: function(c) { for (var k in this._) c(this._[k], k, this); }\n };\n} else (function() {\n var m = new Map;\n if (m.set(0, 0) !== m) {\n m = m.set;\n Map.prototype.set = function() { m.apply(this, arguments); return this; };\n }\n})();\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n factory((global.format = {}));\n}(this, function (exports) { 'use strict';\n\n var zhCn = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"¥\", \"\"]\n };\n\n var ruRu = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"\\xa0руб.\"]\n };\n\n var ptBr = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"R$\", \"\"]\n };\n\n var plPl = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"zł\"]\n };\n\n var nlNl = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\\xa0\", \"\"]\n };\n\n var mkMk = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0ден.\"]\n };\n\n var jaJp = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"\", \"円\"]\n };\n\n var itIt = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"]\n };\n\n var heIl = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"₪\", \"\"]\n };\n\n var frFr = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var frCa = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"$\"]\n };\n\n var fiFi = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var esEs = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var enUs = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n };\n\n var enGb = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"£\", \"\"]\n };\n\n var enCa = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n };\n\n var deDe = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var caEs = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n }\n\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n\n var prefixExponent;\n\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, p + i - 1)[0]; // less than 1y!\n }\n\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n\n function formatDefault(x, p) {\n x = x.toPrecision(p);\n\n out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (x[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n case \"e\": break out;\n default: if (i0 > 0) i0 = 0; break;\n }\n }\n\n return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n }\n\n var formatTypes = {\n \"\": formatDefault,\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n };\n\n\n // [[fill]align][sign][symbol][0][width][,][.precision][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\n function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n }\n\n function FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n var match,\n fill = match[1] || \" \",\n align = match[2] || \">\",\n sign = match[3] || \"-\",\n symbol = match[4] || \"\",\n zero = !!match[5],\n width = match[6] && +match[6],\n comma = !!match[7],\n precision = match[8] && +match[8].slice(1),\n type = match[9] || \"\";\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // Map invalid types to the default format.\n else if (!formatTypes[type]) type = \"\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n this.fill = fill;\n this.align = align;\n this.sign = sign;\n this.symbol = symbol;\n this.zero = zero;\n this.width = width;\n this.comma = comma;\n this.precision = precision;\n this.type = type;\n }\n\n FormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + this.type;\n };\n\n function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n }\n\n var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n function identity(x) {\n return x;\n }\n\n function locale(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal;\n\n function format(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n type = specifier.type;\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = !type || /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? (type ? 6 : 12)\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n return function(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Convert negative to positive, and compute the prefix.\n // Note that -0 is not less than 0, but 1 / -0 is!\n var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\n // Perform the initial formatting.\n value = formatType(value, precision);\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n var i = -1, n = value.length, c;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": return valuePrefix + value + valueSuffix + padding;\n case \"=\": return valuePrefix + padding + value + valueSuffix;\n case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n }\n return padding + valuePrefix + value + valueSuffix;\n };\n }\n\n function formatPrefix(specifier, value) {\n var f = format((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: format,\n formatPrefix: formatPrefix\n };\n }\n\n function precisionRound(step, max) {\n return Math.max(0, exponent(Math.abs(max)) - exponent(Math.abs(step))) + 1;\n }\n\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n\n var localeDefinitions = (new Map)\n .set(\"ca-ES\", caEs)\n .set(\"de-DE\", deDe)\n .set(\"en-CA\", enCa)\n .set(\"en-GB\", enGb)\n .set(\"en-US\", enUs)\n .set(\"es-ES\", esEs)\n .set(\"fi-FI\", fiFi)\n .set(\"fr-CA\", frCa)\n .set(\"fr-FR\", frFr)\n .set(\"he-IL\", heIl)\n .set(\"it-IT\", itIt)\n .set(\"ja-JP\", jaJp)\n .set(\"mk-MK\", mkMk)\n .set(\"nl-NL\", nlNl)\n .set(\"pl-PL\", plPl)\n .set(\"pt-BR\", ptBr)\n .set(\"ru-RU\", ruRu)\n .set(\"zh-CN\", zhCn);\n\n var defaultLocale = locale(enUs);\n exports.format = defaultLocale.format;\n exports.formatPrefix = defaultLocale.formatPrefix;\n\n function localeFormat(definition) {\n if (typeof definition === \"string\") {\n definition = localeDefinitions.get(definition);\n if (!definition) return null;\n }\n return locale(definition);\n }\n ;\n\n exports.localeFormat = localeFormat;\n exports.formatSpecifier = formatSpecifier;\n exports.precisionFixed = precisionFixed;\n exports.precisionPrefix = precisionPrefix;\n exports.precisionRound = precisionRound;\n\n}));\n},{}],6:[function(require,module,exports){\nif (typeof Map === \"undefined\") {\n Map = function() { this.clear(); };\n Map.prototype = {\n set: function(k, v) { this._[k] = v; return this; },\n get: function(k) { return this._[k]; },\n has: function(k) { return k in this._; },\n delete: function(k) { return k in this._ && delete this._[k]; },\n clear: function() { this._ = Object.create(null); },\n get size() { var n = 0; for (var k in this._) ++n; return n; },\n forEach: function(c) { for (var k in this._) c(this._[k], k, this); }\n };\n} else (function() {\n var m = new Map;\n if (m.set(0, 0) !== m) {\n m = m.set;\n Map.prototype.set = function() { m.apply(this, arguments); return this; };\n }\n})();\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n factory((global.timeFormat = {}));\n}(this, function (exports) { 'use strict';\n\n var zhCn = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%Y/%-m/%-d\",\n time: \"%H:%M:%S\",\n periods: [\"上午\", \"下午\"],\n days: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n shortDays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n months: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n shortMonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"]\n };\n\n var ruRu = {\n dateTime: \"%A, %e %B %Y г. %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"воскресенье\", \"понедельник\", \"вторник\", \"среда\", \"четверг\", \"пятница\", \"суббота\"],\n shortDays: [\"вс\", \"пн\", \"вт\", \"ср\", \"чт\", \"пт\", \"сб\"],\n months: [\"января\", \"февраля\", \"марта\", \"апреля\", \"мая\", \"июня\", \"июля\", \"августа\", \"сентября\", \"октября\", \"ноября\", \"декабря\"],\n shortMonths: [\"янв\", \"фев\", \"мар\", \"апр\", \"май\", \"июн\", \"июл\", \"авг\", \"сен\", \"окт\", \"ноя\", \"дек\"]\n };\n\n var ptBr = {\n dateTime: \"%A, %e de %B de %Y. %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"],\n shortDays: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"],\n months: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n shortMonths: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"]\n };\n\n var plPl = {\n dateTime: \"%A, %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"],\n shortDays: [\"Niedz.\", \"Pon.\", \"Wt.\", \"Śr.\", \"Czw.\", \"Pt.\", \"Sob.\"],\n months: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\n shortMonths: [\"Stycz.\", \"Luty\", \"Marz.\", \"Kwie.\", \"Maj\", \"Czerw.\", \"Lipc.\", \"Sierp.\", \"Wrz.\", \"Paźdz.\", \"Listop.\", \"Grudz.\"]/* In Polish language abbraviated months are not commonly used so there is a dispute about the proper abbraviations. */\n };\n\n var nlNl = {\n dateTime: \"%a %e %B %Y %T\",\n date: \"%d-%m-%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"zondag\", \"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"],\n shortDays: [\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"],\n months: [\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"],\n shortMonths: [\"jan\", \"feb\", \"mrt\", \"apr\", \"mei\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"]\n };\n\n var mkMk = {\n dateTime: \"%A, %e %B %Y г. %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"недела\", \"понеделник\", \"вторник\", \"среда\", \"четврток\", \"петок\", \"сабота\"],\n shortDays: [\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"],\n months: [\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"],\n shortMonths: [\"јан\", \"фев\", \"мар\", \"апр\", \"мај\", \"јун\", \"јул\", \"авг\", \"сеп\", \"окт\", \"ное\", \"дек\"]\n };\n\n var itIt = {\n dateTime: \"%A %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"],\n shortDays: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"],\n months: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\n shortMonths: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"]\n };\n\n var heIl = {\n dateTime: \"%A, %e ב%B %Y %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\n shortDays: [\"א׳\", \"ב׳\", \"ג׳\", \"ד׳\", \"ה׳\", \"ו׳\", \"ש׳\"],\n months: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\n shortMonths: [\"ינו׳\", \"פבר׳\", \"מרץ\", \"אפר׳\", \"מאי\", \"יוני\", \"יולי\", \"אוג׳\", \"ספט׳\", \"אוק׳\", \"נוב׳\", \"דצמ׳\"]\n };\n\n var frFr = {\n dateTime: \"%A, le %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n shortDays: [\"dim.\", \"lun.\", \"mar.\", \"mer.\", \"jeu.\", \"ven.\", \"sam.\"],\n months: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n shortMonths: [\"janv.\", \"févr.\", \"mars\", \"avr.\", \"mai\", \"juin\", \"juil.\", \"août\", \"sept.\", \"oct.\", \"nov.\", \"déc.\"]\n };\n\n var frCa = {\n dateTime: \"%a %e %b %Y %X\",\n date: \"%Y-%m-%d\",\n time: \"%H:%M:%S\",\n periods: [\"\", \"\"],\n days: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n shortDays: [\"dim\", \"lun\", \"mar\", \"mer\", \"jeu\", \"ven\", \"sam\"],\n months: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n shortMonths: [\"jan\", \"fév\", \"mar\", \"avr\", \"mai\", \"jui\", \"jul\", \"aoû\", \"sep\", \"oct\", \"nov\", \"déc\"]\n };\n\n var fiFi = {\n dateTime: \"%A, %-d. %Bta %Y klo %X\",\n date: \"%-d.%-m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"a.m.\", \"p.m.\"],\n days: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"],\n shortDays: [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"],\n months: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"],\n shortMonths: [\"Tammi\", \"Helmi\", \"Maalis\", \"Huhti\", \"Touko\", \"Kesä\", \"Heinä\", \"Elo\", \"Syys\", \"Loka\", \"Marras\", \"Joulu\"]\n };\n\n var esEs = {\n dateTime: \"%A, %e de %B de %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"domingo\", \"lunes\", \"martes\", \"miércoles\", \"jueves\", \"viernes\", \"sábado\"],\n shortDays: [\"dom\", \"lun\", \"mar\", \"mié\", \"jue\", \"vie\", \"sáb\"],\n months: [\"enero\", \"febrero\", \"marzo\", \"abril\", \"mayo\", \"junio\", \"julio\", \"agosto\", \"septiembre\", \"octubre\", \"noviembre\", \"diciembre\"],\n shortMonths: [\"ene\", \"feb\", \"mar\", \"abr\", \"may\", \"jun\", \"jul\", \"ago\", \"sep\", \"oct\", \"nov\", \"dic\"]\n };\n\n var enUs = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var enGb = {\n dateTime: \"%a %e %b %X %Y\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var enCa = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%Y-%m-%d\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var deDe = {\n dateTime: \"%A, der %e. %B %Y, %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n shortDays: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n months: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mrz\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"]\n };\n\n var caEs = {\n dateTime: \"%A, %e de %B de %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"diumenge\", \"dilluns\", \"dimarts\", \"dimecres\", \"dijous\", \"divendres\", \"dissabte\"],\n shortDays: [\"dg.\", \"dl.\", \"dt.\", \"dc.\", \"dj.\", \"dv.\", \"ds.\"],\n months: [\"gener\", \"febrer\", \"març\", \"abril\", \"maig\", \"juny\", \"juliol\", \"agost\", \"setembre\", \"octubre\", \"novembre\", \"desembre\"],\n shortMonths: [\"gen.\", \"febr.\", \"març\", \"abr.\", \"maig\", \"juny\", \"jul.\", \"ag.\", \"set.\", \"oct.\", \"nov.\", \"des.\"]\n };\n\n var t0 = new Date;\n var t1 = new Date;\n\n function newInterval(floori, offseti, count) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.round = function(date) {\n var d0 = new Date(+date),\n d1 = new Date(date - 1);\n floori(d0), floori(d1), offseti(d1, 1);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), date;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [];\n start = new Date(start - 1);\n stop = new Date(+stop);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n offseti(start, 1), floori(start);\n if (start < stop) range.push(new Date(+start));\n while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start));\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n while (--step >= 0) while (offseti(date, 1), !test(date));\n });\n };\n\n if (count) interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n return interval;\n }\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5;\n });\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5;\n });\n }\n\n var sunday = weekday(0);\n var monday = weekday(1);\n\n var year = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n });\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / 864e5;\n });\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / 6048e5;\n });\n }\n\n var utcSunday = utcWeekday(0);\n var utcMonday = utcWeekday(1);\n\n var utcYear = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCMonth(0, 1);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n });\n\n function localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n function utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n function newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n }\n\n function locale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"S\": formatSeconds,\n \"U\": formatWeekNumberSunday,\n \"w\": formatWeekdayNumber,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"S\": formatUTCSeconds,\n \"U\": formatUTCWeekNumberSunday,\n \"w\": formatUTCWeekdayNumber,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"S\": parseSeconds,\n \"U\": parseWeekNumberSunday,\n \"w\": parseWeekdayNumber,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n if (format = formats[c]) c = format(date, pad == null ? (c === \"e\" ? \" \" : \"0\") : pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string, 0);\n if (i != string.length) return null;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n var day = utcDate(newYear(d.y)).getUTCDay();\n if (\"W\" in d) d.U = d.W, d.w = (d.w + 6) % 7, --day;\n d.m = 0;\n d.d = d.w + d.U * 7 - (day + 6) % 7;\n }\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n var day = newDate(newYear(d.y)).getDay();\n if (\"W\" in d) d.U = d.W, d.w = (d.w + 6) % 7, --day;\n d.m = 0;\n d.d = d.w + d.U * 7 - (day + 6) % 7;\n }\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function parsePeriod(d, string, i) {\n var n = periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (d.p = n, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.parse = newParse(specifier, localDate);\n f.toString = function() { return specifier; };\n return f;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.parse = newParse(specifier, utcDate);\n f.toString = function() { return specifier; };\n return f;\n }\n };\n }\n\n var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\n var numberRe = /^\\s*\\d+/;\n var percentRe = /^%/;\n var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n function pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n function requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n }\n\n function formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n }\n\n function formatLookup(names) {\n var map = new Map, i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n\n function parseWeekdayNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n\n function parseZone(d, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5))\n ? (d.Z = -string, i + 5) // sign differs from getTimezoneOffset!\n : -1;\n }\n\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n }\n\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n\n function formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n }\n\n function formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n }\n\n function formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n }\n\n function formatDayOfYear(d, p) {\n return pad(1 + day.count(year(d), d), p, 3);\n }\n\n function formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n }\n\n function formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n }\n\n function formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n }\n\n function formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n }\n\n function formatWeekNumberSunday(d, p) {\n return pad(sunday.count(year(d), d), p, 2);\n }\n\n function formatWeekdayNumber(d) {\n return d.getDay();\n }\n\n function formatWeekNumberMonday(d, p) {\n return pad(monday.count(year(d), d), p, 2);\n }\n\n function formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n }\n\n function formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n }\n\n function formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n }\n\n function formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n }\n\n function formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n }\n\n function formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n }\n\n function formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n }\n\n function formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n }\n\n function formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n }\n\n function formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n }\n\n function formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n }\n\n function formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n }\n\n function formatUTCWeekdayNumber(d) {\n return d.getUTCDay();\n }\n\n function formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n }\n\n function formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n }\n\n function formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n }\n\n function formatUTCZone() {\n return \"+0000\";\n }\n\n function formatLiteralPercent() {\n return \"%\";\n }\n\n var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n function formatIsoNative(date) {\n return date.toISOString();\n }\n\n formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n\n formatIsoNative.toString = function() {\n return isoSpecifier;\n };\n\n var formatIso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\")\n ? formatIsoNative\n : enUs.utcFormat(isoSpecifier);\n\n var isoFormat = formatIso;\n\n var localeDefinitions = (new Map)\n .set(\"ca-ES\", caEs)\n .set(\"de-DE\", deDe)\n .set(\"en-CA\", enCa)\n .set(\"en-GB\", enGb)\n .set(\"en-US\", enUs)\n .set(\"es-ES\", esEs)\n .set(\"fi-FI\", fiFi)\n .set(\"fr-CA\", frCa)\n .set(\"fr-FR\", frFr)\n .set(\"he-IL\", heIl)\n .set(\"it-IT\", itIt)\n .set(\"mk-MK\", mkMk)\n .set(\"nl-NL\", nlNl)\n .set(\"pl-PL\", plPl)\n .set(\"pt-BR\", ptBr)\n .set(\"ru-RU\", ruRu)\n .set(\"zh-CN\", zhCn);\n\n var defaultLocale = locale(enUs);\n exports.format = defaultLocale.format;\n exports.utcFormat = defaultLocale.utcFormat;\n\n function localeFormat(definition) {\n if (typeof definition === \"string\") {\n definition = localeDefinitions.get(definition);\n if (!definition) return null;\n }\n return locale(definition);\n }\n ;\n\n exports.localeFormat = localeFormat;\n exports.isoFormat = isoFormat;\n\n}));\n},{}],7:[function(require,module,exports){\n'use strict';\n\nrequire('./globals');\n\nvar consts = require('./consts'),\n util = require('./util'),\n vlfield = require('./field'),\n vlenc = require('./enc'),\n schema = require('./schema/schema');\n\nmodule.exports = (function() {\n function Encoding(spec, theme) {\n var defaults = schema.instantiate(),\n specExtended = schema.util.merge(defaults, theme || {}, spec) ;\n\n this._data = specExtended.data;\n this._marktype = specExtended.marktype;\n this._enc = specExtended.encoding;\n this._config = specExtended.config;\n this._filter = specExtended.filter;\n // this._vega2 = true;\n }\n\n var proto = Encoding.prototype;\n\n Encoding.fromShorthand = function(shorthand, data, config, theme) {\n var c = consts.shorthand,\n split = shorthand.split(c.delim),\n marktype = split.shift().split(c.assign)[1].trim(),\n enc = vlenc.fromShorthand(split);\n\n return new Encoding({\n data: data,\n marktype: marktype,\n encoding: enc,\n config: config,\n filter: []\n }, theme);\n };\n\n Encoding.fromSpec = function(spec, theme) {\n return new Encoding(spec, theme);\n };\n\n proto.toShorthand = function() {\n var c = consts.shorthand;\n return 'mark' + c.assign + this._marktype +\n c.delim + vlenc.shorthand(this._enc);\n };\n\n Encoding.shorthand = function (spec) {\n var c = consts.shorthand;\n return 'mark' + c.assign + spec.marktype +\n c.delim + vlenc.shorthand(spec.encoding);\n };\n\n Encoding.specFromShorthand = function(shorthand, data, config, excludeConfig) {\n return Encoding.fromShorthand(shorthand, data, config).toSpec(excludeConfig);\n };\n\n proto.toSpec = function(excludeConfig, excludeData) {\n var enc = util.duplicate(this._enc),\n spec;\n\n spec = {\n marktype: this._marktype,\n encoding: enc,\n filter: this._filter\n };\n\n if (!excludeConfig) {\n spec.config = util.duplicate(this._config);\n }\n\n if (!excludeData) {\n spec.data = util.duplicate(this._data);\n }\n\n // remove defaults\n var defaults = schema.instantiate();\n return schema.util.subtract(spec, defaults);\n };\n\n\n proto.marktype = function() {\n return this._marktype;\n };\n\n proto.is = function(m) {\n return this._marktype === m;\n };\n\n proto.has = function(encType) {\n // equivalent to calling vlenc.has(this._enc, encType)\n return this._enc[encType].name !== undefined;\n };\n\n proto.field = function(et) {\n return this._enc[et];\n };\n\n proto.filter = function() {\n return this._filter;\n };\n\n // get \"field\" reference for vega\n proto.fieldRef = function(et, opt) {\n opt = opt || {};\n opt.data = !this._vega2 && (opt.data !== false);\n return vlfield.fieldRef(this._enc[et], opt);\n };\n\n proto.fieldName = function(et) {\n return this._enc[et].name;\n };\n\n /*\n * return key-value pairs of field name and list of fields of that field name\n */\n proto.fields = function() {\n return vlenc.fields(this._enc);\n };\n\n proto.fieldTitle = function(et) {\n if (vlfield.isCount(this._enc[et])) {\n return vlfield.count.displayName;\n }\n var fn = this._enc[et].aggregate || this._enc[et].timeUnit || (this._enc[et].bin && 'bin');\n if (fn) {\n var uppercase = fn === 'avg' ? 'MEAN' :fn.toUpperCase();\n return uppercase + '(' + this._enc[et].name + ')';\n } else {\n return this._enc[et].name;\n }\n };\n\n proto.scale = function(et) {\n return this._enc[et].scale || {};\n };\n\n proto.axis = function(et) {\n return this._enc[et].axis || {};\n };\n\n proto.bandSize = function(encType, useSmallBand) {\n useSmallBand = useSmallBand ||\n //isBandInSmallMultiples\n (encType === Y && this.has(ROW) && this.has(Y)) ||\n (encType === X && this.has(COL) && this.has(X));\n\n // if band.size is explicitly specified, follow the specification, otherwise draw value from config.\n return this.field(encType).band.size ||\n this.config(useSmallBand ? 'smallBandSize' : 'largeBandSize');\n };\n\n proto.aggregate = function(et) {\n return this._enc[et].aggregate;\n };\n\n // returns false if binning is disabled, otherwise an object with binning properties\n proto.bin = function(et) {\n var bin = this._enc[et].bin;\n if (bin === {})\n return false;\n if (bin === true)\n return {\n maxbins: schema.MAXBINS_DEFAULT\n };\n return bin;\n };\n\n proto.value = function(et) {\n return this._enc[et].value;\n };\n\n proto.numberFormat = function(fieldStats) {\n var formatConfig = fieldStats.max > this.config('maxSmallNumber') ?\n 'largeNumberFormat': 'smallNumberFormat';\n return this.config(formatConfig);\n };\n\n proto.sort = function(et, stats) {\n var sort = this._enc[et].sort,\n enc = this._enc,\n isTypes = vlfield.isTypes;\n\n if ((!sort || sort.length===0) &&\n // FIXME\n Encoding.toggleSort.support({encoding:this._enc}, stats, true) && //HACK\n this.config('toggleSort') === Q\n ) {\n var qField = isTypes(enc.x, [N, O]) ? enc.y : enc.x;\n\n if (isTypes(enc[et], [N, O])) {\n sort = [{\n name: qField.name,\n aggregate: qField.aggregate,\n type: qField.type,\n reverse: true\n }];\n }\n }\n\n return sort;\n };\n\n proto.map = function(f) {\n return vlenc.map(this._enc, f);\n };\n\n proto.reduce = function(f, init) {\n return vlenc.reduce(this._enc, f, init);\n };\n\n proto.forEach = function(f) {\n return vlenc.forEach(this._enc, f);\n };\n\n proto.type = function(et) {\n return this.has(et) ? this._enc[et].type : null;\n };\n\n proto.isType = function(et, type) {\n var field = this.field(et);\n return field && vlfield.isType(field, type);\n };\n\n\n proto.isTypes = function(et, type) {\n var field = this.field(et);\n return field && vlfield.isTypes(field, type);\n };\n\n Encoding.isOrdinalScale = function(encoding, encType) {\n return vlfield.isOrdinalScale(encoding.field(encType));\n };\n\n Encoding.isDimension = function(encoding, encType) {\n return vlfield.isDimension(encoding.field(encType));\n };\n\n Encoding.isMeasure = function(encoding, encType) {\n return vlfield.isMeasure(encoding.field(encType));\n };\n\n proto.isOrdinalScale = function(encType) {\n return this.has(encType) && Encoding.isOrdinalScale(this, encType);\n };\n\n proto.isDimension = function(encType) {\n return this.has(encType) && Encoding.isDimension(this, encType);\n };\n\n proto.isMeasure = function(encType) {\n return this.has(encType) && Encoding.isMeasure(this, encType);\n };\n\n proto.isAggregate = function() {\n return vlenc.isAggregate(this._enc);\n };\n\n proto.dataTable = function() {\n return this.isAggregate() ? AGGREGATE : RAW;\n };\n\n Encoding.isAggregate = function(spec) {\n return vlenc.isAggregate(spec.encoding);\n };\n\n Encoding.alwaysNoOcclusion = function(spec) {\n // FIXME raw OxQ with # of rows = # of O\n return vlenc.isAggregate(spec.encoding);\n };\n\n Encoding.isStack = function(spec) {\n // FIXME update this once we have control for stack ...\n return (spec.marktype === 'bar' || spec.marktype === 'area') &&\n spec.encoding.color;\n };\n\n proto.isStack = function() {\n // FIXME update this once we have control for stack ...\n return (this.is('bar') || this.is('area')) && this.has('color');\n };\n\n proto.details = function() {\n var encoding = this;\n return this.reduce(function(refs, field, encType) {\n if (!field.aggregate && (encType !== X && encType !== Y)) {\n refs.push(encoding.fieldRef(encType));\n }\n return refs;\n }, []);\n };\n\n proto.facets = function() {\n var encoding = this;\n return this.reduce(function(refs, field, encType) {\n if (!field.aggregate && (encType == ROW || encType == COL)) {\n refs.push(encoding.fieldRef(encType));\n }\n return refs;\n }, []);\n };\n\n proto.cardinality = function(encType, stats) {\n return vlfield.cardinality(this.field(encType), stats, this.config('filterNull'));\n };\n\n proto.isRaw = function() {\n return !this.isAggregate();\n };\n\n proto.data = function() {\n return this._data;\n };\n\n // returns whether the encoding has values embedded\n proto.hasValues = function() {\n var vals = this.data().values;\n return vals && vals.length;\n };\n\n proto.config = function(name) {\n return this._config[name];\n };\n\n Encoding.transpose = function(spec) {\n var oldenc = spec.encoding,\n enc = util.duplicate(spec.encoding);\n enc.x = oldenc.y;\n enc.y = oldenc.x;\n enc.row = oldenc.col;\n enc.col = oldenc.row;\n spec.encoding = enc;\n return spec;\n };\n\n // FIXME: REMOVE everything below here\n\n Encoding.toggleSort = function(spec) {\n spec.config = spec.config || {};\n spec.config.toggleSort = spec.config.toggleSort === Q ? N : Q;\n return spec;\n };\n\n\n Encoding.toggleSort.direction = function(spec) {\n if (!Encoding.toggleSort.support(spec)) { return; }\n var enc = spec.encoding;\n return enc.x.type === N ? 'x' : 'y';\n };\n\n Encoding.toggleSort.mode = function(spec) {\n return spec.config.toggleSort;\n };\n\n Encoding.toggleSort.support = function(spec, stats) {\n var enc = spec.encoding,\n isTypes = vlfield.isTypes;\n\n if (vlenc.has(enc, ROW) || vlenc.has(enc, COL) ||\n !vlenc.has(enc, X) || !vlenc.has(enc, Y) ||\n !Encoding.alwaysNoOcclusion(spec, stats)) {\n return false;\n }\n\n return ( isTypes(enc.x, [N,O]) && vlfield.isMeasure(enc.y)) ? 'x' :\n ( isTypes(enc.y, [N,O]) && vlfield.isMeasure(enc.x)) ? 'y' : false;\n };\n\n Encoding.toggleFilterNullO = function(spec) {\n spec.config = spec.config || {};\n spec.config.filterNull = spec.config.filterNull || { //FIXME\n T: true,\n Q: true\n };\n spec.config.filterNull.O = !spec.config.filterNull.O;\n return spec;\n };\n\n Encoding.toggleFilterNullO.support = function(spec, stats) {\n var fields = vlenc.fields(spec.encoding);\n for (var fieldName in fields) {\n var fieldList = fields[fieldName];\n if (fieldList.containsType.O && fieldName in stats && stats[fieldName].nulls > 0) {\n return true;\n }\n }\n return false;\n };\n\n return Encoding;\n})();\n\n},{\"./consts\":21,\"./enc\":23,\"./field\":24,\"./globals\":25,\"./schema/schema\":27,\"./util\":29}],8:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar util = require('../util'),\n setter = util.setter,\n getter = util.getter,\n time = require('./time');\n\nvar axis = module.exports = {};\n\naxis.def = function(name, encoding, layout, stats, opt) {\n var isCol = name == COL,\n isRow = name == ROW,\n type = isCol ? 'x' : isRow ? 'y' : name;\n\n var def = {\n type: type,\n scale: name,\n properties: {},\n layer: encoding.field(name).axis.layer,\n orient: axis.orient(name, encoding, stats)\n };\n\n // Add axis label custom scale (for bin / time)\n def = axis.labels.scale(def, encoding, name);\n def = axis.labels.format(def, name, encoding, stats);\n def = axis.labels.angle(def, encoding, name);\n\n // for x-axis, set ticks for Q or rotate scale for ordinal scale\n if (name == X) {\n if ((encoding.isDimension(X) || encoding.isType(X, T)) &&\n !('angle' in getter(def, ['properties', 'labels']))) {\n // TODO(kanitw): Jul 19, 2015 - #506 add condition for rotation\n def = axis.labels.rotate(def);\n } else { // Q\n def.ticks = encoding.field(name).axis.ticks;\n }\n }\n\n // TitleOffset depends on labels rotation\n def.titleOffset = axis.titleOffset(encoding, layout, name);\n\n //def.offset is used in axis.grid\n if(isRow) def.offset = axis.titleOffset(encoding, layout, Y) + 20;\n // FIXME(kanitw): Jul 19, 2015 - offset for column when x is put on top\n\n def = axis.grid(def, name, encoding, layout);\n def = axis.title(def, name, encoding, layout, opt);\n\n if (isRow || isCol) def = axis.hideTicks(def);\n\n return def;\n};\n\naxis.orient = function(name, encoding, stats) {\n var orient = encoding.field(name).axis.orient;\n if (orient) return orient;\n\n if (name === COL) return 'top';\n\n // x-axis for long y - put on top\n if (name === X && encoding.has(Y) && encoding.isOrdinalScale(Y) && encoding.cardinality(Y, stats) > 30) {\n return 'top';\n }\n\n return undefined;\n};\n\naxis.grid = function(def, name, encoding, layout) {\n var cellPadding = layout.cellPadding,\n isCol = name == COL,\n isRow = name == ROW;\n\n if (encoding.axis(name).grid) {\n def.grid = true;\n\n if (isCol) {\n // set grid property -- put the lines on the right the cell\n def.properties.grid = {\n x: {\n offset: layout.cellWidth * (1+ cellPadding/2.0),\n // default value(s) -- vega doesn't do recursive merge\n scale: 'col'\n },\n y: {\n value: -layout.cellHeight * (cellPadding/2),\n },\n stroke: { value: encoding.config('cellGridColor') },\n opacity: { value: encoding.config('cellGridOpacity') }\n };\n } else if (isRow) {\n // set grid property -- put the lines on the top\n def.properties.grid = {\n y: {\n offset: -layout.cellHeight * (cellPadding/2),\n // default value(s) -- vega doesn't do recursive merge\n scale: 'row'\n },\n x: {\n value: def.offset\n },\n x2: {\n offset: def.offset + (layout.cellWidth * 0.05),\n // default value(s) -- vega doesn't do recursive merge\n group: 'mark.group.width',\n mult: 1\n },\n stroke: { value: encoding.config('cellGridColor') },\n opacity: { value: encoding.config('cellGridOpacity') }\n };\n } else {\n def.properties.grid = {\n stroke: { value: encoding.config('gridColor') },\n opacity: { value: encoding.config('gridOpacity') }\n };\n }\n }\n return def;\n};\n\naxis.hideTicks = function(def) {\n def.properties.ticks = {opacity: {value: 0}};\n def.properties.majorTicks = {opacity: {value: 0}};\n def.properties.axis = {opacity: {value: 0}};\n return def;\n};\n\naxis.title = function (def, name, encoding, layout) {\n var ax = encoding.field(name).axis;\n\n if (ax.title) {\n def.title = ax.title;\n } else {\n // if not defined, automatically determine axis title from field def\n var fieldTitle = encoding.fieldTitle(name),\n maxLength;\n\n if (ax.titleMaxLength) {\n maxLength = ax.titleMaxLength;\n } else if (name===X) {\n maxLength = layout.cellWidth / encoding.config('characterWidth');\n } else if (name === Y) {\n maxLength = layout.cellHeight / encoding.config('characterWidth');\n }\n\n def.title = maxLength ? util.truncate(fieldTitle, maxLength) : fieldTitle;\n }\n\n if (name === ROW) {\n def.properties.title = {\n angle: {value: 0},\n align: {value: 'right'},\n baseline: {value: 'middle'},\n dy: {value: (-layout.height/2) -20}\n };\n }\n\n return def;\n};\n\naxis.labels = {};\n\n/** add custom label for time type and bin */\naxis.labels.scale = function(def, encoding, name) {\n // time\n var timeUnit = encoding.field(name).timeUnit;\n if (encoding.isType(name, T) && timeUnit && (time.hasScale(timeUnit))) {\n setter(def, ['properties','labels','text','scale'], 'time-'+ timeUnit);\n }\n // FIXME bin\n return def;\n};\n\n/**\n * Determine number format or truncate if maxLabel length is presented.\n */\naxis.labels.format = function (def, name, encoding, stats) {\n var fieldStats = stats[encoding.field(name).name];\n\n if (encoding.axis(name).format) {\n def.format = encoding.axis(name).format;\n } else if (encoding.isType(name, Q) || fieldStats.type === 'number') {\n def.format = encoding.numberFormat(fieldStats);\n } else if (encoding.isType(name, T)) {\n var timeUnit = encoding.field(name).timeUnit;\n if (!timeUnit) {\n def.format = encoding.config('timeFormat');\n } else if (timeUnit === 'year') {\n def.format = 'd';\n }\n } else if (encoding.isTypes(name, [N, O]) && encoding.axis(name).maxLabelLength) {\n setter(def,\n ['properties','labels','text','template'],\n '{{data | truncate:' + encoding.axis(name).maxLabelLength + '}}'\n );\n }\n\n return def;\n};\n\naxis.labels.angle = function(def, encoding, name) {\n var angle = encoding.axis(name).labelAngle;\n if (typeof angle === 'undefined') return def;\n\n setter(def, ['properties', 'labels', 'angle', 'value'], angle);\n return def;\n};\n\naxis.labels.rotate = function(def) {\n var align = def.orient ==='top' ? 'left' : 'right';\n setter(def, ['properties','labels', 'angle', 'value'], 270);\n setter(def, ['properties','labels', 'align', 'value'], align);\n setter(def, ['properties','labels', 'baseline', 'value'], 'middle');\n return def;\n};\n\naxis.titleOffset = function (encoding, layout, name) {\n // return specified value if specified\n var value = encoding.axis(name).titleOffset;\n if (value) return value;\n\n switch (name) {\n //FIXME make this adjustable\n case ROW: return 0;\n case COL: return 35;\n }\n return getter(layout, [name, 'axisTitleOffset']);\n};\n\n},{\"../globals\":25,\"../util\":29,\"./time\":20}],9:[function(require,module,exports){\n'use strict';\n\nvar summary = module.exports = require('datalib/src/stats').summary;\n\nrequire('../globals');\n\n/**\n * Module for compiling Vega-lite spec into Vega spec.\n */\nvar compiler = module.exports = {};\n\nvar Encoding = require('../Encoding'),\n axis = compiler.axis = require('./axis'),\n legend = compiler.legend = require('./legend'),\n marks = compiler.marks = require('./marks'),\n scale = compiler.scale = require('./scale');\n\ncompiler.data = require('./data');\ncompiler.facet = require('./facet');\ncompiler.layout = require('./layout');\ncompiler.sort = require('./sort');\ncompiler.stack = require('./stack');\ncompiler.style = require('./style');\ncompiler.subfacet = require('./subfacet');\ncompiler.time = require('./time');\n\ncompiler.compile = function (spec, stats, theme) {\n return compiler.compileEncoding(Encoding.fromSpec(spec, theme), stats);\n};\n\ncompiler.shorthand = function (shorthand, stats, config, theme) {\n return compiler.compileEncoding(Encoding.fromShorthand(shorthand, config, theme), stats);\n};\n\n/**\n * Create a Vega specification from a Vega-lite Encoding object.\n */\ncompiler.compileEncoding = function (encoding, stats) {\n // no need to pass stats if you pass in the data\n if (!stats) {\n if (encoding.hasValues()) {\n stats = summary(encoding.data().values).reduce(function(s, p) {\n s[p.field] = p;\n return s;\n }, {});\n } else {\n console.error('No stats provided and data is not embedded.');\n }\n }\n\n var layout = compiler.layout(encoding, stats);\n\n var spec = {\n width: layout.width,\n height: layout.height,\n padding: 'auto',\n data: compiler.data(encoding),\n // global scales contains only time unit scales\n scales: compiler.time.scales(encoding),\n marks: [{\n _name: 'cell',\n type: 'group',\n properties: {\n enter: {\n width: layout.cellWidth ? {value: layout.cellWidth} : {group: 'width'},\n height: layout.cellHeight ? {value: layout.cellHeight} : {group: 'height'}\n }\n }\n }]\n };\n\n var group = spec.marks[0];\n\n // FIXME remove compiler.sort after migrating to vega 2.\n spec.data = compiler.sort(spec.data, encoding, stats); // append new data\n\n // marks\n var style = compiler.style(encoding, stats),\n mdefs = group.marks = marks.def(encoding, layout, style, stats),\n mdef = mdefs[mdefs.length - 1]; // TODO: remove this dirty hack by refactoring the whole flow\n\n var lineType = marks[encoding.marktype()].line;\n\n // handle subfacets\n\n var details = encoding.details(),\n stack = encoding.isAggregate() && details.length > 0 && compiler.stack(spec.data, encoding, mdef); // modify spec.data, mdef.{from,properties}\n\n if (details.length > 0 && (stack || lineType)) {\n //subfacet to group stack / line together in one group\n compiler.subfacet(group, mdef, details, stack, encoding);\n }\n\n // auto-sort line/area values\n if (lineType && encoding.config('autoSortLine')) {\n var f = (encoding.isMeasure(X) && encoding.isDimension(Y)) ? Y : X;\n if (!mdef.from) mdef.from = {};\n // TODO: why - ?\n mdef.from.transform = [{type: 'sort', by: '-' + encoding.fieldRef(f)}];\n }\n\n // get a flattened list of all scale names that are used in the vl spec\n var singleScaleNames = [].concat.apply([], mdefs.map(function(markProps) {\n return scale.names(markProps.properties.update);\n }));\n\n // Small Multiples\n if (encoding.has(ROW) || encoding.has(COL)) {\n spec = compiler.facet(group, encoding, layout, spec, singleScaleNames, stack, stats);\n spec.legends = legend.defs(encoding, style);\n } else {\n group.scales = scale.defs(singleScaleNames, encoding, layout, stats, {stack: stack});\n\n group.axes = [];\n if (encoding.has(X)) group.axes.push(axis.def(X, encoding, layout, stats));\n if (encoding.has(Y)) group.axes.push(axis.def(Y, encoding, layout, stats));\n\n group.legends = legend.defs(encoding, style);\n }\n\n return spec;\n};\n\n\n},{\"../Encoding\":7,\"../globals\":25,\"./axis\":8,\"./data\":10,\"./facet\":11,\"./layout\":12,\"./legend\":13,\"./marks\":14,\"./scale\":15,\"./sort\":16,\"./stack\":17,\"./style\":18,\"./subfacet\":19,\"./time\":20,\"datalib/src/stats\":35}],10:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nmodule.exports = data;\n\nvar vlfield = require('../field'),\n util = require('../util'),\n time = require('./time');\n\n/**\n * Create Vega's data array from a given encoding.\n *\n * @param {Encoding} encoding\n * @return {Array} Array of Vega data.\n * This always includes a \"raw\" data table.\n * If the encoding contains aggregate value, this will also create\n * aggregate table as well.\n */\nfunction data(encoding) {\n var def = [data.raw(encoding)];\n\n var aggregate = data.aggregate(encoding);\n if (aggregate) def.push(data.aggregate(encoding));\n\n // TODO add \"having\" filter here\n\n // append non-positive filter at the end for the data table\n data.filterNonPositive(def[def.length - 1], encoding);\n\n return def;\n}\n\ndata.raw = function(encoding) {\n var raw = {name: RAW};\n\n // Data source (url or inline)\n if (encoding.hasValues()) {\n raw.values = encoding.data().values;\n } else {\n raw.url = encoding.data().url;\n raw.format = {type: encoding.data().formatType};\n }\n\n // Set data's format.parse if needed\n var parse = data.raw.formatParse(encoding);\n if (parse) {\n raw.format = raw.format || {};\n raw.format.parse = parse;\n }\n\n raw.transform = data.raw.transform(encoding);\n return raw;\n};\n\ndata.raw.formatParse = function(encoding) {\n var parse;\n\n encoding.forEach(function(field) {\n if (field.type == T) {\n parse = parse || {};\n parse[field.name] = 'date';\n } else if (field.type == Q) {\n if (vlfield.isCount(field)) return;\n parse = parse || {};\n parse[field.name] = 'number';\n }\n });\n\n return parse;\n};\n\n/**\n * Generate Vega transforms for the raw data table. This can include\n * transforms for time unit, binning and filtering.\n */\ndata.raw.transform = function(encoding) {\n // null filter comes first so transforms are not performed on null values\n // time and bin should come before filter so we can filter by time and bin\n return data.raw.transform.nullFilter(encoding).concat(\n data.raw.transform.time(encoding),\n data.raw.transform.bin(encoding),\n data.raw.transform.filter(encoding)\n );\n};\n\nvar BINARY = {\n '>': true,\n '>=': true,\n '=': true,\n '!=': true,\n '<': true,\n '<=': true\n};\n\ndata.raw.transform.time = function(encoding) {\n return encoding.reduce(function(transform, field, encType) {\n if (field.type === T && field.timeUnit) {\n transform.push({\n type: 'formula',\n field: encoding.fieldRef(encType),\n expr: time.formula(field.timeUnit,\n encoding.fieldRef(encType, {nofn: true, d: true})\n )\n });\n }\n return transform;\n }, []);\n};\n\ndata.raw.transform.bin = function(encoding) {\n return encoding.reduce(function(transform, field, encType) {\n if (encoding.bin(encType)) {\n transform.push({\n type: 'bin',\n field: encoding.fieldRef(encType, {nofn: true}),\n output: encoding.fieldRef(encType),\n maxbins: encoding.bin(encType).maxbins\n });\n }\n return transform;\n }, []);\n};\n\n/**\n * @return {Object} An array that might contain a filter transform for filtering null value based on filterNul config\n */\ndata.raw.transform.nullFilter = function(encoding) {\n var filteredFields = util.reduce(encoding.fields(),\n function(filteredFields, fieldList, fieldName) {\n if (fieldName === '*') return filteredFields; //count\n\n // TODO(#597) revise how filterNull is structured.\n if ((encoding.config('filterNull').Q && fieldList.containsType[Q]) ||\n (encoding.config('filterNull').T && fieldList.containsType[T]) ||\n (encoding.config('filterNull').O && fieldList.containsType[O]) ||\n (encoding.config('filterNull').N && fieldList.containsType[N])) {\n filteredFields.push(fieldName);\n }\n return filteredFields;\n }, []);\n\n return filteredFields.length > 0 ?\n [{\n type: 'filter',\n test: filteredFields.map(function(fieldName) {\n return fieldName + '!==null';\n }).join(' && ')\n }] : [];\n};\n\ndata.raw.transform.filter = function(encoding) {\n var filters = encoding.filter().reduce(function(f, filter) {\n var condition = '';\n var operator = filter.operator;\n var operands = filter.operands;\n\n var d = 'd.' + (encoding._vega2 ? '' : 'data.');\n\n if (BINARY[operator]) {\n // expects a field and a value\n if (operator === '=') {\n operator = '==';\n }\n\n var op1 = operands[0];\n var op2 = operands[1];\n condition = d + op1 + ' ' + operator + ' ' + op2;\n } else {\n util.warn('Unsupported operator: ', operator);\n return f;\n }\n f.push('(' + condition + ')');\n return f;\n }, []);\n if (filters.length === 0) return [];\n\n return [{\n type: 'filter',\n test: filters.join(' && ')\n }];\n};\n\ndata.aggregate = function(encoding) {\n var dims = {}, meas = {};\n\n encoding.forEach(function(field, encType) {\n if (field.aggregate) {\n if (field.aggregate === 'count') {\n meas.count = {op: 'count', field: '*'};\n }else {\n meas[field.aggregate + '|' + field.name] = {\n op: field.aggregate,\n field: encoding.fieldRef(encType, {nofn: true})\n };\n }\n } else {\n dims[field.name] = encoding.fieldRef(encType);\n }\n });\n\n dims = util.vals(dims);\n meas = util.vals(meas);\n\n if (meas.length > 0) {\n return {\n name: AGGREGATE,\n source: RAW,\n transform: [{\n type: 'aggregate',\n groupby: dims,\n fields: meas\n }]\n };\n }\n\n return null;\n};\n\ndata.filterNonPositive = function(dataTable, encoding) {\n encoding.forEach(function(field, encType) {\n if (encoding.scale(encType).type === 'log') {\n dataTable.transform.push({\n type: 'filter',\n test: encoding.fieldRef(encType, {d: 1}) + ' > 0'\n });\n }\n });\n};\n\n},{\"../field\":24,\"../globals\":25,\"../util\":29,\"./time\":20}],11:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar util = require('../util');\n\nvar axis = require('./axis'),\n scale = require('./scale');\n\nmodule.exports = faceting;\n\nfunction groupdef(name, opt) {\n opt = opt || {};\n return {\n _name: name || undefined,\n type: 'group',\n from: opt.from,\n properties: {\n enter: {\n x: opt.x || undefined,\n y: opt.y || undefined,\n width: opt.width || {group: 'width'},\n height: opt.height || {group: 'height'}\n }\n },\n scales: opt.scales || undefined,\n axes: opt.axes || undefined,\n marks: opt.marks || []\n };\n}\n\nfunction faceting(group, encoding, layout, spec, singleScaleNames, stack, stats) {\n var enter = group.properties.enter;\n var facetKeys = [], cellAxes = [], from, axesGrp;\n\n var hasRow = encoding.has(ROW), hasCol = encoding.has(COL);\n\n enter.fill = {value: encoding.config('cellBackgroundColor')};\n\n //move \"from\" to cell level and add facet transform\n group.from = {data: group.marks[0].from.data};\n\n // Hack, this needs to be refactored\n for (var i = 0; i < group.marks.length; i++) {\n var mark = group.marks[i];\n if (mark.from.transform) {\n delete mark.from.data; //need to keep transform for subfacetting case\n } else {\n delete mark.from;\n }\n }\n\n if (hasRow) {\n if (!encoding.isDimension(ROW)) {\n util.error('Row encoding should be ordinal.');\n }\n enter.y = {scale: ROW, field: 'keys.' + facetKeys.length};\n enter.height = {'value': layout.cellHeight}; // HACK\n\n facetKeys.push(encoding.fieldRef(ROW));\n\n if (hasCol) {\n from = util.duplicate(group.from);\n from.transform = from.transform || [];\n from.transform.unshift({type: 'facet', keys: [encoding.fieldRef(COL)]});\n }\n\n axesGrp = groupdef('x-axes', {\n axes: encoding.has(X) ? [axis.def(X, encoding, layout, stats)] : undefined,\n x: hasCol ? {scale: COL, field: 'keys.0'} : {value: 0},\n width: hasCol && {'value': layout.cellWidth}, //HACK?\n from: from\n });\n\n spec.marks.unshift(axesGrp); // need to prepend so it appears under the plots\n (spec.axes = spec.axes || []);\n spec.axes.push(axis.def(ROW, encoding, layout, stats));\n } else { // doesn't have row\n if (encoding.has(X)) {\n //keep x axis in the cell\n cellAxes.push(axis.def(X, encoding, layout, stats));\n }\n }\n\n if (hasCol) {\n if (!encoding.isDimension(COL)) {\n util.error('Col encoding should be ordinal.');\n }\n enter.x = {scale: COL, field: 'keys.' + facetKeys.length};\n enter.width = {'value': layout.cellWidth}; // HACK\n\n facetKeys.push(encoding.fieldRef(COL));\n\n if (hasRow) {\n from = util.duplicate(group.from);\n from.transform = from.transform || [];\n from.transform.unshift({type: 'facet', keys: [encoding.fieldRef(ROW)]});\n }\n\n axesGrp = groupdef('y-axes', {\n axes: encoding.has(Y) ? [axis.def(Y, encoding, layout, stats)] : undefined,\n y: hasRow && {scale: ROW, field: 'keys.0'},\n x: hasRow && {value: 0},\n height: hasRow && {'value': layout.cellHeight}, //HACK?\n from: from\n });\n\n spec.marks.unshift(axesGrp); // need to prepend so it appears under the plots\n (spec.axes = spec.axes || []);\n spec.axes.push(axis.def(COL, encoding, layout, stats));\n } else { // doesn't have col\n if (encoding.has(Y)) {\n cellAxes.push(axis.def(Y, encoding, layout, stats));\n }\n }\n\n // assuming equal cellWidth here\n // TODO: support heterogenous cellWidth (maybe by using multiple scales?)\n spec.scales = (spec.scales || []).concat(scale.defs(\n scale.names(enter).concat(singleScaleNames),\n encoding,\n layout,\n stats,\n {stack: stack, facet: true}\n )); // row/col scales + cell scales\n\n if (cellAxes.length > 0) {\n group.axes = cellAxes;\n }\n\n // add facet transform\n var trans = (group.from.transform || (group.from.transform = []));\n trans.unshift({type: 'facet', keys: facetKeys});\n\n return spec;\n}\n\n},{\"../globals\":25,\"../util\":29,\"./axis\":8,\"./scale\":15}],12:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar util = require('../util'),\n setter = util.setter,\n time = require('./time'),\n d3_format = require('d3-format');\n\nmodule.exports = vllayout;\n\nfunction vllayout(encoding, stats) {\n var layout = box(encoding, stats);\n layout = offset(encoding, stats, layout);\n return layout;\n}\n\n/*\n HACK to set chart size\n NOTE: this fails for plots driven by derived values (e.g., aggregates)\n One solution is to update Vega to support auto-sizing\n In the meantime, auto-padding (mostly) does the trick\n */\nfunction box(encoding, stats) {\n var hasRow = encoding.has(ROW),\n hasCol = encoding.has(COL),\n hasX = encoding.has(X),\n hasY = encoding.has(Y),\n marktype = encoding.marktype();\n\n // FIXME/HACK we need to take filter into account\n var xCardinality = hasX && encoding.isDimension(X) ? encoding.cardinality(X, stats) : 1,\n yCardinality = hasY && encoding.isDimension(Y) ? encoding.cardinality(Y, stats) : 1;\n\n var useSmallBand = xCardinality > encoding.config('largeBandMaxCardinality') ||\n yCardinality > encoding.config('largeBandMaxCardinality');\n\n var cellWidth, cellHeight, cellPadding = encoding.config('cellPadding');\n\n // set cellWidth\n if (hasX) {\n if (encoding.isOrdinalScale(X)) {\n // for ordinal, hasCol or not doesn't matter -- we scale based on cardinality\n cellWidth = (xCardinality + encoding.field(X).band.padding) * encoding.bandSize(X, useSmallBand);\n } else {\n cellWidth = hasCol || hasRow ? encoding.field(COL).width : encoding.config('singleWidth');\n }\n } else {\n if (marktype === TEXT) {\n cellWidth = encoding.config('textCellWidth');\n } else {\n cellWidth = encoding.bandSize(X);\n }\n }\n\n // set cellHeight\n if (hasY) {\n if (encoding.isOrdinalScale(Y)) {\n // for ordinal, hasCol or not doesn't matter -- we scale based on cardinality\n cellHeight = (yCardinality + encoding.field(Y).band.padding) * encoding.bandSize(Y, useSmallBand);\n } else {\n cellHeight = hasCol || hasRow ? encoding.field(ROW).height : encoding.config('singleHeight');\n }\n } else {\n cellHeight = encoding.bandSize(Y);\n }\n\n // Cell bands use rangeBands(). There are n-1 padding. Outerpadding = 0 for cells\n\n var width = cellWidth, height = cellHeight;\n if (hasCol) {\n var colCardinality = encoding.cardinality(COL, stats);\n width = cellWidth * ((1 + cellPadding) * (colCardinality - 1) + 1);\n }\n if (hasRow) {\n var rowCardinality = encoding.cardinality(ROW, stats);\n height = cellHeight * ((1 + cellPadding) * (rowCardinality - 1) + 1);\n }\n\n return {\n // width and height of the whole cell\n cellWidth: cellWidth,\n cellHeight: cellHeight,\n cellPadding: cellPadding,\n // width and height of the chart\n width: width,\n height: height,\n // information about x and y, such as band size\n x: {useSmallBand: useSmallBand},\n y: {useSmallBand: useSmallBand}\n };\n}\n\n\n// FIXME fieldStats.max isn't always the longest\nfunction getMaxNumberLength(encoding, et, fieldStats) {\n var format = encoding.numberFormat(et, fieldStats);\n\n return d3_format.format(format)(fieldStats.max).length;\n}\n\n// TODO(#600) revise this\nfunction getMaxLength(encoding, stats, et) {\n var field = encoding.field(et),\n fieldStats = stats[field.name];\n\n if (field.bin) {\n // TODO once bin support range, need to update this\n return getMaxNumberLength(encoding, et, fieldStats);\n } if (encoding.isType(et, Q)) {\n return getMaxNumberLength(encoding, et, fieldStats);\n } else if (encoding.isType(et, T)) {\n return time.maxLength(encoding.field(et).timeUnit, encoding);\n } else if (encoding.isTypes(et, [N, O])) {\n if(fieldStats.type === 'number') {\n return getMaxNumberLength(encoding, et, fieldStats);\n } else {\n return Math.min(fieldStats.max, encoding.axis(et).maxLabelLength || Infinity);\n }\n }\n}\n\nfunction offset(encoding, stats, layout) {\n [X, Y].forEach(function (et) {\n // TODO(kanitw): Jul 19, 2015 - create a set of visual test for extraOffset\n var extraOffset = et === X ? 20 : 22,\n maxLength;\n if (encoding.isDimension(et) || encoding.isType(et, T)) {\n maxLength = getMaxLength(encoding, stats, et);\n } else if (\n // TODO once we have #512 (allow using inferred type)\n // Need to adjust condition here.\n encoding.isType(et, Q) ||\n encoding.aggregate(et) === 'count'\n ) {\n if (\n et===Y\n // || (et===X && false)\n // FIXME determine when X would rotate, but should move this to axis.js first #506\n ) {\n maxLength = getMaxLength(encoding, stats, et);\n }\n } else {\n // nothing\n }\n\n if (maxLength) {\n setter(layout,[et, 'axisTitleOffset'], encoding.config('characterWidth') * maxLength + extraOffset);\n } else {\n // if no max length (no rotation case), use maxLength = 3\n setter(layout,[et, 'axisTitleOffset'], encoding.config('characterWidth') * 3 + extraOffset);\n }\n\n });\n return layout;\n}\n\n},{\"../globals\":25,\"../util\":29,\"./time\":20,\"d3-format\":5}],13:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar time = require('./time'),\n util = require('../util'),\n setter = util.setter,\n getter = util.getter;\n\nvar legend = module.exports = {};\n\nlegend.defs = function(encoding, style) {\n var defs = [];\n\n if (encoding.has(COLOR) && encoding.field(COLOR).legend) {\n defs.push(legend.def(COLOR, encoding, {\n fill: COLOR,\n orient: 'right'\n }, style));\n }\n\n if (encoding.has(SIZE) && encoding.field(SIZE).legend) {\n defs.push(legend.def(SIZE, encoding, {\n size: SIZE,\n orient: defs.length === 1 ? 'left' : 'right'\n }, style));\n }\n\n if (encoding.has(SHAPE) && encoding.field(SHAPE).legend) {\n if (defs.length === 2) {\n console.error('Vega-lite currently only supports two legends');\n }\n defs.push(legend.def(SHAPE, encoding, {\n shape: SHAPE,\n orient: defs.length === 1 ? 'left' : 'right'\n }, style));\n }\n return defs;\n};\n\nlegend.def = function(name, encoding, def, style) {\n var timeUnit = encoding.field(name).timeUnit;\n\n def.title = legend.title(name, encoding);\n def = legend.style(name, encoding, def, style);\n\n if (encoding.isType(name, T) &&\n timeUnit &&\n time.hasScale(timeUnit)\n ) {\n setter(def, ['properties', 'labels', 'text', 'scale'], 'time-'+ timeUnit);\n }\n\n return def;\n};\n\nlegend.style = function(name, e, def, style) {\n var symbols = getter(def, ['properties', 'symbols']),\n marktype = e.marktype();\n\n switch (marktype) {\n case 'bar':\n case 'tick':\n case 'text':\n symbols.stroke = {value: 'transparent'};\n symbols.shape = {value: 'square'};\n break;\n\n case 'circle':\n case 'square':\n symbols.shape = {value: marktype};\n /* fall through */\n case 'point':\n // fill or stroke\n if (e.field(SHAPE).filled) {\n if (e.has(COLOR) && name === COLOR) {\n symbols.fill = {scale: COLOR, field: 'data'};\n } else {\n symbols.fill = {value: e.value(COLOR)};\n }\n symbols.stroke = {value: 'transparent'};\n } else {\n if (e.has(COLOR) && name === COLOR) {\n symbols.stroke = {scale: COLOR, field: 'data'};\n } else {\n symbols.stroke = {value: e.value(COLOR)};\n }\n symbols.fill = {value: 'transparent'};\n symbols.strokeWidth = {value: e.config('strokeWidth')};\n }\n\n break;\n case 'line':\n case 'area':\n // TODO use shape here after implementing #508\n break;\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if (opacity) {\n symbols.opacity = {value: opacity};\n }\n return def;\n};\n\nlegend.title = function(name, encoding) {\n var leg = encoding.field(name).legend;\n\n if (leg.title) return leg.title;\n\n return encoding.fieldTitle(name);\n};\n\n},{\"../globals\":25,\"../util\":29,\"./time\":20}],14:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar marks = module.exports = {};\n\nmarks.def = function(encoding, layout, style, stats) {\n\n var defs = [],\n mark = marks[encoding.marktype()],\n from = encoding.dataTable();\n\n // to add a background to text, we need to add it before the text\n if (encoding.marktype() === TEXT && encoding.has(COLOR)) {\n var bg = {\n x: {value: 0},\n y: {value: 0},\n x2: {value: layout.cellWidth},\n y2: {value: layout.cellHeight},\n fill: {scale: COLOR, field: encoding.fieldRef(COLOR)}\n };\n defs.push({\n type: 'rect',\n from: {data: from},\n properties: {enter: bg, update: bg}\n });\n }\n\n // add the mark def for the main thing\n var p = mark.prop(encoding, layout, style, stats);\n defs.push({\n type: mark.type,\n from: {data: from},\n properties: {enter: p, update: p}\n });\n\n return defs;\n};\n\nmarks.bar = {\n type: 'rect',\n stack: true,\n prop: bar_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1}\n};\n\nmarks.line = {\n type: 'line',\n line: true,\n prop: line_props,\n requiredEncoding: ['x', 'y'],\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1, detail:1}\n};\n\nmarks.area = {\n type: 'area',\n stack: true,\n line: true,\n requiredEncoding: ['x', 'y'],\n prop: area_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1}\n};\n\nmarks.tick = {\n type: 'rect',\n prop: tick_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1, detail: 1}\n};\n\nmarks.circle = {\n type: 'symbol',\n prop: filled_point_props('circle'),\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1, detail: 1}\n};\n\nmarks.square = {\n type: 'symbol',\n prop: filled_point_props('square'),\n supportedEncoding: marks.circle.supportedEncoding\n};\n\nmarks.point = {\n type: 'symbol',\n prop: point_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1, shape: 1, detail: 1}\n};\n\nmarks.text = {\n type: 'text',\n prop: text_props,\n requiredEncoding: ['text'],\n supportedEncoding: {row: 1, col: 1, size: 1, color: 1, text: 1}\n};\n\nfunction bar_props(e, layout, style) {\n // jshint unused:false\n\n var p = {};\n\n // x's and width\n if (e.isMeasure(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (!e.has(Y) || e.isDimension(Y)) {\n p.x2 = {value: 0};\n }\n } else {\n if (e.has(X)) { // is ordinal\n p.xc = {scale: X, field: e.fieldRef(X)};\n } else {\n p.x = {value: 0, offset: e.config('singleBarOffset')};\n }\n }\n\n // width\n if (!p.x2) {\n if (!e.has(X) || e.isOrdinalScale(X)) { // no X or X is ordinal\n if (e.has(SIZE)) {\n p.width = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else {\n p.width = {\n value: e.bandSize(X, layout.x.useSmallBand),\n offset: -1\n };\n }\n } else { // X is Quant or Time Scale\n p.width = {value: 2};\n }\n }\n\n // y's & height\n if (e.isMeasure(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n p.y2 = {group: 'height'};\n } else {\n if (e.has(Y)) { // is ordinal\n p.yc = {scale: Y, field: e.fieldRef(Y)};\n } else {\n p.y2 = {group: 'height', offset: -e.config('singleBarOffset')};\n }\n\n if (e.has(SIZE)) {\n p.height = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else {\n p.height = {\n value: e.bandSize(Y, layout.y.useSmallBand),\n offset: -1\n };\n }\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else {\n p.fill = {value: e.value(COLOR)};\n }\n\n // opacity\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction point_props(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.size = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(SIZE)) {\n p.size = {value: e.value(SIZE)};\n }\n\n // shape\n if (e.has(SHAPE)) {\n p.shape = {scale: SHAPE, field: e.fieldRef(SHAPE)};\n } else if (!e.has(SHAPE)) {\n p.shape = {value: e.value(SHAPE)};\n }\n\n // fill or stroke\n if (e.field(SHAPE).filled) {\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n } else {\n if (e.has(COLOR)) {\n p.stroke = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.stroke = {value: e.value(COLOR)};\n }\n p.strokeWidth = {value: e.config('strokeWidth')};\n }\n\n // opacity\n var opacity = e.field(COLOR).opacity || style.opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction line_props(e,layout, style) {\n // jshint unused:false\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: 0};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {group: 'height'};\n }\n\n // stroke\n if (e.has(COLOR)) {\n p.stroke = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.stroke = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n p.strokeWidth = {value: e.config('strokeWidth')};\n\n return p;\n}\n\nfunction area_props(e, layout, style) {\n // jshint unused:false\n var p = {};\n\n // x\n if (e.isMeasure(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (e.isDimension(Y)) {\n p.x2 = {scale: X, value: 0};\n p.orient = {value: 'horizontal'};\n }\n } else if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else {\n p.x = {value: 0};\n }\n\n // y\n if (e.isMeasure(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n p.y2 = {scale: Y, value: 0};\n } else if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else {\n p.y = {group: 'height'};\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction tick_props(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (e.isDimension(X)) {\n p.x.offset = -e.bandSize(X, layout.x.useSmallBand) / 3;\n }\n } else if (!e.has(X)) {\n p.x = {value: 0};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n if (e.isDimension(Y)) {\n p.y.offset = -e.bandSize(Y, layout.y.useSmallBand) / 3;\n }\n } else if (!e.has(Y)) {\n p.y = {value: 0};\n }\n\n // width\n if (!e.has(X) || e.isDimension(X)) {\n p.width = {value: e.bandSize(X, layout.y.useSmallBand) / 1.5};\n } else {\n p.width = {value: 1};\n }\n\n // height\n if (!e.has(Y) || e.isDimension(Y)) {\n p.height = {value: e.bandSize(Y, layout.y.useSmallBand) / 1.5};\n } else {\n p.height = {value: 1};\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction filled_point_props(shape) {\n return function(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.size = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(X)) {\n p.size = {value: e.value(SIZE)};\n }\n\n // shape\n p.shape = {value: shape};\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n return p;\n };\n}\n\nfunction text_props(e, layout, style, stats) {\n var p = {},\n field = e.field(TEXT);\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n if (e.has(TEXT) && e.isType(TEXT, Q)) {\n p.x = {value: layout.cellWidth-5};\n } else {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.fontSize = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(SIZE)) {\n p.fontSize = {value: field.font.size};\n }\n\n // fill\n // color should be set to background\n p.fill = {value: field.color};\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n // text\n if (e.has(TEXT)) {\n if (e.isType(TEXT, Q)) {\n var fieldStats = stats[e.fieldName(TEXT)],\n numberFormat = field.format || e.numberFormat(fieldStats);\n\n p.text = {template: '{{' + e.fieldRef(TEXT) + ' | number:\\'' +\n numberFormat +'\\'}}'};\n p.align = {value: field.align};\n } else {\n p.text = {field: e.fieldRef(TEXT)};\n }\n } else {\n p.text = {value: field.placeholder};\n }\n\n p.font = {value: field.font.family};\n p.fontWeight = {value: field.font.weight};\n p.fontStyle = {value: field.font.style};\n p.baseline = {value: field.baseline};\n\n return p;\n}\n\n},{\"../globals\":25}],15:[function(require,module,exports){\n'use strict';\nrequire('../globals');\nvar util = require('../util'),\n time = require('./time'),\n colorbrewer = require('colorbrewer'),\n interpolate = require('d3-color').interpolateHsl,\n schema = require('../schema/schema'),\n vlsort = require('./sort');\n\nvar scale = module.exports = {};\n\nscale.names = function(props) {\n return util.keys(util.keys(props).reduce(function(a, x) {\n if (props[x] && props[x].scale) a[props[x].scale] = 1;\n return a;\n }, {}));\n};\n\nscale.defs = function(names, encoding, layout, stats, opt) {\n opt = opt || {};\n\n return names.reduce(function(a, name) {\n var s = {\n name: name,\n type: scale.type(name, encoding),\n domain: scale.domain(name, encoding, stats, opt)\n };\n\n s.sort = scale.sort(s, encoding, name) || undefined;\n\n scale.range(s, encoding, layout, stats, opt);\n\n return (a.push(s), a);\n }, []);\n};\n\nscale.sort = function(s, encoding, name) {\n return s.type === 'ordinal' && (\n !!encoding.bin(name) ||\n encoding.sort(name).length === 0\n );\n};\n\nscale.type = function(name, encoding) {\n\n switch (encoding.type(name)) {\n case N: //fall through\n case O: return 'ordinal';\n case T:\n var timeUnit = encoding.field(name).timeUnit;\n return timeUnit ? time.scale.type(timeUnit, name) : 'time';\n case Q:\n if (encoding.bin(name)) {\n return name === COLOR ? 'linear' : 'ordinal';\n }\n return encoding.scale(name).type;\n }\n};\n\nscale.domain = function (name, encoding, stats, opt) {\n var field = encoding.field(name);\n\n if (encoding.isType(name, T)) {\n var range = time.scale.domain(field.timeUnit, name);\n if(range) return range;\n }\n\n if (field.bin) {\n // TODO(kanitw): this must be changed in vg2\n var fieldStat = stats[field.name],\n bins = util.getbins(fieldStat, field.bin.maxbins || schema.MAXBINS_DEFAULT),\n numbins = (bins.stop - bins.start) / bins.step;\n return util.range(numbins).map(function(i) {\n return bins.start + bins.step * i;\n });\n }\n\n if (name == opt.stack) {\n return {\n data: STACKED,\n field: encoding.fieldRef(name, {\n data: !encoding._vega2,\n prefn: (opt.facet ? 'max_' : '') + 'sum_'\n })\n };\n }\n var aggregate = encoding.aggregate(name),\n timeUnit = field.timeUnit,\n scaleUseRawDomain = encoding.scale(name).useRawDomain,\n useRawDomain = scaleUseRawDomain !== undefined ?\n scaleUseRawDomain : encoding.config('useRawDomain'),\n notCountOrSum = !aggregate || (aggregate !=='count' && aggregate !== 'sum');\n\n // FIXME revise this part\n\n if ( useRawDomain && notCountOrSum && (\n // Q always uses non-ordinal scale except when it's binned and thus uses ordinal scale.\n (encoding.isType(name, Q) && !field.bin) ||\n // T uses non-ordinal scale when there's no unit or when the unit is not ordinal.\n (encoding.isType(name, T) && (!timeUnit || !time.isOrdinalFn(timeUnit)))\n )\n ) {\n return {data: RAW, field: encoding.fieldRef(name, {nofn: !timeUnit})};\n }\n\n var data = encoding.sort(name, stats).length > 0 ?\n vlsort.getDataName(name):\n encoding.dataTable();\n\n return {data: data, field: encoding.fieldRef(name)};\n};\n\n\nscale.range = function (s, encoding, layout, stats) {\n var spec = encoding.scale(s.name),\n field = encoding.field(s.name),\n timeUnit = field.timeUnit;\n\n switch (s.name) {\n case X:\n s.range = layout.cellWidth ? [0, layout.cellWidth] : 'width';\n if (s.type === 'ordinal') {\n s.bandWidth = encoding.bandSize(X, layout.x.useSmallBand);\n } else {\n if (encoding.isType(s.name,T) && timeUnit === 'year') {\n s.zero = false;\n } else {\n s.zero = spec.zero === undefined ? true : spec.zero;\n }\n\n s.reverse = spec.reverse;\n }\n s.round = true;\n if (s.type === 'time') {\n s.nice = timeUnit || encoding.config('timeScaleNice');\n }else {\n s.nice = true;\n }\n break;\n case Y:\n if (s.type === 'ordinal') {\n s.range = layout.cellHeight ?\n (field.bin ? [layout.cellHeight, 0] : [0, layout.cellHeight]) :\n 'height';\n s.bandWidth = encoding.bandSize(Y, layout.y.useSmallBand);\n } else {\n s.range = layout.cellHeight ? [layout.cellHeight, 0] : 'height';\n if (encoding.isType(s.name,T) && timeUnit === 'year') {\n s.zero = false;\n } else {\n s.zero = spec.zero === undefined ? true : spec.zero;\n }\n\n s.reverse = spec.reverse;\n }\n\n s.round = true;\n\n if (s.type === 'time') {\n s.nice = timeUnit || encoding.config('timeScaleNice');\n }else {\n s.nice = true;\n }\n break;\n case ROW: // support only ordinal\n s.bandWidth = layout.cellHeight;\n s.round = true;\n s.nice = true;\n break;\n case COL: // support only ordinal\n s.bandWidth = layout.cellWidth;\n s.round = true;\n s.nice = true;\n break;\n case SIZE:\n if (encoding.is('bar')) {\n // FIXME this is definitely incorrect\n // but let's fix it later since bar size is a bad encoding anyway\n s.range = [3, Math.max(encoding.bandSize(X), encoding.bandSize(Y))];\n } else if (encoding.is(TEXT)) {\n s.range = [8, 40];\n } else { //point\n var bandSize = Math.min(encoding.bandSize(X), encoding.bandSize(Y)) - 1;\n s.range = [10, 0.8 * bandSize*bandSize];\n }\n s.round = true;\n s.zero = false;\n break;\n case SHAPE:\n s.range = 'shapes';\n break;\n case COLOR:\n s.range = scale.color(s, encoding, stats);\n if (s.type !== 'ordinal') s.zero = false;\n break;\n default:\n throw new Error('Unknown encoding name: '+ s.name);\n }\n\n // FIXME(kanitw): Jul 29, 2015 - consolidate this with above\n switch (s.name) {\n case ROW:\n case COL:\n s.padding = encoding.config('cellPadding');\n s.outerPadding = 0;\n break;\n case X:\n case Y:\n if (s.type === 'ordinal') { //&& !s.bandWidth\n s.points = true;\n s.padding = encoding.field(s.name).band.padding;\n }\n }\n};\n\nscale.color = function(s, encoding, stats) {\n var colorScale = encoding.scale(COLOR),\n range = colorScale.range,\n cardinality = encoding.cardinality(COLOR, stats),\n type = encoding.type(COLOR);\n\n if (range === undefined) {\n var ordinalPalette = colorScale.ordinalPalette,\n quantitativeRange = colorScale.quantitativeRange;\n\n if (s.type === 'ordinal') {\n if (type === N) {\n // use categorical color scale\n if (cardinality <= 10) {\n range = colorScale.c10palette;\n } else {\n range = colorScale.c20palette;\n }\n return scale.color.palette(range, cardinality, type);\n } else {\n if (ordinalPalette) {\n return scale.color.palette(ordinalPalette, cardinality, type);\n }\n return scale.color.interpolate(quantitativeRange[0], quantitativeRange[1], cardinality);\n }\n } else { //time or quantitative\n return [quantitativeRange[0], quantitativeRange[1]];\n }\n }\n};\n\nscale.color.palette = function(range, cardinality, type) {\n // FIXME(kanitw): Jul 29, 2015 - check range is string\n switch (range) {\n case 'category10k':\n // tableau's category 10, ordered by perceptual kernel study results\n // https://github.com/uwdata/perceptual-kernels\n return ['#2ca02c', '#e377c2', '#7f7f7f', '#17becf', '#8c564b', '#d62728', '#bcbd22', '#9467bd', '#ff7f0e', '#1f77b4'];\n\n // d3/tableau category10/20/20b/20c\n case 'category10':\n return ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'];\n\n case 'category20':\n return ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'];\n\n case 'category20b':\n return ['#393b79', '#5254a3', '#6b6ecf', '#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31', '#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b', '#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6'];\n\n case 'category20c':\n return ['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc', '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'];\n }\n\n // TODO add our own set of custom ordinal color palette\n\n if (range in colorbrewer) {\n var palette = colorbrewer[range];\n\n // if cardinality pre-defined, use it.\n if (cardinality in palette) return palette[cardinality];\n\n // if not, use the highest cardinality one for nominal\n if (type === N) {\n return palette[Math.max.apply(null, util.keys(palette))];\n }\n\n // otherwise, interpolate\n var ps = cardinality < 3 ? 3 : Math.max.apply(null, util.keys(palette)),\n from = 0 , to = ps - 1;\n // FIXME add config for from / to\n\n return scale.color.interpolate(palette[ps][from], palette[ps][to], cardinality);\n }\n\n return range;\n};\n\nscale.color.interpolate = function (start, end, cardinality) {\n\n var interpolator = interpolate(start, end);\n return util.range(cardinality).map(function(i) { return interpolator(i*1.0/(cardinality-1)); });\n};\n\n},{\"../globals\":25,\"../schema/schema\":27,\"../util\":29,\"./sort\":16,\"./time\":20,\"colorbrewer\":3,\"d3-color\":4}],16:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar vlfield = require('../field');\n\nmodule.exports = sort;\n\n// adds new transforms that produce sorted fields\nfunction sort(data, encoding, stats, opt) {\n // jshint unused:false\n\n var datasetMapping = {};\n\n encoding.forEach(function(field, encType) {\n var sortBy = encoding.sort(encType, stats);\n if (sortBy.length > 0) {\n var fields = sortBy.map(function(d) {\n return {\n op: d.aggregate,\n field: vlfield.fieldRef(d, {nofn: true, data: !encoding._vega2})\n };\n });\n\n var byClause = sortBy.map(function(d) {\n var reverse = (d.reverse ? '-' : '');\n return reverse + vlfield.fieldRef(d, {data: !encoding._vega2});\n });\n\n var dataName = sort.getDataName(encType);\n\n var transforms = [\n {\n type: 'aggregate',\n groupby: [ encoding.fieldRef(encType) ],\n fields: fields\n },\n {\n type: 'sort',\n by: byClause\n }\n ];\n\n data.push({\n name: dataName,\n source: RAW,\n transform: transforms\n });\n\n datasetMapping[encType] = dataName;\n }\n });\n\n return data;\n}\n\nsort.getDataName = function(encType) {\n return 'sorted-' + encType;\n};\n\n\n},{\"../field\":24,\"../globals\":25}],17:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar marks = require('./marks');\n\nmodule.exports = stacking;\n\nfunction stacking(data, encoding, mdef) {\n if (!marks[encoding.marktype()].stack) return false;\n\n // TODO: add || encoding.has(LOD) here once LOD is implemented\n if (!encoding.has(COLOR)) return false;\n\n var dim=null, val=null, idx =null,\n isXMeasure = encoding.isMeasure(X),\n isYMeasure = encoding.isMeasure(Y),\n facets = encoding.facets();\n\n if (isXMeasure && !isYMeasure) {\n dim = Y;\n val = X;\n idx = 0;\n } else if (isYMeasure && !isXMeasure) {\n dim = X;\n val = Y;\n idx = 1;\n } else {\n return null; // no stack encoding\n }\n\n // add transform to compute sums for scale\n var stacked = {\n name: STACKED,\n source: encoding.dataTable(),\n transform: [{\n type: 'aggregate',\n groupby: [encoding.fieldRef(dim)].concat(facets), // dim and other facets\n fields: [{op: 'sum', field: encoding.fieldRef(val)}] // TODO check if field with aggregate is correct?\n }]\n };\n\n if (facets && facets.length > 0) {\n stacked.transform.push({ //calculate max for each facet\n type: 'aggregate',\n groupby: facets,\n fields: [{\n op: 'max',\n field: encoding.fieldName(val, {fn: 'sum'})\n }]\n });\n }\n\n data.push(stacked);\n\n // add stack transform to mark\n mdef.from.transform = [{\n type: 'stack',\n point: encoding.fieldRef(dim),\n height: encoding.fieldRef(val),\n output: {y1: val, y0: val + '2'}\n }];\n\n // TODO: This is super hack-ish -- consolidate into modular mark properties?\n mdef.properties.update[val] = mdef.properties.enter[val] = {scale: val, field: val};\n mdef.properties.update[val + '2'] = mdef.properties.enter[val + '2'] = {scale: val, field: val + '2'};\n\n return val; //return stack encoding\n}\n\n},{\"../globals\":25,\"./marks\":14}],18:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar vlfield = require('../field');\n\nmodule.exports = function(encoding, stats) {\n return {\n opacity: estimateOpacity(encoding, stats),\n };\n};\n\nfunction estimateOpacity(encoding,stats) {\n if (!stats) {\n return 1;\n }\n\n var numPoints = 0;\n\n if (encoding.isAggregate()) { // aggregate plot\n numPoints = 1;\n\n // get number of points in each \"cell\"\n // by calculating product of cardinality\n // for each non faceting and non-ordinal X / Y fields\n // note that ordinal x,y are not include since we can\n // consider that ordinal x are subdividing the cell into subcells anyway\n encoding.forEach(function(field, encType) {\n\n if (encType !== ROW && encType !== COL &&\n !((encType === X || encType === Y) &&\n vlfield.isOrdinalScale(field))\n ) {\n numPoints *= encoding.cardinality(encType, stats);\n }\n });\n\n } else { // raw plot\n\n // TODO: error handling\n if (!stats['*'])\n return 1;\n\n numPoints = stats['*'].max; // count\n\n // small multiples divide number of points\n var numMultiples = 1;\n if (encoding.has(ROW)) {\n numMultiples *= encoding.cardinality(ROW, stats);\n }\n if (encoding.has(COL)) {\n numMultiples *= encoding.cardinality(COL, stats);\n }\n numPoints /= numMultiples;\n }\n\n var opacity = 0;\n if (numPoints <= 25) {\n opacity = 1;\n } else if (numPoints < 200) {\n opacity = 0.8;\n } else if (numPoints < 1000 || encoding.is('tick')) {\n opacity = 0.7;\n } else {\n opacity = 0.3;\n }\n\n return opacity;\n}\n\n\n},{\"../field\":24,\"../globals\":25}],19:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nmodule.exports = subfaceting;\n\nfunction subfaceting(group, mdef, details, stack, encoding) {\n var m = group.marks;\n var g = {\n _name: 'subfacet',\n type: 'group',\n from: mdef.from,\n properties: {\n enter: {\n width: {group: 'width'},\n height: {group: 'height'}\n }\n },\n marks: m\n };\n\n group.marks = [g];\n delete mdef.from; // (move to the new g)\n\n //TODO test LOD -- we should support stack / line without color (LOD) field\n var trans = (g.from.transform || (g.from.transform = []));\n trans.unshift({type: 'facet', keys: details});\n\n if (stack && encoding.has(COLOR)) {\n trans.unshift({type: 'sort', by: encoding.fieldRef(COLOR)});\n }\n}\n\n},{\"../globals\":25}],20:[function(require,module,exports){\n'use strict';\n\nvar util = require('../util'),\n d3_time_format = require('d3-time-format');\n\nvar time = module.exports = {};\n\n// 'Wednesday September 17 04:00:00 2014'\n// Wednesday is the longest date\n// September is the longest month (8 in javascript as it is zero-indexed).\nvar LONG_DATE = new Date(Date.UTC(2014, 8, 17));\n\ntime.cardinality = function(field, stats, filterNull, type) {\n var timeUnit = field.timeUnit;\n switch (timeUnit) {\n case 'seconds': return 60;\n case 'minutes': return 60;\n case 'hours': return 24;\n case 'day': return 7;\n case 'date': return 31;\n case 'month': return 12;\n case 'year':\n var stat = stats[field.name],\n yearstat = stats['year_'+field.name];\n\n if (!yearstat) { return null; }\n\n return yearstat.distinct -\n (stat.nulls > 0 && filterNull[type] ? 1 : 0);\n }\n\n return null;\n};\n\ntime.formula = function(timeUnit, fieldRef) {\n // TODO(kanitw): add formula to other time format\n var fn = 'utc' + timeUnit;\n return fn + '(' + fieldRef + ')';\n};\n\ntime.maxLength = function(timeUnit, encoding) {\n switch (timeUnit) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n case 'date':\n return 2;\n case 'month':\n case 'day':\n var range = time.range(timeUnit, encoding);\n if (range) {\n // return the longest name in the range\n return Math.max.apply(null, range.map(function(r) {return r.length;}));\n }\n return 2;\n case 'year':\n return 4; //'1998'\n }\n // TODO(#600) revise this\n // no time unit\n var timeFormat = encoding.config('timeFormat');\n return d3_time_format.utcFormat(timeFormat)(LONG_DATE).length;\n};\n\ntime.range = function(timeUnit, encoding) {\n var labelLength = encoding.config('timeScaleLabelLength'),\n scaleLabel;\n switch (timeUnit) {\n case 'day':\n scaleLabel = encoding.config('dayScaleLabel');\n break;\n case 'month':\n scaleLabel = encoding.config('monthScaleLabel');\n break;\n }\n if (scaleLabel) {\n return labelLength ? scaleLabel.map(\n function(s) { return s.substr(0, labelLength);}\n ) : scaleLabel;\n }\n return;\n};\n\n\n/**\n * @param {Object} encoding\n * @return {Array} scales for time unit names\n */\ntime.scales = function(encoding) {\n var scales = encoding.reduce(function(scales, field) {\n var timeUnit = field.timeUnit;\n if (field.type === T && timeUnit && !scales[timeUnit]) {\n var scale = time.scale.def(field.timeUnit, encoding);\n if (scale) scales[timeUnit] = scale;\n }\n return scales;\n }, {});\n\n return util.vals(scales);\n};\n\n\ntime.scale = {};\n\n/** append custom time scales for axis label */\ntime.scale.def = function(timeUnit, encoding) {\n var range = time.range(timeUnit, encoding);\n\n if (range) {\n return {\n name: 'time-'+timeUnit,\n type: 'ordinal',\n domain: time.scale.domain(timeUnit),\n range: range\n };\n }\n return null;\n};\n\ntime.isOrdinalFn = function(timeUnit) {\n switch (timeUnit) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n case 'day':\n case 'date':\n case 'month':\n return true;\n }\n return false;\n};\n\ntime.scale.type = function(timeUnit, name) {\n if (name === COLOR) {\n return 'linear'; // time has order, so use interpolated ordinal color scale.\n }\n\n return time.isOrdinalFn(timeUnit) || name === COL || name === ROW ? 'ordinal' : 'linear';\n};\n\ntime.scale.domain = function(timeUnit, name) {\n var isColor = name === COLOR;\n switch (timeUnit) {\n case 'seconds':\n case 'minutes': return isColor ? [0,59] : util.range(0, 60);\n case 'hours': return isColor ? [0,23] : util.range(0, 24);\n case 'day': return isColor ? [0,6] : util.range(0, 7);\n case 'date': return isColor ? [1,31] : util.range(1, 32);\n case 'month': return isColor ? [0,11] : util.range(0, 12);\n }\n return null;\n};\n\n/** whether a particular time function has custom scale for labels implemented in time.scale */\ntime.hasScale = function(timeUnit) {\n switch (timeUnit) {\n case 'day':\n case 'month':\n return true;\n }\n return false;\n};\n\n},{\"../util\":29,\"d3-time-format\":6}],21:[function(require,module,exports){\n'use strict';\n\nrequire('./globals');\n\nvar consts = module.exports = {};\n\nconsts.encodingTypes = [X, Y, ROW, COL, SIZE, SHAPE, COLOR, TEXT, DETAIL];\n\nconsts.shorthand = {\n delim: '|',\n assign: '=',\n type: ',',\n func: '_'\n};\n\n},{\"./globals\":25}],22:[function(require,module,exports){\n'use strict';\n\nrequire('./globals');\n\nvar stats = require('datalib/src/stats');\n\nvar vldata = module.exports = {};\n\n/** Mapping from datalib's inferred type to Vega-lite's type */\nvldata.types = {\n 'boolean': N,\n 'number': Q,\n 'integer': Q,\n 'date': T,\n 'string': N\n};\n\nvldata.stats = function(data) {\n var summary = stats.summary(data);\n\n return summary.reduce(function(s, profile) {\n s[profile.field] = profile;\n return s;\n }, {\n '*': {\n max: data.length,\n min: 0\n }\n });\n};\n},{\"./globals\":25,\"datalib/src/stats\":35}],23:[function(require,module,exports){\n// utility for enc\n\n'use strict';\n\nvar consts = require('./consts'),\n c = consts.shorthand,\n vlfield = require('./field'),\n util = require('./util'),\n schema = require('./schema/schema'),\n encTypes = schema.encTypes;\n\nvar vlenc = module.exports = {};\n\nvlenc.countRetinal = function(enc) {\n var count = 0;\n if (enc.color) count++;\n if (enc.size) count++;\n if (enc.shape) count++;\n return count;\n};\n\nvlenc.has = function(enc, encType) {\n var fieldDef = enc && enc[encType];\n return fieldDef && fieldDef.name;\n};\n\nvlenc.isAggregate = function(enc) {\n for (var k in enc) {\n if (vlenc.has(enc, k) && enc[k].aggregate) {\n return true;\n }\n }\n return false;\n};\n\nvlenc.forEach = function(enc, f) {\n var i = 0;\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n f(enc[k], k, i++);\n }\n });\n};\n\nvlenc.map = function(enc, f) {\n var arr = [];\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n arr.push(f(enc[k], k, enc));\n }\n });\n return arr;\n};\n\nvlenc.reduce = function(enc, f, init) {\n var r = init;\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n r = f(r, enc[k], k, enc);\n }\n });\n return r;\n};\n\n/*\n * return key-value pairs of field name and list of fields of that field name\n */\nvlenc.fields = function(enc) {\n return vlenc.reduce(enc, function (m, field) {\n var fieldList = m[field.name] = m[field.name] || [],\n containsType = fieldList.containsType = fieldList.containsType || {};\n\n if (fieldList.indexOf(field) === -1) {\n fieldList.push(field);\n // augment the array with containsType.Q / O / N / T\n containsType[field.type] = true;\n }\n return m;\n }, {});\n};\n\nvlenc.shorthand = function(enc) {\n return vlenc.map(enc, function(field, et) {\n return et + c.assign + vlfield.shorthand(field);\n }).join(c.delim);\n};\n\nvlenc.fromShorthand = function(shorthand) {\n var enc = util.isArray(shorthand) ? shorthand : shorthand.split(c.delim);\n return enc.reduce(function(m, e) {\n var split = e.split(c.assign),\n enctype = split[0].trim(),\n field = split[1];\n\n m[enctype] = vlfield.fromShorthand(field);\n return m;\n }, {});\n};\n\n},{\"./consts\":21,\"./field\":24,\"./schema/schema\":27,\"./util\":29}],24:[function(require,module,exports){\n'use strict';\n\n// utility for field\n\nrequire('./globals');\n\nvar consts = require('./consts'),\n c = consts.shorthand,\n time = require('./compiler/time'),\n util = require('./util'),\n schema = require('./schema/schema');\n\nvar vlfield = module.exports = {};\n\n/**\n * @param field\n * @param opt\n * opt.nofn -- exclude bin, aggregate, timeUnit\n * opt.data - include 'data.'\n * opt.d - include 'd.'\n * opt.fn - replace fn with custom function prefix\n * opt.prefn - prepend fn with custom function prefix\n\n * @return {[type]} [description]\n */\nvlfield.fieldRef = function(field, opt) {\n opt = opt || {};\n\n var f = (opt.d ? 'd.' : '') +\n (opt.data ? 'data.' : '') +\n (opt.prefn || ''),\n nofn = opt.nofn || opt.fn,\n name = field.name;\n\n if (vlfield.isCount(field)) {\n return f + 'count';\n } else if (!nofn && field.bin) {\n return f + 'bin_' + name;\n } else if (!nofn && field.aggregate) {\n return f + field.aggregate + '_' + name;\n } else if (!nofn && field.timeUnit) {\n return f + field.timeUnit + '_' + name;\n } else if (opt.fn) {\n return f + opt.fn + '_' + name;\n } else {\n return f + name;\n }\n};\n\nvlfield.shorthand = function(f) {\n var c = consts.shorthand;\n return (f.aggregate ? f.aggregate + c.func : '') +\n (f.timeUnit ? f.timeUnit + c.func : '') +\n (f.bin ? 'bin' + c.func : '') +\n (f.name || '') + c.type + f.type;\n};\n\nvlfield.shorthands = function(fields, delim) {\n delim = delim || c.delim;\n return fields.map(vlfield.shorthand).join(delim);\n};\n\nvlfield.fromShorthand = function(shorthand) {\n var split = shorthand.split(c.type), i;\n var o = {\n name: split[0].trim(),\n type: split[1].trim()\n };\n\n // check aggregate type\n for (i in schema.aggregate.enum) {\n var a = schema.aggregate.enum[i];\n if (o.name.indexOf(a + '_') === 0) {\n o.name = o.name.substr(a.length + 1);\n if (a == 'count' && o.name.length === 0) o.name = '*';\n o.aggregate = a;\n break;\n }\n }\n\n // check time timeUnit\n for (i in schema.timefns) {\n var tu = schema.timefns[i];\n if (o.name && o.name.indexOf(tu + '_') === 0) {\n o.name = o.name.substr(o.length + 1);\n o.timeUnit = tu;\n break;\n }\n }\n\n // check bin\n if (o.name && o.name.indexOf('bin_') === 0) {\n o.name = o.name.substr(4);\n o.bin = true;\n }\n\n return o;\n};\n\nvar isType = vlfield.isType = function (fieldDef, type) {\n return fieldDef.type === type;\n};\n\nvar isTypes = vlfield.isTypes = function (fieldDef, types) {\n for (var t=0; t 0 && filterNull[type] ? 1 : 0);\n};\n\n},{\"./compiler/time\":20,\"./consts\":21,\"./globals\":25,\"./schema/schema\":27,\"./util\":29}],25:[function(require,module,exports){\n(function (global){\n'use strict';\n\n// declare global constant\nvar g = global || window;\n\ng.AGGREGATE = 'aggregate';\ng.RAW = 'raw';\ng.STACKED = 'stacked';\ng.INDEX = 'index';\n\ng.X = 'x';\ng.Y = 'y';\ng.ROW = 'row';\ng.COL = 'col';\ng.SIZE = 'size';\ng.SHAPE = 'shape';\ng.COLOR = 'color';\ng.TEXT = 'text';\ng.DETAIL = 'detail';\n\ng.N = 'N';\ng.O = 'O';\ng.Q = 'Q';\ng.T = 'T';\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],26:[function(require,module,exports){\n'use strict';\n\n// TODO(kanitw): chat with Vega team and possibly move this to vega-logging\nmodule.exports = function(prefix) {\n // Borrowed some ideas from http://stackoverflow.com/a/15653260/866989\n // and https://github.com/patik/console.log-wrapper/blob/master/consolelog.js\n var METHODS = ['error', 'info', 'debug', 'warn', 'log'];\n\n return METHODS.reduce(function(logger, fn) {\n var cfn = console[fn] ? fn : 'log';\n if (console[cfn].bind === 'undefined') { // IE < 10\n logger[fn] = Function.prototype.bind.call(console[cfn], console, prefix);\n }\n else {\n logger[fn] = console[cfn].bind(console, prefix);\n }\n return logger;\n }, {});\n};\n},{}],27:[function(require,module,exports){\n// Package of defining Vega-lite Specification's json schema\n'use strict';\n\nrequire('../globals');\n\nvar schema = module.exports = {},\n util = require('../util'),\n toMap = util.toMap,\n colorbrewer = require('colorbrewer');\n\nschema.util = require('./schemautil');\n\nschema.marktype = {\n type: 'string',\n enum: ['point', 'tick', 'bar', 'line', 'area', 'circle', 'square', 'text']\n};\n\nschema.aggregate = {\n type: 'string',\n enum: ['avg', 'sum', 'median', 'min', 'max', 'count'],\n supportedEnums: {\n Q: ['avg', 'median', 'sum', 'min', 'max', 'count'],\n O: ['median','min','max'],\n N: [],\n T: ['avg', 'median', 'min', 'max'],\n '': ['count']\n },\n supportedTypes: toMap([Q, N, O, T, ''])\n};\n\nschema.getSupportedRole = function(encType) {\n return schema.schema.properties.encoding.properties[encType].supportedRole;\n};\n\nschema.timeUnits = ['year', 'month', 'day', 'date', 'hours', 'minutes', 'seconds'];\n\nschema.defaultTimeFn = 'month';\n\nschema.timeUnit = {\n type: 'string',\n enum: schema.timeUnits,\n supportedTypes: toMap([T])\n};\n\nschema.scale_type = {\n type: 'string',\n // TODO(kanitw) read vega's schema here, add description\n enum: ['linear', 'log', 'pow', 'sqrt', 'quantile'],\n default: 'linear',\n supportedTypes: toMap([Q])\n};\n\nschema.field = {\n type: 'object',\n properties: {\n name: {\n type: 'string'\n }\n }\n};\n\nvar clone = util.duplicate;\nvar merge = schema.util.merge;\n\nschema.MAXBINS_DEFAULT = 15;\n\nvar bin = {\n type: ['boolean', 'object'],\n default: false,\n properties: {\n maxbins: {\n type: 'integer',\n default: schema.MAXBINS_DEFAULT,\n minimum: 2,\n description: 'Maximum number of bins.'\n }\n },\n supportedTypes: toMap([Q]) // TODO: add O after finishing #81\n};\n\nvar typicalField = merge(clone(schema.field), {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: [N, O, Q, T]\n },\n aggregate: schema.aggregate,\n timeUnit: schema.timeUnit,\n bin: bin,\n scale: {\n type: 'object',\n properties: {\n /* Common Scale Properties */\n type: schema.scale_type,\n reverse: {\n type: 'boolean',\n default: false,\n supportedTypes: toMap([Q, T])\n },\n\n /* Quantitative Scale Properties */\n nice: {\n type: 'string',\n enum: ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'],\n supportedTypes: toMap([T])\n },\n zero: {\n type: 'boolean',\n description: 'Include zero',\n default: true,\n supportedTypes: toMap([Q, T])\n },\n\n /* Vega-lite only Properties */\n useRawDomain: {\n type: 'boolean',\n default: undefined,\n description: 'Use the raw data range as scale domain instead of ' +\n 'aggregated data for aggregate axis. ' +\n 'This option does not work with sum or count aggregate' +\n 'as they might have a substantially larger scale range.' +\n 'By default, use value from config.useRawDomain.'\n }\n }\n }\n }\n});\n\nvar onlyOrdinalField = merge(clone(schema.field), {\n type: 'object',\n supportedRole: {\n dimension: true\n },\n properties: {\n type: {\n type: 'string',\n enum: [N, O, Q, T] // ordinal-only field supports Q when bin is applied and T when time unit is applied.\n },\n timeUnit: schema.timeUnit,\n bin: bin,\n aggregate: {\n type: 'string',\n enum: ['count'],\n supportedTypes: toMap([N, O]) // FIXME this looks weird to me\n }\n }\n});\n\nvar axisMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true},\n properties: {\n axis: {\n type: 'object',\n properties: {\n /* Vega Axis Properties */\n format: {\n type: 'string',\n default: undefined, // auto\n description: 'The formatting pattern for axis labels. '+\n 'If not undefined, this will be determined by ' +\n 'small/largeNumberFormat and the max value ' +\n 'of the field.'\n },\n grid: {\n type: 'boolean',\n default: true,\n description: 'A flag indicate if gridlines should be created in addition to ticks.'\n },\n layer: {\n type: 'string',\n default: 'back',\n description: 'A string indicating if the axis (and any gridlines) should be placed above or below the data marks. One of \"front\" (default) or \"back\".'\n },\n orient: {\n type: 'string',\n default: undefined,\n enum: ['top', 'right', 'left', 'bottom'],\n description: 'The orientation of the axis. One of top, bottom, left or right. The orientation can be used to further specialize the axis type (e.g., a y axis oriented for the right edge of the chart).'\n },\n ticks: {\n type: 'integer',\n default: 5,\n minimum: 0,\n description: 'A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale\\'s range.'\n },\n /* Vega Axis Properties that are automatically populated by Vega-lite */\n title: {\n type: 'string',\n default: undefined,\n description: 'A title for the axis. (Shows field name and its function by default.)'\n },\n /* Vega-lite only */\n maxLabelLength: {\n type: 'integer',\n default: 25,\n minimum: 0,\n description: 'Truncate labels that are too long.'\n },\n labelAngle: {\n type: 'integer',\n default: undefined, // auto\n minimum: 0,\n maximum: 360,\n description: 'Angle by which to rotate labels. Set to 0 to force horizontal.'\n },\n titleMaxLength: {\n type: 'integer',\n default: undefined,\n minimum: 0,\n description: 'Max length for axis title if the title is automatically generated from the field\\'s description'\n },\n titleOffset: {\n type: 'integer',\n default: undefined, // auto\n description: 'A title offset value for the axis.'\n },\n }\n }\n }\n};\n\nvar sortMixin = {\n type: 'object',\n properties: {\n sort: {\n type: 'array',\n default: [],\n items: {\n type: 'object',\n supportedTypes: toMap([N, O]),\n required: ['name', 'aggregate'],\n properties: {\n name: {\n type: 'string'\n },\n aggregate: {\n type: 'string',\n enum: ['avg', 'sum', 'min', 'max', 'count']\n },\n reverse: {\n type: 'boolean',\n default: false\n }\n }\n }\n }\n }\n};\n\nvar bandMixin = {\n type: 'object',\n properties: {\n band: {\n type: 'object',\n properties: {\n size: {\n type: 'integer',\n minimum: 0,\n default: undefined\n },\n padding: {\n type: 'integer',\n minimum: 0,\n default: 1\n }\n }\n }\n }\n};\n\nvar legendMixin = {\n type: 'object',\n properties: {\n legend: {\n type: 'object',\n description: 'Properties of a legend.',\n properties: {\n title: {\n type: 'string',\n default: undefined,\n description: 'A title for the legend. (Shows field name and its function by default.)'\n }\n }\n }\n }\n};\n\nvar textMixin = {\n type: 'object',\n supportedMarktypes: {'text': true},\n properties: {\n align: {\n type: 'string',\n default: 'right'\n },\n baseline: {\n type: 'string',\n default: 'middle'\n },\n color: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n margin: {\n type: 'integer',\n default: 4,\n minimum: 0\n },\n placeholder: {\n type: 'string',\n default: 'Abc'\n },\n font: {\n type: 'object',\n properties: {\n weight: {\n type: 'string',\n enum: ['normal', 'bold'],\n default: 'normal'\n },\n size: {\n type: 'integer',\n default: 10,\n minimum: 0\n },\n family: {\n type: 'string',\n default: 'Helvetica Neue'\n },\n style: {\n type: 'string',\n default: 'normal',\n enum: ['normal', 'italic']\n }\n }\n },\n format: {\n type: 'string',\n default: undefined, // auto\n description: 'The formatting pattern for text value. '+\n 'If not undefined, this will be determined by ' +\n 'small/largeNumberFormat and the max value ' +\n 'of the field.'\n },\n }\n};\n\nvar sizeMixin = {\n type: 'object',\n supportedMarktypes: {point: true, bar: true, circle: true, square: true, text: true},\n properties: {\n value: {\n type: 'integer',\n default: 30,\n minimum: 0,\n description: 'Size of marks.'\n }\n }\n};\n\nvar colorMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true, 'text': true},\n properties: {\n value: {\n type: 'string',\n role: 'color',\n default: '#4682b4',\n description: 'Color to be used for marks.'\n },\n opacity: {\n type: 'number',\n default: undefined, // auto\n minimum: 0,\n maximum: 1\n },\n scale: {\n type: 'object',\n properties: {\n range: {\n type: ['string', 'array'],\n default: undefined,\n description:\n 'Color palette, if undefined vega-lite will use data property' +\n 'to pick one from c10palette, c20palette, or ordinalPalette.'\n //FIXME\n },\n c10palette: {\n type: 'string',\n default: 'category10',\n enum: [\n // Tableau\n 'category10', 'category10k',\n // Color Brewer\n 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3'\n ]\n },\n c20palette: {\n type: 'string',\n default: 'category20',\n enum: ['category20', 'category20b', 'category20c']\n },\n ordinalPalette: {\n type: 'string',\n default: undefined,\n description: 'Color palette to encode ordinal variables.',\n enum: util.keys(colorbrewer)\n },\n quantitativeRange: {\n type: 'array',\n default: ['#AFC6A3', '#09622A'], // tableau greens\n // default: ['#ccece6', '#00441b'], // BuGn.9 [2-8]\n description: 'Color range to encode quantitative variables.',\n minItems: 2,\n maxItems: 2,\n items: {\n type: 'string',\n role: 'color'\n }\n }\n }\n }\n }\n};\n\nvar shapeMixin = {\n type: 'object',\n supportedMarktypes: {point: true, circle: true, square: true},\n properties: {\n value: {\n type: 'string',\n enum: ['circle', 'square', 'cross', 'diamond', 'triangle-up', 'triangle-down'],\n default: 'circle',\n description: 'Mark to be used.'\n },\n filled: {\n type: 'boolean',\n default: false,\n description: 'Whether the shape\\'s color should be used as fill color instead of stroke color.'\n }\n }\n};\n\nvar detailMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, line: true, circle: true, square: true}\n};\n\nvar rowMixin = {\n properties: {\n height: {\n type: 'number',\n minimum: 0,\n default: 150\n }\n }\n};\n\nvar colMixin = {\n properties: {\n width: {\n type: 'number',\n minimum: 0,\n default: 150\n },\n axis: {\n properties: {\n maxLabelLength: {\n type: 'integer',\n default: 12,\n minimum: 0,\n description: 'Truncate labels that are too long.'\n }\n }\n }\n }\n};\n\nvar facetMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true, text: true},\n properties: {\n padding: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.1\n }\n }\n};\n\nvar requiredNameType = {\n required: ['name', 'type']\n};\n\nvar multiRoleField = merge(clone(typicalField), {\n supportedRole: {\n measure: true,\n dimension: true\n }\n});\n\nvar quantitativeField = merge(clone(typicalField), {\n supportedRole: {\n measure: true,\n dimension: 'ordinal-only' // using size to encoding category lead to order interpretation\n }\n});\n\nvar onlyQuantitativeField = merge(clone(typicalField), {\n supportedRole: {\n measure: true\n }\n});\n\nvar x = merge(clone(multiRoleField), axisMixin, bandMixin, requiredNameType, sortMixin);\nvar y = clone(x);\n\nvar facet = merge(clone(onlyOrdinalField), requiredNameType, facetMixin, sortMixin);\nvar row = merge(clone(facet), axisMixin, rowMixin);\nvar col = merge(clone(facet), axisMixin, colMixin);\n\nvar size = merge(clone(quantitativeField), legendMixin, sizeMixin, sortMixin);\nvar color = merge(clone(multiRoleField), legendMixin, colorMixin, sortMixin);\n\nvar shape = merge(clone(onlyOrdinalField), legendMixin, shapeMixin, sortMixin);\nvar detail = merge(clone(onlyOrdinalField), detailMixin, sortMixin);\n\n// we only put aggregated measure in pivot table\nvar text = merge(clone(onlyQuantitativeField), textMixin, sortMixin);\n\n// TODO add label\n\nvar filter = {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n operands: {\n type: 'array',\n items: {\n type: ['string', 'boolean', 'integer', 'number']\n }\n },\n operator: {\n type: 'string',\n enum: ['>', '>=', '=', '!=', '<', '<=', 'notNull']\n }\n }\n }\n};\n\nvar data = {\n type: 'object',\n properties: {\n // data source\n formatType: {\n type: 'string',\n enum: ['json', 'csv'],\n default: 'json'\n },\n url: {\n type: 'string',\n default: undefined\n },\n values: {\n type: 'array',\n default: undefined,\n description: 'Pass array of objects instead of a url to a file.',\n items: {\n type: 'object',\n additionalProperties: true\n }\n }\n }\n};\n\nvar config = {\n type: 'object',\n properties: {\n // template\n width: {\n type: 'integer',\n default: undefined\n },\n height: {\n type: 'integer',\n default: undefined\n },\n viewport: {\n type: 'array',\n items: {\n type: 'integer'\n },\n default: undefined\n },\n gridColor: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n gridOpacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.08\n },\n\n // filter null\n // TODO(#597) revise this config\n filterNull: {\n type: 'object',\n properties: {\n N: {type:'boolean', default: false},\n O: {type:'boolean', default: false},\n Q: {type:'boolean', default: true},\n T: {type:'boolean', default: true}\n }\n },\n toggleSort: {\n type: 'string',\n default: O\n },\n autoSortLine: {\n type: 'boolean',\n default: true\n },\n\n // single plot\n singleHeight: {\n // will be overwritten by bandWidth * (cardinality + padding)\n type: 'integer',\n default: 200,\n minimum: 0\n },\n singleWidth: {\n // will be overwritten by bandWidth * (cardinality + padding)\n type: 'integer',\n default: 200,\n minimum: 0\n },\n // band size\n largeBandSize: {\n type: 'integer',\n default: 21,\n minimum: 0\n },\n smallBandSize: {\n //small multiples or single plot with high cardinality\n type: 'integer',\n default: 12,\n minimum: 0\n },\n largeBandMaxCardinality: {\n type: 'integer',\n default: 10\n },\n // small multiples\n cellPadding: {\n type: 'number',\n default: 0.1\n },\n cellGridColor: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n cellGridOpacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.15\n },\n cellBackgroundColor: {\n type: 'string',\n role: 'color',\n default: 'rgba(0,0,0,0)'\n },\n textCellWidth: {\n type: 'integer',\n default: 90,\n minimum: 0\n },\n\n // marks\n strokeWidth: {\n type: 'integer',\n default: 2,\n minimum: 0\n },\n singleBarOffset: {\n type: 'integer',\n default: 5,\n minimum: 0\n },\n // scales\n timeScaleLabelLength: {\n type: 'integer',\n default: 3,\n minimum: 0,\n description: 'Max length for values in dayScaleLabel and monthScaleLabel. Zero means using full names in dayScaleLabel/monthScaleLabel.'\n },\n dayScaleLabel: {\n type: 'array',\n items: {\n type: 'string'\n },\n default: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n description: 'Axis labels for day of week, starting from Sunday.' +\n '(Consistent with Javascript -- See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay.'\n },\n monthScaleLabel: {\n type: 'array',\n items: {\n type: 'string'\n },\n default: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n description: 'Axis labels for month.'\n },\n // other\n characterWidth: {\n type: 'integer',\n default: 6\n },\n maxSmallNumber: {\n type: 'number',\n default: 10000,\n description: 'maximum number that a field will be considered smallNumber.'+\n 'Used for axis labelling.'\n },\n smallNumberFormat: {\n type: 'string',\n default: '',\n description: 'D3 Number format for axis labels and text tables '+\n 'for number <= maxSmallNumber. Used for axis labelling.'\n },\n largeNumberFormat: {\n type: 'string',\n default: '.3s',\n description: 'D3 Number format for axis labels and text tables ' +\n 'for number > maxSmallNumber.'\n },\n timeFormat: {\n type: 'string',\n default: '%Y-%m-%d',\n description: 'Date format for axis labels.'\n },\n useRawDomain: {\n type: 'boolean',\n default: false,\n description: 'Use the raw data range as scale domain instead of ' +\n 'aggregated data for aggregate axis. ' +\n 'This option does not work with sum or count aggregate' +\n 'as they might have a substantially larger scale range.' +\n 'By default, use value from config.useRawDomain.'\n }\n }\n};\n\n/** @type Object Schema of a vega-lite specification */\nschema.schema = {\n $schema: 'http://json-schema.org/draft-04/schema#',\n description: 'Schema for Vega-lite specification',\n type: 'object',\n required: ['marktype', 'encoding', 'data'],\n properties: {\n data: data,\n marktype: schema.marktype,\n encoding: {\n type: 'object',\n properties: {\n x: x,\n y: y,\n row: row,\n col: col,\n size: size,\n color: color,\n shape: shape,\n text: text,\n detail: detail\n }\n },\n filter: filter,\n config: config\n }\n};\n\nschema.encTypes = util.keys(schema.schema.properties.encoding.properties);\n\n/** Instantiate a verbose vl spec from the schema */\nschema.instantiate = function() {\n return schema.util.instantiate(schema.schema);\n};\n\n},{\"../globals\":25,\"../util\":29,\"./schemautil\":28,\"colorbrewer\":3}],28:[function(require,module,exports){\n'use strict';\n\nvar schemautil = module.exports = {},\n util = require('../util');\n\nvar isEmpty = function(obj) {\n return Object.keys(obj).length === 0;\n};\n\nschemautil.extend = function(instance, schema) {\n return schemautil.merge(schemautil.instantiate(schema), instance);\n};\n\n// instantiate a schema\nschemautil.instantiate = function(schema) {\n var val;\n if (schema === undefined) {\n return undefined;\n } else if ('default' in schema) {\n val = schema.default;\n return util.isObject(val) ? util.duplicate(val) : val;\n } else if (schema.type === 'object') {\n var instance = {};\n for (var name in schema.properties) {\n val = schemautil.instantiate(schema.properties[name]);\n if (val !== undefined) {\n instance[name] = val;\n }\n }\n return instance;\n } else if (schema.type === 'array') {\n return [];\n }\n return undefined;\n};\n\n// remove all defaults from an instance\nschemautil.subtract = function(instance, defaults) {\n var changes = {};\n for (var prop in instance) {\n var def = defaults[prop];\n var ins = instance[prop];\n // Note: does not properly subtract arrays\n if (!defaults || def !== ins) {\n if (typeof ins === 'object' && !util.isArray(ins) && def) {\n var c = schemautil.subtract(ins, def);\n if (!isEmpty(c))\n changes[prop] = c;\n } else if (!util.isArray(ins) || ins.length > 0) {\n changes[prop] = ins;\n }\n }\n }\n return changes;\n};\n\nschemautil.merge = function(/*dest*, src0, src1, ...*/){\n var dest = arguments[0];\n for (var i=1 ; i 0)) return range; // also handles Invalid Date\n offseti(start, 1), floori(start);\n if (start < stop) range.push(new Date(+start));\n while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start));\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n while (--step >= 0) while (offseti(date, 1), !test(date));\n });\n };\n\n if (count) interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n return interval;\n }\n\n var second = newInterval(function(date) {\n date.setMilliseconds(0);\n }, function(date, step) {\n date.setTime(+date + step * 1e3);\n }, function(start, end) {\n return (end - start) / 1e3;\n });\n\n exports.seconds = second.range;\n\n var minute = newInterval(function(date) {\n date.setSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 6e4);\n }, function(start, end) {\n return (end - start) / 6e4;\n });\n\n exports.minutes = minute.range;\n\n var hour = newInterval(function(date) {\n date.setMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 36e5);\n }, function(start, end) {\n return (end - start) / 36e5;\n });\n\n exports.hours = hour.range;\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5;\n });\n\n exports.days = day.range;\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5;\n });\n }\n\n exports.sunday = weekday(0);\n\n exports.sundays = exports.sunday.range;\n\n exports.monday = weekday(1);\n\n exports.mondays = exports.monday.range;\n\n exports.tuesday = weekday(2);\n\n exports.tuesdays = exports.tuesday.range;\n\n exports.wednesday = weekday(3);\n\n exports.wednesdays = exports.wednesday.range;\n\n exports.thursday = weekday(4);\n\n exports.thursdays = exports.thursday.range;\n\n exports.friday = weekday(5);\n\n exports.fridays = exports.friday.range;\n\n exports.saturday = weekday(6);\n\n exports.saturdays = exports.saturday.range;\n\n var week = exports.sunday;\n\n exports.weeks = week.range;\n\n var month = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(1);\n }, function(date, step) {\n date.setMonth(date.getMonth() + step);\n }, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n });\n\n exports.months = month.range;\n\n var year = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n });\n\n exports.years = year.range;\n\n var utcSecond = newInterval(function(date) {\n date.setUTCMilliseconds(0);\n }, function(date, step) {\n date.setTime(+date + step * 1e3);\n }, function(start, end) {\n return (end - start) / 1e3;\n });\n\n exports.utcSeconds = utcSecond.range;\n\n var utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 6e4);\n }, function(start, end) {\n return (end - start) / 6e4;\n });\n\n exports.utcMinutes = utcMinute.range;\n\n var utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 36e5);\n }, function(start, end) {\n return (end - start) / 36e5;\n });\n\n exports.utcHours = utcHour.range;\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / 864e5;\n });\n\n exports.utcDays = utcDay.range;\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / 6048e5;\n });\n }\n\n exports.utcSunday = utcWeekday(0);\n\n exports.utcSundays = exports.utcSunday.range;\n\n exports.utcMonday = utcWeekday(1);\n\n exports.utcMondays = exports.utcMonday.range;\n\n exports.utcTuesday = utcWeekday(2);\n\n exports.utcTuesdays = exports.utcTuesday.range;\n\n exports.utcWednesday = utcWeekday(3);\n\n exports.utcWednesdays = exports.utcWednesday.range;\n\n exports.utcThursday = utcWeekday(4);\n\n exports.utcThursdays = exports.utcThursday.range;\n\n exports.utcFriday = utcWeekday(5);\n\n exports.utcFridays = exports.utcFriday.range;\n\n exports.utcSaturday = utcWeekday(6);\n\n exports.utcSaturdays = exports.utcSaturday.range;\n\n var utcWeek = exports.utcSunday;\n\n exports.utcWeeks = utcWeek.range;\n\n var utcMonth = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(1);\n }, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n }, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n });\n\n exports.utcMonths = utcMonth.range;\n\n var utcYear = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCMonth(0, 1);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n });\n\n exports.utcYears = utcYear.range;\n\n exports.interval = newInterval;\n exports.second = second;\n exports.minute = minute;\n exports.hour = hour;\n exports.day = day;\n exports.week = week;\n exports.month = month;\n exports.year = year;\n exports.utcSecond = utcSecond;\n exports.utcMinute = utcMinute;\n exports.utcHour = utcHour;\n exports.utcDay = utcDay;\n exports.utcWeek = utcWeek;\n exports.utcMonth = utcMonth;\n exports.utcYear = utcYear;\n\n}));\n},{}],32:[function(require,module,exports){\nvar util = require('../util'),\n time = require('../time'),\n EPSILON = 1e-15;\n\nfunction bins(opt) {\n if (!opt) { throw Error(\"Missing binning options.\"); }\n\n // determine range\n var maxb = opt.maxbins || 15,\n base = opt.base || 10,\n logb = Math.log(base),\n div = opt.div || [5, 2], \n min = opt.min,\n max = opt.max,\n span = max - min,\n step, level, minstep, precision, v, i, eps;\n\n if (opt.step) {\n // if step size is explicitly given, use that\n step = opt.step;\n } else if (opt.steps) {\n // if provided, limit choice to acceptable step sizes\n step = opt.steps[Math.min(\n opt.steps.length - 1,\n bisect(opt.steps, span/maxb, 0, opt.steps.length)\n )];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = opt.minstep || 0;\n step = Math.max(\n minstep,\n Math.pow(base, Math.round(Math.log(span) / logb) - level)\n );\n \n // increase step size if too many bins\n do { step *= base; } while (Math.ceil(span/step) > maxb);\n\n // decrease step size if allowed\n for (i=0; i= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n precision = v >= 0 ? 0 : ~~(-v / logb) + 1;\n eps = Math.pow(base, -precision - 1);\n min = Math.min(min, Math.floor(min / step + eps) * step);\n max = Math.ceil(max / step) * step;\n\n return {\n start: min,\n stop: max,\n step: step,\n unit: {precision: precision},\n value: value,\n index: index\n };\n}\n\nfunction bisect(a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (util.cmp(a[mid], x) < 0) { lo = mid + 1; }\n else { hi = mid; }\n }\n return lo;\n}\n\nfunction value(v) {\n return this.step * Math.floor(v / this.step + EPSILON);\n}\n\nfunction index(v) {\n return Math.floor((v - this.start) / this.step + EPSILON);\n}\n\nfunction date_value(v) {\n return this.unit.date(value.call(this, v));\n}\n\nfunction date_index(v) {\n return index.call(this, this.unit.unit(v));\n}\n\nbins.date = function(opt) {\n if (!opt) { throw Error(\"Missing date binning options.\"); }\n\n // find time step, then bin\n var units = opt.utc ? time.utc : time,\n dmin = opt.min,\n dmax = opt.max,\n maxb = opt.maxbins || 20,\n minb = opt.minbins || 4,\n span = (+dmax) - (+dmin),\n unit = opt.unit ? units[opt.unit] : units.find(span, minb, maxb),\n spec = bins({\n min: unit.min != null ? unit.min : unit.unit(dmin),\n max: unit.max != null ? unit.max : unit.unit(dmax),\n maxbins: maxb,\n minstep: unit.minstep,\n steps: unit.step\n });\n\n spec.unit = unit;\n spec.index = date_index;\n if (!opt.raw) spec.value = date_value;\n return spec;\n};\n\nmodule.exports = bins;\n\n},{\"../time\":36,\"../util\":37}],33:[function(require,module,exports){\nvar gen = module.exports = {};\n\ngen.repeat = function(val, n) {\n var a = Array(n), i;\n for (i=0; i stop) range.push(j);\n else while ((j = start + step * ++i) < stop) range.push(j);\n return range;\n};\n\ngen.random = {};\n\ngen.random.uniform = function(min, max) {\n if (max === undefined) {\n max = min === undefined ? 1 : min;\n min = 0;\n }\n var d = max - min;\n var f = function() {\n return min + d * Math.random();\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n\ngen.random.integer = function(a, b) {\n if (b === undefined) {\n b = a;\n a = 0;\n }\n var d = b - a;\n var f = function() {\n return a + Math.floor(d * Math.random());\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n\ngen.random.normal = function(mean, stdev) {\n mean = mean || 0;\n stdev = stdev || 1;\n var next;\n var f = function() {\n var x = 0, y = 0, rds, c;\n if (next !== undefined) {\n x = next;\n next = undefined;\n return x;\n }\n do {\n x = Math.random()*2-1;\n y = Math.random()*2-1;\n rds = x*x + y*y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2*Math.log(rds)/rds); // Box-Muller transform\n next = mean + y*c*stdev;\n return mean + x*c*stdev;\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n},{}],34:[function(require,module,exports){\nvar util = require('../util');\n\nvar TYPES = '__types__';\n\nvar PARSERS = {\n boolean: util.boolean,\n integer: util.number,\n number: util.number,\n date: util.date,\n string: function(x) { return x==='' ? null : x; }\n};\n\nvar TESTS = {\n boolean: function(x) { return x==='true' || x==='false' || util.isBoolean(x); },\n integer: function(x) { return TESTS.number(x) && (x=+x) === ~~x; },\n number: function(x) { return !isNaN(+x) && !util.isDate(x); },\n date: function(x) { return !isNaN(Date.parse(x)); }\n};\n\nfunction annotation(data, types) {\n if (!types) return data && data[TYPES] || null;\n data[TYPES] = types;\n}\n\nfunction type(values, f) {\n f = util.$(f);\n var v, i, n;\n\n // if data array has type annotations, use them\n if (values[TYPES]) {\n v = f(values[TYPES]);\n if (util.isString(v)) return v;\n }\n\n for (i=0, n=values.length; !util.isValid(v) && i b) b = v;\n }\n }\n return [a, b];\n};\n\n// Find the integer indices of the minimum and maximum values.\nstats.extent.index = function(values, f) {\n f = util.$(f);\n var x = -1, y = -1, a, b, v, i, n = values.length;\n for (i=0; i b) { b = v; y = i; }\n }\n }\n return [x, y];\n};\n\n// Compute the dot product of two arrays of numbers.\nstats.dot = function(values, a, b) {\n var sum = 0, i, v;\n if (!b) {\n if (values.length !== a.length) {\n throw Error('Array lengths must match.');\n }\n for (i=0; i -1 && p !== v) {\n mu = 1 + (i-1 + tie) / 2;\n for (; tie -1) {\n mu = 1 + (n-1 + tie) / 2;\n for (; tie max) max = x;\n delta = x - mean;\n mean = mean + delta / (++valid);\n M2 = M2 + delta * (x - mean);\n vals.push(x);\n }\n }\n M2 = M2 / (valid - 1);\n sd = Math.sqrt(M2);\n\n // sort values for median and iqr\n vals.sort(util.cmp);\n\n return {\n type: type(values, f),\n unique: u,\n count: values.length,\n valid: valid,\n missing: missing,\n distinct: distinct,\n min: min,\n max: max,\n mean: mean,\n stdev: sd,\n median: (v = stats.quantile(vals, 0.5)),\n q1: stats.quantile(vals, 0.25),\n q3: stats.quantile(vals, 0.75),\n modeskew: sd === 0 ? 0 : (mean - v) / sd\n };\n};\n\n// Compute profiles for all variables in a data set.\nstats.summary = function(data, fields) {\n fields = fields || util.keys(data[0]);\n var s = fields.map(function(f) {\n var p = stats.profile(data, util.$(f));\n return (p.field = f, p);\n });\n return (s.__summary__ = true, s);\n};\n\nmodule.exports = stats;\n},{\"./generate\":33,\"./import/type\":34,\"./util\":37}],36:[function(require,module,exports){\nvar d3_time = require('d3-time');\n\nvar tempDate = new Date(),\n baseDate = new Date(0, 0, 1).setFullYear(0), // Jan 1, 0 AD\n utcBaseDate = new Date(Date.UTC(0, 0, 1)).setUTCFullYear(0);\n\nfunction date(d) {\n return (tempDate.setTime(+d), tempDate);\n}\n\n// create a time unit entry\nfunction entry(type, date, unit, step, min, max) {\n var e = {\n type: type,\n date: date,\n unit: unit\n };\n if (step) {\n e.step = step;\n } else {\n e.minstep = 1;\n }\n if (min != null) e.min = min;\n if (max != null) e.max = max;\n return e;\n}\n\nfunction create(type, unit, base, step, min, max) {\n return entry(type,\n function(d) { return unit.offset(base, d); },\n function(d) { return unit.count(base, d); },\n step, min, max);\n}\n\nvar locale = [\n create('second', d3_time.second, baseDate),\n create('minute', d3_time.minute, baseDate),\n create('hour', d3_time.hour, baseDate),\n create('day', d3_time.day, baseDate, [1, 7]),\n create('month', d3_time.month, baseDate, [1, 3, 6]),\n create('year', d3_time.year, baseDate),\n\n // periodic units\n entry('seconds',\n function(d) { return new Date(1970, 0, 1, 0, 0, d); },\n function(d) { return date(d).getSeconds(); },\n null, 0, 59\n ),\n entry('minutes',\n function(d) { return new Date(1970, 0, 1, 0, d); },\n function(d) { return date(d).getMinutes(); },\n null, 0, 59\n ),\n entry('hours',\n function(d) { return new Date(1970, 0, 1, d); },\n function(d) { return date(d).getHours(); },\n null, 0, 23\n ),\n entry('weekdays',\n function(d) { return new Date(1970, 0, 4+d); },\n function(d) { return date(d).getDay(); },\n [1], 0, 6\n ),\n entry('dates',\n function(d) { return new Date(1970, 0, d); },\n function(d) { return date(d).getDate(); },\n [1], 1, 31\n ),\n entry('months',\n function(d) { return new Date(1970, d % 12, 1); },\n function(d) { return date(d).getMonth(); },\n [1], 0, 11\n )\n];\n\nvar utc = [\n create('second', d3_time.utcSecond, utcBaseDate),\n create('minute', d3_time.utcMinute, utcBaseDate),\n create('hour', d3_time.utcHour, utcBaseDate),\n create('day', d3_time.utcDay, utcBaseDate, [1, 7]),\n create('month', d3_time.utcMonth, utcBaseDate, [1, 3, 6]),\n create('year', d3_time.utcYear, utcBaseDate),\n\n // periodic units\n entry('seconds',\n function(d) { return new Date(Date.UTC(1970, 0, 1, 0, 0, d)); },\n function(d) { return date(d).getUTCSeconds(); },\n null, 0, 59\n ),\n entry('minutes',\n function(d) { return new Date(Date.UTC(1970, 0, 1, 0, d)); },\n function(d) { return date(d).getUTCMinutes(); },\n null, 0, 59\n ),\n entry('hours',\n function(d) { return new Date(Date.UTC(1970, 0, 1, d)); },\n function(d) { return date(d).getUTCHours(); },\n null, 0, 23\n ),\n entry('weekdays',\n function(d) { return new Date(Date.UTC(1970, 0, 4+d)); },\n function(d) { return date(d).getUTCDay(); },\n [1], 0, 6\n ),\n entry('dates',\n function(d) { return new Date(Date.UTC(1970, 0, d)); },\n function(d) { return date(d).getUTCDate(); },\n [1], 1, 31\n ),\n entry('months',\n function(d) { return new Date(Date.UTC(1970, d % 12, 1)); },\n function(d) { return date(d).getUTCMonth(); },\n [1], 0, 11\n )\n];\n\nvar STEPS = [\n [31536e6, 5], // 1-year\n [7776e6, 4], // 3-month\n [2592e6, 4], // 1-month\n [12096e5, 3], // 2-week\n [6048e5, 3], // 1-week\n [1728e5, 3], // 2-day\n [864e5, 3], // 1-day\n [432e5, 2], // 12-hour\n [216e5, 2], // 6-hour\n [108e5, 2], // 3-hour\n [36e5, 2], // 1-hour\n [18e5, 1], // 30-minute\n [9e5, 1], // 15-minute\n [3e5, 1], // 5-minute\n [6e4, 1], // 1-minute\n [3e4, 0], // 30-second\n [15e3, 0], // 15-second\n [5e3, 0], // 5-second\n [1e3, 0] // 1-second\n];\n\nfunction find(units, span, minb, maxb) {\n var step = STEPS[0], i, n, bins;\n\n for (i=1, n=STEPS.length; i step[0]) {\n bins = span / step[0];\n if (bins > maxb) {\n return units[STEPS[i-1][1]];\n }\n if (bins >= minb) {\n return units[step[1]];\n }\n }\n }\n return units[STEPS[n-1][1]];\n}\n\nfunction toUnitMap(units) {\n var map = {}, i, n;\n for (i=0, n=units.length; i 1 ?\n function(x) { return s.reduce(function(x,f) { return x[f]; }, x); } :\n function(x) { return x[f]; }\n );\n};\n\n// short-cut for accessor\nu.$ = u.accessor;\n\nu.mutator = function(f) {\n var s;\n return u.isString(f) && (s=u.field(f)).length > 1 ?\n function(x, v) {\n for (var i=0; i y) return sign[i];\n }\n return 0;\n };\n};\n\nu.cmp = function(a, b) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else if (a >= b) {\n return 0;\n } else if (a === null) {\n return -1;\n } else if (b === null) {\n return 1;\n }\n return NaN;\n};\n\nu.numcmp = function(a, b) { return a - b; };\n\nu.stablesort = function(array, sortBy, keyFn) {\n var indices = array.reduce(function(idx, v, i) {\n return (idx[keyFn(v)] = i, idx);\n }, {});\n\n array.sort(function(a, b) {\n var sa = sortBy(a),\n sb = sortBy(b);\n return sa < sb ? -1 : sa > sb ? 1\n : (indices[keyFn(a)] - indices[keyFn(b)]);\n });\n\n return array;\n};\n\n\n// string functions\n\nu.pad = function(s, length, pos, padchar) {\n padchar = padchar || \" \";\n var d = length - s.length;\n if (d <= 0) return s;\n switch (pos) {\n case 'left':\n return strrep(d, padchar) + s;\n case 'middle':\n case 'center':\n return strrep(Math.floor(d/2), padchar) +\n s + strrep(Math.ceil(d/2), padchar);\n default:\n return s + strrep(d, padchar);\n }\n};\n\nfunction strrep(n, str) {\n var s = \"\", i;\n for (i=0; i 180 || delta < -180\n ? delta - 360 * Math.round(delta / 360)\n : delta;\n }\n\n function Color() {}var reHex3 = /^#([0-9a-f]{3})$/;\n var reHex6 = /^#([0-9a-f]{6})$/;\n var reRgbInteger = /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\n var reRgbPercent = /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var reHslPercent = /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n color.prototype = Color.prototype = {\n displayable: function() {\n return this.rgb().displayable();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n };\n\n function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf))) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? rgb(m[1], m[2], m[3]) // rgb(255,0,0)\n : (m = reRgbPercent.exec(format)) ? rgb(m[1] * 2.55, m[2] * 2.55, m[3] * 2.55) // rgb(100%,0%,0%)\n : (m = reHslPercent.exec(format)) ? hsl(m[1], m[2] * .01, m[3] * .01) // hsl(120,50%,50%)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : null;\n }function rgbn(n) {\n return rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff);\n }\n\n var named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n };\n\n var darker = .7;\n var brighter = 1 / darker;\n\n function rgb(r, g, b) {\n if (arguments.length === 1) {\n if (!(r instanceof Color)) r = color(r);\n if (r) {\n r = r.rgb();\n b = r.b;\n g = r.g;\n r = r.r;\n } else {\n r = g = b = NaN;\n }\n }\n return new Rgb(r, g, b);\n }function Rgb(r, g, b) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n }var ____prototype = rgb.prototype = Rgb.prototype = new Color;\n\n ____prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k);\n };\n\n ____prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k);\n };\n\n ____prototype.rgb = function() {\n return this;\n };\n\n ____prototype.displayable = function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255);\n };\n\n ____prototype.toString = function() {\n return _format(this.r, this.g, this.b);\n };\n\n function _format(r, g, b) {\n return \"#\"\n + (isNaN(r) ? \"00\" : (r = Math.round(r)) < 16 ? \"0\" + Math.max(0, r).toString(16) : Math.min(255, r).toString(16))\n + (isNaN(g) ? \"00\" : (g = Math.round(g)) < 16 ? \"0\" + Math.max(0, g).toString(16) : Math.min(255, g).toString(16))\n + (isNaN(b) ? \"00\" : (b = Math.round(b)) < 16 ? \"0\" + Math.max(0, b).toString(16) : Math.min(255, b).toString(16));\n }\n\n function hsl(h, s, l) {\n if (arguments.length === 1) {\n if (h instanceof Hsl) {\n l = h.l;\n s = h.s;\n h = h.h;\n } else {\n if (!(h instanceof Color)) h = color(h);\n if (h) {\n if (h instanceof Hsl) return h;\n h = h.rgb();\n var r = h.r / 255,\n g = h.g / 255,\n b = h.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n range = max - min;\n l = (max + min) / 2;\n if (range) {\n s = l < .5 ? range / (max + min) : range / (2 - max - min);\n if (r === max) h = (g - b) / range + (g < b) * 6;\n else if (g === max) h = (b - r) / range + 2;\n else h = (r - g) / range + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n } else {\n h = s = l = NaN;\n }\n }\n }\n return new Hsl(h, s, l);\n }function Hsl(h, s, l) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n }var ___prototype = hsl.prototype = Hsl.prototype = new Color;\n\n ___prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k);\n };\n\n ___prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k);\n };\n\n ___prototype.rgb = function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < .5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2)\n );\n };\n\n ___prototype.displayable = function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1);\n };\n\n /* From FvD 13.37, CSS Color Module Level 3 */\n function hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n }\n\n var Kn = 18;\n\n var Xn = 0.950470;\n var Yn = 1;\n var Zn = 1.088830;\n var t0 = 4 / 29;\n var t1 = 6 / 29;\n var t2 = 3 * t1 * t1;\n var t3 = t1 * t1 * t1;\n function lab(l, a, b) {\n if (arguments.length === 1) {\n if (l instanceof Lab) {\n b = l.b;\n a = l.a;\n l = l.l;\n } else if (l instanceof Hcl) {\n var h = l.h * deg2rad;\n b = Math.sin(h) * l.c;\n a = Math.cos(h) * l.c;\n l = l.l;\n } else {\n if (!(l instanceof Rgb)) l = rgb(l);\n var r = rgb2xyz(l.r),\n g = rgb2xyz(l.g),\n b = rgb2xyz(l.b),\n x = xyz2lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / Xn),\n y = xyz2lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / Yn),\n z = xyz2lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / Zn);\n b = 200 * (y - z);\n a = 500 * (x - y);\n l = 116 * y - 16;\n }\n }\n return new Lab(l, a, b);\n }function Lab(l, a, b) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n }var __prototype = lab.prototype = Lab.prototype = new Color;\n\n __prototype.brighter = function(k) {\n return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b);\n };\n\n __prototype.darker = function(k) {\n return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b);\n };\n\n __prototype.rgb = function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Rgb(\n xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z)\n );\n };\n\n function xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n }\n\n function lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n }\n\n function xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n }\n\n function rgb2xyz(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n }\n\n var deg2rad = Math.PI / 180;\n var rad2deg = 180 / Math.PI;\n\n function hcl(h, c, l) {\n if (arguments.length === 1) {\n if (h instanceof Hcl) {\n l = h.l;\n c = h.c;\n h = h.h;\n } else {\n if (!(h instanceof Lab)) h = lab(h);\n l = h.l;\n c = Math.sqrt(h.a * h.a + h.b * h.b);\n h = Math.atan2(h.b, h.a) * rad2deg;\n if (h < 0) h += 360;\n }\n }\n return new Hcl(h, c, l);\n }function Hcl(h, c, l) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n }var _prototype = hcl.prototype = Hcl.prototype = new Color;\n\n _prototype.brighter = function(k) {\n return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k));\n };\n\n _prototype.darker = function(k) {\n return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k));\n };\n\n _prototype.rgb = function() {\n return lab(this).rgb();\n };\n\n var A = -0.14861;\n var B = +1.78277;\n var C = -0.29227;\n var D = -0.90649;\n var E = +1.97294;\n var ED = E * D;\n var EB = E * B;\n var BC_DA = B * C - D * A;\n function cubehelix(h, s, l) {\n if (arguments.length === 1) {\n if (h instanceof Cubehelix) {\n l = h.l;\n s = h.s;\n h = h.h;\n } else {\n if (!(h instanceof Rgb)) h = rgb(h);\n var r = h.r / 255, g = h.g / 255, b = h.b / 255;\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB);\n var bl = b - l, k = (E * (g - l) - C * bl) / D;\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)); // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n if (h < 0) h += 360;\n }\n }\n return new Cubehelix(h, s, l);\n }function Cubehelix(h, s, l) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n }var prototype = cubehelix.prototype = Cubehelix.prototype = new Color;\n\n prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k);\n };\n\n prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k);\n };\n\n prototype.rgb = function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh))\n );\n };\n\n function interpolateCubehelixGamma(gamma) {\n return function(a, b) {\n a = cubehelix(a);\n b = cubehelix(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * Math.pow(t, gamma);\n return a + \"\";\n };\n };\n }\n\n function interpolateCubehelixGammaLong(gamma) {\n return function(a, b) {\n a = cubehelix(a);\n b = cubehelix(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * Math.pow(t, gamma);\n return a + \"\";\n };\n };\n }\n\n function interpolateHclLong(a, b) {\n a = hcl(a);\n b = hcl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n ac = isNaN(a.c) ? b.c : a.c,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bc = isNaN(b.c) ? 0 : b.c - ac,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.c = ac + bc * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateHcl(a, b) {\n a = hcl(a);\n b = hcl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n ac = isNaN(a.c) ? b.c : a.c,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bc = isNaN(b.c) ? 0 : b.c - ac,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.c = ac + bc * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateLab(a, b) {\n a = lab(a);\n b = lab(b);\n var al = a.l,\n aa = a.a,\n ab = a.b,\n bl = b.l - al,\n ba = b.a - aa,\n bb = b.b - ab;\n return function(t) {\n a.l = al + bl * t;\n a.a = aa + ba * t;\n a.b = ab + bb * t;\n return a + \"\";\n };\n }\n\n function interpolateHslLong(a, b) {\n a = hsl(a);\n b = hsl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateHsl(a, b) {\n a = hsl(a);\n b = hsl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateRgb(a, b) {\n a = rgb(a);\n b = rgb(b);\n var ar = a.r,\n ag = a.g,\n ab = a.b,\n br = b.r - ar,\n bg = b.g - ag,\n bb = b.b - ab;\n return function(t) {\n return _format(Math.round(ar + br * t), Math.round(ag + bg * t), Math.round(ab + bb * t));\n };\n }\n\n var interpolateCubehelix = interpolateCubehelixGamma(1);\n var interpolateCubehelixLong = interpolateCubehelixGammaLong(1);\n\n exports.interpolateCubehelix = interpolateCubehelix;\n exports.interpolateCubehelixLong = interpolateCubehelixLong;\n exports.color = color;\n exports.rgb = rgb;\n exports.hsl = hsl;\n exports.lab = lab;\n exports.hcl = hcl;\n exports.cubehelix = cubehelix;\n exports.interpolateRgb = interpolateRgb;\n exports.interpolateHsl = interpolateHsl;\n exports.interpolateHslLong = interpolateHslLong;\n exports.interpolateLab = interpolateLab;\n exports.interpolateHcl = interpolateHcl;\n exports.interpolateHclLong = interpolateHclLong;\n exports.interpolateCubehelixGamma = interpolateCubehelixGamma;\n exports.interpolateCubehelixGammaLong = interpolateCubehelixGammaLong;\n\n}));","if (typeof Map === \"undefined\") {\n Map = function() { this.clear(); };\n Map.prototype = {\n set: function(k, v) { this._[k] = v; return this; },\n get: function(k) { return this._[k]; },\n has: function(k) { return k in this._; },\n delete: function(k) { return k in this._ && delete this._[k]; },\n clear: function() { this._ = Object.create(null); },\n get size() { var n = 0; for (var k in this._) ++n; return n; },\n forEach: function(c) { for (var k in this._) c(this._[k], k, this); }\n };\n} else (function() {\n var m = new Map;\n if (m.set(0, 0) !== m) {\n m = m.set;\n Map.prototype.set = function() { m.apply(this, arguments); return this; };\n }\n})();\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n factory((global.format = {}));\n}(this, function (exports) { 'use strict';\n\n var zhCn = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"¥\", \"\"]\n };\n\n var ruRu = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"\\xa0руб.\"]\n };\n\n var ptBr = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"R$\", \"\"]\n };\n\n var plPl = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"zł\"]\n };\n\n var nlNl = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\\xa0\", \"\"]\n };\n\n var mkMk = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0ден.\"]\n };\n\n var jaJp = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"\", \"円\"]\n };\n\n var itIt = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"]\n };\n\n var heIl = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"₪\", \"\"]\n };\n\n var frFr = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var frCa = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"$\"]\n };\n\n var fiFi = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var esEs = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var enUs = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n };\n\n var enGb = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"£\", \"\"]\n };\n\n var enCa = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n };\n\n var deDe = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var caEs = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n }\n\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n\n var prefixExponent;\n\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, p + i - 1)[0]; // less than 1y!\n }\n\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n\n function formatDefault(x, p) {\n x = x.toPrecision(p);\n\n out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (x[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n case \"e\": break out;\n default: if (i0 > 0) i0 = 0; break;\n }\n }\n\n return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n }\n\n var formatTypes = {\n \"\": formatDefault,\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n };\n\n\n // [[fill]align][sign][symbol][0][width][,][.precision][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\n function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n }\n\n function FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n var match,\n fill = match[1] || \" \",\n align = match[2] || \">\",\n sign = match[3] || \"-\",\n symbol = match[4] || \"\",\n zero = !!match[5],\n width = match[6] && +match[6],\n comma = !!match[7],\n precision = match[8] && +match[8].slice(1),\n type = match[9] || \"\";\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // Map invalid types to the default format.\n else if (!formatTypes[type]) type = \"\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n this.fill = fill;\n this.align = align;\n this.sign = sign;\n this.symbol = symbol;\n this.zero = zero;\n this.width = width;\n this.comma = comma;\n this.precision = precision;\n this.type = type;\n }\n\n FormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + this.type;\n };\n\n function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n }\n\n var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n function identity(x) {\n return x;\n }\n\n function locale(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal;\n\n function format(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n type = specifier.type;\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = !type || /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? (type ? 6 : 12)\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n return function(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Convert negative to positive, and compute the prefix.\n // Note that -0 is not less than 0, but 1 / -0 is!\n var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\n // Perform the initial formatting.\n value = formatType(value, precision);\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n var i = -1, n = value.length, c;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": return valuePrefix + value + valueSuffix + padding;\n case \"=\": return valuePrefix + padding + value + valueSuffix;\n case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n }\n return padding + valuePrefix + value + valueSuffix;\n };\n }\n\n function formatPrefix(specifier, value) {\n var f = format((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: format,\n formatPrefix: formatPrefix\n };\n }\n\n function precisionRound(step, max) {\n return Math.max(0, exponent(Math.abs(max)) - exponent(Math.abs(step))) + 1;\n }\n\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n\n var localeDefinitions = (new Map)\n .set(\"ca-ES\", caEs)\n .set(\"de-DE\", deDe)\n .set(\"en-CA\", enCa)\n .set(\"en-GB\", enGb)\n .set(\"en-US\", enUs)\n .set(\"es-ES\", esEs)\n .set(\"fi-FI\", fiFi)\n .set(\"fr-CA\", frCa)\n .set(\"fr-FR\", frFr)\n .set(\"he-IL\", heIl)\n .set(\"it-IT\", itIt)\n .set(\"ja-JP\", jaJp)\n .set(\"mk-MK\", mkMk)\n .set(\"nl-NL\", nlNl)\n .set(\"pl-PL\", plPl)\n .set(\"pt-BR\", ptBr)\n .set(\"ru-RU\", ruRu)\n .set(\"zh-CN\", zhCn);\n\n var defaultLocale = locale(enUs);\n exports.format = defaultLocale.format;\n exports.formatPrefix = defaultLocale.formatPrefix;\n\n function localeFormat(definition) {\n if (typeof definition === \"string\") {\n definition = localeDefinitions.get(definition);\n if (!definition) return null;\n }\n return locale(definition);\n }\n ;\n\n exports.localeFormat = localeFormat;\n exports.formatSpecifier = formatSpecifier;\n exports.precisionFixed = precisionFixed;\n exports.precisionPrefix = precisionPrefix;\n exports.precisionRound = precisionRound;\n\n}));","if (typeof Map === \"undefined\") {\n Map = function() { this.clear(); };\n Map.prototype = {\n set: function(k, v) { this._[k] = v; return this; },\n get: function(k) { return this._[k]; },\n has: function(k) { return k in this._; },\n delete: function(k) { return k in this._ && delete this._[k]; },\n clear: function() { this._ = Object.create(null); },\n get size() { var n = 0; for (var k in this._) ++n; return n; },\n forEach: function(c) { for (var k in this._) c(this._[k], k, this); }\n };\n} else (function() {\n var m = new Map;\n if (m.set(0, 0) !== m) {\n m = m.set;\n Map.prototype.set = function() { m.apply(this, arguments); return this; };\n }\n})();\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n factory((global.timeFormat = {}));\n}(this, function (exports) { 'use strict';\n\n var zhCn = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%Y/%-m/%-d\",\n time: \"%H:%M:%S\",\n periods: [\"上午\", \"下午\"],\n days: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n shortDays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n months: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n shortMonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"]\n };\n\n var ruRu = {\n dateTime: \"%A, %e %B %Y г. %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"воскресенье\", \"понедельник\", \"вторник\", \"среда\", \"четверг\", \"пятница\", \"суббота\"],\n shortDays: [\"вс\", \"пн\", \"вт\", \"ср\", \"чт\", \"пт\", \"сб\"],\n months: [\"января\", \"февраля\", \"марта\", \"апреля\", \"мая\", \"июня\", \"июля\", \"августа\", \"сентября\", \"октября\", \"ноября\", \"декабря\"],\n shortMonths: [\"янв\", \"фев\", \"мар\", \"апр\", \"май\", \"июн\", \"июл\", \"авг\", \"сен\", \"окт\", \"ноя\", \"дек\"]\n };\n\n var ptBr = {\n dateTime: \"%A, %e de %B de %Y. %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"],\n shortDays: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"],\n months: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n shortMonths: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"]\n };\n\n var plPl = {\n dateTime: \"%A, %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"],\n shortDays: [\"Niedz.\", \"Pon.\", \"Wt.\", \"Śr.\", \"Czw.\", \"Pt.\", \"Sob.\"],\n months: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\n shortMonths: [\"Stycz.\", \"Luty\", \"Marz.\", \"Kwie.\", \"Maj\", \"Czerw.\", \"Lipc.\", \"Sierp.\", \"Wrz.\", \"Paźdz.\", \"Listop.\", \"Grudz.\"]/* In Polish language abbraviated months are not commonly used so there is a dispute about the proper abbraviations. */\n };\n\n var nlNl = {\n dateTime: \"%a %e %B %Y %T\",\n date: \"%d-%m-%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"zondag\", \"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"],\n shortDays: [\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"],\n months: [\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"],\n shortMonths: [\"jan\", \"feb\", \"mrt\", \"apr\", \"mei\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"]\n };\n\n var mkMk = {\n dateTime: \"%A, %e %B %Y г. %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"недела\", \"понеделник\", \"вторник\", \"среда\", \"четврток\", \"петок\", \"сабота\"],\n shortDays: [\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"],\n months: [\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"],\n shortMonths: [\"јан\", \"фев\", \"мар\", \"апр\", \"мај\", \"јун\", \"јул\", \"авг\", \"сеп\", \"окт\", \"ное\", \"дек\"]\n };\n\n var itIt = {\n dateTime: \"%A %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"],\n shortDays: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"],\n months: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\n shortMonths: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"]\n };\n\n var heIl = {\n dateTime: \"%A, %e ב%B %Y %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\n shortDays: [\"א׳\", \"ב׳\", \"ג׳\", \"ד׳\", \"ה׳\", \"ו׳\", \"ש׳\"],\n months: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\n shortMonths: [\"ינו׳\", \"פבר׳\", \"מרץ\", \"אפר׳\", \"מאי\", \"יוני\", \"יולי\", \"אוג׳\", \"ספט׳\", \"אוק׳\", \"נוב׳\", \"דצמ׳\"]\n };\n\n var frFr = {\n dateTime: \"%A, le %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n shortDays: [\"dim.\", \"lun.\", \"mar.\", \"mer.\", \"jeu.\", \"ven.\", \"sam.\"],\n months: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n shortMonths: [\"janv.\", \"févr.\", \"mars\", \"avr.\", \"mai\", \"juin\", \"juil.\", \"août\", \"sept.\", \"oct.\", \"nov.\", \"déc.\"]\n };\n\n var frCa = {\n dateTime: \"%a %e %b %Y %X\",\n date: \"%Y-%m-%d\",\n time: \"%H:%M:%S\",\n periods: [\"\", \"\"],\n days: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n shortDays: [\"dim\", \"lun\", \"mar\", \"mer\", \"jeu\", \"ven\", \"sam\"],\n months: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n shortMonths: [\"jan\", \"fév\", \"mar\", \"avr\", \"mai\", \"jui\", \"jul\", \"aoû\", \"sep\", \"oct\", \"nov\", \"déc\"]\n };\n\n var fiFi = {\n dateTime: \"%A, %-d. %Bta %Y klo %X\",\n date: \"%-d.%-m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"a.m.\", \"p.m.\"],\n days: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"],\n shortDays: [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"],\n months: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"],\n shortMonths: [\"Tammi\", \"Helmi\", \"Maalis\", \"Huhti\", \"Touko\", \"Kesä\", \"Heinä\", \"Elo\", \"Syys\", \"Loka\", \"Marras\", \"Joulu\"]\n };\n\n var esEs = {\n dateTime: \"%A, %e de %B de %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"domingo\", \"lunes\", \"martes\", \"miércoles\", \"jueves\", \"viernes\", \"sábado\"],\n shortDays: [\"dom\", \"lun\", \"mar\", \"mié\", \"jue\", \"vie\", \"sáb\"],\n months: [\"enero\", \"febrero\", \"marzo\", \"abril\", \"mayo\", \"junio\", \"julio\", \"agosto\", \"septiembre\", \"octubre\", \"noviembre\", \"diciembre\"],\n shortMonths: [\"ene\", \"feb\", \"mar\", \"abr\", \"may\", \"jun\", \"jul\", \"ago\", \"sep\", \"oct\", \"nov\", \"dic\"]\n };\n\n var enUs = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var enGb = {\n dateTime: \"%a %e %b %X %Y\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var enCa = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%Y-%m-%d\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var deDe = {\n dateTime: \"%A, der %e. %B %Y, %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n shortDays: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n months: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mrz\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"]\n };\n\n var caEs = {\n dateTime: \"%A, %e de %B de %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"diumenge\", \"dilluns\", \"dimarts\", \"dimecres\", \"dijous\", \"divendres\", \"dissabte\"],\n shortDays: [\"dg.\", \"dl.\", \"dt.\", \"dc.\", \"dj.\", \"dv.\", \"ds.\"],\n months: [\"gener\", \"febrer\", \"març\", \"abril\", \"maig\", \"juny\", \"juliol\", \"agost\", \"setembre\", \"octubre\", \"novembre\", \"desembre\"],\n shortMonths: [\"gen.\", \"febr.\", \"març\", \"abr.\", \"maig\", \"juny\", \"jul.\", \"ag.\", \"set.\", \"oct.\", \"nov.\", \"des.\"]\n };\n\n var t0 = new Date;\n var t1 = new Date;\n\n function newInterval(floori, offseti, count) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.round = function(date) {\n var d0 = new Date(+date),\n d1 = new Date(date - 1);\n floori(d0), floori(d1), offseti(d1, 1);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), date;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [];\n start = new Date(start - 1);\n stop = new Date(+stop);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n offseti(start, 1), floori(start);\n if (start < stop) range.push(new Date(+start));\n while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start));\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n while (--step >= 0) while (offseti(date, 1), !test(date));\n });\n };\n\n if (count) interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n return interval;\n }\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5;\n });\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5;\n });\n }\n\n var sunday = weekday(0);\n var monday = weekday(1);\n\n var year = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n });\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / 864e5;\n });\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / 6048e5;\n });\n }\n\n var utcSunday = utcWeekday(0);\n var utcMonday = utcWeekday(1);\n\n var utcYear = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCMonth(0, 1);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n });\n\n function localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n function utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n function newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n }\n\n function locale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"S\": formatSeconds,\n \"U\": formatWeekNumberSunday,\n \"w\": formatWeekdayNumber,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"S\": formatUTCSeconds,\n \"U\": formatUTCWeekNumberSunday,\n \"w\": formatUTCWeekdayNumber,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"S\": parseSeconds,\n \"U\": parseWeekNumberSunday,\n \"w\": parseWeekdayNumber,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n if (format = formats[c]) c = format(date, pad == null ? (c === \"e\" ? \" \" : \"0\") : pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string, 0);\n if (i != string.length) return null;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n var day = utcDate(newYear(d.y)).getUTCDay();\n if (\"W\" in d) d.U = d.W, d.w = (d.w + 6) % 7, --day;\n d.m = 0;\n d.d = d.w + d.U * 7 - (day + 6) % 7;\n }\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n var day = newDate(newYear(d.y)).getDay();\n if (\"W\" in d) d.U = d.W, d.w = (d.w + 6) % 7, --day;\n d.m = 0;\n d.d = d.w + d.U * 7 - (day + 6) % 7;\n }\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function parsePeriod(d, string, i) {\n var n = periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (d.p = n, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.parse = newParse(specifier, localDate);\n f.toString = function() { return specifier; };\n return f;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.parse = newParse(specifier, utcDate);\n f.toString = function() { return specifier; };\n return f;\n }\n };\n }\n\n var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\n var numberRe = /^\\s*\\d+/;\n var percentRe = /^%/;\n var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n function pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n function requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n }\n\n function formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n }\n\n function formatLookup(names) {\n var map = new Map, i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n\n function parseWeekdayNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n\n function parseZone(d, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5))\n ? (d.Z = -string, i + 5) // sign differs from getTimezoneOffset!\n : -1;\n }\n\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n }\n\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n\n function formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n }\n\n function formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n }\n\n function formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n }\n\n function formatDayOfYear(d, p) {\n return pad(1 + day.count(year(d), d), p, 3);\n }\n\n function formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n }\n\n function formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n }\n\n function formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n }\n\n function formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n }\n\n function formatWeekNumberSunday(d, p) {\n return pad(sunday.count(year(d), d), p, 2);\n }\n\n function formatWeekdayNumber(d) {\n return d.getDay();\n }\n\n function formatWeekNumberMonday(d, p) {\n return pad(monday.count(year(d), d), p, 2);\n }\n\n function formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n }\n\n function formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n }\n\n function formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n }\n\n function formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n }\n\n function formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n }\n\n function formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n }\n\n function formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n }\n\n function formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n }\n\n function formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n }\n\n function formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n }\n\n function formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n }\n\n function formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n }\n\n function formatUTCWeekdayNumber(d) {\n return d.getUTCDay();\n }\n\n function formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n }\n\n function formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n }\n\n function formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n }\n\n function formatUTCZone() {\n return \"+0000\";\n }\n\n function formatLiteralPercent() {\n return \"%\";\n }\n\n var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n function formatIsoNative(date) {\n return date.toISOString();\n }\n\n formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n\n formatIsoNative.toString = function() {\n return isoSpecifier;\n };\n\n var formatIso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\")\n ? formatIsoNative\n : enUs.utcFormat(isoSpecifier);\n\n var isoFormat = formatIso;\n\n var localeDefinitions = (new Map)\n .set(\"ca-ES\", caEs)\n .set(\"de-DE\", deDe)\n .set(\"en-CA\", enCa)\n .set(\"en-GB\", enGb)\n .set(\"en-US\", enUs)\n .set(\"es-ES\", esEs)\n .set(\"fi-FI\", fiFi)\n .set(\"fr-CA\", frCa)\n .set(\"fr-FR\", frFr)\n .set(\"he-IL\", heIl)\n .set(\"it-IT\", itIt)\n .set(\"mk-MK\", mkMk)\n .set(\"nl-NL\", nlNl)\n .set(\"pl-PL\", plPl)\n .set(\"pt-BR\", ptBr)\n .set(\"ru-RU\", ruRu)\n .set(\"zh-CN\", zhCn);\n\n var defaultLocale = locale(enUs);\n exports.format = defaultLocale.format;\n exports.utcFormat = defaultLocale.utcFormat;\n\n function localeFormat(definition) {\n if (typeof definition === \"string\") {\n definition = localeDefinitions.get(definition);\n if (!definition) return null;\n }\n return locale(definition);\n }\n ;\n\n exports.localeFormat = localeFormat;\n exports.isoFormat = isoFormat;\n\n}));","'use strict';\n\nrequire('./globals');\n\nvar consts = require('./consts'),\n util = require('./util'),\n vlfield = require('./field'),\n vlenc = require('./enc'),\n schema = require('./schema/schema');\n\nmodule.exports = (function() {\n function Encoding(spec, theme) {\n var defaults = schema.instantiate(),\n specExtended = schema.util.merge(defaults, theme || {}, spec) ;\n\n this._data = specExtended.data;\n this._marktype = specExtended.marktype;\n this._enc = specExtended.encoding;\n this._config = specExtended.config;\n this._filter = specExtended.filter;\n // this._vega2 = true;\n }\n\n var proto = Encoding.prototype;\n\n Encoding.fromShorthand = function(shorthand, data, config, theme) {\n var c = consts.shorthand,\n split = shorthand.split(c.delim),\n marktype = split.shift().split(c.assign)[1].trim(),\n enc = vlenc.fromShorthand(split);\n\n return new Encoding({\n data: data,\n marktype: marktype,\n encoding: enc,\n config: config,\n filter: []\n }, theme);\n };\n\n Encoding.fromSpec = function(spec, theme) {\n return new Encoding(spec, theme);\n };\n\n proto.toShorthand = function() {\n var c = consts.shorthand;\n return 'mark' + c.assign + this._marktype +\n c.delim + vlenc.shorthand(this._enc);\n };\n\n Encoding.shorthand = function (spec) {\n var c = consts.shorthand;\n return 'mark' + c.assign + spec.marktype +\n c.delim + vlenc.shorthand(spec.encoding);\n };\n\n Encoding.specFromShorthand = function(shorthand, data, config, excludeConfig) {\n return Encoding.fromShorthand(shorthand, data, config).toSpec(excludeConfig);\n };\n\n proto.toSpec = function(excludeConfig, excludeData) {\n var enc = util.duplicate(this._enc),\n spec;\n\n spec = {\n marktype: this._marktype,\n encoding: enc,\n filter: this._filter\n };\n\n if (!excludeConfig) {\n spec.config = util.duplicate(this._config);\n }\n\n if (!excludeData) {\n spec.data = util.duplicate(this._data);\n }\n\n // remove defaults\n var defaults = schema.instantiate();\n return schema.util.subtract(spec, defaults);\n };\n\n\n proto.marktype = function() {\n return this._marktype;\n };\n\n proto.is = function(m) {\n return this._marktype === m;\n };\n\n proto.has = function(encType) {\n // equivalent to calling vlenc.has(this._enc, encType)\n return this._enc[encType].name !== undefined;\n };\n\n proto.field = function(et) {\n return this._enc[et];\n };\n\n proto.filter = function() {\n return this._filter;\n };\n\n // get \"field\" reference for vega\n proto.fieldRef = function(et, opt) {\n opt = opt || {};\n opt.data = !this._vega2 && (opt.data !== false);\n return vlfield.fieldRef(this._enc[et], opt);\n };\n\n proto.fieldName = function(et) {\n return this._enc[et].name;\n };\n\n /*\n * return key-value pairs of field name and list of fields of that field name\n */\n proto.fields = function() {\n return vlenc.fields(this._enc);\n };\n\n proto.fieldTitle = function(et) {\n if (vlfield.isCount(this._enc[et])) {\n return vlfield.count.displayName;\n }\n var fn = this._enc[et].aggregate || this._enc[et].timeUnit || (this._enc[et].bin && 'bin');\n if (fn) {\n var uppercase = fn === 'avg' ? 'MEAN' :fn.toUpperCase();\n return uppercase + '(' + this._enc[et].name + ')';\n } else {\n return this._enc[et].name;\n }\n };\n\n proto.scale = function(et) {\n return this._enc[et].scale || {};\n };\n\n proto.axis = function(et) {\n return this._enc[et].axis || {};\n };\n\n proto.bandSize = function(encType, useSmallBand) {\n useSmallBand = useSmallBand ||\n //isBandInSmallMultiples\n (encType === Y && this.has(ROW) && this.has(Y)) ||\n (encType === X && this.has(COL) && this.has(X));\n\n // if band.size is explicitly specified, follow the specification, otherwise draw value from config.\n return this.field(encType).band.size ||\n this.config(useSmallBand ? 'smallBandSize' : 'largeBandSize');\n };\n\n proto.aggregate = function(et) {\n return this._enc[et].aggregate;\n };\n\n // returns false if binning is disabled, otherwise an object with binning properties\n proto.bin = function(et) {\n var bin = this._enc[et].bin;\n if (bin === {})\n return false;\n if (bin === true)\n return {\n maxbins: schema.MAXBINS_DEFAULT\n };\n return bin;\n };\n\n proto.value = function(et) {\n return this._enc[et].value;\n };\n\n proto.numberFormat = function(fieldStats) {\n var formatConfig = fieldStats.max > this.config('maxSmallNumber') ?\n 'largeNumberFormat': 'smallNumberFormat';\n return this.config(formatConfig);\n };\n\n proto.sort = function(et, stats) {\n var sort = this._enc[et].sort,\n enc = this._enc,\n isTypes = vlfield.isTypes;\n\n if ((!sort || sort.length===0) &&\n // FIXME\n Encoding.toggleSort.support({encoding:this._enc}, stats, true) && //HACK\n this.config('toggleSort') === Q\n ) {\n var qField = isTypes(enc.x, [N, O]) ? enc.y : enc.x;\n\n if (isTypes(enc[et], [N, O])) {\n sort = [{\n name: qField.name,\n aggregate: qField.aggregate,\n type: qField.type,\n reverse: true\n }];\n }\n }\n\n return sort;\n };\n\n proto.map = function(f) {\n return vlenc.map(this._enc, f);\n };\n\n proto.reduce = function(f, init) {\n return vlenc.reduce(this._enc, f, init);\n };\n\n proto.forEach = function(f) {\n return vlenc.forEach(this._enc, f);\n };\n\n proto.type = function(et) {\n return this.has(et) ? this._enc[et].type : null;\n };\n\n proto.isType = function(et, type) {\n var field = this.field(et);\n return field && vlfield.isType(field, type);\n };\n\n\n proto.isTypes = function(et, type) {\n var field = this.field(et);\n return field && vlfield.isTypes(field, type);\n };\n\n Encoding.isOrdinalScale = function(encoding, encType) {\n return vlfield.isOrdinalScale(encoding.field(encType));\n };\n\n Encoding.isDimension = function(encoding, encType) {\n return vlfield.isDimension(encoding.field(encType));\n };\n\n Encoding.isMeasure = function(encoding, encType) {\n return vlfield.isMeasure(encoding.field(encType));\n };\n\n proto.isOrdinalScale = function(encType) {\n return this.has(encType) && Encoding.isOrdinalScale(this, encType);\n };\n\n proto.isDimension = function(encType) {\n return this.has(encType) && Encoding.isDimension(this, encType);\n };\n\n proto.isMeasure = function(encType) {\n return this.has(encType) && Encoding.isMeasure(this, encType);\n };\n\n proto.isAggregate = function() {\n return vlenc.isAggregate(this._enc);\n };\n\n proto.dataTable = function() {\n return this.isAggregate() ? AGGREGATE : RAW;\n };\n\n Encoding.isAggregate = function(spec) {\n return vlenc.isAggregate(spec.encoding);\n };\n\n Encoding.alwaysNoOcclusion = function(spec) {\n // FIXME raw OxQ with # of rows = # of O\n return vlenc.isAggregate(spec.encoding);\n };\n\n Encoding.isStack = function(spec) {\n // FIXME update this once we have control for stack ...\n return (spec.marktype === 'bar' || spec.marktype === 'area') &&\n spec.encoding.color;\n };\n\n proto.isStack = function() {\n // FIXME update this once we have control for stack ...\n return (this.is('bar') || this.is('area')) && this.has('color');\n };\n\n proto.details = function() {\n var encoding = this;\n return this.reduce(function(refs, field, encType) {\n if (!field.aggregate && (encType !== X && encType !== Y)) {\n refs.push(encoding.fieldRef(encType));\n }\n return refs;\n }, []);\n };\n\n proto.facets = function() {\n var encoding = this;\n return this.reduce(function(refs, field, encType) {\n if (!field.aggregate && (encType == ROW || encType == COL)) {\n refs.push(encoding.fieldRef(encType));\n }\n return refs;\n }, []);\n };\n\n proto.cardinality = function(encType, stats) {\n return vlfield.cardinality(this.field(encType), stats, this.config('filterNull'));\n };\n\n proto.isRaw = function() {\n return !this.isAggregate();\n };\n\n proto.data = function() {\n return this._data;\n };\n\n // returns whether the encoding has values embedded\n proto.hasValues = function() {\n var vals = this.data().values;\n return vals && vals.length;\n };\n\n proto.config = function(name) {\n return this._config[name];\n };\n\n Encoding.transpose = function(spec) {\n var oldenc = spec.encoding,\n enc = util.duplicate(spec.encoding);\n enc.x = oldenc.y;\n enc.y = oldenc.x;\n enc.row = oldenc.col;\n enc.col = oldenc.row;\n spec.encoding = enc;\n return spec;\n };\n\n // FIXME: REMOVE everything below here\n\n Encoding.toggleSort = function(spec) {\n spec.config = spec.config || {};\n spec.config.toggleSort = spec.config.toggleSort === Q ? N : Q;\n return spec;\n };\n\n\n Encoding.toggleSort.direction = function(spec) {\n if (!Encoding.toggleSort.support(spec)) { return; }\n var enc = spec.encoding;\n return enc.x.type === N ? 'x' : 'y';\n };\n\n Encoding.toggleSort.mode = function(spec) {\n return spec.config.toggleSort;\n };\n\n Encoding.toggleSort.support = function(spec, stats) {\n var enc = spec.encoding,\n isTypes = vlfield.isTypes;\n\n if (vlenc.has(enc, ROW) || vlenc.has(enc, COL) ||\n !vlenc.has(enc, X) || !vlenc.has(enc, Y) ||\n !Encoding.alwaysNoOcclusion(spec, stats)) {\n return false;\n }\n\n return ( isTypes(enc.x, [N,O]) && vlfield.isMeasure(enc.y)) ? 'x' :\n ( isTypes(enc.y, [N,O]) && vlfield.isMeasure(enc.x)) ? 'y' : false;\n };\n\n Encoding.toggleFilterNullO = function(spec) {\n spec.config = spec.config || {};\n spec.config.filterNull = spec.config.filterNull || { //FIXME\n T: true,\n Q: true\n };\n spec.config.filterNull.O = !spec.config.filterNull.O;\n return spec;\n };\n\n Encoding.toggleFilterNullO.support = function(spec, stats) {\n var fields = vlenc.fields(spec.encoding);\n for (var fieldName in fields) {\n var fieldList = fields[fieldName];\n if (fieldList.containsType.O && fieldName in stats && stats[fieldName].nulls > 0) {\n return true;\n }\n }\n return false;\n };\n\n return Encoding;\n})();\n","'use strict';\n\nrequire('../globals');\n\nvar util = require('../util'),\n setter = util.setter,\n getter = util.getter,\n time = require('./time');\n\nvar axis = module.exports = {};\n\naxis.def = function(name, encoding, layout, stats, opt) {\n var isCol = name == COL,\n isRow = name == ROW,\n type = isCol ? 'x' : isRow ? 'y' : name;\n\n var def = {\n type: type,\n scale: name,\n properties: {},\n layer: encoding.field(name).axis.layer,\n orient: axis.orient(name, encoding, stats)\n };\n\n // Add axis label custom scale (for bin / time)\n def = axis.labels.scale(def, encoding, name);\n def = axis.labels.format(def, name, encoding, stats);\n def = axis.labels.angle(def, encoding, name);\n\n // for x-axis, set ticks for Q or rotate scale for ordinal scale\n if (name == X) {\n if ((encoding.isDimension(X) || encoding.isType(X, T)) &&\n !('angle' in getter(def, ['properties', 'labels']))) {\n // TODO(kanitw): Jul 19, 2015 - #506 add condition for rotation\n def = axis.labels.rotate(def);\n } else { // Q\n def.ticks = encoding.field(name).axis.ticks;\n }\n }\n\n // TitleOffset depends on labels rotation\n def.titleOffset = axis.titleOffset(encoding, layout, name);\n\n //def.offset is used in axis.grid\n if(isRow) def.offset = axis.titleOffset(encoding, layout, Y) + 20;\n // FIXME(kanitw): Jul 19, 2015 - offset for column when x is put on top\n\n def = axis.grid(def, name, encoding, layout);\n def = axis.title(def, name, encoding, layout, opt);\n\n if (isRow || isCol) def = axis.hideTicks(def);\n\n return def;\n};\n\naxis.orient = function(name, encoding, stats) {\n var orient = encoding.field(name).axis.orient;\n if (orient) return orient;\n\n if (name === COL) return 'top';\n\n // x-axis for long y - put on top\n if (name === X && encoding.has(Y) && encoding.isOrdinalScale(Y) && encoding.cardinality(Y, stats) > 30) {\n return 'top';\n }\n\n return undefined;\n};\n\naxis.grid = function(def, name, encoding, layout) {\n var cellPadding = layout.cellPadding,\n isCol = name == COL,\n isRow = name == ROW;\n\n if (encoding.axis(name).grid) {\n def.grid = true;\n\n if (isCol) {\n // set grid property -- put the lines on the right the cell\n def.properties.grid = {\n x: {\n offset: layout.cellWidth * (1+ cellPadding/2.0),\n // default value(s) -- vega doesn't do recursive merge\n scale: 'col'\n },\n y: {\n value: -layout.cellHeight * (cellPadding/2),\n },\n stroke: { value: encoding.config('cellGridColor') },\n opacity: { value: encoding.config('cellGridOpacity') }\n };\n } else if (isRow) {\n // set grid property -- put the lines on the top\n def.properties.grid = {\n y: {\n offset: -layout.cellHeight * (cellPadding/2),\n // default value(s) -- vega doesn't do recursive merge\n scale: 'row'\n },\n x: {\n value: def.offset\n },\n x2: {\n offset: def.offset + (layout.cellWidth * 0.05),\n // default value(s) -- vega doesn't do recursive merge\n group: 'mark.group.width',\n mult: 1\n },\n stroke: { value: encoding.config('cellGridColor') },\n opacity: { value: encoding.config('cellGridOpacity') }\n };\n } else {\n def.properties.grid = {\n stroke: { value: encoding.config('gridColor') },\n opacity: { value: encoding.config('gridOpacity') }\n };\n }\n }\n return def;\n};\n\naxis.hideTicks = function(def) {\n def.properties.ticks = {opacity: {value: 0}};\n def.properties.majorTicks = {opacity: {value: 0}};\n def.properties.axis = {opacity: {value: 0}};\n return def;\n};\n\naxis.title = function (def, name, encoding, layout) {\n var ax = encoding.field(name).axis;\n\n if (ax.title) {\n def.title = ax.title;\n } else {\n // if not defined, automatically determine axis title from field def\n var fieldTitle = encoding.fieldTitle(name),\n maxLength;\n\n if (ax.titleMaxLength) {\n maxLength = ax.titleMaxLength;\n } else if (name===X) {\n maxLength = layout.cellWidth / encoding.config('characterWidth');\n } else if (name === Y) {\n maxLength = layout.cellHeight / encoding.config('characterWidth');\n }\n\n def.title = maxLength ? util.truncate(fieldTitle, maxLength) : fieldTitle;\n }\n\n if (name === ROW) {\n def.properties.title = {\n angle: {value: 0},\n align: {value: 'right'},\n baseline: {value: 'middle'},\n dy: {value: (-layout.height/2) -20}\n };\n }\n\n return def;\n};\n\naxis.labels = {};\n\n/** add custom label for time type and bin */\naxis.labels.scale = function(def, encoding, name) {\n // time\n var timeUnit = encoding.field(name).timeUnit;\n if (encoding.isType(name, T) && timeUnit && (time.hasScale(timeUnit))) {\n setter(def, ['properties','labels','text','scale'], 'time-'+ timeUnit);\n }\n // FIXME bin\n return def;\n};\n\n/**\n * Determine number format or truncate if maxLabel length is presented.\n */\naxis.labels.format = function (def, name, encoding, stats) {\n var fieldStats = stats[encoding.field(name).name];\n\n if (encoding.axis(name).format) {\n def.format = encoding.axis(name).format;\n } else if (encoding.isType(name, Q) || fieldStats.type === 'number') {\n def.format = encoding.numberFormat(fieldStats);\n } else if (encoding.isType(name, T)) {\n var timeUnit = encoding.field(name).timeUnit;\n if (!timeUnit) {\n def.format = encoding.config('timeFormat');\n } else if (timeUnit === 'year') {\n def.format = 'd';\n }\n } else if (encoding.isTypes(name, [N, O]) && encoding.axis(name).maxLabelLength) {\n setter(def,\n ['properties','labels','text','template'],\n '{{data | truncate:' + encoding.axis(name).maxLabelLength + '}}'\n );\n }\n\n return def;\n};\n\naxis.labels.angle = function(def, encoding, name) {\n var angle = encoding.axis(name).labelAngle;\n if (typeof angle === 'undefined') return def;\n\n setter(def, ['properties', 'labels', 'angle', 'value'], angle);\n return def;\n};\n\naxis.labels.rotate = function(def) {\n var align = def.orient ==='top' ? 'left' : 'right';\n setter(def, ['properties','labels', 'angle', 'value'], 270);\n setter(def, ['properties','labels', 'align', 'value'], align);\n setter(def, ['properties','labels', 'baseline', 'value'], 'middle');\n return def;\n};\n\naxis.titleOffset = function (encoding, layout, name) {\n // return specified value if specified\n var value = encoding.axis(name).titleOffset;\n if (value) return value;\n\n switch (name) {\n //FIXME make this adjustable\n case ROW: return 0;\n case COL: return 35;\n }\n return getter(layout, [name, 'axisTitleOffset']);\n};\n","'use strict';\n\nvar summary = module.exports = require('datalib/src/stats').summary;\n\nrequire('../globals');\n\n/**\n * Module for compiling Vega-lite spec into Vega spec.\n */\nvar compiler = module.exports = {};\n\nvar Encoding = require('../Encoding'),\n axis = compiler.axis = require('./axis'),\n legend = compiler.legend = require('./legend'),\n marks = compiler.marks = require('./marks'),\n scale = compiler.scale = require('./scale');\n\ncompiler.data = require('./data');\ncompiler.facet = require('./facet');\ncompiler.layout = require('./layout');\ncompiler.sort = require('./sort');\ncompiler.stack = require('./stack');\ncompiler.style = require('./style');\ncompiler.subfacet = require('./subfacet');\ncompiler.time = require('./time');\n\ncompiler.compile = function (spec, stats, theme) {\n return compiler.compileEncoding(Encoding.fromSpec(spec, theme), stats);\n};\n\ncompiler.shorthand = function (shorthand, stats, config, theme) {\n return compiler.compileEncoding(Encoding.fromShorthand(shorthand, config, theme), stats);\n};\n\n/**\n * Create a Vega specification from a Vega-lite Encoding object.\n */\ncompiler.compileEncoding = function (encoding, stats) {\n // no need to pass stats if you pass in the data\n if (!stats) {\n if (encoding.hasValues()) {\n stats = summary(encoding.data().values).reduce(function(s, p) {\n s[p.field] = p;\n return s;\n }, {});\n } else {\n console.error('No stats provided and data is not embedded.');\n }\n }\n\n var layout = compiler.layout(encoding, stats);\n\n var spec = {\n width: layout.width,\n height: layout.height,\n padding: 'auto',\n data: compiler.data(encoding),\n // global scales contains only time unit scales\n scales: compiler.time.scales(encoding),\n marks: [{\n _name: 'cell',\n type: 'group',\n properties: {\n enter: {\n width: layout.cellWidth ? {value: layout.cellWidth} : {group: 'width'},\n height: layout.cellHeight ? {value: layout.cellHeight} : {group: 'height'}\n }\n }\n }]\n };\n\n var group = spec.marks[0];\n\n // FIXME remove compiler.sort after migrating to vega 2.\n spec.data = compiler.sort(spec.data, encoding, stats); // append new data\n\n // marks\n var style = compiler.style(encoding, stats),\n mdefs = group.marks = marks.def(encoding, layout, style, stats),\n mdef = mdefs[mdefs.length - 1]; // TODO: remove this dirty hack by refactoring the whole flow\n\n var lineType = marks[encoding.marktype()].line;\n\n // handle subfacets\n\n var details = encoding.details(),\n stack = encoding.isAggregate() && details.length > 0 && compiler.stack(spec.data, encoding, mdef); // modify spec.data, mdef.{from,properties}\n\n if (details.length > 0 && (stack || lineType)) {\n //subfacet to group stack / line together in one group\n compiler.subfacet(group, mdef, details, stack, encoding);\n }\n\n // auto-sort line/area values\n if (lineType && encoding.config('autoSortLine')) {\n var f = (encoding.isMeasure(X) && encoding.isDimension(Y)) ? Y : X;\n if (!mdef.from) mdef.from = {};\n // TODO: why - ?\n mdef.from.transform = [{type: 'sort', by: '-' + encoding.fieldRef(f)}];\n }\n\n // get a flattened list of all scale names that are used in the vl spec\n var singleScaleNames = [].concat.apply([], mdefs.map(function(markProps) {\n return scale.names(markProps.properties.update);\n }));\n\n // Small Multiples\n if (encoding.has(ROW) || encoding.has(COL)) {\n spec = compiler.facet(group, encoding, layout, spec, singleScaleNames, stack, stats);\n spec.legends = legend.defs(encoding, style);\n } else {\n group.scales = scale.defs(singleScaleNames, encoding, layout, stats, {stack: stack});\n\n group.axes = [];\n if (encoding.has(X)) group.axes.push(axis.def(X, encoding, layout, stats));\n if (encoding.has(Y)) group.axes.push(axis.def(Y, encoding, layout, stats));\n\n group.legends = legend.defs(encoding, style);\n }\n\n return spec;\n};\n\n","'use strict';\n\nrequire('../globals');\n\nmodule.exports = data;\n\nvar vlfield = require('../field'),\n util = require('../util'),\n time = require('./time');\n\n/**\n * Create Vega's data array from a given encoding.\n *\n * @param {Encoding} encoding\n * @return {Array} Array of Vega data.\n * This always includes a \"raw\" data table.\n * If the encoding contains aggregate value, this will also create\n * aggregate table as well.\n */\nfunction data(encoding) {\n var def = [data.raw(encoding)];\n\n var aggregate = data.aggregate(encoding);\n if (aggregate) def.push(data.aggregate(encoding));\n\n // TODO add \"having\" filter here\n\n // append non-positive filter at the end for the data table\n data.filterNonPositive(def[def.length - 1], encoding);\n\n return def;\n}\n\ndata.raw = function(encoding) {\n var raw = {name: RAW};\n\n // Data source (url or inline)\n if (encoding.hasValues()) {\n raw.values = encoding.data().values;\n } else {\n raw.url = encoding.data().url;\n raw.format = {type: encoding.data().formatType};\n }\n\n // Set data's format.parse if needed\n var parse = data.raw.formatParse(encoding);\n if (parse) {\n raw.format = raw.format || {};\n raw.format.parse = parse;\n }\n\n raw.transform = data.raw.transform(encoding);\n return raw;\n};\n\ndata.raw.formatParse = function(encoding) {\n var parse;\n\n encoding.forEach(function(field) {\n if (field.type == T) {\n parse = parse || {};\n parse[field.name] = 'date';\n } else if (field.type == Q) {\n if (vlfield.isCount(field)) return;\n parse = parse || {};\n parse[field.name] = 'number';\n }\n });\n\n return parse;\n};\n\n/**\n * Generate Vega transforms for the raw data table. This can include\n * transforms for time unit, binning and filtering.\n */\ndata.raw.transform = function(encoding) {\n // null filter comes first so transforms are not performed on null values\n // time and bin should come before filter so we can filter by time and bin\n return data.raw.transform.nullFilter(encoding).concat(\n data.raw.transform.time(encoding),\n data.raw.transform.bin(encoding),\n data.raw.transform.filter(encoding)\n );\n};\n\nvar BINARY = {\n '>': true,\n '>=': true,\n '=': true,\n '!=': true,\n '<': true,\n '<=': true\n};\n\ndata.raw.transform.time = function(encoding) {\n return encoding.reduce(function(transform, field, encType) {\n if (field.type === T && field.timeUnit) {\n transform.push({\n type: 'formula',\n field: encoding.fieldRef(encType),\n expr: time.formula(field.timeUnit,\n encoding.fieldRef(encType, {nofn: true, d: true})\n )\n });\n }\n return transform;\n }, []);\n};\n\ndata.raw.transform.bin = function(encoding) {\n return encoding.reduce(function(transform, field, encType) {\n if (encoding.bin(encType)) {\n transform.push({\n type: 'bin',\n field: encoding.fieldRef(encType, {nofn: true}),\n output: encoding.fieldRef(encType),\n maxbins: encoding.bin(encType).maxbins\n });\n }\n return transform;\n }, []);\n};\n\n/**\n * @return {Object} An array that might contain a filter transform for filtering null value based on filterNul config\n */\ndata.raw.transform.nullFilter = function(encoding) {\n var filteredFields = util.reduce(encoding.fields(),\n function(filteredFields, fieldList, fieldName) {\n if (fieldName === '*') return filteredFields; //count\n\n // TODO(#597) revise how filterNull is structured.\n if ((encoding.config('filterNull').Q && fieldList.containsType[Q]) ||\n (encoding.config('filterNull').T && fieldList.containsType[T]) ||\n (encoding.config('filterNull').O && fieldList.containsType[O]) ||\n (encoding.config('filterNull').N && fieldList.containsType[N])) {\n filteredFields.push(fieldName);\n }\n return filteredFields;\n }, []);\n\n return filteredFields.length > 0 ?\n [{\n type: 'filter',\n test: filteredFields.map(function(fieldName) {\n return fieldName + '!==null';\n }).join(' && ')\n }] : [];\n};\n\ndata.raw.transform.filter = function(encoding) {\n var filters = encoding.filter().reduce(function(f, filter) {\n var condition = '';\n var operator = filter.operator;\n var operands = filter.operands;\n\n var d = 'd.' + (encoding._vega2 ? '' : 'data.');\n\n if (BINARY[operator]) {\n // expects a field and a value\n if (operator === '=') {\n operator = '==';\n }\n\n var op1 = operands[0];\n var op2 = operands[1];\n condition = d + op1 + ' ' + operator + ' ' + op2;\n } else {\n util.warn('Unsupported operator: ', operator);\n return f;\n }\n f.push('(' + condition + ')');\n return f;\n }, []);\n if (filters.length === 0) return [];\n\n return [{\n type: 'filter',\n test: filters.join(' && ')\n }];\n};\n\ndata.aggregate = function(encoding) {\n var dims = {}, meas = {};\n\n encoding.forEach(function(field, encType) {\n if (field.aggregate) {\n if (field.aggregate === 'count') {\n meas.count = {op: 'count', field: '*'};\n }else {\n meas[field.aggregate + '|' + field.name] = {\n op: field.aggregate,\n field: encoding.fieldRef(encType, {nofn: true})\n };\n }\n } else {\n dims[field.name] = encoding.fieldRef(encType);\n }\n });\n\n dims = util.vals(dims);\n meas = util.vals(meas);\n\n if (meas.length > 0) {\n return {\n name: AGGREGATE,\n source: RAW,\n transform: [{\n type: 'aggregate',\n groupby: dims,\n fields: meas\n }]\n };\n }\n\n return null;\n};\n\ndata.filterNonPositive = function(dataTable, encoding) {\n encoding.forEach(function(field, encType) {\n if (encoding.scale(encType).type === 'log') {\n dataTable.transform.push({\n type: 'filter',\n test: encoding.fieldRef(encType, {d: 1}) + ' > 0'\n });\n }\n });\n};\n","'use strict';\n\nrequire('../globals');\n\nvar util = require('../util');\n\nvar axis = require('./axis'),\n scale = require('./scale');\n\nmodule.exports = faceting;\n\nfunction groupdef(name, opt) {\n opt = opt || {};\n return {\n _name: name || undefined,\n type: 'group',\n from: opt.from,\n properties: {\n enter: {\n x: opt.x || undefined,\n y: opt.y || undefined,\n width: opt.width || {group: 'width'},\n height: opt.height || {group: 'height'}\n }\n },\n scales: opt.scales || undefined,\n axes: opt.axes || undefined,\n marks: opt.marks || []\n };\n}\n\nfunction faceting(group, encoding, layout, spec, singleScaleNames, stack, stats) {\n var enter = group.properties.enter;\n var facetKeys = [], cellAxes = [], from, axesGrp;\n\n var hasRow = encoding.has(ROW), hasCol = encoding.has(COL);\n\n enter.fill = {value: encoding.config('cellBackgroundColor')};\n\n //move \"from\" to cell level and add facet transform\n group.from = {data: group.marks[0].from.data};\n\n // Hack, this needs to be refactored\n for (var i = 0; i < group.marks.length; i++) {\n var mark = group.marks[i];\n if (mark.from.transform) {\n delete mark.from.data; //need to keep transform for subfacetting case\n } else {\n delete mark.from;\n }\n }\n\n if (hasRow) {\n if (!encoding.isDimension(ROW)) {\n util.error('Row encoding should be ordinal.');\n }\n enter.y = {scale: ROW, field: 'keys.' + facetKeys.length};\n enter.height = {'value': layout.cellHeight}; // HACK\n\n facetKeys.push(encoding.fieldRef(ROW));\n\n if (hasCol) {\n from = util.duplicate(group.from);\n from.transform = from.transform || [];\n from.transform.unshift({type: 'facet', keys: [encoding.fieldRef(COL)]});\n }\n\n axesGrp = groupdef('x-axes', {\n axes: encoding.has(X) ? [axis.def(X, encoding, layout, stats)] : undefined,\n x: hasCol ? {scale: COL, field: 'keys.0'} : {value: 0},\n width: hasCol && {'value': layout.cellWidth}, //HACK?\n from: from\n });\n\n spec.marks.unshift(axesGrp); // need to prepend so it appears under the plots\n (spec.axes = spec.axes || []);\n spec.axes.push(axis.def(ROW, encoding, layout, stats));\n } else { // doesn't have row\n if (encoding.has(X)) {\n //keep x axis in the cell\n cellAxes.push(axis.def(X, encoding, layout, stats));\n }\n }\n\n if (hasCol) {\n if (!encoding.isDimension(COL)) {\n util.error('Col encoding should be ordinal.');\n }\n enter.x = {scale: COL, field: 'keys.' + facetKeys.length};\n enter.width = {'value': layout.cellWidth}; // HACK\n\n facetKeys.push(encoding.fieldRef(COL));\n\n if (hasRow) {\n from = util.duplicate(group.from);\n from.transform = from.transform || [];\n from.transform.unshift({type: 'facet', keys: [encoding.fieldRef(ROW)]});\n }\n\n axesGrp = groupdef('y-axes', {\n axes: encoding.has(Y) ? [axis.def(Y, encoding, layout, stats)] : undefined,\n y: hasRow && {scale: ROW, field: 'keys.0'},\n x: hasRow && {value: 0},\n height: hasRow && {'value': layout.cellHeight}, //HACK?\n from: from\n });\n\n spec.marks.unshift(axesGrp); // need to prepend so it appears under the plots\n (spec.axes = spec.axes || []);\n spec.axes.push(axis.def(COL, encoding, layout, stats));\n } else { // doesn't have col\n if (encoding.has(Y)) {\n cellAxes.push(axis.def(Y, encoding, layout, stats));\n }\n }\n\n // assuming equal cellWidth here\n // TODO: support heterogenous cellWidth (maybe by using multiple scales?)\n spec.scales = (spec.scales || []).concat(scale.defs(\n scale.names(enter).concat(singleScaleNames),\n encoding,\n layout,\n stats,\n {stack: stack, facet: true}\n )); // row/col scales + cell scales\n\n if (cellAxes.length > 0) {\n group.axes = cellAxes;\n }\n\n // add facet transform\n var trans = (group.from.transform || (group.from.transform = []));\n trans.unshift({type: 'facet', keys: facetKeys});\n\n return spec;\n}\n","'use strict';\n\nrequire('../globals');\n\nvar util = require('../util'),\n setter = util.setter,\n time = require('./time'),\n d3_format = require('d3-format');\n\nmodule.exports = vllayout;\n\nfunction vllayout(encoding, stats) {\n var layout = box(encoding, stats);\n layout = offset(encoding, stats, layout);\n return layout;\n}\n\n/*\n HACK to set chart size\n NOTE: this fails for plots driven by derived values (e.g., aggregates)\n One solution is to update Vega to support auto-sizing\n In the meantime, auto-padding (mostly) does the trick\n */\nfunction box(encoding, stats) {\n var hasRow = encoding.has(ROW),\n hasCol = encoding.has(COL),\n hasX = encoding.has(X),\n hasY = encoding.has(Y),\n marktype = encoding.marktype();\n\n // FIXME/HACK we need to take filter into account\n var xCardinality = hasX && encoding.isDimension(X) ? encoding.cardinality(X, stats) : 1,\n yCardinality = hasY && encoding.isDimension(Y) ? encoding.cardinality(Y, stats) : 1;\n\n var useSmallBand = xCardinality > encoding.config('largeBandMaxCardinality') ||\n yCardinality > encoding.config('largeBandMaxCardinality');\n\n var cellWidth, cellHeight, cellPadding = encoding.config('cellPadding');\n\n // set cellWidth\n if (hasX) {\n if (encoding.isOrdinalScale(X)) {\n // for ordinal, hasCol or not doesn't matter -- we scale based on cardinality\n cellWidth = (xCardinality + encoding.field(X).band.padding) * encoding.bandSize(X, useSmallBand);\n } else {\n cellWidth = hasCol || hasRow ? encoding.field(COL).width : encoding.config('singleWidth');\n }\n } else {\n if (marktype === TEXT) {\n cellWidth = encoding.config('textCellWidth');\n } else {\n cellWidth = encoding.bandSize(X);\n }\n }\n\n // set cellHeight\n if (hasY) {\n if (encoding.isOrdinalScale(Y)) {\n // for ordinal, hasCol or not doesn't matter -- we scale based on cardinality\n cellHeight = (yCardinality + encoding.field(Y).band.padding) * encoding.bandSize(Y, useSmallBand);\n } else {\n cellHeight = hasCol || hasRow ? encoding.field(ROW).height : encoding.config('singleHeight');\n }\n } else {\n cellHeight = encoding.bandSize(Y);\n }\n\n // Cell bands use rangeBands(). There are n-1 padding. Outerpadding = 0 for cells\n\n var width = cellWidth, height = cellHeight;\n if (hasCol) {\n var colCardinality = encoding.cardinality(COL, stats);\n width = cellWidth * ((1 + cellPadding) * (colCardinality - 1) + 1);\n }\n if (hasRow) {\n var rowCardinality = encoding.cardinality(ROW, stats);\n height = cellHeight * ((1 + cellPadding) * (rowCardinality - 1) + 1);\n }\n\n return {\n // width and height of the whole cell\n cellWidth: cellWidth,\n cellHeight: cellHeight,\n cellPadding: cellPadding,\n // width and height of the chart\n width: width,\n height: height,\n // information about x and y, such as band size\n x: {useSmallBand: useSmallBand},\n y: {useSmallBand: useSmallBand}\n };\n}\n\n\n// FIXME fieldStats.max isn't always the longest\nfunction getMaxNumberLength(encoding, et, fieldStats) {\n var format = encoding.numberFormat(et, fieldStats);\n\n return d3_format.format(format)(fieldStats.max).length;\n}\n\n// TODO(#600) revise this\nfunction getMaxLength(encoding, stats, et) {\n var field = encoding.field(et),\n fieldStats = stats[field.name];\n\n if (field.bin) {\n // TODO once bin support range, need to update this\n return getMaxNumberLength(encoding, et, fieldStats);\n } if (encoding.isType(et, Q)) {\n return getMaxNumberLength(encoding, et, fieldStats);\n } else if (encoding.isType(et, T)) {\n return time.maxLength(encoding.field(et).timeUnit, encoding);\n } else if (encoding.isTypes(et, [N, O])) {\n if(fieldStats.type === 'number') {\n return getMaxNumberLength(encoding, et, fieldStats);\n } else {\n return Math.min(fieldStats.max, encoding.axis(et).maxLabelLength || Infinity);\n }\n }\n}\n\nfunction offset(encoding, stats, layout) {\n [X, Y].forEach(function (et) {\n // TODO(kanitw): Jul 19, 2015 - create a set of visual test for extraOffset\n var extraOffset = et === X ? 20 : 22,\n maxLength;\n if (encoding.isDimension(et) || encoding.isType(et, T)) {\n maxLength = getMaxLength(encoding, stats, et);\n } else if (\n // TODO once we have #512 (allow using inferred type)\n // Need to adjust condition here.\n encoding.isType(et, Q) ||\n encoding.aggregate(et) === 'count'\n ) {\n if (\n et===Y\n // || (et===X && false)\n // FIXME determine when X would rotate, but should move this to axis.js first #506\n ) {\n maxLength = getMaxLength(encoding, stats, et);\n }\n } else {\n // nothing\n }\n\n if (maxLength) {\n setter(layout,[et, 'axisTitleOffset'], encoding.config('characterWidth') * maxLength + extraOffset);\n } else {\n // if no max length (no rotation case), use maxLength = 3\n setter(layout,[et, 'axisTitleOffset'], encoding.config('characterWidth') * 3 + extraOffset);\n }\n\n });\n return layout;\n}\n","'use strict';\n\nrequire('../globals');\n\nvar time = require('./time'),\n util = require('../util'),\n setter = util.setter,\n getter = util.getter;\n\nvar legend = module.exports = {};\n\nlegend.defs = function(encoding, style) {\n var defs = [];\n\n if (encoding.has(COLOR) && encoding.field(COLOR).legend) {\n defs.push(legend.def(COLOR, encoding, {\n fill: COLOR,\n orient: 'right'\n }, style));\n }\n\n if (encoding.has(SIZE) && encoding.field(SIZE).legend) {\n defs.push(legend.def(SIZE, encoding, {\n size: SIZE,\n orient: defs.length === 1 ? 'left' : 'right'\n }, style));\n }\n\n if (encoding.has(SHAPE) && encoding.field(SHAPE).legend) {\n if (defs.length === 2) {\n console.error('Vega-lite currently only supports two legends');\n }\n defs.push(legend.def(SHAPE, encoding, {\n shape: SHAPE,\n orient: defs.length === 1 ? 'left' : 'right'\n }, style));\n }\n return defs;\n};\n\nlegend.def = function(name, encoding, def, style) {\n var timeUnit = encoding.field(name).timeUnit;\n\n def.title = legend.title(name, encoding);\n def = legend.style(name, encoding, def, style);\n\n if (encoding.isType(name, T) &&\n timeUnit &&\n time.hasScale(timeUnit)\n ) {\n setter(def, ['properties', 'labels', 'text', 'scale'], 'time-'+ timeUnit);\n }\n\n return def;\n};\n\nlegend.style = function(name, e, def, style) {\n var symbols = getter(def, ['properties', 'symbols']),\n marktype = e.marktype();\n\n switch (marktype) {\n case 'bar':\n case 'tick':\n case 'text':\n symbols.stroke = {value: 'transparent'};\n symbols.shape = {value: 'square'};\n break;\n\n case 'circle':\n case 'square':\n symbols.shape = {value: marktype};\n /* fall through */\n case 'point':\n // fill or stroke\n if (e.field(SHAPE).filled) {\n if (e.has(COLOR) && name === COLOR) {\n symbols.fill = {scale: COLOR, field: 'data'};\n } else {\n symbols.fill = {value: e.value(COLOR)};\n }\n symbols.stroke = {value: 'transparent'};\n } else {\n if (e.has(COLOR) && name === COLOR) {\n symbols.stroke = {scale: COLOR, field: 'data'};\n } else {\n symbols.stroke = {value: e.value(COLOR)};\n }\n symbols.fill = {value: 'transparent'};\n symbols.strokeWidth = {value: e.config('strokeWidth')};\n }\n\n break;\n case 'line':\n case 'area':\n // TODO use shape here after implementing #508\n break;\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if (opacity) {\n symbols.opacity = {value: opacity};\n }\n return def;\n};\n\nlegend.title = function(name, encoding) {\n var leg = encoding.field(name).legend;\n\n if (leg.title) return leg.title;\n\n return encoding.fieldTitle(name);\n};\n","'use strict';\n\nrequire('../globals');\n\nvar marks = module.exports = {};\n\nmarks.def = function(encoding, layout, style, stats) {\n\n var defs = [],\n mark = marks[encoding.marktype()],\n from = encoding.dataTable();\n\n // to add a background to text, we need to add it before the text\n if (encoding.marktype() === TEXT && encoding.has(COLOR)) {\n var bg = {\n x: {value: 0},\n y: {value: 0},\n x2: {value: layout.cellWidth},\n y2: {value: layout.cellHeight},\n fill: {scale: COLOR, field: encoding.fieldRef(COLOR)}\n };\n defs.push({\n type: 'rect',\n from: {data: from},\n properties: {enter: bg, update: bg}\n });\n }\n\n // add the mark def for the main thing\n var p = mark.prop(encoding, layout, style, stats);\n defs.push({\n type: mark.type,\n from: {data: from},\n properties: {enter: p, update: p}\n });\n\n return defs;\n};\n\nmarks.bar = {\n type: 'rect',\n stack: true,\n prop: bar_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1}\n};\n\nmarks.line = {\n type: 'line',\n line: true,\n prop: line_props,\n requiredEncoding: ['x', 'y'],\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1, detail:1}\n};\n\nmarks.area = {\n type: 'area',\n stack: true,\n line: true,\n requiredEncoding: ['x', 'y'],\n prop: area_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1}\n};\n\nmarks.tick = {\n type: 'rect',\n prop: tick_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1, detail: 1}\n};\n\nmarks.circle = {\n type: 'symbol',\n prop: filled_point_props('circle'),\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1, detail: 1}\n};\n\nmarks.square = {\n type: 'symbol',\n prop: filled_point_props('square'),\n supportedEncoding: marks.circle.supportedEncoding\n};\n\nmarks.point = {\n type: 'symbol',\n prop: point_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1, shape: 1, detail: 1}\n};\n\nmarks.text = {\n type: 'text',\n prop: text_props,\n requiredEncoding: ['text'],\n supportedEncoding: {row: 1, col: 1, size: 1, color: 1, text: 1}\n};\n\nfunction bar_props(e, layout, style) {\n // jshint unused:false\n\n var p = {};\n\n // x's and width\n if (e.isMeasure(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (!e.has(Y) || e.isDimension(Y)) {\n p.x2 = {value: 0};\n }\n } else {\n if (e.has(X)) { // is ordinal\n p.xc = {scale: X, field: e.fieldRef(X)};\n } else {\n p.x = {value: 0, offset: e.config('singleBarOffset')};\n }\n }\n\n // width\n if (!p.x2) {\n if (!e.has(X) || e.isOrdinalScale(X)) { // no X or X is ordinal\n if (e.has(SIZE)) {\n p.width = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else {\n p.width = {\n value: e.bandSize(X, layout.x.useSmallBand),\n offset: -1\n };\n }\n } else { // X is Quant or Time Scale\n p.width = {value: 2};\n }\n }\n\n // y's & height\n if (e.isMeasure(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n p.y2 = {group: 'height'};\n } else {\n if (e.has(Y)) { // is ordinal\n p.yc = {scale: Y, field: e.fieldRef(Y)};\n } else {\n p.y2 = {group: 'height', offset: -e.config('singleBarOffset')};\n }\n\n if (e.has(SIZE)) {\n p.height = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else {\n p.height = {\n value: e.bandSize(Y, layout.y.useSmallBand),\n offset: -1\n };\n }\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else {\n p.fill = {value: e.value(COLOR)};\n }\n\n // opacity\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction point_props(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.size = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(SIZE)) {\n p.size = {value: e.value(SIZE)};\n }\n\n // shape\n if (e.has(SHAPE)) {\n p.shape = {scale: SHAPE, field: e.fieldRef(SHAPE)};\n } else if (!e.has(SHAPE)) {\n p.shape = {value: e.value(SHAPE)};\n }\n\n // fill or stroke\n if (e.field(SHAPE).filled) {\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n } else {\n if (e.has(COLOR)) {\n p.stroke = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.stroke = {value: e.value(COLOR)};\n }\n p.strokeWidth = {value: e.config('strokeWidth')};\n }\n\n // opacity\n var opacity = e.field(COLOR).opacity || style.opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction line_props(e,layout, style) {\n // jshint unused:false\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: 0};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {group: 'height'};\n }\n\n // stroke\n if (e.has(COLOR)) {\n p.stroke = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.stroke = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n p.strokeWidth = {value: e.config('strokeWidth')};\n\n return p;\n}\n\nfunction area_props(e, layout, style) {\n // jshint unused:false\n var p = {};\n\n // x\n if (e.isMeasure(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (e.isDimension(Y)) {\n p.x2 = {scale: X, value: 0};\n p.orient = {value: 'horizontal'};\n }\n } else if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else {\n p.x = {value: 0};\n }\n\n // y\n if (e.isMeasure(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n p.y2 = {scale: Y, value: 0};\n } else if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else {\n p.y = {group: 'height'};\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction tick_props(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (e.isDimension(X)) {\n p.x.offset = -e.bandSize(X, layout.x.useSmallBand) / 3;\n }\n } else if (!e.has(X)) {\n p.x = {value: 0};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n if (e.isDimension(Y)) {\n p.y.offset = -e.bandSize(Y, layout.y.useSmallBand) / 3;\n }\n } else if (!e.has(Y)) {\n p.y = {value: 0};\n }\n\n // width\n if (!e.has(X) || e.isDimension(X)) {\n p.width = {value: e.bandSize(X, layout.y.useSmallBand) / 1.5};\n } else {\n p.width = {value: 1};\n }\n\n // height\n if (!e.has(Y) || e.isDimension(Y)) {\n p.height = {value: e.bandSize(Y, layout.y.useSmallBand) / 1.5};\n } else {\n p.height = {value: 1};\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction filled_point_props(shape) {\n return function(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.size = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(X)) {\n p.size = {value: e.value(SIZE)};\n }\n\n // shape\n p.shape = {value: shape};\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n return p;\n };\n}\n\nfunction text_props(e, layout, style, stats) {\n var p = {},\n field = e.field(TEXT);\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n if (e.has(TEXT) && e.isType(TEXT, Q)) {\n p.x = {value: layout.cellWidth-5};\n } else {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.fontSize = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(SIZE)) {\n p.fontSize = {value: field.font.size};\n }\n\n // fill\n // color should be set to background\n p.fill = {value: field.color};\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n // text\n if (e.has(TEXT)) {\n if (e.isType(TEXT, Q)) {\n var fieldStats = stats[e.fieldName(TEXT)],\n numberFormat = field.format || e.numberFormat(fieldStats);\n\n p.text = {template: '{{' + e.fieldRef(TEXT) + ' | number:\\'' +\n numberFormat +'\\'}}'};\n p.align = {value: field.align};\n } else {\n p.text = {field: e.fieldRef(TEXT)};\n }\n } else {\n p.text = {value: field.placeholder};\n }\n\n p.font = {value: field.font.family};\n p.fontWeight = {value: field.font.weight};\n p.fontStyle = {value: field.font.style};\n p.baseline = {value: field.baseline};\n\n return p;\n}\n","'use strict';\nrequire('../globals');\nvar util = require('../util'),\n time = require('./time'),\n colorbrewer = require('colorbrewer'),\n interpolate = require('d3-color').interpolateHsl,\n schema = require('../schema/schema'),\n vlsort = require('./sort');\n\nvar scale = module.exports = {};\n\nscale.names = function(props) {\n return util.keys(util.keys(props).reduce(function(a, x) {\n if (props[x] && props[x].scale) a[props[x].scale] = 1;\n return a;\n }, {}));\n};\n\nscale.defs = function(names, encoding, layout, stats, opt) {\n opt = opt || {};\n\n return names.reduce(function(a, name) {\n var s = {\n name: name,\n type: scale.type(name, encoding),\n domain: scale.domain(name, encoding, stats, opt)\n };\n\n s.sort = scale.sort(s, encoding, name) || undefined;\n\n scale.range(s, encoding, layout, stats, opt);\n\n return (a.push(s), a);\n }, []);\n};\n\nscale.sort = function(s, encoding, name) {\n return s.type === 'ordinal' && (\n !!encoding.bin(name) ||\n encoding.sort(name).length === 0\n );\n};\n\nscale.type = function(name, encoding) {\n\n switch (encoding.type(name)) {\n case N: //fall through\n case O: return 'ordinal';\n case T:\n var timeUnit = encoding.field(name).timeUnit;\n return timeUnit ? time.scale.type(timeUnit, name) : 'time';\n case Q:\n if (encoding.bin(name)) {\n return name === COLOR ? 'linear' : 'ordinal';\n }\n return encoding.scale(name).type;\n }\n};\n\nscale.domain = function (name, encoding, stats, opt) {\n var field = encoding.field(name);\n\n if (encoding.isType(name, T)) {\n var range = time.scale.domain(field.timeUnit, name);\n if(range) return range;\n }\n\n if (field.bin) {\n // TODO(kanitw): this must be changed in vg2\n var fieldStat = stats[field.name],\n bins = util.getbins(fieldStat, field.bin.maxbins || schema.MAXBINS_DEFAULT),\n numbins = (bins.stop - bins.start) / bins.step;\n return util.range(numbins).map(function(i) {\n return bins.start + bins.step * i;\n });\n }\n\n if (name == opt.stack) {\n return {\n data: STACKED,\n field: encoding.fieldRef(name, {\n data: !encoding._vega2,\n prefn: (opt.facet ? 'max_' : '') + 'sum_'\n })\n };\n }\n var aggregate = encoding.aggregate(name),\n timeUnit = field.timeUnit,\n scaleUseRawDomain = encoding.scale(name).useRawDomain,\n useRawDomain = scaleUseRawDomain !== undefined ?\n scaleUseRawDomain : encoding.config('useRawDomain'),\n notCountOrSum = !aggregate || (aggregate !=='count' && aggregate !== 'sum');\n\n // FIXME revise this part\n\n if ( useRawDomain && notCountOrSum && (\n // Q always uses non-ordinal scale except when it's binned and thus uses ordinal scale.\n (encoding.isType(name, Q) && !field.bin) ||\n // T uses non-ordinal scale when there's no unit or when the unit is not ordinal.\n (encoding.isType(name, T) && (!timeUnit || !time.isOrdinalFn(timeUnit)))\n )\n ) {\n return {data: RAW, field: encoding.fieldRef(name, {nofn: !timeUnit})};\n }\n\n var data = encoding.sort(name, stats).length > 0 ?\n vlsort.getDataName(name):\n encoding.dataTable();\n\n return {data: data, field: encoding.fieldRef(name)};\n};\n\n\nscale.range = function (s, encoding, layout, stats) {\n var spec = encoding.scale(s.name),\n field = encoding.field(s.name),\n timeUnit = field.timeUnit;\n\n switch (s.name) {\n case X:\n s.range = layout.cellWidth ? [0, layout.cellWidth] : 'width';\n if (s.type === 'ordinal') {\n s.bandWidth = encoding.bandSize(X, layout.x.useSmallBand);\n } else {\n if (encoding.isType(s.name,T) && timeUnit === 'year') {\n s.zero = false;\n } else {\n s.zero = spec.zero === undefined ? true : spec.zero;\n }\n\n s.reverse = spec.reverse;\n }\n s.round = true;\n if (s.type === 'time') {\n s.nice = timeUnit || encoding.config('timeScaleNice');\n }else {\n s.nice = true;\n }\n break;\n case Y:\n if (s.type === 'ordinal') {\n s.range = layout.cellHeight ?\n (field.bin ? [layout.cellHeight, 0] : [0, layout.cellHeight]) :\n 'height';\n s.bandWidth = encoding.bandSize(Y, layout.y.useSmallBand);\n } else {\n s.range = layout.cellHeight ? [layout.cellHeight, 0] : 'height';\n if (encoding.isType(s.name,T) && timeUnit === 'year') {\n s.zero = false;\n } else {\n s.zero = spec.zero === undefined ? true : spec.zero;\n }\n\n s.reverse = spec.reverse;\n }\n\n s.round = true;\n\n if (s.type === 'time') {\n s.nice = timeUnit || encoding.config('timeScaleNice');\n }else {\n s.nice = true;\n }\n break;\n case ROW: // support only ordinal\n s.bandWidth = layout.cellHeight;\n s.round = true;\n s.nice = true;\n break;\n case COL: // support only ordinal\n s.bandWidth = layout.cellWidth;\n s.round = true;\n s.nice = true;\n break;\n case SIZE:\n if (encoding.is('bar')) {\n // FIXME this is definitely incorrect\n // but let's fix it later since bar size is a bad encoding anyway\n s.range = [3, Math.max(encoding.bandSize(X), encoding.bandSize(Y))];\n } else if (encoding.is(TEXT)) {\n s.range = [8, 40];\n } else { //point\n var bandSize = Math.min(encoding.bandSize(X), encoding.bandSize(Y)) - 1;\n s.range = [10, 0.8 * bandSize*bandSize];\n }\n s.round = true;\n s.zero = false;\n break;\n case SHAPE:\n s.range = 'shapes';\n break;\n case COLOR:\n s.range = scale.color(s, encoding, stats);\n if (s.type !== 'ordinal') s.zero = false;\n break;\n default:\n throw new Error('Unknown encoding name: '+ s.name);\n }\n\n // FIXME(kanitw): Jul 29, 2015 - consolidate this with above\n switch (s.name) {\n case ROW:\n case COL:\n s.padding = encoding.config('cellPadding');\n s.outerPadding = 0;\n break;\n case X:\n case Y:\n if (s.type === 'ordinal') { //&& !s.bandWidth\n s.points = true;\n s.padding = encoding.field(s.name).band.padding;\n }\n }\n};\n\nscale.color = function(s, encoding, stats) {\n var colorScale = encoding.scale(COLOR),\n range = colorScale.range,\n cardinality = encoding.cardinality(COLOR, stats),\n type = encoding.type(COLOR);\n\n if (range === undefined) {\n var ordinalPalette = colorScale.ordinalPalette,\n quantitativeRange = colorScale.quantitativeRange;\n\n if (s.type === 'ordinal') {\n if (type === N) {\n // use categorical color scale\n if (cardinality <= 10) {\n range = colorScale.c10palette;\n } else {\n range = colorScale.c20palette;\n }\n return scale.color.palette(range, cardinality, type);\n } else {\n if (ordinalPalette) {\n return scale.color.palette(ordinalPalette, cardinality, type);\n }\n return scale.color.interpolate(quantitativeRange[0], quantitativeRange[1], cardinality);\n }\n } else { //time or quantitative\n return [quantitativeRange[0], quantitativeRange[1]];\n }\n }\n};\n\nscale.color.palette = function(range, cardinality, type) {\n // FIXME(kanitw): Jul 29, 2015 - check range is string\n switch (range) {\n case 'category10k':\n // tableau's category 10, ordered by perceptual kernel study results\n // https://github.com/uwdata/perceptual-kernels\n return ['#2ca02c', '#e377c2', '#7f7f7f', '#17becf', '#8c564b', '#d62728', '#bcbd22', '#9467bd', '#ff7f0e', '#1f77b4'];\n\n // d3/tableau category10/20/20b/20c\n case 'category10':\n return ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'];\n\n case 'category20':\n return ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'];\n\n case 'category20b':\n return ['#393b79', '#5254a3', '#6b6ecf', '#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31', '#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b', '#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6'];\n\n case 'category20c':\n return ['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc', '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'];\n }\n\n // TODO add our own set of custom ordinal color palette\n\n if (range in colorbrewer) {\n var palette = colorbrewer[range];\n\n // if cardinality pre-defined, use it.\n if (cardinality in palette) return palette[cardinality];\n\n // if not, use the highest cardinality one for nominal\n if (type === N) {\n return palette[Math.max.apply(null, util.keys(palette))];\n }\n\n // otherwise, interpolate\n var ps = cardinality < 3 ? 3 : Math.max.apply(null, util.keys(palette)),\n from = 0 , to = ps - 1;\n // FIXME add config for from / to\n\n return scale.color.interpolate(palette[ps][from], palette[ps][to], cardinality);\n }\n\n return range;\n};\n\nscale.color.interpolate = function (start, end, cardinality) {\n\n var interpolator = interpolate(start, end);\n return util.range(cardinality).map(function(i) { return interpolator(i*1.0/(cardinality-1)); });\n};\n","'use strict';\n\nrequire('../globals');\n\nvar vlfield = require('../field');\n\nmodule.exports = sort;\n\n// adds new transforms that produce sorted fields\nfunction sort(data, encoding, stats, opt) {\n // jshint unused:false\n\n var datasetMapping = {};\n\n encoding.forEach(function(field, encType) {\n var sortBy = encoding.sort(encType, stats);\n if (sortBy.length > 0) {\n var fields = sortBy.map(function(d) {\n return {\n op: d.aggregate,\n field: vlfield.fieldRef(d, {nofn: true, data: !encoding._vega2})\n };\n });\n\n var byClause = sortBy.map(function(d) {\n var reverse = (d.reverse ? '-' : '');\n return reverse + vlfield.fieldRef(d, {data: !encoding._vega2});\n });\n\n var dataName = sort.getDataName(encType);\n\n var transforms = [\n {\n type: 'aggregate',\n groupby: [ encoding.fieldRef(encType) ],\n fields: fields\n },\n {\n type: 'sort',\n by: byClause\n }\n ];\n\n data.push({\n name: dataName,\n source: RAW,\n transform: transforms\n });\n\n datasetMapping[encType] = dataName;\n }\n });\n\n return data;\n}\n\nsort.getDataName = function(encType) {\n return 'sorted-' + encType;\n};\n\n","'use strict';\n\nrequire('../globals');\n\nvar marks = require('./marks');\n\nmodule.exports = stacking;\n\nfunction stacking(data, encoding, mdef) {\n if (!marks[encoding.marktype()].stack) return false;\n\n // TODO: add || encoding.has(LOD) here once LOD is implemented\n if (!encoding.has(COLOR)) return false;\n\n var dim=null, val=null, idx =null,\n isXMeasure = encoding.isMeasure(X),\n isYMeasure = encoding.isMeasure(Y),\n facets = encoding.facets();\n\n if (isXMeasure && !isYMeasure) {\n dim = Y;\n val = X;\n idx = 0;\n } else if (isYMeasure && !isXMeasure) {\n dim = X;\n val = Y;\n idx = 1;\n } else {\n return null; // no stack encoding\n }\n\n // add transform to compute sums for scale\n var stacked = {\n name: STACKED,\n source: encoding.dataTable(),\n transform: [{\n type: 'aggregate',\n groupby: [encoding.fieldRef(dim)].concat(facets), // dim and other facets\n fields: [{op: 'sum', field: encoding.fieldRef(val)}] // TODO check if field with aggregate is correct?\n }]\n };\n\n if (facets && facets.length > 0) {\n stacked.transform.push({ //calculate max for each facet\n type: 'aggregate',\n groupby: facets,\n fields: [{\n op: 'max',\n field: encoding.fieldName(val, {fn: 'sum'})\n }]\n });\n }\n\n data.push(stacked);\n\n // add stack transform to mark\n mdef.from.transform = [{\n type: 'stack',\n point: encoding.fieldRef(dim),\n height: encoding.fieldRef(val),\n output: {y1: val, y0: val + '2'}\n }];\n\n // TODO: This is super hack-ish -- consolidate into modular mark properties?\n mdef.properties.update[val] = mdef.properties.enter[val] = {scale: val, field: val};\n mdef.properties.update[val + '2'] = mdef.properties.enter[val + '2'] = {scale: val, field: val + '2'};\n\n return val; //return stack encoding\n}\n","'use strict';\n\nrequire('../globals');\n\nvar vlfield = require('../field');\n\nmodule.exports = function(encoding, stats) {\n return {\n opacity: estimateOpacity(encoding, stats),\n };\n};\n\nfunction estimateOpacity(encoding,stats) {\n if (!stats) {\n return 1;\n }\n\n var numPoints = 0;\n\n if (encoding.isAggregate()) { // aggregate plot\n numPoints = 1;\n\n // get number of points in each \"cell\"\n // by calculating product of cardinality\n // for each non faceting and non-ordinal X / Y fields\n // note that ordinal x,y are not include since we can\n // consider that ordinal x are subdividing the cell into subcells anyway\n encoding.forEach(function(field, encType) {\n\n if (encType !== ROW && encType !== COL &&\n !((encType === X || encType === Y) &&\n vlfield.isOrdinalScale(field))\n ) {\n numPoints *= encoding.cardinality(encType, stats);\n }\n });\n\n } else { // raw plot\n\n // TODO: error handling\n if (!stats['*'])\n return 1;\n\n numPoints = stats['*'].max; // count\n\n // small multiples divide number of points\n var numMultiples = 1;\n if (encoding.has(ROW)) {\n numMultiples *= encoding.cardinality(ROW, stats);\n }\n if (encoding.has(COL)) {\n numMultiples *= encoding.cardinality(COL, stats);\n }\n numPoints /= numMultiples;\n }\n\n var opacity = 0;\n if (numPoints <= 25) {\n opacity = 1;\n } else if (numPoints < 200) {\n opacity = 0.8;\n } else if (numPoints < 1000 || encoding.is('tick')) {\n opacity = 0.7;\n } else {\n opacity = 0.3;\n }\n\n return opacity;\n}\n\n","'use strict';\n\nrequire('../globals');\n\nmodule.exports = subfaceting;\n\nfunction subfaceting(group, mdef, details, stack, encoding) {\n var m = group.marks;\n var g = {\n _name: 'subfacet',\n type: 'group',\n from: mdef.from,\n properties: {\n enter: {\n width: {group: 'width'},\n height: {group: 'height'}\n }\n },\n marks: m\n };\n\n group.marks = [g];\n delete mdef.from; // (move to the new g)\n\n //TODO test LOD -- we should support stack / line without color (LOD) field\n var trans = (g.from.transform || (g.from.transform = []));\n trans.unshift({type: 'facet', keys: details});\n\n if (stack && encoding.has(COLOR)) {\n trans.unshift({type: 'sort', by: encoding.fieldRef(COLOR)});\n }\n}\n","'use strict';\n\nvar util = require('../util'),\n d3_time_format = require('d3-time-format');\n\nvar time = module.exports = {};\n\n// 'Wednesday September 17 04:00:00 2014'\n// Wednesday is the longest date\n// September is the longest month (8 in javascript as it is zero-indexed).\nvar LONG_DATE = new Date(Date.UTC(2014, 8, 17));\n\ntime.cardinality = function(field, stats, filterNull, type) {\n var timeUnit = field.timeUnit;\n switch (timeUnit) {\n case 'seconds': return 60;\n case 'minutes': return 60;\n case 'hours': return 24;\n case 'day': return 7;\n case 'date': return 31;\n case 'month': return 12;\n case 'year':\n var stat = stats[field.name],\n yearstat = stats['year_'+field.name];\n\n if (!yearstat) { return null; }\n\n return yearstat.distinct -\n (stat.nulls > 0 && filterNull[type] ? 1 : 0);\n }\n\n return null;\n};\n\ntime.formula = function(timeUnit, fieldRef) {\n // TODO(kanitw): add formula to other time format\n var fn = 'utc' + timeUnit;\n return fn + '(' + fieldRef + ')';\n};\n\ntime.maxLength = function(timeUnit, encoding) {\n switch (timeUnit) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n case 'date':\n return 2;\n case 'month':\n case 'day':\n var range = time.range(timeUnit, encoding);\n if (range) {\n // return the longest name in the range\n return Math.max.apply(null, range.map(function(r) {return r.length;}));\n }\n return 2;\n case 'year':\n return 4; //'1998'\n }\n // TODO(#600) revise this\n // no time unit\n var timeFormat = encoding.config('timeFormat');\n return d3_time_format.utcFormat(timeFormat)(LONG_DATE).length;\n};\n\ntime.range = function(timeUnit, encoding) {\n var labelLength = encoding.config('timeScaleLabelLength'),\n scaleLabel;\n switch (timeUnit) {\n case 'day':\n scaleLabel = encoding.config('dayScaleLabel');\n break;\n case 'month':\n scaleLabel = encoding.config('monthScaleLabel');\n break;\n }\n if (scaleLabel) {\n return labelLength ? scaleLabel.map(\n function(s) { return s.substr(0, labelLength);}\n ) : scaleLabel;\n }\n return;\n};\n\n\n/**\n * @param {Object} encoding\n * @return {Array} scales for time unit names\n */\ntime.scales = function(encoding) {\n var scales = encoding.reduce(function(scales, field) {\n var timeUnit = field.timeUnit;\n if (field.type === T && timeUnit && !scales[timeUnit]) {\n var scale = time.scale.def(field.timeUnit, encoding);\n if (scale) scales[timeUnit] = scale;\n }\n return scales;\n }, {});\n\n return util.vals(scales);\n};\n\n\ntime.scale = {};\n\n/** append custom time scales for axis label */\ntime.scale.def = function(timeUnit, encoding) {\n var range = time.range(timeUnit, encoding);\n\n if (range) {\n return {\n name: 'time-'+timeUnit,\n type: 'ordinal',\n domain: time.scale.domain(timeUnit),\n range: range\n };\n }\n return null;\n};\n\ntime.isOrdinalFn = function(timeUnit) {\n switch (timeUnit) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n case 'day':\n case 'date':\n case 'month':\n return true;\n }\n return false;\n};\n\ntime.scale.type = function(timeUnit, name) {\n if (name === COLOR) {\n return 'linear'; // time has order, so use interpolated ordinal color scale.\n }\n\n return time.isOrdinalFn(timeUnit) || name === COL || name === ROW ? 'ordinal' : 'linear';\n};\n\ntime.scale.domain = function(timeUnit, name) {\n var isColor = name === COLOR;\n switch (timeUnit) {\n case 'seconds':\n case 'minutes': return isColor ? [0,59] : util.range(0, 60);\n case 'hours': return isColor ? [0,23] : util.range(0, 24);\n case 'day': return isColor ? [0,6] : util.range(0, 7);\n case 'date': return isColor ? [1,31] : util.range(1, 32);\n case 'month': return isColor ? [0,11] : util.range(0, 12);\n }\n return null;\n};\n\n/** whether a particular time function has custom scale for labels implemented in time.scale */\ntime.hasScale = function(timeUnit) {\n switch (timeUnit) {\n case 'day':\n case 'month':\n return true;\n }\n return false;\n};\n","'use strict';\n\nrequire('./globals');\n\nvar consts = module.exports = {};\n\nconsts.encodingTypes = [X, Y, ROW, COL, SIZE, SHAPE, COLOR, TEXT, DETAIL];\n\nconsts.shorthand = {\n delim: '|',\n assign: '=',\n type: ',',\n func: '_'\n};\n","'use strict';\n\nrequire('./globals');\n\nvar stats = require('datalib/src/stats');\n\nvar vldata = module.exports = {};\n\n/** Mapping from datalib's inferred type to Vega-lite's type */\nvldata.types = {\n 'boolean': N,\n 'number': Q,\n 'integer': Q,\n 'date': T,\n 'string': N\n};\n\nvldata.stats = function(data) {\n var summary = stats.summary(data);\n\n return summary.reduce(function(s, profile) {\n s[profile.field] = profile;\n return s;\n }, {\n '*': {\n max: data.length,\n min: 0\n }\n });\n};","// utility for enc\n\n'use strict';\n\nvar consts = require('./consts'),\n c = consts.shorthand,\n vlfield = require('./field'),\n util = require('./util'),\n schema = require('./schema/schema'),\n encTypes = schema.encTypes;\n\nvar vlenc = module.exports = {};\n\nvlenc.countRetinal = function(enc) {\n var count = 0;\n if (enc.color) count++;\n if (enc.size) count++;\n if (enc.shape) count++;\n return count;\n};\n\nvlenc.has = function(enc, encType) {\n var fieldDef = enc && enc[encType];\n return fieldDef && fieldDef.name;\n};\n\nvlenc.isAggregate = function(enc) {\n for (var k in enc) {\n if (vlenc.has(enc, k) && enc[k].aggregate) {\n return true;\n }\n }\n return false;\n};\n\nvlenc.forEach = function(enc, f) {\n var i = 0;\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n f(enc[k], k, i++);\n }\n });\n};\n\nvlenc.map = function(enc, f) {\n var arr = [];\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n arr.push(f(enc[k], k, enc));\n }\n });\n return arr;\n};\n\nvlenc.reduce = function(enc, f, init) {\n var r = init;\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n r = f(r, enc[k], k, enc);\n }\n });\n return r;\n};\n\n/*\n * return key-value pairs of field name and list of fields of that field name\n */\nvlenc.fields = function(enc) {\n return vlenc.reduce(enc, function (m, field) {\n var fieldList = m[field.name] = m[field.name] || [],\n containsType = fieldList.containsType = fieldList.containsType || {};\n\n if (fieldList.indexOf(field) === -1) {\n fieldList.push(field);\n // augment the array with containsType.Q / O / N / T\n containsType[field.type] = true;\n }\n return m;\n }, {});\n};\n\nvlenc.shorthand = function(enc) {\n return vlenc.map(enc, function(field, et) {\n return et + c.assign + vlfield.shorthand(field);\n }).join(c.delim);\n};\n\nvlenc.fromShorthand = function(shorthand) {\n var enc = util.isArray(shorthand) ? shorthand : shorthand.split(c.delim);\n return enc.reduce(function(m, e) {\n var split = e.split(c.assign),\n enctype = split[0].trim(),\n field = split[1];\n\n m[enctype] = vlfield.fromShorthand(field);\n return m;\n }, {});\n};\n","'use strict';\n\n// utility for field\n\nrequire('./globals');\n\nvar consts = require('./consts'),\n c = consts.shorthand,\n time = require('./compiler/time'),\n util = require('./util'),\n schema = require('./schema/schema');\n\nvar vlfield = module.exports = {};\n\n/**\n * @param field\n * @param opt\n * opt.nofn -- exclude bin, aggregate, timeUnit\n * opt.data - include 'data.'\n * opt.d - include 'd.'\n * opt.fn - replace fn with custom function prefix\n * opt.prefn - prepend fn with custom function prefix\n\n * @return {[type]} [description]\n */\nvlfield.fieldRef = function(field, opt) {\n opt = opt || {};\n\n var f = (opt.d ? 'd.' : '') +\n (opt.data ? 'data.' : '') +\n (opt.prefn || ''),\n nofn = opt.nofn || opt.fn,\n name = field.name;\n\n if (vlfield.isCount(field)) {\n return f + 'count';\n } else if (!nofn && field.bin) {\n return f + 'bin_' + name;\n } else if (!nofn && field.aggregate) {\n return f + field.aggregate + '_' + name;\n } else if (!nofn && field.timeUnit) {\n return f + field.timeUnit + '_' + name;\n } else if (opt.fn) {\n return f + opt.fn + '_' + name;\n } else {\n return f + name;\n }\n};\n\nvlfield.shorthand = function(f) {\n var c = consts.shorthand;\n return (f.aggregate ? f.aggregate + c.func : '') +\n (f.timeUnit ? f.timeUnit + c.func : '') +\n (f.bin ? 'bin' + c.func : '') +\n (f.name || '') + c.type + f.type;\n};\n\nvlfield.shorthands = function(fields, delim) {\n delim = delim || c.delim;\n return fields.map(vlfield.shorthand).join(delim);\n};\n\nvlfield.fromShorthand = function(shorthand) {\n var split = shorthand.split(c.type), i;\n var o = {\n name: split[0].trim(),\n type: split[1].trim()\n };\n\n // check aggregate type\n for (i in schema.aggregate.enum) {\n var a = schema.aggregate.enum[i];\n if (o.name.indexOf(a + '_') === 0) {\n o.name = o.name.substr(a.length + 1);\n if (a == 'count' && o.name.length === 0) o.name = '*';\n o.aggregate = a;\n break;\n }\n }\n\n // check time timeUnit\n for (i in schema.timefns) {\n var tu = schema.timefns[i];\n if (o.name && o.name.indexOf(tu + '_') === 0) {\n o.name = o.name.substr(o.length + 1);\n o.timeUnit = tu;\n break;\n }\n }\n\n // check bin\n if (o.name && o.name.indexOf('bin_') === 0) {\n o.name = o.name.substr(4);\n o.bin = true;\n }\n\n return o;\n};\n\nvar isType = vlfield.isType = function (fieldDef, type) {\n return fieldDef.type === type;\n};\n\nvar isTypes = vlfield.isTypes = function (fieldDef, types) {\n for (var t=0; t 0 && filterNull[type] ? 1 : 0);\n};\n","'use strict';\n\n// declare global constant\nvar g = global || window;\n\ng.AGGREGATE = 'aggregate';\ng.RAW = 'raw';\ng.STACKED = 'stacked';\ng.INDEX = 'index';\n\ng.X = 'x';\ng.Y = 'y';\ng.ROW = 'row';\ng.COL = 'col';\ng.SIZE = 'size';\ng.SHAPE = 'shape';\ng.COLOR = 'color';\ng.TEXT = 'text';\ng.DETAIL = 'detail';\n\ng.N = 'N';\ng.O = 'O';\ng.Q = 'Q';\ng.T = 'T';\n","'use strict';\n\n// TODO(kanitw): chat with Vega team and possibly move this to vega-logging\nmodule.exports = function(prefix) {\n // Borrowed some ideas from http://stackoverflow.com/a/15653260/866989\n // and https://github.com/patik/console.log-wrapper/blob/master/consolelog.js\n var METHODS = ['error', 'info', 'debug', 'warn', 'log'];\n\n return METHODS.reduce(function(logger, fn) {\n var cfn = console[fn] ? fn : 'log';\n if (console[cfn].bind === 'undefined') { // IE < 10\n logger[fn] = Function.prototype.bind.call(console[cfn], console, prefix);\n }\n else {\n logger[fn] = console[cfn].bind(console, prefix);\n }\n return logger;\n }, {});\n};","// Package of defining Vega-lite Specification's json schema\n'use strict';\n\nrequire('../globals');\n\nvar schema = module.exports = {},\n util = require('../util'),\n toMap = util.toMap,\n colorbrewer = require('colorbrewer');\n\nschema.util = require('./schemautil');\n\nschema.marktype = {\n type: 'string',\n enum: ['point', 'tick', 'bar', 'line', 'area', 'circle', 'square', 'text']\n};\n\nschema.aggregate = {\n type: 'string',\n enum: ['avg', 'sum', 'median', 'min', 'max', 'count'],\n supportedEnums: {\n Q: ['avg', 'median', 'sum', 'min', 'max', 'count'],\n O: ['median','min','max'],\n N: [],\n T: ['avg', 'median', 'min', 'max'],\n '': ['count']\n },\n supportedTypes: toMap([Q, N, O, T, ''])\n};\n\nschema.getSupportedRole = function(encType) {\n return schema.schema.properties.encoding.properties[encType].supportedRole;\n};\n\nschema.timeUnits = ['year', 'month', 'day', 'date', 'hours', 'minutes', 'seconds'];\n\nschema.defaultTimeFn = 'month';\n\nschema.timeUnit = {\n type: 'string',\n enum: schema.timeUnits,\n supportedTypes: toMap([T])\n};\n\nschema.scale_type = {\n type: 'string',\n // TODO(kanitw) read vega's schema here, add description\n enum: ['linear', 'log', 'pow', 'sqrt', 'quantile'],\n default: 'linear',\n supportedTypes: toMap([Q])\n};\n\nschema.field = {\n type: 'object',\n properties: {\n name: {\n type: 'string'\n }\n }\n};\n\nvar clone = util.duplicate;\nvar merge = schema.util.merge;\n\nschema.MAXBINS_DEFAULT = 15;\n\nvar bin = {\n type: ['boolean', 'object'],\n default: false,\n properties: {\n maxbins: {\n type: 'integer',\n default: schema.MAXBINS_DEFAULT,\n minimum: 2,\n description: 'Maximum number of bins.'\n }\n },\n supportedTypes: toMap([Q]) // TODO: add O after finishing #81\n};\n\nvar typicalField = merge(clone(schema.field), {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: [N, O, Q, T]\n },\n aggregate: schema.aggregate,\n timeUnit: schema.timeUnit,\n bin: bin,\n scale: {\n type: 'object',\n properties: {\n /* Common Scale Properties */\n type: schema.scale_type,\n reverse: {\n type: 'boolean',\n default: false,\n supportedTypes: toMap([Q, T])\n },\n\n /* Quantitative Scale Properties */\n nice: {\n type: 'string',\n enum: ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'],\n supportedTypes: toMap([T])\n },\n zero: {\n type: 'boolean',\n description: 'Include zero',\n default: true,\n supportedTypes: toMap([Q, T])\n },\n\n /* Vega-lite only Properties */\n useRawDomain: {\n type: 'boolean',\n default: undefined,\n description: 'Use the raw data range as scale domain instead of ' +\n 'aggregated data for aggregate axis. ' +\n 'This option does not work with sum or count aggregate' +\n 'as they might have a substantially larger scale range.' +\n 'By default, use value from config.useRawDomain.'\n }\n }\n }\n }\n});\n\nvar onlyOrdinalField = merge(clone(schema.field), {\n type: 'object',\n supportedRole: {\n dimension: true\n },\n properties: {\n type: {\n type: 'string',\n enum: [N, O, Q, T] // ordinal-only field supports Q when bin is applied and T when time unit is applied.\n },\n timeUnit: schema.timeUnit,\n bin: bin,\n aggregate: {\n type: 'string',\n enum: ['count'],\n supportedTypes: toMap([N, O]) // FIXME this looks weird to me\n }\n }\n});\n\nvar axisMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true},\n properties: {\n axis: {\n type: 'object',\n properties: {\n /* Vega Axis Properties */\n format: {\n type: 'string',\n default: undefined, // auto\n description: 'The formatting pattern for axis labels. '+\n 'If not undefined, this will be determined by ' +\n 'small/largeNumberFormat and the max value ' +\n 'of the field.'\n },\n grid: {\n type: 'boolean',\n default: true,\n description: 'A flag indicate if gridlines should be created in addition to ticks.'\n },\n layer: {\n type: 'string',\n default: 'back',\n description: 'A string indicating if the axis (and any gridlines) should be placed above or below the data marks. One of \"front\" (default) or \"back\".'\n },\n orient: {\n type: 'string',\n default: undefined,\n enum: ['top', 'right', 'left', 'bottom'],\n description: 'The orientation of the axis. One of top, bottom, left or right. The orientation can be used to further specialize the axis type (e.g., a y axis oriented for the right edge of the chart).'\n },\n ticks: {\n type: 'integer',\n default: 5,\n minimum: 0,\n description: 'A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale\\'s range.'\n },\n /* Vega Axis Properties that are automatically populated by Vega-lite */\n title: {\n type: 'string',\n default: undefined,\n description: 'A title for the axis. (Shows field name and its function by default.)'\n },\n /* Vega-lite only */\n maxLabelLength: {\n type: 'integer',\n default: 25,\n minimum: 0,\n description: 'Truncate labels that are too long.'\n },\n labelAngle: {\n type: 'integer',\n default: undefined, // auto\n minimum: 0,\n maximum: 360,\n description: 'Angle by which to rotate labels. Set to 0 to force horizontal.'\n },\n titleMaxLength: {\n type: 'integer',\n default: undefined,\n minimum: 0,\n description: 'Max length for axis title if the title is automatically generated from the field\\'s description'\n },\n titleOffset: {\n type: 'integer',\n default: undefined, // auto\n description: 'A title offset value for the axis.'\n },\n }\n }\n }\n};\n\nvar sortMixin = {\n type: 'object',\n properties: {\n sort: {\n type: 'array',\n default: [],\n items: {\n type: 'object',\n supportedTypes: toMap([N, O]),\n required: ['name', 'aggregate'],\n properties: {\n name: {\n type: 'string'\n },\n aggregate: {\n type: 'string',\n enum: ['avg', 'sum', 'min', 'max', 'count']\n },\n reverse: {\n type: 'boolean',\n default: false\n }\n }\n }\n }\n }\n};\n\nvar bandMixin = {\n type: 'object',\n properties: {\n band: {\n type: 'object',\n properties: {\n size: {\n type: 'integer',\n minimum: 0,\n default: undefined\n },\n padding: {\n type: 'integer',\n minimum: 0,\n default: 1\n }\n }\n }\n }\n};\n\nvar legendMixin = {\n type: 'object',\n properties: {\n legend: {\n type: 'object',\n description: 'Properties of a legend.',\n properties: {\n title: {\n type: 'string',\n default: undefined,\n description: 'A title for the legend. (Shows field name and its function by default.)'\n }\n }\n }\n }\n};\n\nvar textMixin = {\n type: 'object',\n supportedMarktypes: {'text': true},\n properties: {\n align: {\n type: 'string',\n default: 'right'\n },\n baseline: {\n type: 'string',\n default: 'middle'\n },\n color: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n margin: {\n type: 'integer',\n default: 4,\n minimum: 0\n },\n placeholder: {\n type: 'string',\n default: 'Abc'\n },\n font: {\n type: 'object',\n properties: {\n weight: {\n type: 'string',\n enum: ['normal', 'bold'],\n default: 'normal'\n },\n size: {\n type: 'integer',\n default: 10,\n minimum: 0\n },\n family: {\n type: 'string',\n default: 'Helvetica Neue'\n },\n style: {\n type: 'string',\n default: 'normal',\n enum: ['normal', 'italic']\n }\n }\n },\n format: {\n type: 'string',\n default: undefined, // auto\n description: 'The formatting pattern for text value. '+\n 'If not undefined, this will be determined by ' +\n 'small/largeNumberFormat and the max value ' +\n 'of the field.'\n },\n }\n};\n\nvar sizeMixin = {\n type: 'object',\n supportedMarktypes: {point: true, bar: true, circle: true, square: true, text: true},\n properties: {\n value: {\n type: 'integer',\n default: 30,\n minimum: 0,\n description: 'Size of marks.'\n }\n }\n};\n\nvar colorMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true, 'text': true},\n properties: {\n value: {\n type: 'string',\n role: 'color',\n default: '#4682b4',\n description: 'Color to be used for marks.'\n },\n opacity: {\n type: 'number',\n default: undefined, // auto\n minimum: 0,\n maximum: 1\n },\n scale: {\n type: 'object',\n properties: {\n range: {\n type: ['string', 'array'],\n default: undefined,\n description:\n 'Color palette, if undefined vega-lite will use data property' +\n 'to pick one from c10palette, c20palette, or ordinalPalette.'\n //FIXME\n },\n c10palette: {\n type: 'string',\n default: 'category10',\n enum: [\n // Tableau\n 'category10', 'category10k',\n // Color Brewer\n 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3'\n ]\n },\n c20palette: {\n type: 'string',\n default: 'category20',\n enum: ['category20', 'category20b', 'category20c']\n },\n ordinalPalette: {\n type: 'string',\n default: undefined,\n description: 'Color palette to encode ordinal variables.',\n enum: util.keys(colorbrewer)\n },\n quantitativeRange: {\n type: 'array',\n default: ['#AFC6A3', '#09622A'], // tableau greens\n // default: ['#ccece6', '#00441b'], // BuGn.9 [2-8]\n description: 'Color range to encode quantitative variables.',\n minItems: 2,\n maxItems: 2,\n items: {\n type: 'string',\n role: 'color'\n }\n }\n }\n }\n }\n};\n\nvar shapeMixin = {\n type: 'object',\n supportedMarktypes: {point: true, circle: true, square: true},\n properties: {\n value: {\n type: 'string',\n enum: ['circle', 'square', 'cross', 'diamond', 'triangle-up', 'triangle-down'],\n default: 'circle',\n description: 'Mark to be used.'\n },\n filled: {\n type: 'boolean',\n default: false,\n description: 'Whether the shape\\'s color should be used as fill color instead of stroke color.'\n }\n }\n};\n\nvar detailMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, line: true, circle: true, square: true}\n};\n\nvar rowMixin = {\n properties: {\n height: {\n type: 'number',\n minimum: 0,\n default: 150\n }\n }\n};\n\nvar colMixin = {\n properties: {\n width: {\n type: 'number',\n minimum: 0,\n default: 150\n },\n axis: {\n properties: {\n maxLabelLength: {\n type: 'integer',\n default: 12,\n minimum: 0,\n description: 'Truncate labels that are too long.'\n }\n }\n }\n }\n};\n\nvar facetMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true, text: true},\n properties: {\n padding: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.1\n }\n }\n};\n\nvar requiredNameType = {\n required: ['name', 'type']\n};\n\nvar multiRoleField = merge(clone(typicalField), {\n supportedRole: {\n measure: true,\n dimension: true\n }\n});\n\nvar quantitativeField = merge(clone(typicalField), {\n supportedRole: {\n measure: true,\n dimension: 'ordinal-only' // using size to encoding category lead to order interpretation\n }\n});\n\nvar onlyQuantitativeField = merge(clone(typicalField), {\n supportedRole: {\n measure: true\n }\n});\n\nvar x = merge(clone(multiRoleField), axisMixin, bandMixin, requiredNameType, sortMixin);\nvar y = clone(x);\n\nvar facet = merge(clone(onlyOrdinalField), requiredNameType, facetMixin, sortMixin);\nvar row = merge(clone(facet), axisMixin, rowMixin);\nvar col = merge(clone(facet), axisMixin, colMixin);\n\nvar size = merge(clone(quantitativeField), legendMixin, sizeMixin, sortMixin);\nvar color = merge(clone(multiRoleField), legendMixin, colorMixin, sortMixin);\n\nvar shape = merge(clone(onlyOrdinalField), legendMixin, shapeMixin, sortMixin);\nvar detail = merge(clone(onlyOrdinalField), detailMixin, sortMixin);\n\n// we only put aggregated measure in pivot table\nvar text = merge(clone(onlyQuantitativeField), textMixin, sortMixin);\n\n// TODO add label\n\nvar filter = {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n operands: {\n type: 'array',\n items: {\n type: ['string', 'boolean', 'integer', 'number']\n }\n },\n operator: {\n type: 'string',\n enum: ['>', '>=', '=', '!=', '<', '<=', 'notNull']\n }\n }\n }\n};\n\nvar data = {\n type: 'object',\n properties: {\n // data source\n formatType: {\n type: 'string',\n enum: ['json', 'csv'],\n default: 'json'\n },\n url: {\n type: 'string',\n default: undefined\n },\n values: {\n type: 'array',\n default: undefined,\n description: 'Pass array of objects instead of a url to a file.',\n items: {\n type: 'object',\n additionalProperties: true\n }\n }\n }\n};\n\nvar config = {\n type: 'object',\n properties: {\n // template\n width: {\n type: 'integer',\n default: undefined\n },\n height: {\n type: 'integer',\n default: undefined\n },\n viewport: {\n type: 'array',\n items: {\n type: 'integer'\n },\n default: undefined\n },\n gridColor: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n gridOpacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.08\n },\n\n // filter null\n // TODO(#597) revise this config\n filterNull: {\n type: 'object',\n properties: {\n N: {type:'boolean', default: false},\n O: {type:'boolean', default: false},\n Q: {type:'boolean', default: true},\n T: {type:'boolean', default: true}\n }\n },\n toggleSort: {\n type: 'string',\n default: O\n },\n autoSortLine: {\n type: 'boolean',\n default: true\n },\n\n // single plot\n singleHeight: {\n // will be overwritten by bandWidth * (cardinality + padding)\n type: 'integer',\n default: 200,\n minimum: 0\n },\n singleWidth: {\n // will be overwritten by bandWidth * (cardinality + padding)\n type: 'integer',\n default: 200,\n minimum: 0\n },\n // band size\n largeBandSize: {\n type: 'integer',\n default: 21,\n minimum: 0\n },\n smallBandSize: {\n //small multiples or single plot with high cardinality\n type: 'integer',\n default: 12,\n minimum: 0\n },\n largeBandMaxCardinality: {\n type: 'integer',\n default: 10\n },\n // small multiples\n cellPadding: {\n type: 'number',\n default: 0.1\n },\n cellGridColor: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n cellGridOpacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.15\n },\n cellBackgroundColor: {\n type: 'string',\n role: 'color',\n default: 'rgba(0,0,0,0)'\n },\n textCellWidth: {\n type: 'integer',\n default: 90,\n minimum: 0\n },\n\n // marks\n strokeWidth: {\n type: 'integer',\n default: 2,\n minimum: 0\n },\n singleBarOffset: {\n type: 'integer',\n default: 5,\n minimum: 0\n },\n // scales\n timeScaleLabelLength: {\n type: 'integer',\n default: 3,\n minimum: 0,\n description: 'Max length for values in dayScaleLabel and monthScaleLabel. Zero means using full names in dayScaleLabel/monthScaleLabel.'\n },\n dayScaleLabel: {\n type: 'array',\n items: {\n type: 'string'\n },\n default: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n description: 'Axis labels for day of week, starting from Sunday.' +\n '(Consistent with Javascript -- See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay.'\n },\n monthScaleLabel: {\n type: 'array',\n items: {\n type: 'string'\n },\n default: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n description: 'Axis labels for month.'\n },\n // other\n characterWidth: {\n type: 'integer',\n default: 6\n },\n maxSmallNumber: {\n type: 'number',\n default: 10000,\n description: 'maximum number that a field will be considered smallNumber.'+\n 'Used for axis labelling.'\n },\n smallNumberFormat: {\n type: 'string',\n default: '',\n description: 'D3 Number format for axis labels and text tables '+\n 'for number <= maxSmallNumber. Used for axis labelling.'\n },\n largeNumberFormat: {\n type: 'string',\n default: '.3s',\n description: 'D3 Number format for axis labels and text tables ' +\n 'for number > maxSmallNumber.'\n },\n timeFormat: {\n type: 'string',\n default: '%Y-%m-%d',\n description: 'Date format for axis labels.'\n },\n useRawDomain: {\n type: 'boolean',\n default: false,\n description: 'Use the raw data range as scale domain instead of ' +\n 'aggregated data for aggregate axis. ' +\n 'This option does not work with sum or count aggregate' +\n 'as they might have a substantially larger scale range.' +\n 'By default, use value from config.useRawDomain.'\n }\n }\n};\n\n/** @type Object Schema of a vega-lite specification */\nschema.schema = {\n $schema: 'http://json-schema.org/draft-04/schema#',\n description: 'Schema for Vega-lite specification',\n type: 'object',\n required: ['marktype', 'encoding', 'data'],\n properties: {\n data: data,\n marktype: schema.marktype,\n encoding: {\n type: 'object',\n properties: {\n x: x,\n y: y,\n row: row,\n col: col,\n size: size,\n color: color,\n shape: shape,\n text: text,\n detail: detail\n }\n },\n filter: filter,\n config: config\n }\n};\n\nschema.encTypes = util.keys(schema.schema.properties.encoding.properties);\n\n/** Instantiate a verbose vl spec from the schema */\nschema.instantiate = function() {\n return schema.util.instantiate(schema.schema);\n};\n","'use strict';\n\nvar schemautil = module.exports = {},\n util = require('../util');\n\nvar isEmpty = function(obj) {\n return Object.keys(obj).length === 0;\n};\n\nschemautil.extend = function(instance, schema) {\n return schemautil.merge(schemautil.instantiate(schema), instance);\n};\n\n// instantiate a schema\nschemautil.instantiate = function(schema) {\n var val;\n if (schema === undefined) {\n return undefined;\n } else if ('default' in schema) {\n val = schema.default;\n return util.isObject(val) ? util.duplicate(val) : val;\n } else if (schema.type === 'object') {\n var instance = {};\n for (var name in schema.properties) {\n val = schemautil.instantiate(schema.properties[name]);\n if (val !== undefined) {\n instance[name] = val;\n }\n }\n return instance;\n } else if (schema.type === 'array') {\n return [];\n }\n return undefined;\n};\n\n// remove all defaults from an instance\nschemautil.subtract = function(instance, defaults) {\n var changes = {};\n for (var prop in instance) {\n var def = defaults[prop];\n var ins = instance[prop];\n // Note: does not properly subtract arrays\n if (!defaults || def !== ins) {\n if (typeof ins === 'object' && !util.isArray(ins) && def) {\n var c = schemautil.subtract(ins, def);\n if (!isEmpty(c))\n changes[prop] = c;\n } else if (!util.isArray(ins) || ins.length > 0) {\n changes[prop] = ins;\n }\n }\n }\n return changes;\n};\n\nschemautil.merge = function(/*dest*, src0, src1, ...*/){\n var dest = arguments[0];\n for (var i=1 ; i 0)) return range; // also handles Invalid Date\n offseti(start, 1), floori(start);\n if (start < stop) range.push(new Date(+start));\n while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start));\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n while (--step >= 0) while (offseti(date, 1), !test(date));\n });\n };\n\n if (count) interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n return interval;\n }\n\n var second = newInterval(function(date) {\n date.setMilliseconds(0);\n }, function(date, step) {\n date.setTime(+date + step * 1e3);\n }, function(start, end) {\n return (end - start) / 1e3;\n });\n\n exports.seconds = second.range;\n\n var minute = newInterval(function(date) {\n date.setSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 6e4);\n }, function(start, end) {\n return (end - start) / 6e4;\n });\n\n exports.minutes = minute.range;\n\n var hour = newInterval(function(date) {\n date.setMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 36e5);\n }, function(start, end) {\n return (end - start) / 36e5;\n });\n\n exports.hours = hour.range;\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5;\n });\n\n exports.days = day.range;\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5;\n });\n }\n\n exports.sunday = weekday(0);\n\n exports.sundays = exports.sunday.range;\n\n exports.monday = weekday(1);\n\n exports.mondays = exports.monday.range;\n\n exports.tuesday = weekday(2);\n\n exports.tuesdays = exports.tuesday.range;\n\n exports.wednesday = weekday(3);\n\n exports.wednesdays = exports.wednesday.range;\n\n exports.thursday = weekday(4);\n\n exports.thursdays = exports.thursday.range;\n\n exports.friday = weekday(5);\n\n exports.fridays = exports.friday.range;\n\n exports.saturday = weekday(6);\n\n exports.saturdays = exports.saturday.range;\n\n var week = exports.sunday;\n\n exports.weeks = week.range;\n\n var month = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(1);\n }, function(date, step) {\n date.setMonth(date.getMonth() + step);\n }, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n });\n\n exports.months = month.range;\n\n var year = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n });\n\n exports.years = year.range;\n\n var utcSecond = newInterval(function(date) {\n date.setUTCMilliseconds(0);\n }, function(date, step) {\n date.setTime(+date + step * 1e3);\n }, function(start, end) {\n return (end - start) / 1e3;\n });\n\n exports.utcSeconds = utcSecond.range;\n\n var utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 6e4);\n }, function(start, end) {\n return (end - start) / 6e4;\n });\n\n exports.utcMinutes = utcMinute.range;\n\n var utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 36e5);\n }, function(start, end) {\n return (end - start) / 36e5;\n });\n\n exports.utcHours = utcHour.range;\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / 864e5;\n });\n\n exports.utcDays = utcDay.range;\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / 6048e5;\n });\n }\n\n exports.utcSunday = utcWeekday(0);\n\n exports.utcSundays = exports.utcSunday.range;\n\n exports.utcMonday = utcWeekday(1);\n\n exports.utcMondays = exports.utcMonday.range;\n\n exports.utcTuesday = utcWeekday(2);\n\n exports.utcTuesdays = exports.utcTuesday.range;\n\n exports.utcWednesday = utcWeekday(3);\n\n exports.utcWednesdays = exports.utcWednesday.range;\n\n exports.utcThursday = utcWeekday(4);\n\n exports.utcThursdays = exports.utcThursday.range;\n\n exports.utcFriday = utcWeekday(5);\n\n exports.utcFridays = exports.utcFriday.range;\n\n exports.utcSaturday = utcWeekday(6);\n\n exports.utcSaturdays = exports.utcSaturday.range;\n\n var utcWeek = exports.utcSunday;\n\n exports.utcWeeks = utcWeek.range;\n\n var utcMonth = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(1);\n }, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n }, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n });\n\n exports.utcMonths = utcMonth.range;\n\n var utcYear = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCMonth(0, 1);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n });\n\n exports.utcYears = utcYear.range;\n\n exports.interval = newInterval;\n exports.second = second;\n exports.minute = minute;\n exports.hour = hour;\n exports.day = day;\n exports.week = week;\n exports.month = month;\n exports.year = year;\n exports.utcSecond = utcSecond;\n exports.utcMinute = utcMinute;\n exports.utcHour = utcHour;\n exports.utcDay = utcDay;\n exports.utcWeek = utcWeek;\n exports.utcMonth = utcMonth;\n exports.utcYear = utcYear;\n\n}));","var util = require('../util'),\n time = require('../time'),\n EPSILON = 1e-15;\n\nfunction bins(opt) {\n if (!opt) { throw Error(\"Missing binning options.\"); }\n\n // determine range\n var maxb = opt.maxbins || 15,\n base = opt.base || 10,\n logb = Math.log(base),\n div = opt.div || [5, 2], \n min = opt.min,\n max = opt.max,\n span = max - min,\n step, level, minstep, precision, v, i, eps;\n\n if (opt.step) {\n // if step size is explicitly given, use that\n step = opt.step;\n } else if (opt.steps) {\n // if provided, limit choice to acceptable step sizes\n step = opt.steps[Math.min(\n opt.steps.length - 1,\n bisect(opt.steps, span/maxb, 0, opt.steps.length)\n )];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = opt.minstep || 0;\n step = Math.max(\n minstep,\n Math.pow(base, Math.round(Math.log(span) / logb) - level)\n );\n \n // increase step size if too many bins\n do { step *= base; } while (Math.ceil(span/step) > maxb);\n\n // decrease step size if allowed\n for (i=0; i= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n precision = v >= 0 ? 0 : ~~(-v / logb) + 1;\n eps = Math.pow(base, -precision - 1);\n min = Math.min(min, Math.floor(min / step + eps) * step);\n max = Math.ceil(max / step) * step;\n\n return {\n start: min,\n stop: max,\n step: step,\n unit: {precision: precision},\n value: value,\n index: index\n };\n}\n\nfunction bisect(a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (util.cmp(a[mid], x) < 0) { lo = mid + 1; }\n else { hi = mid; }\n }\n return lo;\n}\n\nfunction value(v) {\n return this.step * Math.floor(v / this.step + EPSILON);\n}\n\nfunction index(v) {\n return Math.floor((v - this.start) / this.step + EPSILON);\n}\n\nfunction date_value(v) {\n return this.unit.date(value.call(this, v));\n}\n\nfunction date_index(v) {\n return index.call(this, this.unit.unit(v));\n}\n\nbins.date = function(opt) {\n if (!opt) { throw Error(\"Missing date binning options.\"); }\n\n // find time step, then bin\n var units = opt.utc ? time.utc : time,\n dmin = opt.min,\n dmax = opt.max,\n maxb = opt.maxbins || 20,\n minb = opt.minbins || 4,\n span = (+dmax) - (+dmin),\n unit = opt.unit ? units[opt.unit] : units.find(span, minb, maxb),\n spec = bins({\n min: unit.min != null ? unit.min : unit.unit(dmin),\n max: unit.max != null ? unit.max : unit.unit(dmax),\n maxbins: maxb,\n minstep: unit.minstep,\n steps: unit.step\n });\n\n spec.unit = unit;\n spec.index = date_index;\n if (!opt.raw) spec.value = date_value;\n return spec;\n};\n\nmodule.exports = bins;\n","var gen = module.exports = {};\n\ngen.repeat = function(val, n) {\n var a = Array(n), i;\n for (i=0; i stop) range.push(j);\n else while ((j = start + step * ++i) < stop) range.push(j);\n return range;\n};\n\ngen.random = {};\n\ngen.random.uniform = function(min, max) {\n if (max === undefined) {\n max = min === undefined ? 1 : min;\n min = 0;\n }\n var d = max - min;\n var f = function() {\n return min + d * Math.random();\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n\ngen.random.integer = function(a, b) {\n if (b === undefined) {\n b = a;\n a = 0;\n }\n var d = b - a;\n var f = function() {\n return a + Math.floor(d * Math.random());\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n\ngen.random.normal = function(mean, stdev) {\n mean = mean || 0;\n stdev = stdev || 1;\n var next;\n var f = function() {\n var x = 0, y = 0, rds, c;\n if (next !== undefined) {\n x = next;\n next = undefined;\n return x;\n }\n do {\n x = Math.random()*2-1;\n y = Math.random()*2-1;\n rds = x*x + y*y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2*Math.log(rds)/rds); // Box-Muller transform\n next = mean + y*c*stdev;\n return mean + x*c*stdev;\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};","var util = require('../util');\n\nvar TYPES = '__types__';\n\nvar PARSERS = {\n boolean: util.boolean,\n integer: util.number,\n number: util.number,\n date: util.date,\n string: function(x) { return x==='' ? null : x; }\n};\n\nvar TESTS = {\n boolean: function(x) { return x==='true' || x==='false' || util.isBoolean(x); },\n integer: function(x) { return TESTS.number(x) && (x=+x) === ~~x; },\n number: function(x) { return !isNaN(+x) && !util.isDate(x); },\n date: function(x) { return !isNaN(Date.parse(x)); }\n};\n\nfunction annotation(data, types) {\n if (!types) return data && data[TYPES] || null;\n data[TYPES] = types;\n}\n\nfunction type(values, f) {\n f = util.$(f);\n var v, i, n;\n\n // if data array has type annotations, use them\n if (values[TYPES]) {\n v = f(values[TYPES]);\n if (util.isString(v)) return v;\n }\n\n for (i=0, n=values.length; !util.isValid(v) && i b) b = v;\n }\n }\n return [a, b];\n};\n\n// Find the integer indices of the minimum and maximum values.\nstats.extent.index = function(values, f) {\n f = util.$(f);\n var x = -1, y = -1, a, b, v, i, n = values.length;\n for (i=0; i b) { b = v; y = i; }\n }\n }\n return [x, y];\n};\n\n// Compute the dot product of two arrays of numbers.\nstats.dot = function(values, a, b) {\n var sum = 0, i, v;\n if (!b) {\n if (values.length !== a.length) {\n throw Error('Array lengths must match.');\n }\n for (i=0; i -1 && p !== v) {\n mu = 1 + (i-1 + tie) / 2;\n for (; tie -1) {\n mu = 1 + (n-1 + tie) / 2;\n for (; tie max) max = x;\n delta = x - mean;\n mean = mean + delta / (++valid);\n M2 = M2 + delta * (x - mean);\n vals.push(x);\n }\n }\n M2 = M2 / (valid - 1);\n sd = Math.sqrt(M2);\n\n // sort values for median and iqr\n vals.sort(util.cmp);\n\n return {\n type: type(values, f),\n unique: u,\n count: values.length,\n valid: valid,\n missing: missing,\n distinct: distinct,\n min: min,\n max: max,\n mean: mean,\n stdev: sd,\n median: (v = stats.quantile(vals, 0.5)),\n q1: stats.quantile(vals, 0.25),\n q3: stats.quantile(vals, 0.75),\n modeskew: sd === 0 ? 0 : (mean - v) / sd\n };\n};\n\n// Compute profiles for all variables in a data set.\nstats.summary = function(data, fields) {\n fields = fields || util.keys(data[0]);\n var s = fields.map(function(f) {\n var p = stats.profile(data, util.$(f));\n return (p.field = f, p);\n });\n return (s.__summary__ = true, s);\n};\n\nmodule.exports = stats;","var d3_time = require('d3-time');\n\nvar tempDate = new Date(),\n baseDate = new Date(0, 0, 1).setFullYear(0), // Jan 1, 0 AD\n utcBaseDate = new Date(Date.UTC(0, 0, 1)).setUTCFullYear(0);\n\nfunction date(d) {\n return (tempDate.setTime(+d), tempDate);\n}\n\n// create a time unit entry\nfunction entry(type, date, unit, step, min, max) {\n var e = {\n type: type,\n date: date,\n unit: unit\n };\n if (step) {\n e.step = step;\n } else {\n e.minstep = 1;\n }\n if (min != null) e.min = min;\n if (max != null) e.max = max;\n return e;\n}\n\nfunction create(type, unit, base, step, min, max) {\n return entry(type,\n function(d) { return unit.offset(base, d); },\n function(d) { return unit.count(base, d); },\n step, min, max);\n}\n\nvar locale = [\n create('second', d3_time.second, baseDate),\n create('minute', d3_time.minute, baseDate),\n create('hour', d3_time.hour, baseDate),\n create('day', d3_time.day, baseDate, [1, 7]),\n create('month', d3_time.month, baseDate, [1, 3, 6]),\n create('year', d3_time.year, baseDate),\n\n // periodic units\n entry('seconds',\n function(d) { return new Date(1970, 0, 1, 0, 0, d); },\n function(d) { return date(d).getSeconds(); },\n null, 0, 59\n ),\n entry('minutes',\n function(d) { return new Date(1970, 0, 1, 0, d); },\n function(d) { return date(d).getMinutes(); },\n null, 0, 59\n ),\n entry('hours',\n function(d) { return new Date(1970, 0, 1, d); },\n function(d) { return date(d).getHours(); },\n null, 0, 23\n ),\n entry('weekdays',\n function(d) { return new Date(1970, 0, 4+d); },\n function(d) { return date(d).getDay(); },\n [1], 0, 6\n ),\n entry('dates',\n function(d) { return new Date(1970, 0, d); },\n function(d) { return date(d).getDate(); },\n [1], 1, 31\n ),\n entry('months',\n function(d) { return new Date(1970, d % 12, 1); },\n function(d) { return date(d).getMonth(); },\n [1], 0, 11\n )\n];\n\nvar utc = [\n create('second', d3_time.utcSecond, utcBaseDate),\n create('minute', d3_time.utcMinute, utcBaseDate),\n create('hour', d3_time.utcHour, utcBaseDate),\n create('day', d3_time.utcDay, utcBaseDate, [1, 7]),\n create('month', d3_time.utcMonth, utcBaseDate, [1, 3, 6]),\n create('year', d3_time.utcYear, utcBaseDate),\n\n // periodic units\n entry('seconds',\n function(d) { return new Date(Date.UTC(1970, 0, 1, 0, 0, d)); },\n function(d) { return date(d).getUTCSeconds(); },\n null, 0, 59\n ),\n entry('minutes',\n function(d) { return new Date(Date.UTC(1970, 0, 1, 0, d)); },\n function(d) { return date(d).getUTCMinutes(); },\n null, 0, 59\n ),\n entry('hours',\n function(d) { return new Date(Date.UTC(1970, 0, 1, d)); },\n function(d) { return date(d).getUTCHours(); },\n null, 0, 23\n ),\n entry('weekdays',\n function(d) { return new Date(Date.UTC(1970, 0, 4+d)); },\n function(d) { return date(d).getUTCDay(); },\n [1], 0, 6\n ),\n entry('dates',\n function(d) { return new Date(Date.UTC(1970, 0, d)); },\n function(d) { return date(d).getUTCDate(); },\n [1], 1, 31\n ),\n entry('months',\n function(d) { return new Date(Date.UTC(1970, d % 12, 1)); },\n function(d) { return date(d).getUTCMonth(); },\n [1], 0, 11\n )\n];\n\nvar STEPS = [\n [31536e6, 5], // 1-year\n [7776e6, 4], // 3-month\n [2592e6, 4], // 1-month\n [12096e5, 3], // 2-week\n [6048e5, 3], // 1-week\n [1728e5, 3], // 2-day\n [864e5, 3], // 1-day\n [432e5, 2], // 12-hour\n [216e5, 2], // 6-hour\n [108e5, 2], // 3-hour\n [36e5, 2], // 1-hour\n [18e5, 1], // 30-minute\n [9e5, 1], // 15-minute\n [3e5, 1], // 5-minute\n [6e4, 1], // 1-minute\n [3e4, 0], // 30-second\n [15e3, 0], // 15-second\n [5e3, 0], // 5-second\n [1e3, 0] // 1-second\n];\n\nfunction find(units, span, minb, maxb) {\n var step = STEPS[0], i, n, bins;\n\n for (i=1, n=STEPS.length; i step[0]) {\n bins = span / step[0];\n if (bins > maxb) {\n return units[STEPS[i-1][1]];\n }\n if (bins >= minb) {\n return units[step[1]];\n }\n }\n }\n return units[STEPS[n-1][1]];\n}\n\nfunction toUnitMap(units) {\n var map = {}, i, n;\n for (i=0, n=units.length; i 1 ?\n function(x) { return s.reduce(function(x,f) { return x[f]; }, x); } :\n function(x) { return x[f]; }\n );\n};\n\n// short-cut for accessor\nu.$ = u.accessor;\n\nu.mutator = function(f) {\n var s;\n return u.isString(f) && (s=u.field(f)).length > 1 ?\n function(x, v) {\n for (var i=0; i y) return sign[i];\n }\n return 0;\n };\n};\n\nu.cmp = function(a, b) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else if (a >= b) {\n return 0;\n } else if (a === null) {\n return -1;\n } else if (b === null) {\n return 1;\n }\n return NaN;\n};\n\nu.numcmp = function(a, b) { return a - b; };\n\nu.stablesort = function(array, sortBy, keyFn) {\n var indices = array.reduce(function(idx, v, i) {\n return (idx[keyFn(v)] = i, idx);\n }, {});\n\n array.sort(function(a, b) {\n var sa = sortBy(a),\n sb = sortBy(b);\n return sa < sb ? -1 : sa > sb ? 1\n : (indices[keyFn(a)] - indices[keyFn(b)]);\n });\n\n return array;\n};\n\n\n// string functions\n\nu.pad = function(s, length, pos, padchar) {\n padchar = padchar || \" \";\n var d = length - s.length;\n if (d <= 0) return s;\n switch (pos) {\n case 'left':\n return strrep(d, padchar) + s;\n case 'middle':\n case 'center':\n return strrep(Math.floor(d/2), padchar) +\n s + strrep(Math.ceil(d/2), padchar);\n default:\n return s + strrep(d, padchar);\n }\n};\n\nfunction strrep(n, str) {\n var s = \"\", i;\n for (i=0; i",">=","=","!=","<","<=","expr","formula","nofn","output","filters","condition","op1","op2","warn","dims","meas","op","source","groupby","../field","groupdef","faceting","axesGrp","facetKeys","cellAxes","hasRow","hasCol","mark","unshift","keys","trans","vllayout","box","hasX","hasY","xCardinality","yCardinality","TEXT","colCardinality","rowCardinality","getMaxNumberLength","d3_format","getMaxLength","extraOffset","d3-format",13,"COLOR","SIZE","SHAPE","shape","symbols","filled","strokeWidth","leg",14,"bar_props","xc","y2","yc","point_props","line_props","area_props","tick_props","filled_point_props","text_props","fontSize","font","text","template","placeholder","family","fontWeight","weight","fontStyle","prop","bar","supportedEncoding","requiredEncoding","detail","area","tick","circle","square","point",15,"interpolate","vlsort","props","domain","fieldStat","bins","getbins","numbins","STACKED","prefn","scaleUseRawDomain","useRawDomain","notCountOrSum","isOrdinalFn","getDataName","bandWidth","nice","outerPadding","points","colorScale","ordinalPalette","quantitativeRange","c10palette","c20palette","palette","ps","to","interpolator","../schema/schema","d3-color",16,"datasetMapping","sortBy","byClause","dataName","transforms",17,"stacking","dim","val","idx","isXMeasure","isYMeasure","stacked","y1","y0",18,"estimateOpacity","numPoints","numMultiples",19,"subfaceting",20,"d3_time_format","LONG_DATE","stat","yearstat","distinct","scaleLabel","labelLength","substr","isColor","d3-time-format",21,"encodingTypes","DETAIL","func",22,"vldata","types","boolean","number","integer","profile","*",23,"encTypes","countRetinal","fieldDef","arr","isArray","enctype",24,"shorthands","timefns","tu","./compiler/time",25,"INDEX",26,"METHODS","logger","cfn","bind","Function",27,"toMap","enum","supportedEnums","supportedTypes","getSupportedRole","supportedRole","timeUnits","defaultTimeFn","scale_type","default","clone","minimum","description","typicalField","onlyOrdinalField","dimension","axisMixin","supportedMarktypes","maximum","sortMixin","items","required","bandMixin","legendMixin","textMixin","role","margin","sizeMixin","colorMixin","minItems","maxItems","shapeMixin","detailMixin","rowMixin","colMixin","facetMixin","requiredNameType","multiRoleField","measure","quantitativeField","onlyQuantitativeField","additionalProperties","viewport","gridColor","gridOpacity","autoSortLine","singleHeight","singleWidth","largeBandSize","smallBandSize","largeBandMaxCardinality","cellGridColor","cellGridOpacity","cellBackgroundColor","textCellWidth","singleBarOffset","timeScaleLabelLength","dayScaleLabel","monthScaleLabel","characterWidth","maxSmallNumber","smallNumberFormat","largeNumberFormat","$schema","./schemautil",28,"dest","src","constructor","schemautil","isEmpty","obj","extend","instance","isObject","changes","ins",29,"isin","item","array","thisArg","any","all","noaugment","./logger","datalib/src/bins/bins","datalib/src/generate","datalib/src/util",30,"./Encoding","./compiler/compiler",31,"second","setMilliseconds","seconds","minute","setSeconds","minutes","hour","setMinutes","hours","sundays","mondays","tuesday","tuesdays","wednesday","wednesdays","thursday","thursdays","friday","fridays","saturday","saturdays","week","weeks","month","years","utcSecond","setUTCMilliseconds","utcSeconds","utcMinute","setUTCSeconds","utcMinutes","utcHour","setUTCMinutes","utcHours","utcDays","utcSundays","utcMondays","utcTuesday","utcTuesdays","utcWednesday","utcWednesdays","utcThursday","utcThursdays","utcFriday","utcFridays","utcSaturday","utcSaturdays","utcWeek","utcWeeks","utcMonth","utcMonths","utcYears",32,"level","minstep","eps","maxb","base","logb","log","div","span","steps","bisect","unit","index","lo","hi","mid","cmp","EPSILON","date_value","date_index","units","utc","dmin","dmax","minb","minbins","find","../time",33,"gen","repeat","zeros","random","uniform","samples","normal","mean","stdev","next","rds",34,"annotation","TYPES","$","isString","isValid","isDate","isNumber","isBoolean","typeAll","infer","TESTS","splice","inferAll","PARSERS","parsers",35,"unique","results","valid","missing","median","quantile","quartile","q","sum","variance","M2","modeskew","avg","med","std","extent","dot","rank","mu","comparator","tie","cor","mua","mub","sda","sdb","ra","rb","dist","mat","exp","isFunction","L2","R","entropy","counts","LN2","mutual","px","py","info","sd","q1","q3","__summary__","./generate","./import/type",36,"tempDate","entry","STEPS","toUnitMap","d3_time","baseDate","utcBaseDate","d3-time",37,"util_escape_str","escape_str_re","strrep","str","truncateOnWord","len","rev","cnt","tok","truncate_word_re","buffer","FNAME","namedfunc","JSON","stringify","equal","list","keystr","String","isBuffer","Buffer","accessor","mutator","$func","$valid","$length","$in","$year","$month","$date","dates","$day","weekdays","$hour","$minute","$second","$utcYear","$utcMonth","$utcDate","$utcDay","$utcHour","$utcMinute","$utcSecond","numcmp","stablesort","keyFn","indices","sa","sb","pos","padchar","word","ellipsis","l1","l2"],"mappings":"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","file":"vega-lite.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 180 || delta < -180\n ? delta - 360 * Math.round(delta / 360)\n : delta;\n }\n\n function Color() {}var reHex3 = /^#([0-9a-f]{3})$/;\n var reHex6 = /^#([0-9a-f]{6})$/;\n var reRgbInteger = /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\n var reRgbPercent = /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var reHslPercent = /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n color.prototype = Color.prototype = {\n displayable: function() {\n return this.rgb().displayable();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n };\n\n function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf))) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? rgb(m[1], m[2], m[3]) // rgb(255,0,0)\n : (m = reRgbPercent.exec(format)) ? rgb(m[1] * 2.55, m[2] * 2.55, m[3] * 2.55) // rgb(100%,0%,0%)\n : (m = reHslPercent.exec(format)) ? hsl(m[1], m[2] * .01, m[3] * .01) // hsl(120,50%,50%)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : null;\n }function rgbn(n) {\n return rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff);\n }\n\n var named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n };\n\n var darker = .7;\n var brighter = 1 / darker;\n\n function rgb(r, g, b) {\n if (arguments.length === 1) {\n if (!(r instanceof Color)) r = color(r);\n if (r) {\n r = r.rgb();\n b = r.b;\n g = r.g;\n r = r.r;\n } else {\n r = g = b = NaN;\n }\n }\n return new Rgb(r, g, b);\n }function Rgb(r, g, b) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n }var ____prototype = rgb.prototype = Rgb.prototype = new Color;\n\n ____prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k);\n };\n\n ____prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k);\n };\n\n ____prototype.rgb = function() {\n return this;\n };\n\n ____prototype.displayable = function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255);\n };\n\n ____prototype.toString = function() {\n return _format(this.r, this.g, this.b);\n };\n\n function _format(r, g, b) {\n return \"#\"\n + (isNaN(r) ? \"00\" : (r = Math.round(r)) < 16 ? \"0\" + Math.max(0, r).toString(16) : Math.min(255, r).toString(16))\n + (isNaN(g) ? \"00\" : (g = Math.round(g)) < 16 ? \"0\" + Math.max(0, g).toString(16) : Math.min(255, g).toString(16))\n + (isNaN(b) ? \"00\" : (b = Math.round(b)) < 16 ? \"0\" + Math.max(0, b).toString(16) : Math.min(255, b).toString(16));\n }\n\n function hsl(h, s, l) {\n if (arguments.length === 1) {\n if (h instanceof Hsl) {\n l = h.l;\n s = h.s;\n h = h.h;\n } else {\n if (!(h instanceof Color)) h = color(h);\n if (h) {\n if (h instanceof Hsl) return h;\n h = h.rgb();\n var r = h.r / 255,\n g = h.g / 255,\n b = h.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n range = max - min;\n l = (max + min) / 2;\n if (range) {\n s = l < .5 ? range / (max + min) : range / (2 - max - min);\n if (r === max) h = (g - b) / range + (g < b) * 6;\n else if (g === max) h = (b - r) / range + 2;\n else h = (r - g) / range + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n } else {\n h = s = l = NaN;\n }\n }\n }\n return new Hsl(h, s, l);\n }function Hsl(h, s, l) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n }var ___prototype = hsl.prototype = Hsl.prototype = new Color;\n\n ___prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k);\n };\n\n ___prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k);\n };\n\n ___prototype.rgb = function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < .5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2)\n );\n };\n\n ___prototype.displayable = function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1);\n };\n\n /* From FvD 13.37, CSS Color Module Level 3 */\n function hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n }\n\n var Kn = 18;\n\n var Xn = 0.950470;\n var Yn = 1;\n var Zn = 1.088830;\n var t0 = 4 / 29;\n var t1 = 6 / 29;\n var t2 = 3 * t1 * t1;\n var t3 = t1 * t1 * t1;\n function lab(l, a, b) {\n if (arguments.length === 1) {\n if (l instanceof Lab) {\n b = l.b;\n a = l.a;\n l = l.l;\n } else if (l instanceof Hcl) {\n var h = l.h * deg2rad;\n b = Math.sin(h) * l.c;\n a = Math.cos(h) * l.c;\n l = l.l;\n } else {\n if (!(l instanceof Rgb)) l = rgb(l);\n var r = rgb2xyz(l.r),\n g = rgb2xyz(l.g),\n b = rgb2xyz(l.b),\n x = xyz2lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / Xn),\n y = xyz2lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / Yn),\n z = xyz2lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / Zn);\n b = 200 * (y - z);\n a = 500 * (x - y);\n l = 116 * y - 16;\n }\n }\n return new Lab(l, a, b);\n }function Lab(l, a, b) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n }var __prototype = lab.prototype = Lab.prototype = new Color;\n\n __prototype.brighter = function(k) {\n return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b);\n };\n\n __prototype.darker = function(k) {\n return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b);\n };\n\n __prototype.rgb = function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Rgb(\n xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z)\n );\n };\n\n function xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n }\n\n function lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n }\n\n function xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n }\n\n function rgb2xyz(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n }\n\n var deg2rad = Math.PI / 180;\n var rad2deg = 180 / Math.PI;\n\n function hcl(h, c, l) {\n if (arguments.length === 1) {\n if (h instanceof Hcl) {\n l = h.l;\n c = h.c;\n h = h.h;\n } else {\n if (!(h instanceof Lab)) h = lab(h);\n l = h.l;\n c = Math.sqrt(h.a * h.a + h.b * h.b);\n h = Math.atan2(h.b, h.a) * rad2deg;\n if (h < 0) h += 360;\n }\n }\n return new Hcl(h, c, l);\n }function Hcl(h, c, l) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n }var _prototype = hcl.prototype = Hcl.prototype = new Color;\n\n _prototype.brighter = function(k) {\n return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k));\n };\n\n _prototype.darker = function(k) {\n return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k));\n };\n\n _prototype.rgb = function() {\n return lab(this).rgb();\n };\n\n var A = -0.14861;\n var B = +1.78277;\n var C = -0.29227;\n var D = -0.90649;\n var E = +1.97294;\n var ED = E * D;\n var EB = E * B;\n var BC_DA = B * C - D * A;\n function cubehelix(h, s, l) {\n if (arguments.length === 1) {\n if (h instanceof Cubehelix) {\n l = h.l;\n s = h.s;\n h = h.h;\n } else {\n if (!(h instanceof Rgb)) h = rgb(h);\n var r = h.r / 255, g = h.g / 255, b = h.b / 255;\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB);\n var bl = b - l, k = (E * (g - l) - C * bl) / D;\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)); // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n if (h < 0) h += 360;\n }\n }\n return new Cubehelix(h, s, l);\n }function Cubehelix(h, s, l) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n }var prototype = cubehelix.prototype = Cubehelix.prototype = new Color;\n\n prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k);\n };\n\n prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k);\n };\n\n prototype.rgb = function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh))\n );\n };\n\n function interpolateCubehelixGamma(gamma) {\n return function(a, b) {\n a = cubehelix(a);\n b = cubehelix(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * Math.pow(t, gamma);\n return a + \"\";\n };\n };\n }\n\n function interpolateCubehelixGammaLong(gamma) {\n return function(a, b) {\n a = cubehelix(a);\n b = cubehelix(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * Math.pow(t, gamma);\n return a + \"\";\n };\n };\n }\n\n function interpolateHclLong(a, b) {\n a = hcl(a);\n b = hcl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n ac = isNaN(a.c) ? b.c : a.c,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bc = isNaN(b.c) ? 0 : b.c - ac,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.c = ac + bc * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateHcl(a, b) {\n a = hcl(a);\n b = hcl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n ac = isNaN(a.c) ? b.c : a.c,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bc = isNaN(b.c) ? 0 : b.c - ac,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.c = ac + bc * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateLab(a, b) {\n a = lab(a);\n b = lab(b);\n var al = a.l,\n aa = a.a,\n ab = a.b,\n bl = b.l - al,\n ba = b.a - aa,\n bb = b.b - ab;\n return function(t) {\n a.l = al + bl * t;\n a.a = aa + ba * t;\n a.b = ab + bb * t;\n return a + \"\";\n };\n }\n\n function interpolateHslLong(a, b) {\n a = hsl(a);\n b = hsl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateHsl(a, b) {\n a = hsl(a);\n b = hsl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateRgb(a, b) {\n a = rgb(a);\n b = rgb(b);\n var ar = a.r,\n ag = a.g,\n ab = a.b,\n br = b.r - ar,\n bg = b.g - ag,\n bb = b.b - ab;\n return function(t) {\n return _format(Math.round(ar + br * t), Math.round(ag + bg * t), Math.round(ab + bb * t));\n };\n }\n\n var interpolateCubehelix = interpolateCubehelixGamma(1);\n var interpolateCubehelixLong = interpolateCubehelixGammaLong(1);\n\n exports.interpolateCubehelix = interpolateCubehelix;\n exports.interpolateCubehelixLong = interpolateCubehelixLong;\n exports.color = color;\n exports.rgb = rgb;\n exports.hsl = hsl;\n exports.lab = lab;\n exports.hcl = hcl;\n exports.cubehelix = cubehelix;\n exports.interpolateRgb = interpolateRgb;\n exports.interpolateHsl = interpolateHsl;\n exports.interpolateHslLong = interpolateHslLong;\n exports.interpolateLab = interpolateLab;\n exports.interpolateHcl = interpolateHcl;\n exports.interpolateHclLong = interpolateHclLong;\n exports.interpolateCubehelixGamma = interpolateCubehelixGamma;\n exports.interpolateCubehelixGammaLong = interpolateCubehelixGammaLong;\n\n}));\n},{}],5:[function(require,module,exports){\nif (typeof Map === \"undefined\") {\n Map = function() { this.clear(); };\n Map.prototype = {\n set: function(k, v) { this._[k] = v; return this; },\n get: function(k) { return this._[k]; },\n has: function(k) { return k in this._; },\n delete: function(k) { return k in this._ && delete this._[k]; },\n clear: function() { this._ = Object.create(null); },\n get size() { var n = 0; for (var k in this._) ++n; return n; },\n forEach: function(c) { for (var k in this._) c(this._[k], k, this); }\n };\n} else (function() {\n var m = new Map;\n if (m.set(0, 0) !== m) {\n m = m.set;\n Map.prototype.set = function() { m.apply(this, arguments); return this; };\n }\n})();\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n factory((global.format = {}));\n}(this, function (exports) { 'use strict';\n\n var zhCn = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"¥\", \"\"]\n };\n\n var ruRu = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"\\xa0руб.\"]\n };\n\n var ptBr = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"R$\", \"\"]\n };\n\n var plPl = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"zł\"]\n };\n\n var nlNl = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\\xa0\", \"\"]\n };\n\n var mkMk = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0ден.\"]\n };\n\n var jaJp = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"\", \"円\"]\n };\n\n var itIt = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"]\n };\n\n var heIl = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"₪\", \"\"]\n };\n\n var frFr = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var frCa = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"$\"]\n };\n\n var fiFi = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var esEs = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var enUs = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n };\n\n var enGb = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"£\", \"\"]\n };\n\n var enCa = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n };\n\n var deDe = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var caEs = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n }\n\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n\n var prefixExponent;\n\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, p + i - 1)[0]; // less than 1y!\n }\n\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n\n function formatDefault(x, p) {\n x = x.toPrecision(p);\n\n out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (x[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n case \"e\": break out;\n default: if (i0 > 0) i0 = 0; break;\n }\n }\n\n return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n }\n\n var formatTypes = {\n \"\": formatDefault,\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n };\n\n\n // [[fill]align][sign][symbol][0][width][,][.precision][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\n function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n }\n\n function FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n var match,\n fill = match[1] || \" \",\n align = match[2] || \">\",\n sign = match[3] || \"-\",\n symbol = match[4] || \"\",\n zero = !!match[5],\n width = match[6] && +match[6],\n comma = !!match[7],\n precision = match[8] && +match[8].slice(1),\n type = match[9] || \"\";\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // Map invalid types to the default format.\n else if (!formatTypes[type]) type = \"\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n this.fill = fill;\n this.align = align;\n this.sign = sign;\n this.symbol = symbol;\n this.zero = zero;\n this.width = width;\n this.comma = comma;\n this.precision = precision;\n this.type = type;\n }\n\n FormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + this.type;\n };\n\n function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n }\n\n var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n function identity(x) {\n return x;\n }\n\n function locale(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal;\n\n function format(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n type = specifier.type;\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = !type || /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? (type ? 6 : 12)\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n return function(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Convert negative to positive, and compute the prefix.\n // Note that -0 is not less than 0, but 1 / -0 is!\n var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\n // Perform the initial formatting.\n value = formatType(value, precision);\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n var i = -1, n = value.length, c;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": return valuePrefix + value + valueSuffix + padding;\n case \"=\": return valuePrefix + padding + value + valueSuffix;\n case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n }\n return padding + valuePrefix + value + valueSuffix;\n };\n }\n\n function formatPrefix(specifier, value) {\n var f = format((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: format,\n formatPrefix: formatPrefix\n };\n }\n\n function precisionRound(step, max) {\n return Math.max(0, exponent(Math.abs(max)) - exponent(Math.abs(step))) + 1;\n }\n\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n\n var localeDefinitions = (new Map)\n .set(\"ca-ES\", caEs)\n .set(\"de-DE\", deDe)\n .set(\"en-CA\", enCa)\n .set(\"en-GB\", enGb)\n .set(\"en-US\", enUs)\n .set(\"es-ES\", esEs)\n .set(\"fi-FI\", fiFi)\n .set(\"fr-CA\", frCa)\n .set(\"fr-FR\", frFr)\n .set(\"he-IL\", heIl)\n .set(\"it-IT\", itIt)\n .set(\"ja-JP\", jaJp)\n .set(\"mk-MK\", mkMk)\n .set(\"nl-NL\", nlNl)\n .set(\"pl-PL\", plPl)\n .set(\"pt-BR\", ptBr)\n .set(\"ru-RU\", ruRu)\n .set(\"zh-CN\", zhCn);\n\n var defaultLocale = locale(enUs);\n exports.format = defaultLocale.format;\n exports.formatPrefix = defaultLocale.formatPrefix;\n\n function localeFormat(definition) {\n if (typeof definition === \"string\") {\n definition = localeDefinitions.get(definition);\n if (!definition) return null;\n }\n return locale(definition);\n }\n ;\n\n exports.localeFormat = localeFormat;\n exports.formatSpecifier = formatSpecifier;\n exports.precisionFixed = precisionFixed;\n exports.precisionPrefix = precisionPrefix;\n exports.precisionRound = precisionRound;\n\n}));\n},{}],6:[function(require,module,exports){\nif (typeof Map === \"undefined\") {\n Map = function() { this.clear(); };\n Map.prototype = {\n set: function(k, v) { this._[k] = v; return this; },\n get: function(k) { return this._[k]; },\n has: function(k) { return k in this._; },\n delete: function(k) { return k in this._ && delete this._[k]; },\n clear: function() { this._ = Object.create(null); },\n get size() { var n = 0; for (var k in this._) ++n; return n; },\n forEach: function(c) { for (var k in this._) c(this._[k], k, this); }\n };\n} else (function() {\n var m = new Map;\n if (m.set(0, 0) !== m) {\n m = m.set;\n Map.prototype.set = function() { m.apply(this, arguments); return this; };\n }\n})();\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n factory((global.timeFormat = {}));\n}(this, function (exports) { 'use strict';\n\n var zhCn = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%Y/%-m/%-d\",\n time: \"%H:%M:%S\",\n periods: [\"上午\", \"下午\"],\n days: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n shortDays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n months: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n shortMonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"]\n };\n\n var ruRu = {\n dateTime: \"%A, %e %B %Y г. %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"воскресенье\", \"понедельник\", \"вторник\", \"среда\", \"четверг\", \"пятница\", \"суббота\"],\n shortDays: [\"вс\", \"пн\", \"вт\", \"ср\", \"чт\", \"пт\", \"сб\"],\n months: [\"января\", \"февраля\", \"марта\", \"апреля\", \"мая\", \"июня\", \"июля\", \"августа\", \"сентября\", \"октября\", \"ноября\", \"декабря\"],\n shortMonths: [\"янв\", \"фев\", \"мар\", \"апр\", \"май\", \"июн\", \"июл\", \"авг\", \"сен\", \"окт\", \"ноя\", \"дек\"]\n };\n\n var ptBr = {\n dateTime: \"%A, %e de %B de %Y. %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"],\n shortDays: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"],\n months: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n shortMonths: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"]\n };\n\n var plPl = {\n dateTime: \"%A, %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"],\n shortDays: [\"Niedz.\", \"Pon.\", \"Wt.\", \"Śr.\", \"Czw.\", \"Pt.\", \"Sob.\"],\n months: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\n shortMonths: [\"Stycz.\", \"Luty\", \"Marz.\", \"Kwie.\", \"Maj\", \"Czerw.\", \"Lipc.\", \"Sierp.\", \"Wrz.\", \"Paźdz.\", \"Listop.\", \"Grudz.\"]/* In Polish language abbraviated months are not commonly used so there is a dispute about the proper abbraviations. */\n };\n\n var nlNl = {\n dateTime: \"%a %e %B %Y %T\",\n date: \"%d-%m-%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"zondag\", \"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"],\n shortDays: [\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"],\n months: [\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"],\n shortMonths: [\"jan\", \"feb\", \"mrt\", \"apr\", \"mei\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"]\n };\n\n var mkMk = {\n dateTime: \"%A, %e %B %Y г. %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"недела\", \"понеделник\", \"вторник\", \"среда\", \"четврток\", \"петок\", \"сабота\"],\n shortDays: [\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"],\n months: [\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"],\n shortMonths: [\"јан\", \"фев\", \"мар\", \"апр\", \"мај\", \"јун\", \"јул\", \"авг\", \"сеп\", \"окт\", \"ное\", \"дек\"]\n };\n\n var itIt = {\n dateTime: \"%A %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"],\n shortDays: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"],\n months: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\n shortMonths: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"]\n };\n\n var heIl = {\n dateTime: \"%A, %e ב%B %Y %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\n shortDays: [\"א׳\", \"ב׳\", \"ג׳\", \"ד׳\", \"ה׳\", \"ו׳\", \"ש׳\"],\n months: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\n shortMonths: [\"ינו׳\", \"פבר׳\", \"מרץ\", \"אפר׳\", \"מאי\", \"יוני\", \"יולי\", \"אוג׳\", \"ספט׳\", \"אוק׳\", \"נוב׳\", \"דצמ׳\"]\n };\n\n var frFr = {\n dateTime: \"%A, le %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n shortDays: [\"dim.\", \"lun.\", \"mar.\", \"mer.\", \"jeu.\", \"ven.\", \"sam.\"],\n months: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n shortMonths: [\"janv.\", \"févr.\", \"mars\", \"avr.\", \"mai\", \"juin\", \"juil.\", \"août\", \"sept.\", \"oct.\", \"nov.\", \"déc.\"]\n };\n\n var frCa = {\n dateTime: \"%a %e %b %Y %X\",\n date: \"%Y-%m-%d\",\n time: \"%H:%M:%S\",\n periods: [\"\", \"\"],\n days: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n shortDays: [\"dim\", \"lun\", \"mar\", \"mer\", \"jeu\", \"ven\", \"sam\"],\n months: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n shortMonths: [\"jan\", \"fév\", \"mar\", \"avr\", \"mai\", \"jui\", \"jul\", \"aoû\", \"sep\", \"oct\", \"nov\", \"déc\"]\n };\n\n var fiFi = {\n dateTime: \"%A, %-d. %Bta %Y klo %X\",\n date: \"%-d.%-m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"a.m.\", \"p.m.\"],\n days: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"],\n shortDays: [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"],\n months: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"],\n shortMonths: [\"Tammi\", \"Helmi\", \"Maalis\", \"Huhti\", \"Touko\", \"Kesä\", \"Heinä\", \"Elo\", \"Syys\", \"Loka\", \"Marras\", \"Joulu\"]\n };\n\n var esEs = {\n dateTime: \"%A, %e de %B de %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"domingo\", \"lunes\", \"martes\", \"miércoles\", \"jueves\", \"viernes\", \"sábado\"],\n shortDays: [\"dom\", \"lun\", \"mar\", \"mié\", \"jue\", \"vie\", \"sáb\"],\n months: [\"enero\", \"febrero\", \"marzo\", \"abril\", \"mayo\", \"junio\", \"julio\", \"agosto\", \"septiembre\", \"octubre\", \"noviembre\", \"diciembre\"],\n shortMonths: [\"ene\", \"feb\", \"mar\", \"abr\", \"may\", \"jun\", \"jul\", \"ago\", \"sep\", \"oct\", \"nov\", \"dic\"]\n };\n\n var enUs = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var enGb = {\n dateTime: \"%a %e %b %X %Y\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var enCa = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%Y-%m-%d\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var deDe = {\n dateTime: \"%A, der %e. %B %Y, %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n shortDays: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n months: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mrz\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"]\n };\n\n var caEs = {\n dateTime: \"%A, %e de %B de %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"diumenge\", \"dilluns\", \"dimarts\", \"dimecres\", \"dijous\", \"divendres\", \"dissabte\"],\n shortDays: [\"dg.\", \"dl.\", \"dt.\", \"dc.\", \"dj.\", \"dv.\", \"ds.\"],\n months: [\"gener\", \"febrer\", \"març\", \"abril\", \"maig\", \"juny\", \"juliol\", \"agost\", \"setembre\", \"octubre\", \"novembre\", \"desembre\"],\n shortMonths: [\"gen.\", \"febr.\", \"març\", \"abr.\", \"maig\", \"juny\", \"jul.\", \"ag.\", \"set.\", \"oct.\", \"nov.\", \"des.\"]\n };\n\n var t0 = new Date;\n var t1 = new Date;\n\n function newInterval(floori, offseti, count) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.round = function(date) {\n var d0 = new Date(+date),\n d1 = new Date(date - 1);\n floori(d0), floori(d1), offseti(d1, 1);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), date;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [];\n start = new Date(start - 1);\n stop = new Date(+stop);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n offseti(start, 1), floori(start);\n if (start < stop) range.push(new Date(+start));\n while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start));\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n while (--step >= 0) while (offseti(date, 1), !test(date));\n });\n };\n\n if (count) interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n return interval;\n }\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5;\n });\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5;\n });\n }\n\n var sunday = weekday(0);\n var monday = weekday(1);\n\n var year = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n });\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / 864e5;\n });\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / 6048e5;\n });\n }\n\n var utcSunday = utcWeekday(0);\n var utcMonday = utcWeekday(1);\n\n var utcYear = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCMonth(0, 1);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n });\n\n function localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n function utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n function newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n }\n\n function locale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"S\": formatSeconds,\n \"U\": formatWeekNumberSunday,\n \"w\": formatWeekdayNumber,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"S\": formatUTCSeconds,\n \"U\": formatUTCWeekNumberSunday,\n \"w\": formatUTCWeekdayNumber,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"S\": parseSeconds,\n \"U\": parseWeekNumberSunday,\n \"w\": parseWeekdayNumber,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n if (format = formats[c]) c = format(date, pad == null ? (c === \"e\" ? \" \" : \"0\") : pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string, 0);\n if (i != string.length) return null;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n var day = utcDate(newYear(d.y)).getUTCDay();\n if (\"W\" in d) d.U = d.W, d.w = (d.w + 6) % 7, --day;\n d.m = 0;\n d.d = d.w + d.U * 7 - (day + 6) % 7;\n }\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n var day = newDate(newYear(d.y)).getDay();\n if (\"W\" in d) d.U = d.W, d.w = (d.w + 6) % 7, --day;\n d.m = 0;\n d.d = d.w + d.U * 7 - (day + 6) % 7;\n }\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function parsePeriod(d, string, i) {\n var n = periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (d.p = n, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.parse = newParse(specifier, localDate);\n f.toString = function() { return specifier; };\n return f;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.parse = newParse(specifier, utcDate);\n f.toString = function() { return specifier; };\n return f;\n }\n };\n }\n\n var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\n var numberRe = /^\\s*\\d+/;\n var percentRe = /^%/;\n var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n function pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n function requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n }\n\n function formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n }\n\n function formatLookup(names) {\n var map = new Map, i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n\n function parseWeekdayNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n\n function parseZone(d, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5))\n ? (d.Z = -string, i + 5) // sign differs from getTimezoneOffset!\n : -1;\n }\n\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n }\n\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n\n function formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n }\n\n function formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n }\n\n function formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n }\n\n function formatDayOfYear(d, p) {\n return pad(1 + day.count(year(d), d), p, 3);\n }\n\n function formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n }\n\n function formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n }\n\n function formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n }\n\n function formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n }\n\n function formatWeekNumberSunday(d, p) {\n return pad(sunday.count(year(d), d), p, 2);\n }\n\n function formatWeekdayNumber(d) {\n return d.getDay();\n }\n\n function formatWeekNumberMonday(d, p) {\n return pad(monday.count(year(d), d), p, 2);\n }\n\n function formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n }\n\n function formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n }\n\n function formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n }\n\n function formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n }\n\n function formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n }\n\n function formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n }\n\n function formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n }\n\n function formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n }\n\n function formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n }\n\n function formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n }\n\n function formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n }\n\n function formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n }\n\n function formatUTCWeekdayNumber(d) {\n return d.getUTCDay();\n }\n\n function formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n }\n\n function formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n }\n\n function formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n }\n\n function formatUTCZone() {\n return \"+0000\";\n }\n\n function formatLiteralPercent() {\n return \"%\";\n }\n\n var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n function formatIsoNative(date) {\n return date.toISOString();\n }\n\n formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n\n formatIsoNative.toString = function() {\n return isoSpecifier;\n };\n\n var formatIso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\")\n ? formatIsoNative\n : enUs.utcFormat(isoSpecifier);\n\n var isoFormat = formatIso;\n\n var localeDefinitions = (new Map)\n .set(\"ca-ES\", caEs)\n .set(\"de-DE\", deDe)\n .set(\"en-CA\", enCa)\n .set(\"en-GB\", enGb)\n .set(\"en-US\", enUs)\n .set(\"es-ES\", esEs)\n .set(\"fi-FI\", fiFi)\n .set(\"fr-CA\", frCa)\n .set(\"fr-FR\", frFr)\n .set(\"he-IL\", heIl)\n .set(\"it-IT\", itIt)\n .set(\"mk-MK\", mkMk)\n .set(\"nl-NL\", nlNl)\n .set(\"pl-PL\", plPl)\n .set(\"pt-BR\", ptBr)\n .set(\"ru-RU\", ruRu)\n .set(\"zh-CN\", zhCn);\n\n var defaultLocale = locale(enUs);\n exports.format = defaultLocale.format;\n exports.utcFormat = defaultLocale.utcFormat;\n\n function localeFormat(definition) {\n if (typeof definition === \"string\") {\n definition = localeDefinitions.get(definition);\n if (!definition) return null;\n }\n return locale(definition);\n }\n ;\n\n exports.localeFormat = localeFormat;\n exports.isoFormat = isoFormat;\n\n}));\n},{}],7:[function(require,module,exports){\n'use strict';\n\nrequire('./globals');\n\nvar consts = require('./consts'),\n util = require('./util'),\n vlfield = require('./field'),\n vlenc = require('./enc'),\n schema = require('./schema/schema');\n\nmodule.exports = (function() {\n function Encoding(spec, theme) {\n var defaults = schema.instantiate(),\n specExtended = schema.util.merge(defaults, theme || {}, spec) ;\n\n this._data = specExtended.data;\n this._marktype = specExtended.marktype;\n this._enc = specExtended.encoding;\n this._config = specExtended.config;\n this._filter = specExtended.filter;\n // this._vega2 = true;\n }\n\n var proto = Encoding.prototype;\n\n Encoding.fromShorthand = function(shorthand, data, config, theme) {\n var c = consts.shorthand,\n split = shorthand.split(c.delim),\n marktype = split.shift().split(c.assign)[1].trim(),\n enc = vlenc.fromShorthand(split);\n\n return new Encoding({\n data: data,\n marktype: marktype,\n encoding: enc,\n config: config,\n filter: []\n }, theme);\n };\n\n Encoding.fromSpec = function(spec, theme) {\n return new Encoding(spec, theme);\n };\n\n proto.toShorthand = function() {\n var c = consts.shorthand;\n return 'mark' + c.assign + this._marktype +\n c.delim + vlenc.shorthand(this._enc);\n };\n\n Encoding.shorthand = function (spec) {\n var c = consts.shorthand;\n return 'mark' + c.assign + spec.marktype +\n c.delim + vlenc.shorthand(spec.encoding);\n };\n\n Encoding.specFromShorthand = function(shorthand, data, config, excludeConfig) {\n return Encoding.fromShorthand(shorthand, data, config).toSpec(excludeConfig);\n };\n\n proto.toSpec = function(excludeConfig, excludeData) {\n var enc = util.duplicate(this._enc),\n spec;\n\n spec = {\n marktype: this._marktype,\n encoding: enc,\n filter: this._filter\n };\n\n if (!excludeConfig) {\n spec.config = util.duplicate(this._config);\n }\n\n if (!excludeData) {\n spec.data = util.duplicate(this._data);\n }\n\n // remove defaults\n var defaults = schema.instantiate();\n return schema.util.subtract(spec, defaults);\n };\n\n\n proto.marktype = function() {\n return this._marktype;\n };\n\n proto.is = function(m) {\n return this._marktype === m;\n };\n\n proto.has = function(encType) {\n // equivalent to calling vlenc.has(this._enc, encType)\n return this._enc[encType].name !== undefined;\n };\n\n proto.field = function(et) {\n return this._enc[et];\n };\n\n proto.filter = function() {\n var filterNull = [],\n fields = this.fields(),\n self = this;\n\n util.forEach(fields, function(fieldList, fieldName) {\n if (fieldName === '*') return; //count\n\n if ((self.config('filterNull').Q && fieldList.containsType[Q]) ||\n (self.config('filterNull').T && fieldList.containsType[T]) ||\n (self.config('filterNull').O && fieldList.containsType[O]) ||\n (self.config('filterNull').N && fieldList.containsType[N])) {\n filterNull.push({\n operands: [fieldName],\n operator: 'notNull'\n });\n }\n });\n\n return filterNull.concat(this._filter);\n };\n\n // get \"field\" reference for vega\n proto.fieldRef = function(et, opt) {\n opt = opt || {};\n opt.data = !this._vega2 && (opt.data !== false);\n return vlfield.fieldRef(this._enc[et], opt);\n };\n\n proto.fieldName = function(et) {\n return this._enc[et].name;\n };\n\n /*\n * return key-value pairs of field name and list of fields of that field name\n */\n proto.fields = function() {\n return vlenc.fields(this._enc);\n };\n\n proto.fieldTitle = function(et) {\n if (vlfield.isCount(this._enc[et])) {\n return vlfield.count.displayName;\n }\n var fn = this._enc[et].aggregate || this._enc[et].timeUnit || (this._enc[et].bin && 'bin');\n if (fn) {\n var uppercase = fn === 'avg' ? 'MEAN' :fn.toUpperCase();\n return uppercase + '(' + this._enc[et].name + ')';\n } else {\n return this._enc[et].name;\n }\n };\n\n proto.scale = function(et) {\n return this._enc[et].scale || {};\n };\n\n proto.axis = function(et) {\n return this._enc[et].axis || {};\n };\n\n proto.bandSize = function(encType, useSmallBand) {\n useSmallBand = useSmallBand ||\n //isBandInSmallMultiples\n (encType === Y && this.has(ROW) && this.has(Y)) ||\n (encType === X && this.has(COL) && this.has(X));\n\n // if band.size is explicitly specified, follow the specification, otherwise draw value from config.\n return this.field(encType).band.size ||\n this.config(useSmallBand ? 'smallBandSize' : 'largeBandSize');\n };\n\n proto.aggregate = function(et) {\n return this._enc[et].aggregate;\n };\n\n // returns false if binning is disabled, otherwise an object with binning properties\n proto.bin = function(et) {\n var bin = this._enc[et].bin;\n if (bin === {})\n return false;\n if (bin === true)\n return {\n maxbins: schema.MAXBINS_DEFAULT\n };\n return bin;\n };\n\n proto.value = function(et) {\n return this._enc[et].value;\n };\n\n proto.numberFormat = function(fieldStats) {\n var formatConfig = fieldStats.max > this.config('maxSmallNumber') ?\n 'largeNumberFormat': 'smallNumberFormat';\n return this.config(formatConfig);\n };\n\n proto.sort = function(et, stats) {\n var sort = this._enc[et].sort,\n enc = this._enc,\n isTypes = vlfield.isTypes;\n\n if ((!sort || sort.length===0) &&\n // FIXME\n Encoding.toggleSort.support({encoding:this._enc}, stats, true) && //HACK\n this.config('toggleSort') === Q\n ) {\n var qField = isTypes(enc.x, [N, O]) ? enc.y : enc.x;\n\n if (isTypes(enc[et], [N, O])) {\n sort = [{\n name: qField.name,\n aggregate: qField.aggregate,\n type: qField.type,\n reverse: true\n }];\n }\n }\n\n return sort;\n };\n\n proto.map = function(f) {\n return vlenc.map(this._enc, f);\n };\n\n proto.reduce = function(f, init) {\n return vlenc.reduce(this._enc, f, init);\n };\n\n proto.forEach = function(f) {\n return vlenc.forEach(this._enc, f);\n };\n\n proto.type = function(et) {\n return this.has(et) ? this._enc[et].type : null;\n };\n\n proto.isType = function(et, type) {\n var field = this.field(et);\n return field && vlfield.isType(field, type);\n };\n\n\n proto.isTypes = function(et, type) {\n var field = this.field(et);\n return field && vlfield.isTypes(field, type);\n };\n\n Encoding.isOrdinalScale = function(encoding, encType) {\n return vlfield.isOrdinalScale(encoding.field(encType));\n };\n\n Encoding.isDimension = function(encoding, encType) {\n return vlfield.isDimension(encoding.field(encType));\n };\n\n Encoding.isMeasure = function(encoding, encType) {\n return vlfield.isMeasure(encoding.field(encType));\n };\n\n proto.isOrdinalScale = function(encType) {\n return this.has(encType) && Encoding.isOrdinalScale(this, encType);\n };\n\n proto.isDimension = function(encType) {\n return this.has(encType) && Encoding.isDimension(this, encType);\n };\n\n proto.isMeasure = function(encType) {\n return this.has(encType) && Encoding.isMeasure(this, encType);\n };\n\n proto.isAggregate = function() {\n return vlenc.isAggregate(this._enc);\n };\n\n proto.dataTable = function() {\n return this.isAggregate() ? AGGREGATE : RAW;\n };\n\n Encoding.isAggregate = function(spec) {\n return vlenc.isAggregate(spec.encoding);\n };\n\n Encoding.alwaysNoOcclusion = function(spec) {\n // FIXME raw OxQ with # of rows = # of O\n return vlenc.isAggregate(spec.encoding);\n };\n\n Encoding.isStack = function(spec) {\n // FIXME update this once we have control for stack ...\n return (spec.marktype === 'bar' || spec.marktype === 'area') &&\n spec.encoding.color;\n };\n\n proto.isStack = function() {\n // FIXME update this once we have control for stack ...\n return (this.is('bar') || this.is('area')) && this.has('color');\n };\n\n proto.details = function() {\n var encoding = this;\n return this.reduce(function(refs, field, encType) {\n if (!field.aggregate && (encType !== X && encType !== Y)) {\n refs.push(encoding.fieldRef(encType));\n }\n return refs;\n }, []);\n };\n\n proto.facets = function() {\n var encoding = this;\n return this.reduce(function(refs, field, encType) {\n if (!field.aggregate && (encType == ROW || encType == COL)) {\n refs.push(encoding.fieldRef(encType));\n }\n return refs;\n }, []);\n };\n\n proto.cardinality = function(encType, stats) {\n return vlfield.cardinality(this.field(encType), stats, this.config('filterNull'));\n };\n\n proto.isRaw = function() {\n return !this.isAggregate();\n };\n\n proto.data = function() {\n return this._data;\n };\n\n // returns whether the encoding has values embedded\n proto.hasValues = function() {\n var vals = this.data().values;\n return vals && vals.length;\n };\n\n proto.config = function(name) {\n return this._config[name];\n };\n\n Encoding.transpose = function(spec) {\n var oldenc = spec.encoding,\n enc = util.duplicate(spec.encoding);\n enc.x = oldenc.y;\n enc.y = oldenc.x;\n enc.row = oldenc.col;\n enc.col = oldenc.row;\n spec.encoding = enc;\n return spec;\n };\n\n // FIXME: REMOVE everything below here\n\n Encoding.toggleSort = function(spec) {\n spec.config = spec.config || {};\n spec.config.toggleSort = spec.config.toggleSort === Q ? N : Q;\n return spec;\n };\n\n\n Encoding.toggleSort.direction = function(spec) {\n if (!Encoding.toggleSort.support(spec)) { return; }\n var enc = spec.encoding;\n return enc.x.type === N ? 'x' : 'y';\n };\n\n Encoding.toggleSort.mode = function(spec) {\n return spec.config.toggleSort;\n };\n\n Encoding.toggleSort.support = function(spec, stats) {\n var enc = spec.encoding,\n isTypes = vlfield.isTypes;\n\n if (vlenc.has(enc, ROW) || vlenc.has(enc, COL) ||\n !vlenc.has(enc, X) || !vlenc.has(enc, Y) ||\n !Encoding.alwaysNoOcclusion(spec, stats)) {\n return false;\n }\n\n return ( isTypes(enc.x, [N,O]) && vlfield.isMeasure(enc.y)) ? 'x' :\n ( isTypes(enc.y, [N,O]) && vlfield.isMeasure(enc.x)) ? 'y' : false;\n };\n\n Encoding.toggleFilterNullO = function(spec) {\n spec.config = spec.config || {};\n spec.config.filterNull = spec.config.filterNull || { //FIXME\n T: true,\n Q: true\n };\n spec.config.filterNull.O = !spec.config.filterNull.O;\n return spec;\n };\n\n Encoding.toggleFilterNullO.support = function(spec, stats) {\n var fields = vlenc.fields(spec.encoding);\n for (var fieldName in fields) {\n var fieldList = fields[fieldName];\n if (fieldList.containsType.O && fieldName in stats && stats[fieldName].nulls > 0) {\n return true;\n }\n }\n return false;\n };\n\n return Encoding;\n})();\n\n},{\"./consts\":21,\"./enc\":23,\"./field\":24,\"./globals\":25,\"./schema/schema\":27,\"./util\":29}],8:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar util = require('../util'),\n setter = util.setter,\n getter = util.getter,\n time = require('./time');\n\nvar axis = module.exports = {};\n\naxis.def = function(name, encoding, layout, stats, opt) {\n var isCol = name == COL,\n isRow = name == ROW,\n type = isCol ? 'x' : isRow ? 'y' : name;\n\n var def = {\n type: type,\n scale: name,\n properties: {},\n layer: encoding.field(name).axis.layer,\n orient: axis.orient(name, encoding, stats)\n };\n\n // Add axis label custom scale (for bin / time)\n def = axis.labels.scale(def, encoding, name);\n def = axis.labels.format(def, name, encoding, stats);\n def = axis.labels.angle(def, encoding, name);\n\n // for x-axis, set ticks for Q or rotate scale for ordinal scale\n if (name == X) {\n if ((encoding.isDimension(X) || encoding.isType(X, T)) &&\n !('angle' in getter(def, ['properties', 'labels']))) {\n // TODO(kanitw): Jul 19, 2015 - #506 add condition for rotation\n def = axis.labels.rotate(def);\n } else { // Q\n def.ticks = encoding.field(name).axis.ticks;\n }\n }\n\n // TitleOffset depends on labels rotation\n def.titleOffset = axis.titleOffset(encoding, layout, name);\n\n //def.offset is used in axis.grid\n if(isRow) def.offset = axis.titleOffset(encoding, layout, Y) + 20;\n // FIXME(kanitw): Jul 19, 2015 - offset for column when x is put on top\n\n def = axis.grid(def, name, encoding, layout);\n def = axis.title(def, name, encoding, layout, opt);\n\n if (isRow || isCol) def = axis.hideTicks(def);\n\n return def;\n};\n\naxis.orient = function(name, encoding, stats) {\n var orient = encoding.field(name).axis.orient;\n if (orient) return orient;\n\n if (name === COL) return 'top';\n\n // x-axis for long y - put on top\n if (name === X && encoding.has(Y) && encoding.isOrdinalScale(Y) && encoding.cardinality(Y, stats) > 30) {\n return 'top';\n }\n\n return undefined;\n};\n\naxis.grid = function(def, name, encoding, layout) {\n var cellPadding = layout.cellPadding,\n isCol = name == COL,\n isRow = name == ROW;\n\n if (encoding.axis(name).grid) {\n def.grid = true;\n\n if (isCol) {\n // set grid property -- put the lines on the right the cell\n def.properties.grid = {\n x: {\n offset: layout.cellWidth * (1+ cellPadding/2.0),\n // default value(s) -- vega doesn't do recursive merge\n scale: 'col'\n },\n y: {\n value: -layout.cellHeight * (cellPadding/2),\n },\n stroke: { value: encoding.config('cellGridColor') },\n opacity: { value: encoding.config('cellGridOpacity') }\n };\n } else if (isRow) {\n // set grid property -- put the lines on the top\n def.properties.grid = {\n y: {\n offset: -layout.cellHeight * (cellPadding/2),\n // default value(s) -- vega doesn't do recursive merge\n scale: 'row'\n },\n x: {\n value: def.offset\n },\n x2: {\n offset: def.offset + (layout.cellWidth * 0.05),\n // default value(s) -- vega doesn't do recursive merge\n group: 'mark.group.width',\n mult: 1\n },\n stroke: { value: encoding.config('cellGridColor') },\n opacity: { value: encoding.config('cellGridOpacity') }\n };\n } else {\n def.properties.grid = {\n stroke: { value: encoding.config('gridColor') },\n opacity: { value: encoding.config('gridOpacity') }\n };\n }\n }\n return def;\n};\n\naxis.hideTicks = function(def) {\n def.properties.ticks = {opacity: {value: 0}};\n def.properties.majorTicks = {opacity: {value: 0}};\n def.properties.axis = {opacity: {value: 0}};\n return def;\n};\n\naxis.title = function (def, name, encoding, layout) {\n var ax = encoding.field(name).axis;\n\n if (ax.title) {\n def.title = ax.title;\n } else {\n // if not defined, automatically determine axis title from field def\n var fieldTitle = encoding.fieldTitle(name),\n maxLength;\n\n if (ax.titleMaxLength) {\n maxLength = ax.titleMaxLength;\n } else if (name===X) {\n maxLength = layout.cellWidth / encoding.config('characterWidth');\n } else if (name === Y) {\n maxLength = layout.cellHeight / encoding.config('characterWidth');\n }\n\n def.title = maxLength ? util.truncate(fieldTitle, maxLength) : fieldTitle;\n }\n\n if (name === ROW) {\n def.properties.title = {\n angle: {value: 0},\n align: {value: 'right'},\n baseline: {value: 'middle'},\n dy: {value: (-layout.height/2) -20}\n };\n }\n\n return def;\n};\n\naxis.labels = {};\n\n/** add custom label for time type and bin */\naxis.labels.scale = function(def, encoding, name) {\n // time\n var timeUnit = encoding.field(name).timeUnit;\n if (encoding.isType(name, T) && timeUnit && (time.hasScale(timeUnit))) {\n setter(def, ['properties','labels','text','scale'], 'time-'+ timeUnit);\n }\n // FIXME bin\n return def;\n};\n\n/**\n * Determine number format or truncate if maxLabel length is presented.\n */\naxis.labels.format = function (def, name, encoding, stats) {\n var fieldStats = stats[encoding.field(name).name];\n\n if (encoding.axis(name).format) {\n def.format = encoding.axis(name).format;\n } else if (encoding.isType(name, Q) || fieldStats.type === 'number') {\n def.format = encoding.numberFormat(fieldStats);\n } else if (encoding.isType(name, T)) {\n var timeUnit = encoding.field(name).timeUnit;\n if (!timeUnit) {\n def.format = encoding.config('timeFormat');\n } else if (timeUnit === 'year') {\n def.format = 'd';\n }\n } else if (encoding.isTypes(name, [N, O]) && encoding.axis(name).maxLabelLength) {\n setter(def,\n ['properties','labels','text','template'],\n '{{data | truncate:' + encoding.axis(name).maxLabelLength + '}}'\n );\n }\n\n return def;\n};\n\naxis.labels.angle = function(def, encoding, name) {\n var angle = encoding.axis(name).labelAngle;\n if (typeof angle === 'undefined') return def;\n\n setter(def, ['properties', 'labels', 'angle', 'value'], angle);\n return def;\n};\n\naxis.labels.rotate = function(def) {\n var align = def.orient ==='top' ? 'left' : 'right';\n setter(def, ['properties','labels', 'angle', 'value'], 270);\n setter(def, ['properties','labels', 'align', 'value'], align);\n setter(def, ['properties','labels', 'baseline', 'value'], 'middle');\n return def;\n};\n\naxis.titleOffset = function (encoding, layout, name) {\n // return specified value if specified\n var value = encoding.axis(name).titleOffset;\n if (value) return value;\n\n switch (name) {\n //FIXME make this adjustable\n case ROW: return 0;\n case COL: return 35;\n }\n return getter(layout, [name, 'axisTitleOffset']);\n};\n\n},{\"../globals\":25,\"../util\":29,\"./time\":20}],9:[function(require,module,exports){\n'use strict';\n\nvar summary = module.exports = require('datalib/src/stats').summary;\n\nrequire('../globals');\n\n/**\n * Module for compiling Vega-lite spec into Vega spec.\n */\nvar compiler = module.exports = {};\n\nvar Encoding = require('../Encoding'),\n axis = compiler.axis = require('./axis'),\n legend = compiler.legend = require('./legend'),\n marks = compiler.marks = require('./marks'),\n scale = compiler.scale = require('./scale');\n\ncompiler.data = require('./data');\ncompiler.facet = require('./facet');\ncompiler.layout = require('./layout');\ncompiler.sort = require('./sort');\ncompiler.stack = require('./stack');\ncompiler.style = require('./style');\ncompiler.subfacet = require('./subfacet');\ncompiler.time = require('./time');\n\ncompiler.compile = function (spec, stats, theme) {\n return compiler.compileEncoding(Encoding.fromSpec(spec, theme), stats);\n};\n\ncompiler.shorthand = function (shorthand, stats, config, theme) {\n return compiler.compileEncoding(Encoding.fromShorthand(shorthand, config, theme), stats);\n};\n\n/**\n * Create a Vega specification from a Vega-lite Encoding object.\n */\ncompiler.compileEncoding = function (encoding, stats) {\n // no need to pass stats if you pass in the data\n if (!stats) {\n if (encoding.hasValues()) {\n stats = summary(encoding.data().values).reduce(function(s, p) {\n s[p.field] = p;\n return s;\n }, {});\n } else {\n console.error('No stats provided and data is not embedded.');\n }\n }\n\n var layout = compiler.layout(encoding, stats);\n\n var spec = {\n width: layout.width,\n height: layout.height,\n padding: 'auto',\n data: compiler.data(encoding),\n // global scales contains only time unit scales\n scales: compiler.time.scales(encoding),\n marks: [{\n _name: 'cell',\n type: 'group',\n properties: {\n enter: {\n width: layout.cellWidth ? {value: layout.cellWidth} : {group: 'width'},\n height: layout.cellHeight ? {value: layout.cellHeight} : {group: 'height'}\n }\n }\n }]\n };\n\n var group = spec.marks[0];\n\n // FIXME remove compiler.sort after migrating to vega 2.\n spec.data = compiler.sort(spec.data, encoding, stats); // append new data\n\n // marks\n var style = compiler.style(encoding, stats),\n mdefs = group.marks = marks.def(encoding, layout, style, stats),\n mdef = mdefs[mdefs.length - 1]; // TODO: remove this dirty hack by refactoring the whole flow\n\n var lineType = marks[encoding.marktype()].line;\n\n // handle subfacets\n\n var details = encoding.details(),\n stack = encoding.isAggregate() && details.length > 0 && compiler.stack(spec.data, encoding, mdef); // modify spec.data, mdef.{from,properties}\n\n if (details.length > 0 && (stack || lineType)) {\n //subfacet to group stack / line together in one group\n compiler.subfacet(group, mdef, details, stack, encoding);\n }\n\n // auto-sort line/area values\n if (lineType && encoding.config('autoSortLine')) {\n var f = (encoding.isMeasure(X) && encoding.isDimension(Y)) ? Y : X;\n if (!mdef.from) mdef.from = {};\n // TODO: why - ?\n mdef.from.transform = [{type: 'sort', by: '-' + encoding.fieldRef(f)}];\n }\n\n // get a flattened list of all scale names that are used in the vl spec\n var singleScaleNames = [].concat.apply([], mdefs.map(function(markProps) {\n return scale.names(markProps.properties.update);\n }));\n\n // Small Multiples\n if (encoding.has(ROW) || encoding.has(COL)) {\n spec = compiler.facet(group, encoding, layout, spec, singleScaleNames, stack, stats);\n spec.legends = legend.defs(encoding, style);\n } else {\n group.scales = scale.defs(singleScaleNames, encoding, layout, stats, {stack: stack});\n\n group.axes = [];\n if (encoding.has(X)) group.axes.push(axis.def(X, encoding, layout, stats));\n if (encoding.has(Y)) group.axes.push(axis.def(Y, encoding, layout, stats));\n\n group.legends = legend.defs(encoding, style);\n }\n\n return spec;\n};\n\n\n},{\"../Encoding\":7,\"../globals\":25,\"./axis\":8,\"./data\":10,\"./facet\":11,\"./layout\":12,\"./legend\":13,\"./marks\":14,\"./scale\":15,\"./sort\":16,\"./stack\":17,\"./style\":18,\"./subfacet\":19,\"./time\":20,\"datalib/src/stats\":35}],10:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nmodule.exports = data;\n\nvar vlfield = require('../field'),\n util = require('../util'),\n time = require('./time');\n\n/**\n * Create Vega's data array from a given encoding.\n *\n * @param {Encoding} encoding\n * @return {Array} Array of Vega data.\n * This always includes a \"raw\" data table.\n * If the encoding contains aggregate value, this will also create\n * aggregate table as well.\n */\nfunction data(encoding) {\n var def = [data.raw(encoding)];\n\n var aggregate = data.aggregate(encoding);\n if (aggregate) def.push(data.aggregate(encoding));\n\n // TODO add \"having\" filter here\n\n // append non-positive filter at the end for the data table\n data.filterNonPositive(def[def.length - 1], encoding);\n\n return def;\n}\n\ndata.raw = function(encoding) {\n var raw = {name: RAW};\n\n // Data source (url or inline)\n if (encoding.hasValues()) {\n raw.values = encoding.data().values;\n } else {\n raw.url = encoding.data().url;\n raw.format = {type: encoding.data().formatType};\n }\n\n // Set data's format.parse if needed\n var parse = data.raw.formatParse(encoding);\n if (parse) {\n raw.format = raw.format || {};\n raw.format.parse = parse;\n }\n\n raw.transform = data.raw.transform(encoding);\n return raw;\n};\n\ndata.raw.formatParse = function(encoding) {\n var parse;\n\n encoding.forEach(function(field) {\n if (field.type == T) {\n parse = parse || {};\n parse[field.name] = 'date';\n } else if (field.type == Q) {\n if (vlfield.isCount(field)) return;\n parse = parse || {};\n parse[field.name] = 'number';\n }\n });\n\n return parse;\n};\n\n/**\n * Generate Vega transforms for the raw data table. This can include\n * transforms for time unit, binning and filtering.\n */\ndata.raw.transform = function(encoding) {\n // time and bin should come before filter so we can filter by time and bin\n return data.raw.transform.time(encoding).concat(\n data.raw.transform.bin(encoding),\n data.raw.transform.filter(encoding)\n );\n};\n\nvar BINARY = {\n '>': true,\n '>=': true,\n '=': true,\n '!=': true,\n '<': true,\n '<=': true\n};\n\ndata.raw.transform.time = function(encoding) {\n return encoding.reduce(function(transform, field, encType) {\n if (field.type === T && field.timeUnit) {\n transform.push({\n type: 'formula',\n field: encoding.fieldRef(encType),\n expr: time.formula(field.timeUnit,\n encoding.fieldRef(encType, {nofn: true, d: true})\n )\n });\n }\n return transform;\n }, []);\n};\n\ndata.raw.transform.bin = function(encoding) {\n return encoding.reduce(function(transform, field, encType) {\n if (encoding.bin(encType)) {\n transform.push({\n type: 'bin',\n field: encoding.fieldRef(encType, {nofn: true}),\n output: encoding.fieldRef(encType),\n maxbins: encoding.bin(encType).maxbins\n });\n }\n return transform;\n }, []);\n};\n\ndata.raw.transform.filter = function(encoding) {\n var filters = encoding.filter().reduce(function(f, filter) {\n var condition = '';\n var operator = filter.operator;\n var operands = filter.operands;\n\n var d = 'd.' + (encoding._vega2 ? '' : 'data.');\n\n if (BINARY[operator]) {\n // expects a field and a value\n if (operator === '=') {\n operator = '==';\n }\n\n var op1 = operands[0];\n var op2 = operands[1];\n condition = d + op1 + ' ' + operator + ' ' + op2;\n } else if (operator === 'notNull') {\n // expects a number of fields\n for (var j=0; j 0) {\n return {\n name: AGGREGATE,\n source: RAW,\n transform: [{\n type: 'aggregate',\n groupby: dims,\n fields: meas\n }]\n };\n }\n\n return null;\n};\n\ndata.filterNonPositive = function(dataTable, encoding) {\n encoding.forEach(function(field, encType) {\n if (encoding.scale(encType).type === 'log') {\n dataTable.transform.push({\n type: 'filter',\n test: encoding.fieldRef(encType, {d: 1}) + ' > 0'\n });\n }\n });\n};\n\n},{\"../field\":24,\"../globals\":25,\"../util\":29,\"./time\":20}],11:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar util = require('../util');\n\nvar axis = require('./axis'),\n scale = require('./scale');\n\nmodule.exports = faceting;\n\nfunction groupdef(name, opt) {\n opt = opt || {};\n return {\n _name: name || undefined,\n type: 'group',\n from: opt.from,\n properties: {\n enter: {\n x: opt.x || undefined,\n y: opt.y || undefined,\n width: opt.width || {group: 'width'},\n height: opt.height || {group: 'height'}\n }\n },\n scales: opt.scales || undefined,\n axes: opt.axes || undefined,\n marks: opt.marks || []\n };\n}\n\nfunction faceting(group, encoding, layout, spec, singleScaleNames, stack, stats) {\n var enter = group.properties.enter;\n var facetKeys = [], cellAxes = [], from, axesGrp;\n\n var hasRow = encoding.has(ROW), hasCol = encoding.has(COL);\n\n enter.fill = {value: encoding.config('cellBackgroundColor')};\n\n //move \"from\" to cell level and add facet transform\n group.from = {data: group.marks[0].from.data};\n\n // Hack, this needs to be refactored\n for (var i = 0; i < group.marks.length; i++) {\n var mark = group.marks[i];\n if (mark.from.transform) {\n delete mark.from.data; //need to keep transform for subfacetting case\n } else {\n delete mark.from;\n }\n }\n\n if (hasRow) {\n if (!encoding.isDimension(ROW)) {\n util.error('Row encoding should be ordinal.');\n }\n enter.y = {scale: ROW, field: 'keys.' + facetKeys.length};\n enter.height = {'value': layout.cellHeight}; // HACK\n\n facetKeys.push(encoding.fieldRef(ROW));\n\n if (hasCol) {\n from = util.duplicate(group.from);\n from.transform = from.transform || [];\n from.transform.unshift({type: 'facet', keys: [encoding.fieldRef(COL)]});\n }\n\n axesGrp = groupdef('x-axes', {\n axes: encoding.has(X) ? [axis.def(X, encoding, layout, stats)] : undefined,\n x: hasCol ? {scale: COL, field: 'keys.0'} : {value: 0},\n width: hasCol && {'value': layout.cellWidth}, //HACK?\n from: from\n });\n\n spec.marks.unshift(axesGrp); // need to prepend so it appears under the plots\n (spec.axes = spec.axes || []);\n spec.axes.push(axis.def(ROW, encoding, layout, stats));\n } else { // doesn't have row\n if (encoding.has(X)) {\n //keep x axis in the cell\n cellAxes.push(axis.def(X, encoding, layout, stats));\n }\n }\n\n if (hasCol) {\n if (!encoding.isDimension(COL)) {\n util.error('Col encoding should be ordinal.');\n }\n enter.x = {scale: COL, field: 'keys.' + facetKeys.length};\n enter.width = {'value': layout.cellWidth}; // HACK\n\n facetKeys.push(encoding.fieldRef(COL));\n\n if (hasRow) {\n from = util.duplicate(group.from);\n from.transform = from.transform || [];\n from.transform.unshift({type: 'facet', keys: [encoding.fieldRef(ROW)]});\n }\n\n axesGrp = groupdef('y-axes', {\n axes: encoding.has(Y) ? [axis.def(Y, encoding, layout, stats)] : undefined,\n y: hasRow && {scale: ROW, field: 'keys.0'},\n x: hasRow && {value: 0},\n height: hasRow && {'value': layout.cellHeight}, //HACK?\n from: from\n });\n\n spec.marks.unshift(axesGrp); // need to prepend so it appears under the plots\n (spec.axes = spec.axes || []);\n spec.axes.push(axis.def(COL, encoding, layout, stats));\n } else { // doesn't have col\n if (encoding.has(Y)) {\n cellAxes.push(axis.def(Y, encoding, layout, stats));\n }\n }\n\n // assuming equal cellWidth here\n // TODO: support heterogenous cellWidth (maybe by using multiple scales?)\n spec.scales = (spec.scales || []).concat(scale.defs(\n scale.names(enter).concat(singleScaleNames),\n encoding,\n layout,\n stats,\n {stack: stack, facet: true}\n )); // row/col scales + cell scales\n\n if (cellAxes.length > 0) {\n group.axes = cellAxes;\n }\n\n // add facet transform\n var trans = (group.from.transform || (group.from.transform = []));\n trans.unshift({type: 'facet', keys: facetKeys});\n\n return spec;\n}\n\n},{\"../globals\":25,\"../util\":29,\"./axis\":8,\"./scale\":15}],12:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar util = require('../util'),\n setter = util.setter,\n time = require('./time'),\n d3_format = require('d3-format');\n\nmodule.exports = vllayout;\n\nfunction vllayout(encoding, stats) {\n var layout = box(encoding, stats);\n layout = offset(encoding, stats, layout);\n return layout;\n}\n\n/*\n HACK to set chart size\n NOTE: this fails for plots driven by derived values (e.g., aggregates)\n One solution is to update Vega to support auto-sizing\n In the meantime, auto-padding (mostly) does the trick\n */\nfunction box(encoding, stats) {\n var hasRow = encoding.has(ROW),\n hasCol = encoding.has(COL),\n hasX = encoding.has(X),\n hasY = encoding.has(Y),\n marktype = encoding.marktype();\n\n // FIXME/HACK we need to take filter into account\n var xCardinality = hasX && encoding.isDimension(X) ? encoding.cardinality(X, stats) : 1,\n yCardinality = hasY && encoding.isDimension(Y) ? encoding.cardinality(Y, stats) : 1;\n\n var useSmallBand = xCardinality > encoding.config('largeBandMaxCardinality') ||\n yCardinality > encoding.config('largeBandMaxCardinality');\n\n var cellWidth, cellHeight, cellPadding = encoding.config('cellPadding');\n\n // set cellWidth\n if (hasX) {\n if (encoding.isOrdinalScale(X)) {\n // for ordinal, hasCol or not doesn't matter -- we scale based on cardinality\n cellWidth = (xCardinality + encoding.field(X).band.padding) * encoding.bandSize(X, useSmallBand);\n } else {\n cellWidth = hasCol || hasRow ? encoding.field(COL).width : encoding.config('singleWidth');\n }\n } else {\n if (marktype === TEXT) {\n cellWidth = encoding.config('textCellWidth');\n } else {\n cellWidth = encoding.bandSize(X);\n }\n }\n\n // set cellHeight\n if (hasY) {\n if (encoding.isOrdinalScale(Y)) {\n // for ordinal, hasCol or not doesn't matter -- we scale based on cardinality\n cellHeight = (yCardinality + encoding.field(Y).band.padding) * encoding.bandSize(Y, useSmallBand);\n } else {\n cellHeight = hasCol || hasRow ? encoding.field(ROW).height : encoding.config('singleHeight');\n }\n } else {\n cellHeight = encoding.bandSize(Y);\n }\n\n // Cell bands use rangeBands(). There are n-1 padding. Outerpadding = 0 for cells\n\n var width = cellWidth, height = cellHeight;\n if (hasCol) {\n var colCardinality = encoding.cardinality(COL, stats);\n width = cellWidth * ((1 + cellPadding) * (colCardinality - 1) + 1);\n }\n if (hasRow) {\n var rowCardinality = encoding.cardinality(ROW, stats);\n height = cellHeight * ((1 + cellPadding) * (rowCardinality - 1) + 1);\n }\n\n return {\n // width and height of the whole cell\n cellWidth: cellWidth,\n cellHeight: cellHeight,\n cellPadding: cellPadding,\n // width and height of the chart\n width: width,\n height: height,\n // information about x and y, such as band size\n x: {useSmallBand: useSmallBand},\n y: {useSmallBand: useSmallBand}\n };\n}\n\n\n// FIXME fieldStats.max isn't always the longest\nfunction getMaxNumberLength(encoding, et, fieldStats) {\n var format = encoding.numberFormat(et, fieldStats);\n\n return d3_format.format(format)(fieldStats.max).length;\n}\n\n// TODO(#600) revise this\nfunction getMaxLength(encoding, stats, et) {\n var field = encoding.field(et),\n fieldStats = stats[field.name];\n\n if (field.bin) {\n // TODO once bin support range, need to update this\n return getMaxNumberLength(encoding, et, fieldStats);\n } if (encoding.isType(et, Q)) {\n return getMaxNumberLength(encoding, et, fieldStats);\n } else if (encoding.isType(et, T)) {\n return time.maxLength(encoding.field(et).timeUnit, encoding);\n } else if (encoding.isTypes(et, [N, O])) {\n if(fieldStats.type === 'number') {\n return getMaxNumberLength(encoding, et, fieldStats);\n } else {\n return Math.min(fieldStats.max, encoding.axis(et).maxLabelLength || Infinity);\n }\n }\n}\n\nfunction offset(encoding, stats, layout) {\n [X, Y].forEach(function (et) {\n // TODO(kanitw): Jul 19, 2015 - create a set of visual test for extraOffset\n var extraOffset = et === X ? 20 : 22,\n maxLength;\n if (encoding.isDimension(et) || encoding.isType(et, T)) {\n maxLength = getMaxLength(encoding, stats, et);\n } else if (\n // TODO once we have #512 (allow using inferred type)\n // Need to adjust condition here.\n encoding.isType(et, Q) ||\n encoding.aggregate(et) === 'count'\n ) {\n if (\n et===Y\n // || (et===X && false)\n // FIXME determine when X would rotate, but should move this to axis.js first #506\n ) {\n maxLength = getMaxLength(encoding, stats, et);\n }\n } else {\n // nothing\n }\n\n if (maxLength) {\n setter(layout,[et, 'axisTitleOffset'], encoding.config('characterWidth') * maxLength + extraOffset);\n } else {\n // if no max length (no rotation case), use maxLength = 3\n setter(layout,[et, 'axisTitleOffset'], encoding.config('characterWidth') * 3 + extraOffset);\n }\n\n });\n return layout;\n}\n\n},{\"../globals\":25,\"../util\":29,\"./time\":20,\"d3-format\":5}],13:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar time = require('./time'),\n util = require('../util'),\n setter = util.setter,\n getter = util.getter;\n\nvar legend = module.exports = {};\n\nlegend.defs = function(encoding, style) {\n var defs = [];\n\n if (encoding.has(COLOR) && encoding.field(COLOR).legend) {\n defs.push(legend.def(COLOR, encoding, {\n fill: COLOR,\n orient: 'right'\n }, style));\n }\n\n if (encoding.has(SIZE) && encoding.field(SIZE).legend) {\n defs.push(legend.def(SIZE, encoding, {\n size: SIZE,\n orient: defs.length === 1 ? 'left' : 'right'\n }, style));\n }\n\n if (encoding.has(SHAPE) && encoding.field(SHAPE).legend) {\n if (defs.length === 2) {\n console.error('Vega-lite currently only supports two legends');\n }\n defs.push(legend.def(SHAPE, encoding, {\n shape: SHAPE,\n orient: defs.length === 1 ? 'left' : 'right'\n }, style));\n }\n return defs;\n};\n\nlegend.def = function(name, encoding, def, style) {\n var timeUnit = encoding.field(name).timeUnit;\n\n def.title = legend.title(name, encoding);\n def = legend.style(name, encoding, def, style);\n\n if (encoding.isType(name, T) &&\n timeUnit &&\n time.hasScale(timeUnit)\n ) {\n setter(def, ['properties', 'labels', 'text', 'scale'], 'time-'+ timeUnit);\n }\n\n return def;\n};\n\nlegend.style = function(name, e, def, style) {\n var symbols = getter(def, ['properties', 'symbols']),\n marktype = e.marktype();\n\n switch (marktype) {\n case 'bar':\n case 'tick':\n case 'text':\n symbols.stroke = {value: 'transparent'};\n symbols.shape = {value: 'square'};\n break;\n\n case 'circle':\n case 'square':\n symbols.shape = {value: marktype};\n /* fall through */\n case 'point':\n // fill or stroke\n if (e.field(SHAPE).filled) {\n if (e.has(COLOR) && name === COLOR) {\n symbols.fill = {scale: COLOR, field: 'data'};\n } else {\n symbols.fill = {value: e.value(COLOR)};\n }\n symbols.stroke = {value: 'transparent'};\n } else {\n if (e.has(COLOR) && name === COLOR) {\n symbols.stroke = {scale: COLOR, field: 'data'};\n } else {\n symbols.stroke = {value: e.value(COLOR)};\n }\n symbols.fill = {value: 'transparent'};\n symbols.strokeWidth = {value: e.config('strokeWidth')};\n }\n\n break;\n case 'line':\n case 'area':\n // TODO use shape here after implementing #508\n break;\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if (opacity) {\n symbols.opacity = {value: opacity};\n }\n return def;\n};\n\nlegend.title = function(name, encoding) {\n var leg = encoding.field(name).legend;\n\n if (leg.title) return leg.title;\n\n return encoding.fieldTitle(name);\n};\n\n},{\"../globals\":25,\"../util\":29,\"./time\":20}],14:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar marks = module.exports = {};\n\nmarks.def = function(encoding, layout, style, stats) {\n\n var defs = [],\n mark = marks[encoding.marktype()],\n from = encoding.dataTable();\n\n // to add a background to text, we need to add it before the text\n if (encoding.marktype() === TEXT && encoding.has(COLOR)) {\n var bg = {\n x: {value: 0},\n y: {value: 0},\n x2: {value: layout.cellWidth},\n y2: {value: layout.cellHeight},\n fill: {scale: COLOR, field: encoding.fieldRef(COLOR)}\n };\n defs.push({\n type: 'rect',\n from: {data: from},\n properties: {enter: bg, update: bg}\n });\n }\n\n // add the mark def for the main thing\n var p = mark.prop(encoding, layout, style, stats);\n defs.push({\n type: mark.type,\n from: {data: from},\n properties: {enter: p, update: p}\n });\n\n return defs;\n};\n\nmarks.bar = {\n type: 'rect',\n stack: true,\n prop: bar_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1}\n};\n\nmarks.line = {\n type: 'line',\n line: true,\n prop: line_props,\n requiredEncoding: ['x', 'y'],\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1, detail:1}\n};\n\nmarks.area = {\n type: 'area',\n stack: true,\n line: true,\n requiredEncoding: ['x', 'y'],\n prop: area_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1}\n};\n\nmarks.tick = {\n type: 'rect',\n prop: tick_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1, detail: 1}\n};\n\nmarks.circle = {\n type: 'symbol',\n prop: filled_point_props('circle'),\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1, detail: 1}\n};\n\nmarks.square = {\n type: 'symbol',\n prop: filled_point_props('square'),\n supportedEncoding: marks.circle.supportedEncoding\n};\n\nmarks.point = {\n type: 'symbol',\n prop: point_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1, shape: 1, detail: 1}\n};\n\nmarks.text = {\n type: 'text',\n prop: text_props,\n requiredEncoding: ['text'],\n supportedEncoding: {row: 1, col: 1, size: 1, color: 1, text: 1}\n};\n\nfunction bar_props(e, layout, style) {\n // jshint unused:false\n\n var p = {};\n\n // x's and width\n if (e.isMeasure(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (!e.has(Y) || e.isDimension(Y)) {\n p.x2 = {value: 0};\n }\n } else {\n if (e.has(X)) { // is ordinal\n p.xc = {scale: X, field: e.fieldRef(X)};\n } else {\n p.x = {value: 0, offset: e.config('singleBarOffset')};\n }\n }\n\n // width\n if (!p.x2) {\n if (!e.has(X) || e.isOrdinalScale(X)) { // no X or X is ordinal\n if (e.has(SIZE)) {\n p.width = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else {\n p.width = {\n value: e.bandSize(X, layout.x.useSmallBand),\n offset: -1\n };\n }\n } else { // X is Quant or Time Scale\n p.width = {value: 2};\n }\n }\n\n // y's & height\n if (e.isMeasure(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n p.y2 = {group: 'height'};\n } else {\n if (e.has(Y)) { // is ordinal\n p.yc = {scale: Y, field: e.fieldRef(Y)};\n } else {\n p.y2 = {group: 'height', offset: -e.config('singleBarOffset')};\n }\n\n if (e.has(SIZE)) {\n p.height = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else {\n p.height = {\n value: e.bandSize(Y, layout.y.useSmallBand),\n offset: -1\n };\n }\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else {\n p.fill = {value: e.value(COLOR)};\n }\n\n // opacity\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction point_props(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.size = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(SIZE)) {\n p.size = {value: e.value(SIZE)};\n }\n\n // shape\n if (e.has(SHAPE)) {\n p.shape = {scale: SHAPE, field: e.fieldRef(SHAPE)};\n } else if (!e.has(SHAPE)) {\n p.shape = {value: e.value(SHAPE)};\n }\n\n // fill or stroke\n if (e.field(SHAPE).filled) {\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n } else {\n if (e.has(COLOR)) {\n p.stroke = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.stroke = {value: e.value(COLOR)};\n }\n p.strokeWidth = {value: e.config('strokeWidth')};\n }\n\n // opacity\n var opacity = e.field(COLOR).opacity || style.opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction line_props(e,layout, style) {\n // jshint unused:false\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: 0};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {group: 'height'};\n }\n\n // stroke\n if (e.has(COLOR)) {\n p.stroke = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.stroke = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n p.strokeWidth = {value: e.config('strokeWidth')};\n\n return p;\n}\n\nfunction area_props(e, layout, style) {\n // jshint unused:false\n var p = {};\n\n // x\n if (e.isMeasure(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (e.isDimension(Y)) {\n p.x2 = {scale: X, value: 0};\n p.orient = {value: 'horizontal'};\n }\n } else if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else {\n p.x = {value: 0};\n }\n\n // y\n if (e.isMeasure(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n p.y2 = {scale: Y, value: 0};\n } else if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else {\n p.y = {group: 'height'};\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction tick_props(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (e.isDimension(X)) {\n p.x.offset = -e.bandSize(X, layout.x.useSmallBand) / 3;\n }\n } else if (!e.has(X)) {\n p.x = {value: 0};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n if (e.isDimension(Y)) {\n p.y.offset = -e.bandSize(Y, layout.y.useSmallBand) / 3;\n }\n } else if (!e.has(Y)) {\n p.y = {value: 0};\n }\n\n // width\n if (!e.has(X) || e.isDimension(X)) {\n p.width = {value: e.bandSize(X, layout.y.useSmallBand) / 1.5};\n } else {\n p.width = {value: 1};\n }\n\n // height\n if (!e.has(Y) || e.isDimension(Y)) {\n p.height = {value: e.bandSize(Y, layout.y.useSmallBand) / 1.5};\n } else {\n p.height = {value: 1};\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction filled_point_props(shape) {\n return function(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.size = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(X)) {\n p.size = {value: e.value(SIZE)};\n }\n\n // shape\n p.shape = {value: shape};\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n return p;\n };\n}\n\nfunction text_props(e, layout, style, stats) {\n var p = {},\n field = e.field(TEXT);\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n if (e.has(TEXT) && e.isType(TEXT, Q)) {\n p.x = {value: layout.cellWidth-5};\n } else {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.fontSize = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(SIZE)) {\n p.fontSize = {value: field.font.size};\n }\n\n // fill\n // color should be set to background\n p.fill = {value: field.color};\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n // text\n if (e.has(TEXT)) {\n if (e.isType(TEXT, Q)) {\n var fieldStats = stats[e.fieldName(TEXT)],\n numberFormat = field.format || e.numberFormat(fieldStats);\n\n p.text = {template: '{{' + e.fieldRef(TEXT) + ' | number:\\'' +\n numberFormat +'\\'}}'};\n p.align = {value: field.align};\n } else {\n p.text = {field: e.fieldRef(TEXT)};\n }\n } else {\n p.text = {value: field.placeholder};\n }\n\n p.font = {value: field.font.family};\n p.fontWeight = {value: field.font.weight};\n p.fontStyle = {value: field.font.style};\n p.baseline = {value: field.baseline};\n\n return p;\n}\n\n},{\"../globals\":25}],15:[function(require,module,exports){\n'use strict';\nrequire('../globals');\nvar util = require('../util'),\n time = require('./time'),\n colorbrewer = require('colorbrewer'),\n interpolate = require('d3-color').interpolateHsl,\n schema = require('../schema/schema'),\n vlsort = require('./sort');\n\nvar scale = module.exports = {};\n\nscale.names = function(props) {\n return util.keys(util.keys(props).reduce(function(a, x) {\n if (props[x] && props[x].scale) a[props[x].scale] = 1;\n return a;\n }, {}));\n};\n\nscale.defs = function(names, encoding, layout, stats, opt) {\n opt = opt || {};\n\n return names.reduce(function(a, name) {\n var s = {\n name: name,\n type: scale.type(name, encoding),\n domain: scale.domain(name, encoding, stats, opt)\n };\n\n s.sort = scale.sort(s, encoding, name) || undefined;\n\n scale.range(s, encoding, layout, stats, opt);\n\n return (a.push(s), a);\n }, []);\n};\n\nscale.sort = function(s, encoding, name) {\n return s.type === 'ordinal' && (\n !!encoding.bin(name) ||\n encoding.sort(name).length === 0\n );\n};\n\nscale.type = function(name, encoding) {\n\n switch (encoding.type(name)) {\n case N: //fall through\n case O: return 'ordinal';\n case T:\n var timeUnit = encoding.field(name).timeUnit;\n return timeUnit ? time.scale.type(timeUnit, name) : 'time';\n case Q:\n if (encoding.bin(name)) {\n return name === COLOR ? 'linear' : 'ordinal';\n }\n return encoding.scale(name).type;\n }\n};\n\nscale.domain = function (name, encoding, stats, opt) {\n var field = encoding.field(name);\n\n if (encoding.isType(name, T)) {\n var range = time.scale.domain(field.timeUnit, name);\n if(range) return range;\n }\n\n if (field.bin) {\n // TODO(kanitw): this must be changed in vg2\n var fieldStat = stats[field.name],\n bins = util.getbins(fieldStat, field.bin.maxbins || schema.MAXBINS_DEFAULT),\n numbins = (bins.stop - bins.start) / bins.step;\n return util.range(numbins).map(function(i) {\n return bins.start + bins.step * i;\n });\n }\n\n if (name == opt.stack) {\n return {\n data: STACKED,\n field: encoding.fieldRef(name, {\n data: !encoding._vega2,\n prefn: (opt.facet ? 'max_' : '') + 'sum_'\n })\n };\n }\n var aggregate = encoding.aggregate(name),\n timeUnit = field.timeUnit,\n scaleUseRawDomain = encoding.scale(name).useRawDomain,\n useRawDomain = scaleUseRawDomain !== undefined ?\n scaleUseRawDomain : encoding.config('useRawDomain'),\n notCountOrSum = !aggregate || (aggregate !=='count' && aggregate !== 'sum');\n\n // FIXME revise this part\n\n if ( useRawDomain && notCountOrSum && (\n // Q always uses non-ordinal scale except when it's binned and thus uses ordinal scale.\n (encoding.isType(name, Q) && !field.bin) ||\n // T uses non-ordinal scale when there's no unit or when the unit is not ordinal.\n (encoding.isType(name, T) && (!timeUnit || !time.isOrdinalFn(timeUnit)))\n )\n ) {\n return {data: RAW, field: encoding.fieldRef(name, {nofn: !timeUnit})};\n }\n\n var data = encoding.sort(name, stats).length > 0 ?\n vlsort.getDataName(name):\n encoding.dataTable();\n\n return {data: data, field: encoding.fieldRef(name)};\n};\n\n\nscale.range = function (s, encoding, layout, stats) {\n var spec = encoding.scale(s.name),\n field = encoding.field(s.name),\n timeUnit = field.timeUnit;\n\n switch (s.name) {\n case X:\n s.range = layout.cellWidth ? [0, layout.cellWidth] : 'width';\n if (s.type === 'ordinal') {\n s.bandWidth = encoding.bandSize(X, layout.x.useSmallBand);\n } else {\n if (encoding.isType(s.name,T) && timeUnit === 'year') {\n s.zero = false;\n } else {\n s.zero = spec.zero === undefined ? true : spec.zero;\n }\n\n s.reverse = spec.reverse;\n }\n s.round = true;\n if (s.type === 'time') {\n s.nice = timeUnit || encoding.config('timeScaleNice');\n }else {\n s.nice = true;\n }\n break;\n case Y:\n if (s.type === 'ordinal') {\n s.range = layout.cellHeight ?\n (field.bin ? [layout.cellHeight, 0] : [0, layout.cellHeight]) :\n 'height';\n s.bandWidth = encoding.bandSize(Y, layout.y.useSmallBand);\n } else {\n s.range = layout.cellHeight ? [layout.cellHeight, 0] : 'height';\n if (encoding.isType(s.name,T) && timeUnit === 'year') {\n s.zero = false;\n } else {\n s.zero = spec.zero === undefined ? true : spec.zero;\n }\n\n s.reverse = spec.reverse;\n }\n\n s.round = true;\n\n if (s.type === 'time') {\n s.nice = timeUnit || encoding.config('timeScaleNice');\n }else {\n s.nice = true;\n }\n break;\n case ROW: // support only ordinal\n s.bandWidth = layout.cellHeight;\n s.round = true;\n s.nice = true;\n break;\n case COL: // support only ordinal\n s.bandWidth = layout.cellWidth;\n s.round = true;\n s.nice = true;\n break;\n case SIZE:\n if (encoding.is('bar')) {\n // FIXME this is definitely incorrect\n // but let's fix it later since bar size is a bad encoding anyway\n s.range = [3, Math.max(encoding.bandSize(X), encoding.bandSize(Y))];\n } else if (encoding.is(TEXT)) {\n s.range = [8, 40];\n } else { //point\n var bandSize = Math.min(encoding.bandSize(X), encoding.bandSize(Y)) - 1;\n s.range = [10, 0.8 * bandSize*bandSize];\n }\n s.round = true;\n s.zero = false;\n break;\n case SHAPE:\n s.range = 'shapes';\n break;\n case COLOR:\n s.range = scale.color(s, encoding, stats);\n if (s.type !== 'ordinal') s.zero = false;\n break;\n default:\n throw new Error('Unknown encoding name: '+ s.name);\n }\n\n // FIXME(kanitw): Jul 29, 2015 - consolidate this with above\n switch (s.name) {\n case ROW:\n case COL:\n s.padding = encoding.config('cellPadding');\n s.outerPadding = 0;\n break;\n case X:\n case Y:\n if (s.type === 'ordinal') { //&& !s.bandWidth\n s.points = true;\n s.padding = encoding.field(s.name).band.padding;\n }\n }\n};\n\nscale.color = function(s, encoding, stats) {\n var colorScale = encoding.scale(COLOR),\n range = colorScale.range,\n cardinality = encoding.cardinality(COLOR, stats),\n type = encoding.type(COLOR);\n\n if (range === undefined) {\n var ordinalPalette = colorScale.ordinalPalette,\n quantitativeRange = colorScale.quantitativeRange;\n\n if (s.type === 'ordinal') {\n if (type === N) {\n // use categorical color scale\n if (cardinality <= 10) {\n range = colorScale.c10palette;\n } else {\n range = colorScale.c20palette;\n }\n return scale.color.palette(range, cardinality, type);\n } else {\n if (ordinalPalette) {\n return scale.color.palette(ordinalPalette, cardinality, type);\n }\n return scale.color.interpolate(quantitativeRange[0], quantitativeRange[1], cardinality);\n }\n } else { //time or quantitative\n return [quantitativeRange[0], quantitativeRange[1]];\n }\n }\n};\n\nscale.color.palette = function(range, cardinality, type) {\n // FIXME(kanitw): Jul 29, 2015 - check range is string\n switch (range) {\n case 'category10k':\n // tableau's category 10, ordered by perceptual kernel study results\n // https://github.com/uwdata/perceptual-kernels\n return ['#2ca02c', '#e377c2', '#7f7f7f', '#17becf', '#8c564b', '#d62728', '#bcbd22', '#9467bd', '#ff7f0e', '#1f77b4'];\n\n // d3/tableau category10/20/20b/20c\n case 'category10':\n return ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'];\n\n case 'category20':\n return ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'];\n\n case 'category20b':\n return ['#393b79', '#5254a3', '#6b6ecf', '#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31', '#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b', '#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6'];\n\n case 'category20c':\n return ['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc', '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'];\n }\n\n // TODO add our own set of custom ordinal color palette\n\n if (range in colorbrewer) {\n var palette = colorbrewer[range];\n\n // if cardinality pre-defined, use it.\n if (cardinality in palette) return palette[cardinality];\n\n // if not, use the highest cardinality one for nominal\n if (type === N) {\n return palette[Math.max.apply(null, util.keys(palette))];\n }\n\n // otherwise, interpolate\n var ps = cardinality < 3 ? 3 : Math.max.apply(null, util.keys(palette)),\n from = 0 , to = ps - 1;\n // FIXME add config for from / to\n\n return scale.color.interpolate(palette[ps][from], palette[ps][to], cardinality);\n }\n\n return range;\n};\n\nscale.color.interpolate = function (start, end, cardinality) {\n\n var interpolator = interpolate(start, end);\n return util.range(cardinality).map(function(i) { return interpolator(i*1.0/(cardinality-1)); });\n};\n\n},{\"../globals\":25,\"../schema/schema\":27,\"../util\":29,\"./sort\":16,\"./time\":20,\"colorbrewer\":3,\"d3-color\":4}],16:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar vlfield = require('../field');\n\nmodule.exports = sort;\n\n// adds new transforms that produce sorted fields\nfunction sort(data, encoding, stats, opt) {\n // jshint unused:false\n\n var datasetMapping = {};\n\n encoding.forEach(function(field, encType) {\n var sortBy = encoding.sort(encType, stats);\n if (sortBy.length > 0) {\n var fields = sortBy.map(function(d) {\n return {\n op: d.aggregate,\n field: vlfield.fieldRef(d, {nofn: true, data: !encoding._vega2})\n };\n });\n\n var byClause = sortBy.map(function(d) {\n var reverse = (d.reverse ? '-' : '');\n return reverse + vlfield.fieldRef(d, {data: !encoding._vega2});\n });\n\n var dataName = sort.getDataName(encType);\n\n var transforms = [\n {\n type: 'aggregate',\n groupby: [ encoding.fieldRef(encType) ],\n fields: fields\n },\n {\n type: 'sort',\n by: byClause\n }\n ];\n\n data.push({\n name: dataName,\n source: RAW,\n transform: transforms\n });\n\n datasetMapping[encType] = dataName;\n }\n });\n\n return data;\n}\n\nsort.getDataName = function(encType) {\n return 'sorted-' + encType;\n};\n\n\n},{\"../field\":24,\"../globals\":25}],17:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar marks = require('./marks');\n\nmodule.exports = stacking;\n\nfunction stacking(data, encoding, mdef) {\n if (!marks[encoding.marktype()].stack) return false;\n\n // TODO: add || encoding.has(LOD) here once LOD is implemented\n if (!encoding.has(COLOR)) return false;\n\n var dim=null, val=null, idx =null,\n isXMeasure = encoding.isMeasure(X),\n isYMeasure = encoding.isMeasure(Y),\n facets = encoding.facets();\n\n if (isXMeasure && !isYMeasure) {\n dim = Y;\n val = X;\n idx = 0;\n } else if (isYMeasure && !isXMeasure) {\n dim = X;\n val = Y;\n idx = 1;\n } else {\n return null; // no stack encoding\n }\n\n // add transform to compute sums for scale\n var stacked = {\n name: STACKED,\n source: encoding.dataTable(),\n transform: [{\n type: 'aggregate',\n groupby: [encoding.fieldRef(dim)].concat(facets), // dim and other facets\n fields: [{op: 'sum', field: encoding.fieldRef(val)}] // TODO check if field with aggregate is correct?\n }]\n };\n\n if (facets && facets.length > 0) {\n stacked.transform.push({ //calculate max for each facet\n type: 'aggregate',\n groupby: facets,\n fields: [{\n op: 'max',\n field: encoding.fieldName(val, {fn: 'sum'})\n }]\n });\n }\n\n data.push(stacked);\n\n // add stack transform to mark\n mdef.from.transform = [{\n type: 'stack',\n point: encoding.fieldRef(dim),\n height: encoding.fieldRef(val),\n output: {y1: val, y0: val + '2'}\n }];\n\n // TODO: This is super hack-ish -- consolidate into modular mark properties?\n mdef.properties.update[val] = mdef.properties.enter[val] = {scale: val, field: val};\n mdef.properties.update[val + '2'] = mdef.properties.enter[val + '2'] = {scale: val, field: val + '2'};\n\n return val; //return stack encoding\n}\n\n},{\"../globals\":25,\"./marks\":14}],18:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nvar vlfield = require('../field');\n\nmodule.exports = function(encoding, stats) {\n return {\n opacity: estimateOpacity(encoding, stats),\n };\n};\n\nfunction estimateOpacity(encoding,stats) {\n if (!stats) {\n return 1;\n }\n\n var numPoints = 0;\n\n if (encoding.isAggregate()) { // aggregate plot\n numPoints = 1;\n\n // get number of points in each \"cell\"\n // by calculating product of cardinality\n // for each non faceting and non-ordinal X / Y fields\n // note that ordinal x,y are not include since we can\n // consider that ordinal x are subdividing the cell into subcells anyway\n encoding.forEach(function(field, encType) {\n\n if (encType !== ROW && encType !== COL &&\n !((encType === X || encType === Y) &&\n vlfield.isOrdinalScale(field))\n ) {\n numPoints *= encoding.cardinality(encType, stats);\n }\n });\n\n } else { // raw plot\n\n // TODO: error handling\n if (!stats['*'])\n return 1;\n\n numPoints = stats['*'].max; // count\n\n // small multiples divide number of points\n var numMultiples = 1;\n if (encoding.has(ROW)) {\n numMultiples *= encoding.cardinality(ROW, stats);\n }\n if (encoding.has(COL)) {\n numMultiples *= encoding.cardinality(COL, stats);\n }\n numPoints /= numMultiples;\n }\n\n var opacity = 0;\n if (numPoints <= 25) {\n opacity = 1;\n } else if (numPoints < 200) {\n opacity = 0.8;\n } else if (numPoints < 1000 || encoding.is('tick')) {\n opacity = 0.7;\n } else {\n opacity = 0.3;\n }\n\n return opacity;\n}\n\n\n},{\"../field\":24,\"../globals\":25}],19:[function(require,module,exports){\n'use strict';\n\nrequire('../globals');\n\nmodule.exports = subfaceting;\n\nfunction subfaceting(group, mdef, details, stack, encoding) {\n var m = group.marks;\n var g = {\n _name: 'subfacet',\n type: 'group',\n from: mdef.from,\n properties: {\n enter: {\n width: {group: 'width'},\n height: {group: 'height'}\n }\n },\n marks: m\n };\n\n group.marks = [g];\n delete mdef.from; // (move to the new g)\n\n //TODO test LOD -- we should support stack / line without color (LOD) field\n var trans = (g.from.transform || (g.from.transform = []));\n trans.unshift({type: 'facet', keys: details});\n\n if (stack && encoding.has(COLOR)) {\n trans.unshift({type: 'sort', by: encoding.fieldRef(COLOR)});\n }\n}\n\n},{\"../globals\":25}],20:[function(require,module,exports){\n'use strict';\n\nvar util = require('../util'),\n d3_time_format = require('d3-time-format');\n\nvar time = module.exports = {};\n\n// 'Wednesday September 17 04:00:00 2014'\n// Wednesday is the longest date\n// September is the longest month (8 in javascript as it is zero-indexed).\nvar LONG_DATE = new Date(Date.UTC(2014, 8, 17));\n\ntime.cardinality = function(field, stats, filterNull, type) {\n var timeUnit = field.timeUnit;\n switch (timeUnit) {\n case 'seconds': return 60;\n case 'minutes': return 60;\n case 'hours': return 24;\n case 'day': return 7;\n case 'date': return 31;\n case 'month': return 12;\n case 'year':\n var stat = stats[field.name],\n yearstat = stats['year_'+field.name];\n\n if (!yearstat) { return null; }\n\n return yearstat.distinct -\n (stat.nulls > 0 && filterNull[type] ? 1 : 0);\n }\n\n return null;\n};\n\ntime.formula = function(timeUnit, fieldRef) {\n // TODO(kanitw): add formula to other time format\n var fn = 'utc' + timeUnit;\n return fn + '(' + fieldRef + ')';\n};\n\ntime.maxLength = function(timeUnit, encoding) {\n switch (timeUnit) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n case 'date':\n return 2;\n case 'month':\n case 'day':\n var range = time.range(timeUnit, encoding);\n if (range) {\n // return the longest name in the range\n return Math.max.apply(null, range.map(function(r) {return r.length;}));\n }\n return 2;\n case 'year':\n return 4; //'1998'\n }\n // TODO(#600) revise this\n // no time unit\n var timeFormat = encoding.config('timeFormat');\n return d3_time_format.utcFormat(timeFormat)(LONG_DATE).length;\n};\n\ntime.range = function(timeUnit, encoding) {\n var labelLength = encoding.config('timeScaleLabelLength'),\n scaleLabel;\n switch (timeUnit) {\n case 'day':\n scaleLabel = encoding.config('dayScaleLabel');\n break;\n case 'month':\n scaleLabel = encoding.config('monthScaleLabel');\n break;\n }\n if (scaleLabel) {\n return labelLength ? scaleLabel.map(\n function(s) { return s.substr(0, labelLength);}\n ) : scaleLabel;\n }\n return;\n};\n\n\n/**\n * @param {Object} encoding\n * @return {Array} scales for time unit names\n */\ntime.scales = function(encoding) {\n var scales = encoding.reduce(function(scales, field) {\n var timeUnit = field.timeUnit;\n if (field.type === T && timeUnit && !scales[timeUnit]) {\n var scale = time.scale.def(field.timeUnit, encoding);\n if (scale) scales[timeUnit] = scale;\n }\n return scales;\n }, {});\n\n return util.vals(scales);\n};\n\n\ntime.scale = {};\n\n/** append custom time scales for axis label */\ntime.scale.def = function(timeUnit, encoding) {\n var range = time.range(timeUnit, encoding);\n\n if (range) {\n return {\n name: 'time-'+timeUnit,\n type: 'ordinal',\n domain: time.scale.domain(timeUnit),\n range: range\n };\n }\n return null;\n};\n\ntime.isOrdinalFn = function(timeUnit) {\n switch (timeUnit) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n case 'day':\n case 'date':\n case 'month':\n return true;\n }\n return false;\n};\n\ntime.scale.type = function(timeUnit, name) {\n if (name === COLOR) {\n return 'linear'; // time has order, so use interpolated ordinal color scale.\n }\n\n return time.isOrdinalFn(timeUnit) || name === COL || name === ROW ? 'ordinal' : 'linear';\n};\n\ntime.scale.domain = function(timeUnit, name) {\n var isColor = name === COLOR;\n switch (timeUnit) {\n case 'seconds':\n case 'minutes': return isColor ? [0,59] : util.range(0, 60);\n case 'hours': return isColor ? [0,23] : util.range(0, 24);\n case 'day': return isColor ? [0,6] : util.range(0, 7);\n case 'date': return isColor ? [1,31] : util.range(1, 32);\n case 'month': return isColor ? [0,11] : util.range(0, 12);\n }\n return null;\n};\n\n/** whether a particular time function has custom scale for labels implemented in time.scale */\ntime.hasScale = function(timeUnit) {\n switch (timeUnit) {\n case 'day':\n case 'month':\n return true;\n }\n return false;\n};\n\n},{\"../util\":29,\"d3-time-format\":6}],21:[function(require,module,exports){\n'use strict';\n\nrequire('./globals');\n\nvar consts = module.exports = {};\n\nconsts.encodingTypes = [X, Y, ROW, COL, SIZE, SHAPE, COLOR, TEXT, DETAIL];\n\nconsts.shorthand = {\n delim: '|',\n assign: '=',\n type: ',',\n func: '_'\n};\n\n},{\"./globals\":25}],22:[function(require,module,exports){\n'use strict';\n\nrequire('./globals');\n\nvar stats = require('datalib/src/stats');\n\nvar vldata = module.exports = {};\n\n/** Mapping from datalib's inferred type to Vega-lite's type */\nvldata.types = {\n 'boolean': N,\n 'number': Q,\n 'integer': Q,\n 'date': T,\n 'string': N\n};\n\nvldata.stats = function(data) {\n var summary = stats.summary(data);\n\n return summary.reduce(function(s, profile) {\n s[profile.field] = profile;\n return s;\n }, {\n '*': {\n max: data.length,\n min: 0\n }\n });\n};\n},{\"./globals\":25,\"datalib/src/stats\":35}],23:[function(require,module,exports){\n// utility for enc\n\n'use strict';\n\nvar consts = require('./consts'),\n c = consts.shorthand,\n vlfield = require('./field'),\n util = require('./util'),\n schema = require('./schema/schema'),\n encTypes = schema.encTypes;\n\nvar vlenc = module.exports = {};\n\nvlenc.countRetinal = function(enc) {\n var count = 0;\n if (enc.color) count++;\n if (enc.size) count++;\n if (enc.shape) count++;\n return count;\n};\n\nvlenc.has = function(enc, encType) {\n var fieldDef = enc && enc[encType];\n return fieldDef && fieldDef.name;\n};\n\nvlenc.isAggregate = function(enc) {\n for (var k in enc) {\n if (vlenc.has(enc, k) && enc[k].aggregate) {\n return true;\n }\n }\n return false;\n};\n\nvlenc.forEach = function(enc, f) {\n var i = 0;\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n f(enc[k], k, i++);\n }\n });\n};\n\nvlenc.map = function(enc, f) {\n var arr = [];\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n arr.push(f(enc[k], k, enc));\n }\n });\n return arr;\n};\n\nvlenc.reduce = function(enc, f, init) {\n var r = init;\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n r = f(r, enc[k], k, enc);\n }\n });\n return r;\n};\n\n/*\n * return key-value pairs of field name and list of fields of that field name\n */\nvlenc.fields = function(enc) {\n return vlenc.reduce(enc, function (m, field) {\n var fieldList = m[field.name] = m[field.name] || [],\n containsType = fieldList.containsType = fieldList.containsType || {};\n\n if (fieldList.indexOf(field) === -1) {\n fieldList.push(field);\n // augment the array with containsType.Q / O / N / T\n containsType[field.type] = true;\n }\n return m;\n }, {});\n};\n\nvlenc.shorthand = function(enc) {\n return vlenc.map(enc, function(field, et) {\n return et + c.assign + vlfield.shorthand(field);\n }).join(c.delim);\n};\n\nvlenc.fromShorthand = function(shorthand) {\n var enc = util.isArray(shorthand) ? shorthand : shorthand.split(c.delim);\n return enc.reduce(function(m, e) {\n var split = e.split(c.assign),\n enctype = split[0].trim(),\n field = split[1];\n\n m[enctype] = vlfield.fromShorthand(field);\n return m;\n }, {});\n};\n\n},{\"./consts\":21,\"./field\":24,\"./schema/schema\":27,\"./util\":29}],24:[function(require,module,exports){\n'use strict';\n\n// utility for field\n\nrequire('./globals');\n\nvar consts = require('./consts'),\n c = consts.shorthand,\n time = require('./compiler/time'),\n util = require('./util'),\n schema = require('./schema/schema');\n\nvar vlfield = module.exports = {};\n\n/**\n * @param field\n * @param opt\n * opt.nofn -- exclude bin, aggregate, timeUnit\n * opt.data - include 'data.'\n * opt.d - include 'd.'\n * opt.fn - replace fn with custom function prefix\n * opt.prefn - prepend fn with custom function prefix\n\n * @return {[type]} [description]\n */\nvlfield.fieldRef = function(field, opt) {\n opt = opt || {};\n\n var f = (opt.d ? 'd.' : '') +\n (opt.data ? 'data.' : '') +\n (opt.prefn || ''),\n nofn = opt.nofn || opt.fn,\n name = field.name;\n\n if (vlfield.isCount(field)) {\n return f + 'count';\n } else if (!nofn && field.bin) {\n return f + 'bin_' + name;\n } else if (!nofn && field.aggregate) {\n return f + field.aggregate + '_' + name;\n } else if (!nofn && field.timeUnit) {\n return f + field.timeUnit + '_' + name;\n } else if (opt.fn) {\n return f + opt.fn + '_' + name;\n } else {\n return f + name;\n }\n};\n\nvlfield.shorthand = function(f) {\n var c = consts.shorthand;\n return (f.aggregate ? f.aggregate + c.func : '') +\n (f.timeUnit ? f.timeUnit + c.func : '') +\n (f.bin ? 'bin' + c.func : '') +\n (f.name || '') + c.type + f.type;\n};\n\nvlfield.shorthands = function(fields, delim) {\n delim = delim || c.delim;\n return fields.map(vlfield.shorthand).join(delim);\n};\n\nvlfield.fromShorthand = function(shorthand) {\n var split = shorthand.split(c.type), i;\n var o = {\n name: split[0].trim(),\n type: split[1].trim()\n };\n\n // check aggregate type\n for (i in schema.aggregate.enum) {\n var a = schema.aggregate.enum[i];\n if (o.name.indexOf(a + '_') === 0) {\n o.name = o.name.substr(a.length + 1);\n if (a == 'count' && o.name.length === 0) o.name = '*';\n o.aggregate = a;\n break;\n }\n }\n\n // check time timeUnit\n for (i in schema.timefns) {\n var tu = schema.timefns[i];\n if (o.name && o.name.indexOf(tu + '_') === 0) {\n o.name = o.name.substr(o.length + 1);\n o.timeUnit = tu;\n break;\n }\n }\n\n // check bin\n if (o.name && o.name.indexOf('bin_') === 0) {\n o.name = o.name.substr(4);\n o.bin = true;\n }\n\n return o;\n};\n\nvar isType = vlfield.isType = function (fieldDef, type) {\n return fieldDef.type === type;\n};\n\nvar isTypes = vlfield.isTypes = function (fieldDef, types) {\n for (var t=0; t 0 && filterNull[type] ? 1 : 0);\n};\n\n},{\"./compiler/time\":20,\"./consts\":21,\"./globals\":25,\"./schema/schema\":27,\"./util\":29}],25:[function(require,module,exports){\n(function (global){\n'use strict';\n\n// declare global constant\nvar g = global || window;\n\ng.AGGREGATE = 'aggregate';\ng.RAW = 'raw';\ng.STACKED = 'stacked';\ng.INDEX = 'index';\n\ng.X = 'x';\ng.Y = 'y';\ng.ROW = 'row';\ng.COL = 'col';\ng.SIZE = 'size';\ng.SHAPE = 'shape';\ng.COLOR = 'color';\ng.TEXT = 'text';\ng.DETAIL = 'detail';\n\ng.N = 'N';\ng.O = 'O';\ng.Q = 'Q';\ng.T = 'T';\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],26:[function(require,module,exports){\n'use strict';\n\n// TODO(kanitw): chat with Vega team and possibly move this to vega-logging\nmodule.exports = function(prefix) {\n // Borrowed some ideas from http://stackoverflow.com/a/15653260/866989\n // and https://github.com/patik/console.log-wrapper/blob/master/consolelog.js\n var METHODS = ['error', 'info', 'debug', 'warn', 'log'];\n\n return METHODS.reduce(function(logger, fn) {\n var cfn = console[fn] ? fn : 'log';\n if (console[cfn].bind === 'undefined') { // IE < 10\n logger[fn] = Function.prototype.bind.call(console[cfn], console, prefix);\n }\n else {\n logger[fn] = console[cfn].bind(console, prefix);\n }\n return logger;\n }, {});\n};\n},{}],27:[function(require,module,exports){\n// Package of defining Vega-lite Specification's json schema\n'use strict';\n\nrequire('../globals');\n\nvar schema = module.exports = {},\n util = require('../util'),\n toMap = util.toMap,\n colorbrewer = require('colorbrewer');\n\nschema.util = require('./schemautil');\n\nschema.marktype = {\n type: 'string',\n enum: ['point', 'tick', 'bar', 'line', 'area', 'circle', 'square', 'text']\n};\n\nschema.aggregate = {\n type: 'string',\n enum: ['avg', 'sum', 'median', 'min', 'max', 'count'],\n supportedEnums: {\n Q: ['avg', 'median', 'sum', 'min', 'max', 'count'],\n O: ['median','min','max'],\n N: [],\n T: ['avg', 'median', 'min', 'max'],\n '': ['count']\n },\n supportedTypes: toMap([Q, N, O, T, ''])\n};\n\nschema.getSupportedRole = function(encType) {\n return schema.schema.properties.encoding.properties[encType].supportedRole;\n};\n\nschema.timeUnits = ['year', 'month', 'day', 'date', 'hours', 'minutes', 'seconds'];\n\nschema.defaultTimeFn = 'month';\n\nschema.timeUnit = {\n type: 'string',\n enum: schema.timeUnits,\n supportedTypes: toMap([T])\n};\n\nschema.scale_type = {\n type: 'string',\n // TODO(kanitw) read vega's schema here, add description\n enum: ['linear', 'log', 'pow', 'sqrt', 'quantile'],\n default: 'linear',\n supportedTypes: toMap([Q])\n};\n\nschema.field = {\n type: 'object',\n properties: {\n name: {\n type: 'string'\n }\n }\n};\n\nvar clone = util.duplicate;\nvar merge = schema.util.merge;\n\nschema.MAXBINS_DEFAULT = 15;\n\nvar bin = {\n type: ['boolean', 'object'],\n default: false,\n properties: {\n maxbins: {\n type: 'integer',\n default: schema.MAXBINS_DEFAULT,\n minimum: 2,\n description: 'Maximum number of bins.'\n }\n },\n supportedTypes: toMap([Q]) // TODO: add O after finishing #81\n};\n\nvar typicalField = merge(clone(schema.field), {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: [N, O, Q, T]\n },\n aggregate: schema.aggregate,\n timeUnit: schema.timeUnit,\n bin: bin,\n scale: {\n type: 'object',\n properties: {\n /* Common Scale Properties */\n type: schema.scale_type,\n reverse: {\n type: 'boolean',\n default: false,\n supportedTypes: toMap([Q, T])\n },\n\n /* Quantitative Scale Properties */\n nice: {\n type: 'string',\n enum: ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'],\n supportedTypes: toMap([T])\n },\n zero: {\n type: 'boolean',\n description: 'Include zero',\n default: true,\n supportedTypes: toMap([Q, T])\n },\n\n /* Vega-lite only Properties */\n useRawDomain: {\n type: 'boolean',\n default: undefined,\n description: 'Use the raw data range as scale domain instead of ' +\n 'aggregated data for aggregate axis. ' +\n 'This option does not work with sum or count aggregate' +\n 'as they might have a substantially larger scale range.' +\n 'By default, use value from config.useRawDomain.'\n }\n }\n }\n }\n});\n\nvar onlyOrdinalField = merge(clone(schema.field), {\n type: 'object',\n supportedRole: {\n dimension: true\n },\n properties: {\n type: {\n type: 'string',\n enum: [N, O, Q, T] // ordinal-only field supports Q when bin is applied and T when time unit is applied.\n },\n timeUnit: schema.timeUnit,\n bin: bin,\n aggregate: {\n type: 'string',\n enum: ['count'],\n supportedTypes: toMap([N, O]) // FIXME this looks weird to me\n }\n }\n});\n\nvar axisMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true},\n properties: {\n axis: {\n type: 'object',\n properties: {\n /* Vega Axis Properties */\n format: {\n type: 'string',\n default: undefined, // auto\n description: 'The formatting pattern for axis labels. '+\n 'If not undefined, this will be determined by ' +\n 'small/largeNumberFormat and the max value ' +\n 'of the field.'\n },\n grid: {\n type: 'boolean',\n default: true,\n description: 'A flag indicate if gridlines should be created in addition to ticks.'\n },\n layer: {\n type: 'string',\n default: 'back',\n description: 'A string indicating if the axis (and any gridlines) should be placed above or below the data marks. One of \"front\" (default) or \"back\".'\n },\n orient: {\n type: 'string',\n default: undefined,\n enum: ['top', 'right', 'left', 'bottom'],\n description: 'The orientation of the axis. One of top, bottom, left or right. The orientation can be used to further specialize the axis type (e.g., a y axis oriented for the right edge of the chart).'\n },\n ticks: {\n type: 'integer',\n default: 5,\n minimum: 0,\n description: 'A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale\\'s range.'\n },\n /* Vega Axis Properties that are automatically populated by Vega-lite */\n title: {\n type: 'string',\n default: undefined,\n description: 'A title for the axis. (Shows field name and its function by default.)'\n },\n /* Vega-lite only */\n maxLabelLength: {\n type: 'integer',\n default: 25,\n minimum: 0,\n description: 'Truncate labels that are too long.'\n },\n labelAngle: {\n type: 'integer',\n default: undefined, // auto\n minimum: 0,\n maximum: 360,\n description: 'Angle by which to rotate labels. Set to 0 to force horizontal.'\n },\n titleMaxLength: {\n type: 'integer',\n default: undefined,\n minimum: 0,\n description: 'Max length for axis title if the title is automatically generated from the field\\'s description'\n },\n titleOffset: {\n type: 'integer',\n default: undefined, // auto\n description: 'A title offset value for the axis.'\n },\n }\n }\n }\n};\n\nvar sortMixin = {\n type: 'object',\n properties: {\n sort: {\n type: 'array',\n default: [],\n items: {\n type: 'object',\n supportedTypes: toMap([N, O]),\n required: ['name', 'aggregate'],\n properties: {\n name: {\n type: 'string'\n },\n aggregate: {\n type: 'string',\n enum: ['avg', 'sum', 'min', 'max', 'count']\n },\n reverse: {\n type: 'boolean',\n default: false\n }\n }\n }\n }\n }\n};\n\nvar bandMixin = {\n type: 'object',\n properties: {\n band: {\n type: 'object',\n properties: {\n size: {\n type: 'integer',\n minimum: 0,\n default: undefined\n },\n padding: {\n type: 'integer',\n minimum: 0,\n default: 1\n }\n }\n }\n }\n};\n\nvar legendMixin = {\n type: 'object',\n properties: {\n legend: {\n type: 'object',\n description: 'Properties of a legend.',\n properties: {\n title: {\n type: 'string',\n default: undefined,\n description: 'A title for the legend. (Shows field name and its function by default.)'\n }\n }\n }\n }\n};\n\nvar textMixin = {\n type: 'object',\n supportedMarktypes: {'text': true},\n properties: {\n align: {\n type: 'string',\n default: 'right'\n },\n baseline: {\n type: 'string',\n default: 'middle'\n },\n color: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n margin: {\n type: 'integer',\n default: 4,\n minimum: 0\n },\n placeholder: {\n type: 'string',\n default: 'Abc'\n },\n font: {\n type: 'object',\n properties: {\n weight: {\n type: 'string',\n enum: ['normal', 'bold'],\n default: 'normal'\n },\n size: {\n type: 'integer',\n default: 10,\n minimum: 0\n },\n family: {\n type: 'string',\n default: 'Helvetica Neue'\n },\n style: {\n type: 'string',\n default: 'normal',\n enum: ['normal', 'italic']\n }\n }\n },\n format: {\n type: 'string',\n default: undefined, // auto\n description: 'The formatting pattern for text value. '+\n 'If not undefined, this will be determined by ' +\n 'small/largeNumberFormat and the max value ' +\n 'of the field.'\n },\n }\n};\n\nvar sizeMixin = {\n type: 'object',\n supportedMarktypes: {point: true, bar: true, circle: true, square: true, text: true},\n properties: {\n value: {\n type: 'integer',\n default: 30,\n minimum: 0,\n description: 'Size of marks.'\n }\n }\n};\n\nvar colorMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true, 'text': true},\n properties: {\n value: {\n type: 'string',\n role: 'color',\n default: '#4682b4',\n description: 'Color to be used for marks.'\n },\n opacity: {\n type: 'number',\n default: undefined, // auto\n minimum: 0,\n maximum: 1\n },\n scale: {\n type: 'object',\n properties: {\n range: {\n type: ['string', 'array'],\n default: undefined,\n description:\n 'Color palette, if undefined vega-lite will use data property' +\n 'to pick one from c10palette, c20palette, or ordinalPalette.'\n //FIXME\n },\n c10palette: {\n type: 'string',\n default: 'category10',\n enum: [\n // Tableau\n 'category10', 'category10k',\n // Color Brewer\n 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3'\n ]\n },\n c20palette: {\n type: 'string',\n default: 'category20',\n enum: ['category20', 'category20b', 'category20c']\n },\n ordinalPalette: {\n type: 'string',\n default: undefined,\n description: 'Color palette to encode ordinal variables.',\n enum: util.keys(colorbrewer)\n },\n quantitativeRange: {\n type: 'array',\n default: ['#AFC6A3', '#09622A'], // tableau greens\n // default: ['#ccece6', '#00441b'], // BuGn.9 [2-8]\n description: 'Color range to encode quantitative variables.',\n minItems: 2,\n maxItems: 2,\n items: {\n type: 'string',\n role: 'color'\n }\n }\n }\n }\n }\n};\n\nvar shapeMixin = {\n type: 'object',\n supportedMarktypes: {point: true, circle: true, square: true},\n properties: {\n value: {\n type: 'string',\n enum: ['circle', 'square', 'cross', 'diamond', 'triangle-up', 'triangle-down'],\n default: 'circle',\n description: 'Mark to be used.'\n },\n filled: {\n type: 'boolean',\n default: false,\n description: 'Whether the shape\\'s color should be used as fill color instead of stroke color.'\n }\n }\n};\n\nvar detailMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, line: true, circle: true, square: true}\n};\n\nvar rowMixin = {\n properties: {\n height: {\n type: 'number',\n minimum: 0,\n default: 150\n }\n }\n};\n\nvar colMixin = {\n properties: {\n width: {\n type: 'number',\n minimum: 0,\n default: 150\n },\n axis: {\n properties: {\n maxLabelLength: {\n type: 'integer',\n default: 12,\n minimum: 0,\n description: 'Truncate labels that are too long.'\n }\n }\n }\n }\n};\n\nvar facetMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true, text: true},\n properties: {\n padding: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.1\n }\n }\n};\n\nvar requiredNameType = {\n required: ['name', 'type']\n};\n\nvar multiRoleField = merge(clone(typicalField), {\n supportedRole: {\n measure: true,\n dimension: true\n }\n});\n\nvar quantitativeField = merge(clone(typicalField), {\n supportedRole: {\n measure: true,\n dimension: 'ordinal-only' // using size to encoding category lead to order interpretation\n }\n});\n\nvar onlyQuantitativeField = merge(clone(typicalField), {\n supportedRole: {\n measure: true\n }\n});\n\nvar x = merge(clone(multiRoleField), axisMixin, bandMixin, requiredNameType, sortMixin);\nvar y = clone(x);\n\nvar facet = merge(clone(onlyOrdinalField), requiredNameType, facetMixin, sortMixin);\nvar row = merge(clone(facet), axisMixin, rowMixin);\nvar col = merge(clone(facet), axisMixin, colMixin);\n\nvar size = merge(clone(quantitativeField), legendMixin, sizeMixin, sortMixin);\nvar color = merge(clone(multiRoleField), legendMixin, colorMixin, sortMixin);\n\nvar shape = merge(clone(onlyOrdinalField), legendMixin, shapeMixin, sortMixin);\nvar detail = merge(clone(onlyOrdinalField), detailMixin, sortMixin);\n\n// we only put aggregated measure in pivot table\nvar text = merge(clone(onlyQuantitativeField), textMixin, sortMixin);\n\n// TODO add label\n\nvar filter = {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n operands: {\n type: 'array',\n items: {\n type: ['string', 'boolean', 'integer', 'number']\n }\n },\n operator: {\n type: 'string',\n enum: ['>', '>=', '=', '!=', '<', '<=', 'notNull']\n }\n }\n }\n};\n\nvar data = {\n type: 'object',\n properties: {\n // data source\n formatType: {\n type: 'string',\n enum: ['json', 'csv'],\n default: 'json'\n },\n url: {\n type: 'string',\n default: undefined\n },\n values: {\n type: 'array',\n default: undefined,\n description: 'Pass array of objects instead of a url to a file.',\n items: {\n type: 'object',\n additionalProperties: true\n }\n }\n }\n};\n\nvar config = {\n type: 'object',\n properties: {\n // template\n width: {\n type: 'integer',\n default: undefined\n },\n height: {\n type: 'integer',\n default: undefined\n },\n viewport: {\n type: 'array',\n items: {\n type: 'integer'\n },\n default: undefined\n },\n gridColor: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n gridOpacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.08\n },\n\n // filter null\n // TODO(#597) revise this config\n filterNull: {\n type: 'object',\n properties: {\n O: {type:'boolean', default: false},\n Q: {type:'boolean', default: true},\n T: {type:'boolean', default: true}\n }\n },\n toggleSort: {\n type: 'string',\n default: O\n },\n autoSortLine: {\n type: 'boolean',\n default: true\n },\n\n // single plot\n singleHeight: {\n // will be overwritten by bandWidth * (cardinality + padding)\n type: 'integer',\n default: 200,\n minimum: 0\n },\n singleWidth: {\n // will be overwritten by bandWidth * (cardinality + padding)\n type: 'integer',\n default: 200,\n minimum: 0\n },\n // band size\n largeBandSize: {\n type: 'integer',\n default: 21,\n minimum: 0\n },\n smallBandSize: {\n //small multiples or single plot with high cardinality\n type: 'integer',\n default: 12,\n minimum: 0\n },\n largeBandMaxCardinality: {\n type: 'integer',\n default: 10\n },\n // small multiples\n cellPadding: {\n type: 'number',\n default: 0.1\n },\n cellGridColor: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n cellGridOpacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.15\n },\n cellBackgroundColor: {\n type: 'string',\n role: 'color',\n default: 'rgba(0,0,0,0)'\n },\n textCellWidth: {\n type: 'integer',\n default: 90,\n minimum: 0\n },\n\n // marks\n strokeWidth: {\n type: 'integer',\n default: 2,\n minimum: 0\n },\n singleBarOffset: {\n type: 'integer',\n default: 5,\n minimum: 0\n },\n // scales\n timeScaleLabelLength: {\n type: 'integer',\n default: 3,\n minimum: 0,\n description: 'Max length for values in dayScaleLabel and monthScaleLabel. Zero means using full names in dayScaleLabel/monthScaleLabel.'\n },\n dayScaleLabel: {\n type: 'array',\n items: {\n type: 'string'\n },\n default: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n description: 'Axis labels for day of week, starting from Sunday.' +\n '(Consistent with Javascript -- See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay.'\n },\n monthScaleLabel: {\n type: 'array',\n items: {\n type: 'string'\n },\n default: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n description: 'Axis labels for month.'\n },\n // other\n characterWidth: {\n type: 'integer',\n default: 6\n },\n maxSmallNumber: {\n type: 'number',\n default: 10000,\n description: 'maximum number that a field will be considered smallNumber.'+\n 'Used for axis labelling.'\n },\n smallNumberFormat: {\n type: 'string',\n default: '',\n description: 'D3 Number format for axis labels and text tables '+\n 'for number <= maxSmallNumber. Used for axis labelling.'\n },\n largeNumberFormat: {\n type: 'string',\n default: '.3s',\n description: 'D3 Number format for axis labels and text tables ' +\n 'for number > maxSmallNumber.'\n },\n timeFormat: {\n type: 'string',\n default: '%Y-%m-%d',\n description: 'Date format for axis labels.'\n },\n useRawDomain: {\n type: 'boolean',\n default: false,\n description: 'Use the raw data range as scale domain instead of ' +\n 'aggregated data for aggregate axis. ' +\n 'This option does not work with sum or count aggregate' +\n 'as they might have a substantially larger scale range.' +\n 'By default, use value from config.useRawDomain.'\n }\n }\n};\n\n/** @type Object Schema of a vega-lite specification */\nschema.schema = {\n $schema: 'http://json-schema.org/draft-04/schema#',\n description: 'Schema for Vega-lite specification',\n type: 'object',\n required: ['marktype', 'encoding', 'data'],\n properties: {\n data: data,\n marktype: schema.marktype,\n encoding: {\n type: 'object',\n properties: {\n x: x,\n y: y,\n row: row,\n col: col,\n size: size,\n color: color,\n shape: shape,\n text: text,\n detail: detail\n }\n },\n filter: filter,\n config: config\n }\n};\n\nschema.encTypes = util.keys(schema.schema.properties.encoding.properties);\n\n/** Instantiate a verbose vl spec from the schema */\nschema.instantiate = function() {\n return schema.util.instantiate(schema.schema);\n};\n\n},{\"../globals\":25,\"../util\":29,\"./schemautil\":28,\"colorbrewer\":3}],28:[function(require,module,exports){\n'use strict';\n\nvar schemautil = module.exports = {},\n util = require('../util');\n\nvar isEmpty = function(obj) {\n return Object.keys(obj).length === 0;\n};\n\nschemautil.extend = function(instance, schema) {\n return schemautil.merge(schemautil.instantiate(schema), instance);\n};\n\n// instantiate a schema\nschemautil.instantiate = function(schema) {\n var val;\n if (schema === undefined) {\n return undefined;\n } else if ('default' in schema) {\n val = schema.default;\n return util.isObject(val) ? util.duplicate(val) : val;\n } else if (schema.type === 'object') {\n var instance = {};\n for (var name in schema.properties) {\n val = schemautil.instantiate(schema.properties[name]);\n if (val !== undefined) {\n instance[name] = val;\n }\n }\n return instance;\n } else if (schema.type === 'array') {\n return [];\n }\n return undefined;\n};\n\n// remove all defaults from an instance\nschemautil.subtract = function(instance, defaults) {\n var changes = {};\n for (var prop in instance) {\n var def = defaults[prop];\n var ins = instance[prop];\n // Note: does not properly subtract arrays\n if (!defaults || def !== ins) {\n if (typeof ins === 'object' && !util.isArray(ins) && def) {\n var c = schemautil.subtract(ins, def);\n if (!isEmpty(c))\n changes[prop] = c;\n } else if (!util.isArray(ins) || ins.length > 0) {\n changes[prop] = ins;\n }\n }\n }\n return changes;\n};\n\nschemautil.merge = function(/*dest*, src0, src1, ...*/){\n var dest = arguments[0];\n for (var i=1 ; i 0)) return range; // also handles Invalid Date\n offseti(start, 1), floori(start);\n if (start < stop) range.push(new Date(+start));\n while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start));\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n while (--step >= 0) while (offseti(date, 1), !test(date));\n });\n };\n\n if (count) interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n return interval;\n }\n\n var second = newInterval(function(date) {\n date.setMilliseconds(0);\n }, function(date, step) {\n date.setTime(+date + step * 1e3);\n }, function(start, end) {\n return (end - start) / 1e3;\n });\n\n exports.seconds = second.range;\n\n var minute = newInterval(function(date) {\n date.setSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 6e4);\n }, function(start, end) {\n return (end - start) / 6e4;\n });\n\n exports.minutes = minute.range;\n\n var hour = newInterval(function(date) {\n date.setMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 36e5);\n }, function(start, end) {\n return (end - start) / 36e5;\n });\n\n exports.hours = hour.range;\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5;\n });\n\n exports.days = day.range;\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5;\n });\n }\n\n exports.sunday = weekday(0);\n\n exports.sundays = exports.sunday.range;\n\n exports.monday = weekday(1);\n\n exports.mondays = exports.monday.range;\n\n exports.tuesday = weekday(2);\n\n exports.tuesdays = exports.tuesday.range;\n\n exports.wednesday = weekday(3);\n\n exports.wednesdays = exports.wednesday.range;\n\n exports.thursday = weekday(4);\n\n exports.thursdays = exports.thursday.range;\n\n exports.friday = weekday(5);\n\n exports.fridays = exports.friday.range;\n\n exports.saturday = weekday(6);\n\n exports.saturdays = exports.saturday.range;\n\n var week = exports.sunday;\n\n exports.weeks = week.range;\n\n var month = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(1);\n }, function(date, step) {\n date.setMonth(date.getMonth() + step);\n }, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n });\n\n exports.months = month.range;\n\n var year = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n });\n\n exports.years = year.range;\n\n var utcSecond = newInterval(function(date) {\n date.setUTCMilliseconds(0);\n }, function(date, step) {\n date.setTime(+date + step * 1e3);\n }, function(start, end) {\n return (end - start) / 1e3;\n });\n\n exports.utcSeconds = utcSecond.range;\n\n var utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 6e4);\n }, function(start, end) {\n return (end - start) / 6e4;\n });\n\n exports.utcMinutes = utcMinute.range;\n\n var utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 36e5);\n }, function(start, end) {\n return (end - start) / 36e5;\n });\n\n exports.utcHours = utcHour.range;\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / 864e5;\n });\n\n exports.utcDays = utcDay.range;\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / 6048e5;\n });\n }\n\n exports.utcSunday = utcWeekday(0);\n\n exports.utcSundays = exports.utcSunday.range;\n\n exports.utcMonday = utcWeekday(1);\n\n exports.utcMondays = exports.utcMonday.range;\n\n exports.utcTuesday = utcWeekday(2);\n\n exports.utcTuesdays = exports.utcTuesday.range;\n\n exports.utcWednesday = utcWeekday(3);\n\n exports.utcWednesdays = exports.utcWednesday.range;\n\n exports.utcThursday = utcWeekday(4);\n\n exports.utcThursdays = exports.utcThursday.range;\n\n exports.utcFriday = utcWeekday(5);\n\n exports.utcFridays = exports.utcFriday.range;\n\n exports.utcSaturday = utcWeekday(6);\n\n exports.utcSaturdays = exports.utcSaturday.range;\n\n var utcWeek = exports.utcSunday;\n\n exports.utcWeeks = utcWeek.range;\n\n var utcMonth = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(1);\n }, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n }, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n });\n\n exports.utcMonths = utcMonth.range;\n\n var utcYear = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCMonth(0, 1);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n });\n\n exports.utcYears = utcYear.range;\n\n exports.interval = newInterval;\n exports.second = second;\n exports.minute = minute;\n exports.hour = hour;\n exports.day = day;\n exports.week = week;\n exports.month = month;\n exports.year = year;\n exports.utcSecond = utcSecond;\n exports.utcMinute = utcMinute;\n exports.utcHour = utcHour;\n exports.utcDay = utcDay;\n exports.utcWeek = utcWeek;\n exports.utcMonth = utcMonth;\n exports.utcYear = utcYear;\n\n}));\n},{}],32:[function(require,module,exports){\nvar util = require('../util'),\n time = require('../time'),\n EPSILON = 1e-15;\n\nfunction bins(opt) {\n if (!opt) { throw Error(\"Missing binning options.\"); }\n\n // determine range\n var maxb = opt.maxbins || 15,\n base = opt.base || 10,\n logb = Math.log(base),\n div = opt.div || [5, 2], \n min = opt.min,\n max = opt.max,\n span = max - min,\n step, level, minstep, precision, v, i, eps;\n\n if (opt.step) {\n // if step size is explicitly given, use that\n step = opt.step;\n } else if (opt.steps) {\n // if provided, limit choice to acceptable step sizes\n step = opt.steps[Math.min(\n opt.steps.length - 1,\n bisect(opt.steps, span/maxb, 0, opt.steps.length)\n )];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = opt.minstep || 0;\n step = Math.max(\n minstep,\n Math.pow(base, Math.round(Math.log(span) / logb) - level)\n );\n \n // increase step size if too many bins\n do { step *= base; } while (Math.ceil(span/step) > maxb);\n\n // decrease step size if allowed\n for (i=0; i= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n precision = v >= 0 ? 0 : ~~(-v / logb) + 1;\n eps = Math.pow(base, -precision - 1);\n min = Math.min(min, Math.floor(min / step + eps) * step);\n max = Math.ceil(max / step) * step;\n\n return {\n start: min,\n stop: max,\n step: step,\n unit: {precision: precision},\n value: value,\n index: index\n };\n}\n\nfunction bisect(a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (util.cmp(a[mid], x) < 0) { lo = mid + 1; }\n else { hi = mid; }\n }\n return lo;\n}\n\nfunction value(v) {\n return this.step * Math.floor(v / this.step + EPSILON);\n}\n\nfunction index(v) {\n return Math.floor((v - this.start) / this.step + EPSILON);\n}\n\nfunction date_value(v) {\n return this.unit.date(value.call(this, v));\n}\n\nfunction date_index(v) {\n return index.call(this, this.unit.unit(v));\n}\n\nbins.date = function(opt) {\n if (!opt) { throw Error(\"Missing date binning options.\"); }\n\n // find time step, then bin\n var units = opt.utc ? time.utc : time,\n dmin = opt.min,\n dmax = opt.max,\n maxb = opt.maxbins || 20,\n minb = opt.minbins || 4,\n span = (+dmax) - (+dmin),\n unit = opt.unit ? units[opt.unit] : units.find(span, minb, maxb),\n spec = bins({\n min: unit.min != null ? unit.min : unit.unit(dmin),\n max: unit.max != null ? unit.max : unit.unit(dmax),\n maxbins: maxb,\n minstep: unit.minstep,\n steps: unit.step\n });\n\n spec.unit = unit;\n spec.index = date_index;\n if (!opt.raw) spec.value = date_value;\n return spec;\n};\n\nmodule.exports = bins;\n\n},{\"../time\":36,\"../util\":37}],33:[function(require,module,exports){\nvar gen = module.exports = {};\n\ngen.repeat = function(val, n) {\n var a = Array(n), i;\n for (i=0; i stop) range.push(j);\n else while ((j = start + step * ++i) < stop) range.push(j);\n return range;\n};\n\ngen.random = {};\n\ngen.random.uniform = function(min, max) {\n if (max === undefined) {\n max = min === undefined ? 1 : min;\n min = 0;\n }\n var d = max - min;\n var f = function() {\n return min + d * Math.random();\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n\ngen.random.integer = function(a, b) {\n if (b === undefined) {\n b = a;\n a = 0;\n }\n var d = b - a;\n var f = function() {\n return a + Math.floor(d * Math.random());\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n\ngen.random.normal = function(mean, stdev) {\n mean = mean || 0;\n stdev = stdev || 1;\n var next;\n var f = function() {\n var x = 0, y = 0, rds, c;\n if (next !== undefined) {\n x = next;\n next = undefined;\n return x;\n }\n do {\n x = Math.random()*2-1;\n y = Math.random()*2-1;\n rds = x*x + y*y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2*Math.log(rds)/rds); // Box-Muller transform\n next = mean + y*c*stdev;\n return mean + x*c*stdev;\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n},{}],34:[function(require,module,exports){\nvar util = require('../util');\n\nvar TYPES = '__types__';\n\nvar PARSERS = {\n boolean: util.boolean,\n integer: util.number,\n number: util.number,\n date: util.date,\n string: function(x) { return x==='' ? null : x; }\n};\n\nvar TESTS = {\n boolean: function(x) { return x==='true' || x==='false' || util.isBoolean(x); },\n integer: function(x) { return TESTS.number(x) && (x=+x) === ~~x; },\n number: function(x) { return !isNaN(+x) && !util.isDate(x); },\n date: function(x) { return !isNaN(Date.parse(x)); }\n};\n\nfunction annotation(data, types) {\n if (!types) return data && data[TYPES] || null;\n data[TYPES] = types;\n}\n\nfunction type(values, f) {\n f = util.$(f);\n var v, i, n;\n\n // if data array has type annotations, use them\n if (values[TYPES]) {\n v = f(values[TYPES]);\n if (util.isString(v)) return v;\n }\n\n for (i=0, n=values.length; !util.isValid(v) && i b) b = v;\n }\n }\n return [a, b];\n};\n\n// Find the integer indices of the minimum and maximum values.\nstats.extent.index = function(values, f) {\n f = util.$(f);\n var x = -1, y = -1, a, b, v, i, n = values.length;\n for (i=0; i b) { b = v; y = i; }\n }\n }\n return [x, y];\n};\n\n// Compute the dot product of two arrays of numbers.\nstats.dot = function(values, a, b) {\n var sum = 0, i, v;\n if (!b) {\n if (values.length !== a.length) {\n throw Error('Array lengths must match.');\n }\n for (i=0; i -1 && p !== v) {\n mu = 1 + (i-1 + tie) / 2;\n for (; tie -1) {\n mu = 1 + (n-1 + tie) / 2;\n for (; tie max) max = x;\n delta = x - mean;\n mean = mean + delta / (++valid);\n M2 = M2 + delta * (x - mean);\n vals.push(x);\n }\n }\n M2 = M2 / (valid - 1);\n sd = Math.sqrt(M2);\n\n // sort values for median and iqr\n vals.sort(util.cmp);\n\n return {\n type: type(values, f),\n unique: u,\n count: values.length,\n valid: valid,\n missing: missing,\n distinct: distinct,\n min: min,\n max: max,\n mean: mean,\n stdev: sd,\n median: (v = stats.quantile(vals, 0.5)),\n q1: stats.quantile(vals, 0.25),\n q3: stats.quantile(vals, 0.75),\n modeskew: sd === 0 ? 0 : (mean - v) / sd\n };\n};\n\n// Compute profiles for all variables in a data set.\nstats.summary = function(data, fields) {\n fields = fields || util.keys(data[0]);\n var s = fields.map(function(f) {\n var p = stats.profile(data, util.$(f));\n return (p.field = f, p);\n });\n return (s.__summary__ = true, s);\n};\n\nmodule.exports = stats;\n},{\"./generate\":33,\"./import/type\":34,\"./util\":37}],36:[function(require,module,exports){\nvar d3_time = require('d3-time');\n\nvar tempDate = new Date(),\n baseDate = new Date(0, 0, 1).setFullYear(0), // Jan 1, 0 AD\n utcBaseDate = new Date(Date.UTC(0, 0, 1)).setUTCFullYear(0);\n\nfunction date(d) {\n return (tempDate.setTime(+d), tempDate);\n}\n\n// create a time unit entry\nfunction entry(type, date, unit, step, min, max) {\n var e = {\n type: type,\n date: date,\n unit: unit\n };\n if (step) {\n e.step = step;\n } else {\n e.minstep = 1;\n }\n if (min != null) e.min = min;\n if (max != null) e.max = max;\n return e;\n}\n\nfunction create(type, unit, base, step, min, max) {\n return entry(type,\n function(d) { return unit.offset(base, d); },\n function(d) { return unit.count(base, d); },\n step, min, max);\n}\n\nvar locale = [\n create('second', d3_time.second, baseDate),\n create('minute', d3_time.minute, baseDate),\n create('hour', d3_time.hour, baseDate),\n create('day', d3_time.day, baseDate, [1, 7]),\n create('month', d3_time.month, baseDate, [1, 3, 6]),\n create('year', d3_time.year, baseDate),\n\n // periodic units\n entry('seconds',\n function(d) { return new Date(1970, 0, 1, 0, 0, d); },\n function(d) { return date(d).getSeconds(); },\n null, 0, 59\n ),\n entry('minutes',\n function(d) { return new Date(1970, 0, 1, 0, d); },\n function(d) { return date(d).getMinutes(); },\n null, 0, 59\n ),\n entry('hours',\n function(d) { return new Date(1970, 0, 1, d); },\n function(d) { return date(d).getHours(); },\n null, 0, 23\n ),\n entry('weekdays',\n function(d) { return new Date(1970, 0, 4+d); },\n function(d) { return date(d).getDay(); },\n [1], 0, 6\n ),\n entry('dates',\n function(d) { return new Date(1970, 0, d); },\n function(d) { return date(d).getDate(); },\n [1], 1, 31\n ),\n entry('months',\n function(d) { return new Date(1970, d % 12, 1); },\n function(d) { return date(d).getMonth(); },\n [1], 0, 11\n )\n];\n\nvar utc = [\n create('second', d3_time.utcSecond, utcBaseDate),\n create('minute', d3_time.utcMinute, utcBaseDate),\n create('hour', d3_time.utcHour, utcBaseDate),\n create('day', d3_time.utcDay, utcBaseDate, [1, 7]),\n create('month', d3_time.utcMonth, utcBaseDate, [1, 3, 6]),\n create('year', d3_time.utcYear, utcBaseDate),\n\n // periodic units\n entry('seconds',\n function(d) { return new Date(Date.UTC(1970, 0, 1, 0, 0, d)); },\n function(d) { return date(d).getUTCSeconds(); },\n null, 0, 59\n ),\n entry('minutes',\n function(d) { return new Date(Date.UTC(1970, 0, 1, 0, d)); },\n function(d) { return date(d).getUTCMinutes(); },\n null, 0, 59\n ),\n entry('hours',\n function(d) { return new Date(Date.UTC(1970, 0, 1, d)); },\n function(d) { return date(d).getUTCHours(); },\n null, 0, 23\n ),\n entry('weekdays',\n function(d) { return new Date(Date.UTC(1970, 0, 4+d)); },\n function(d) { return date(d).getUTCDay(); },\n [1], 0, 6\n ),\n entry('dates',\n function(d) { return new Date(Date.UTC(1970, 0, d)); },\n function(d) { return date(d).getUTCDate(); },\n [1], 1, 31\n ),\n entry('months',\n function(d) { return new Date(Date.UTC(1970, d % 12, 1)); },\n function(d) { return date(d).getUTCMonth(); },\n [1], 0, 11\n )\n];\n\nvar STEPS = [\n [31536e6, 5], // 1-year\n [7776e6, 4], // 3-month\n [2592e6, 4], // 1-month\n [12096e5, 3], // 2-week\n [6048e5, 3], // 1-week\n [1728e5, 3], // 2-day\n [864e5, 3], // 1-day\n [432e5, 2], // 12-hour\n [216e5, 2], // 6-hour\n [108e5, 2], // 3-hour\n [36e5, 2], // 1-hour\n [18e5, 1], // 30-minute\n [9e5, 1], // 15-minute\n [3e5, 1], // 5-minute\n [6e4, 1], // 1-minute\n [3e4, 0], // 30-second\n [15e3, 0], // 15-second\n [5e3, 0], // 5-second\n [1e3, 0] // 1-second\n];\n\nfunction find(units, span, minb, maxb) {\n var step = STEPS[0], i, n, bins;\n\n for (i=1, n=STEPS.length; i step[0]) {\n bins = span / step[0];\n if (bins > maxb) {\n return units[STEPS[i-1][1]];\n }\n if (bins >= minb) {\n return units[step[1]];\n }\n }\n }\n return units[STEPS[n-1][1]];\n}\n\nfunction toUnitMap(units) {\n var map = {}, i, n;\n for (i=0, n=units.length; i 1 ?\n function(x) { return s.reduce(function(x,f) { return x[f]; }, x); } :\n function(x) { return x[f]; }\n );\n};\n\n// short-cut for accessor\nu.$ = u.accessor;\n\nu.mutator = function(f) {\n var s;\n return u.isString(f) && (s=u.field(f)).length > 1 ?\n function(x, v) {\n for (var i=0; i y) return sign[i];\n }\n return 0;\n };\n};\n\nu.cmp = function(a, b) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else if (a >= b) {\n return 0;\n } else if (a === null) {\n return -1;\n } else if (b === null) {\n return 1;\n }\n return NaN;\n};\n\nu.numcmp = function(a, b) { return a - b; };\n\nu.stablesort = function(array, sortBy, keyFn) {\n var indices = array.reduce(function(idx, v, i) {\n return (idx[keyFn(v)] = i, idx);\n }, {});\n\n array.sort(function(a, b) {\n var sa = sortBy(a),\n sb = sortBy(b);\n return sa < sb ? -1 : sa > sb ? 1\n : (indices[keyFn(a)] - indices[keyFn(b)]);\n });\n\n return array;\n};\n\n\n// string functions\n\nu.pad = function(s, length, pos, padchar) {\n padchar = padchar || \" \";\n var d = length - s.length;\n if (d <= 0) return s;\n switch (pos) {\n case 'left':\n return strrep(d, padchar) + s;\n case 'middle':\n case 'center':\n return strrep(Math.floor(d/2), padchar) +\n s + strrep(Math.ceil(d/2), padchar);\n default:\n return s + strrep(d, padchar);\n }\n};\n\nfunction strrep(n, str) {\n var s = \"\", i;\n for (i=0; i 180 || delta < -180\n ? delta - 360 * Math.round(delta / 360)\n : delta;\n }\n\n function Color() {}var reHex3 = /^#([0-9a-f]{3})$/;\n var reHex6 = /^#([0-9a-f]{6})$/;\n var reRgbInteger = /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\n var reRgbPercent = /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var reHslPercent = /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n color.prototype = Color.prototype = {\n displayable: function() {\n return this.rgb().displayable();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n };\n\n function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf))) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? rgb(m[1], m[2], m[3]) // rgb(255,0,0)\n : (m = reRgbPercent.exec(format)) ? rgb(m[1] * 2.55, m[2] * 2.55, m[3] * 2.55) // rgb(100%,0%,0%)\n : (m = reHslPercent.exec(format)) ? hsl(m[1], m[2] * .01, m[3] * .01) // hsl(120,50%,50%)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : null;\n }function rgbn(n) {\n return rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff);\n }\n\n var named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n };\n\n var darker = .7;\n var brighter = 1 / darker;\n\n function rgb(r, g, b) {\n if (arguments.length === 1) {\n if (!(r instanceof Color)) r = color(r);\n if (r) {\n r = r.rgb();\n b = r.b;\n g = r.g;\n r = r.r;\n } else {\n r = g = b = NaN;\n }\n }\n return new Rgb(r, g, b);\n }function Rgb(r, g, b) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n }var ____prototype = rgb.prototype = Rgb.prototype = new Color;\n\n ____prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k);\n };\n\n ____prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k);\n };\n\n ____prototype.rgb = function() {\n return this;\n };\n\n ____prototype.displayable = function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255);\n };\n\n ____prototype.toString = function() {\n return _format(this.r, this.g, this.b);\n };\n\n function _format(r, g, b) {\n return \"#\"\n + (isNaN(r) ? \"00\" : (r = Math.round(r)) < 16 ? \"0\" + Math.max(0, r).toString(16) : Math.min(255, r).toString(16))\n + (isNaN(g) ? \"00\" : (g = Math.round(g)) < 16 ? \"0\" + Math.max(0, g).toString(16) : Math.min(255, g).toString(16))\n + (isNaN(b) ? \"00\" : (b = Math.round(b)) < 16 ? \"0\" + Math.max(0, b).toString(16) : Math.min(255, b).toString(16));\n }\n\n function hsl(h, s, l) {\n if (arguments.length === 1) {\n if (h instanceof Hsl) {\n l = h.l;\n s = h.s;\n h = h.h;\n } else {\n if (!(h instanceof Color)) h = color(h);\n if (h) {\n if (h instanceof Hsl) return h;\n h = h.rgb();\n var r = h.r / 255,\n g = h.g / 255,\n b = h.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n range = max - min;\n l = (max + min) / 2;\n if (range) {\n s = l < .5 ? range / (max + min) : range / (2 - max - min);\n if (r === max) h = (g - b) / range + (g < b) * 6;\n else if (g === max) h = (b - r) / range + 2;\n else h = (r - g) / range + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n } else {\n h = s = l = NaN;\n }\n }\n }\n return new Hsl(h, s, l);\n }function Hsl(h, s, l) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n }var ___prototype = hsl.prototype = Hsl.prototype = new Color;\n\n ___prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k);\n };\n\n ___prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k);\n };\n\n ___prototype.rgb = function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < .5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2)\n );\n };\n\n ___prototype.displayable = function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1);\n };\n\n /* From FvD 13.37, CSS Color Module Level 3 */\n function hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n }\n\n var Kn = 18;\n\n var Xn = 0.950470;\n var Yn = 1;\n var Zn = 1.088830;\n var t0 = 4 / 29;\n var t1 = 6 / 29;\n var t2 = 3 * t1 * t1;\n var t3 = t1 * t1 * t1;\n function lab(l, a, b) {\n if (arguments.length === 1) {\n if (l instanceof Lab) {\n b = l.b;\n a = l.a;\n l = l.l;\n } else if (l instanceof Hcl) {\n var h = l.h * deg2rad;\n b = Math.sin(h) * l.c;\n a = Math.cos(h) * l.c;\n l = l.l;\n } else {\n if (!(l instanceof Rgb)) l = rgb(l);\n var r = rgb2xyz(l.r),\n g = rgb2xyz(l.g),\n b = rgb2xyz(l.b),\n x = xyz2lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / Xn),\n y = xyz2lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / Yn),\n z = xyz2lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / Zn);\n b = 200 * (y - z);\n a = 500 * (x - y);\n l = 116 * y - 16;\n }\n }\n return new Lab(l, a, b);\n }function Lab(l, a, b) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n }var __prototype = lab.prototype = Lab.prototype = new Color;\n\n __prototype.brighter = function(k) {\n return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b);\n };\n\n __prototype.darker = function(k) {\n return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b);\n };\n\n __prototype.rgb = function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Rgb(\n xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z)\n );\n };\n\n function xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n }\n\n function lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n }\n\n function xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n }\n\n function rgb2xyz(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n }\n\n var deg2rad = Math.PI / 180;\n var rad2deg = 180 / Math.PI;\n\n function hcl(h, c, l) {\n if (arguments.length === 1) {\n if (h instanceof Hcl) {\n l = h.l;\n c = h.c;\n h = h.h;\n } else {\n if (!(h instanceof Lab)) h = lab(h);\n l = h.l;\n c = Math.sqrt(h.a * h.a + h.b * h.b);\n h = Math.atan2(h.b, h.a) * rad2deg;\n if (h < 0) h += 360;\n }\n }\n return new Hcl(h, c, l);\n }function Hcl(h, c, l) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n }var _prototype = hcl.prototype = Hcl.prototype = new Color;\n\n _prototype.brighter = function(k) {\n return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k));\n };\n\n _prototype.darker = function(k) {\n return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k));\n };\n\n _prototype.rgb = function() {\n return lab(this).rgb();\n };\n\n var A = -0.14861;\n var B = +1.78277;\n var C = -0.29227;\n var D = -0.90649;\n var E = +1.97294;\n var ED = E * D;\n var EB = E * B;\n var BC_DA = B * C - D * A;\n function cubehelix(h, s, l) {\n if (arguments.length === 1) {\n if (h instanceof Cubehelix) {\n l = h.l;\n s = h.s;\n h = h.h;\n } else {\n if (!(h instanceof Rgb)) h = rgb(h);\n var r = h.r / 255, g = h.g / 255, b = h.b / 255;\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB);\n var bl = b - l, k = (E * (g - l) - C * bl) / D;\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)); // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n if (h < 0) h += 360;\n }\n }\n return new Cubehelix(h, s, l);\n }function Cubehelix(h, s, l) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n }var prototype = cubehelix.prototype = Cubehelix.prototype = new Color;\n\n prototype.brighter = function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k);\n };\n\n prototype.darker = function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k);\n };\n\n prototype.rgb = function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh))\n );\n };\n\n function interpolateCubehelixGamma(gamma) {\n return function(a, b) {\n a = cubehelix(a);\n b = cubehelix(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * Math.pow(t, gamma);\n return a + \"\";\n };\n };\n }\n\n function interpolateCubehelixGammaLong(gamma) {\n return function(a, b) {\n a = cubehelix(a);\n b = cubehelix(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * Math.pow(t, gamma);\n return a + \"\";\n };\n };\n }\n\n function interpolateHclLong(a, b) {\n a = hcl(a);\n b = hcl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n ac = isNaN(a.c) ? b.c : a.c,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bc = isNaN(b.c) ? 0 : b.c - ac,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.c = ac + bc * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateHcl(a, b) {\n a = hcl(a);\n b = hcl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n ac = isNaN(a.c) ? b.c : a.c,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bc = isNaN(b.c) ? 0 : b.c - ac,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.c = ac + bc * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateLab(a, b) {\n a = lab(a);\n b = lab(b);\n var al = a.l,\n aa = a.a,\n ab = a.b,\n bl = b.l - al,\n ba = b.a - aa,\n bb = b.b - ab;\n return function(t) {\n a.l = al + bl * t;\n a.a = aa + ba * t;\n a.b = ab + bb * t;\n return a + \"\";\n };\n }\n\n function interpolateHslLong(a, b) {\n a = hsl(a);\n b = hsl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : b.h - ah,\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateHsl(a, b) {\n a = hsl(a);\n b = hsl(b);\n var ah = isNaN(a.h) ? b.h : a.h,\n as = isNaN(a.s) ? b.s : a.s,\n al = a.l,\n bh = isNaN(b.h) ? 0 : deltaHue(b.h, ah),\n bs = isNaN(b.s) ? 0 : b.s - as,\n bl = b.l - al;\n return function(t) {\n a.h = ah + bh * t;\n a.s = as + bs * t;\n a.l = al + bl * t;\n return a + \"\";\n };\n }\n\n function interpolateRgb(a, b) {\n a = rgb(a);\n b = rgb(b);\n var ar = a.r,\n ag = a.g,\n ab = a.b,\n br = b.r - ar,\n bg = b.g - ag,\n bb = b.b - ab;\n return function(t) {\n return _format(Math.round(ar + br * t), Math.round(ag + bg * t), Math.round(ab + bb * t));\n };\n }\n\n var interpolateCubehelix = interpolateCubehelixGamma(1);\n var interpolateCubehelixLong = interpolateCubehelixGammaLong(1);\n\n exports.interpolateCubehelix = interpolateCubehelix;\n exports.interpolateCubehelixLong = interpolateCubehelixLong;\n exports.color = color;\n exports.rgb = rgb;\n exports.hsl = hsl;\n exports.lab = lab;\n exports.hcl = hcl;\n exports.cubehelix = cubehelix;\n exports.interpolateRgb = interpolateRgb;\n exports.interpolateHsl = interpolateHsl;\n exports.interpolateHslLong = interpolateHslLong;\n exports.interpolateLab = interpolateLab;\n exports.interpolateHcl = interpolateHcl;\n exports.interpolateHclLong = interpolateHclLong;\n exports.interpolateCubehelixGamma = interpolateCubehelixGamma;\n exports.interpolateCubehelixGammaLong = interpolateCubehelixGammaLong;\n\n}));","if (typeof Map === \"undefined\") {\n Map = function() { this.clear(); };\n Map.prototype = {\n set: function(k, v) { this._[k] = v; return this; },\n get: function(k) { return this._[k]; },\n has: function(k) { return k in this._; },\n delete: function(k) { return k in this._ && delete this._[k]; },\n clear: function() { this._ = Object.create(null); },\n get size() { var n = 0; for (var k in this._) ++n; return n; },\n forEach: function(c) { for (var k in this._) c(this._[k], k, this); }\n };\n} else (function() {\n var m = new Map;\n if (m.set(0, 0) !== m) {\n m = m.set;\n Map.prototype.set = function() { m.apply(this, arguments); return this; };\n }\n})();\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n factory((global.format = {}));\n}(this, function (exports) { 'use strict';\n\n var zhCn = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"¥\", \"\"]\n };\n\n var ruRu = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"\\xa0руб.\"]\n };\n\n var ptBr = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"R$\", \"\"]\n };\n\n var plPl = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"zł\"]\n };\n\n var nlNl = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\\xa0\", \"\"]\n };\n\n var mkMk = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0ден.\"]\n };\n\n var jaJp = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"\", \"円\"]\n };\n\n var itIt = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"€\", \"\"]\n };\n\n var heIl = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"₪\", \"\"]\n };\n\n var frFr = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var frCa = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"$\"]\n };\n\n var fiFi = {\n decimal: \",\",\n thousands: \"\\xa0\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var esEs = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var enUs = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n };\n\n var enGb = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"£\", \"\"]\n };\n\n var enCa = {\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n };\n\n var deDe = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n var caEs = {\n decimal: \",\",\n thousands: \".\",\n grouping: [3],\n currency: [\"\", \"\\xa0€\"]\n };\n\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n }\n\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n\n var prefixExponent;\n\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, p + i - 1)[0]; // less than 1y!\n }\n\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n\n function formatDefault(x, p) {\n x = x.toPrecision(p);\n\n out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (x[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n case \"e\": break out;\n default: if (i0 > 0) i0 = 0; break;\n }\n }\n\n return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n }\n\n var formatTypes = {\n \"\": formatDefault,\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n };\n\n\n // [[fill]align][sign][symbol][0][width][,][.precision][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\n function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n }\n\n function FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n var match,\n fill = match[1] || \" \",\n align = match[2] || \">\",\n sign = match[3] || \"-\",\n symbol = match[4] || \"\",\n zero = !!match[5],\n width = match[6] && +match[6],\n comma = !!match[7],\n precision = match[8] && +match[8].slice(1),\n type = match[9] || \"\";\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // Map invalid types to the default format.\n else if (!formatTypes[type]) type = \"\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n this.fill = fill;\n this.align = align;\n this.sign = sign;\n this.symbol = symbol;\n this.zero = zero;\n this.width = width;\n this.comma = comma;\n this.precision = precision;\n this.type = type;\n }\n\n FormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + this.type;\n };\n\n function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n }\n\n var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n function identity(x) {\n return x;\n }\n\n function locale(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal;\n\n function format(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n type = specifier.type;\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = !type || /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? (type ? 6 : 12)\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n return function(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Convert negative to positive, and compute the prefix.\n // Note that -0 is not less than 0, but 1 / -0 is!\n var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\n // Perform the initial formatting.\n value = formatType(value, precision);\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n var i = -1, n = value.length, c;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": return valuePrefix + value + valueSuffix + padding;\n case \"=\": return valuePrefix + padding + value + valueSuffix;\n case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n }\n return padding + valuePrefix + value + valueSuffix;\n };\n }\n\n function formatPrefix(specifier, value) {\n var f = format((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: format,\n formatPrefix: formatPrefix\n };\n }\n\n function precisionRound(step, max) {\n return Math.max(0, exponent(Math.abs(max)) - exponent(Math.abs(step))) + 1;\n }\n\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n\n var localeDefinitions = (new Map)\n .set(\"ca-ES\", caEs)\n .set(\"de-DE\", deDe)\n .set(\"en-CA\", enCa)\n .set(\"en-GB\", enGb)\n .set(\"en-US\", enUs)\n .set(\"es-ES\", esEs)\n .set(\"fi-FI\", fiFi)\n .set(\"fr-CA\", frCa)\n .set(\"fr-FR\", frFr)\n .set(\"he-IL\", heIl)\n .set(\"it-IT\", itIt)\n .set(\"ja-JP\", jaJp)\n .set(\"mk-MK\", mkMk)\n .set(\"nl-NL\", nlNl)\n .set(\"pl-PL\", plPl)\n .set(\"pt-BR\", ptBr)\n .set(\"ru-RU\", ruRu)\n .set(\"zh-CN\", zhCn);\n\n var defaultLocale = locale(enUs);\n exports.format = defaultLocale.format;\n exports.formatPrefix = defaultLocale.formatPrefix;\n\n function localeFormat(definition) {\n if (typeof definition === \"string\") {\n definition = localeDefinitions.get(definition);\n if (!definition) return null;\n }\n return locale(definition);\n }\n ;\n\n exports.localeFormat = localeFormat;\n exports.formatSpecifier = formatSpecifier;\n exports.precisionFixed = precisionFixed;\n exports.precisionPrefix = precisionPrefix;\n exports.precisionRound = precisionRound;\n\n}));","if (typeof Map === \"undefined\") {\n Map = function() { this.clear(); };\n Map.prototype = {\n set: function(k, v) { this._[k] = v; return this; },\n get: function(k) { return this._[k]; },\n has: function(k) { return k in this._; },\n delete: function(k) { return k in this._ && delete this._[k]; },\n clear: function() { this._ = Object.create(null); },\n get size() { var n = 0; for (var k in this._) ++n; return n; },\n forEach: function(c) { for (var k in this._) c(this._[k], k, this); }\n };\n} else (function() {\n var m = new Map;\n if (m.set(0, 0) !== m) {\n m = m.set;\n Map.prototype.set = function() { m.apply(this, arguments); return this; };\n }\n})();\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n factory((global.timeFormat = {}));\n}(this, function (exports) { 'use strict';\n\n var zhCn = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%Y/%-m/%-d\",\n time: \"%H:%M:%S\",\n periods: [\"上午\", \"下午\"],\n days: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n shortDays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n months: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n shortMonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"]\n };\n\n var ruRu = {\n dateTime: \"%A, %e %B %Y г. %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"воскресенье\", \"понедельник\", \"вторник\", \"среда\", \"четверг\", \"пятница\", \"суббота\"],\n shortDays: [\"вс\", \"пн\", \"вт\", \"ср\", \"чт\", \"пт\", \"сб\"],\n months: [\"января\", \"февраля\", \"марта\", \"апреля\", \"мая\", \"июня\", \"июля\", \"августа\", \"сентября\", \"октября\", \"ноября\", \"декабря\"],\n shortMonths: [\"янв\", \"фев\", \"мар\", \"апр\", \"май\", \"июн\", \"июл\", \"авг\", \"сен\", \"окт\", \"ноя\", \"дек\"]\n };\n\n var ptBr = {\n dateTime: \"%A, %e de %B de %Y. %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"],\n shortDays: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sáb\"],\n months: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n shortMonths: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"]\n };\n\n var plPl = {\n dateTime: \"%A, %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"],\n shortDays: [\"Niedz.\", \"Pon.\", \"Wt.\", \"Śr.\", \"Czw.\", \"Pt.\", \"Sob.\"],\n months: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\n shortMonths: [\"Stycz.\", \"Luty\", \"Marz.\", \"Kwie.\", \"Maj\", \"Czerw.\", \"Lipc.\", \"Sierp.\", \"Wrz.\", \"Paźdz.\", \"Listop.\", \"Grudz.\"]/* In Polish language abbraviated months are not commonly used so there is a dispute about the proper abbraviations. */\n };\n\n var nlNl = {\n dateTime: \"%a %e %B %Y %T\",\n date: \"%d-%m-%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"zondag\", \"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"],\n shortDays: [\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"],\n months: [\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"],\n shortMonths: [\"jan\", \"feb\", \"mrt\", \"apr\", \"mei\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"]\n };\n\n var mkMk = {\n dateTime: \"%A, %e %B %Y г. %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"недела\", \"понеделник\", \"вторник\", \"среда\", \"четврток\", \"петок\", \"сабота\"],\n shortDays: [\"нед\", \"пон\", \"вто\", \"сре\", \"чет\", \"пет\", \"саб\"],\n months: [\"јануари\", \"февруари\", \"март\", \"април\", \"мај\", \"јуни\", \"јули\", \"август\", \"септември\", \"октомври\", \"ноември\", \"декември\"],\n shortMonths: [\"јан\", \"фев\", \"мар\", \"апр\", \"мај\", \"јун\", \"јул\", \"авг\", \"сеп\", \"окт\", \"ное\", \"дек\"]\n };\n\n var itIt = {\n dateTime: \"%A %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"],\n shortDays: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"],\n months: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\n shortMonths: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"]\n };\n\n var heIl = {\n dateTime: \"%A, %e ב%B %Y %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\n shortDays: [\"א׳\", \"ב׳\", \"ג׳\", \"ד׳\", \"ה׳\", \"ו׳\", \"ש׳\"],\n months: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\n shortMonths: [\"ינו׳\", \"פבר׳\", \"מרץ\", \"אפר׳\", \"מאי\", \"יוני\", \"יולי\", \"אוג׳\", \"ספט׳\", \"אוק׳\", \"נוב׳\", \"דצמ׳\"]\n };\n\n var frFr = {\n dateTime: \"%A, le %e %B %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n shortDays: [\"dim.\", \"lun.\", \"mar.\", \"mer.\", \"jeu.\", \"ven.\", \"sam.\"],\n months: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n shortMonths: [\"janv.\", \"févr.\", \"mars\", \"avr.\", \"mai\", \"juin\", \"juil.\", \"août\", \"sept.\", \"oct.\", \"nov.\", \"déc.\"]\n };\n\n var frCa = {\n dateTime: \"%a %e %b %Y %X\",\n date: \"%Y-%m-%d\",\n time: \"%H:%M:%S\",\n periods: [\"\", \"\"],\n days: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n shortDays: [\"dim\", \"lun\", \"mar\", \"mer\", \"jeu\", \"ven\", \"sam\"],\n months: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n shortMonths: [\"jan\", \"fév\", \"mar\", \"avr\", \"mai\", \"jui\", \"jul\", \"aoû\", \"sep\", \"oct\", \"nov\", \"déc\"]\n };\n\n var fiFi = {\n dateTime: \"%A, %-d. %Bta %Y klo %X\",\n date: \"%-d.%-m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"a.m.\", \"p.m.\"],\n days: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"],\n shortDays: [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"],\n months: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"],\n shortMonths: [\"Tammi\", \"Helmi\", \"Maalis\", \"Huhti\", \"Touko\", \"Kesä\", \"Heinä\", \"Elo\", \"Syys\", \"Loka\", \"Marras\", \"Joulu\"]\n };\n\n var esEs = {\n dateTime: \"%A, %e de %B de %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"domingo\", \"lunes\", \"martes\", \"miércoles\", \"jueves\", \"viernes\", \"sábado\"],\n shortDays: [\"dom\", \"lun\", \"mar\", \"mié\", \"jue\", \"vie\", \"sáb\"],\n months: [\"enero\", \"febrero\", \"marzo\", \"abril\", \"mayo\", \"junio\", \"julio\", \"agosto\", \"septiembre\", \"octubre\", \"noviembre\", \"diciembre\"],\n shortMonths: [\"ene\", \"feb\", \"mar\", \"abr\", \"may\", \"jun\", \"jul\", \"ago\", \"sep\", \"oct\", \"nov\", \"dic\"]\n };\n\n var enUs = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var enGb = {\n dateTime: \"%a %e %b %X %Y\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var enCa = {\n dateTime: \"%a %b %e %X %Y\",\n date: \"%Y-%m-%d\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n };\n\n var deDe = {\n dateTime: \"%A, der %e. %B %Y, %X\",\n date: \"%d.%m.%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"], // unused\n days: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n shortDays: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n months: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mrz\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"]\n };\n\n var caEs = {\n dateTime: \"%A, %e de %B de %Y, %X\",\n date: \"%d/%m/%Y\",\n time: \"%H:%M:%S\",\n periods: [\"AM\", \"PM\"],\n days: [\"diumenge\", \"dilluns\", \"dimarts\", \"dimecres\", \"dijous\", \"divendres\", \"dissabte\"],\n shortDays: [\"dg.\", \"dl.\", \"dt.\", \"dc.\", \"dj.\", \"dv.\", \"ds.\"],\n months: [\"gener\", \"febrer\", \"març\", \"abril\", \"maig\", \"juny\", \"juliol\", \"agost\", \"setembre\", \"octubre\", \"novembre\", \"desembre\"],\n shortMonths: [\"gen.\", \"febr.\", \"març\", \"abr.\", \"maig\", \"juny\", \"jul.\", \"ag.\", \"set.\", \"oct.\", \"nov.\", \"des.\"]\n };\n\n var t0 = new Date;\n var t1 = new Date;\n\n function newInterval(floori, offseti, count) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.round = function(date) {\n var d0 = new Date(+date),\n d1 = new Date(date - 1);\n floori(d0), floori(d1), offseti(d1, 1);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), date;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [];\n start = new Date(start - 1);\n stop = new Date(+stop);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n offseti(start, 1), floori(start);\n if (start < stop) range.push(new Date(+start));\n while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start));\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n while (--step >= 0) while (offseti(date, 1), !test(date));\n });\n };\n\n if (count) interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n return interval;\n }\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5;\n });\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5;\n });\n }\n\n var sunday = weekday(0);\n var monday = weekday(1);\n\n var year = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n });\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / 864e5;\n });\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / 6048e5;\n });\n }\n\n var utcSunday = utcWeekday(0);\n var utcMonday = utcWeekday(1);\n\n var utcYear = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCMonth(0, 1);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n });\n\n function localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n function utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n function newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n }\n\n function locale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"S\": formatSeconds,\n \"U\": formatWeekNumberSunday,\n \"w\": formatWeekdayNumber,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"S\": formatUTCSeconds,\n \"U\": formatUTCWeekNumberSunday,\n \"w\": formatUTCWeekdayNumber,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"S\": parseSeconds,\n \"U\": parseWeekNumberSunday,\n \"w\": parseWeekdayNumber,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n if (format = formats[c]) c = format(date, pad == null ? (c === \"e\" ? \" \" : \"0\") : pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string, 0);\n if (i != string.length) return null;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n var day = utcDate(newYear(d.y)).getUTCDay();\n if (\"W\" in d) d.U = d.W, d.w = (d.w + 6) % 7, --day;\n d.m = 0;\n d.d = d.w + d.U * 7 - (day + 6) % 7;\n }\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n var day = newDate(newYear(d.y)).getDay();\n if (\"W\" in d) d.U = d.W, d.w = (d.w + 6) % 7, --day;\n d.m = 0;\n d.d = d.w + d.U * 7 - (day + 6) % 7;\n }\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function parsePeriod(d, string, i) {\n var n = periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (d.p = n, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.parse = newParse(specifier, localDate);\n f.toString = function() { return specifier; };\n return f;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.parse = newParse(specifier, utcDate);\n f.toString = function() { return specifier; };\n return f;\n }\n };\n }\n\n var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\n var numberRe = /^\\s*\\d+/;\n var percentRe = /^%/;\n var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n function pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n function requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n }\n\n function formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n }\n\n function formatLookup(names) {\n var map = new Map, i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n\n function parseWeekdayNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n\n function parseZone(d, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5))\n ? (d.Z = -string, i + 5) // sign differs from getTimezoneOffset!\n : -1;\n }\n\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n }\n\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n\n function formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n }\n\n function formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n }\n\n function formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n }\n\n function formatDayOfYear(d, p) {\n return pad(1 + day.count(year(d), d), p, 3);\n }\n\n function formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n }\n\n function formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n }\n\n function formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n }\n\n function formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n }\n\n function formatWeekNumberSunday(d, p) {\n return pad(sunday.count(year(d), d), p, 2);\n }\n\n function formatWeekdayNumber(d) {\n return d.getDay();\n }\n\n function formatWeekNumberMonday(d, p) {\n return pad(monday.count(year(d), d), p, 2);\n }\n\n function formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n }\n\n function formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n }\n\n function formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n }\n\n function formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n }\n\n function formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n }\n\n function formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n }\n\n function formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n }\n\n function formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n }\n\n function formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n }\n\n function formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n }\n\n function formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n }\n\n function formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n }\n\n function formatUTCWeekdayNumber(d) {\n return d.getUTCDay();\n }\n\n function formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n }\n\n function formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n }\n\n function formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n }\n\n function formatUTCZone() {\n return \"+0000\";\n }\n\n function formatLiteralPercent() {\n return \"%\";\n }\n\n var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n function formatIsoNative(date) {\n return date.toISOString();\n }\n\n formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n\n formatIsoNative.toString = function() {\n return isoSpecifier;\n };\n\n var formatIso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\")\n ? formatIsoNative\n : enUs.utcFormat(isoSpecifier);\n\n var isoFormat = formatIso;\n\n var localeDefinitions = (new Map)\n .set(\"ca-ES\", caEs)\n .set(\"de-DE\", deDe)\n .set(\"en-CA\", enCa)\n .set(\"en-GB\", enGb)\n .set(\"en-US\", enUs)\n .set(\"es-ES\", esEs)\n .set(\"fi-FI\", fiFi)\n .set(\"fr-CA\", frCa)\n .set(\"fr-FR\", frFr)\n .set(\"he-IL\", heIl)\n .set(\"it-IT\", itIt)\n .set(\"mk-MK\", mkMk)\n .set(\"nl-NL\", nlNl)\n .set(\"pl-PL\", plPl)\n .set(\"pt-BR\", ptBr)\n .set(\"ru-RU\", ruRu)\n .set(\"zh-CN\", zhCn);\n\n var defaultLocale = locale(enUs);\n exports.format = defaultLocale.format;\n exports.utcFormat = defaultLocale.utcFormat;\n\n function localeFormat(definition) {\n if (typeof definition === \"string\") {\n definition = localeDefinitions.get(definition);\n if (!definition) return null;\n }\n return locale(definition);\n }\n ;\n\n exports.localeFormat = localeFormat;\n exports.isoFormat = isoFormat;\n\n}));","'use strict';\n\nrequire('./globals');\n\nvar consts = require('./consts'),\n util = require('./util'),\n vlfield = require('./field'),\n vlenc = require('./enc'),\n schema = require('./schema/schema');\n\nmodule.exports = (function() {\n function Encoding(spec, theme) {\n var defaults = schema.instantiate(),\n specExtended = schema.util.merge(defaults, theme || {}, spec) ;\n\n this._data = specExtended.data;\n this._marktype = specExtended.marktype;\n this._enc = specExtended.encoding;\n this._config = specExtended.config;\n this._filter = specExtended.filter;\n // this._vega2 = true;\n }\n\n var proto = Encoding.prototype;\n\n Encoding.fromShorthand = function(shorthand, data, config, theme) {\n var c = consts.shorthand,\n split = shorthand.split(c.delim),\n marktype = split.shift().split(c.assign)[1].trim(),\n enc = vlenc.fromShorthand(split);\n\n return new Encoding({\n data: data,\n marktype: marktype,\n encoding: enc,\n config: config,\n filter: []\n }, theme);\n };\n\n Encoding.fromSpec = function(spec, theme) {\n return new Encoding(spec, theme);\n };\n\n proto.toShorthand = function() {\n var c = consts.shorthand;\n return 'mark' + c.assign + this._marktype +\n c.delim + vlenc.shorthand(this._enc);\n };\n\n Encoding.shorthand = function (spec) {\n var c = consts.shorthand;\n return 'mark' + c.assign + spec.marktype +\n c.delim + vlenc.shorthand(spec.encoding);\n };\n\n Encoding.specFromShorthand = function(shorthand, data, config, excludeConfig) {\n return Encoding.fromShorthand(shorthand, data, config).toSpec(excludeConfig);\n };\n\n proto.toSpec = function(excludeConfig, excludeData) {\n var enc = util.duplicate(this._enc),\n spec;\n\n spec = {\n marktype: this._marktype,\n encoding: enc,\n filter: this._filter\n };\n\n if (!excludeConfig) {\n spec.config = util.duplicate(this._config);\n }\n\n if (!excludeData) {\n spec.data = util.duplicate(this._data);\n }\n\n // remove defaults\n var defaults = schema.instantiate();\n return schema.util.subtract(spec, defaults);\n };\n\n\n proto.marktype = function() {\n return this._marktype;\n };\n\n proto.is = function(m) {\n return this._marktype === m;\n };\n\n proto.has = function(encType) {\n // equivalent to calling vlenc.has(this._enc, encType)\n return this._enc[encType].name !== undefined;\n };\n\n proto.field = function(et) {\n return this._enc[et];\n };\n\n proto.filter = function() {\n var filterNull = [],\n fields = this.fields(),\n self = this;\n\n util.forEach(fields, function(fieldList, fieldName) {\n if (fieldName === '*') return; //count\n\n if ((self.config('filterNull').Q && fieldList.containsType[Q]) ||\n (self.config('filterNull').T && fieldList.containsType[T]) ||\n (self.config('filterNull').O && fieldList.containsType[O]) ||\n (self.config('filterNull').N && fieldList.containsType[N])) {\n filterNull.push({\n operands: [fieldName],\n operator: 'notNull'\n });\n }\n });\n\n return filterNull.concat(this._filter);\n };\n\n // get \"field\" reference for vega\n proto.fieldRef = function(et, opt) {\n opt = opt || {};\n opt.data = !this._vega2 && (opt.data !== false);\n return vlfield.fieldRef(this._enc[et], opt);\n };\n\n proto.fieldName = function(et) {\n return this._enc[et].name;\n };\n\n /*\n * return key-value pairs of field name and list of fields of that field name\n */\n proto.fields = function() {\n return vlenc.fields(this._enc);\n };\n\n proto.fieldTitle = function(et) {\n if (vlfield.isCount(this._enc[et])) {\n return vlfield.count.displayName;\n }\n var fn = this._enc[et].aggregate || this._enc[et].timeUnit || (this._enc[et].bin && 'bin');\n if (fn) {\n var uppercase = fn === 'avg' ? 'MEAN' :fn.toUpperCase();\n return uppercase + '(' + this._enc[et].name + ')';\n } else {\n return this._enc[et].name;\n }\n };\n\n proto.scale = function(et) {\n return this._enc[et].scale || {};\n };\n\n proto.axis = function(et) {\n return this._enc[et].axis || {};\n };\n\n proto.bandSize = function(encType, useSmallBand) {\n useSmallBand = useSmallBand ||\n //isBandInSmallMultiples\n (encType === Y && this.has(ROW) && this.has(Y)) ||\n (encType === X && this.has(COL) && this.has(X));\n\n // if band.size is explicitly specified, follow the specification, otherwise draw value from config.\n return this.field(encType).band.size ||\n this.config(useSmallBand ? 'smallBandSize' : 'largeBandSize');\n };\n\n proto.aggregate = function(et) {\n return this._enc[et].aggregate;\n };\n\n // returns false if binning is disabled, otherwise an object with binning properties\n proto.bin = function(et) {\n var bin = this._enc[et].bin;\n if (bin === {})\n return false;\n if (bin === true)\n return {\n maxbins: schema.MAXBINS_DEFAULT\n };\n return bin;\n };\n\n proto.value = function(et) {\n return this._enc[et].value;\n };\n\n proto.numberFormat = function(fieldStats) {\n var formatConfig = fieldStats.max > this.config('maxSmallNumber') ?\n 'largeNumberFormat': 'smallNumberFormat';\n return this.config(formatConfig);\n };\n\n proto.sort = function(et, stats) {\n var sort = this._enc[et].sort,\n enc = this._enc,\n isTypes = vlfield.isTypes;\n\n if ((!sort || sort.length===0) &&\n // FIXME\n Encoding.toggleSort.support({encoding:this._enc}, stats, true) && //HACK\n this.config('toggleSort') === Q\n ) {\n var qField = isTypes(enc.x, [N, O]) ? enc.y : enc.x;\n\n if (isTypes(enc[et], [N, O])) {\n sort = [{\n name: qField.name,\n aggregate: qField.aggregate,\n type: qField.type,\n reverse: true\n }];\n }\n }\n\n return sort;\n };\n\n proto.map = function(f) {\n return vlenc.map(this._enc, f);\n };\n\n proto.reduce = function(f, init) {\n return vlenc.reduce(this._enc, f, init);\n };\n\n proto.forEach = function(f) {\n return vlenc.forEach(this._enc, f);\n };\n\n proto.type = function(et) {\n return this.has(et) ? this._enc[et].type : null;\n };\n\n proto.isType = function(et, type) {\n var field = this.field(et);\n return field && vlfield.isType(field, type);\n };\n\n\n proto.isTypes = function(et, type) {\n var field = this.field(et);\n return field && vlfield.isTypes(field, type);\n };\n\n Encoding.isOrdinalScale = function(encoding, encType) {\n return vlfield.isOrdinalScale(encoding.field(encType));\n };\n\n Encoding.isDimension = function(encoding, encType) {\n return vlfield.isDimension(encoding.field(encType));\n };\n\n Encoding.isMeasure = function(encoding, encType) {\n return vlfield.isMeasure(encoding.field(encType));\n };\n\n proto.isOrdinalScale = function(encType) {\n return this.has(encType) && Encoding.isOrdinalScale(this, encType);\n };\n\n proto.isDimension = function(encType) {\n return this.has(encType) && Encoding.isDimension(this, encType);\n };\n\n proto.isMeasure = function(encType) {\n return this.has(encType) && Encoding.isMeasure(this, encType);\n };\n\n proto.isAggregate = function() {\n return vlenc.isAggregate(this._enc);\n };\n\n proto.dataTable = function() {\n return this.isAggregate() ? AGGREGATE : RAW;\n };\n\n Encoding.isAggregate = function(spec) {\n return vlenc.isAggregate(spec.encoding);\n };\n\n Encoding.alwaysNoOcclusion = function(spec) {\n // FIXME raw OxQ with # of rows = # of O\n return vlenc.isAggregate(spec.encoding);\n };\n\n Encoding.isStack = function(spec) {\n // FIXME update this once we have control for stack ...\n return (spec.marktype === 'bar' || spec.marktype === 'area') &&\n spec.encoding.color;\n };\n\n proto.isStack = function() {\n // FIXME update this once we have control for stack ...\n return (this.is('bar') || this.is('area')) && this.has('color');\n };\n\n proto.details = function() {\n var encoding = this;\n return this.reduce(function(refs, field, encType) {\n if (!field.aggregate && (encType !== X && encType !== Y)) {\n refs.push(encoding.fieldRef(encType));\n }\n return refs;\n }, []);\n };\n\n proto.facets = function() {\n var encoding = this;\n return this.reduce(function(refs, field, encType) {\n if (!field.aggregate && (encType == ROW || encType == COL)) {\n refs.push(encoding.fieldRef(encType));\n }\n return refs;\n }, []);\n };\n\n proto.cardinality = function(encType, stats) {\n return vlfield.cardinality(this.field(encType), stats, this.config('filterNull'));\n };\n\n proto.isRaw = function() {\n return !this.isAggregate();\n };\n\n proto.data = function() {\n return this._data;\n };\n\n // returns whether the encoding has values embedded\n proto.hasValues = function() {\n var vals = this.data().values;\n return vals && vals.length;\n };\n\n proto.config = function(name) {\n return this._config[name];\n };\n\n Encoding.transpose = function(spec) {\n var oldenc = spec.encoding,\n enc = util.duplicate(spec.encoding);\n enc.x = oldenc.y;\n enc.y = oldenc.x;\n enc.row = oldenc.col;\n enc.col = oldenc.row;\n spec.encoding = enc;\n return spec;\n };\n\n // FIXME: REMOVE everything below here\n\n Encoding.toggleSort = function(spec) {\n spec.config = spec.config || {};\n spec.config.toggleSort = spec.config.toggleSort === Q ? N : Q;\n return spec;\n };\n\n\n Encoding.toggleSort.direction = function(spec) {\n if (!Encoding.toggleSort.support(spec)) { return; }\n var enc = spec.encoding;\n return enc.x.type === N ? 'x' : 'y';\n };\n\n Encoding.toggleSort.mode = function(spec) {\n return spec.config.toggleSort;\n };\n\n Encoding.toggleSort.support = function(spec, stats) {\n var enc = spec.encoding,\n isTypes = vlfield.isTypes;\n\n if (vlenc.has(enc, ROW) || vlenc.has(enc, COL) ||\n !vlenc.has(enc, X) || !vlenc.has(enc, Y) ||\n !Encoding.alwaysNoOcclusion(spec, stats)) {\n return false;\n }\n\n return ( isTypes(enc.x, [N,O]) && vlfield.isMeasure(enc.y)) ? 'x' :\n ( isTypes(enc.y, [N,O]) && vlfield.isMeasure(enc.x)) ? 'y' : false;\n };\n\n Encoding.toggleFilterNullO = function(spec) {\n spec.config = spec.config || {};\n spec.config.filterNull = spec.config.filterNull || { //FIXME\n T: true,\n Q: true\n };\n spec.config.filterNull.O = !spec.config.filterNull.O;\n return spec;\n };\n\n Encoding.toggleFilterNullO.support = function(spec, stats) {\n var fields = vlenc.fields(spec.encoding);\n for (var fieldName in fields) {\n var fieldList = fields[fieldName];\n if (fieldList.containsType.O && fieldName in stats && stats[fieldName].nulls > 0) {\n return true;\n }\n }\n return false;\n };\n\n return Encoding;\n})();\n","'use strict';\n\nrequire('../globals');\n\nvar util = require('../util'),\n setter = util.setter,\n getter = util.getter,\n time = require('./time');\n\nvar axis = module.exports = {};\n\naxis.def = function(name, encoding, layout, stats, opt) {\n var isCol = name == COL,\n isRow = name == ROW,\n type = isCol ? 'x' : isRow ? 'y' : name;\n\n var def = {\n type: type,\n scale: name,\n properties: {},\n layer: encoding.field(name).axis.layer,\n orient: axis.orient(name, encoding, stats)\n };\n\n // Add axis label custom scale (for bin / time)\n def = axis.labels.scale(def, encoding, name);\n def = axis.labels.format(def, name, encoding, stats);\n def = axis.labels.angle(def, encoding, name);\n\n // for x-axis, set ticks for Q or rotate scale for ordinal scale\n if (name == X) {\n if ((encoding.isDimension(X) || encoding.isType(X, T)) &&\n !('angle' in getter(def, ['properties', 'labels']))) {\n // TODO(kanitw): Jul 19, 2015 - #506 add condition for rotation\n def = axis.labels.rotate(def);\n } else { // Q\n def.ticks = encoding.field(name).axis.ticks;\n }\n }\n\n // TitleOffset depends on labels rotation\n def.titleOffset = axis.titleOffset(encoding, layout, name);\n\n //def.offset is used in axis.grid\n if(isRow) def.offset = axis.titleOffset(encoding, layout, Y) + 20;\n // FIXME(kanitw): Jul 19, 2015 - offset for column when x is put on top\n\n def = axis.grid(def, name, encoding, layout);\n def = axis.title(def, name, encoding, layout, opt);\n\n if (isRow || isCol) def = axis.hideTicks(def);\n\n return def;\n};\n\naxis.orient = function(name, encoding, stats) {\n var orient = encoding.field(name).axis.orient;\n if (orient) return orient;\n\n if (name === COL) return 'top';\n\n // x-axis for long y - put on top\n if (name === X && encoding.has(Y) && encoding.isOrdinalScale(Y) && encoding.cardinality(Y, stats) > 30) {\n return 'top';\n }\n\n return undefined;\n};\n\naxis.grid = function(def, name, encoding, layout) {\n var cellPadding = layout.cellPadding,\n isCol = name == COL,\n isRow = name == ROW;\n\n if (encoding.axis(name).grid) {\n def.grid = true;\n\n if (isCol) {\n // set grid property -- put the lines on the right the cell\n def.properties.grid = {\n x: {\n offset: layout.cellWidth * (1+ cellPadding/2.0),\n // default value(s) -- vega doesn't do recursive merge\n scale: 'col'\n },\n y: {\n value: -layout.cellHeight * (cellPadding/2),\n },\n stroke: { value: encoding.config('cellGridColor') },\n opacity: { value: encoding.config('cellGridOpacity') }\n };\n } else if (isRow) {\n // set grid property -- put the lines on the top\n def.properties.grid = {\n y: {\n offset: -layout.cellHeight * (cellPadding/2),\n // default value(s) -- vega doesn't do recursive merge\n scale: 'row'\n },\n x: {\n value: def.offset\n },\n x2: {\n offset: def.offset + (layout.cellWidth * 0.05),\n // default value(s) -- vega doesn't do recursive merge\n group: 'mark.group.width',\n mult: 1\n },\n stroke: { value: encoding.config('cellGridColor') },\n opacity: { value: encoding.config('cellGridOpacity') }\n };\n } else {\n def.properties.grid = {\n stroke: { value: encoding.config('gridColor') },\n opacity: { value: encoding.config('gridOpacity') }\n };\n }\n }\n return def;\n};\n\naxis.hideTicks = function(def) {\n def.properties.ticks = {opacity: {value: 0}};\n def.properties.majorTicks = {opacity: {value: 0}};\n def.properties.axis = {opacity: {value: 0}};\n return def;\n};\n\naxis.title = function (def, name, encoding, layout) {\n var ax = encoding.field(name).axis;\n\n if (ax.title) {\n def.title = ax.title;\n } else {\n // if not defined, automatically determine axis title from field def\n var fieldTitle = encoding.fieldTitle(name),\n maxLength;\n\n if (ax.titleMaxLength) {\n maxLength = ax.titleMaxLength;\n } else if (name===X) {\n maxLength = layout.cellWidth / encoding.config('characterWidth');\n } else if (name === Y) {\n maxLength = layout.cellHeight / encoding.config('characterWidth');\n }\n\n def.title = maxLength ? util.truncate(fieldTitle, maxLength) : fieldTitle;\n }\n\n if (name === ROW) {\n def.properties.title = {\n angle: {value: 0},\n align: {value: 'right'},\n baseline: {value: 'middle'},\n dy: {value: (-layout.height/2) -20}\n };\n }\n\n return def;\n};\n\naxis.labels = {};\n\n/** add custom label for time type and bin */\naxis.labels.scale = function(def, encoding, name) {\n // time\n var timeUnit = encoding.field(name).timeUnit;\n if (encoding.isType(name, T) && timeUnit && (time.hasScale(timeUnit))) {\n setter(def, ['properties','labels','text','scale'], 'time-'+ timeUnit);\n }\n // FIXME bin\n return def;\n};\n\n/**\n * Determine number format or truncate if maxLabel length is presented.\n */\naxis.labels.format = function (def, name, encoding, stats) {\n var fieldStats = stats[encoding.field(name).name];\n\n if (encoding.axis(name).format) {\n def.format = encoding.axis(name).format;\n } else if (encoding.isType(name, Q) || fieldStats.type === 'number') {\n def.format = encoding.numberFormat(fieldStats);\n } else if (encoding.isType(name, T)) {\n var timeUnit = encoding.field(name).timeUnit;\n if (!timeUnit) {\n def.format = encoding.config('timeFormat');\n } else if (timeUnit === 'year') {\n def.format = 'd';\n }\n } else if (encoding.isTypes(name, [N, O]) && encoding.axis(name).maxLabelLength) {\n setter(def,\n ['properties','labels','text','template'],\n '{{data | truncate:' + encoding.axis(name).maxLabelLength + '}}'\n );\n }\n\n return def;\n};\n\naxis.labels.angle = function(def, encoding, name) {\n var angle = encoding.axis(name).labelAngle;\n if (typeof angle === 'undefined') return def;\n\n setter(def, ['properties', 'labels', 'angle', 'value'], angle);\n return def;\n};\n\naxis.labels.rotate = function(def) {\n var align = def.orient ==='top' ? 'left' : 'right';\n setter(def, ['properties','labels', 'angle', 'value'], 270);\n setter(def, ['properties','labels', 'align', 'value'], align);\n setter(def, ['properties','labels', 'baseline', 'value'], 'middle');\n return def;\n};\n\naxis.titleOffset = function (encoding, layout, name) {\n // return specified value if specified\n var value = encoding.axis(name).titleOffset;\n if (value) return value;\n\n switch (name) {\n //FIXME make this adjustable\n case ROW: return 0;\n case COL: return 35;\n }\n return getter(layout, [name, 'axisTitleOffset']);\n};\n","'use strict';\n\nvar summary = module.exports = require('datalib/src/stats').summary;\n\nrequire('../globals');\n\n/**\n * Module for compiling Vega-lite spec into Vega spec.\n */\nvar compiler = module.exports = {};\n\nvar Encoding = require('../Encoding'),\n axis = compiler.axis = require('./axis'),\n legend = compiler.legend = require('./legend'),\n marks = compiler.marks = require('./marks'),\n scale = compiler.scale = require('./scale');\n\ncompiler.data = require('./data');\ncompiler.facet = require('./facet');\ncompiler.layout = require('./layout');\ncompiler.sort = require('./sort');\ncompiler.stack = require('./stack');\ncompiler.style = require('./style');\ncompiler.subfacet = require('./subfacet');\ncompiler.time = require('./time');\n\ncompiler.compile = function (spec, stats, theme) {\n return compiler.compileEncoding(Encoding.fromSpec(spec, theme), stats);\n};\n\ncompiler.shorthand = function (shorthand, stats, config, theme) {\n return compiler.compileEncoding(Encoding.fromShorthand(shorthand, config, theme), stats);\n};\n\n/**\n * Create a Vega specification from a Vega-lite Encoding object.\n */\ncompiler.compileEncoding = function (encoding, stats) {\n // no need to pass stats if you pass in the data\n if (!stats) {\n if (encoding.hasValues()) {\n stats = summary(encoding.data().values).reduce(function(s, p) {\n s[p.field] = p;\n return s;\n }, {});\n } else {\n console.error('No stats provided and data is not embedded.');\n }\n }\n\n var layout = compiler.layout(encoding, stats);\n\n var spec = {\n width: layout.width,\n height: layout.height,\n padding: 'auto',\n data: compiler.data(encoding),\n // global scales contains only time unit scales\n scales: compiler.time.scales(encoding),\n marks: [{\n _name: 'cell',\n type: 'group',\n properties: {\n enter: {\n width: layout.cellWidth ? {value: layout.cellWidth} : {group: 'width'},\n height: layout.cellHeight ? {value: layout.cellHeight} : {group: 'height'}\n }\n }\n }]\n };\n\n var group = spec.marks[0];\n\n // FIXME remove compiler.sort after migrating to vega 2.\n spec.data = compiler.sort(spec.data, encoding, stats); // append new data\n\n // marks\n var style = compiler.style(encoding, stats),\n mdefs = group.marks = marks.def(encoding, layout, style, stats),\n mdef = mdefs[mdefs.length - 1]; // TODO: remove this dirty hack by refactoring the whole flow\n\n var lineType = marks[encoding.marktype()].line;\n\n // handle subfacets\n\n var details = encoding.details(),\n stack = encoding.isAggregate() && details.length > 0 && compiler.stack(spec.data, encoding, mdef); // modify spec.data, mdef.{from,properties}\n\n if (details.length > 0 && (stack || lineType)) {\n //subfacet to group stack / line together in one group\n compiler.subfacet(group, mdef, details, stack, encoding);\n }\n\n // auto-sort line/area values\n if (lineType && encoding.config('autoSortLine')) {\n var f = (encoding.isMeasure(X) && encoding.isDimension(Y)) ? Y : X;\n if (!mdef.from) mdef.from = {};\n // TODO: why - ?\n mdef.from.transform = [{type: 'sort', by: '-' + encoding.fieldRef(f)}];\n }\n\n // get a flattened list of all scale names that are used in the vl spec\n var singleScaleNames = [].concat.apply([], mdefs.map(function(markProps) {\n return scale.names(markProps.properties.update);\n }));\n\n // Small Multiples\n if (encoding.has(ROW) || encoding.has(COL)) {\n spec = compiler.facet(group, encoding, layout, spec, singleScaleNames, stack, stats);\n spec.legends = legend.defs(encoding, style);\n } else {\n group.scales = scale.defs(singleScaleNames, encoding, layout, stats, {stack: stack});\n\n group.axes = [];\n if (encoding.has(X)) group.axes.push(axis.def(X, encoding, layout, stats));\n if (encoding.has(Y)) group.axes.push(axis.def(Y, encoding, layout, stats));\n\n group.legends = legend.defs(encoding, style);\n }\n\n return spec;\n};\n\n","'use strict';\n\nrequire('../globals');\n\nmodule.exports = data;\n\nvar vlfield = require('../field'),\n util = require('../util'),\n time = require('./time');\n\n/**\n * Create Vega's data array from a given encoding.\n *\n * @param {Encoding} encoding\n * @return {Array} Array of Vega data.\n * This always includes a \"raw\" data table.\n * If the encoding contains aggregate value, this will also create\n * aggregate table as well.\n */\nfunction data(encoding) {\n var def = [data.raw(encoding)];\n\n var aggregate = data.aggregate(encoding);\n if (aggregate) def.push(data.aggregate(encoding));\n\n // TODO add \"having\" filter here\n\n // append non-positive filter at the end for the data table\n data.filterNonPositive(def[def.length - 1], encoding);\n\n return def;\n}\n\ndata.raw = function(encoding) {\n var raw = {name: RAW};\n\n // Data source (url or inline)\n if (encoding.hasValues()) {\n raw.values = encoding.data().values;\n } else {\n raw.url = encoding.data().url;\n raw.format = {type: encoding.data().formatType};\n }\n\n // Set data's format.parse if needed\n var parse = data.raw.formatParse(encoding);\n if (parse) {\n raw.format = raw.format || {};\n raw.format.parse = parse;\n }\n\n raw.transform = data.raw.transform(encoding);\n return raw;\n};\n\ndata.raw.formatParse = function(encoding) {\n var parse;\n\n encoding.forEach(function(field) {\n if (field.type == T) {\n parse = parse || {};\n parse[field.name] = 'date';\n } else if (field.type == Q) {\n if (vlfield.isCount(field)) return;\n parse = parse || {};\n parse[field.name] = 'number';\n }\n });\n\n return parse;\n};\n\n/**\n * Generate Vega transforms for the raw data table. This can include\n * transforms for time unit, binning and filtering.\n */\ndata.raw.transform = function(encoding) {\n // time and bin should come before filter so we can filter by time and bin\n return data.raw.transform.time(encoding).concat(\n data.raw.transform.bin(encoding),\n data.raw.transform.filter(encoding)\n );\n};\n\nvar BINARY = {\n '>': true,\n '>=': true,\n '=': true,\n '!=': true,\n '<': true,\n '<=': true\n};\n\ndata.raw.transform.time = function(encoding) {\n return encoding.reduce(function(transform, field, encType) {\n if (field.type === T && field.timeUnit) {\n transform.push({\n type: 'formula',\n field: encoding.fieldRef(encType),\n expr: time.formula(field.timeUnit,\n encoding.fieldRef(encType, {nofn: true, d: true})\n )\n });\n }\n return transform;\n }, []);\n};\n\ndata.raw.transform.bin = function(encoding) {\n return encoding.reduce(function(transform, field, encType) {\n if (encoding.bin(encType)) {\n transform.push({\n type: 'bin',\n field: encoding.fieldRef(encType, {nofn: true}),\n output: encoding.fieldRef(encType),\n maxbins: encoding.bin(encType).maxbins\n });\n }\n return transform;\n }, []);\n};\n\ndata.raw.transform.filter = function(encoding) {\n var filters = encoding.filter().reduce(function(f, filter) {\n var condition = '';\n var operator = filter.operator;\n var operands = filter.operands;\n\n var d = 'd.' + (encoding._vega2 ? '' : 'data.');\n\n if (BINARY[operator]) {\n // expects a field and a value\n if (operator === '=') {\n operator = '==';\n }\n\n var op1 = operands[0];\n var op2 = operands[1];\n condition = d + op1 + ' ' + operator + ' ' + op2;\n } else if (operator === 'notNull') {\n // expects a number of fields\n for (var j=0; j 0) {\n return {\n name: AGGREGATE,\n source: RAW,\n transform: [{\n type: 'aggregate',\n groupby: dims,\n fields: meas\n }]\n };\n }\n\n return null;\n};\n\ndata.filterNonPositive = function(dataTable, encoding) {\n encoding.forEach(function(field, encType) {\n if (encoding.scale(encType).type === 'log') {\n dataTable.transform.push({\n type: 'filter',\n test: encoding.fieldRef(encType, {d: 1}) + ' > 0'\n });\n }\n });\n};\n","'use strict';\n\nrequire('../globals');\n\nvar util = require('../util');\n\nvar axis = require('./axis'),\n scale = require('./scale');\n\nmodule.exports = faceting;\n\nfunction groupdef(name, opt) {\n opt = opt || {};\n return {\n _name: name || undefined,\n type: 'group',\n from: opt.from,\n properties: {\n enter: {\n x: opt.x || undefined,\n y: opt.y || undefined,\n width: opt.width || {group: 'width'},\n height: opt.height || {group: 'height'}\n }\n },\n scales: opt.scales || undefined,\n axes: opt.axes || undefined,\n marks: opt.marks || []\n };\n}\n\nfunction faceting(group, encoding, layout, spec, singleScaleNames, stack, stats) {\n var enter = group.properties.enter;\n var facetKeys = [], cellAxes = [], from, axesGrp;\n\n var hasRow = encoding.has(ROW), hasCol = encoding.has(COL);\n\n enter.fill = {value: encoding.config('cellBackgroundColor')};\n\n //move \"from\" to cell level and add facet transform\n group.from = {data: group.marks[0].from.data};\n\n // Hack, this needs to be refactored\n for (var i = 0; i < group.marks.length; i++) {\n var mark = group.marks[i];\n if (mark.from.transform) {\n delete mark.from.data; //need to keep transform for subfacetting case\n } else {\n delete mark.from;\n }\n }\n\n if (hasRow) {\n if (!encoding.isDimension(ROW)) {\n util.error('Row encoding should be ordinal.');\n }\n enter.y = {scale: ROW, field: 'keys.' + facetKeys.length};\n enter.height = {'value': layout.cellHeight}; // HACK\n\n facetKeys.push(encoding.fieldRef(ROW));\n\n if (hasCol) {\n from = util.duplicate(group.from);\n from.transform = from.transform || [];\n from.transform.unshift({type: 'facet', keys: [encoding.fieldRef(COL)]});\n }\n\n axesGrp = groupdef('x-axes', {\n axes: encoding.has(X) ? [axis.def(X, encoding, layout, stats)] : undefined,\n x: hasCol ? {scale: COL, field: 'keys.0'} : {value: 0},\n width: hasCol && {'value': layout.cellWidth}, //HACK?\n from: from\n });\n\n spec.marks.unshift(axesGrp); // need to prepend so it appears under the plots\n (spec.axes = spec.axes || []);\n spec.axes.push(axis.def(ROW, encoding, layout, stats));\n } else { // doesn't have row\n if (encoding.has(X)) {\n //keep x axis in the cell\n cellAxes.push(axis.def(X, encoding, layout, stats));\n }\n }\n\n if (hasCol) {\n if (!encoding.isDimension(COL)) {\n util.error('Col encoding should be ordinal.');\n }\n enter.x = {scale: COL, field: 'keys.' + facetKeys.length};\n enter.width = {'value': layout.cellWidth}; // HACK\n\n facetKeys.push(encoding.fieldRef(COL));\n\n if (hasRow) {\n from = util.duplicate(group.from);\n from.transform = from.transform || [];\n from.transform.unshift({type: 'facet', keys: [encoding.fieldRef(ROW)]});\n }\n\n axesGrp = groupdef('y-axes', {\n axes: encoding.has(Y) ? [axis.def(Y, encoding, layout, stats)] : undefined,\n y: hasRow && {scale: ROW, field: 'keys.0'},\n x: hasRow && {value: 0},\n height: hasRow && {'value': layout.cellHeight}, //HACK?\n from: from\n });\n\n spec.marks.unshift(axesGrp); // need to prepend so it appears under the plots\n (spec.axes = spec.axes || []);\n spec.axes.push(axis.def(COL, encoding, layout, stats));\n } else { // doesn't have col\n if (encoding.has(Y)) {\n cellAxes.push(axis.def(Y, encoding, layout, stats));\n }\n }\n\n // assuming equal cellWidth here\n // TODO: support heterogenous cellWidth (maybe by using multiple scales?)\n spec.scales = (spec.scales || []).concat(scale.defs(\n scale.names(enter).concat(singleScaleNames),\n encoding,\n layout,\n stats,\n {stack: stack, facet: true}\n )); // row/col scales + cell scales\n\n if (cellAxes.length > 0) {\n group.axes = cellAxes;\n }\n\n // add facet transform\n var trans = (group.from.transform || (group.from.transform = []));\n trans.unshift({type: 'facet', keys: facetKeys});\n\n return spec;\n}\n","'use strict';\n\nrequire('../globals');\n\nvar util = require('../util'),\n setter = util.setter,\n time = require('./time'),\n d3_format = require('d3-format');\n\nmodule.exports = vllayout;\n\nfunction vllayout(encoding, stats) {\n var layout = box(encoding, stats);\n layout = offset(encoding, stats, layout);\n return layout;\n}\n\n/*\n HACK to set chart size\n NOTE: this fails for plots driven by derived values (e.g., aggregates)\n One solution is to update Vega to support auto-sizing\n In the meantime, auto-padding (mostly) does the trick\n */\nfunction box(encoding, stats) {\n var hasRow = encoding.has(ROW),\n hasCol = encoding.has(COL),\n hasX = encoding.has(X),\n hasY = encoding.has(Y),\n marktype = encoding.marktype();\n\n // FIXME/HACK we need to take filter into account\n var xCardinality = hasX && encoding.isDimension(X) ? encoding.cardinality(X, stats) : 1,\n yCardinality = hasY && encoding.isDimension(Y) ? encoding.cardinality(Y, stats) : 1;\n\n var useSmallBand = xCardinality > encoding.config('largeBandMaxCardinality') ||\n yCardinality > encoding.config('largeBandMaxCardinality');\n\n var cellWidth, cellHeight, cellPadding = encoding.config('cellPadding');\n\n // set cellWidth\n if (hasX) {\n if (encoding.isOrdinalScale(X)) {\n // for ordinal, hasCol or not doesn't matter -- we scale based on cardinality\n cellWidth = (xCardinality + encoding.field(X).band.padding) * encoding.bandSize(X, useSmallBand);\n } else {\n cellWidth = hasCol || hasRow ? encoding.field(COL).width : encoding.config('singleWidth');\n }\n } else {\n if (marktype === TEXT) {\n cellWidth = encoding.config('textCellWidth');\n } else {\n cellWidth = encoding.bandSize(X);\n }\n }\n\n // set cellHeight\n if (hasY) {\n if (encoding.isOrdinalScale(Y)) {\n // for ordinal, hasCol or not doesn't matter -- we scale based on cardinality\n cellHeight = (yCardinality + encoding.field(Y).band.padding) * encoding.bandSize(Y, useSmallBand);\n } else {\n cellHeight = hasCol || hasRow ? encoding.field(ROW).height : encoding.config('singleHeight');\n }\n } else {\n cellHeight = encoding.bandSize(Y);\n }\n\n // Cell bands use rangeBands(). There are n-1 padding. Outerpadding = 0 for cells\n\n var width = cellWidth, height = cellHeight;\n if (hasCol) {\n var colCardinality = encoding.cardinality(COL, stats);\n width = cellWidth * ((1 + cellPadding) * (colCardinality - 1) + 1);\n }\n if (hasRow) {\n var rowCardinality = encoding.cardinality(ROW, stats);\n height = cellHeight * ((1 + cellPadding) * (rowCardinality - 1) + 1);\n }\n\n return {\n // width and height of the whole cell\n cellWidth: cellWidth,\n cellHeight: cellHeight,\n cellPadding: cellPadding,\n // width and height of the chart\n width: width,\n height: height,\n // information about x and y, such as band size\n x: {useSmallBand: useSmallBand},\n y: {useSmallBand: useSmallBand}\n };\n}\n\n\n// FIXME fieldStats.max isn't always the longest\nfunction getMaxNumberLength(encoding, et, fieldStats) {\n var format = encoding.numberFormat(et, fieldStats);\n\n return d3_format.format(format)(fieldStats.max).length;\n}\n\n// TODO(#600) revise this\nfunction getMaxLength(encoding, stats, et) {\n var field = encoding.field(et),\n fieldStats = stats[field.name];\n\n if (field.bin) {\n // TODO once bin support range, need to update this\n return getMaxNumberLength(encoding, et, fieldStats);\n } if (encoding.isType(et, Q)) {\n return getMaxNumberLength(encoding, et, fieldStats);\n } else if (encoding.isType(et, T)) {\n return time.maxLength(encoding.field(et).timeUnit, encoding);\n } else if (encoding.isTypes(et, [N, O])) {\n if(fieldStats.type === 'number') {\n return getMaxNumberLength(encoding, et, fieldStats);\n } else {\n return Math.min(fieldStats.max, encoding.axis(et).maxLabelLength || Infinity);\n }\n }\n}\n\nfunction offset(encoding, stats, layout) {\n [X, Y].forEach(function (et) {\n // TODO(kanitw): Jul 19, 2015 - create a set of visual test for extraOffset\n var extraOffset = et === X ? 20 : 22,\n maxLength;\n if (encoding.isDimension(et) || encoding.isType(et, T)) {\n maxLength = getMaxLength(encoding, stats, et);\n } else if (\n // TODO once we have #512 (allow using inferred type)\n // Need to adjust condition here.\n encoding.isType(et, Q) ||\n encoding.aggregate(et) === 'count'\n ) {\n if (\n et===Y\n // || (et===X && false)\n // FIXME determine when X would rotate, but should move this to axis.js first #506\n ) {\n maxLength = getMaxLength(encoding, stats, et);\n }\n } else {\n // nothing\n }\n\n if (maxLength) {\n setter(layout,[et, 'axisTitleOffset'], encoding.config('characterWidth') * maxLength + extraOffset);\n } else {\n // if no max length (no rotation case), use maxLength = 3\n setter(layout,[et, 'axisTitleOffset'], encoding.config('characterWidth') * 3 + extraOffset);\n }\n\n });\n return layout;\n}\n","'use strict';\n\nrequire('../globals');\n\nvar time = require('./time'),\n util = require('../util'),\n setter = util.setter,\n getter = util.getter;\n\nvar legend = module.exports = {};\n\nlegend.defs = function(encoding, style) {\n var defs = [];\n\n if (encoding.has(COLOR) && encoding.field(COLOR).legend) {\n defs.push(legend.def(COLOR, encoding, {\n fill: COLOR,\n orient: 'right'\n }, style));\n }\n\n if (encoding.has(SIZE) && encoding.field(SIZE).legend) {\n defs.push(legend.def(SIZE, encoding, {\n size: SIZE,\n orient: defs.length === 1 ? 'left' : 'right'\n }, style));\n }\n\n if (encoding.has(SHAPE) && encoding.field(SHAPE).legend) {\n if (defs.length === 2) {\n console.error('Vega-lite currently only supports two legends');\n }\n defs.push(legend.def(SHAPE, encoding, {\n shape: SHAPE,\n orient: defs.length === 1 ? 'left' : 'right'\n }, style));\n }\n return defs;\n};\n\nlegend.def = function(name, encoding, def, style) {\n var timeUnit = encoding.field(name).timeUnit;\n\n def.title = legend.title(name, encoding);\n def = legend.style(name, encoding, def, style);\n\n if (encoding.isType(name, T) &&\n timeUnit &&\n time.hasScale(timeUnit)\n ) {\n setter(def, ['properties', 'labels', 'text', 'scale'], 'time-'+ timeUnit);\n }\n\n return def;\n};\n\nlegend.style = function(name, e, def, style) {\n var symbols = getter(def, ['properties', 'symbols']),\n marktype = e.marktype();\n\n switch (marktype) {\n case 'bar':\n case 'tick':\n case 'text':\n symbols.stroke = {value: 'transparent'};\n symbols.shape = {value: 'square'};\n break;\n\n case 'circle':\n case 'square':\n symbols.shape = {value: marktype};\n /* fall through */\n case 'point':\n // fill or stroke\n if (e.field(SHAPE).filled) {\n if (e.has(COLOR) && name === COLOR) {\n symbols.fill = {scale: COLOR, field: 'data'};\n } else {\n symbols.fill = {value: e.value(COLOR)};\n }\n symbols.stroke = {value: 'transparent'};\n } else {\n if (e.has(COLOR) && name === COLOR) {\n symbols.stroke = {scale: COLOR, field: 'data'};\n } else {\n symbols.stroke = {value: e.value(COLOR)};\n }\n symbols.fill = {value: 'transparent'};\n symbols.strokeWidth = {value: e.config('strokeWidth')};\n }\n\n break;\n case 'line':\n case 'area':\n // TODO use shape here after implementing #508\n break;\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if (opacity) {\n symbols.opacity = {value: opacity};\n }\n return def;\n};\n\nlegend.title = function(name, encoding) {\n var leg = encoding.field(name).legend;\n\n if (leg.title) return leg.title;\n\n return encoding.fieldTitle(name);\n};\n","'use strict';\n\nrequire('../globals');\n\nvar marks = module.exports = {};\n\nmarks.def = function(encoding, layout, style, stats) {\n\n var defs = [],\n mark = marks[encoding.marktype()],\n from = encoding.dataTable();\n\n // to add a background to text, we need to add it before the text\n if (encoding.marktype() === TEXT && encoding.has(COLOR)) {\n var bg = {\n x: {value: 0},\n y: {value: 0},\n x2: {value: layout.cellWidth},\n y2: {value: layout.cellHeight},\n fill: {scale: COLOR, field: encoding.fieldRef(COLOR)}\n };\n defs.push({\n type: 'rect',\n from: {data: from},\n properties: {enter: bg, update: bg}\n });\n }\n\n // add the mark def for the main thing\n var p = mark.prop(encoding, layout, style, stats);\n defs.push({\n type: mark.type,\n from: {data: from},\n properties: {enter: p, update: p}\n });\n\n return defs;\n};\n\nmarks.bar = {\n type: 'rect',\n stack: true,\n prop: bar_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1}\n};\n\nmarks.line = {\n type: 'line',\n line: true,\n prop: line_props,\n requiredEncoding: ['x', 'y'],\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1, detail:1}\n};\n\nmarks.area = {\n type: 'area',\n stack: true,\n line: true,\n requiredEncoding: ['x', 'y'],\n prop: area_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1}\n};\n\nmarks.tick = {\n type: 'rect',\n prop: tick_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, color: 1, detail: 1}\n};\n\nmarks.circle = {\n type: 'symbol',\n prop: filled_point_props('circle'),\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1, detail: 1}\n};\n\nmarks.square = {\n type: 'symbol',\n prop: filled_point_props('square'),\n supportedEncoding: marks.circle.supportedEncoding\n};\n\nmarks.point = {\n type: 'symbol',\n prop: point_props,\n supportedEncoding: {row: 1, col: 1, x: 1, y: 1, size: 1, color: 1, shape: 1, detail: 1}\n};\n\nmarks.text = {\n type: 'text',\n prop: text_props,\n requiredEncoding: ['text'],\n supportedEncoding: {row: 1, col: 1, size: 1, color: 1, text: 1}\n};\n\nfunction bar_props(e, layout, style) {\n // jshint unused:false\n\n var p = {};\n\n // x's and width\n if (e.isMeasure(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (!e.has(Y) || e.isDimension(Y)) {\n p.x2 = {value: 0};\n }\n } else {\n if (e.has(X)) { // is ordinal\n p.xc = {scale: X, field: e.fieldRef(X)};\n } else {\n p.x = {value: 0, offset: e.config('singleBarOffset')};\n }\n }\n\n // width\n if (!p.x2) {\n if (!e.has(X) || e.isOrdinalScale(X)) { // no X or X is ordinal\n if (e.has(SIZE)) {\n p.width = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else {\n p.width = {\n value: e.bandSize(X, layout.x.useSmallBand),\n offset: -1\n };\n }\n } else { // X is Quant or Time Scale\n p.width = {value: 2};\n }\n }\n\n // y's & height\n if (e.isMeasure(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n p.y2 = {group: 'height'};\n } else {\n if (e.has(Y)) { // is ordinal\n p.yc = {scale: Y, field: e.fieldRef(Y)};\n } else {\n p.y2 = {group: 'height', offset: -e.config('singleBarOffset')};\n }\n\n if (e.has(SIZE)) {\n p.height = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else {\n p.height = {\n value: e.bandSize(Y, layout.y.useSmallBand),\n offset: -1\n };\n }\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else {\n p.fill = {value: e.value(COLOR)};\n }\n\n // opacity\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction point_props(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.size = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(SIZE)) {\n p.size = {value: e.value(SIZE)};\n }\n\n // shape\n if (e.has(SHAPE)) {\n p.shape = {scale: SHAPE, field: e.fieldRef(SHAPE)};\n } else if (!e.has(SHAPE)) {\n p.shape = {value: e.value(SHAPE)};\n }\n\n // fill or stroke\n if (e.field(SHAPE).filled) {\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n } else {\n if (e.has(COLOR)) {\n p.stroke = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.stroke = {value: e.value(COLOR)};\n }\n p.strokeWidth = {value: e.config('strokeWidth')};\n }\n\n // opacity\n var opacity = e.field(COLOR).opacity || style.opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction line_props(e,layout, style) {\n // jshint unused:false\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: 0};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {group: 'height'};\n }\n\n // stroke\n if (e.has(COLOR)) {\n p.stroke = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.stroke = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n p.strokeWidth = {value: e.config('strokeWidth')};\n\n return p;\n}\n\nfunction area_props(e, layout, style) {\n // jshint unused:false\n var p = {};\n\n // x\n if (e.isMeasure(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (e.isDimension(Y)) {\n p.x2 = {scale: X, value: 0};\n p.orient = {value: 'horizontal'};\n }\n } else if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else {\n p.x = {value: 0};\n }\n\n // y\n if (e.isMeasure(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n p.y2 = {scale: Y, value: 0};\n } else if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else {\n p.y = {group: 'height'};\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity;\n if (opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction tick_props(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n if (e.isDimension(X)) {\n p.x.offset = -e.bandSize(X, layout.x.useSmallBand) / 3;\n }\n } else if (!e.has(X)) {\n p.x = {value: 0};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n if (e.isDimension(Y)) {\n p.y.offset = -e.bandSize(Y, layout.y.useSmallBand) / 3;\n }\n } else if (!e.has(Y)) {\n p.y = {value: 0};\n }\n\n // width\n if (!e.has(X) || e.isDimension(X)) {\n p.width = {value: e.bandSize(X, layout.y.useSmallBand) / 1.5};\n } else {\n p.width = {value: 1};\n }\n\n // height\n if (!e.has(Y) || e.isDimension(Y)) {\n p.height = {value: e.bandSize(Y, layout.y.useSmallBand) / 1.5};\n } else {\n p.height = {value: 1};\n }\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n return p;\n}\n\nfunction filled_point_props(shape) {\n return function(e, layout, style) {\n var p = {};\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.size = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(X)) {\n p.size = {value: e.value(SIZE)};\n }\n\n // shape\n p.shape = {value: shape};\n\n // fill\n if (e.has(COLOR)) {\n p.fill = {scale: COLOR, field: e.fieldRef(COLOR)};\n } else if (!e.has(COLOR)) {\n p.fill = {value: e.value(COLOR)};\n }\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n return p;\n };\n}\n\nfunction text_props(e, layout, style, stats) {\n var p = {},\n field = e.field(TEXT);\n\n // x\n if (e.has(X)) {\n p.x = {scale: X, field: e.fieldRef(X)};\n } else if (!e.has(X)) {\n if (e.has(TEXT) && e.isType(TEXT, Q)) {\n p.x = {value: layout.cellWidth-5};\n } else {\n p.x = {value: e.bandSize(X, layout.x.useSmallBand) / 2};\n }\n }\n\n // y\n if (e.has(Y)) {\n p.y = {scale: Y, field: e.fieldRef(Y)};\n } else if (!e.has(Y)) {\n p.y = {value: e.bandSize(Y, layout.y.useSmallBand) / 2};\n }\n\n // size\n if (e.has(SIZE)) {\n p.fontSize = {scale: SIZE, field: e.fieldRef(SIZE)};\n } else if (!e.has(SIZE)) {\n p.fontSize = {value: field.font.size};\n }\n\n // fill\n // color should be set to background\n p.fill = {value: field.color};\n\n var opacity = e.field(COLOR).opacity || style.opacity;\n if(opacity) p.opacity = {value: opacity};\n\n // text\n if (e.has(TEXT)) {\n if (e.isType(TEXT, Q)) {\n var fieldStats = stats[e.fieldName(TEXT)],\n numberFormat = field.format || e.numberFormat(fieldStats);\n\n p.text = {template: '{{' + e.fieldRef(TEXT) + ' | number:\\'' +\n numberFormat +'\\'}}'};\n p.align = {value: field.align};\n } else {\n p.text = {field: e.fieldRef(TEXT)};\n }\n } else {\n p.text = {value: field.placeholder};\n }\n\n p.font = {value: field.font.family};\n p.fontWeight = {value: field.font.weight};\n p.fontStyle = {value: field.font.style};\n p.baseline = {value: field.baseline};\n\n return p;\n}\n","'use strict';\nrequire('../globals');\nvar util = require('../util'),\n time = require('./time'),\n colorbrewer = require('colorbrewer'),\n interpolate = require('d3-color').interpolateHsl,\n schema = require('../schema/schema'),\n vlsort = require('./sort');\n\nvar scale = module.exports = {};\n\nscale.names = function(props) {\n return util.keys(util.keys(props).reduce(function(a, x) {\n if (props[x] && props[x].scale) a[props[x].scale] = 1;\n return a;\n }, {}));\n};\n\nscale.defs = function(names, encoding, layout, stats, opt) {\n opt = opt || {};\n\n return names.reduce(function(a, name) {\n var s = {\n name: name,\n type: scale.type(name, encoding),\n domain: scale.domain(name, encoding, stats, opt)\n };\n\n s.sort = scale.sort(s, encoding, name) || undefined;\n\n scale.range(s, encoding, layout, stats, opt);\n\n return (a.push(s), a);\n }, []);\n};\n\nscale.sort = function(s, encoding, name) {\n return s.type === 'ordinal' && (\n !!encoding.bin(name) ||\n encoding.sort(name).length === 0\n );\n};\n\nscale.type = function(name, encoding) {\n\n switch (encoding.type(name)) {\n case N: //fall through\n case O: return 'ordinal';\n case T:\n var timeUnit = encoding.field(name).timeUnit;\n return timeUnit ? time.scale.type(timeUnit, name) : 'time';\n case Q:\n if (encoding.bin(name)) {\n return name === COLOR ? 'linear' : 'ordinal';\n }\n return encoding.scale(name).type;\n }\n};\n\nscale.domain = function (name, encoding, stats, opt) {\n var field = encoding.field(name);\n\n if (encoding.isType(name, T)) {\n var range = time.scale.domain(field.timeUnit, name);\n if(range) return range;\n }\n\n if (field.bin) {\n // TODO(kanitw): this must be changed in vg2\n var fieldStat = stats[field.name],\n bins = util.getbins(fieldStat, field.bin.maxbins || schema.MAXBINS_DEFAULT),\n numbins = (bins.stop - bins.start) / bins.step;\n return util.range(numbins).map(function(i) {\n return bins.start + bins.step * i;\n });\n }\n\n if (name == opt.stack) {\n return {\n data: STACKED,\n field: encoding.fieldRef(name, {\n data: !encoding._vega2,\n prefn: (opt.facet ? 'max_' : '') + 'sum_'\n })\n };\n }\n var aggregate = encoding.aggregate(name),\n timeUnit = field.timeUnit,\n scaleUseRawDomain = encoding.scale(name).useRawDomain,\n useRawDomain = scaleUseRawDomain !== undefined ?\n scaleUseRawDomain : encoding.config('useRawDomain'),\n notCountOrSum = !aggregate || (aggregate !=='count' && aggregate !== 'sum');\n\n // FIXME revise this part\n\n if ( useRawDomain && notCountOrSum && (\n // Q always uses non-ordinal scale except when it's binned and thus uses ordinal scale.\n (encoding.isType(name, Q) && !field.bin) ||\n // T uses non-ordinal scale when there's no unit or when the unit is not ordinal.\n (encoding.isType(name, T) && (!timeUnit || !time.isOrdinalFn(timeUnit)))\n )\n ) {\n return {data: RAW, field: encoding.fieldRef(name, {nofn: !timeUnit})};\n }\n\n var data = encoding.sort(name, stats).length > 0 ?\n vlsort.getDataName(name):\n encoding.dataTable();\n\n return {data: data, field: encoding.fieldRef(name)};\n};\n\n\nscale.range = function (s, encoding, layout, stats) {\n var spec = encoding.scale(s.name),\n field = encoding.field(s.name),\n timeUnit = field.timeUnit;\n\n switch (s.name) {\n case X:\n s.range = layout.cellWidth ? [0, layout.cellWidth] : 'width';\n if (s.type === 'ordinal') {\n s.bandWidth = encoding.bandSize(X, layout.x.useSmallBand);\n } else {\n if (encoding.isType(s.name,T) && timeUnit === 'year') {\n s.zero = false;\n } else {\n s.zero = spec.zero === undefined ? true : spec.zero;\n }\n\n s.reverse = spec.reverse;\n }\n s.round = true;\n if (s.type === 'time') {\n s.nice = timeUnit || encoding.config('timeScaleNice');\n }else {\n s.nice = true;\n }\n break;\n case Y:\n if (s.type === 'ordinal') {\n s.range = layout.cellHeight ?\n (field.bin ? [layout.cellHeight, 0] : [0, layout.cellHeight]) :\n 'height';\n s.bandWidth = encoding.bandSize(Y, layout.y.useSmallBand);\n } else {\n s.range = layout.cellHeight ? [layout.cellHeight, 0] : 'height';\n if (encoding.isType(s.name,T) && timeUnit === 'year') {\n s.zero = false;\n } else {\n s.zero = spec.zero === undefined ? true : spec.zero;\n }\n\n s.reverse = spec.reverse;\n }\n\n s.round = true;\n\n if (s.type === 'time') {\n s.nice = timeUnit || encoding.config('timeScaleNice');\n }else {\n s.nice = true;\n }\n break;\n case ROW: // support only ordinal\n s.bandWidth = layout.cellHeight;\n s.round = true;\n s.nice = true;\n break;\n case COL: // support only ordinal\n s.bandWidth = layout.cellWidth;\n s.round = true;\n s.nice = true;\n break;\n case SIZE:\n if (encoding.is('bar')) {\n // FIXME this is definitely incorrect\n // but let's fix it later since bar size is a bad encoding anyway\n s.range = [3, Math.max(encoding.bandSize(X), encoding.bandSize(Y))];\n } else if (encoding.is(TEXT)) {\n s.range = [8, 40];\n } else { //point\n var bandSize = Math.min(encoding.bandSize(X), encoding.bandSize(Y)) - 1;\n s.range = [10, 0.8 * bandSize*bandSize];\n }\n s.round = true;\n s.zero = false;\n break;\n case SHAPE:\n s.range = 'shapes';\n break;\n case COLOR:\n s.range = scale.color(s, encoding, stats);\n if (s.type !== 'ordinal') s.zero = false;\n break;\n default:\n throw new Error('Unknown encoding name: '+ s.name);\n }\n\n // FIXME(kanitw): Jul 29, 2015 - consolidate this with above\n switch (s.name) {\n case ROW:\n case COL:\n s.padding = encoding.config('cellPadding');\n s.outerPadding = 0;\n break;\n case X:\n case Y:\n if (s.type === 'ordinal') { //&& !s.bandWidth\n s.points = true;\n s.padding = encoding.field(s.name).band.padding;\n }\n }\n};\n\nscale.color = function(s, encoding, stats) {\n var colorScale = encoding.scale(COLOR),\n range = colorScale.range,\n cardinality = encoding.cardinality(COLOR, stats),\n type = encoding.type(COLOR);\n\n if (range === undefined) {\n var ordinalPalette = colorScale.ordinalPalette,\n quantitativeRange = colorScale.quantitativeRange;\n\n if (s.type === 'ordinal') {\n if (type === N) {\n // use categorical color scale\n if (cardinality <= 10) {\n range = colorScale.c10palette;\n } else {\n range = colorScale.c20palette;\n }\n return scale.color.palette(range, cardinality, type);\n } else {\n if (ordinalPalette) {\n return scale.color.palette(ordinalPalette, cardinality, type);\n }\n return scale.color.interpolate(quantitativeRange[0], quantitativeRange[1], cardinality);\n }\n } else { //time or quantitative\n return [quantitativeRange[0], quantitativeRange[1]];\n }\n }\n};\n\nscale.color.palette = function(range, cardinality, type) {\n // FIXME(kanitw): Jul 29, 2015 - check range is string\n switch (range) {\n case 'category10k':\n // tableau's category 10, ordered by perceptual kernel study results\n // https://github.com/uwdata/perceptual-kernels\n return ['#2ca02c', '#e377c2', '#7f7f7f', '#17becf', '#8c564b', '#d62728', '#bcbd22', '#9467bd', '#ff7f0e', '#1f77b4'];\n\n // d3/tableau category10/20/20b/20c\n case 'category10':\n return ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'];\n\n case 'category20':\n return ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'];\n\n case 'category20b':\n return ['#393b79', '#5254a3', '#6b6ecf', '#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31', '#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b', '#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6'];\n\n case 'category20c':\n return ['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc', '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'];\n }\n\n // TODO add our own set of custom ordinal color palette\n\n if (range in colorbrewer) {\n var palette = colorbrewer[range];\n\n // if cardinality pre-defined, use it.\n if (cardinality in palette) return palette[cardinality];\n\n // if not, use the highest cardinality one for nominal\n if (type === N) {\n return palette[Math.max.apply(null, util.keys(palette))];\n }\n\n // otherwise, interpolate\n var ps = cardinality < 3 ? 3 : Math.max.apply(null, util.keys(palette)),\n from = 0 , to = ps - 1;\n // FIXME add config for from / to\n\n return scale.color.interpolate(palette[ps][from], palette[ps][to], cardinality);\n }\n\n return range;\n};\n\nscale.color.interpolate = function (start, end, cardinality) {\n\n var interpolator = interpolate(start, end);\n return util.range(cardinality).map(function(i) { return interpolator(i*1.0/(cardinality-1)); });\n};\n","'use strict';\n\nrequire('../globals');\n\nvar vlfield = require('../field');\n\nmodule.exports = sort;\n\n// adds new transforms that produce sorted fields\nfunction sort(data, encoding, stats, opt) {\n // jshint unused:false\n\n var datasetMapping = {};\n\n encoding.forEach(function(field, encType) {\n var sortBy = encoding.sort(encType, stats);\n if (sortBy.length > 0) {\n var fields = sortBy.map(function(d) {\n return {\n op: d.aggregate,\n field: vlfield.fieldRef(d, {nofn: true, data: !encoding._vega2})\n };\n });\n\n var byClause = sortBy.map(function(d) {\n var reverse = (d.reverse ? '-' : '');\n return reverse + vlfield.fieldRef(d, {data: !encoding._vega2});\n });\n\n var dataName = sort.getDataName(encType);\n\n var transforms = [\n {\n type: 'aggregate',\n groupby: [ encoding.fieldRef(encType) ],\n fields: fields\n },\n {\n type: 'sort',\n by: byClause\n }\n ];\n\n data.push({\n name: dataName,\n source: RAW,\n transform: transforms\n });\n\n datasetMapping[encType] = dataName;\n }\n });\n\n return data;\n}\n\nsort.getDataName = function(encType) {\n return 'sorted-' + encType;\n};\n\n","'use strict';\n\nrequire('../globals');\n\nvar marks = require('./marks');\n\nmodule.exports = stacking;\n\nfunction stacking(data, encoding, mdef) {\n if (!marks[encoding.marktype()].stack) return false;\n\n // TODO: add || encoding.has(LOD) here once LOD is implemented\n if (!encoding.has(COLOR)) return false;\n\n var dim=null, val=null, idx =null,\n isXMeasure = encoding.isMeasure(X),\n isYMeasure = encoding.isMeasure(Y),\n facets = encoding.facets();\n\n if (isXMeasure && !isYMeasure) {\n dim = Y;\n val = X;\n idx = 0;\n } else if (isYMeasure && !isXMeasure) {\n dim = X;\n val = Y;\n idx = 1;\n } else {\n return null; // no stack encoding\n }\n\n // add transform to compute sums for scale\n var stacked = {\n name: STACKED,\n source: encoding.dataTable(),\n transform: [{\n type: 'aggregate',\n groupby: [encoding.fieldRef(dim)].concat(facets), // dim and other facets\n fields: [{op: 'sum', field: encoding.fieldRef(val)}] // TODO check if field with aggregate is correct?\n }]\n };\n\n if (facets && facets.length > 0) {\n stacked.transform.push({ //calculate max for each facet\n type: 'aggregate',\n groupby: facets,\n fields: [{\n op: 'max',\n field: encoding.fieldName(val, {fn: 'sum'})\n }]\n });\n }\n\n data.push(stacked);\n\n // add stack transform to mark\n mdef.from.transform = [{\n type: 'stack',\n point: encoding.fieldRef(dim),\n height: encoding.fieldRef(val),\n output: {y1: val, y0: val + '2'}\n }];\n\n // TODO: This is super hack-ish -- consolidate into modular mark properties?\n mdef.properties.update[val] = mdef.properties.enter[val] = {scale: val, field: val};\n mdef.properties.update[val + '2'] = mdef.properties.enter[val + '2'] = {scale: val, field: val + '2'};\n\n return val; //return stack encoding\n}\n","'use strict';\n\nrequire('../globals');\n\nvar vlfield = require('../field');\n\nmodule.exports = function(encoding, stats) {\n return {\n opacity: estimateOpacity(encoding, stats),\n };\n};\n\nfunction estimateOpacity(encoding,stats) {\n if (!stats) {\n return 1;\n }\n\n var numPoints = 0;\n\n if (encoding.isAggregate()) { // aggregate plot\n numPoints = 1;\n\n // get number of points in each \"cell\"\n // by calculating product of cardinality\n // for each non faceting and non-ordinal X / Y fields\n // note that ordinal x,y are not include since we can\n // consider that ordinal x are subdividing the cell into subcells anyway\n encoding.forEach(function(field, encType) {\n\n if (encType !== ROW && encType !== COL &&\n !((encType === X || encType === Y) &&\n vlfield.isOrdinalScale(field))\n ) {\n numPoints *= encoding.cardinality(encType, stats);\n }\n });\n\n } else { // raw plot\n\n // TODO: error handling\n if (!stats['*'])\n return 1;\n\n numPoints = stats['*'].max; // count\n\n // small multiples divide number of points\n var numMultiples = 1;\n if (encoding.has(ROW)) {\n numMultiples *= encoding.cardinality(ROW, stats);\n }\n if (encoding.has(COL)) {\n numMultiples *= encoding.cardinality(COL, stats);\n }\n numPoints /= numMultiples;\n }\n\n var opacity = 0;\n if (numPoints <= 25) {\n opacity = 1;\n } else if (numPoints < 200) {\n opacity = 0.8;\n } else if (numPoints < 1000 || encoding.is('tick')) {\n opacity = 0.7;\n } else {\n opacity = 0.3;\n }\n\n return opacity;\n}\n\n","'use strict';\n\nrequire('../globals');\n\nmodule.exports = subfaceting;\n\nfunction subfaceting(group, mdef, details, stack, encoding) {\n var m = group.marks;\n var g = {\n _name: 'subfacet',\n type: 'group',\n from: mdef.from,\n properties: {\n enter: {\n width: {group: 'width'},\n height: {group: 'height'}\n }\n },\n marks: m\n };\n\n group.marks = [g];\n delete mdef.from; // (move to the new g)\n\n //TODO test LOD -- we should support stack / line without color (LOD) field\n var trans = (g.from.transform || (g.from.transform = []));\n trans.unshift({type: 'facet', keys: details});\n\n if (stack && encoding.has(COLOR)) {\n trans.unshift({type: 'sort', by: encoding.fieldRef(COLOR)});\n }\n}\n","'use strict';\n\nvar util = require('../util'),\n d3_time_format = require('d3-time-format');\n\nvar time = module.exports = {};\n\n// 'Wednesday September 17 04:00:00 2014'\n// Wednesday is the longest date\n// September is the longest month (8 in javascript as it is zero-indexed).\nvar LONG_DATE = new Date(Date.UTC(2014, 8, 17));\n\ntime.cardinality = function(field, stats, filterNull, type) {\n var timeUnit = field.timeUnit;\n switch (timeUnit) {\n case 'seconds': return 60;\n case 'minutes': return 60;\n case 'hours': return 24;\n case 'day': return 7;\n case 'date': return 31;\n case 'month': return 12;\n case 'year':\n var stat = stats[field.name],\n yearstat = stats['year_'+field.name];\n\n if (!yearstat) { return null; }\n\n return yearstat.distinct -\n (stat.nulls > 0 && filterNull[type] ? 1 : 0);\n }\n\n return null;\n};\n\ntime.formula = function(timeUnit, fieldRef) {\n // TODO(kanitw): add formula to other time format\n var fn = 'utc' + timeUnit;\n return fn + '(' + fieldRef + ')';\n};\n\ntime.maxLength = function(timeUnit, encoding) {\n switch (timeUnit) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n case 'date':\n return 2;\n case 'month':\n case 'day':\n var range = time.range(timeUnit, encoding);\n if (range) {\n // return the longest name in the range\n return Math.max.apply(null, range.map(function(r) {return r.length;}));\n }\n return 2;\n case 'year':\n return 4; //'1998'\n }\n // TODO(#600) revise this\n // no time unit\n var timeFormat = encoding.config('timeFormat');\n return d3_time_format.utcFormat(timeFormat)(LONG_DATE).length;\n};\n\ntime.range = function(timeUnit, encoding) {\n var labelLength = encoding.config('timeScaleLabelLength'),\n scaleLabel;\n switch (timeUnit) {\n case 'day':\n scaleLabel = encoding.config('dayScaleLabel');\n break;\n case 'month':\n scaleLabel = encoding.config('monthScaleLabel');\n break;\n }\n if (scaleLabel) {\n return labelLength ? scaleLabel.map(\n function(s) { return s.substr(0, labelLength);}\n ) : scaleLabel;\n }\n return;\n};\n\n\n/**\n * @param {Object} encoding\n * @return {Array} scales for time unit names\n */\ntime.scales = function(encoding) {\n var scales = encoding.reduce(function(scales, field) {\n var timeUnit = field.timeUnit;\n if (field.type === T && timeUnit && !scales[timeUnit]) {\n var scale = time.scale.def(field.timeUnit, encoding);\n if (scale) scales[timeUnit] = scale;\n }\n return scales;\n }, {});\n\n return util.vals(scales);\n};\n\n\ntime.scale = {};\n\n/** append custom time scales for axis label */\ntime.scale.def = function(timeUnit, encoding) {\n var range = time.range(timeUnit, encoding);\n\n if (range) {\n return {\n name: 'time-'+timeUnit,\n type: 'ordinal',\n domain: time.scale.domain(timeUnit),\n range: range\n };\n }\n return null;\n};\n\ntime.isOrdinalFn = function(timeUnit) {\n switch (timeUnit) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n case 'day':\n case 'date':\n case 'month':\n return true;\n }\n return false;\n};\n\ntime.scale.type = function(timeUnit, name) {\n if (name === COLOR) {\n return 'linear'; // time has order, so use interpolated ordinal color scale.\n }\n\n return time.isOrdinalFn(timeUnit) || name === COL || name === ROW ? 'ordinal' : 'linear';\n};\n\ntime.scale.domain = function(timeUnit, name) {\n var isColor = name === COLOR;\n switch (timeUnit) {\n case 'seconds':\n case 'minutes': return isColor ? [0,59] : util.range(0, 60);\n case 'hours': return isColor ? [0,23] : util.range(0, 24);\n case 'day': return isColor ? [0,6] : util.range(0, 7);\n case 'date': return isColor ? [1,31] : util.range(1, 32);\n case 'month': return isColor ? [0,11] : util.range(0, 12);\n }\n return null;\n};\n\n/** whether a particular time function has custom scale for labels implemented in time.scale */\ntime.hasScale = function(timeUnit) {\n switch (timeUnit) {\n case 'day':\n case 'month':\n return true;\n }\n return false;\n};\n","'use strict';\n\nrequire('./globals');\n\nvar consts = module.exports = {};\n\nconsts.encodingTypes = [X, Y, ROW, COL, SIZE, SHAPE, COLOR, TEXT, DETAIL];\n\nconsts.shorthand = {\n delim: '|',\n assign: '=',\n type: ',',\n func: '_'\n};\n","'use strict';\n\nrequire('./globals');\n\nvar stats = require('datalib/src/stats');\n\nvar vldata = module.exports = {};\n\n/** Mapping from datalib's inferred type to Vega-lite's type */\nvldata.types = {\n 'boolean': N,\n 'number': Q,\n 'integer': Q,\n 'date': T,\n 'string': N\n};\n\nvldata.stats = function(data) {\n var summary = stats.summary(data);\n\n return summary.reduce(function(s, profile) {\n s[profile.field] = profile;\n return s;\n }, {\n '*': {\n max: data.length,\n min: 0\n }\n });\n};","// utility for enc\n\n'use strict';\n\nvar consts = require('./consts'),\n c = consts.shorthand,\n vlfield = require('./field'),\n util = require('./util'),\n schema = require('./schema/schema'),\n encTypes = schema.encTypes;\n\nvar vlenc = module.exports = {};\n\nvlenc.countRetinal = function(enc) {\n var count = 0;\n if (enc.color) count++;\n if (enc.size) count++;\n if (enc.shape) count++;\n return count;\n};\n\nvlenc.has = function(enc, encType) {\n var fieldDef = enc && enc[encType];\n return fieldDef && fieldDef.name;\n};\n\nvlenc.isAggregate = function(enc) {\n for (var k in enc) {\n if (vlenc.has(enc, k) && enc[k].aggregate) {\n return true;\n }\n }\n return false;\n};\n\nvlenc.forEach = function(enc, f) {\n var i = 0;\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n f(enc[k], k, i++);\n }\n });\n};\n\nvlenc.map = function(enc, f) {\n var arr = [];\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n arr.push(f(enc[k], k, enc));\n }\n });\n return arr;\n};\n\nvlenc.reduce = function(enc, f, init) {\n var r = init;\n encTypes.forEach(function(k) {\n if (vlenc.has(enc, k)) {\n r = f(r, enc[k], k, enc);\n }\n });\n return r;\n};\n\n/*\n * return key-value pairs of field name and list of fields of that field name\n */\nvlenc.fields = function(enc) {\n return vlenc.reduce(enc, function (m, field) {\n var fieldList = m[field.name] = m[field.name] || [],\n containsType = fieldList.containsType = fieldList.containsType || {};\n\n if (fieldList.indexOf(field) === -1) {\n fieldList.push(field);\n // augment the array with containsType.Q / O / N / T\n containsType[field.type] = true;\n }\n return m;\n }, {});\n};\n\nvlenc.shorthand = function(enc) {\n return vlenc.map(enc, function(field, et) {\n return et + c.assign + vlfield.shorthand(field);\n }).join(c.delim);\n};\n\nvlenc.fromShorthand = function(shorthand) {\n var enc = util.isArray(shorthand) ? shorthand : shorthand.split(c.delim);\n return enc.reduce(function(m, e) {\n var split = e.split(c.assign),\n enctype = split[0].trim(),\n field = split[1];\n\n m[enctype] = vlfield.fromShorthand(field);\n return m;\n }, {});\n};\n","'use strict';\n\n// utility for field\n\nrequire('./globals');\n\nvar consts = require('./consts'),\n c = consts.shorthand,\n time = require('./compiler/time'),\n util = require('./util'),\n schema = require('./schema/schema');\n\nvar vlfield = module.exports = {};\n\n/**\n * @param field\n * @param opt\n * opt.nofn -- exclude bin, aggregate, timeUnit\n * opt.data - include 'data.'\n * opt.d - include 'd.'\n * opt.fn - replace fn with custom function prefix\n * opt.prefn - prepend fn with custom function prefix\n\n * @return {[type]} [description]\n */\nvlfield.fieldRef = function(field, opt) {\n opt = opt || {};\n\n var f = (opt.d ? 'd.' : '') +\n (opt.data ? 'data.' : '') +\n (opt.prefn || ''),\n nofn = opt.nofn || opt.fn,\n name = field.name;\n\n if (vlfield.isCount(field)) {\n return f + 'count';\n } else if (!nofn && field.bin) {\n return f + 'bin_' + name;\n } else if (!nofn && field.aggregate) {\n return f + field.aggregate + '_' + name;\n } else if (!nofn && field.timeUnit) {\n return f + field.timeUnit + '_' + name;\n } else if (opt.fn) {\n return f + opt.fn + '_' + name;\n } else {\n return f + name;\n }\n};\n\nvlfield.shorthand = function(f) {\n var c = consts.shorthand;\n return (f.aggregate ? f.aggregate + c.func : '') +\n (f.timeUnit ? f.timeUnit + c.func : '') +\n (f.bin ? 'bin' + c.func : '') +\n (f.name || '') + c.type + f.type;\n};\n\nvlfield.shorthands = function(fields, delim) {\n delim = delim || c.delim;\n return fields.map(vlfield.shorthand).join(delim);\n};\n\nvlfield.fromShorthand = function(shorthand) {\n var split = shorthand.split(c.type), i;\n var o = {\n name: split[0].trim(),\n type: split[1].trim()\n };\n\n // check aggregate type\n for (i in schema.aggregate.enum) {\n var a = schema.aggregate.enum[i];\n if (o.name.indexOf(a + '_') === 0) {\n o.name = o.name.substr(a.length + 1);\n if (a == 'count' && o.name.length === 0) o.name = '*';\n o.aggregate = a;\n break;\n }\n }\n\n // check time timeUnit\n for (i in schema.timefns) {\n var tu = schema.timefns[i];\n if (o.name && o.name.indexOf(tu + '_') === 0) {\n o.name = o.name.substr(o.length + 1);\n o.timeUnit = tu;\n break;\n }\n }\n\n // check bin\n if (o.name && o.name.indexOf('bin_') === 0) {\n o.name = o.name.substr(4);\n o.bin = true;\n }\n\n return o;\n};\n\nvar isType = vlfield.isType = function (fieldDef, type) {\n return fieldDef.type === type;\n};\n\nvar isTypes = vlfield.isTypes = function (fieldDef, types) {\n for (var t=0; t 0 && filterNull[type] ? 1 : 0);\n};\n","'use strict';\n\n// declare global constant\nvar g = global || window;\n\ng.AGGREGATE = 'aggregate';\ng.RAW = 'raw';\ng.STACKED = 'stacked';\ng.INDEX = 'index';\n\ng.X = 'x';\ng.Y = 'y';\ng.ROW = 'row';\ng.COL = 'col';\ng.SIZE = 'size';\ng.SHAPE = 'shape';\ng.COLOR = 'color';\ng.TEXT = 'text';\ng.DETAIL = 'detail';\n\ng.N = 'N';\ng.O = 'O';\ng.Q = 'Q';\ng.T = 'T';\n","'use strict';\n\n// TODO(kanitw): chat with Vega team and possibly move this to vega-logging\nmodule.exports = function(prefix) {\n // Borrowed some ideas from http://stackoverflow.com/a/15653260/866989\n // and https://github.com/patik/console.log-wrapper/blob/master/consolelog.js\n var METHODS = ['error', 'info', 'debug', 'warn', 'log'];\n\n return METHODS.reduce(function(logger, fn) {\n var cfn = console[fn] ? fn : 'log';\n if (console[cfn].bind === 'undefined') { // IE < 10\n logger[fn] = Function.prototype.bind.call(console[cfn], console, prefix);\n }\n else {\n logger[fn] = console[cfn].bind(console, prefix);\n }\n return logger;\n }, {});\n};","// Package of defining Vega-lite Specification's json schema\n'use strict';\n\nrequire('../globals');\n\nvar schema = module.exports = {},\n util = require('../util'),\n toMap = util.toMap,\n colorbrewer = require('colorbrewer');\n\nschema.util = require('./schemautil');\n\nschema.marktype = {\n type: 'string',\n enum: ['point', 'tick', 'bar', 'line', 'area', 'circle', 'square', 'text']\n};\n\nschema.aggregate = {\n type: 'string',\n enum: ['avg', 'sum', 'median', 'min', 'max', 'count'],\n supportedEnums: {\n Q: ['avg', 'median', 'sum', 'min', 'max', 'count'],\n O: ['median','min','max'],\n N: [],\n T: ['avg', 'median', 'min', 'max'],\n '': ['count']\n },\n supportedTypes: toMap([Q, N, O, T, ''])\n};\n\nschema.getSupportedRole = function(encType) {\n return schema.schema.properties.encoding.properties[encType].supportedRole;\n};\n\nschema.timeUnits = ['year', 'month', 'day', 'date', 'hours', 'minutes', 'seconds'];\n\nschema.defaultTimeFn = 'month';\n\nschema.timeUnit = {\n type: 'string',\n enum: schema.timeUnits,\n supportedTypes: toMap([T])\n};\n\nschema.scale_type = {\n type: 'string',\n // TODO(kanitw) read vega's schema here, add description\n enum: ['linear', 'log', 'pow', 'sqrt', 'quantile'],\n default: 'linear',\n supportedTypes: toMap([Q])\n};\n\nschema.field = {\n type: 'object',\n properties: {\n name: {\n type: 'string'\n }\n }\n};\n\nvar clone = util.duplicate;\nvar merge = schema.util.merge;\n\nschema.MAXBINS_DEFAULT = 15;\n\nvar bin = {\n type: ['boolean', 'object'],\n default: false,\n properties: {\n maxbins: {\n type: 'integer',\n default: schema.MAXBINS_DEFAULT,\n minimum: 2,\n description: 'Maximum number of bins.'\n }\n },\n supportedTypes: toMap([Q]) // TODO: add O after finishing #81\n};\n\nvar typicalField = merge(clone(schema.field), {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: [N, O, Q, T]\n },\n aggregate: schema.aggregate,\n timeUnit: schema.timeUnit,\n bin: bin,\n scale: {\n type: 'object',\n properties: {\n /* Common Scale Properties */\n type: schema.scale_type,\n reverse: {\n type: 'boolean',\n default: false,\n supportedTypes: toMap([Q, T])\n },\n\n /* Quantitative Scale Properties */\n nice: {\n type: 'string',\n enum: ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'],\n supportedTypes: toMap([T])\n },\n zero: {\n type: 'boolean',\n description: 'Include zero',\n default: true,\n supportedTypes: toMap([Q, T])\n },\n\n /* Vega-lite only Properties */\n useRawDomain: {\n type: 'boolean',\n default: undefined,\n description: 'Use the raw data range as scale domain instead of ' +\n 'aggregated data for aggregate axis. ' +\n 'This option does not work with sum or count aggregate' +\n 'as they might have a substantially larger scale range.' +\n 'By default, use value from config.useRawDomain.'\n }\n }\n }\n }\n});\n\nvar onlyOrdinalField = merge(clone(schema.field), {\n type: 'object',\n supportedRole: {\n dimension: true\n },\n properties: {\n type: {\n type: 'string',\n enum: [N, O, Q, T] // ordinal-only field supports Q when bin is applied and T when time unit is applied.\n },\n timeUnit: schema.timeUnit,\n bin: bin,\n aggregate: {\n type: 'string',\n enum: ['count'],\n supportedTypes: toMap([N, O]) // FIXME this looks weird to me\n }\n }\n});\n\nvar axisMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true},\n properties: {\n axis: {\n type: 'object',\n properties: {\n /* Vega Axis Properties */\n format: {\n type: 'string',\n default: undefined, // auto\n description: 'The formatting pattern for axis labels. '+\n 'If not undefined, this will be determined by ' +\n 'small/largeNumberFormat and the max value ' +\n 'of the field.'\n },\n grid: {\n type: 'boolean',\n default: true,\n description: 'A flag indicate if gridlines should be created in addition to ticks.'\n },\n layer: {\n type: 'string',\n default: 'back',\n description: 'A string indicating if the axis (and any gridlines) should be placed above or below the data marks. One of \"front\" (default) or \"back\".'\n },\n orient: {\n type: 'string',\n default: undefined,\n enum: ['top', 'right', 'left', 'bottom'],\n description: 'The orientation of the axis. One of top, bottom, left or right. The orientation can be used to further specialize the axis type (e.g., a y axis oriented for the right edge of the chart).'\n },\n ticks: {\n type: 'integer',\n default: 5,\n minimum: 0,\n description: 'A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale\\'s range.'\n },\n /* Vega Axis Properties that are automatically populated by Vega-lite */\n title: {\n type: 'string',\n default: undefined,\n description: 'A title for the axis. (Shows field name and its function by default.)'\n },\n /* Vega-lite only */\n maxLabelLength: {\n type: 'integer',\n default: 25,\n minimum: 0,\n description: 'Truncate labels that are too long.'\n },\n labelAngle: {\n type: 'integer',\n default: undefined, // auto\n minimum: 0,\n maximum: 360,\n description: 'Angle by which to rotate labels. Set to 0 to force horizontal.'\n },\n titleMaxLength: {\n type: 'integer',\n default: undefined,\n minimum: 0,\n description: 'Max length for axis title if the title is automatically generated from the field\\'s description'\n },\n titleOffset: {\n type: 'integer',\n default: undefined, // auto\n description: 'A title offset value for the axis.'\n },\n }\n }\n }\n};\n\nvar sortMixin = {\n type: 'object',\n properties: {\n sort: {\n type: 'array',\n default: [],\n items: {\n type: 'object',\n supportedTypes: toMap([N, O]),\n required: ['name', 'aggregate'],\n properties: {\n name: {\n type: 'string'\n },\n aggregate: {\n type: 'string',\n enum: ['avg', 'sum', 'min', 'max', 'count']\n },\n reverse: {\n type: 'boolean',\n default: false\n }\n }\n }\n }\n }\n};\n\nvar bandMixin = {\n type: 'object',\n properties: {\n band: {\n type: 'object',\n properties: {\n size: {\n type: 'integer',\n minimum: 0,\n default: undefined\n },\n padding: {\n type: 'integer',\n minimum: 0,\n default: 1\n }\n }\n }\n }\n};\n\nvar legendMixin = {\n type: 'object',\n properties: {\n legend: {\n type: 'object',\n description: 'Properties of a legend.',\n properties: {\n title: {\n type: 'string',\n default: undefined,\n description: 'A title for the legend. (Shows field name and its function by default.)'\n }\n }\n }\n }\n};\n\nvar textMixin = {\n type: 'object',\n supportedMarktypes: {'text': true},\n properties: {\n align: {\n type: 'string',\n default: 'right'\n },\n baseline: {\n type: 'string',\n default: 'middle'\n },\n color: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n margin: {\n type: 'integer',\n default: 4,\n minimum: 0\n },\n placeholder: {\n type: 'string',\n default: 'Abc'\n },\n font: {\n type: 'object',\n properties: {\n weight: {\n type: 'string',\n enum: ['normal', 'bold'],\n default: 'normal'\n },\n size: {\n type: 'integer',\n default: 10,\n minimum: 0\n },\n family: {\n type: 'string',\n default: 'Helvetica Neue'\n },\n style: {\n type: 'string',\n default: 'normal',\n enum: ['normal', 'italic']\n }\n }\n },\n format: {\n type: 'string',\n default: undefined, // auto\n description: 'The formatting pattern for text value. '+\n 'If not undefined, this will be determined by ' +\n 'small/largeNumberFormat and the max value ' +\n 'of the field.'\n },\n }\n};\n\nvar sizeMixin = {\n type: 'object',\n supportedMarktypes: {point: true, bar: true, circle: true, square: true, text: true},\n properties: {\n value: {\n type: 'integer',\n default: 30,\n minimum: 0,\n description: 'Size of marks.'\n }\n }\n};\n\nvar colorMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true, 'text': true},\n properties: {\n value: {\n type: 'string',\n role: 'color',\n default: '#4682b4',\n description: 'Color to be used for marks.'\n },\n opacity: {\n type: 'number',\n default: undefined, // auto\n minimum: 0,\n maximum: 1\n },\n scale: {\n type: 'object',\n properties: {\n range: {\n type: ['string', 'array'],\n default: undefined,\n description:\n 'Color palette, if undefined vega-lite will use data property' +\n 'to pick one from c10palette, c20palette, or ordinalPalette.'\n //FIXME\n },\n c10palette: {\n type: 'string',\n default: 'category10',\n enum: [\n // Tableau\n 'category10', 'category10k',\n // Color Brewer\n 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3'\n ]\n },\n c20palette: {\n type: 'string',\n default: 'category20',\n enum: ['category20', 'category20b', 'category20c']\n },\n ordinalPalette: {\n type: 'string',\n default: undefined,\n description: 'Color palette to encode ordinal variables.',\n enum: util.keys(colorbrewer)\n },\n quantitativeRange: {\n type: 'array',\n default: ['#AFC6A3', '#09622A'], // tableau greens\n // default: ['#ccece6', '#00441b'], // BuGn.9 [2-8]\n description: 'Color range to encode quantitative variables.',\n minItems: 2,\n maxItems: 2,\n items: {\n type: 'string',\n role: 'color'\n }\n }\n }\n }\n }\n};\n\nvar shapeMixin = {\n type: 'object',\n supportedMarktypes: {point: true, circle: true, square: true},\n properties: {\n value: {\n type: 'string',\n enum: ['circle', 'square', 'cross', 'diamond', 'triangle-up', 'triangle-down'],\n default: 'circle',\n description: 'Mark to be used.'\n },\n filled: {\n type: 'boolean',\n default: false,\n description: 'Whether the shape\\'s color should be used as fill color instead of stroke color.'\n }\n }\n};\n\nvar detailMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, line: true, circle: true, square: true}\n};\n\nvar rowMixin = {\n properties: {\n height: {\n type: 'number',\n minimum: 0,\n default: 150\n }\n }\n};\n\nvar colMixin = {\n properties: {\n width: {\n type: 'number',\n minimum: 0,\n default: 150\n },\n axis: {\n properties: {\n maxLabelLength: {\n type: 'integer',\n default: 12,\n minimum: 0,\n description: 'Truncate labels that are too long.'\n }\n }\n }\n }\n};\n\nvar facetMixin = {\n type: 'object',\n supportedMarktypes: {point: true, tick: true, bar: true, line: true, area: true, circle: true, square: true, text: true},\n properties: {\n padding: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.1\n }\n }\n};\n\nvar requiredNameType = {\n required: ['name', 'type']\n};\n\nvar multiRoleField = merge(clone(typicalField), {\n supportedRole: {\n measure: true,\n dimension: true\n }\n});\n\nvar quantitativeField = merge(clone(typicalField), {\n supportedRole: {\n measure: true,\n dimension: 'ordinal-only' // using size to encoding category lead to order interpretation\n }\n});\n\nvar onlyQuantitativeField = merge(clone(typicalField), {\n supportedRole: {\n measure: true\n }\n});\n\nvar x = merge(clone(multiRoleField), axisMixin, bandMixin, requiredNameType, sortMixin);\nvar y = clone(x);\n\nvar facet = merge(clone(onlyOrdinalField), requiredNameType, facetMixin, sortMixin);\nvar row = merge(clone(facet), axisMixin, rowMixin);\nvar col = merge(clone(facet), axisMixin, colMixin);\n\nvar size = merge(clone(quantitativeField), legendMixin, sizeMixin, sortMixin);\nvar color = merge(clone(multiRoleField), legendMixin, colorMixin, sortMixin);\n\nvar shape = merge(clone(onlyOrdinalField), legendMixin, shapeMixin, sortMixin);\nvar detail = merge(clone(onlyOrdinalField), detailMixin, sortMixin);\n\n// we only put aggregated measure in pivot table\nvar text = merge(clone(onlyQuantitativeField), textMixin, sortMixin);\n\n// TODO add label\n\nvar filter = {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n operands: {\n type: 'array',\n items: {\n type: ['string', 'boolean', 'integer', 'number']\n }\n },\n operator: {\n type: 'string',\n enum: ['>', '>=', '=', '!=', '<', '<=', 'notNull']\n }\n }\n }\n};\n\nvar data = {\n type: 'object',\n properties: {\n // data source\n formatType: {\n type: 'string',\n enum: ['json', 'csv'],\n default: 'json'\n },\n url: {\n type: 'string',\n default: undefined\n },\n values: {\n type: 'array',\n default: undefined,\n description: 'Pass array of objects instead of a url to a file.',\n items: {\n type: 'object',\n additionalProperties: true\n }\n }\n }\n};\n\nvar config = {\n type: 'object',\n properties: {\n // template\n width: {\n type: 'integer',\n default: undefined\n },\n height: {\n type: 'integer',\n default: undefined\n },\n viewport: {\n type: 'array',\n items: {\n type: 'integer'\n },\n default: undefined\n },\n gridColor: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n gridOpacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.08\n },\n\n // filter null\n // TODO(#597) revise this config\n filterNull: {\n type: 'object',\n properties: {\n O: {type:'boolean', default: false},\n Q: {type:'boolean', default: true},\n T: {type:'boolean', default: true}\n }\n },\n toggleSort: {\n type: 'string',\n default: O\n },\n autoSortLine: {\n type: 'boolean',\n default: true\n },\n\n // single plot\n singleHeight: {\n // will be overwritten by bandWidth * (cardinality + padding)\n type: 'integer',\n default: 200,\n minimum: 0\n },\n singleWidth: {\n // will be overwritten by bandWidth * (cardinality + padding)\n type: 'integer',\n default: 200,\n minimum: 0\n },\n // band size\n largeBandSize: {\n type: 'integer',\n default: 21,\n minimum: 0\n },\n smallBandSize: {\n //small multiples or single plot with high cardinality\n type: 'integer',\n default: 12,\n minimum: 0\n },\n largeBandMaxCardinality: {\n type: 'integer',\n default: 10\n },\n // small multiples\n cellPadding: {\n type: 'number',\n default: 0.1\n },\n cellGridColor: {\n type: 'string',\n role: 'color',\n default: '#000000'\n },\n cellGridOpacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n default: 0.15\n },\n cellBackgroundColor: {\n type: 'string',\n role: 'color',\n default: 'rgba(0,0,0,0)'\n },\n textCellWidth: {\n type: 'integer',\n default: 90,\n minimum: 0\n },\n\n // marks\n strokeWidth: {\n type: 'integer',\n default: 2,\n minimum: 0\n },\n singleBarOffset: {\n type: 'integer',\n default: 5,\n minimum: 0\n },\n // scales\n timeScaleLabelLength: {\n type: 'integer',\n default: 3,\n minimum: 0,\n description: 'Max length for values in dayScaleLabel and monthScaleLabel. Zero means using full names in dayScaleLabel/monthScaleLabel.'\n },\n dayScaleLabel: {\n type: 'array',\n items: {\n type: 'string'\n },\n default: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n description: 'Axis labels for day of week, starting from Sunday.' +\n '(Consistent with Javascript -- See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay.'\n },\n monthScaleLabel: {\n type: 'array',\n items: {\n type: 'string'\n },\n default: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n description: 'Axis labels for month.'\n },\n // other\n characterWidth: {\n type: 'integer',\n default: 6\n },\n maxSmallNumber: {\n type: 'number',\n default: 10000,\n description: 'maximum number that a field will be considered smallNumber.'+\n 'Used for axis labelling.'\n },\n smallNumberFormat: {\n type: 'string',\n default: '',\n description: 'D3 Number format for axis labels and text tables '+\n 'for number <= maxSmallNumber. Used for axis labelling.'\n },\n largeNumberFormat: {\n type: 'string',\n default: '.3s',\n description: 'D3 Number format for axis labels and text tables ' +\n 'for number > maxSmallNumber.'\n },\n timeFormat: {\n type: 'string',\n default: '%Y-%m-%d',\n description: 'Date format for axis labels.'\n },\n useRawDomain: {\n type: 'boolean',\n default: false,\n description: 'Use the raw data range as scale domain instead of ' +\n 'aggregated data for aggregate axis. ' +\n 'This option does not work with sum or count aggregate' +\n 'as they might have a substantially larger scale range.' +\n 'By default, use value from config.useRawDomain.'\n }\n }\n};\n\n/** @type Object Schema of a vega-lite specification */\nschema.schema = {\n $schema: 'http://json-schema.org/draft-04/schema#',\n description: 'Schema for Vega-lite specification',\n type: 'object',\n required: ['marktype', 'encoding', 'data'],\n properties: {\n data: data,\n marktype: schema.marktype,\n encoding: {\n type: 'object',\n properties: {\n x: x,\n y: y,\n row: row,\n col: col,\n size: size,\n color: color,\n shape: shape,\n text: text,\n detail: detail\n }\n },\n filter: filter,\n config: config\n }\n};\n\nschema.encTypes = util.keys(schema.schema.properties.encoding.properties);\n\n/** Instantiate a verbose vl spec from the schema */\nschema.instantiate = function() {\n return schema.util.instantiate(schema.schema);\n};\n","'use strict';\n\nvar schemautil = module.exports = {},\n util = require('../util');\n\nvar isEmpty = function(obj) {\n return Object.keys(obj).length === 0;\n};\n\nschemautil.extend = function(instance, schema) {\n return schemautil.merge(schemautil.instantiate(schema), instance);\n};\n\n// instantiate a schema\nschemautil.instantiate = function(schema) {\n var val;\n if (schema === undefined) {\n return undefined;\n } else if ('default' in schema) {\n val = schema.default;\n return util.isObject(val) ? util.duplicate(val) : val;\n } else if (schema.type === 'object') {\n var instance = {};\n for (var name in schema.properties) {\n val = schemautil.instantiate(schema.properties[name]);\n if (val !== undefined) {\n instance[name] = val;\n }\n }\n return instance;\n } else if (schema.type === 'array') {\n return [];\n }\n return undefined;\n};\n\n// remove all defaults from an instance\nschemautil.subtract = function(instance, defaults) {\n var changes = {};\n for (var prop in instance) {\n var def = defaults[prop];\n var ins = instance[prop];\n // Note: does not properly subtract arrays\n if (!defaults || def !== ins) {\n if (typeof ins === 'object' && !util.isArray(ins) && def) {\n var c = schemautil.subtract(ins, def);\n if (!isEmpty(c))\n changes[prop] = c;\n } else if (!util.isArray(ins) || ins.length > 0) {\n changes[prop] = ins;\n }\n }\n }\n return changes;\n};\n\nschemautil.merge = function(/*dest*, src0, src1, ...*/){\n var dest = arguments[0];\n for (var i=1 ; i 0)) return range; // also handles Invalid Date\n offseti(start, 1), floori(start);\n if (start < stop) range.push(new Date(+start));\n while (offseti(start, step), floori(start), start < stop) range.push(new Date(+start));\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n while (--step >= 0) while (offseti(date, 1), !test(date));\n });\n };\n\n if (count) interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n return interval;\n }\n\n var second = newInterval(function(date) {\n date.setMilliseconds(0);\n }, function(date, step) {\n date.setTime(+date + step * 1e3);\n }, function(start, end) {\n return (end - start) / 1e3;\n });\n\n exports.seconds = second.range;\n\n var minute = newInterval(function(date) {\n date.setSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 6e4);\n }, function(start, end) {\n return (end - start) / 6e4;\n });\n\n exports.minutes = minute.range;\n\n var hour = newInterval(function(date) {\n date.setMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 36e5);\n }, function(start, end) {\n return (end - start) / 36e5;\n });\n\n exports.hours = hour.range;\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 864e5;\n });\n\n exports.days = day.range;\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * 6e4) / 6048e5;\n });\n }\n\n exports.sunday = weekday(0);\n\n exports.sundays = exports.sunday.range;\n\n exports.monday = weekday(1);\n\n exports.mondays = exports.monday.range;\n\n exports.tuesday = weekday(2);\n\n exports.tuesdays = exports.tuesday.range;\n\n exports.wednesday = weekday(3);\n\n exports.wednesdays = exports.wednesday.range;\n\n exports.thursday = weekday(4);\n\n exports.thursdays = exports.thursday.range;\n\n exports.friday = weekday(5);\n\n exports.fridays = exports.friday.range;\n\n exports.saturday = weekday(6);\n\n exports.saturdays = exports.saturday.range;\n\n var week = exports.sunday;\n\n exports.weeks = week.range;\n\n var month = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setDate(1);\n }, function(date, step) {\n date.setMonth(date.getMonth() + step);\n }, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n });\n\n exports.months = month.range;\n\n var year = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n date.setMonth(0, 1);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n });\n\n exports.years = year.range;\n\n var utcSecond = newInterval(function(date) {\n date.setUTCMilliseconds(0);\n }, function(date, step) {\n date.setTime(+date + step * 1e3);\n }, function(start, end) {\n return (end - start) / 1e3;\n });\n\n exports.utcSeconds = utcSecond.range;\n\n var utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 6e4);\n }, function(start, end) {\n return (end - start) / 6e4;\n });\n\n exports.utcMinutes = utcMinute.range;\n\n var utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * 36e5);\n }, function(start, end) {\n return (end - start) / 36e5;\n });\n\n exports.utcHours = utcHour.range;\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / 864e5;\n });\n\n exports.utcDays = utcDay.range;\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / 6048e5;\n });\n }\n\n exports.utcSunday = utcWeekday(0);\n\n exports.utcSundays = exports.utcSunday.range;\n\n exports.utcMonday = utcWeekday(1);\n\n exports.utcMondays = exports.utcMonday.range;\n\n exports.utcTuesday = utcWeekday(2);\n\n exports.utcTuesdays = exports.utcTuesday.range;\n\n exports.utcWednesday = utcWeekday(3);\n\n exports.utcWednesdays = exports.utcWednesday.range;\n\n exports.utcThursday = utcWeekday(4);\n\n exports.utcThursdays = exports.utcThursday.range;\n\n exports.utcFriday = utcWeekday(5);\n\n exports.utcFridays = exports.utcFriday.range;\n\n exports.utcSaturday = utcWeekday(6);\n\n exports.utcSaturdays = exports.utcSaturday.range;\n\n var utcWeek = exports.utcSunday;\n\n exports.utcWeeks = utcWeek.range;\n\n var utcMonth = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCDate(1);\n }, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n }, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n });\n\n exports.utcMonths = utcMonth.range;\n\n var utcYear = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCMonth(0, 1);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n });\n\n exports.utcYears = utcYear.range;\n\n exports.interval = newInterval;\n exports.second = second;\n exports.minute = minute;\n exports.hour = hour;\n exports.day = day;\n exports.week = week;\n exports.month = month;\n exports.year = year;\n exports.utcSecond = utcSecond;\n exports.utcMinute = utcMinute;\n exports.utcHour = utcHour;\n exports.utcDay = utcDay;\n exports.utcWeek = utcWeek;\n exports.utcMonth = utcMonth;\n exports.utcYear = utcYear;\n\n}));","var util = require('../util'),\n time = require('../time'),\n EPSILON = 1e-15;\n\nfunction bins(opt) {\n if (!opt) { throw Error(\"Missing binning options.\"); }\n\n // determine range\n var maxb = opt.maxbins || 15,\n base = opt.base || 10,\n logb = Math.log(base),\n div = opt.div || [5, 2], \n min = opt.min,\n max = opt.max,\n span = max - min,\n step, level, minstep, precision, v, i, eps;\n\n if (opt.step) {\n // if step size is explicitly given, use that\n step = opt.step;\n } else if (opt.steps) {\n // if provided, limit choice to acceptable step sizes\n step = opt.steps[Math.min(\n opt.steps.length - 1,\n bisect(opt.steps, span/maxb, 0, opt.steps.length)\n )];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = opt.minstep || 0;\n step = Math.max(\n minstep,\n Math.pow(base, Math.round(Math.log(span) / logb) - level)\n );\n \n // increase step size if too many bins\n do { step *= base; } while (Math.ceil(span/step) > maxb);\n\n // decrease step size if allowed\n for (i=0; i= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n precision = v >= 0 ? 0 : ~~(-v / logb) + 1;\n eps = Math.pow(base, -precision - 1);\n min = Math.min(min, Math.floor(min / step + eps) * step);\n max = Math.ceil(max / step) * step;\n\n return {\n start: min,\n stop: max,\n step: step,\n unit: {precision: precision},\n value: value,\n index: index\n };\n}\n\nfunction bisect(a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (util.cmp(a[mid], x) < 0) { lo = mid + 1; }\n else { hi = mid; }\n }\n return lo;\n}\n\nfunction value(v) {\n return this.step * Math.floor(v / this.step + EPSILON);\n}\n\nfunction index(v) {\n return Math.floor((v - this.start) / this.step + EPSILON);\n}\n\nfunction date_value(v) {\n return this.unit.date(value.call(this, v));\n}\n\nfunction date_index(v) {\n return index.call(this, this.unit.unit(v));\n}\n\nbins.date = function(opt) {\n if (!opt) { throw Error(\"Missing date binning options.\"); }\n\n // find time step, then bin\n var units = opt.utc ? time.utc : time,\n dmin = opt.min,\n dmax = opt.max,\n maxb = opt.maxbins || 20,\n minb = opt.minbins || 4,\n span = (+dmax) - (+dmin),\n unit = opt.unit ? units[opt.unit] : units.find(span, minb, maxb),\n spec = bins({\n min: unit.min != null ? unit.min : unit.unit(dmin),\n max: unit.max != null ? unit.max : unit.unit(dmax),\n maxbins: maxb,\n minstep: unit.minstep,\n steps: unit.step\n });\n\n spec.unit = unit;\n spec.index = date_index;\n if (!opt.raw) spec.value = date_value;\n return spec;\n};\n\nmodule.exports = bins;\n","var gen = module.exports = {};\n\ngen.repeat = function(val, n) {\n var a = Array(n), i;\n for (i=0; i stop) range.push(j);\n else while ((j = start + step * ++i) < stop) range.push(j);\n return range;\n};\n\ngen.random = {};\n\ngen.random.uniform = function(min, max) {\n if (max === undefined) {\n max = min === undefined ? 1 : min;\n min = 0;\n }\n var d = max - min;\n var f = function() {\n return min + d * Math.random();\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n\ngen.random.integer = function(a, b) {\n if (b === undefined) {\n b = a;\n a = 0;\n }\n var d = b - a;\n var f = function() {\n return a + Math.floor(d * Math.random());\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};\n\ngen.random.normal = function(mean, stdev) {\n mean = mean || 0;\n stdev = stdev || 1;\n var next;\n var f = function() {\n var x = 0, y = 0, rds, c;\n if (next !== undefined) {\n x = next;\n next = undefined;\n return x;\n }\n do {\n x = Math.random()*2-1;\n y = Math.random()*2-1;\n rds = x*x + y*y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2*Math.log(rds)/rds); // Box-Muller transform\n next = mean + y*c*stdev;\n return mean + x*c*stdev;\n };\n f.samples = function(n) { return gen.zeros(n).map(f); };\n return f;\n};","var util = require('../util');\n\nvar TYPES = '__types__';\n\nvar PARSERS = {\n boolean: util.boolean,\n integer: util.number,\n number: util.number,\n date: util.date,\n string: function(x) { return x==='' ? null : x; }\n};\n\nvar TESTS = {\n boolean: function(x) { return x==='true' || x==='false' || util.isBoolean(x); },\n integer: function(x) { return TESTS.number(x) && (x=+x) === ~~x; },\n number: function(x) { return !isNaN(+x) && !util.isDate(x); },\n date: function(x) { return !isNaN(Date.parse(x)); }\n};\n\nfunction annotation(data, types) {\n if (!types) return data && data[TYPES] || null;\n data[TYPES] = types;\n}\n\nfunction type(values, f) {\n f = util.$(f);\n var v, i, n;\n\n // if data array has type annotations, use them\n if (values[TYPES]) {\n v = f(values[TYPES]);\n if (util.isString(v)) return v;\n }\n\n for (i=0, n=values.length; !util.isValid(v) && i b) b = v;\n }\n }\n return [a, b];\n};\n\n// Find the integer indices of the minimum and maximum values.\nstats.extent.index = function(values, f) {\n f = util.$(f);\n var x = -1, y = -1, a, b, v, i, n = values.length;\n for (i=0; i b) { b = v; y = i; }\n }\n }\n return [x, y];\n};\n\n// Compute the dot product of two arrays of numbers.\nstats.dot = function(values, a, b) {\n var sum = 0, i, v;\n if (!b) {\n if (values.length !== a.length) {\n throw Error('Array lengths must match.');\n }\n for (i=0; i -1 && p !== v) {\n mu = 1 + (i-1 + tie) / 2;\n for (; tie -1) {\n mu = 1 + (n-1 + tie) / 2;\n for (; tie max) max = x;\n delta = x - mean;\n mean = mean + delta / (++valid);\n M2 = M2 + delta * (x - mean);\n vals.push(x);\n }\n }\n M2 = M2 / (valid - 1);\n sd = Math.sqrt(M2);\n\n // sort values for median and iqr\n vals.sort(util.cmp);\n\n return {\n type: type(values, f),\n unique: u,\n count: values.length,\n valid: valid,\n missing: missing,\n distinct: distinct,\n min: min,\n max: max,\n mean: mean,\n stdev: sd,\n median: (v = stats.quantile(vals, 0.5)),\n q1: stats.quantile(vals, 0.25),\n q3: stats.quantile(vals, 0.75),\n modeskew: sd === 0 ? 0 : (mean - v) / sd\n };\n};\n\n// Compute profiles for all variables in a data set.\nstats.summary = function(data, fields) {\n fields = fields || util.keys(data[0]);\n var s = fields.map(function(f) {\n var p = stats.profile(data, util.$(f));\n return (p.field = f, p);\n });\n return (s.__summary__ = true, s);\n};\n\nmodule.exports = stats;","var d3_time = require('d3-time');\n\nvar tempDate = new Date(),\n baseDate = new Date(0, 0, 1).setFullYear(0), // Jan 1, 0 AD\n utcBaseDate = new Date(Date.UTC(0, 0, 1)).setUTCFullYear(0);\n\nfunction date(d) {\n return (tempDate.setTime(+d), tempDate);\n}\n\n// create a time unit entry\nfunction entry(type, date, unit, step, min, max) {\n var e = {\n type: type,\n date: date,\n unit: unit\n };\n if (step) {\n e.step = step;\n } else {\n e.minstep = 1;\n }\n if (min != null) e.min = min;\n if (max != null) e.max = max;\n return e;\n}\n\nfunction create(type, unit, base, step, min, max) {\n return entry(type,\n function(d) { return unit.offset(base, d); },\n function(d) { return unit.count(base, d); },\n step, min, max);\n}\n\nvar locale = [\n create('second', d3_time.second, baseDate),\n create('minute', d3_time.minute, baseDate),\n create('hour', d3_time.hour, baseDate),\n create('day', d3_time.day, baseDate, [1, 7]),\n create('month', d3_time.month, baseDate, [1, 3, 6]),\n create('year', d3_time.year, baseDate),\n\n // periodic units\n entry('seconds',\n function(d) { return new Date(1970, 0, 1, 0, 0, d); },\n function(d) { return date(d).getSeconds(); },\n null, 0, 59\n ),\n entry('minutes',\n function(d) { return new Date(1970, 0, 1, 0, d); },\n function(d) { return date(d).getMinutes(); },\n null, 0, 59\n ),\n entry('hours',\n function(d) { return new Date(1970, 0, 1, d); },\n function(d) { return date(d).getHours(); },\n null, 0, 23\n ),\n entry('weekdays',\n function(d) { return new Date(1970, 0, 4+d); },\n function(d) { return date(d).getDay(); },\n [1], 0, 6\n ),\n entry('dates',\n function(d) { return new Date(1970, 0, d); },\n function(d) { return date(d).getDate(); },\n [1], 1, 31\n ),\n entry('months',\n function(d) { return new Date(1970, d % 12, 1); },\n function(d) { return date(d).getMonth(); },\n [1], 0, 11\n )\n];\n\nvar utc = [\n create('second', d3_time.utcSecond, utcBaseDate),\n create('minute', d3_time.utcMinute, utcBaseDate),\n create('hour', d3_time.utcHour, utcBaseDate),\n create('day', d3_time.utcDay, utcBaseDate, [1, 7]),\n create('month', d3_time.utcMonth, utcBaseDate, [1, 3, 6]),\n create('year', d3_time.utcYear, utcBaseDate),\n\n // periodic units\n entry('seconds',\n function(d) { return new Date(Date.UTC(1970, 0, 1, 0, 0, d)); },\n function(d) { return date(d).getUTCSeconds(); },\n null, 0, 59\n ),\n entry('minutes',\n function(d) { return new Date(Date.UTC(1970, 0, 1, 0, d)); },\n function(d) { return date(d).getUTCMinutes(); },\n null, 0, 59\n ),\n entry('hours',\n function(d) { return new Date(Date.UTC(1970, 0, 1, d)); },\n function(d) { return date(d).getUTCHours(); },\n null, 0, 23\n ),\n entry('weekdays',\n function(d) { return new Date(Date.UTC(1970, 0, 4+d)); },\n function(d) { return date(d).getUTCDay(); },\n [1], 0, 6\n ),\n entry('dates',\n function(d) { return new Date(Date.UTC(1970, 0, d)); },\n function(d) { return date(d).getUTCDate(); },\n [1], 1, 31\n ),\n entry('months',\n function(d) { return new Date(Date.UTC(1970, d % 12, 1)); },\n function(d) { return date(d).getUTCMonth(); },\n [1], 0, 11\n )\n];\n\nvar STEPS = [\n [31536e6, 5], // 1-year\n [7776e6, 4], // 3-month\n [2592e6, 4], // 1-month\n [12096e5, 3], // 2-week\n [6048e5, 3], // 1-week\n [1728e5, 3], // 2-day\n [864e5, 3], // 1-day\n [432e5, 2], // 12-hour\n [216e5, 2], // 6-hour\n [108e5, 2], // 3-hour\n [36e5, 2], // 1-hour\n [18e5, 1], // 30-minute\n [9e5, 1], // 15-minute\n [3e5, 1], // 5-minute\n [6e4, 1], // 1-minute\n [3e4, 0], // 30-second\n [15e3, 0], // 15-second\n [5e3, 0], // 5-second\n [1e3, 0] // 1-second\n];\n\nfunction find(units, span, minb, maxb) {\n var step = STEPS[0], i, n, bins;\n\n for (i=1, n=STEPS.length; i step[0]) {\n bins = span / step[0];\n if (bins > maxb) {\n return units[STEPS[i-1][1]];\n }\n if (bins >= minb) {\n return units[step[1]];\n }\n }\n }\n return units[STEPS[n-1][1]];\n}\n\nfunction toUnitMap(units) {\n var map = {}, i, n;\n for (i=0, n=units.length; i 1 ?\n function(x) { return s.reduce(function(x,f) { return x[f]; }, x); } :\n function(x) { return x[f]; }\n );\n};\n\n// short-cut for accessor\nu.$ = u.accessor;\n\nu.mutator = function(f) {\n var s;\n return u.isString(f) && (s=u.field(f)).length > 1 ?\n function(x, v) {\n for (var i=0; i y) return sign[i];\n }\n return 0;\n };\n};\n\nu.cmp = function(a, b) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else if (a >= b) {\n return 0;\n } else if (a === null) {\n return -1;\n } else if (b === null) {\n return 1;\n }\n return NaN;\n};\n\nu.numcmp = function(a, b) { return a - b; };\n\nu.stablesort = function(array, sortBy, keyFn) {\n var indices = array.reduce(function(idx, v, i) {\n return (idx[keyFn(v)] = i, idx);\n }, {});\n\n array.sort(function(a, b) {\n var sa = sortBy(a),\n sb = sortBy(b);\n return sa < sb ? -1 : sa > sb ? 1\n : (indices[keyFn(a)] - indices[keyFn(b)]);\n });\n\n return array;\n};\n\n\n// string functions\n\nu.pad = function(s, length, pos, padchar) {\n padchar = padchar || \" \";\n var d = length - s.length;\n if (d <= 0) return s;\n switch (pos) {\n case 'left':\n return strrep(d, padchar) + s;\n case 'middle':\n case 'center':\n return strrep(Math.floor(d/2), padchar) +\n s + strrep(Math.ceil(d/2), padchar);\n default:\n return s + strrep(d, padchar);\n }\n};\n\nfunction strrep(n, str) {\n var s = \"\", i;\n for (i=0; i